Tooth/src/API/Account.vala

169 lines
5.9 KiB
Vala
Raw Normal View History

2019-03-11 14:14:37 +00:00
public class Tootle.API.Account {
2018-04-14 12:09:06 +00:00
public abstract signal void updated ();
2018-04-14 17:18:42 +00:00
public int64 id;
2018-04-14 12:09:06 +00:00
public string username;
2018-04-14 17:18:42 +00:00
public string acct;
2018-04-14 12:09:06 +00:00
public string display_name;
public string note;
2018-04-25 14:30:44 +00:00
public string header;
2018-04-14 17:18:42 +00:00
public string avatar;
2018-04-17 12:01:55 +00:00
public string url;
2018-05-14 14:43:10 +00:00
public string created_at;
2018-04-25 14:30:44 +00:00
public int64 followers_count;
public int64 following_count;
public int64 statuses_count;
2019-03-11 14:14:37 +00:00
public Relationship? rs;
2018-04-14 12:09:06 +00:00
2018-10-23 10:05:24 +00:00
public Account (int64 _id){
id = _id;
2018-04-14 17:18:42 +00:00
}
2019-03-11 14:14:37 +00:00
2018-04-14 17:18:42 +00:00
public static Account parse(Json.Object obj) {
var id = int64.parse (obj.get_string_member ("id"));
var account = new Account (id);
2019-03-11 14:14:37 +00:00
2018-04-14 17:18:42 +00:00
account.username = obj.get_string_member ("username");
account.acct = obj.get_string_member ("acct");
account.display_name = obj.get_string_member ("display_name");
2018-04-21 09:21:03 +00:00
if (account.display_name == "")
account.display_name = account.username;
2018-04-14 17:18:42 +00:00
account.note = obj.get_string_member ("note");
account.avatar = obj.get_string_member ("avatar");
2018-04-25 14:30:44 +00:00
account.header = obj.get_string_member ("header");
2018-04-17 12:01:55 +00:00
account.url = obj.get_string_member ("url");
2018-05-14 14:43:10 +00:00
account.created_at = obj.get_string_member ("created_at");
2019-03-11 14:14:37 +00:00
2018-04-25 14:30:44 +00:00
account.followers_count = obj.get_int_member ("followers_count");
account.following_count = obj.get_int_member ("following_count");
account.statuses_count = obj.get_int_member ("statuses_count");
2019-03-11 14:14:37 +00:00
2018-05-17 21:27:44 +00: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");
account.note += "\n";
account.note += field_name + ": ";
account.note += field_val;
});
}
2019-03-11 14:14:37 +00:00
2018-04-14 17:18:42 +00:00
return account;
2018-04-14 12:09:06 +00:00
}
2019-03-11 14:14:37 +00:00
2018-10-30 15:57:37 +00:00
public Json.Node? serialize () {
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");
builder.add_int_value (statuses_count);
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 14:14:37 +00:00
2018-10-30 15:57:37 +00:00
builder.end_object ();
return builder.get_root ();
}
2019-03-11 14:14:37 +00:00
public bool is_self (){
2019-03-11 14:14:37 +00:00
return id == accounts.current.id;
}
public Soup.Message get_relationship (){
2019-03-11 14:14:37 +00:00
var url = "%s/api/v1/accounts/relationships?id=%lld".printf (accounts.formal.instance, id);
var msg = new Soup.Message("GET", url);
msg.priority = Soup.MessagePriority.HIGH;
2018-05-11 15:19:48 +00:00
Tootle.network.queue (msg, (sess, mess) => {
try{
var root = Tootle.network.parse_array (mess).get_object_element (0);
rs = Relationship.parse (root);
updated ();
}
catch (GLib.Error e) {
warning ("Can't get account relationship:");
warning (e.message);
}
});
return msg;
}
2019-03-11 14:14:37 +00:00
public Soup.Message set_following (bool follow = true){
2019-03-11 14:14:37 +00:00
var action = follow ? "follow" : "unfollow";
var url = "%s/api/v1/accounts/%lld/%s".printf (accounts.formal.instance, id, action);
var msg = new Soup.Message("POST", url);
msg.priority = Soup.MessagePriority.HIGH;
2018-10-23 10:05:24 +00:00
network.queue (msg, (sess, mess) => {
try{
2018-10-23 10:05:24 +00:00
var root = network.parse (mess);
rs = Relationship.parse (root);
updated ();
}
catch (GLib.Error e) {
2018-10-23 10:05:24 +00:00
app.error (_("Error"), e.message);
warning (e.message);
}
});
return msg;
}
public Soup.Message set_muted (bool mute = true){
2019-03-11 14:14:37 +00:00
var action = mute ? "mute" : "unmute";
2018-10-23 10:05:24 +00:00
var url = "%s/api/v1/accounts/%lld/%s".printf (accounts.formal.instance, id, action);
var msg = new Soup.Message("POST", url);
msg.priority = Soup.MessagePriority.HIGH;
2018-10-23 10:05:24 +00:00
network.queue (msg, (sess, mess) => {
try{
2018-10-23 10:05:24 +00:00
var root = network.parse (mess);
rs = Relationship.parse (root);
updated ();
}
catch (GLib.Error e) {
2018-10-23 10:05:24 +00:00
app.error (_("Error"), e.message);
warning (e.message);
}
});
return msg;
}
2019-03-11 14:14:37 +00:00
public Soup.Message set_blocked (bool block = true){
2019-03-11 14:14:37 +00:00
var action = block ? "block" : "unblock";
2018-10-23 10:05:24 +00:00
var url = "%s/api/v1/accounts/%lld/%s".printf (accounts.formal.instance, id, action);
var msg = new Soup.Message("POST", url);
msg.priority = Soup.MessagePriority.HIGH;
2018-10-23 10:05:24 +00:00
network.queue (msg, (sess, mess) => {
try{
2018-10-23 10:05:24 +00:00
var root = network.parse (mess);
rs = Relationship.parse (root);
updated ();
}
catch (GLib.Error e) {
2018-10-23 10:05:24 +00:00
app.error (_("Error"), e.message);
warning (e.message);
}
});
return msg;
}
2018-04-14 12:09:06 +00:00
}