From adb44697bff67e7c9c6d0fd15fea042d6739e7d0 Mon Sep 17 00:00:00 2001 From: bleakgrey Date: Wed, 24 Oct 2018 13:50:40 +0300 Subject: [PATCH] Clean up things --- src/API/Status.vala | 16 +++--- src/Notificator.vala | 3 +- src/Views/AbstractView.vala | 17 +++---- src/Views/AccountView.vala | 92 +++++++++++++++++------------------ src/Views/TimelineView.vala | 13 ++--- src/Widgets/StatusWidget.vala | 71 ++++++++++++++------------- 6 files changed, 107 insertions(+), 105 deletions(-) diff --git a/src/API/Status.vala b/src/API/Status.vala index b499ad4..48e7e98 100644 --- a/src/API/Status.vala +++ b/src/API/Status.vala @@ -8,6 +8,7 @@ public class Tootle.Status { public string url; public string? spoiler_text; public string content; + public int64 replies_count; public int64 reblogs_count; public int64 favourites_count; public string created_at; @@ -36,6 +37,7 @@ public class Tootle.Status { status.account = Account.parse (obj.get_object_member ("account")); status.uri = obj.get_string_member ("uri"); status.created_at = obj.get_string_member ("created_at"); + status.replies_count = obj.get_int_member ("replies_count"); status.reblogs_count = obj.get_int_member ("reblogs_count"); status.favourites_count = obj.get_int_member ("favourites_count"); status.content = Html.simplify ( obj.get_string_member ("content")); @@ -108,12 +110,12 @@ public class Tootle.Status { public void set_reblogged (bool rebl = true){ var action = rebl ? "reblog" : "unreblog"; - var msg = new Soup.Message("POST", "%s/api/v1/statuses/%lld/%s".printf (accounts.formal.instance, id, action)); + var msg = new Soup.Message ("POST", "%s/api/v1/statuses/%lld/%s".printf (accounts.formal.instance, id, action)); msg.priority = Soup.MessagePriority.HIGH; msg.finished.connect (() => { reblogged = rebl; updated (); - if(rebl) + if (rebl) app.toast (_("Boosted!")); else app.toast (_("Removed boost")); @@ -123,7 +125,7 @@ public class Tootle.Status { public void set_favorited (bool fav = true){ var action = fav ? "favourite" : "unfavourite"; - var msg = new Soup.Message("POST", "%s/api/v1/statuses/%lld/%s".printf (accounts.formal.instance, id, action)); + var msg = new Soup.Message ("POST", "%s/api/v1/statuses/%lld/%s".printf (accounts.formal.instance, id, action)); msg.priority = Soup.MessagePriority.HIGH; msg.finished.connect (() => { favorited = fav; @@ -138,7 +140,7 @@ public class Tootle.Status { public void set_muted (bool mute = true){ var action = mute ? "mute" : "unmute"; - var msg = new Soup.Message("POST", "%s/api/v1/statuses/%lld/%s".printf (accounts.formal.instance, id, action)); + var msg = new Soup.Message ("POST", "%s/api/v1/statuses/%lld/%s".printf (accounts.formal.instance, id, action)); msg.priority = Soup.MessagePriority.HIGH; msg.finished.connect (() => { muted = mute; @@ -153,7 +155,7 @@ public class Tootle.Status { public void set_pinned (bool pin = true){ var action = pin ? "pin" : "unpin"; - var msg = new Soup.Message("POST", "%s/api/v1/statuses/%lld/%s".printf (accounts.formal.instance, id, action)); + var msg = new Soup.Message ("POST", "%s/api/v1/statuses/%lld/%s".printf (accounts.formal.instance, id, action)); msg.priority = Soup.MessagePriority.HIGH; msg.finished.connect (() => { pinned = pin; @@ -167,11 +169,11 @@ public class Tootle.Status { } public void poof (){ - var msg = new Soup.Message("DELETE", "%s/api/v1/statuses/%lld".printf (accounts.formal.instance, id)); + var msg = new Soup.Message ("DELETE", "%s/api/v1/statuses/%lld".printf (accounts.formal.instance, id)); msg.priority = Soup.MessagePriority.HIGH; msg.finished.connect (() => { app.toast (_("Poof!")); - network.status_removed (this.id); + network.status_removed (id); }); network.queue (msg); } diff --git a/src/Notificator.vala b/src/Notificator.vala index 6ba5e4b..6eee2a1 100644 --- a/src/Notificator.vala +++ b/src/Notificator.vala @@ -74,7 +74,8 @@ public class Tootle.Notificator : GLib.Object { } private void on_error (Error e) { - warning ("Error in %s: %s", get_name (), e.message); + if (!closing) + warning ("Error in %s: %s", get_name (), e.message); } private void on_message (int i, Bytes bytes) { diff --git a/src/Views/AbstractView.vala b/src/Views/AbstractView.vala index 9502c1e..6d64962 100644 --- a/src/Views/AbstractView.vala +++ b/src/Views/AbstractView.vala @@ -5,21 +5,13 @@ public abstract class Tootle.AbstractView : ScrolledWindow { public int stack_pos = -1; public Image? image; public Box view; - protected Grid grid; protected Box? empty; + protected Gtk.Grid? header; construct { view = new Box (Orientation.VERTICAL, 0); - view.valign = Align.START; - - grid = new Grid (); - grid.hexpand = true; - grid.vexpand = true; - grid.attach (view, 0, 2); - + add (view); hscrollbar_policy = PolicyType.NEVER; - add (grid); - edge_reached.connect(pos => { if (pos == PositionType.BOTTOM) bottom_reached (); @@ -39,7 +31,10 @@ public abstract class Tootle.AbstractView : ScrolledWindow { } public virtual void clear (){ - view.forall (widget => widget.destroy ()); + view.forall (widget => { + if (widget != header) + widget.destroy (); + }); } public virtual void bottom_reached (){} diff --git a/src/Views/AccountView.vala b/src/Views/AccountView.vala index 642dfef..2d656de 100644 --- a/src/Views/AccountView.vala +++ b/src/Views/AccountView.vala @@ -4,75 +4,74 @@ using Granite; public class Tootle.AccountView : TimelineView { const int AVATAR_SIZE = 128; - Account account; + protected Account account; - Gtk.Grid header; - Gtk.Grid header_image; - Gtk.Box header_info; - Granite.Widgets.Avatar avatar; - RichLabel display_name; - Gtk.Label username; - Gtk.Label relationship; - RichLabel note; - Gtk.Grid counters; - Gtk.Box actions; - Gtk.Button button_follow; + protected Grid header_image; + protected Box header_info; + protected Granite.Widgets.Avatar avatar; + protected RichLabel display_name; + protected Label username; + protected Label relationship; + protected RichLabel note; + protected Grid counters; + protected Box actions; + protected Button button_follow; + + protected Gtk.Menu menu; + protected Gtk.MenuItem menu_edit; + protected Gtk.MenuItem menu_mention; + protected Gtk.MenuItem menu_mute; + protected Gtk.MenuItem menu_block; + protected Gtk.MenuItem menu_report; + protected Gtk.MenuButton button_menu; - Gtk.Menu menu; - Gtk.MenuItem menu_edit; - Gtk.MenuItem menu_mention; - Gtk.MenuItem menu_mute; - Gtk.MenuItem menu_block; - Gtk.MenuItem menu_report; - Gtk.MenuButton button_menu; - //public override void pre_construct () { construct { - header = new Gtk.Grid (); - header_info = new Gtk.Box (Gtk.Orientation.VERTICAL, 0); + header = new Grid (); + header_info = new Box (Orientation.VERTICAL, 0); header_info.margin = 12; - actions = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 0); + actions = new Box (Orientation.HORIZONTAL, 0); actions.hexpand = false; - actions.halign = Gtk.Align.END; + actions.halign = Align.END; actions.vexpand = false; - actions.valign = Gtk.Align.START; + actions.valign = Align.START; actions.margin = 12; - relationship = new Gtk.Label (""); + relationship = new Label (""); relationship.get_style_context ().add_class ("relationship"); - relationship.halign = Gtk.Align.START; - relationship.valign = Gtk.Align.START; + relationship.halign = Align.START; + relationship.valign = Align.START; relationship.margin = 12; header.attach (relationship, 0, 0, 1, 1); avatar = new Granite.Widgets.Avatar.with_default_icon (AVATAR_SIZE); avatar.hexpand = true; avatar.margin_bottom = 6; - header_info.pack_start(avatar, false, false, 0); + header_info.pack_start (avatar, false, false, 0); display_name = new RichLabel (""); display_name.get_style_context ().add_class (Granite.STYLE_CLASS_H2_LABEL); - header_info.pack_start(display_name, false, false, 0); + header_info.pack_start (display_name, false, false, 0); username = new Gtk.Label (""); - header_info.pack_start(username, false, false, 0); + header_info.pack_start (username, false, false, 0); note = new RichLabel (""); note.set_line_wrap (true); note.selectable = true; note.margin_top = 12; note.can_focus = false; - note.justify = Gtk.Justification.CENTER; - header_info.pack_start(note, false, false, 0); + note.justify = Justification.CENTER; + header_info.pack_start (note, false, false, 0); header_info.show_all (); header.attach (header_info, 0, 0, 1, 1); - counters = new Gtk.Grid (); + counters = new Grid (); counters.column_homogeneous = true; counters.get_style_context ().add_class ("header-counters"); header.attach (counters, 0, 1, 1, 1); - header_image = new Gtk.Grid (); + header_image = new Grid (); header_image.get_style_context ().add_class ("header"); header.attach (header_image, 0, 0, 2, 2); @@ -92,10 +91,10 @@ public class Tootle.AccountView : TimelineView { button_follow = add_counter ("contact-new-symbolic"); button_menu = new Gtk.MenuButton (); - button_menu.image = new Gtk.Image.from_icon_name ("view-more-symbolic", Gtk.IconSize.LARGE_TOOLBAR); + button_menu.image = new Image.from_icon_name ("view-more-symbolic", IconSize.LARGE_TOOLBAR); button_menu.tooltip_text = _("More Actions"); button_menu.get_style_context ().add_class (Gtk.STYLE_CLASS_FLAT); - (button_menu as Gtk.Widget).set_focus_on_click (false); + (button_menu as Widget).set_focus_on_click (false); button_menu.can_default = false; button_menu.can_focus = false; button_menu.popup = menu; @@ -105,8 +104,7 @@ public class Tootle.AccountView : TimelineView { button_follow.hide (); header.attach (actions, 0, 0, 2, 2); - grid.attach (header, 0, 1); - //view.pack_start (header, false, false, 0); + view.pack_start (header, false, false, 0); } public AccountView (Account acc) { @@ -155,11 +153,11 @@ public class Tootle.AccountView : TimelineView { button_follow.show (); if (account.rs.following) { button_follow.tooltip_text = _("Unfollow"); - (button_follow.get_image () as Gtk.Image).icon_name = "close-symbolic"; + (button_follow.get_image () as Image).icon_name = "close-symbolic"; } else{ button_follow.tooltip_text = _("Follow"); - (button_follow.get_image () as Gtk.Image).icon_name = "contact-new-symbolic"; + (button_follow.get_image () as Image).icon_name = "contact-new-symbolic"; } } @@ -186,20 +184,20 @@ public class Tootle.AccountView : TimelineView { } private Gtk.Button add_counter (string name, int? i = null, int64? val = null) { - Gtk.Button btn; + Button btn; if (val != null){ - btn = new Gtk.Button (); - var label = new Gtk.Label ("%s\n%s".printf (name.up (), val.to_string ())); - label.justify = Gtk.Justification.CENTER; + btn = new Button (); + var label = new Label ("%s\n%s".printf (name.up (), val.to_string ())); + label.justify = Justification.CENTER; label.use_markup = true; label.margin = 8; btn.add (label); } else - btn = new Gtk.Button.from_icon_name (name, Gtk.IconSize.LARGE_TOOLBAR); + btn = new Button.from_icon_name (name, IconSize.LARGE_TOOLBAR); btn.get_style_context ().add_class (Gtk.STYLE_CLASS_FLAT); - (btn as Gtk.Widget).set_focus_on_click (false); + (btn as Widget).set_focus_on_click (false); btn.can_default = false; btn.can_focus = false; diff --git a/src/Views/TimelineView.vala b/src/Views/TimelineView.vala index 7c50368..a18b5be 100644 --- a/src/Views/TimelineView.vala +++ b/src/Views/TimelineView.vala @@ -57,15 +57,16 @@ public class Tootle.TimelineView : AbstractView { var widget = new StatusWidget (status); widget.separator = separator; - widget.button_press_event.connect(widget.open); + widget.button_press_event.connect (widget.open); if (!is_status_owned (status)) - widget.avatar.button_press_event.connect(widget.open_account); - view.pack_start(separator, false, false, 0); - view.pack_start(widget, false, false, 0); + widget.avatar.button_press_event.connect (widget.open_account); + view.pack_start (separator, false, false, 0); + view.pack_start (widget, false, false, 0); if (first || status.pinned) { - view.reorder_child (widget, 0); - view.reorder_child (separator, 0); + var new_index = header == null ? 1 : 0; + view.reorder_child (widget, new_index); + view.reorder_child (separator, new_index); } } diff --git a/src/Widgets/StatusWidget.vala b/src/Widgets/StatusWidget.vala index 793c40f..4dbd328 100644 --- a/src/Widgets/StatusWidget.vala +++ b/src/Widgets/StatusWidget.vala @@ -8,36 +8,38 @@ public class Tootle.StatusWidget : Gtk.EventBox { public bool is_notification = false; public const int AVATAR_SIZE = 32; - public Gtk.Separator? separator; - public Gtk.Grid grid; + public Separator? separator; public Granite.Widgets.Avatar avatar; - public RichLabel title_user; - public Gtk.Label title_date; - public Gtk.Label title_acct; - public Gtk.Revealer revealer; - public RichLabel content_label; - public RichLabel? content_spoiler; - public Gtk.Button? spoiler_button; - public Gtk.Box title_box; - public AttachmentBox attachments; - public Gtk.Box counters; - public Gtk.Label reblogs; - public Gtk.Label favorites; - private Image pin_indicator; - public ImageToggleButton reblog; - public ImageToggleButton favorite; - public ImageToggleButton reply; + protected Grid grid; + protected RichLabel title_user; + protected Label title_date; + protected Label title_acct; + protected Revealer revealer; + protected RichLabel content_label; + protected RichLabel? content_spoiler; + protected Button? spoiler_button; + protected Box title_box; + protected AttachmentBox attachments; + protected Image pin_indicator; + + protected Box counters; + protected Label replies; + protected Label reblogs; + protected Label favorites; + protected ImageToggleButton reblog; + protected ImageToggleButton favorite; + protected ImageToggleButton reply; construct { - grid = new Gtk.Grid (); + grid = new Grid (); avatar = new Granite.Widgets.Avatar.with_default_icon (AVATAR_SIZE); - avatar.valign = Gtk.Align.START; + avatar.valign = Align.START; avatar.margin_top = 6; avatar.margin_start = 6; avatar.margin_end = 6; - title_box = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 6); + title_box = new Box (Gtk.Orientation.HORIZONTAL, 6); title_box.hexpand = true; title_box.margin_end = 12; title_box.margin_top = 6; @@ -65,16 +67,17 @@ public class Tootle.StatusWidget : Gtk.EventBox { attachments = new AttachmentBox (); - var revealer_box = new Gtk.Box (Gtk.Orientation.VERTICAL, 6); + var revealer_box = new Box (Orientation.VERTICAL, 6); revealer_box.margin_end = 12; - revealer_box.add (content_label); - revealer_box.add (attachments); + revealer_box.add (content_label); + revealer_box.add (attachments); revealer = new Revealer (); revealer.reveal_child = true; revealer.add (revealer_box); - reblogs = new Gtk.Label ("0"); - favorites = new Gtk.Label ("0"); + reblogs = new Label ("0"); + favorites = new Label ("0"); + replies = new Label ("0"); reblog = new ImageToggleButton ("media-playlist-repeat-symbolic"); reblog.set_action (); @@ -98,7 +101,7 @@ public class Tootle.StatusWidget : Gtk.EventBox { PostDialog.open_reply (status.get_formal ()); }); - counters = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 6); + counters = new Box (Orientation.HORIZONTAL, 6); counters.margin_top = 6; counters.margin_bottom = 6; counters.add (reblog); @@ -106,6 +109,7 @@ public class Tootle.StatusWidget : Gtk.EventBox { counters.add (favorite); counters.add (favorites); counters.add (reply); + counters.add (replies); counters.show_all (); add (grid); @@ -123,15 +127,15 @@ public class Tootle.StatusWidget : Gtk.EventBox { this.status.updated.connect (rebind); if (this.status.reblog != null) { - var image = new Gtk.Image.from_icon_name("media-playlist-repeat-symbolic", Gtk.IconSize.BUTTON); - image.halign = Gtk.Align.END; + var image = new Image.from_icon_name("media-playlist-repeat-symbolic", IconSize.BUTTON); + image.halign = Align.END; image.margin_end = 6; image.margin_top = 6; image.show (); var label_text = _("%s boosted").printf (this.status.account.url, this.status.account.display_name); var label = new RichLabel (label_text); - label.halign = Gtk.Align.START; + label.halign = Align.START; label.margin_top = 6; label.show (); @@ -141,7 +145,7 @@ public class Tootle.StatusWidget : Gtk.EventBox { if (is_spoiler ()) { revealer.reveal_child = false; - var spoiler_box = new Box (Gtk.Orientation.HORIZONTAL, 6); + var spoiler_box = new Box (Orientation.HORIZONTAL, 6); spoiler_box.margin_end = 12; var spoiler_button_text = _("Toggle content"); @@ -155,7 +159,7 @@ public class Tootle.StatusWidget : Gtk.EventBox { spoiler_button = new Button.with_label (spoiler_button_text); } spoiler_button.hexpand = true; - spoiler_button.halign = Gtk.Align.END; + spoiler_button.halign = Align.END; spoiler_button.clicked.connect (() => revealer.set_reveal_child (!revealer.child_revealed)); var spoiler_text = _("[ This post contains sensitive content ]"); @@ -180,7 +184,7 @@ public class Tootle.StatusWidget : Gtk.EventBox { destroy.connect (() => { avatar.show_default (AVATAR_SIZE); - if(separator != null) + if (separator != null) separator.destroy (); }); @@ -215,6 +219,7 @@ public class Tootle.StatusWidget : Gtk.EventBox { reblogs.label = formal.reblogs_count.to_string (); favorites.label = formal.favourites_count.to_string (); + replies.label = formal.replies_count.to_string (); reblog.sensitive = false; reblog.active = formal.reblogged;