Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/majn/telegram-purple.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Wiederhake <BenWiederhake.GitHub@gmx.de>2020-12-10 17:29:13 +0300
committerBen Wiederhake <BenWiederhake.GitHub@gmx.de>2020-12-10 17:29:13 +0300
commit72d23baa6110dac7ac3dbfd78112031492a8564f (patch)
treeba6861c48a70bdc571fa8db665ba3fbc38d28572
parent6f5500fa8a12459368cf6d58c256faa1b3cc96b3 (diff)
parentd39e178b531585e445f46f317ae1ffa0d27a1bf6 (diff)
Merge branch 'master' into dev-1.4.5
-rw-r--r--README.md3
-rw-r--r--config.h.in3
-rwxr-xr-xconfigure26
-rw-r--r--configure.ac10
-rw-r--r--telegram-base.c36
-rw-r--r--telegram-base.h5
-rw-r--r--telegram-purple.c26
-rw-r--r--telegram-purple.h1
-rw-r--r--tgp-msg.c52
-rw-r--r--tgp-structs.c4
-rw-r--r--tgp-structs.h2
11 files changed, 109 insertions, 59 deletions
diff --git a/README.md b/README.md
index 42d8297..5c16519 100644
--- a/README.md
+++ b/README.md
@@ -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
diff --git a/configure b/configure
index fc647be..9a79a64 100755
--- a/configure
+++ b/configure
@@ -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);
diff --git a/tgp-msg.c b/tgp-msg.c
index d7650b4..b604d81 100644
--- a/tgp-msg.c
+++ b/tgp-msg.c
@@ -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 {