From 990759ea84c1fce9112fef69634b53d9d5e23de8 Mon Sep 17 00:00:00 2001 From: Andrew Pamment Date: Wed, 7 Dec 2016 12:46:55 +1000 Subject: [PATCH] Made some improvements to fileapprove utility --- file_id.diz | 15 +++-- utils/fileapprove/fileapprove.c | 97 +++++++++++++++++++++++++++++---- 2 files changed, 94 insertions(+), 18 deletions(-) diff --git a/file_id.diz b/file_id.diz index 30035c7..9709bd4 100644 --- a/file_id.diz +++ b/file_id.diz @@ -1,21 +1,24 @@ . . . .__ .__ __. |\/| _. _ * _.;_/ _. [__)[__)(__ -| |(_](_]|(_.| \(_] [__)[__).__) v0.4a +| |(_](_]|(_.| \(_] [__)[__).__) v0.5a -------._|---------------------------------- Magicka BBS is a Free BBS System for Linux and FreeBSD. While Still in the early stages of development, we have most of the features you find in modern BBS software. - * FTN / WWIVnet Network Support + * FTN Network Support * Zmodem & Long filename Support * SSH Server & Telnet Server * External Editor Support * Compiles and runs on Raspberry Pi * LUA Scripting Support * Optional WWW server. + * Bluewave Support + * TIC file processor -THIS IS ALPHA SOFTWARE! If you're looking -for something different, this might be for -you. If you're looking for something -established, try Mystic, WWIV or Synchronet. +WWIVnet Support is known not to work, and +will be removed. Don't use it! + +THIS IS ALPHA SOFTWARE! Use at your own +risk! diff --git a/utils/fileapprove/fileapprove.c b/utils/fileapprove/fileapprove.c index 5f2ab6b..e9ce7c7 100644 --- a/utils/fileapprove/fileapprove.c +++ b/utils/fileapprove/fileapprove.c @@ -1,5 +1,5 @@ #include -#include +#include #include #include #include @@ -17,6 +17,57 @@ int fcount = 0; sqlite3 *db; CDKSCREEN *cdkscreen = 0; +static int deleteFile(EObjectType cdktype, void *object, void *clientData, chtype input) { + int i; + CDKSCROLL *s = (CDKSCROLL *)object; + sqlite3_stmt *res; + int rc; + struct stat st; + char sql_delete[] = "DELETE FROM files WHERE filename LIKE ?"; + int index = getCDKScrollCurrent(s); + if (index >= fcount) { + return FALSE; + } + rc = sqlite3_prepare_v2(db, sql_delete, -1, &res, 0); + if (rc != SQLITE_OK) { + fprintf(stderr, "Error deleting file! : %s\r\n", sqlite3_errmsg(db)); + return FALSE; + } + sqlite3_bind_text(res, 1, f[index]->name, -1, 0); + + sqlite3_step(res); + sqlite3_finalize(res); + + if (stat(f[index]->name, &st) == 0) { + remove(f[index]->name); + } + + for (i=index;iname, &st) == 0) { f[index]->approved = 1; - sprintf(filenames[index], "%s", basename(f[index]->name)); + sprintf(filenames[index], "%s (approved)", basename(f[index]->name)); rc = sqlite3_prepare_v2(db, sql_approve, -1, &res, 0); if (rc != SQLITE_OK) { fprintf(stderr, "Error approving file! : %s\r\n", sqlite3_errmsg(db)); @@ -43,8 +94,13 @@ static void doDisapprove(int index) { char sql_approve[] = "UPDATE files SET approved=0 WHERE filename LIKE ?"; sqlite3_stmt *res; int rc; + struct stat s; f[index]->approved = 0; - sprintf(filenames[index], "%s", basename(f[index]->name)); + if (stat(f[index]->name, &s) != 0) { + sprintf(filenames[index], "%s (missing)", basename(f[index]->name)); + } else { + sprintf(filenames[index], "%s (unapproved)", basename(f[index]->name)); + } rc = sqlite3_prepare_v2(db, sql_approve, -1, &res, 0); if (rc != SQLITE_OK) { fprintf(stderr, "Error approving file! : %s\r\n", sqlite3_errmsg(db)); @@ -62,6 +118,9 @@ static int approveFile(EObjectType cdktype, void *object, void *clientData, chty int index = getCDKScrollCurrent(s); + if (index >= fcount) { + return FALSE; + } if (f[index]->approved == 1) { doDisapprove(index); } else { @@ -69,14 +128,15 @@ static int approveFile(EObjectType cdktype, void *object, void *clientData, chty } setCDKScrollItems(s, filenames, fcount, FALSE); refreshCDKScreen(cdkscreen); + return FALSE; } int main(int argc, char **argv) { CDKSCROLL *scrollList = 0; - + CDKLABEL *instructions = 0; WINDOW *cursesWin = 0; - + char *message[] = {"Press A to toggle Activation", "Press D to Delete file", "Press ESC to exit"}; char sql_read[] = "SELECT filename, description, approved FROM files"; CDK_PARAMS params; @@ -96,11 +156,20 @@ int main(int argc, char **argv) { sprintf(title, "%s",basename(CDKparamString (¶ms, 'd'))); + instructions = newCDKLabel ( + cdkscreen, + 40, + 1, + message, + 3, + TRUE, + TRUE); + drawCDKLabel(instructions, TRUE); scrollList = newCDKScroll(cdkscreen, 2, 1, 1, - 23, + 36, 36, title, NULL, @@ -108,7 +177,7 @@ int main(int argc, char **argv) { FALSE, A_REVERSE, TRUE, - FALSE); + TRUE); if (scrollList == 0) { fprintf(stderr, "Unable to make scrolllist!"); destroyCDKScreen(cdkscreen); @@ -136,6 +205,9 @@ int main(int argc, char **argv) { exit(1); } + f = NULL; + filenames = NULL; + while(sqlite3_step(res) == SQLITE_ROW) { if (fcount == 0) { f = (struct files **)malloc(sizeof(struct files *)); @@ -156,17 +228,17 @@ int main(int argc, char **argv) { f[fcount]->description = strdup((char *)sqlite3_column_text(res, 1)); f[fcount]->approved = sqlite3_column_int(res, 2); - filenames[fcount] = (char *)malloc(strlen(basename(f[fcount]->name) + 9)); + filenames[fcount] = (char *)malloc(strlen(basename(f[fcount]->name) + 30)); if (stat(f[fcount]->name, &s) != 0) { - sprintf(filenames[fcount], "%s", basename(f[fcount]->name)); + sprintf(filenames[fcount], "%s (missing)", basename(f[fcount]->name)); if (f[fcount]->approved == 1) { // unapprove missing file doDisapprove(fcount); } } else if (f[fcount]->approved) { - sprintf(filenames[fcount], "%s", basename(f[fcount]->name)); + sprintf(filenames[fcount], "%s (approved)", basename(f[fcount]->name)); } else { - sprintf(filenames[fcount], "%s", basename(f[fcount]->name)); + sprintf(filenames[fcount], "%s (unapproved)", basename(f[fcount]->name)); } fcount++; } @@ -175,6 +247,7 @@ int main(int argc, char **argv) { setCDKScrollItems(scrollList, filenames, fcount, FALSE); bindCDKObject (vSCROLL, scrollList, 'a', approveFile, NULL); + bindCDKObject (vSCROLL, scrollList, 'd', deleteFile, NULL); while(1) { selection = activateCDKScroll(scrollList, 0); @@ -191,7 +264,7 @@ int main(int argc, char **argv) { free(f); free(filenames); - + destroyCDKLabel(instructions); destroyCDKScroll(scrollList); destroyCDKScreen(cdkscreen); sqlite3_close(db);