/soc/2015/igor.gajowiak/chatlog: 17b9adaadd7e: Replaced buddy wi...
Igor Gajowiak <[email protected]>
| Newsgroups | gmane.comp.gnome.gaim.cvs |
|---|---|
| Message-ID | <[email protected]> |
Changeset: 17b9adaadd7ebec33a7182586309d8e14158acd1 Author: Igor Gajowiak <[email protected]> Date: 2015-08-11 08:02 +0200 Branch: default URL: https://hg.pidgin.im/soc/2015/igor.gajowiak/chatlog/rev/17b9adaadd7e Description: Replaced buddy with contact in some places. Added exporting chat messages from legacy log. diffstat: libpurple/genericlog.c | 10 +++--- libpurple/genericlog.h | 16 ++++++------ libpurple/plugins/log/legacylog.c | 49 ++++++++++++++++++++++++++------------ libpurple/plugins/log/logsqlite.c | 17 ++++++------- pidgin/gtkgenericlog.c | 4 +- 5 files changed, 56 insertions(+), 40 deletions(-) diffs (272 lines): diff --git a/libpurple/genericlog.c b/libpurple/genericlog.c --- a/libpurple/genericlog.c +++ b/libpurple/genericlog.c @@ -311,11 +311,11 @@ purple_genericlog_get_older_msgs(PurpleB } gboolean -purple_genericlog_get_all_buddies(GList** result, GError** error) +purple_genericlog_get_all_contacts(GList** result, GError** error) { - DEFINE_GENERICLOG_FUNC_WITH_RETURN(get_all_buddies, - "%s does not support getting buddies", - "Getting buddies from %s failed", result); + DEFINE_GENERICLOG_FUNC_WITH_RETURN(get_all_contacts, + "%s does not support getting contacts", + "Getting contacts from %s failed", result); } gboolean @@ -563,7 +563,7 @@ purple_genericlog_class_init(PurpleGener klass->get_unseen_msgs = NULL; klass->get_all_msgs = NULL; klass->get_older_msgs = NULL; - klass->get_all_buddies = NULL; + klass->get_all_contacts = NULL; klass->get_all_days = NULL; klass->wipe_log_for_contact = NULL; klass->init_export = NULL; diff --git a/libpurple/genericlog.h b/libpurple/genericlog.h --- a/libpurple/genericlog.h +++ b/libpurple/genericlog.h @@ -74,11 +74,11 @@ struct _PurpleGenericLog * then upper bound check is skipped. Messages are sorted * by their timestamp in descending order. * Returns %TRUE if operation succeeds, %FALSE otherwise. - * @get_all_buddies: Gets a list of all #PurpleBlistNode objects with at least - * one message in the log. Returns %TRUE if operation - * succeeds, %FALSE otherwise. The client is responsible for - * freeing the result using - * g_list_free_full(result, g_object_unref). + * @get_all_contacts: Gets a list of all #PurpleBlistNode objects with at least + * one message in the log. Returns %TRUE if operation + * succeeds, %FALSE otherwise. The client is responsible for + * freeing the result using + * g_list_free_full(result, g_object_unref). * @get_all_days: Gets an array of all days with at least one message * received from or sent to a given contact * (PurpleChat or PurpleBuddy). The days are sorted @@ -127,7 +127,7 @@ struct _PurpleGenericLogClass gboolean (*get_older_msgs)(PurpleBlistNode *contact, guint64 timestamp, PurpleMessage *message, GList **result); - gboolean (*get_all_buddies)(GList **result); + gboolean (*get_all_contacts)(GList **result); gboolean (*get_all_days)(PurpleBlistNode *contact, GArray **result); @@ -354,7 +354,7 @@ purple_genericlog_get_older_msgs(PurpleB PurpleMessage *message, GList **result, GError **error); /** - * purple_genericlog_get_all_buddies: + * purple_genericlog_get_all_contacts: * @result[out]: Return location for a #GList containing a list of #PurpleBuddy * objects. This will not be set in case of any errors. * @error: Return location for a #GError or %NULL. If provided, this @@ -369,7 +369,7 @@ purple_genericlog_get_older_msgs(PurpleB * Returns: %TRUE if succeeds, %FALSE otherwise. */ gboolean -purple_genericlog_get_all_buddies(GList **result, GError **error); +purple_genericlog_get_all_contacts(GList **result, GError **error); /** * purple_genericlog_get_all_days: diff --git a/libpurple/plugins/log/legacylog.c b/libpurple/plugins/log/legacylog.c --- a/libpurple/plugins/log/legacylog.c +++ b/libpurple/plugins/log/legacylog.c @@ -40,14 +40,15 @@ static GRegex *msg_regex = NULL; static GRegex *date_regex = NULL; static GRegex *time_regex = NULL; +static GRegex *contact_regex = NULL; typedef enum { - DIR_DEPTH_PROTOCOL = 1, - DIR_DEPTH_ACCOUNT = 2, - DIR_DEPTH_BUDDYNAME = 3, - DIR_DEPTH_LAST = 3, - DIR_DEPTH_MAX = 4 + DIR_DEPTH_PROTOCOL = 1, + DIR_DEPTH_ACCOUNT = 2, + DIR_DEPTH_CONTACTNAME = 3, + DIR_DEPTH_LAST = 3, + DIR_DEPTH_MAX = 4 } DirDepth; typedef struct _Iter @@ -368,7 +369,18 @@ get_account(const Iter *iter) static PurpleBlistNode * get_contact(PurpleAccount *account, const Iter *iter) { - const gchar *contact_name = iter->dir_names[DIR_DEPTH_BUDDYNAME]; + GMatchInfo *info; + + gchar *contact_name = NULL; + + /* If dir name matches "xxx.chat" then it is a chat */ + if (g_regex_match(contact_regex, iter->dir_names[DIR_DEPTH_CONTACTNAME], 0, + &info)) { + contact_name = g_match_info_fetch(info, 1); + } + else { + contact_name = g_strdup(iter->dir_names[DIR_DEPTH_CONTACTNAME]); + } PurpleBlistNode *contact = PURPLE_BLIST_NODE(purple_blist_find_buddy( account, contact_name)); @@ -378,29 +390,30 @@ get_contact(PurpleAccount *account, cons account, contact_name)); } + g_match_info_free(info); + g_free(contact_name); + return contact; } static PurpleMessage* -make_message(PurpleAccount *account, const gchar *contents, const gchar *color, - const gchar *msg_time, const Iter *iter) +make_message(PurpleAccount *account, PurpleBlistNode *contact, + const gchar *contents, const gchar *color, const gchar *msg_time, + const Iter *iter) { - PurpleBuddy *buddy = purple_blist_find_buddy(account, - iter->dir_names[DIR_DEPTH_BUDDYNAME]); - if (!buddy) - return NULL; - + g_return_val_if_fail(contact != NULL, NULL); + guint64 timestamp; if(!parse_timestamp(iter->log_file_name, msg_time, ×tamp)) return NULL; PurpleMessage *msg; if (strcmp(color, "#A82F2F") == 0) { - msg = purple_message_new_incoming(purple_buddy_get_name(buddy), + msg = purple_message_new_incoming(PURPLE_BLIST_NODE_NAME(contact), contents, PURPLE_MESSAGE_RECV, 0); } else { - msg = purple_message_new_outgoing(purple_buddy_get_name(buddy), + msg = purple_message_new_outgoing(PURPLE_BLIST_NODE_NAME(contact), contents, PURPLE_MESSAGE_SEND); } @@ -448,7 +461,7 @@ fill_arrays(gchar *text, GArray *account PurpleAccount *acc = get_account(iter); PurpleBlistNode *contact = get_contact(acc, iter); - PurpleMessage *msg = make_message(acc, div_removed, color, + PurpleMessage *msg = make_message(acc, contact, div_removed, color, msg_time, iter); g_free(div_removed); @@ -681,6 +694,9 @@ plugin_load(PurplePlugin *plugin, GError 0, 0, NULL); g_assert(time_regex); + contact_regex = g_regex_new("^(.*)\\.chat$", 0, 0, NULL); + g_assert(contact_regex); + return TRUE; } @@ -690,6 +706,7 @@ plugin_unload(PurplePlugin *plugin, GErr g_regex_unref(msg_regex); g_regex_unref(date_regex); g_regex_unref(time_regex); + g_regex_unref(contact_regex); purple_genericlog_unregister(PURPLE_GENERICLOG(legacylog_instance)); g_object_unref(legacylog_instance); diff --git a/libpurple/plugins/log/logsqlite.c b/libpurple/plugins/log/logsqlite.c --- a/libpurple/plugins/log/logsqlite.c +++ b/libpurple/plugins/log/logsqlite.c @@ -395,8 +395,8 @@ sqlitelog_create_tables(sqlite3 *db_hand "AccountId INTEGER NOT NULL, " "FOREIGN KEY(AccountId) REFERENCES Accounts(Id)); " - /* For fetching buddy ID */ - "CREATE UNIQUE INDEX BuddiesIndex ON Contacts(AccountId, Name); " + /* For fetching contact ID */ + "CREATE UNIQUE INDEX ContactsIndex ON Contacts(AccountId, Name); " "CREATE TABLE Days(" "Id INTEGER PRIMARY KEY AUTOINCREMENT, " @@ -404,7 +404,7 @@ sqlitelog_create_tables(sqlite3 *db_hand "ContactId INTEGER NOT NULL, " "FOREIGN KEY(ContactId) REFERENCES Contacts(Id)); " - /* For fetching days for a given buddy */ + /* For fetching days for a given contact */ "CREATE UNIQUE INDEX DaysIndex ON Days(ContactId, Time); " "CREATE TABLE Messages(" @@ -437,7 +437,7 @@ sqlitelog_create_tables(sqlite3 *db_hand "DELETE FROM Contacts WHERE AccountId = OLD.Id; " "END; " - "CREATE TRIGGER BuddyDeleted AFTER DELETE ON Contacts " + "CREATE TRIGGER ContactDeleted AFTER DELETE ON Contacts " "BEGIN " "DELETE FROM Messages WHERE ContactId = OLD.Id; " "DELETE FROM Days WHERE ContactId = OLD.Id; " @@ -944,7 +944,7 @@ sqlitelog_mark_as_seen_impl(unsigned msg } static gboolean -sqlitelog_get_all_buddies_impl(GList **result) +sqlitelog_get_all_contacts_impl(GList **result) { g_assert(result); @@ -1282,7 +1282,7 @@ sqlitelog_get_older_msgs(PurpleBlistNode } static gboolean -sqlitelog_get_all_buddies(GList **result) +sqlitelog_get_all_contacts(GList **result) { g_return_val_if_fail(result != NULL, FALSE); @@ -1292,10 +1292,9 @@ sqlitelog_get_all_buddies(GList **result return FALSE; } - return sqlitelog_get_all_buddies_impl(result); + return sqlitelog_get_all_contacts_impl(result); } - static gboolean sqlitelog_get_all_days(PurpleBlistNode *contact, GArray **result) { @@ -1371,7 +1370,7 @@ purple_sqlitelog_class_init (PurpleSqlit klass->parent_class.get_unseen_msgs = sqlitelog_get_unseen_msgs; klass->parent_class.get_all_msgs = sqlitelog_get_all_msgs; klass->parent_class.get_older_msgs = sqlitelog_get_older_msgs; - klass->parent_class.get_all_buddies = sqlitelog_get_all_buddies; + klass->parent_class.get_all_contacts = sqlitelog_get_all_contacts; klass->parent_class.get_all_days = sqlitelog_get_all_days; klass->parent_class.wipe_log_for_contact = sqlitelog_wipe_log_for_contact; diff --git a/pidgin/gtkgenericlog.c b/pidgin/gtkgenericlog.c --- a/pidgin/gtkgenericlog.c +++ b/pidgin/gtkgenericlog.c @@ -708,9 +708,9 @@ populate_buddylist_store(GtkTreeStore *s gtk_tree_store_clear(store); GList *contacts; - if (!purple_genericlog_get_all_buddies(&contacts, NULL)) { + if (!purple_genericlog_get_all_contacts(&contacts, NULL)) { purple_debug_error(GTKGENERICLOG_DEBUG_CATEGORY, - "Getting buddies failed"); + "Getting contacts failed"); return; } _______________________________________________ Commits mailing list [email protected] https://pidgin.im/cgi-bin/mailman/listinfo/commits