From ece9abb1b248e01ea465eb7193fae78e0c2ffaac Mon Sep 17 00:00:00 2001 From: bleakgrey Date: Fri, 27 Apr 2018 21:50:08 +0300 Subject: [PATCH] Manager revamp --- meson.build | 2 +- src/AccountManager.vala | 49 +++++++++++------------------ src/Application.vala | 15 +++++++-- src/CacheManager.vala | 11 +------ src/Dialogs/PostDialog.vala | 6 ++-- src/MainWindow.vala | 2 +- src/NetManager.vala | 15 ++------- src/Settings.vala | 29 ----------------- src/SettingsManager.vala | 20 ++++++++++++ src/Views/AccountView.vala | 4 +-- src/Views/AddAccountView.vala | 15 ++++----- src/Views/HomeView.vala | 8 ++--- src/Views/NotificationsView.vala | 8 ++--- src/Views/StatusView.vala | 6 ++-- src/Widgets/AccountsButton.vala | 6 ++-- src/Widgets/HeaderBar.vala | 4 +-- src/Widgets/NotificationWidget.vala | 4 +-- src/Widgets/StatusWidget.vala | 14 ++++----- 18 files changed, 92 insertions(+), 126 deletions(-) delete mode 100644 src/Settings.vala create mode 100644 src/SettingsManager.vala diff --git a/meson.build b/meson.build index e7a5f08..34e2539 100644 --- a/meson.build +++ b/meson.build @@ -19,8 +19,8 @@ executable( meson.project_name(), asresources, 'src/Application.vala', - 'src/Settings.vala', 'src/MainWindow.vala', + 'src/SettingsManager.vala', 'src/AccountManager.vala', 'src/NetManager.vala', 'src/CacheManager.vala', diff --git a/src/AccountManager.vala b/src/AccountManager.vala index a0168e0..9d362f5 100644 --- a/src/AccountManager.vala +++ b/src/AccountManager.vala @@ -7,33 +7,20 @@ public class Tootle.AccountManager : Object{ public abstract signal void removed(Account account); private static Account current; - private static Settings settings; - private static AccountManager _instance; - public static AccountManager instance{ - get{ - if(_instance == null) - _instance = new AccountManager(); - return _instance; - } - } - - construct{ - settings = Settings.instance; - } public AccountManager(){ Object(); } public bool has_client_tokens(){ - var client_id = settings.client_id; - var client_secret = settings.client_secret; + var client_id = Tootle.settings.client_id; + var client_secret = Tootle.settings.client_secret; return !(client_id == "null" || client_secret == "null"); } public bool has_access_token (){ - return settings.access_token != "null"; + return Tootle.settings.access_token != "null"; } public void request_auth_code (string client_id){ @@ -43,7 +30,7 @@ public class Tootle.AccountManager : Object{ pars += "&client_id=" +client_id; try { - AppInfo.launch_default_for_uri (settings.instance_url + "/oauth/authorize" + pars, null); + AppInfo.launch_default_for_uri (Tootle.settings.instance_url + "/oauth/authorize" + pars, null); } catch (GLib.Error e){ warning (e.message); @@ -56,14 +43,14 @@ public class Tootle.AccountManager : Object{ pars += "&website=https://github.com/bleakgrey/tootle"; pars += "&scopes=read%20write%20follow"; - var msg = new Soup.Message("POST", settings.instance_url + "/api/v1/apps" + pars); - NetManager.instance.queue(msg, (sess, mess) => { + var msg = new Soup.Message("POST", Tootle.settings.instance_url + "/api/v1/apps" + pars); + Tootle.network.queue(msg, (sess, mess) => { try{ - var root = NetManager.parse (mess); + var root = Tootle.network.parse (mess); var client_id = root.get_string_member ("client_id"); var client_secret = root.get_string_member ("client_secret"); - settings.client_id = client_id; - settings.client_secret = client_secret; + Tootle.settings.client_id = client_id; + Tootle.settings.client_secret = client_secret; debug ("Received tokens"); request_auth_code (client_id); @@ -77,18 +64,18 @@ public class Tootle.AccountManager : Object{ } public Soup.Message try_auth (string code){ - var pars = "?client_id=" + settings.client_id; - pars += "&client_secret=" + settings.client_secret; + var pars = "?client_id=" + Tootle.settings.client_id; + pars += "&client_secret=" + Tootle.settings.client_secret; pars += "&redirect_uri=urn:ietf:wg:oauth:2.0:oob"; pars += "&grant_type=authorization_code"; pars += "&code=" + code; - var msg = new Soup.Message("POST", settings.instance_url + "/oauth/token" + pars); - NetManager.instance.queue(msg, (sess, mess) => { + var msg = new Soup.Message("POST", Tootle.settings.instance_url + "/oauth/token" + pars); + Tootle.network.queue(msg, (sess, mess) => { try{ - var root = NetManager.parse (mess); + var root = Tootle.network.parse (mess); var access_token = root.get_string_member ("access_token"); - settings.access_token = access_token; + Tootle.settings.access_token = access_token; debug ("Got access token"); update_current (); } @@ -101,10 +88,10 @@ public class Tootle.AccountManager : Object{ } public Soup.Message update_current (){ - var msg = new Soup.Message("GET", settings.instance_url + "/api/v1/accounts/verify_credentials"); - NetManager.instance.queue(msg, (sess, mess) => { + var msg = new Soup.Message("GET", Tootle.settings.instance_url + "/api/v1/accounts/verify_credentials"); + Tootle.network.queue(msg, (sess, mess) => { try{ - var root = NetManager.parse (mess); + var root = Tootle.network.parse (mess); current = Account.parse(root); switched (current); } diff --git a/src/Application.vala b/src/Application.vala index a51c07b..9afdc46 100644 --- a/src/Application.vala +++ b/src/Application.vala @@ -5,6 +5,11 @@ namespace Tootle{ public static Application app; public static MainWindow window; + + public static SettingsManager settings; + public static AccountManager accounts; + public static NetManager network; + public static CacheManager cache; public class Application : Granite.Application { @@ -16,6 +21,10 @@ namespace Tootle{ flags = ApplicationFlags.FLAGS_NONE; program_name = "Toot"; build_version = "0.1.0"; + settings = new SettingsManager (); + accounts = new AccountManager (); + network = new NetManager (); + cache = new CacheManager (); } public static int main (string[] args) { @@ -31,11 +40,11 @@ namespace Tootle{ protected override void activate () { window.present (); - var has_token = AccountManager.instance.has_access_token(); + var has_token = Tootle.accounts.has_access_token(); if(has_token) - AccountManager.instance.update_current (); + Tootle.accounts.update_current (); else - AccountManager.instance.switched (null); + Tootle.accounts.switched (null); } } diff --git a/src/CacheManager.vala b/src/CacheManager.vala index 781dbbb..c96db2b 100644 --- a/src/CacheManager.vala +++ b/src/CacheManager.vala @@ -2,15 +2,6 @@ using Gdk; using GLib; public class Tootle.CacheManager : GLib.Object{ - - private static CacheManager _instance; - public static CacheManager instance{ - get{ - if(_instance == null) - _instance = new CacheManager(); - return _instance; - } - } private static string path_images; @@ -35,7 +26,7 @@ public class Tootle.CacheManager : GLib.Object{ avatar.pixbuf = pixbuf; }); - NetManager.instance.queue(msg, (sess, mess) => {}); + Tootle.network.queue(msg, (sess, mess) => {}); } } diff --git a/src/Dialogs/PostDialog.vala b/src/Dialogs/PostDialog.vala index c664f53..6a207b1 100644 --- a/src/Dialogs/PostDialog.vala +++ b/src/Dialogs/PostDialog.vala @@ -122,10 +122,10 @@ public class Tootle.PostDialog : Gtk.Dialog { pars += "&in_reply_to_id=" + in_reply_to_id.to_string (); pars += "&visibility=" + visibility_opt.to_string (); - var msg = new Soup.Message("POST", Settings.instance.instance_url + "/api/v1/statuses" + pars); - NetManager.instance.queue(msg, (sess, mess) => { + var msg = new Soup.Message("POST", Tootle.settings.instance_url + "/api/v1/statuses" + pars); + Tootle.network.queue(msg, (sess, mess) => { try{ - var root = NetManager.parse (mess); + var root = Tootle.network.parse (mess); var status = Status.parse (root); Tootle.window.home.prepend (status); this.destroy (); diff --git a/src/MainWindow.vala b/src/MainWindow.vala index ae8a54a..4fdf725 100644 --- a/src/MainWindow.vala +++ b/src/MainWindow.vala @@ -40,7 +40,7 @@ public class Tootle.MainWindow: Gtk.Window { set_titlebar (header); window_position = WindowPosition.CENTER; - AccountManager.instance.switched.connect(on_account_switched); + Tootle.accounts.switched.connect(on_account_switched); } private void on_account_switched(Account? account){ diff --git a/src/NetManager.vala b/src/NetManager.vala index 4e5b4ed..f0e043f 100644 --- a/src/NetManager.vala +++ b/src/NetManager.vala @@ -6,15 +6,6 @@ public class Tootle.NetManager : GLib.Object{ public abstract signal void started(); public abstract signal void finished(); - - private static NetManager _instance; - public static NetManager instance{ - get{ - if(_instance == null) - _instance = new NetManager(); - return _instance; - } - } private int requests_processing = 0; private Soup.Session session; @@ -36,7 +27,7 @@ public class Tootle.NetManager : GLib.Object{ requests_processing++; started (); - var token = Settings.instance.access_token; + var token = Tootle.settings.access_token; if(token != "null") msg.request_headers.append ("Authorization", "Bearer " + token); @@ -44,7 +35,7 @@ public class Tootle.NetManager : GLib.Object{ return msg; } - public static Json.Object parse(Soup.Message msg) throws GLib.Error{ + public Json.Object parse(Soup.Message msg) throws GLib.Error{ // stdout.printf ("Status Code: %u\n", msg.status_code); // stdout.printf ("Message length: %lld\n", msg.response_body.length); // stdout.printf ("Object: \n%s\n", (string) msg.response_body.data); @@ -54,7 +45,7 @@ public class Tootle.NetManager : GLib.Object{ return parser.get_root ().get_object (); } - public static Json.Array parse_array(Soup.Message msg) throws GLib.Error{ + public Json.Array parse_array(Soup.Message msg) throws GLib.Error{ // stdout.printf ("Status Code: %u\n", msg.status_code); // stdout.printf ("Message length: %lld\n", msg.response_body.length); // stdout.printf ("Array: \n%s\n", (string) msg.response_body.data); diff --git a/src/Settings.vala b/src/Settings.vala deleted file mode 100644 index 8fe05fa..0000000 --- a/src/Settings.vala +++ /dev/null @@ -1,29 +0,0 @@ -public class Tootle.Settings : Granite.Services.Settings { - - private static Settings? _instance; - public static Settings instance { - get{ - if (_instance == null) - _instance = new Settings (); - return _instance; - } - } - - public string client_id { get; set; } - public string client_secret { get; set; } - public string access_token { get; set; } - public string refresh_token { get; set; } - public string instance_url { get; set; } - - public void clear_account (){ - access_token = "null"; - refresh_token = "null"; - instance_url = "null"; - debug ("Removed current account"); - } - - private Settings () { - base ("com.github.bleakgrey.tootle"); - } - -} diff --git a/src/SettingsManager.vala b/src/SettingsManager.vala new file mode 100644 index 0000000..abcb332 --- /dev/null +++ b/src/SettingsManager.vala @@ -0,0 +1,20 @@ +public class Tootle.SettingsManager : Granite.Services.Settings { + + public string client_id { get; set; } + public string client_secret { get; set; } + public string access_token { get; set; } + public string refresh_token { get; set; } + public string instance_url { get; set; } + + public void clear_account (){ + access_token = "null"; + refresh_token = "null"; + instance_url = "null"; + debug ("Removed current account"); + } + + public SettingsManager () { + base ("com.github.bleakgrey.tootle"); + } + +} diff --git a/src/Views/AccountView.vala b/src/Views/AccountView.vala index feb57ab..da27315 100644 --- a/src/Views/AccountView.vala +++ b/src/Views/AccountView.vala @@ -58,7 +58,7 @@ public class Tootle.AccountView : Tootle.HomeView { display_name.label = account.display_name; username.label = "@" + account.acct; note.label = Utils.escape_html (account.note); - CacheManager.instance.load_avatar (account.avatar, avatar, 128); + Tootle.cache.load_avatar (account.avatar, avatar, 128); add_counter (_("Toots"), 1, account.statuses_count); add_counter (_("Follows"), 2, account.following_count); @@ -84,7 +84,7 @@ public class Tootle.AccountView : Tootle.HomeView { } public override string get_url (){ - var url = "%s/api/v1/accounts/%lld/statuses".printf (Settings.instance.instance_url, account.id); + var url = "%s/api/v1/accounts/%lld/statuses".printf (Tootle.settings.instance_url, account.id); url += "?limit=25"; if (max_id > 0) diff --git a/src/Views/AddAccountView.vala b/src/Views/AddAccountView.vala index 0920750..e98b6f1 100644 --- a/src/Views/AddAccountView.vala +++ b/src/Views/AddAccountView.vala @@ -3,7 +3,6 @@ using Granite; public class Tootle.AddAccountView : Tootle.AbstractView { - AccountManager manager; public Stack stack; GridInstance grid_instance; GridCode grid_code; @@ -86,8 +85,6 @@ public class Tootle.AddAccountView : Tootle.AbstractView { construct { - manager = AccountManager.instance; - stack = new Stack (); stack.valign = Gtk.Align.CENTER; stack.transition_type = StackTransitionType.SLIDE_LEFT_RIGHT; @@ -120,12 +117,12 @@ public class Tootle.AddAccountView : Tootle.AbstractView { } private void on_next_click(){ - Settings.instance.clear_account (); - Settings.instance.instance_url = grid_instance.entry.text; + Tootle.settings.clear_account (); + Tootle.settings.instance_url = grid_instance.entry.text; grid_instance.sensitive = false; - if(!manager.has_client_tokens ()){ - var msg = manager.request_client_tokens (); + if(!Tootle.accounts.has_client_tokens ()){ + var msg = Tootle.accounts.request_client_tokens (); msg.finished.connect(() => { grid_instance.sensitive = true; stack.set_visible_child_name ("code"); @@ -134,13 +131,13 @@ public class Tootle.AddAccountView : Tootle.AbstractView { else{ grid_instance.sensitive = true; stack.set_visible_child_name ("code"); - manager.request_auth_code (Settings.instance.client_id); + Tootle.accounts.request_auth_code (Tootle.settings.client_id); } } private void on_add_click (){ var code = grid_code.code.text; - manager.try_auth (code); + Tootle.accounts.try_auth (code); } } diff --git a/src/Views/HomeView.vala b/src/Views/HomeView.vala index e0345f7..3618f7d 100644 --- a/src/Views/HomeView.vala +++ b/src/Views/HomeView.vala @@ -10,7 +10,7 @@ public class Tootle.HomeView : Tootle.AbstractView { this.timeline = timeline; view.remove.connect (on_remove); - AccountManager.instance.switched.connect(on_account_changed); + Tootle.accounts.switched.connect(on_account_changed); // var s = new Status(1); // s.content = "Test content, wow!"; @@ -51,7 +51,7 @@ public class Tootle.HomeView : Tootle.AbstractView { } public virtual string get_url (){ - var url = Settings.instance.instance_url; + var url = Tootle.settings.instance_url; url += "api/v1/timelines/"; url += this.timeline; url += "?limit=25"; @@ -64,9 +64,9 @@ public class Tootle.HomeView : Tootle.AbstractView { public void request (){ var msg = new Soup.Message("GET", get_url ()); - NetManager.instance.queue(msg, (sess, mess) => { + Tootle.network.queue(msg, (sess, mess) => { try{ - NetManager.parse_array (mess).foreach_element ((array, i, node) => { + Tootle.network.parse_array (mess).foreach_element ((array, i, node) => { var object = node.get_object (); if (object != null){ var status = Status.parse(object); diff --git a/src/Views/NotificationsView.vala b/src/Views/NotificationsView.vala index 147ae2b..5fa86bd 100644 --- a/src/Views/NotificationsView.vala +++ b/src/Views/NotificationsView.vala @@ -7,7 +7,7 @@ public class Tootle.NotificationsView : Tootle.AbstractView { base (true); view.remove.connect (on_remove); - AccountManager.instance.switched.connect(on_account_changed); + Tootle.accounts.switched.connect(on_account_changed); } public override string get_icon () { @@ -41,13 +41,13 @@ public class Tootle.NotificationsView : Tootle.AbstractView { if(account == null) return; - var url = Settings.instance.instance_url; + var url = Tootle.settings.instance_url; url += "/api/v1/notifications"; var msg = new Soup.Message("GET", url); - NetManager.instance.queue(msg, (sess, mess) => { + Tootle.network.queue(msg, (sess, mess) => { try{ - NetManager.parse_array (mess).foreach_element ((array, i, node) => { + Tootle.network.parse_array (mess).foreach_element ((array, i, node) => { var object = node.get_object (); if (object != null){ var notification = Notification.parse(object); diff --git a/src/Views/StatusView.vala b/src/Views/StatusView.vala index 87adc83..9cbc5ce 100644 --- a/src/Views/StatusView.vala +++ b/src/Views/StatusView.vala @@ -27,11 +27,11 @@ public class Tootle.StatusView : Tootle.AbstractView { } public Soup.Message request_context (){ - var url = "%s/api/v1/statuses/%lld/context".printf (Settings.instance.instance_url, root_status.id); + var url = "%s/api/v1/statuses/%lld/context".printf (Tootle.settings.instance_url, root_status.id); var msg = new Soup.Message("GET", url); - NetManager.instance.queue(msg, (sess, mess) => { + Tootle.network.queue(msg, (sess, mess) => { try{ - var root = NetManager.parse (mess); + var root = Tootle.network.parse (mess); var ancestors = root.get_array_member ("ancestors"); ancestors.foreach_element ((array, i, node) => { diff --git a/src/Widgets/AccountsButton.vala b/src/Widgets/AccountsButton.vala index 5854194..abc61e5 100644 --- a/src/Widgets/AccountsButton.vala +++ b/src/Widgets/AccountsButton.vala @@ -26,7 +26,7 @@ public class Tootle.AccountsButton : Gtk.MenuButton{ logout = new Gtk.Button.from_icon_name ("pane-hide-symbolic", Gtk.IconSize.SMALL_TOOLBAR); logout.receives_default = false; logout.tooltip_text = _("Log out"); - logout.clicked.connect (() => AccountManager.instance.logout ()); + logout.clicked.connect (() => Tootle.accounts.logout ()); show_all (); attach(display_name, 1, 0, 1, 1); @@ -68,9 +68,9 @@ public class Tootle.AccountsButton : Gtk.MenuButton{ add(avatar); show_all (); - AccountManager.instance.switched.connect (account => { + Tootle.accounts.switched.connect (account => { if (account != null){ - CacheManager.instance.load_avatar (account.avatar, avatar, 24); + Tootle.cache.load_avatar (account.avatar, avatar, 24); default_account.display_name.label = ""+account.display_name+""; default_account.user.label = "@"+account.username; } diff --git a/src/Widgets/HeaderBar.vala b/src/Widgets/HeaderBar.vala index d29e5f1..e39bf02 100644 --- a/src/Widgets/HeaderBar.vala +++ b/src/Widgets/HeaderBar.vala @@ -43,8 +43,8 @@ public class Tootle.HeaderBar : Gtk.HeaderBar{ }); button_mode.show (); - NetManager.instance.started.connect (() => spinner.show ()); - NetManager.instance.finished.connect (() => spinner.hide ()); + Tootle.network.started.connect (() => spinner.show ()); + Tootle.network.finished.connect (() => spinner.hide ()); pack_start (button_back); pack_start (button_toot); diff --git a/src/Widgets/NotificationWidget.vala b/src/Widgets/NotificationWidget.vala index 610d379..cfa9ad0 100644 --- a/src/Widgets/NotificationWidget.vala +++ b/src/Widgets/NotificationWidget.vala @@ -57,12 +57,12 @@ public class Tootle.NotificationWidget : Gtk.Grid { } public static Soup.Message dismiss (Notification notification){ - var url = Settings.instance.instance_url; + var url = Tootle.settings.instance_url; url += "api/v1/notifications/dismiss"; url += "?id=" + notification.id.to_string (); var msg = new Soup.Message("POST", url); - NetManager.instance.queue(msg, (sess, mess) => {}); + Tootle.network.queue(msg, (sess, mess) => {}); return msg; } diff --git a/src/Widgets/StatusWidget.vala b/src/Widgets/StatusWidget.vala index 58ad581..815f862 100644 --- a/src/Widgets/StatusWidget.vala +++ b/src/Widgets/StatusWidget.vala @@ -145,7 +145,7 @@ public class Tootle.StatusWidget : Gtk.EventBox { favorite.sensitive = true; var avatar_url = status.reblog != null ? status.reblog.account.avatar : status.account.avatar; - CacheManager.instance.load_avatar (avatar_url, this.avatar, this.avatar_size); + Tootle.cache.load_avatar (avatar_url, this.avatar, this.avatar_size); } public bool on_avatar_clicked (){ @@ -177,7 +177,7 @@ public class Tootle.StatusWidget : Gtk.EventBox { if (!state) action = "unreblog"; - var msg = new Soup.Message("POST", Settings.instance.instance_url + "/api/v1/statuses/" + status.id.to_string () + "/" + action); + var msg = new Soup.Message("POST", Tootle.settings.instance_url + "/api/v1/statuses/" + status.id.to_string () + "/" + action); msg.finished.connect (() => { status.reblogged = state; reblog.sensitive = false; @@ -188,8 +188,8 @@ public class Tootle.StatusWidget : Gtk.EventBox { status.reblogs_count -= 1; rebind (); }); - NetManager.instance.queue (msg, (sess, mess) => { - //NetManager.parse (msg); + Tootle.network.queue (msg, (sess, mess) => { + //Tootle.network.parse (msg); }); } @@ -199,7 +199,7 @@ public class Tootle.StatusWidget : Gtk.EventBox { if (!state) action = "unfavourite"; - var msg = new Soup.Message ("POST", Settings.instance.instance_url + "/api/v1/statuses/" + status.id.to_string () + "/" + action); + var msg = new Soup.Message ("POST", Tootle.settings.instance_url + "/api/v1/statuses/" + status.id.to_string () + "/" + action); msg.finished.connect (() => { status.favorited = state; reblog.sensitive = false; @@ -210,8 +210,8 @@ public class Tootle.StatusWidget : Gtk.EventBox { status.favourites_count -= 1; rebind (); }); - NetManager.instance.queue (msg, (sess, mess) => { - //NetManager.parse (msg); + Tootle.network.queue (msg, (sess, mess) => { + //Tootle.network.parse (msg); }); }