void remove_post() { if (!iscan(session()->GetCurrentMessageArea())) { bout << "\r\n|#6A file required is in use by another instance. Try again later.\r\n\n"; return; } if (session()->GetCurrentReadMessageArea() < 0) { bout << "\r\nNo subs available.\r\n\n"; return; } bool any = false, abort = false; bout.bprintf("\r\n\nPosts by you on %s\r\n\n", session()->current_sub().name); for (int j = 1; j <= session()->GetNumMessagesInCurrentMessageArea() && !abort; j++) { if (get_post(j)->ownersys == 0 && get_post(j)->owneruser == session()->usernum) { any = true; string buffer = StringPrintf("%u: %60.60s", j, get_post(j)->title); pla(buffer.c_str(), &abort); } } if (!any) { bout << "None.\r\n"; if (!cs()) { return; } } bout << "\r\n|#2Remove which? "; string postNumberToRemove = input(5); int nPostNumber = atoi(postNumberToRemove.c_str()); wwiv::bbs::OpenSub opened_sub(true); if (nPostNumber > 0 && nPostNumber <= session()->GetNumMessagesInCurrentMessageArea()) { if (((get_post(nPostNumber)->ownersys == 0) && (get_post(nPostNumber)->owneruser == session()->usernum)) || lcs()) { if ((get_post(nPostNumber)->owneruser == session()->usernum) && (get_post(nPostNumber)->ownersys == 0)) { User tu; session()->users()->ReadUser(&tu, get_post(nPostNumber)->owneruser); if (!tu.IsUserDeleted()) { if (date_to_daten(tu.GetFirstOn()) < static_cast<time_t>(get_post(nPostNumber)->daten)) { if (tu.GetNumMessagesPosted()) { tu.SetNumMessagesPosted(tu.GetNumMessagesPosted() - 1); session()->users()->WriteUser(&tu, get_post(nPostNumber)->owneruser); } } } } sysoplogf("- \"%s\" removed from %s", get_post(nPostNumber)->title, session()->current_sub().name); delete_message(nPostNumber); bout << "\r\nMessage removed.\r\n\n"; } } }
void downloaded(char *file_name, long lCharsPerSecond) { uploadsrec u; for (auto it = begin(session()->batch); it != end(session()->batch); it++) { const auto& b = *it; if (IsEquals(file_name, b.filename) && b.sending) { dliscan1(b.dir); int nRecNum = recno(b.filename); if (nRecNum > 0) { File file(g_szDownloadFileName); file.Open(File::modeReadWrite | File::modeBinary | File::modeCreateFile); FileAreaSetRecord(file, nRecNum); file.Read(&u, sizeof(uploadsrec)); session()->user()->SetFilesDownloaded(session()->user()->GetFilesDownloaded() + 1); session()->user()->SetDownloadK(session()->user()->GetDownloadK() + static_cast<int>(bytes_to_k(u.numbytes))); ++u.numdloads; FileAreaSetRecord(file, nRecNum); file.Write(&u, sizeof(uploadsrec)); file.Close(); if (lCharsPerSecond) { sysoplogf("Downloaded \"%s\" (%ld cps)", u.filename, lCharsPerSecond); } else { sysoplogf("Downloaded \"%s\"", u.filename); } if (syscfg.sysconfig & sysconfig_log_dl) { User user; session()->users()->ReadUser(&user, u.ownerusr); if (!user.IsUserDeleted()) { if (date_to_daten(user.GetFirstOn()) < static_cast<time_t>(u.daten)) { const string user_name_number = session()->names()->UserName(session()->usernum); ssm(u.ownerusr, 0, "%s downloaded|#1 \"%s\" |#7on %s", user_name_number.c_str(), u.filename, fulldate()); } } } } it = delbatch(it); return; } } sysoplogf("!!! Couldn't find \"%s\" in DL batch queue.", file_name); }
static void downloaded(const string& file_name, long lCharsPerSecond) { uploadsrec u; for (auto it = begin(session()->batch().entry); it != end(session()->batch().entry); it++) { const auto& b = *it; if (file_name == b.filename && b.sending) { dliscan1(b.dir); int nRecNum = recno(b.filename); if (nRecNum > 0) { File file(session()->download_filename_); file.Open(File::modeReadWrite | File::modeBinary | File::modeCreateFile); FileAreaSetRecord(file, nRecNum); file.Read(&u, sizeof(uploadsrec)); session()->user()->SetFilesDownloaded(session()->user()->GetFilesDownloaded() + 1); session()->user()->SetDownloadK(session()->user()->GetDownloadK() + static_cast<int>(bytes_to_k(u.numbytes))); ++u.numdloads; FileAreaSetRecord(file, nRecNum); file.Write(&u, sizeof(uploadsrec)); file.Close(); if (lCharsPerSecond) { sysoplog() << "Downloaded '" << u.filename << "' (" << lCharsPerSecond << " cps)."; } else { sysoplog() << "Downloaded '" << u.filename << "'."; } if (syscfg.sysconfig & sysconfig_log_dl) { User user; session()->users()->ReadUser(&user, u.ownerusr); if (!user.IsUserDeleted()) { if (date_to_daten(user.GetFirstOn()) < static_cast<time_t>(u.daten)) { const string user_name_number = session()->names()->UserName(session()->usernum); ssm(u.ownerusr, 0) << user_name_number << " downloaded|#1 \"" << u.filename << "\" |#7on " << fulldate(); } } } } it = delbatch(it); return; } } sysoplog() << "!!! Couldn't find \"" << file_name << "\" in DL batch queue."; }
/** * Download a file * * pszDirFileName = fname of your directory record * pszDownloadFileName = Filename to download * bFreeDL = true if this is a free download * bTitle = true if title is to be shown with file info */ int MenuDownload(const char *pszDirFileName, const char *pszDownloadFileName, bool bFreeDL, bool bTitle) { int bOkToDL; uploadsrec u; User ur; bool abort = false; int dn = FindDN(pszDirFileName); if (dn == -1) { MenuSysopLog("DLDNF"); /* DL - DIR NOT FOUND */ return 0; } dliscan1(dn); int nRecordNumber = recno(pszDownloadFileName); if (nRecordNumber <= 0) { checka(&abort); if (abort) { return -1; } else { MenuSysopLog("DLFNF"); /* DL - FILE NOT FOUND */ return 0; } } bool ok = true; while ((nRecordNumber > 0) && ok && !hangup) { session()->tleft(true); File fileDownload(session()->download_filename_); fileDownload.Open(File::modeBinary | File::modeReadOnly); FileAreaSetRecord(fileDownload, nRecordNumber); fileDownload.Read(&u, sizeof(uploadsrec)); fileDownload.Close(); bout.nl(); if (bTitle) { bout << "Directory : " << session()->directories[dn].name << wwiv::endl; } bOkToDL = printfileinfo(&u, dn); if (strncmp(u.filename, "WWIV4", 5) == 0 && !session()->HasConfigFlag(OP_FLAGS_NO_EASY_DL)) { bOkToDL = 1; } else { if (!ratio_ok()) { return -1; } } if (bOkToDL || bFreeDL) { write_inst(INST_LOC_DOWNLOAD, session()->current_user_dir().subnum, INST_FLAGS_NONE); string s1 = StrCat(session()->directories[dn].path, u.filename); if (session()->directories[dn].mask & mask_cdrom) { string s2 = StrCat(session()->directories[dn].path, u.filename); s1 = StrCat(session()->temp_directory(), u.filename); if (!File::Exists(s1)) { copyfile(s2, s1, false); } } bool sent = false; if (bOkToDL == -1) { send_file(s1.c_str(), &sent, &abort, u.filename, dn, -2L); } else { send_file(s1.c_str(), &sent, &abort, u.filename, dn, u.numbytes); } if (sent) { if (!bFreeDL) { session()->user()->SetFilesDownloaded(session()->user()->GetFilesDownloaded() + 1); session()->user()->SetDownloadK(session()->user()->GetDownloadK() + static_cast<int> (bytes_to_k(u.numbytes))); } ++u.numdloads; fileDownload.Open(File::modeBinary | File::modeReadWrite); FileAreaSetRecord(fileDownload, nRecordNumber); fileDownload.Write(&u, sizeof(uploadsrec)); fileDownload.Close(); sysoplog() << "Downloaded '" << u.filename << "'."; if (syscfg.sysconfig & sysconfig_log_dl) { session()->users()->ReadUser(&ur, u.ownerusr); if (!ur.IsUserDeleted()) { if (date_to_daten(ur.GetFirstOn()) < static_cast<time_t>(u.daten)) { const string username_num = session()->names()->UserName(session()->usernum); ssm(u.ownerusr, 0) << username_num << " downloaded '" << u.filename << "' on " << date(); } } } } bout.nl(2); bout.bprintf("Your ratio is now: %-6.3f\r\n", ratio()); if (session()->IsUserOnline()) { session()->UpdateTopScreen(); } } else { bout << "\r\n\nNot enough time left to D/L.\r\n"; } if (abort) { ok = false; } else { nRecordNumber = nrecno(pszDownloadFileName, nRecordNumber); } } return abort ? -1 : 1; }