From: Jan Dumon Date: Thu, 4 Mar 2010 22:03:14 +0000 (+0100) Subject: Added very basic sharing functionality. X-Git-Tag: 0.0.3~3 X-Git-Url: http://git.maemo.org/git/?p=grr;a=commitdiff_plain;h=a872ba279dec5ca71fd6a0064601b8935d3e5e12 Added very basic sharing functionality. --- diff --git a/src/contentwindow.cpp b/src/contentwindow.cpp index 8d49b20..2acc73e 100644 --- a/src/contentwindow.cpp +++ b/src/contentwindow.cpp @@ -210,6 +210,11 @@ ContentWindow::ContentWindow(QWidget *parent, Entry *e) : QMainWindow(parent) { starred->setChecked((entry->flags & ENTRY_FLAG_STARRED)); menuBar()->addAction(starred); + shared = new QAction(tr("Shared"), this); + shared->setCheckable(true); + shared->setChecked((entry->flags & ENTRY_FLAG_SHARED)); + menuBar()->addAction(shared); + keepUnread = new QAction(tr("Keep unread"), this); keepUnread->setCheckable(true); keepUnread->setEnabled((entry->flags & ENTRY_FLAG_LOCKED) == 0); @@ -260,22 +265,18 @@ void ContentWindow::closeEvent(QCloseEvent *event) { grabZoomKeys(false); entry->markRead(!keepUnread->isChecked()); entry->markStar(starred->isChecked()); + entry->markShared(shared->isChecked()); QMainWindow::closeEvent(event); } void ContentWindow::grabZoomKeys(bool grab) { - if (!winId()) { - qWarning("Can't grab keys unless we have a window id"); + if(!winId()) return; - } unsigned long val = (grab) ? 1 : 0; Atom atom = XInternAtom(QX11Info::display(), "_HILDON_ZOOM_KEY_ATOM", False); - if (!atom) { - qWarning("Unable to obtain _HILDON_ZOOM_KEY_ATOM. This example will only work " - "on a Maemo 5 device!"); + if(!atom) return; - } XChangeProperty (QX11Info::display(), winId(), atom, XA_INTEGER, 32, PropModeReplace, reinterpret_cast(&val), 1); diff --git a/src/contentwindow.h b/src/contentwindow.h index 26ad9bb..cdc0a78 100644 --- a/src/contentwindow.h +++ b/src/contentwindow.h @@ -24,6 +24,7 @@ class ContentWindow : public QMainWindow { Entry *entry; QGraphicsWebView *webview; QAction *starred; + QAction *shared; QAction *keepUnread; void grabZoomKeys(bool grab); diff --git a/src/entrieswindow.cpp b/src/entrieswindow.cpp index 7106aab..02192bc 100644 --- a/src/entrieswindow.cpp +++ b/src/entrieswindow.cpp @@ -123,7 +123,7 @@ void EntryListDelegate::paint(QPainter *painter, const QStyleOptionViewItem &opt QRect rect = option.rect; rect.adjust(20, 8, -20, -8); QPoint topleft = rect.topLeft(); - topleft.ry() += 2; + QPoint bottomleft = rect.bottomLeft(); rect.adjust(36, 0, 0, 0); painter->save(); @@ -154,6 +154,12 @@ void EntryListDelegate::paint(QPainter *painter, const QStyleOptionViewItem &opt painter->drawImage(topleft, img); } + if(e->flags & ENTRY_FLAG_SHARED) { + QImage img = QImage(QLatin1String(":/images/shared-1")); + bottomleft.ry() -= img.height(); + painter->drawImage(bottomleft, img); + } + painter->restore(); } diff --git a/src/googlereader.cpp b/src/googlereader.cpp index 5919ca4..9cf88ba 100644 --- a/src/googlereader.cpp +++ b/src/googlereader.cpp @@ -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; + } +} diff --git a/src/googlereader.h b/src/googlereader.h index 24cad09..cd47dd2 100644 --- a/src/googlereader.h +++ b/src/googlereader.h @@ -33,14 +33,14 @@ class Feed : public QObject { GoogleReader *reader; - bool special; + int special; void updateSubscription(Feed *feed); Feed(GoogleReader *gr = NULL) : QObject() { unread = 0; reader = gr; - special = false; + special = 0; } void fetch(bool); @@ -66,6 +66,7 @@ Q_DECLARE_METATYPE(Feed *) #define ENTRY_FLAG_READ 0x00000001 #define ENTRY_FLAG_STARRED 0x00000002 #define ENTRY_FLAG_LOCKED 0x00000004 +#define ENTRY_FLAG_SHARED 0x00000008 class Entry : public QObject { Q_OBJECT @@ -101,10 +102,12 @@ class Entry : public QObject { void markRead(bool); void markStar(bool); + void markShared(bool); private: QBuffer postread; QBuffer poststar; + QBuffer postshared; }; Q_DECLARE_METATYPE(Entry *) diff --git a/src/grr.qrc b/src/grr.qrc index cd8145e..199dab1 100644 --- a/src/grr.qrc +++ b/src/grr.qrc @@ -1,7 +1,7 @@ - images/star-0.png images/star-1.png + images/shared-1.png diff --git a/src/images/shared-0.png b/src/images/shared-0.png new file mode 100644 index 0000000..ab42956 Binary files /dev/null and b/src/images/shared-0.png differ diff --git a/src/images/shared-1.png b/src/images/shared-1.png new file mode 100644 index 0000000..49dbddf Binary files /dev/null and b/src/images/shared-1.png differ diff --git a/src/images/star-0.png b/src/images/star-0.png index f3d9a16..30c733e 100644 Binary files a/src/images/star-0.png and b/src/images/star-0.png differ diff --git a/src/images/star-1.png b/src/images/star-1.png index f6f5555..ca3ab68 100644 Binary files a/src/images/star-1.png and b/src/images/star-1.png differ