aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarius Halden <marius.h@lden.org>2016-03-19 21:27:10 +0100
committerMarius Halden <marius.h@lden.org>2016-03-19 21:27:10 +0100
commit1e0192e1a60e86e225bec4d5eb473084925b5781 (patch)
tree64bf4beca1080cab5ac194b314e7897377451dc6
parent01eee14abb52cf2140ea355315851c03bf396014 (diff)
parentd9862d75391e421649e75d2b96e5b21fae3a46dd (diff)
downloadbitlbee-facebook-1e0192e1a60e86e225bec4d5eb473084925b5781.tar.gz
bitlbee-facebook-1e0192e1a60e86e225bec4d5eb473084925b5781.tar.bz2
bitlbee-facebook-1e0192e1a60e86e225bec4d5eb473084925b5781.tar.xz
Merge branch 'fbmark' into patched
-rw-r--r--facebook/facebook.c103
1 files changed, 103 insertions, 0 deletions
diff --git a/facebook/facebook.c b/facebook/facebook.c
index b165da8..a9cae84 100644
--- a/facebook/facebook.c
+++ b/facebook/facebook.c
@@ -1104,6 +1104,108 @@ fb_cmd_fbjoin(irc_t *irc, char **args)
irc_rootmsg(irc, "Joining channel %s", chan);
}
+static gboolean
+fb_buddy_by_name(irc_t *irc, const gchar *name, FbId *id)
+{
+ irc_user_t *iu;
+ iu = irc_user_by_name(irc, name);
+ if (iu == NULL) {
+ return FALSE;
+ }
+
+ *id = FB_ID_FROM_STR(iu->bu->handle);
+ return TRUE;
+}
+
+static gboolean
+fb_chat_by_channel(irc_t *irc, struct im_connection *ic, const gchar *name, FbId *id)
+{
+ const gchar *tag;
+ const gchar *room;
+ GSList *l;
+ irc_channel_t *ich;
+
+ for (l = irc->channels; l != NULL; l = l->next) {
+ ich = l->data;
+
+ tag = set_getstr(&ich->set, "account");
+ if (g_strcmp0(tag, ic->acc->tag) != 0) {
+ continue;
+ }
+
+ if (g_strcmp0(ich->name, name) != 0) {
+ continue;
+ }
+
+ room = set_getstr(&ich->set, "room");
+ *id = FB_ID_FROM_STR(room);
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static gboolean
+fb_chat_by_index(FbData *fata, const gchar *name, FbId *id)
+{
+ guint i;
+ FbId tid;
+
+ i = g_ascii_strtoll(name, NULL, 10);
+ tid = fb_data_get_thread(fata, i - 1);
+
+ if ((i < 1) || (tid == 0)) {
+ return FALSE;
+ }
+
+ *id = tid;
+ return TRUE;
+}
+
+static void
+fb_cmd_fbmark(irc_t *irc, char **args)
+{
+ account_t *acct;
+ FbApi *api;
+ FbData *fata;
+ FbId id;
+ gchar *name;
+ guint oset;
+ guint i;
+ gboolean is_gc;
+ struct im_connection *ic;
+
+ acct = fb_cmd_account(irc, args, 1, &oset);
+
+ if (acct == NULL) {
+ return;
+ }
+
+ fata = acct->ic->proto_data;
+ api = fb_data_get_api(fata);
+ ic = fb_data_get_connection(fata);
+
+ name = args[oset];
+
+ if (fb_buddy_by_name(irc, name, &id)) {
+ irc_rootmsg(irc, "Found user %d", id); // XXX
+ is_gc = FALSE;
+ } else if (fb_chat_by_channel(irc, ic, name, &id)) {
+ irc_rootmsg(irc, "Found chat %d", id); // XXX
+ is_gc = TRUE;
+ } else if (fb_chat_by_index(fata, name, &id)) {
+ irc_rootmsg(irc, "Found chat %d", id); // XXX
+ is_gc = TRUE;
+ } else {
+ irc_rootmsg(irc, "Unknown buddy/chat %s", name);
+ return;
+ }
+
+ fb_api_read(api, id, is_gc);
+ irc_rootmsg(irc, "Marked messages %s %s as read", ((is_gc)?"in chat":"from"), name);
+}
+
G_MODULE_EXPORT void
init_plugin(void);
@@ -1144,4 +1246,5 @@ init_plugin(void)
root_command_add("fbchats", 0, fb_cmd_fbchats, 0);
root_command_add("fbcreate", 0, fb_cmd_fbcreate, 0);
root_command_add("fbjoin", 0, fb_cmd_fbjoin, 0);
+ root_command_add("fbmark", 0, fb_cmd_fbmark, 0);
}