mirror of
https://github.com/TakeV-Lambda/Tooth.git
synced 2024-09-27 13:13:20 +00:00
9e3851858f
- search results are now ActionRows and display information about usage - you can now (un)follow hashtags
83 lines
2.5 KiB
Vala
83 lines
2.5 KiB
Vala
public class Tooth.Views.Hashtag : Views.Timeline {
|
|
|
|
bool t_following = false;
|
|
string t_tag = "";
|
|
public Hashtag (string tag, bool? following = null) {
|
|
Object (
|
|
url: @"/api/v1/timelines/tag/$tag",
|
|
label: "#"+tag
|
|
);
|
|
|
|
t_tag = tag;
|
|
if (following != null) {
|
|
t_following = following;
|
|
create_follow_button();
|
|
} else {
|
|
init_tag();
|
|
}
|
|
}
|
|
|
|
Gtk.Button follow_tag_btn = new Gtk.Button.with_label(_("Follow"));
|
|
private void create_follow_button() {
|
|
if (t_following) {
|
|
follow_tag_btn.label = _("Unfollow");
|
|
follow_tag_btn.add_css_class("destructive-action");
|
|
} else {
|
|
follow_tag_btn.add_css_class("suggested-action");
|
|
}
|
|
follow_tag_btn.clicked.connect(follow);
|
|
|
|
header.pack_end(follow_tag_btn);
|
|
}
|
|
|
|
private void update_button() {
|
|
if (t_following) {
|
|
follow_tag_btn.label = _("Follow");
|
|
follow_tag_btn.remove_css_class("destructive-action");
|
|
follow_tag_btn.add_css_class("suggested-action");
|
|
} else {
|
|
follow_tag_btn.label = _("Unfollow");
|
|
follow_tag_btn.remove_css_class("suggested-action");
|
|
follow_tag_btn.add_css_class("destructive-action");
|
|
}
|
|
t_following = !t_following;
|
|
}
|
|
|
|
private void follow() {
|
|
var action = "follow";
|
|
if (t_following) {
|
|
action = "unfollow";
|
|
}
|
|
update_button();
|
|
|
|
new Request.POST (@"/api/v1/tags/$t_tag/$action")
|
|
.with_account (accounts.active)
|
|
.then ((sess, msg) => {
|
|
var root = network.parse (msg);
|
|
if (!root.has_member("following")) {
|
|
update_button();
|
|
};
|
|
})
|
|
.exec ();
|
|
}
|
|
|
|
private void init_tag() {
|
|
new Request.GET (@"/api/v1/tags/$t_tag")
|
|
.with_account (accounts.active)
|
|
.then ((sess, msg) => {
|
|
var node = network.parse_node (msg);
|
|
var tag_info = API.Tag.from (node);
|
|
t_following = tag_info.following;
|
|
create_follow_button();
|
|
})
|
|
.exec ();
|
|
}
|
|
|
|
public override string? get_stream_url () {
|
|
var split_url = url.split ("/");
|
|
var tag = split_url[split_url.length - 1];
|
|
return account != null ? @"$(account.instance)/api/v1/streaming/?stream=hashtag&tag=$tag&access_token=$(account.access_token)" : null;
|
|
}
|
|
|
|
}
|