tootle-linux-client/src/API/Account.vala

114 lines
3.3 KiB
Vala
Raw Normal View History

2020-06-29 23:43:45 +02:00
public class Tootle.API.Account : Entity, Widgetizable {
2020-05-29 14:19:35 +02:00
2020-06-20 12:04:58 +02:00
public string id { get; set; }
2020-05-29 14:19:35 +02:00
public string username { get; set; }
public string acct { get; set; }
public string? _display_name = null;
public string display_name {
set {
this._display_name = value;
}
get {
return (_display_name == null || _display_name == "") ? username : _display_name;
}
2018-04-14 19:18:42 +02:00
}
2020-05-29 14:19:35 +02:00
public string note { get; set; }
public string header { get; set; }
public string avatar { get; set; }
public string url { get; set; }
public string created_at { get; set; }
public int64 followers_count { get; set; }
public int64 following_count { get; set; }
2020-06-20 12:04:58 +02:00
public int64 statuses_count { get; set; }
2020-05-29 14:19:35 +02:00
public Relationship? rs { get; set; default = null; }
2020-06-29 23:43:45 +02:00
public Gee.ArrayList<API.AccountField>? fields { get; set; default = null; }
public string handle {
owned get {
return "@" + acct;
}
}
2020-05-29 14:19:35 +02:00
2020-06-20 12:04:58 +02:00
public static Account from (Json.Node node) throws Error {
return Entity.from_json (typeof (API.Account), node) as API.Account;
}
2019-03-11 15:14:37 +01:00
2020-05-29 14:19:35 +02:00
public bool is_self () {
return id == accounts.active.id;
}
2020-08-01 17:40:56 +02:00
public override bool is_local (InstanceAccount account) {
return account.short_instance in url;
}
2020-06-29 23:43:45 +02:00
public override Gtk.Widget to_widget () {
var status = new API.Status.from_account (this);
return new Widgets.Status (status);
2020-06-29 23:43:45 +02:00
}
2020-08-01 17:40:56 +02:00
public override void open () {
var view = new Views.Profile (this);
window.open_view (view);
}
public override void resolve_open (InstanceAccount account) {
if (is_local (account))
open ();
else {
account.resolve.begin (url, (obj, res) => {
account.resolve.end (res).open ();
});
}
}
2020-05-29 14:19:35 +02:00
public Request get_relationship () {
return new Request.GET ("/api/v1/accounts/relationships")
.with_account (accounts.active)
.with_param ("id", id.to_string ())
2020-07-10 16:22:38 +02:00
.then ((sess, msg) => {
Network.parse_array (msg, node => {
rs = API.Relationship.from (node);
});
2020-05-29 14:19:35 +02:00
})
.on_error (network.on_error)
.exec ();
}
2019-03-11 15:14:37 +01:00
2020-05-29 14:19:35 +02:00
public Request set_following (bool state = true) {
var action = state ? "follow" : "unfollow";
return new Request.POST (@"/api/v1/accounts/$id/$action")
.with_account (accounts.active)
.then ((sess, msg) => {
2020-06-20 12:04:58 +02:00
var node = network.parse_node (msg);
rs = API.Relationship.from (node);
2020-05-29 14:19:35 +02:00
})
.on_error (network.on_error)
.exec ();
}
2020-05-29 14:19:35 +02:00
public Request set_muted (bool state = true) {
var action = state ? "mute" : "unmute";
return new Request.POST (@"/api/v1/accounts/$id/$action")
.with_account (accounts.active)
.then ((sess, msg) => {
2020-06-20 12:04:58 +02:00
var node = network.parse_node (msg);
rs = API.Relationship.from (node);
2020-05-29 14:19:35 +02:00
})
.on_error (network.on_error)
.exec ();
}
2019-03-11 15:14:37 +01:00
2020-05-29 14:19:35 +02:00
public Request set_blocked (bool state = true) {
var action = state ? "block" : "unblock";
return new Request.POST (@"/api/v1/accounts/$id/$action")
.with_account (accounts.active)
.then ((sess, msg) => {
2020-06-20 12:04:58 +02:00
var node = network.parse_node (msg);
rs = API.Relationship.from (node);
2020-05-29 14:19:35 +02:00
})
.on_error (network.on_error)
.exec ();
}
2018-04-14 14:09:06 +02:00
}