diff --git a/src/API/Account.vala b/src/API/Account.vala index d0b208f..00030f2 100644 --- a/src/API/Account.vala +++ b/src/API/Account.vala @@ -19,6 +19,8 @@ public class Tootle.Account{ account.username = obj.get_string_member ("username"); account.acct = obj.get_string_member ("acct"); account.display_name = obj.get_string_member ("display_name"); + if (account.display_name == "") + account.display_name = account.username; account.note = obj.get_string_member ("note"); account.avatar = obj.get_string_member ("avatar"); account.url = obj.get_string_member ("url"); diff --git a/src/API/Status.vala b/src/API/Status.vala index c7ba556..26cfcb1 100644 --- a/src/API/Status.vala +++ b/src/API/Status.vala @@ -1,17 +1,18 @@ public class Tootle.Status{ + public Account account; public int64 id; public string uri; public string url; public string content; public int64 reblogs_count; public int64 favourites_count; + public string avatar; + public string acct; public bool reblogged; public bool favorited; - - public string avatar; - public string acct; + public Status? reblog; public Status(int64 id) { this.id = id; @@ -41,6 +42,7 @@ public class Tootle.Status{ var id = int64.parse (obj.get_string_member ("id")); var status = new Status (id); + status.account = Account.parse(obj.get_object_member ("account")); status.uri = obj.get_string_member ("uri"); status.url = obj.get_string_member ("url"); status.reblogs_count = obj.get_int_member ("reblogs_count"); @@ -51,10 +53,9 @@ public class Tootle.Status{ status.reblogged = obj.get_boolean_member ("reblogged"); if(obj.has_member ("favourited")) status.favorited = obj.get_boolean_member ("favourited"); - - var acc = obj.get_object_member ("account"); - status.avatar = acc.get_string_member ("avatar"); - status.acct = acc.get_string_member ("acct"); + + if(obj.has_member ("reblog") && obj.get_null_member("reblog") != true) + status.reblog = Status.parse (obj.get_object_member ("reblog")); return status; } diff --git a/src/NetManager.vala b/src/NetManager.vala index d9a8fcf..2c00a92 100644 --- a/src/NetManager.vala +++ b/src/NetManager.vala @@ -47,7 +47,7 @@ public class Tootle.NetManager : GLib.Object{ public static 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 ("Data: \n%s\n", (string) msg.response_body.data); + // stdout.printf ("Data: \n%s\n", (string) msg.response_body.data); var parser = new Json.Parser (); parser.load_from_data ((string) msg.response_body.flatten ().data, -1); diff --git a/src/Views/HomeView.vala b/src/Views/HomeView.vala index e7bff47..af3f677 100644 --- a/src/Views/HomeView.vala +++ b/src/Views/HomeView.vala @@ -52,7 +52,8 @@ public class Tootle.HomeView : Tootle.AbstractView { widget.separator = separator; widget.rebind (status); widget.button_press_event.connect(() => { - var view = new StatusView (status); + var open_status = status.reblog != null ? status.reblog : status; + var view = new StatusView (open_status); Tootle.window.open_secondary_view (view); return false; }); diff --git a/src/Widgets/StatusWidget.vala b/src/Widgets/StatusWidget.vala index 9b3c603..824ef70 100644 --- a/src/Widgets/StatusWidget.vala +++ b/src/Widgets/StatusWidget.vala @@ -58,10 +58,10 @@ public class Tootle.StatusWidget : Gtk.Grid { counters.add(favorites); counters.show_all (); - attach(avatar, 1, 0, 1, 3); - attach(user, 2, 1, 1, 1); - attach(content, 2, 2, 1, 1); - attach(counters, 2, 3, 1, 1); + attach(avatar, 1, 1, 1, 3); + attach(user, 2, 2, 1, 1); + attach(content, 2, 3, 1, 1); + attach(counters, 2, 4, 1, 1); show_all(); //TODO: display conversations } @@ -69,6 +69,23 @@ public class Tootle.StatusWidget : Gtk.Grid { this.status = status; get_style_context ().add_class ("status"); + if (status.reblog != null){ + var image = new Gtk.Image.from_icon_name("edit-undo-symbolic", Gtk.IconSize.SMALL_TOOLBAR); + image.halign = Gtk.Align.END; + image.margin_end = 8; + image.show (); + + var label_text = "%s boosted".printf (status.account.url, status.account.display_name); + var label = new Gtk.Label (label_text); + label.halign = Gtk.Align.START; + label.use_markup = true; + label.margin_bottom = 8; + label.show (); + + attach (image, 1, 0, 1, 1); + attach (label, 2, 0, 2, 1); + } + destroy.connect (() => { if(separator != null) separator.destroy (); @@ -76,7 +93,8 @@ public class Tootle.StatusWidget : Gtk.Grid { } public void rebind (Status status = this.status){ - user.label = ""+status.acct+""; + var user_label = status.reblog != null ? status.reblog.account.display_name : status.account.display_name; + user.label = "%s".printf (user_label); content.label = status.content; reblogs.label = status.reblogs_count.to_string (); @@ -87,7 +105,8 @@ public class Tootle.StatusWidget : Gtk.Grid { favorite.active = status.favorited; favorite.sensitive = true; - CacheManager.instance.load_avatar (status.avatar, this.avatar); + var avatar_url = status.reblog != null ? status.reblog.account.avatar : status.account.avatar; + CacheManager.instance.load_avatar (avatar_url, this.avatar); } private Gtk.ToggleButton get_action_button (bool reblog = true){