From fc86922ec76612147b0c1ba351db48c07e0ef70a Mon Sep 17 00:00:00 2001 From: Andrew Pamment Date: Mon, 27 Mar 2017 22:27:37 +1000 Subject: [PATCH] More work on ccenter --- utils/ccenter/mailareas.c | 204 ++++++++++++++++++++++++++++++++++- utils/ccenter/systemconfig.c | 1 + 2 files changed, 204 insertions(+), 1 deletion(-) diff --git a/utils/ccenter/mailareas.c b/utils/ccenter/mailareas.c index 590f394..85cf8bd 100644 --- a/utils/ccenter/mailareas.c +++ b/utils/ccenter/mailareas.c @@ -5,6 +5,208 @@ extern struct bbs_config conf; extern CDKSCREEN *cdkscreen; +void edit_mail_area_file(int confer, int area) { + char *entrytext; + CDKENTRY *areaFile = newCDKEntry(cdkscreen, 11, 11, "Area Path & Filename", NULL, A_NORMAL, ' ', vMIXED, 48, 1, 1024, TRUE, FALSE); + + setCDKEntry(areaFile, conf.mail_conferences[confer]->mail_areas[area]->path, 1, 1024, TRUE); + + entrytext = activateCDKEntry(areaFile, 0); + + if (areaFile->exitType == vNORMAL) { + if (conf.mail_conferences[confer]->mail_areas[area]->path != NULL) { + free(conf.mail_conferences[confer]->mail_areas[area]->path); + } + conf.mail_conferences[confer]->mail_areas[area]->path = strdup(entrytext); + } + destroyCDKEntry(areaFile); +} + + +void edit_mail_area_name(int confer, int area) { + char *entrytext; + CDKENTRY *areaName = newCDKEntry(cdkscreen, 11, 11, "Area Name", NULL, A_NORMAL, ' ', vMIXED, 48, 1, 64, TRUE, FALSE); + + setCDKEntry(areaName, conf.mail_conferences[confer]->mail_areas[area]->name, 1, 64, TRUE); + + entrytext = activateCDKEntry(areaName, 0); + + if (areaName->exitType == vNORMAL) { + if (conf.mail_conferences[confer]->mail_areas[area]->name != NULL) { + free(conf.mail_conferences[confer]->mail_areas[area]->name); + } + conf.mail_conferences[confer]->mail_areas[area]->name = strdup(entrytext); + } + destroyCDKEntry(areaName); +} + +void edit_mail_area_qwkname(int confer, int area) { + char *entrytext; + CDKENTRY *areaQWKName = newCDKEntry(cdkscreen, 11, 11, "Area QWK/Bluewave Name", NULL, A_NORMAL, ' ', vMIXED, 48, 1, 8, TRUE, FALSE); + + setCDKEntry(areaQWKName, conf.mail_conferences[confer]->mail_areas[area]->qwkname, 1, 8, TRUE); + + entrytext = activateCDKEntry(areaQWKName, 0); + + if (areaQWKName->exitType == vNORMAL) { + if (conf.mail_conferences[confer]->mail_areas[area]->qwkname != NULL) { + free(conf.mail_conferences[confer]->mail_areas[area]->qwkname); + } + conf.mail_conferences[confer]->mail_areas[area]->qwkname = strdup(entrytext); + } + destroyCDKEntry(areaQWKName); +} + +void edit_mail_area_type(int confer, int area) { + char *itemList[] = {"Local", + "Echomail", + "Netmail", + "Newsgroup"}; + int selection; + int doexit = 0; + CDKSCROLL *mailAreaType = newCDKScroll(cdkscreen, 11, 11, RIGHT, 7, 30, "Area Type", itemList, 4,FALSE, A_STANDOUT, TRUE, FALSE); + + if (conf.mail_conferences[confer]->mail_areas[area]->type == TYPE_LOCAL_AREA) { + setCDKScrollCurrent(mailAreaType, 0); + } else if (conf.mail_conferences[confer]->mail_areas[area]->type == TYPE_ECHOMAIL_AREA) { + setCDKScrollCurrent(mailAreaType, 1); + } else if (conf.mail_conferences[confer]->mail_areas[area]->type == TYPE_NETMAIL_AREA) { + setCDKScrollCurrent(mailAreaType, 2); + } else { + setCDKScrollCurrent(mailAreaType, 3); + } + + while(!doexit) { + selection = activateCDKScroll(mailAreaType, 0); + if (mailAreaType->exitType == vESCAPE_HIT) { + break; + } + switch(selection) { + case 0: + conf.mail_conferences[confer]->mail_areas[area]->type = TYPE_LOCAL_AREA; + doexit = 1; + break; + case 1: + conf.mail_conferences[confer]->mail_areas[area]->type = TYPE_ECHOMAIL_AREA; + doexit = 1; + break; + case 2: + conf.mail_conferences[confer]->mail_areas[area]->type = TYPE_NETMAIL_AREA; + doexit = 1; + break; + case 3: + conf.mail_conferences[confer]->mail_areas[area]->type = TYPE_NEWSGROUP_AREA; + doexit = 1; + break; + default: + break; + } + } + destroyCDKScroll(mailAreaType); +} + +void display_error() { + char *message[] = {"A conference must have at least one area!"}; + char *buttons[] = {" OK "}; + CDKDIALOG *dialog = newCDKDialog(cdkscreen, 11, 11, message, 1, buttons, 1, A_STANDOUT, FALSE, TRUE, FALSE); + activateCDKDialog(dialog, 0); + destroyCDKDialog(dialog); +} + +void delete_mail_area(int confer, int area) { + char *message[] = {"Do you want to Delete Related Files?"}; + char *buttons[] = {" Yes ", " No "}; + char filename[PATH_MAX]; + + if (conf.mail_conferences[confer]->mail_area_count == 1) { + display_error(); + return; + } + + CDKDIALOG *dialog = newCDKDialog(cdkscreen, 11, 11, message, 1, buttons, 2, A_STANDOUT, FALSE, TRUE, FALSE); + + int selection = activateCDKDialog(dialog, 0); + int i; + + if (dialog->exitType == vESCAPE_HIT || (dialog->exitType == vNORMAL && selection == 1)) { + // do nothing + } else { + snprintf(filename, PATH_MAX, "%s.jdt", conf.mail_conferences[confer]->mail_areas[area]->path); + unlink(filename); + snprintf(filename, PATH_MAX, "%s.jdx", conf.mail_conferences[confer]->mail_areas[area]->path); + unlink(filename); + snprintf(filename, PATH_MAX, "%s.jhr", conf.mail_conferences[confer]->mail_areas[area]->path); + unlink(filename); + snprintf(filename, PATH_MAX, "%s.jlr", conf.mail_conferences[confer]->mail_areas[area]->path); + unlink(filename); + snprintf(filename, PATH_MAX, "%s.cmhw", conf.mail_conferences[confer]->mail_areas[area]->path); + unlink(filename); + } + destroyCDKDialog(dialog); + + free(conf.mail_conferences[confer]->mail_areas[area]->name); + free(conf.mail_conferences[confer]->mail_areas[area]->path); + free(conf.mail_conferences[confer]->mail_areas[area]->qwkname); + free(conf.mail_conferences[confer]->mail_areas[area]); + + for (i=area;imail_area_count - 1;i++) { + conf.mail_conferences[confer]->mail_areas[area] = conf.mail_conferences[confer]->mail_areas[area+1]; + } + conf.mail_conferences[confer]->mail_area_count--; + conf.mail_conferences[confer]->mail_areas = (struct mail_area **)realloc(conf.mail_conferences[confer]->mail_areas, sizeof(struct mail_area *) * conf.mail_conferences[confer]->mail_area_count); +} + +void edit_mail_area(int confer, int area) { + char *itemList[] = {"Name", + "Path & Filename", + "QWK/BlueWave Name", + "Read Sec. Level", + "Write Sec. Level", + "Type", + "Delete Mail Area"}; + + char buffer[1024]; + int selection; + + snprintf(buffer, 1024, "%s", conf.mail_conferences[confer]->mail_areas[area]->name); + + CDKSCROLL *editAreaList = newCDKScroll(cdkscreen, 9, 9, RIGHT, 10, 30, buffer, itemList, 7, FALSE, A_STANDOUT, TRUE, FALSE); + + while (1) { + selection = activateCDKScroll(editAreaList, 0); + if (editAreaList->exitType == vESCAPE_HIT) { + break; + } + switch(selection) { + case 0: + edit_mail_area_name(confer, area); + break; + case 1: + edit_mail_area_file(confer, area); + break; + case 2: + edit_mail_area_qwkname(confer, area); + break; + case 3: + choose_sec_level(&conf.mail_conferences[confer]->mail_areas[area]->read_sec_level, 11, 11, conf.mail_conferences[confer]->mail_areas[area]->read_sec_level); + break; + case 4: + choose_sec_level(&conf.mail_conferences[confer]->mail_areas[area]->write_sec_level, 11, 11, conf.mail_conferences[confer]->mail_areas[area]->write_sec_level); + break; + case 5: + edit_mail_area_type(confer, area); + break; + case 6: + delete_mail_area(confer, area); + break; + default: + break; + } + } + + destroyCDKScroll(editAreaList); +} + void edit_mail_areas(int confer) { char **itemlist; int selection; @@ -35,7 +237,7 @@ void edit_mail_areas(int confer) { // add new } else { // edit existing - //edit_mail_conference(selection - 1); + edit_mail_area(confer, selection - 1); } destroyCDKScroll(mailAreaList); for (i=0;imail_area_count+1;i++) { diff --git a/utils/ccenter/systemconfig.c b/utils/ccenter/systemconfig.c index fe7f105..b2afa79 100644 --- a/utils/ccenter/systemconfig.c +++ b/utils/ccenter/systemconfig.c @@ -313,6 +313,7 @@ void choose_sec_level(int *result, int x, int y, int selected) { res = (lvls[selection]); *result = res; + break; } destroyCDKScroll(secLevelOpts);