diff options
-rw-r--r-- | facebook/facebook.c | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/facebook/facebook.c b/facebook/facebook.c index 5982512..0ba4b01 100644 --- a/facebook/facebook.c +++ b/facebook/facebook.c @@ -1055,6 +1055,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); @@ -1095,4 +1197,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); } |