examples/querymessages/main.cpp
changeset 5 603d3f8b6302
parent 0 876b1a06bc25
equal deleted inserted replaced
3:e4ebb16b39ea 5:603d3f8b6302
    39 ****************************************************************************/
    39 ****************************************************************************/
    40 
    40 
    41 #include <QCoreApplication>
    41 #include <QCoreApplication>
    42 #include <qmessagemanager.h>
    42 #include <qmessagemanager.h>
    43 #include <qdebug.h>
    43 #include <qdebug.h>
       
    44 #include <QMap>
    44 #ifdef Q_OS_SYMBIAN
    45 #ifdef Q_OS_SYMBIAN
    45 #include <iostream>
    46 #include <iostream>
    46 #endif
    47 #endif
    47 
    48 
    48 QTM_USE_NAMESPACE
    49 QTM_USE_NAMESPACE
    54 #else
    55 #else
    55     qDebug() << qPrintable(msg);
    56     qDebug() << qPrintable(msg);
    56 #endif
    57 #endif
    57 }
    58 }
    58 
    59 
       
    60 void usage()
       
    61 {
       
    62     QString msg("Usage: [<options>] [<datafields>]\n"
       
    63                   " Where <options> limit the types of messages shown, valid choices: -all, -sms, -mms, -email, -instantmessage, -incoming, -read, -inboxfolder, -draftsfolder, -outboxfolder, -sentfolder, -trashfolder\n"
       
    64                   "         To join options by logical OR use +, for option, eg \"+sms +mms\" will return sms OR mms messages\n"
       
    65                   " Where <datafields> specify what fields to print from matched messages, valid choices are: subject, date, receivedDate, status, size, priority, to, cc, bcc, from, type, body, attachments");
       
    66     printMessage(msg);
       
    67 }
       
    68 
       
    69 // create message filter as requested by command line options
       
    70 QMessageFilter createFilter(QStringList args)
       
    71 {
       
    72     QMessageFilter filter(QMessageFilter::byStatus(QMessage::Incoming));
       
    73     QMessageFilter customfilter;
       
    74     bool setCustomFilter = false;
       
    75     QMap<QString, QMessageFilter> filterMap;
       
    76     filterMap.insert(QLatin1String("all"), QMessageFilter());
       
    77     filterMap.insert(QLatin1String("sms"), QMessageFilter::byType(QMessage::Sms));
       
    78     filterMap.insert(QLatin1String("mms"), QMessageFilter::byType(QMessage::Mms));
       
    79     filterMap.insert(QLatin1String("email"), QMessageFilter::byType(QMessage::Email));
       
    80     filterMap.insert(QLatin1String("instantmessage"), QMessageFilter::byType(QMessage::InstantMessage));
       
    81     filterMap.insert(QLatin1String("incoming"), QMessageFilter::byStatus(QMessage::Incoming));
       
    82     filterMap.insert(QLatin1String("read"), QMessageFilter::byStatus(QMessage::Read));
       
    83     filterMap.insert(QLatin1String("inboxfolder"), QMessageFilter::byStandardFolder(QMessage::InboxFolder));
       
    84     filterMap.insert(QLatin1String("draftsfolder"), QMessageFilter::byStandardFolder(QMessage::DraftsFolder));
       
    85     filterMap.insert(QLatin1String("outboxfolder"), QMessageFilter::byStandardFolder(QMessage::OutboxFolder));
       
    86     filterMap.insert(QLatin1String("sentfolder"), QMessageFilter::byStandardFolder(QMessage::SentFolder));
       
    87     filterMap.insert(QLatin1String("trashfolder"), QMessageFilter::byStandardFolder(QMessage::TrashFolder));
       
    88 
       
    89     // process command line options after the application name
       
    90     foreach (const QString &arg, args.mid(1)){
       
    91         QMap<QString, QMessageFilter>::const_iterator iterator = filterMap.find(arg.toLower().mid(1));
       
    92         if (iterator != filterMap.end()){
       
    93             setCustomFilter = true;
       
    94             // use AND logic when compounding filter?
       
    95             if (arg[0] == '-' )
       
    96                 customfilter = customfilter & iterator.value();
       
    97             else
       
    98                 customfilter = customfilter | iterator.value();
       
    99         }
       
   100     }
       
   101 
       
   102     if (setCustomFilter)
       
   103         filter = customfilter;
       
   104 
       
   105     return filter;
       
   106 }
       
   107 
       
   108 
    59 int main(int argc, char *argv[])
   109 int main(int argc, char *argv[])
    60 {
   110 {
    61     QCoreApplication app(argc, argv);
   111     QCoreApplication app(argc, argv);
    62 
   112 
    63     printMessage("Querying messages...");
   113     printMessage("Querying messages...");
    64 
   114 
       
   115     // determine what data options were requested and if help was requested
       
   116     // if no data options were provided default to "subject"
       
   117     QStringList dataOptions;
       
   118     QStringList validDataOptions = QStringList() << "subject" << "date" << "receivedDate" << "status"
       
   119                     << "size" << "priority" << "to" << "cc" << "bcc" << "from"
       
   120                     << "type" << "body" << "attachments";
       
   121     foreach (const QString &arg, app.arguments()){
       
   122         if (arg == "-help"){
       
   123             usage();
       
   124             exit(1);
       
   125         }
       
   126         if (validDataOptions.contains(arg))
       
   127             dataOptions.append(arg);
       
   128     }
       
   129     if (dataOptions.isEmpty())
       
   130         dataOptions.append("subject");
       
   131 
    65 //! [setup-query]
   132 //! [setup-query]
    66     // Match all messages whose status field includes the Incoming flag
   133     // Create filter to match required messages
    67     QMessageFilter filter(QMessageFilter::byStatus(QMessage::Incoming));
   134     QMessageFilter filter = createFilter(app.arguments());
       
   135     // instead of the above use the following for a simple filter of all messages whose status field have the Incoming flag to be set, eg incoming emails
       
   136     //QMessageFilter filter(QMessageFilter::byStatus(QMessage::Incoming));
    68 
   137 
    69     // Order the matching results by their reception timestamp, in descending order
   138     // Order the matching results by their reception timestamp, in descending order
    70     QMessageSortOrder sortOrder(QMessageSortOrder::byReceptionTimeStamp(Qt::DescendingOrder));
   139     QMessageSortOrder sortOrder(QMessageSortOrder::byReceptionTimeStamp(Qt::DescendingOrder));
    71 //! [setup-query]
   140 //! [setup-query]
    72 
   141 
    88 //! [iterate-results]
   157 //! [iterate-results]
    89 
   158 
    90         if (manager.error() == QMessageManager::NoError) {
   159         if (manager.error() == QMessageManager::NoError) {
    91             QStringList result;
   160             QStringList result;
    92 
   161 
    93             if (app.arguments().count() < 2) {
       
    94                 // Default to printing only the subject
       
    95                 result.append(message.subject());
       
    96             } else {
       
    97 //! [generate-output]
   162 //! [generate-output]
    98                 // Extract the requested data items from this message
   163             // Extract the requested data items from this message
    99                 foreach (const QString &arg, app.arguments().mid(1)) {
   164             foreach (const QString &arg, dataOptions) {
   100                     if (arg == "subject") {
   165                 if (arg == "subject") {
   101                         result.append(message.subject());
   166                     result.append(message.subject());
   102                     } else if (arg == "date") {
   167                 } else if (arg == "date") {
   103                         result.append(message.date().toLocalTime().toString());
   168                     result.append(message.date().toLocalTime().toString());
   104 //! [generate-output]
   169 //! [generate-output]
   105                     } else if (arg == "receivedDate") {
   170                 } else if (arg == "receivedDate") {
   106                         result.append(message.receivedDate().toLocalTime().toString());
   171                     result.append(message.receivedDate().toLocalTime().toString());
   107                     } else if (arg == "size") {
   172                 } else if (arg == "size") {
   108                         result.append(QString::number(message.size()));
   173                     result.append(QString::number(message.size()));
   109                     } else if (arg == "priority") {
   174                 } else if (arg == "priority") {
   110                         result.append(message.priority() == QMessage::HighPriority ? "High" : (message.priority() == QMessage::LowPriority ? "Low" : "Normal"));
   175                         result.append(message.priority() == QMessage::HighPriority ? "High" : (message.priority() == QMessage::LowPriority ? "Low" : "Normal"));
   111                     } else if ((arg == "to") || (arg == "cc") || (arg == "bcc")) {
   176                 } else if ((arg == "to") || (arg == "cc") || (arg == "bcc")) {
   112                         QStringList addresses;
   177                     QStringList addresses;
   113                         foreach (const QMessageAddress &addr, (arg == "to" ? message.to() : (arg == "cc" ? message.cc() : message.bcc()))) {
   178                     foreach (const QMessageAddress &addr, (arg == "to" ? message.to() : (arg == "cc" ? message.cc() : message.bcc()))) {
   114                             addresses.append(addr.addressee());
   179                         addresses.append(addr.addressee());
   115                         }
       
   116                         result.append(addresses.join(","));
       
   117                     } else if (arg == "from") {
       
   118                         result.append(message.from().addressee());
       
   119                     } else if (arg == "type") {
       
   120                         result.append(message.contentType() + '/' + message.contentSubType());
       
   121                     } else if (arg == "body") {
       
   122                         result.append(message.find(message.bodyId()).textContent());
       
   123                     } else if (arg == "attachments") {
       
   124                         QStringList fileNames;
       
   125                         foreach (const QMessageContentContainerId &id, message.attachmentIds()) {
       
   126                             fileNames.append(message.find(id).suggestedFileName());
       
   127                         }
       
   128                         result.append(fileNames.join(","));
       
   129                     }
   180                     }
       
   181                     result.append(addresses.join(","));
       
   182                 } else if (arg == "from") {
       
   183                     result.append(message.from().addressee());
       
   184                 } else if (arg == "type") {
       
   185                     result.append(message.contentType() + '/' + message.contentSubType());
       
   186                 } else if (arg == "body") {
       
   187                     result.append(message.find(message.bodyId()).textContent());
       
   188                 } else if (arg == "status") {
       
   189                     result.append(QString("0x%1").arg(QString::number(message.status())));
       
   190                 } else if (arg == "attachments") {
       
   191                     QStringList fileNames;
       
   192                     foreach (const QMessageContentContainerId &id, message.attachmentIds()) {
       
   193                         fileNames.append(message.find(id).suggestedFileName());
       
   194                     }
       
   195                     result.append(fileNames.join(","));
   130                 }
   196                 }
   131             }
   197             }
   132 
   198 
   133 //! [print-result]
   199 //! [print-result]
   134             printMessage(QString::number(++n) + '\t' + result.join("\t"));
   200             printMessage(QString::number(++n) + '\t' + result.join("\t"));