Correctly display reblogged statuses

This commit is contained in:
bleakgrey 2018-04-21 12:21:03 +03:00
parent ed5d79d6ea
commit b6f74afacb
5 changed files with 38 additions and 15 deletions

View File

@ -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");

View File

@ -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;
}

View File

@ -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);

View File

@ -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;
});

View File

@ -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 = "<a href=\"%s\"><b>%s</b></a> 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 = "<b>"+status.acct+"</b>";
var user_label = status.reblog != null ? status.reblog.account.display_name : status.account.display_name;
user.label = "<b>%s</b>".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){