/* This file is part of telegram-purple This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA Copyright Matthias Jentsch 2014-2015 */ #include "telegram-purple.h" const char *format_time (time_t date) { // TODO: Inline this function for better readability? struct tm *datetime = localtime(&date); // This should be the language's timestamp format. This is preceded by a colon. return purple_utf8_strftime (_("%d.%m.%Y %H:%M"), datetime); } char *tgp_format_img (int imgstore) { const char *br = "
"; //
's look ugly in Adium, but no
will look ugly in Pidgin #ifdef __ADIUM_ br = ""; #endif return g_strdup_printf ("%s", br, imgstore); } char *tgp_format_user_status (struct tgl_user_status *status) { char *when; switch (status->online) { case -1: when = g_strdup_printf ("%s", format_time (status->when)); break; case -2: // This is preceded by a colon. when = g_strdup (_("recently")); break; case -3: // This is preceded by a colon. when = g_strdup (_("last week")); break; case -4: // This is preceded by a colon. when = g_strdup (_("last month")); break; default: // This is preceded by a colon. It refers to a point on time. when = g_strdup (_("unknown")); break; } return when; } int str_not_empty (const char *string) { return string && string[0] != '\0'; } int tgp_outgoing_msg (struct tgl_state *TLS, struct tgl_message *M) { return (M->flags & TGLMF_SESSION_OUTBOUND); } int tgp_our_msg (struct tgl_state *TLS, struct tgl_message *M) { return tgl_get_peer_id (TLS->our_id) == tgl_get_peer_id (M->from_id); } tgl_peer_t *tgp_encr_chat_get_partner (struct tgl_state *TLS, struct tgl_secret_chat *chat) { return tgl_peer_get (TLS, TGL_MK_USER(chat->admin_id == tgl_get_peer_id (TLS->our_id) ? chat->user_id : chat->admin_id)); } long tgp_time_n_days_ago (int days) { return time(NULL) - 24 * 3600 * days; }; void tgp_g_queue_free_full (GQueue *queue, GDestroyNotify free_func) { void *entry; while ((entry = g_queue_pop_head(queue))) { free_func (entry); } g_queue_free (queue); } #if GLIB_CHECK_VERSION(2,28,0) void tgp_g_list_free_full (GList *list, GDestroyNotify free_func) { if (list) { g_list_free_full (list, free_func); } } #else void tgp_g_list_free_full (GList *list, GDestroyNotify free_func) { if (list) { g_list_foreach (list, (GFunc)free_func, NULL); g_list_free (list); } } #endif const char *tgp_mime_to_filetype (const char *mime) { int len = (int) strlen (mime); int i; for (i = 0; i < len - 1; i ++) { if (mime[i] == '/') { return mime + i + 1; } } return NULL; } int tgp_startswith (const char *str, const char *with) { if (! str || !with) { return FALSE; } int slen = strlen (str), wlen = strlen (with); if (wlen > slen) { return FALSE; } while (*with) if (*str++ != *with++) { return FALSE; } return TRUE; } void tgp_replace (char *string, char what, char with) { char *p = string; while (*(p ++)) { if (*p == what) { *p = with; } } }