diff --git a/src/sbbs3/bat_xfer.cpp b/src/sbbs3/bat_xfer.cpp index 1f7072ffd51e0b7e85064b669c030fda1f95caf7..76c7799aadfddc713796802640286e6b38f2302b 100644 --- a/src/sbbs3/bat_xfer.cpp +++ b/src/sbbs3/bat_xfer.cpp @@ -148,12 +148,14 @@ void sbbs_t::batchmenu() if((n = batup_total()) > 0) { bprintf(text[RemoveWhichFromUlQueue], n); if(getstr(str, MAX_FILENAME_LEN, K_NONE) > 0) - batch_file_remove(&cfg, useron.number, XFER_BATCH_UPLOAD, str); + if(!batch_file_remove(&cfg, useron.number, XFER_BATCH_UPLOAD, str) && (n = atoi(str)) > 0) + batch_file_remove_n(&cfg, useron.number, XFER_BATCH_UPLOAD, n - 1); } if((n = batdn_total()) > 0) { bprintf(text[RemoveWhichFromDlQueue], n); if(getstr(str, MAX_FILENAME_LEN, K_NONE) > 0) - batch_file_remove(&cfg, useron.number, XFER_BATCH_DOWNLOAD, str); + if(!batch_file_remove(&cfg, useron.number, XFER_BATCH_DOWNLOAD, str) && (n = atoi(str)) > 0) + batch_file_remove_n(&cfg, useron.number, XFER_BATCH_DOWNLOAD, n - 1); } break; case 'U': diff --git a/src/sbbs3/filedat.c b/src/sbbs3/filedat.c index e69c2de26fc9812c9dc8e20c985f3664c8b294ab..8088d734fd0c5a07b7ebe4a51bb25233a14b523e 100644 --- a/src/sbbs3/filedat.c +++ b/src/sbbs3/filedat.c @@ -411,6 +411,25 @@ bool batch_file_remove(scfg_t* cfg, uint usernumber, enum XFER_TYPE type, const return result; } +// 'n' is zero-based index of file to remove +bool batch_file_remove_n(scfg_t* cfg, uint usernumber, enum XFER_TYPE type, uint n) +{ + FILE* fp = batch_list_open(cfg, usernumber, type, /* create: */false); + if(fp == NULL) + return false; + str_list_t ini = iniReadFile(fp); + str_list_t files = iniGetSectionList(ini, NULL); + bool result = false; + if(n < strListCount(files)) + result = iniRemoveSection(&ini, files[n]); + iniWriteFile(fp, ini); + iniCloseFile(fp); + iniFreeStringList(ini); + iniFreeStringList(files); + return result; +} + + bool batch_file_exists(scfg_t* cfg, uint usernumber, enum XFER_TYPE type, const char* filename) { FILE* fp = batch_list_open(cfg, usernumber, type, /* create: */false); diff --git a/src/sbbs3/filedat.h b/src/sbbs3/filedat.h index f44c9122fc24275ced4bf496668d597959b3fbd7..057df739bab3b10190f2bfff41ee87a43e861274 100644 --- a/src/sbbs3/filedat.h +++ b/src/sbbs3/filedat.h @@ -87,6 +87,7 @@ DLLEXPORT bool batch_list_clear(scfg_t*, uint usernumber, enum XFER_TYPE); DLLEXPORT bool batch_file_add(scfg_t*, uint usernumber, enum XFER_TYPE, file_t*); DLLEXPORT bool batch_file_exists(scfg_t*, uint usernumber, enum XFER_TYPE, const char* filename); DLLEXPORT bool batch_file_remove(scfg_t*, uint usernumber, enum XFER_TYPE, const char* filename); +DLLEXPORT bool batch_file_remove_n(scfg_t*, uint usernumber, enum XFER_TYPE, uint n); DLLEXPORT size_t batch_file_count(scfg_t*, uint usernumber, enum XFER_TYPE); DLLEXPORT bool batch_file_get(scfg_t*, str_list_t, const char* filename, file_t*); DLLEXPORT int batch_file_dir(scfg_t*, str_list_t, const char* filename);