void ActivityBuilderFactory::BuildAccountPrefsWatch(ActivityBuilder& builder, MojObject& accountRev) { MojString name; GetAccountPrefsWatchActivityName(name); MojString desc; GetAccountPrefsWatchActivityDesc(desc); builder.SetName(name.data()); builder.SetDescription(desc.data()); builder.SetPersist(true); builder.SetExplicit(true); builder.SetImmediate(true, "low"); MojDbQuery trigger; MojErr err = trigger.from(PopAccountAdapter::POP_ACCOUNT_KIND); ErrorToException(err); err = trigger.where(PopAccountAdapter::ACCOUNT_ID, MojDbQuery::OpEq, m_accountId); ErrorToException(err); err = trigger.where("_revPop", MojDbQuery::OpGreaterThan, accountRev); ErrorToException(err); builder.SetDatabaseWatchTrigger(trigger); MojObject params; err = params.put(PopAccountAdapter::ACCOUNT_ID, m_accountId); ErrorToException(err); builder.SetCallback(ACCOUNT_PREFS_WATCH_CALLBACK, params); MojObject metadata; err = metadata.put(PopAccountAdapter::ACCOUNT_ID, m_accountId); ErrorToException(err); builder.SetMetadata(metadata); }
void ActivityBuilderFactory::BuildDeleteEmailsWatch(ActivityBuilder& builder) { MojString name; GetDeleteEmailsActivityName(name); MojString desc; GetDeleteEmailsActivityDesc(desc); builder.SetName(name.data()); builder.SetDescription(desc.data()); builder.SetPersist(true); builder.SetExplicit(true); builder.SetImmediate(true, "low"); // setup trigger MojDbQuery trigger; MojErr err = trigger.from(PopEmailAdapter::POP_EMAIL_KIND); ErrorToException(err); err = trigger.where("_del", MojDbQuery::OpEq, true); ErrorToException(err); builder.SetDatabaseWatchTrigger(trigger); // setup parameters (to be sent when trigger is called) MojObject params; err = params.put(PopFolderAdapter::ACCOUNT_ID, m_accountId); ErrorToException(err); builder.SetCallback(DELETE_EMAILS_CALLBACK, params); // put accountId in metadata MojObject metadata; err = metadata.put(PopFolderAdapter::ACCOUNT_ID, m_accountId); ErrorToException(err); builder.SetMetadata(metadata); }
void ImapActivityFactory::BuildPreferencesWatch(ActivityBuilder& ab, const MojObject& accountId, MojInt64 rev) { MojErr err; ab.SetName( GetPreferencesWatchName(accountId) ); ab.SetDescription("IMAP account preferences watch"); ab.SetPersist(true); ab.SetForeground(true); // Metadata MojObject metadata; SetMetadata(metadata, PREFS_WATCH_NAME, accountId); ab.SetMetadata(metadata); MojDbQuery trigger; err = trigger.from(ImapAccountAdapter::SCHEMA); ErrorToException(err); err = trigger.where(ImapAccountAdapter::ACCOUNT_ID, MojDbQuery::OpEq, accountId); ErrorToException(err); err = trigger.where(ImapAccountAdapter::CONFIG_REV, MojDbQuery::OpGreaterThan, rev); ErrorToException(err); ab.SetDatabaseWatchTrigger(trigger); MojObject params; err = params.put("accountId", accountId); ErrorToException(err); ab.SetCallback(PREFS_WATCH_CALLBACK, params); }
void ActivityBuilderFactory::BuildSentEmailsWatch(ActivityBuilder& builder, const MojObject& outboxFolderId, const MojObject& sentFolderId) { // activity to setup watch MojString name; GetSentEmailsWatchActivityName(name); // description of watch MojString desc; GetSentEmailsWatchActivityDesc(desc); builder.SetName(name.data()); builder.SetDescription(desc.data()); builder.SetPersist(true); builder.SetExplicit(true); builder.SetForeground(true); // setup trigger MojDbQuery trigger; MojErr err = trigger.from(EmailSchema::Kind::EMAIL); ErrorToException(err); err = trigger.where(EmailSchema::FOLDER_ID, MojDbQuery::OpEq, outboxFolderId); ErrorToException(err); err = trigger.where("sendStatus.sent", MojDbQuery::OpEq, true); ErrorToException(err); builder.SetDatabaseWatchTrigger(trigger); // setup parameters (to be sent when trigger is called) MojObject params; err = params.put(PopFolderAdapter::ACCOUNT_ID, m_accountId); ErrorToException(err); err = params.put(PopFolderAdapter::OUTBOX_FOLDER_ID, outboxFolderId); ErrorToException(err); err = params.put(PopFolderAdapter::SENT_FOLDER_ID, sentFolderId); ErrorToException(err); builder.SetCallback(SENT_EMAILS_WATCH_CALLBACK, params); // put accountId in metadata MojObject metadata; err = metadata.put("accountId", m_accountId); ErrorToException(err); builder.SetMetadata(metadata); }
void SmtpActivityFactory::BuildSmtpConfigWatch(ActivityBuilder& ab, const MojObject& accountId, MojInt64 rev) { MojErr err; MojString name; err = name.format(ACCOUNT_WATCH_ACTIVITY_FMT, AsJsonString(accountId).c_str()); ErrorToException(err); // description of watch MojString desc; err = desc.format("Watches SMTP config on account %s", AsJsonString(accountId).c_str()); ErrorToException(err); // activity to setup watch ab.SetName(name); ab.SetDescription(desc.data()); ab.SetPersist(true); ab.SetExplicit(true); ab.SetRequiresInternet(false); // trigger even if we don't have a network connection ab.SetImmediate(true, ActivityBuilder::PRIORITY_LOW); // setup trigger // NOTE: how to trigger only on SMTP config change? MojDbQuery trigger; err = trigger.from("com.palm.mail.account:1"); ErrorToException(err); err = trigger.where("accountId", MojDbQuery::OpEq, accountId); ErrorToException(err); if (rev > 0) { trigger.where("_revSmtp", MojDbQuery::OpGreaterThan, rev); } ab.SetDatabaseWatchTrigger(trigger); MojObject params; err = params.put("accountId", accountId); ErrorToException(err); ab.SetCallback(ACCOUNT_UPDATED_BUS_METHOD, params); ab.SetMetadata(params); }
void ImapActivityFactory::BuildDraftsWatch(ActivityBuilder& ab, const MojObject& accountId, const MojObject& folderId, MojInt64 rev) { MojErr err; ab.SetName( GetDraftsWatchName(accountId, folderId) ); ab.SetDescription("Watches for updates to draft emails"); ab.SetPersist(true); ab.SetExplicit(true); ab.SetForeground(true); // Metadata MojObject metadata; SetMetadata(metadata, DRAFTS_WATCH_NAME, accountId, folderId); ab.SetMetadata(metadata); MojDbQuery query; err = query.from(EmailSchema::Kind::EMAIL); ErrorToException(err); err = query.where(EmailSchema::FOLDER_ID, MojDbQuery::OpEq, folderId); ErrorToException(err); MojString editedDraftFlag; editedDraftFlag.format("%s.%s", EmailSchema::FLAGS, EmailSchema::Flags::EDITEDDRAFT); err = query.where(editedDraftFlag.data(), MojDbQuery::OpEq, true); ErrorToException(err); ab.SetDatabaseWatchTrigger(query); // Callback MojObject callbackParams; err = callbackParams.put("accountId", accountId); ErrorToException(err); err = callbackParams.put("folderId", accountId); ErrorToException(err); ab.SetCallback(DRAFTS_WATCH_CALLBACK, callbackParams); }
void ImapActivityFactory::BuildFolderWatch(ActivityBuilder& ab, const MojObject& accountId, const MojObject& folderId, MojInt64 rev) { MojErr err; MojDbQuery query; ab.SetName( GetFolderWatchName(accountId, folderId) ); ab.SetDescription("Watches for updates to emails"); ab.SetExplicit(true); ab.SetPersist(true); SetNetworkRequirements(ab, true); ab.SetImmediate(true, "low"); // Metadata MojObject metadata; SetMetadata(metadata, FOLDER_WATCH_NAME, accountId, folderId); ab.SetMetadata(metadata); // Query err = query.from(ImapEmailAdapter::IMAP_EMAIL_KIND); ErrorToException(err); err = query.where(EmailSchema::FOLDER_ID, MojDbQuery::OpEq, folderId); ErrorToException(err); err = query.where(ImapEmailAdapter::UPSYNC_REV, MojDbQuery::OpGreaterThan, rev); ErrorToException(err); err = query.includeDeleted(true); ErrorToException(err); ab.SetDatabaseWatchTrigger(query); // Callback MojObject callbackParams; err = callbackParams.put("accountId", accountId); ErrorToException(err); err = callbackParams.put("folderId", folderId); ErrorToException(err); ab.SetCallback(FOLDER_WATCH_CALLBACK, callbackParams); }
void ImapActivityFactory::BuildOutboxWatch(ActivityBuilder& ab, const MojObject& accountId, const MojObject& folderId, MojInt64 rev) { MojErr err; ab.SetName( GetOutboxWatchName(accountId, folderId) ); ab.SetDescription("Watches for sent emails in outbox"); ab.SetPersist(true); ab.SetExplicit(true); ab.SetForeground(true); // Metadata MojObject metadata; SetMetadata(metadata, OUTBOX_WATCH_NAME, accountId, folderId); ab.SetMetadata(metadata); MojDbQuery query; err = query.from(EmailSchema::Kind::EMAIL); ErrorToException(err); err = query.where(EmailSchema::FOLDER_ID, MojDbQuery::OpEq, folderId); ErrorToException(err); // sendStatus.sent MojString sentProp; sentProp.format("%s.%s",EmailSchema::SEND_STATUS, EmailSchema::SendStatus::SENT); err = query.where(sentProp.data(), MojDbQuery::OpEq, true); ErrorToException(err); ab.SetDatabaseWatchTrigger(query); // Callback MojObject callbackParams; err = callbackParams.put("accountId", accountId); ErrorToException(err); ab.SetCallback(OUTBOX_WATCH_CALLBACK, callbackParams); }