diff options
author | Ben Wiederhake <BenWiederhake.GitHub@gmx.de> | 2020-12-10 17:29:13 +0300 |
---|---|---|
committer | Ben Wiederhake <BenWiederhake.GitHub@gmx.de> | 2020-12-10 17:29:13 +0300 |
commit | 72d23baa6110dac7ac3dbfd78112031492a8564f (patch) | |
tree | ba6861c48a70bdc571fa8db665ba3fbc38d28572 | |
parent | 6f5500fa8a12459368cf6d58c256faa1b3cc96b3 (diff) | |
parent | d39e178b531585e445f46f317ae1ffa0d27a1bf6 (diff) |
Merge branch 'master' into dev-1.4.5
-rw-r--r-- | README.md | 3 | ||||
-rw-r--r-- | config.h.in | 3 | ||||
-rwxr-xr-x | configure | 26 | ||||
-rw-r--r-- | configure.ac | 10 | ||||
-rw-r--r-- | telegram-base.c | 36 | ||||
-rw-r--r-- | telegram-base.h | 5 | ||||
-rw-r--r-- | telegram-purple.c | 26 | ||||
-rw-r--r-- | telegram-purple.h | 1 | ||||
-rw-r--r-- | tgp-msg.c | 52 | ||||
-rw-r--r-- | tgp-structs.c | 4 | ||||
-rw-r--r-- | tgp-structs.h | 2 |
11 files changed, 109 insertions, 59 deletions
@@ -407,7 +407,8 @@ Empathy / libtelepathy ---------------------- Empathy doesn't natively support libpurple plugins since its based on libtelepathy, but there is a compatibillity layer called telepathy-haze that can be used to execute libpurple -plugins. This means that you can basically run this plugin thanks to telepathy-haze but you will usually get less features and worse usability compared to real libpurple clients. If you use Empathy (or anything else based on libtelepathy) I recommend [telepathy-morse](https://projects.kde.org/projects/playground/network/telepathy/telepathy-morse/repository) which is a connection manager written specifically for your messenger. +plugins. This means that you can basically run this plugin thanks to telepathy-haze but you will usually get less features and worse usability compared to real libpurple clients. +If you use Empathy (or anything else based on libtelepathy) I recommend [telepathy-morse](https://github.com/TelepathyIM/telepathy-morse) which is a connection manager written specifically for your messenger. Authors ------- diff --git a/config.h.in b/config.h.in index c631e01..314c7f6 100644 --- a/config.h.in +++ b/config.h.in @@ -1,5 +1,8 @@ /* config.h.in. Generated from configure.ac by autoheader. */ +/* Download base URI */ +#undef DOWNLOAD_URI_BASE + /* Define the gettext package to be used */ #undef GETTEXT_PACKAGE @@ -694,6 +694,7 @@ with_openssl with_zlib enable_libwebp enable_libpng +with_download_base enable_icons enable_translation ' @@ -1347,6 +1348,8 @@ Optional Packages: --with-zlib=DIR root directory path of zlib installation [defaults to /usr/local or /usr if not found in /usr/local] --without-zlib to disable zlib usage completely + --with-download-base=URI + Set default base URI for downloads Some influential environment variables: CC C compiler command @@ -4571,6 +4574,29 @@ fi fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for download URI base path" >&5 +$as_echo_n "checking for download URI base path... " >&6; } + +# Check whether --with-download_base was given. +if test "${with_download_base+set}" = set; then : + withval=$with_download_base; { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${withval}" >&5 +$as_echo "${withval}" >&6; } + if test x$withval != xno; then : + + +cat >>confdefs.h <<_ACEOF +#define DOWNLOAD_URI_BASE "$withval" +_ACEOF + + +fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +fi + + # Check whether --enable-icons was given. if test "${enable_icons+set}" = set; then : enableval=$enable_icons; diff --git a/configure.ac b/configure.ac index 463c287..80a6e0f 100644 --- a/configure.ac +++ b/configure.ac @@ -86,6 +86,16 @@ AS_IF([test "x$enable_libpng" != "xno"], [ AC_CHECK_LIB([png], [png_write_png], [], [AC_MSG_ERROR([no libpng found, try --disable-libpng])]) ]) +AC_MSG_CHECKING([for download URI base path]) +AC_ARG_WITH([download_base], + AS_HELP_STRING([--with-download-base=URI], [Set default base URI for downloads]), + AC_MSG_RESULT([${withval}]) + AS_IF([test x$withval != xno], [ + AC_DEFINE_UNQUOTED([DOWNLOAD_URI_BASE], ["$withval"], [Download base URI])] + ), + AC_MSG_RESULT([no]) +) + AC_ARG_ENABLE([icons], AS_HELP_STRING([--disable-icons], [Unsupported option. Use 'make noicon_install' instead.])) AS_IF([test "x$enable_icons" == "xno"], [ diff --git a/telegram-base.c b/telegram-base.c index 9833bac..18b446d 100644 --- a/telegram-base.c +++ b/telegram-base.c @@ -381,34 +381,26 @@ void read_secret_chat_file (struct tgl_state *TLS) { info ("read secret chat file: %d chats read", cnt); } -gchar *get_config_dir (char const *username) { - gchar *dir = g_strconcat (purple_user_dir(), G_DIR_SEPARATOR_S, config_dir, - G_DIR_SEPARATOR_S, username, NULL); - +gchar *get_config_dir (const char *username) { + gchar *dir = g_build_filename (purple_user_dir(), "telegram-purple", username, NULL); if (g_str_has_prefix (dir, g_get_tmp_dir())) { - // telepathy-haze will set purple user dir to a tmp path, - // but we need the files to be persistent + // telepathy-haze will set purple user dir to a tmp path, but we need persistence g_free (dir); - dir = g_strconcat (g_get_home_dir(), G_DIR_SEPARATOR_S, ".telegram-purple", - G_DIR_SEPARATOR_S, username, NULL); + dir = g_build_filename (g_get_home_dir(), ".telegram-purple", username, NULL); } - g_mkdir_with_parents (dir, 0700); return dir; } -gchar *get_download_dir (struct tgl_state *TLS) { - assert (TLS->base_path); - static gchar *dir; - if (dir) { - g_free (dir); - } - if (g_strcmp0(purple_core_get_ui(), "BitlBee") == 0) { - dir = g_strconcat ("/tmp", G_DIR_SEPARATOR_S, "downloads", NULL); - } else { - dir = g_strconcat (TLS->base_path, G_DIR_SEPARATOR_S, "downloads", NULL); - } - g_mkdir_with_parents (dir, 0700); - return dir; +gchar *get_download_path (struct tgl_state *TLS, const char *filename) { + connection_data *conn = tls_get_data (TLS); + g_return_val_if_fail (conn != NULL && conn->download_dir != NULL, NULL); + return g_build_filename (conn->download_dir, filename, NULL); +} + +gchar *get_download_uri (struct tgl_state *TLS, const char *filename) { + connection_data *conn = tls_get_data (TLS); + g_return_val_if_fail (conn != NULL && conn->download_dir != NULL, NULL); + return g_build_filename (conn->download_uri, filename, NULL); } void write_secret_chat_gw (struct tgl_state *TLS, void *extra, int success, struct tgl_secret_chat *_) { diff --git a/telegram-base.h b/telegram-base.h index b6d4a4f..06f33cc 100644 --- a/telegram-base.h +++ b/telegram-base.h @@ -31,8 +31,9 @@ void read_secret_chat_file (struct tgl_state *TLS); void write_secret_chat_file (struct tgl_state *TLS); void write_secret_chat_gw (struct tgl_state *TLS, void *extra, int success, struct tgl_secret_chat *E); -gchar *get_config_dir (char const *username); -gchar *get_download_dir (struct tgl_state *TLS); +gchar *get_config_dir (const char *username); +gchar *get_download_path (struct tgl_state *TLS, const char *filename); +gchar *get_download_uri (struct tgl_state *TLS, const char *filename); int tgp_visualize_key (struct tgl_state *TLS, unsigned char* sha1_key); void tgp_create_group_chat_by_usernames (struct tgl_state *TLS, const char *title, diff --git a/telegram-purple.c b/telegram-purple.c index e453f6f..158469c 100644 --- a/telegram-purple.c +++ b/telegram-purple.c @@ -38,8 +38,6 @@ static void update_user_handler (struct tgl_state *TLS, struct tgl_user *U, unsi static void update_secret_chat_handler (struct tgl_state *TLS, struct tgl_secret_chat *C, unsigned flags); static void update_on_failed_login (struct tgl_state *TLS); -const char *config_dir = "telegram-purple"; - struct tgl_update_callback tgp_callback = { .new_msg = update_message_handler, .marked_read = update_marked_read, @@ -532,23 +530,33 @@ static gulong chat_conversation_typing_signal = 0; static void tgprpl_login (PurpleAccount * acct) { info ("tgprpl_login(): Purple is telling the prpl to connect the account"); + struct tgl_state *TLS = tgl_state_alloc (); PurpleConnection *gc = purple_account_get_connection (acct); - gc->flags |= PURPLE_CONNECTION_NO_BGCOLOR; - - struct tgl_state *TLS = tgl_state_alloc (); connection_data *conn = connection_data_init (TLS, gc, acct); purple_connection_set_protocol_data (gc, conn); + tgl_set_ev_base (TLS, conn); TLS->base_path = get_config_dir (purple_account_get_username (acct)); - tgl_set_download_directory (TLS, get_download_dir(TLS)); debug ("base configuration path: '%s'", TLS->base_path); - + g_mkdir_with_parents (TLS->base_path, 0700); + + const gchar *base = !g_strcmp0 (purple_core_get_ui(), "BitlBee") + ? g_get_tmp_dir() : TLS->base_path; + conn->download_dir = g_build_filename (base, "downloads", NULL); + debug ("telegram download directory: '%s'", conn->download_dir); + tgl_set_download_directory (TLS, conn->download_dir); + g_mkdir_with_parents (conn->download_dir, 0700); +#ifdef DOWNLOAD_URI_BASE + conn->download_uri = g_strdup (DOWNLOAD_URI_BASE); +#else + conn->download_uri = g_strconcat ("file://", conn->download_dir, NULL); +#endif + debug ("telegram download uri base: '%s'", conn->download_uri); + tgl_set_rsa_key_direct (TLS, tglmp_get_default_e(), tglmp_get_default_key_len(), tglmp_get_default_key()); - - tgl_set_ev_base (TLS, conn); tgl_set_net_methods (TLS, &tgp_conn_methods); tgl_set_timer_methods (TLS, &tgp_timers); tgl_set_callback (TLS, &tgp_callback); diff --git a/telegram-purple.h b/telegram-purple.h index b7c9550..4d49521 100644 --- a/telegram-purple.h +++ b/telegram-purple.h @@ -105,7 +105,6 @@ extern const char *pk_path; extern const char *user_pk_filename; -extern const char *config_dir; extern PurplePlugin *_telegram_protocol; void import_chat_link (struct tgl_state *TLS, const char *link); void export_chat_link_by_name (struct tgl_state *TLS, const char *name); @@ -187,37 +187,40 @@ static char *format_geo_link_osm (double lat, double lon) { return link; } -static char *tgp_msg_file_display (const char *path, const char *filename, const char* caption, const char *mime, long long size) { - gchar *format; - - gchar *capt = g_markup_escape_text (caption, -1); - gchar *pth = g_markup_escape_text (path, -1); - gchar *fle = g_markup_escape_text (filename, -1); - gchar *mme = g_markup_escape_text (mime, -1); - gchar *fsize = +static char *tgp_msg_file_display (struct tgl_state *TLS, const char *fpath, const char *fname, const char *fcapt, + const char *fmime, long long fsize) { + + gchar *path = g_markup_escape_text (fpath, -1); + gchar *capt = g_markup_escape_text (fcapt, -1); + gchar *name = g_markup_escape_text (fname, -1); + gchar *mime = g_markup_escape_text (fmime, -1); + gchar *file = g_path_get_basename (path); + gchar *uri = get_download_uri (TLS, file); + gchar *size = #if GLIB_CHECK_VERSION(2,30,0) /* 'g_format_size' only exists since 2.30.0. */ - g_format_size (size) + g_format_size (fsize) #elif GLIB_CHECK_VERSION(2,16,0) /* 'g_format_size_for_display' only exists since 2.16.0. * We compile on Windows with glib 2.28.8. */ - g_format_size_for_display (size) + g_format_size_for_display (fsize) #else /* even older */ #error "Too outdated glib version!" #endif ; - if (g_strcmp0(purple_core_get_ui(), "BitlBee") == 0) { - format = g_strdup_printf ("[%s file://%s %s %s %s]", capt, pth, fle, mme, fsize); - } else { - format = g_strdup_printf ("[%s <a href=\"file:///%s\">%s</a> %s %s]", capt, pth, fle, mme, fsize); - } + + gchar *display_text = !g_strcmp0 (purple_core_get_ui(), "BitlBee") + ? g_strdup_printf ("[%s %s %s %s]", capt, uri, mime, size) + : g_strdup_printf ("[%s <a href=\"%s\">%s</a> %s %s]", capt, uri, name, mime, size); + + g_free (size); + g_free (uri); + g_free (file); + g_free (mime); + g_free (name); g_free (capt); - g_free (pth); - g_free (fle); - g_free (mme); - g_free (fsize); - return format; + return display_text; } static void tgp_msg_send_done (struct tgl_state *TLS, void *callback_extra, int success, struct tgl_message *M) { @@ -477,7 +480,10 @@ static char *tgp_msg_photo_display (struct tgl_state *TLS, const char *filename, used_images_add (conn, img); if (g_strcmp0(purple_core_get_ui(), "BitlBee") == 0) { *flags |= PURPLE_MESSAGE_SYSTEM; - return g_strdup_printf ("file://%s", filename); + gchar *file = g_path_get_basename (filename); + gchar *uri = get_download_uri (TLS, file); + g_free(file); + return uri; } else { *flags |= PURPLE_MESSAGE_IMAGES; return tgp_format_img (img); @@ -717,7 +723,7 @@ static void tgp_msg_display (struct tgl_state *TLS, struct tgp_msg_loading *C) { mime = M->media.document->mime_type; } - text = tgp_msg_file_display (path, filename, caption, mime, M->media.document->size); + text = tgp_msg_file_display (TLS, path, filename, caption, mime, M->media.document->size); } else { if (! tgp_our_msg (TLS, M) && ! tls_get_ft_discard (TLS)) { @@ -741,7 +747,7 @@ static void tgp_msg_display (struct tgl_state *TLS, struct tgp_msg_loading *C) { if (! tgp_our_msg (TLS, M)) { if (C->data) { // Content of a file transfer - text = tgp_msg_file_display (C->data, M->media.encr_document->caption, _("document"), + text = tgp_msg_file_display (TLS, C->data, M->media.encr_document->caption, _("document"), M->media.encr_document->mime_type, M->media.encr_document->size); } else { diff --git a/tgp-structs.c b/tgp-structs.c index f80dbf6..089fba6 100644 --- a/tgp-structs.c +++ b/tgp-structs.c @@ -127,7 +127,9 @@ void *connection_data_free (connection_data *conn) { g_hash_table_destroy (conn->id_to_purple_name); g_hash_table_destroy (conn->purple_name_to_id); g_hash_table_destroy (conn->channel_members); - + g_free (conn->download_dir); + g_free (conn->download_uri); + tgprpl_xfer_free_all (conn); g_free (conn->TLS->base_path); tgl_free_all (conn->TLS); diff --git a/tgp-structs.h b/tgp-structs.h index 20ad5ee..6297ca6 100644 --- a/tgp-structs.h +++ b/tgp-structs.h @@ -50,6 +50,8 @@ typedef struct { GHashTable *channel_members; GList *pending_joins; int dialogues_ready; + gchar *download_dir; + gchar *download_uri; } connection_data; struct tgp_xfer_send_data { |