Tooth/src/API/Account.vala

137 lines
4.7 KiB
Vala
Raw Normal View History

2018-04-14 12:09:06 +00:00
public class Tootle.Account{
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;
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
}
public static Account parse(Json.Object obj) {
var id = int64.parse (obj.get_string_member ("id"));
var account = new Account (id);
2018-04-14 12:09:06 +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");
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");
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;
});
}
2018-04-14 17:18:42 +00:00
return account;
2018-04-14 12:09:06 +00:00
}
public bool is_self (){
return id == Tootle.accounts.current.id;
}
public Soup.Message get_relationship (){
2018-05-27 16:25:16 +00:00
var url = "%s/api/v1/accounts/relationships?id=%lld".printf (Tootle.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;
}
public Soup.Message set_following (bool follow = true){
var action = follow ? "follow" : "unfollow";
2018-05-27 16:25:16 +00:00
var url = "%s/api/v1/accounts/%lld/%s".printf (Tootle.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){
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;
}
public Soup.Message set_blocked (bool block = true){
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
}