From 80320105d8a4af7b6802ba23a37cb76142442758 Mon Sep 17 00:00:00 2001 From: caryoscelus Date: Sat, 6 Aug 2022 00:45:27 +0000 Subject: [PATCH] favourite/unfavourite in the sidebar there's still a bug that doesn't update unfavouriting in real time --- plugins/Sidebar/SidebarPlugin.py | 15 +++++++++++++++ plugins/Sidebar/media/all.js | 18 +++++++++++++++++- src/Ui/UiWebsocket.py | 31 +++++++++++++++++++++++++++++++ 3 files changed, 63 insertions(+), 1 deletion(-) diff --git a/plugins/Sidebar/SidebarPlugin.py b/plugins/Sidebar/SidebarPlugin.py index 876ea37a..ed77bbf5 100644 --- a/plugins/Sidebar/SidebarPlugin.py +++ b/plugins/Sidebar/SidebarPlugin.py @@ -415,11 +415,26 @@ class UiWebsocketPlugin(object): class_pause = "hidden" class_resume = "" + dashboard = config.homepage + dsite = self.user.sites.get(dashboard, None) + if not dsite: + print('No dashboard found, cannot favourite') + class_favourite = "hidden" + class_unfavourite = "hidden" + elif dsite.get('sittings', {}).get('favorite_sites', {}).get(self.site.address, False): + class_favourite = "" + class_unfavourite = "hidden" + else: + class_favourite = "hidden" + class_unfavourite = "" + body.append(_("""
  • {_[Update]} {_[Pause]} + {_[Favourite]} + {_[Unfavourite]} {_[Resume]} {_[Delete]}
  • diff --git a/plugins/Sidebar/media/all.js b/plugins/Sidebar/media/all.js index 5a03a37c..2bff5cef 100644 --- a/plugins/Sidebar/media/all.js +++ b/plugins/Sidebar/media/all.js @@ -1137,6 +1137,22 @@ window.initScrollable = function () { return false; }; })(this)); + this.tag.find("#button-favourite").off("click touched").on("click touched", (function(_this) { + return function() { + _this.tag.find("#button-favourite").addClass("hidden"); + _this.tag.find("#button-unfavourite").removeClass("hidden"); + _this.wrapper.ws.cmd("siteFavourite", _this.wrapper.site_info.address); + return false; + }; + })(this)); + this.tag.find("#button-unfavourite").off("click touched").on("click touched", (function(_this) { + return function() { + _this.tag.find("#button-favourite").removeClass("hidden"); + _this.tag.find("#button-unfavourite").addClass("hidden"); + _this.wrapper.ws.cmd("siteUnfavourite", _this.wrapper.site_info.address); + return false; + }; + })(this)); this.tag.find("#button-delete").off("click touchend").on("click touchend", (function(_this) { return function() { _this.handleSiteDeleteClick(); @@ -1767,4 +1783,4 @@ function morphdom(fromNode, toNode, options) { module.exports = morphdom; },{}]},{},[1])(1) -}); \ No newline at end of file +}); diff --git a/src/Ui/UiWebsocket.py b/src/Ui/UiWebsocket.py index 2bea8f2a..48a30ee2 100644 --- a/src/Ui/UiWebsocket.py +++ b/src/Ui/UiWebsocket.py @@ -10,6 +10,8 @@ import stat import gevent +from rich import print + from Config import config from Site import SiteManager from Crypt import CryptBitcoin @@ -950,6 +952,35 @@ class UiWebsocket(object): else: self.response(to, {"error": "Unknown site: %s" % address}) + def siteFavUnfav(self, to, address, action, response): + dashboard = config.homepage + dsite = self.user.sites.get(dashboard, None) + if not dsite: + raise RuntimeError(f'No dashboard {dashboard} found to add site to favourites') + if 'settings' not in dsite: + dsite['settings'] = {} + dsettings = dsite['settings'] + if 'favorite_sites' not in dsettings: + dsettings['favorite_sites'] = {} + favs = dsettings['favorite_sites'] + action(favs) + self.user.setSiteSettings(dashboard, dsettings) + self.response(to, response) + + @flag.admin + @flag.no_multiuser + def actionSiteFavourite(self, to, address): + def do_add(favs): + favs[address] = True + self.siteFavUnfav(to, address, do_add, "Added to favourites") + + @flag.admin + @flag.no_multiuser + def actionSiteUnfavourite(self, to, address): + def do_del(favs): + del favs[address] + self.siteFavUnfav(to, address, do_del, "Removed from favourites") + @flag.admin @flag.no_multiuser def actionSiteDelete(self, to, address):