2018-04-14 12:09:06 +00:00
|
|
|
public class Tootle.Account{
|
|
|
|
|
2018-05-01 13:16:07 +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;
|
2018-05-01 13:16:07 +00:00
|
|
|
|
|
|
|
public Relationship? rs;
|
2018-04-14 12:09:06 +00:00
|
|
|
|
2018-04-14 17:18:42 +00:00
|
|
|
public Account(int64 id){
|
|
|
|
this.id = id;
|
|
|
|
}
|
|
|
|
|
|
|
|
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
|
|
|
}
|
2018-05-01 13:16:07 +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);
|
2018-05-01 13:16:07 +00:00
|
|
|
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) => {
|
2018-05-01 13:16:07 +00:00
|
|
|
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);
|
2018-05-01 13:16:07 +00:00
|
|
|
var msg = new Soup.Message("POST", url);
|
|
|
|
msg.priority = Soup.MessagePriority.HIGH;
|
2018-05-11 15:19:48 +00:00
|
|
|
Tootle.network.queue (msg, (sess, mess) => {
|
2018-05-01 13:16:07 +00:00
|
|
|
try{
|
|
|
|
var root = Tootle.network.parse (mess);
|
|
|
|
rs = Relationship.parse (root);
|
|
|
|
updated ();
|
|
|
|
}
|
|
|
|
catch (GLib.Error e) {
|
|
|
|
Tootle.app.error (_("Error"), e.message);
|
|
|
|
warning (e.message);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
return msg;
|
|
|
|
}
|
|
|
|
|
|
|
|
public Soup.Message set_muted (bool mute = true){
|
|
|
|
var action = mute ? "mute" : "unmute";
|
2018-05-27 16:25:16 +00:00
|
|
|
var url = "%s/api/v1/accounts/%lld/%s".printf (Tootle.accounts.formal.instance, id, action);
|
2018-05-01 13:16:07 +00:00
|
|
|
var msg = new Soup.Message("POST", url);
|
|
|
|
msg.priority = Soup.MessagePriority.HIGH;
|
2018-05-11 15:19:48 +00:00
|
|
|
Tootle.network.queue (msg, (sess, mess) => {
|
2018-05-01 13:16:07 +00:00
|
|
|
try{
|
|
|
|
var root = Tootle.network.parse (mess);
|
|
|
|
rs = Relationship.parse (root);
|
|
|
|
updated ();
|
|
|
|
}
|
|
|
|
catch (GLib.Error e) {
|
|
|
|
Tootle.app.error (_("Error"), e.message);
|
|
|
|
warning (e.message);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
return msg;
|
|
|
|
}
|
|
|
|
|
|
|
|
public Soup.Message set_blocked (bool block = true){
|
|
|
|
var action = block ? "block" : "unblock";
|
2018-05-27 16:25:16 +00:00
|
|
|
var url = "%s/api/v1/accounts/%lld/%s".printf (Tootle.accounts.formal.instance, id, action);
|
2018-05-01 13:16:07 +00:00
|
|
|
var msg = new Soup.Message("POST", url);
|
|
|
|
msg.priority = Soup.MessagePriority.HIGH;
|
2018-05-11 15:19:48 +00:00
|
|
|
Tootle.network.queue (msg, (sess, mess) => {
|
2018-05-01 13:16:07 +00:00
|
|
|
try{
|
|
|
|
var root = Tootle.network.parse (mess);
|
|
|
|
rs = Relationship.parse (root);
|
|
|
|
updated ();
|
|
|
|
}
|
|
|
|
catch (GLib.Error e) {
|
|
|
|
Tootle.app.error (_("Error"), e.message);
|
|
|
|
warning (e.message);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
return msg;
|
|
|
|
}
|
2018-04-14 12:09:06 +00:00
|
|
|
|
|
|
|
}
|