static gchar * log_store_empathy_get_dir (EmpathyLogStore *self, TpAccount *account, const gchar *chat_id, gboolean chatroom) { gchar *basedir; gchar *escaped; EmpathyLogStoreEmpathyPriv *priv; priv = GET_PRIV (self); escaped = log_store_account_to_dirname (account); if (chatroom) basedir = g_build_path (G_DIR_SEPARATOR_S, priv->basedir, escaped, LOG_DIR_CHATROOMS, chat_id, NULL); else basedir = g_build_path (G_DIR_SEPARATOR_S, priv->basedir, escaped, chat_id, NULL); g_free (escaped); return basedir; }
static EmpathyLogSearchHit * log_store_empathy_search_hit_new (EmpathyLogStore *self, const gchar *filename) { EmpathyLogStoreEmpathyPriv *priv = GET_PRIV (self); EmpathyLogSearchHit *hit; gchar *account_name; const gchar *end; gchar **strv; guint len; GList *accounts, *l; if (!g_str_has_suffix (filename, LOG_FILENAME_SUFFIX)) return NULL; strv = g_strsplit (filename, G_DIR_SEPARATOR_S, -1); len = g_strv_length (strv); hit = g_slice_new0 (EmpathyLogSearchHit); end = strstr (strv[len-1], LOG_FILENAME_SUFFIX); hit->date = g_strndup (strv[len-1], end - strv[len-1]); hit->chat_id = g_strdup (strv[len-2]); hit->is_chatroom = (strcmp (strv[len-3], LOG_DIR_CHATROOMS) == 0); if (hit->is_chatroom) account_name = strv[len-4]; else account_name = strv[len-3]; /* FIXME: This assumes the account manager is prepared, but the * synchronous API forces this. See bug #599189. */ accounts = tp_account_manager_get_valid_accounts (priv->account_manager); for (l = accounts; l != NULL; l = g_list_next (l)) { TpAccount *account = TP_ACCOUNT (l->data); gchar *name; name = log_store_account_to_dirname (account); if (!tp_strdiff (name, account_name)) { g_assert (hit->account == NULL); hit->account = account; g_object_ref (account); } g_object_unref (account); g_free (name); } g_list_free (accounts); hit->filename = g_strdup (filename); g_strfreev (strv); return hit; }
static gchar * get_log_dir_for_account (TpAccount *account) { gchar *basedir; gchar *escaped; escaped = log_store_account_to_dirname (account); basedir = g_build_path (G_DIR_SEPARATOR_S, g_get_user_data_dir (), PACKAGE_NAME, "logs", escaped, NULL); g_free (escaped); return basedir; }