Add global music player, invoicing/payment system, account subpages, mail account admin, and the qualityiron.vegas Jet 2.0 port
Jet interpreter (Tag.cpp, __call.cpp, __imap*.cpp/h, __smtpsend.cpp/h, __imapemptyfolder.cpp/h - new): assorted parser/tag fixes found across this work - a stray literal-tag-in-comment and backslash-quote parser corruption class, a dangling-pointer fix, a __call.cpp fd leak, IMAP folder-management tags, multi-account/per-host IMAP support, and a smtpsend Message-ID fix. barant.com site (jetc/barant-site/): - A site-wide persistent music player (header band, playlist/queue, stereo FFT EQ, session-persisted state) fed by new library/ ianslibrary/music song-list subpages. - /account split into info/phones/invoices subpages; a full invoicing and Square payment system (create/edit/copy/pay/email invoice); admin invoice management and mail-account management subpages. - /services split into overview/hosting/siptrunking/documents subpages, retiring the old standalone pages. - SIPPHONE.tag: a Jet 2.0 WebRTC softphone tag. - main.css/spa.js/email.js: the SPA loading indicator, the music player band styling, and assorted fixes accumulated alongside this work. qualityiron-site/: the qualityiron.vegas job/contractor/customer/ document management app, ported from its original Jet 1.4 codebase to Jet 2.0 as barant.coms APIServers second multi-tenant site. wcwc/wcwc.jet: the WCWC site Jet source (wcwc.jtc build output not included). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
905fbafa5a
commit
b8f7793773
406 files changed
+15803
-587
No files matched your search
+27
-2
@@ -559,8 +559,15 @@ namespace jet {
|
||||
coreutils::MString passwordVal = resolveKeyword("password");
|
||||
|
||||
coreutils::JFile config(configPath);
|
||||
std::string host = config.getString("host");
|
||||
long port = (long)config.getNumber("port");
|
||||
// host/port keywords override the config file's own values when
|
||||
// present - lets a caller reuse one config file (still needed for
|
||||
// caCertificate/smtpPort) across many accounts that each live on
|
||||
// a different mail server, rather than requiring a separate config
|
||||
// file per server. Every existing caller omits these keywords, so
|
||||
// behavior is unchanged for them - config's own host/port is still
|
||||
// the only thing read in that case.
|
||||
std::string host = keywordDefined("host") ? resolveKeyword("host").str() : config.getString("host");
|
||||
long port = keywordDefined("port") ? strtol(resolveKeyword("port").str().c_str(), nullptr, 10) : (long)config.getNumber("port");
|
||||
if (port <= 0)
|
||||
port = 993;
|
||||
|
||||
@@ -1034,6 +1041,24 @@ namespace jet {
|
||||
return coreutils::MString(std::string("{\"ok\":") + (ok ? "true" : "false") + "}");
|
||||
}
|
||||
|
||||
coreutils::MString __imap::emptyFolder(const std::string &folder) {
|
||||
if (!selectFolderIfNeeded(folder))
|
||||
throw coreutils::Exception("imap: could not select folder " + folder, __FILE__, __LINE__, 502);
|
||||
|
||||
std::string tag = nextTag();
|
||||
sendLine(tag + " UID STORE 1:* +FLAGS (\\Deleted)");
|
||||
auto lines = readUntilTagged(tag);
|
||||
bool ok1 = taggedOk(lines, tag);
|
||||
|
||||
std::string tag2 = nextTag();
|
||||
sendLine(tag2 + " EXPUNGE");
|
||||
auto lines2 = readUntilTagged(tag2);
|
||||
bool ok2 = taggedOk(lines2, tag2);
|
||||
|
||||
bool ok = ok1 && ok2;
|
||||
return coreutils::MString(std::string("{\"ok\":") + (ok ? "true" : "false") + "}");
|
||||
}
|
||||
|
||||
// BARANTMail (see __IMAP_COPY.cpp) implements COPY but not the
|
||||
// RFC 6851 MOVE extension - not surprising, since the whole point
|
||||
// of that extension was standardizing what every real-world client
|
||||
|
||||
Reference in new issue
Block a user