Added very basic sharing functionality.
[grr] / src / googlereader.cpp
index 5919ca4..9cf88ba 100644 (file)
@@ -58,7 +58,15 @@ GoogleReader::GoogleReader() {
        Feed *feed = new Feed(this);
        feed->id = "user/-/state/com.google/starred";
        feed->title = "Starred items";
-       feed->special = true;
+       feed->special = 2;
+       feeds.insert(feed->id, feed);
+       connect(feed, SIGNAL(allReadChanged()), SIGNAL(allReadChanged()));
+
+       /* Add the virtual 'Shared items' feed */
+       feed = new Feed(this);
+       feed->id = "user/-/state/com.google/broadcast";
+       feed->title = "Shared items";
+       feed->special = 1;
        feeds.insert(feed->id, feed);
        connect(feed, SIGNAL(allReadChanged()), SIGNAL(allReadChanged()));
 }
@@ -196,6 +204,8 @@ void GoogleReader::parseFeed(QDomDocument dom) {
                                                entry.flags |= ENTRY_FLAG_READ;
                                        else if(label == "starred")
                                                entry.flags |= ENTRY_FLAG_STARRED;
+                                       else if(label == "broadcast")
+                                               entry.flags |= ENTRY_FLAG_SHARED;
                                }
                        }
 
@@ -218,6 +228,8 @@ void GoogleReader::parseFeed(QDomDocument dom) {
                else if(name == "id") {
                        if(e.text().endsWith("/state/com.google/starred"))
                                feedsource = "user/-/state/com.google/starred";
+                       else if(e.text().endsWith("/state/com.google/broadcast"))
+                               feedsource = "user/-/state/com.google/broadcast";
                }
        }
 
@@ -284,7 +296,7 @@ void GoogleReader::parseSubscriptions(QDomDocument dom) {
 
        /* Delete feeds no longer subscribed to  */
        for(i = feeds.begin(); i != feeds.end(); ++i) {
-               if(i.value()->subscription_updated == false && i.value()->special == false) {
+               if(i.value()->subscription_updated == false && i.value()->special == 0) {
                        printf("DELETED: %s\n", i.value()->title.toLatin1().data());
                        i = feeds.erase(i);
                }
@@ -394,11 +406,8 @@ void GoogleReader::updateUnread() {
 }
 
 static bool compareFeedItems(const Feed *f1, const Feed *f2) {
-       if(f1->special && !f2->special)
-               return true;
-
-       if(f2->special && !f1->special)
-               return false;
+       if(f1->special || f2->special)
+               return f1->special > f2->special;
 
        if(f1->cat_label == f2->cat_label)
                return f1->title.toLower() < f2->title.toLower();
@@ -550,3 +559,36 @@ void Entry::markStar(bool mark_star) {
                flags &= ~ENTRY_FLAG_STARRED;
        }
 }
+
+void Entry::markShared(bool mark_shared) {
+       /* Check if the shared flag differs from the requested state */
+       if(((flags & ENTRY_FLAG_SHARED) != 0) == mark_shared)
+               return;
+
+       QNetworkRequest request;
+       request.setUrl(feed->reader->edittag_url);
+
+       postshared.open(QBuffer::ReadWrite | QBuffer::Truncate);
+       postshared.write("i=");
+       postshared.write(QUrl::toPercentEncoding(id));
+       if(mark_shared)
+               postshared.write("&a=");
+       else
+               postshared.write("&r=");
+       postshared.write(QUrl::toPercentEncoding("user/-/state/com.google/broadcast"));
+       postshared.write("&ac=edit-tags&T=");
+       postshared.write(QUrl::toPercentEncoding(feed->reader->token));
+       postshared.seek(0);
+       feed->reader->manager.post(request, &postshared);
+
+       Feed *shared = feed->reader->feeds.value("user/-/state/com.google/broadcast");
+
+       if(mark_shared) {
+               shared->addEntry(this);
+               flags |= ENTRY_FLAG_SHARED;
+       }
+       else {
+               shared->delEntry(this);
+               flags &= ~ENTRY_FLAG_SHARED;
+       }
+}