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

138 lines
4.9 KiB
Vala
Raw Normal View History

2020-05-29 14:19:35 +02:00
public class Tootle.API.Account : GLib.Object {
public int64 id { get; set; }
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; }
public int64 posts_count { get; set; }
public Relationship? rs { get; set; default = null; }
public Account (Json.Object obj) {
Object (
id: int64.parse (obj.get_string_member ("id")),
username: obj.get_string_member ("username"),
acct: obj.get_string_member ("acct"),
display_name: obj.get_string_member ("display_name"),
note: obj.get_string_member ("note"),
avatar: obj.get_string_member ("avatar"),
header: obj.get_string_member ("header"),
url: obj.get_string_member ("url"),
created_at: obj.get_string_member ("created_at"),
followers_count: obj.get_int_member ("followers_count"),
following_count: obj.get_int_member ("following_count"),
posts_count: obj.get_int_member ("statuses_count")
);
2019-03-11 15:14:37 +01:00
2018-05-17 23:27:44 +02:00
if (obj.has_member ("fields")) {
obj.get_array_member ("fields").foreach_element ((array, i, node) => {
var field_obj = node.get_object ();
var field_name = field_obj.get_string_member ("name");
var field_val = field_obj.get_string_member ("value");
2020-05-29 14:19:35 +02:00
note += "\n";
note += field_name + ": ";
note += field_val;
2018-05-17 23:27:44 +02:00
});
}
2018-04-14 14:09:06 +02:00
}
2019-03-11 15:14:37 +01:00
2020-05-29 14:19:35 +02:00
public virtual Json.Node? serialize () {
2018-10-30 16:57:37 +01:00
var builder = new Json.Builder ();
builder.begin_object ();
builder.set_member_name ("id");
builder.add_string_value (id.to_string ());
builder.set_member_name ("created_at");
builder.add_string_value (created_at);
builder.set_member_name ("following_count");
builder.add_int_value (following_count);
builder.set_member_name ("followers_count");
builder.add_int_value (followers_count);
builder.set_member_name ("statuses_count");
2020-05-29 14:19:35 +02:00
builder.add_int_value (posts_count);
2018-10-30 16:57:37 +01:00
builder.set_member_name ("display_name");
builder.add_string_value (display_name);
builder.set_member_name ("username");
builder.add_string_value (username);
builder.set_member_name ("acct");
builder.add_string_value (acct);
builder.set_member_name ("note");
builder.add_string_value (note);
builder.set_member_name ("header");
builder.add_string_value (header);
builder.set_member_name ("avatar");
builder.add_string_value (avatar);
builder.set_member_name ("url");
builder.add_string_value (url);
2019-03-11 15:14:37 +01:00
2018-10-30 16:57:37 +01:00
builder.end_object ();
return builder.get_root ();
}
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-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 ())
.then_parse_array (node => {
rs = new Relationship (node.get_object ());
})
.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) => {
var root = network.parse (msg);
rs = new Relationship (root);
})
.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) => {
var root = network.parse (msg);
rs = new Relationship (root);
})
.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) => {
var root = network.parse (msg);
rs = new Relationship (root);
})
.on_error (network.on_error)
.exec ();
}
2018-04-14 14:09:06 +02:00
}