diff options
author | Jan Lukas Gernert <jangernert@gmail.com> | 2017-10-14 18:35:23 +0300 |
---|---|---|
committer | Jan Lukas Gernert <jangernert@gmail.com> | 2017-10-14 18:35:23 +0300 |
commit | ee1bcc67d70f9e117b6e7a9e8eda2cdb7bef615c (patch) | |
tree | a98c33c0d77e3d63fe227ff78dce7522a363ae68 | |
parent | 1208583ac2eee652cce6e84365cfeb4c954e93d1 (diff) |
use Feed model inside FeedRow
-rw-r--r-- | src/FavIconManager.vala | 7 | ||||
-rw-r--r-- | src/Model/Feed.vala | 5 | ||||
-rw-r--r-- | src/Widgets/FeedList.vala | 37 | ||||
-rw-r--r-- | src/Widgets/FeedRow.vala | 83 |
4 files changed, 62 insertions, 70 deletions
diff --git a/src/FavIconManager.vala b/src/FavIconManager.vala index 02e32575..afcc55d6 100644 --- a/src/FavIconManager.vala +++ b/src/FavIconManager.vala @@ -31,10 +31,9 @@ public class FeedReader.FavIconManager : GLib.Object { m_map = new Gee.HashMap<string, Gdk.Pixbuf>(); } - private async void load(string icon_name) + private async void load(string feedID) { - var fileName = GLib.Base64.encode(icon_name.data) + ".ico"; - //var fileName = icon_name + ".ico"; + var fileName = GLib.Base64.encode(feedID.data) + ".ico"; try { var file = File.new_for_path(GLib.Environment.get_user_data_dir() + "/feedreader/data/feed_icons/" + fileName); @@ -48,7 +47,7 @@ public class FeedReader.FavIconManager : GLib.Object { } pixbuf = pixbuf.scale_simple(24, 24, Gdk.InterpType.BILINEAR); - m_map.set(icon_name, pixbuf); + m_map.set(feedID, pixbuf); } catch (IOError.NOT_FOUND e) { diff --git a/src/Model/Feed.vala b/src/Model/Feed.vala index 5614a507..8e3b341a 100644 --- a/src/Model/Feed.vala +++ b/src/Model/Feed.vala @@ -69,6 +69,11 @@ public class FeedReader.Feed : GLib.Object { return m_unread; } + public void setUnread(uint unread) + { + m_unread = unread; + } + public Gee.List<string> getCatIDs() { return m_catIDs; diff --git a/src/Widgets/FeedList.vala b/src/Widgets/FeedList.vala index a776de48..fa6ce6e7 100644 --- a/src/Widgets/FeedList.vala +++ b/src/Widgets/FeedList.vala @@ -232,7 +232,16 @@ public class FeedReader.feedList : Gtk.ScrolledWindow { private void createFeedlist(ArticleListState state, bool defaultSettings, bool masterCat) { - var row_separator1 = new FeedRow(null, 0, FeedID.SEPARATOR.to_string(), "-1", 0); + var separatorFeed = new Feed(FeedID.SEPARATOR.to_string(), "", "", 0); + + uint unread = 0; + if(state == ArticleListState.MARKED) + unread = DataBase.readOnly().get_marked_total(); + else + unread = DataBase.readOnly().get_unread_total(); + var allFeed = new Feed(FeedID.ALL.to_string(), _("All Articles"), "", unread); + + var row_separator1 = new FeedRow(separatorFeed, "-1", 0); var separator1 = new Gtk.Separator(Gtk.Orientation.HORIZONTAL); separator1.get_style_context().add_class("fr-sidebar-separator"); separator1.margin_top = 8; @@ -240,12 +249,8 @@ public class FeedReader.feedList : Gtk.ScrolledWindow { row_separator1.sensitive = false; m_list.add(row_separator1); - uint unread = 0; - if(state == ArticleListState.MARKED) - unread = DataBase.readOnly().get_marked_total(); - else - unread = DataBase.readOnly().get_unread_total(); - var row_all = new FeedRow(_("All Articles"), unread, FeedID.ALL.to_string(), "-1", 0); + + var row_all = new FeedRow(allFeed, "-1", 0); row_all.margin_top = 8; row_all.margin_bottom = 8; m_list.add(row_all); @@ -253,7 +258,7 @@ public class FeedReader.feedList : Gtk.ScrolledWindow { row_all.setAsRead.connect(markSelectedRead); row_all.reveal(true, 0); - var row_separator = new FeedRow(null, 0, FeedID.SEPARATOR.to_string(), "-1", 0); + var row_separator = new FeedRow(separatorFeed, "-1", 0); var separator = new Gtk.Separator(Gtk.Orientation.HORIZONTAL); separator.get_style_context().add_class("fr-sidebar-separator"); separator.margin_bottom = 8; @@ -287,13 +292,7 @@ public class FeedReader.feedList : Gtk.ScrolledWindow { if(item.getCatIDs().contains(tmpRow.getID()) || tmpRow.getID() == "" && item.isUncategorized()) { - var feedrow = new FeedRow( - item.getTitle(), - item.getUnread(), - item.getFeedID(), - tmpRow.getID(), - tmpRow.getLevel() - ); + var feedrow = new FeedRow(item, tmpRow.getID(), tmpRow.getLevel()); m_list.insert(feedrow, pos); feedrow.setAsRead.connect(markSelectedRead); feedrow.moveUP.connect(moveUP); @@ -314,13 +313,7 @@ public class FeedReader.feedList : Gtk.ScrolledWindow { } else { - var feedrow = new FeedRow ( - item.getTitle(), - item.getUnread(), - item.getFeedID(), - item.getCatIDs()[0], - 0 - ); + var feedrow = new FeedRow(item, item.getCatIDs()[0], 0); m_list.insert(feedrow, 3); feedrow.setAsRead.connect(markSelectedRead); feedrow.moveUP.connect(moveUP); diff --git a/src/Widgets/FeedRow.vala b/src/Widgets/FeedRow.vala index 0befa384..3bca071c 100644 --- a/src/Widgets/FeedRow.vala +++ b/src/Widgets/FeedRow.vala @@ -15,36 +15,31 @@ public class FeedReader.FeedRow : Gtk.ListBoxRow { + private Feed m_feed; + private string m_parentCatID; private Gtk.Box m_box; private Gtk.Label m_label; private bool m_subscribed; - private string m_catID; - private int m_level; private Gtk.Revealer m_revealer; private Gtk.Image m_icon; private Gtk.Label m_unread; - private uint m_unread_count; private Gtk.EventBox m_eventBox; private Gtk.EventBox m_unreadBox; private bool m_unreadHovered; private Gtk.Stack m_unreadStack; private uint m_timeout_source_id; - private string m_name { get; private set; } - private string m_feedID { get; private set; } public signal void setAsRead(FeedListType type, string id); public signal void copyFeedURL(string id); public signal void moveUP(); public signal void deselectRow(); - public FeedRow(string? text, uint unread_count, string feedID, string catID, int level) + public FeedRow(Feed feed, string parentCat, int level) { - m_level = level; - m_catID = catID; m_subscribed = true; - m_name = text; - m_feedID = feedID; + m_parentCatID = parentCat; + m_feed = feed; - if(text != null) + if(m_feed.getFeedID() != FeedID.SEPARATOR.to_string()) { var rowhight = 30; m_box = new Gtk.Box(Gtk.Orientation.HORIZONTAL, 0); @@ -53,8 +48,7 @@ public class FeedReader.FeedRow : Gtk.ListBoxRow { m_icon.margin_start = level * 24; - m_unread_count = unread_count; - m_label = new Gtk.Label(m_name); + m_label = new Gtk.Label(m_feed.getTitle()); m_label.set_size_request (0, rowhight); m_label.set_ellipsize (Pango.EllipsizeMode.END); m_label.set_alignment(0, 0.5f); @@ -82,7 +76,7 @@ public class FeedReader.FeedRow : Gtk.ListBoxRow { m_unreadBox.leave_notify_event.connect(onUnreadLeave); - if(!Utils.onlyShowFeeds() && feedID != FeedID.ALL.to_string()) + if(!Utils.onlyShowFeeds() && m_feed.getFeedID() != FeedID.ALL.to_string()) this.get_style_context().add_class("fr-sidebar-feed"); else this.get_style_context().add_class("fr-sidebar-row"); @@ -92,7 +86,7 @@ public class FeedReader.FeedRow : Gtk.ListBoxRow { m_box.pack_end (m_unreadBox, false, false, 8); m_eventBox = new Gtk.EventBox(); - if(m_feedID != FeedID.ALL.to_string()) + if(m_feed.getFeedID() != FeedID.ALL.to_string()) { m_eventBox.set_events(Gdk.EventMask.BUTTON_PRESS_MASK); m_eventBox.button_press_event.connect(onClick); @@ -107,9 +101,9 @@ public class FeedReader.FeedRow : Gtk.ListBoxRow { this.no_show_all = true;; m_revealer.show_all(); - set_unread_count(m_unread_count); + set_unread_count(m_feed.getUnread()); - if(m_feedID != FeedID.ALL.to_string() + if(m_feed.getFeedID() != FeedID.ALL.to_string() && !Settings.general().get_boolean("only-feeds") && Utils.canManipulateContent() && FeedReaderBackend.get_default().supportCategories()) @@ -144,13 +138,13 @@ public class FeedReader.FeedRow : Gtk.ListBoxRow { if(target_type == DragTarget.FEED) { - selection_data.set_text(m_feedID + "," + m_catID, -1); + selection_data.set_text(m_feed.getFeedID() + "," + m_parentCatID, -1); } } public async void reloadFavIcon(Gtk.Image? inIcon = null) { - var icon = yield FavIconManager.get_default().getIcon(m_feedID); + var icon = yield FavIconManager.get_default().getIcon(m_feed.getFeedID()); if(icon == null) return; @@ -212,9 +206,9 @@ public class FeedReader.FeedRow : Gtk.ListBoxRow { uint time = 300; this.reveal(false, time); - var notification = MainWindow.get_default().showNotification(_("Feed \"%s\" removed").printf(m_name)); + var notification = MainWindow.get_default().showNotification(_("Feed \"%s\" removed").printf(m_feed.getTitle())); ulong eventID = notification.dismissed.connect(() => { - FeedReaderBackend.get_default().removeFeed(m_feedID); + FeedReaderBackend.get_default().removeFeed(m_feed.getFeedID()); }); notification.action.connect(() => { notification.disconnect(eventID); @@ -225,15 +219,15 @@ public class FeedReader.FeedRow : Gtk.ListBoxRow { var markAsRead_action = new GLib.SimpleAction("markFeedAsRead", null); markAsRead_action.activate.connect(() => { - setAsRead(FeedListType.FEED, m_feedID); + setAsRead(FeedListType.FEED, m_feed.getFeedID()); }); var copyFeedURL_action = new GLib.SimpleAction("copyFeedURL", null); copyFeedURL_action.activate.connect(() => { - copyFeedURL(m_feedID); + copyFeedURL(m_feed.getFeedID()); }); - if(m_unread_count != 0) + if(m_feed.getUnread() != 0) markAsRead_action.set_enabled(true); else markAsRead_action.set_enabled(false); @@ -247,16 +241,17 @@ public class FeedReader.FeedRow : Gtk.ListBoxRow { app.add_action(rename_action); app.add_action(remove_action); - var feed = DataBase.readOnly().read_feed(m_feedID); - var catCount = feed.getCatIDs().size; - var cat = DataBase.readOnly().read_category(m_catID); + var menu = new GLib.Menu(); menu.append(_("Mark as read"), "markFeedAsRead"); menu.append(_("Copy URL"), "copyFeedURL"); menu.append(_("Rename"), "renameFeed"); - if(catCount > 1) + if(m_feed.getCatIDs().size > 1) + { + var cat = DataBase.readOnly().read_category(m_parentCatID); menu.append(_("Remove only from %s").printf(cat.getTitle()), "deleteFeed"); + } menu.append(_("Remove"), "deleteFeed"); var pop = new Gtk.Popover(this); @@ -281,10 +276,10 @@ public class FeedReader.FeedRow : Gtk.ListBoxRow { }); var renameEntry = new Gtk.Entry(); - renameEntry.set_text(m_name); + renameEntry.set_text(m_feed.getTitle()); renameEntry.activate.connect(() => { popRename.hide(); - FeedReaderBackend.get_default().renameFeed(m_feedID, renameEntry.get_text()); + FeedReaderBackend.get_default().renameFeed(m_feed.getFeedID(), renameEntry.get_text()); }); var renameButton = new Gtk.Button.with_label(_("rename")); @@ -305,12 +300,12 @@ public class FeedReader.FeedRow : Gtk.ListBoxRow { public void set_unread_count(uint unread_count) { - m_unread_count = unread_count; + m_feed.setUnread(unread_count); - if(m_unread_count > 0 && !m_unreadHovered) + if(m_feed.getUnread() > 0 && !m_unreadHovered) { m_unreadStack.set_visible_child_name("unreadCount"); - m_unread.set_text(m_unread_count.to_string()); + m_unread.set_text(m_feed.getUnread().to_string()); } else if(!m_unreadHovered) { @@ -324,9 +319,9 @@ public class FeedReader.FeedRow : Gtk.ListBoxRow { private bool onUnreadClick(Gdk.EventButton event) { - if(m_unreadHovered && m_unread_count > 0) + if(m_unreadHovered && m_feed.getUnread() > 0) { - setAsRead(FeedListType.FEED, m_feedID); + setAsRead(FeedListType.FEED, m_feed.getFeedID()); } return true; } @@ -334,7 +329,7 @@ public class FeedReader.FeedRow : Gtk.ListBoxRow { private bool onUnreadEnter(Gdk.EventCrossing event) { m_unreadHovered = true; - if(m_unread_count > 0) + if(m_feed.getUnread() > 0) { m_unreadStack.set_visible_child_name("mark"); } @@ -344,7 +339,7 @@ public class FeedReader.FeedRow : Gtk.ListBoxRow { private bool onUnreadLeave(Gdk.EventCrossing event) { m_unreadHovered = false; - if(m_unread_count > 0) + if(m_feed.getUnread() > 0) { m_unreadStack.set_visible_child_name("unreadCount"); } @@ -357,13 +352,13 @@ public class FeedReader.FeedRow : Gtk.ListBoxRow { public void upUnread() { - set_unread_count(m_unread_count+1); + set_unread_count(m_feed.getUnread() + 1); } public void downUnread() { - if(m_unread_count > 0) - set_unread_count(m_unread_count-1); + if(m_feed.getUnread() > 0) + set_unread_count(m_feed.getUnread() - 1); } public void update(string text, uint unread_count) @@ -379,17 +374,17 @@ public class FeedReader.FeedRow : Gtk.ListBoxRow { public string getCatID() { - return m_catID; + return m_parentCatID; } public string getID() { - return m_feedID; + return m_feed.getFeedID(); } public string getName() { - return m_name; + return m_feed.getTitle(); } public bool isSubscribed() @@ -399,7 +394,7 @@ public class FeedReader.FeedRow : Gtk.ListBoxRow { public uint getUnreadCount() { - return m_unread_count; + return m_feed.getUnread(); } public bool isRevealed() |