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";
    }
  }
}
Пример #2
0
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);
}
Пример #3
0
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.";
}
Пример #4
0
/**
 *  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;
}