pidgin/plugins/imgupload.c

Fri, 15 Nov 2019 01:07:08 -0600

author
Gary Kramlich <grim@reaperworld.com>
date
Fri, 15 Nov 2019 01:07:08 -0600
changeset 40195
fb4b0ae193c0
parent 40058
8a56f10bd1fb
child 40197
75ffd76260fc
permissions
-rw-r--r--

Remove glibcompat.h from all the files that don't actually need it.

36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
1 /*
36071
7fab4043641f Imgupload: rename to Image Uploader
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36065
diff changeset
2 * Image Uploader - an inline images implementation for protocols without
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
3 * support for such feature.
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
4 *
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
5 * Copyright (C) 2014, Tomasz Wasilczyk <twasilczyk@pidgin.im>
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
6 *
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
7 * This program is free software; you can redistribute it and/or modify
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
8 * it under the terms of the GNU General Public License as published by
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
9 * the Free Software Foundation; either version 2 of the License, or
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
10 * (at your option) any later version.
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
11 *
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
12 * This program is distributed in the hope that it will be useful,
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
15 * GNU General Public License for more details.
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
16 *
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
17 * You should have received a copy of the GNU General Public License
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
18 * along with this program; if not, write to the Free Software
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
20 */
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
21
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
22 #include "internal.h"
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
23
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
24 #include "debug.h"
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
25 #include "version.h"
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
26
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
27 #include "gtk3compat.h"
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
28 #include "gtkconv.h"
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
29 #include "gtkplugin.h"
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
30 #include "gtkutils.h"
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
31 #include "gtkwebviewtoolbar.h"
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
32
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
33 #include <json-glib/json-glib.h>
39992
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
34 #include <libsoup/soup.h>
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
35
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
36 #define IMGUP_IMGUR_CLIENT_ID "b6d33c6bb80e1b6"
36065
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
37 #define IMGUP_PREF_PREFIX "/plugins/gtk/imgupload/"
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
38
36064
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
39 static PurplePlugin *plugin_handle = NULL;
39992
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
40 static SoupSession *session = NULL;
36064
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
41
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
42 static void
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
43 imgup_upload_done(PidginWebView *webview, const gchar *url, const gchar *title);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
44 static void
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
45 imgup_upload_failed(PidginWebView *webview);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
46
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
47
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
48 /******************************************************************************
36056
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
49 * Helper functions
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
50 ******************************************************************************/
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
51
36056
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
52 static gboolean
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
53 imgup_conn_is_hooked(PurpleConnection *gc)
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
54 {
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
55 return GPOINTER_TO_INT(g_object_get_data(G_OBJECT(gc), "imgupload-set"));
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
56 }
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
57
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
58
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
59 /******************************************************************************
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
60 * Imgur implementation
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
61 ******************************************************************************/
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
62
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
63 static void
39992
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
64 imgup_imgur_uploaded(G_GNUC_UNUSED SoupSession *session, SoupMessage *msg,
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
65 gpointer _webview)
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
66 {
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
67 JsonParser *parser;
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
68 JsonObject *result;
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
69 PidginWebView *webview = PIDGIN_WEBVIEW(_webview);
36063
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
70 const gchar *url, *title;
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
71
39992
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
72 if (!SOUP_STATUS_IS_SUCCESSFUL(msg->status_code)) {
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
73 imgup_upload_failed(webview);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
74 return;
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
75 }
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
76
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
77 parser = json_parser_new();
39992
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
78 if (!json_parser_load_from_data(parser, msg->response_body->data,
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
79 msg->response_body->length, NULL)) {
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
80 purple_debug_warning("imgupload", "Invalid json got from imgur");
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
81
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
82 imgup_upload_failed(webview);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
83 return;
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
84 }
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
85
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
86 result = json_node_get_object(json_parser_get_root(parser));
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
87
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
88 if (!json_object_get_boolean_member(result, "success")) {
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
89 g_object_unref(parser);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
90
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
91 purple_debug_warning("imgupload", "imgur - not a success");
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
92
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
93 imgup_upload_failed(webview);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
94 return;
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
95 }
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
96
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
97 result = json_object_get_object_member(result, "data");
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
98 url = json_object_get_string_member(result, "link");
36062
262fbc598971 Imgupload: insert link; first working version
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36061
diff changeset
99
39992
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
100 title = g_object_get_data(G_OBJECT(msg), "imgupload-imgur-name");
36063
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
101
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
102 imgup_upload_done(webview, url, title);
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
103
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
104 g_object_unref(parser);
39992
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
105 g_object_set_data(G_OBJECT(msg), "imgupload-imgur-name", NULL);
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
106 }
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
107
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
108 static PurpleHttpConnection *
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
109 imgup_imgur_upload(PidginWebView *webview, PurpleImage *image)
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
110 {
39992
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
111 SoupMessage *msg;
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
112 gchar *req_data, *img_data, *img_data_e;
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
113
39992
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
114 msg = soup_message_new("POST", "https://api.imgur.com/3/image");
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
115 soup_message_headers_replace(msg, "Authorization",
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
116 "Client-ID " IMGUP_IMGUR_CLIENT_ID);
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
117
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
118 /* TODO: make it a plain, multipart/form-data request */
38341
3da74e727e78 Remove purple_base64_encode/decode() wrappers
Mike Ruprecht <cmaiku@gmail.com>
parents: 38298
diff changeset
119 img_data = g_base64_encode(purple_image_get_data(image),
38298
f0a8f63f9312 rename purple_image_get_size to purple_image_get_data_size and deal with the fallout
Gary Kramlich <grim@reaperworld.com>
parents: 37148
diff changeset
120 purple_image_get_data_size(image));
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
121 img_data_e = g_uri_escape_string(img_data, NULL, FALSE);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
122 g_free(img_data);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
123 req_data = g_strdup_printf("type=base64&image=%s", img_data_e);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
124 g_free(img_data_e);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
125
39992
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
126 soup_message_set_request(msg, "application/x-www-form-urlencoded",
40016
26a9086b8cec Fix an incorrect call to soup_message_set_request.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39992
diff changeset
127 SOUP_MESSAGE_TAKE, req_data, strlen(req_data));
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
128
39992
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
129 g_object_set_data_full(G_OBJECT(msg), "imgupload-imgur-name",
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
130 g_strdup(purple_image_get_friendly_filename(image)),
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
131 g_free);
36063
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
132
39992
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
133 soup_session_queue_message(session, msg, imgup_imgur_uploaded, webview);
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
134
39992
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
135 return msg;
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
136 }
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
137
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
138 /******************************************************************************
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
139 * Image/link upload and insertion
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
140 ******************************************************************************/
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
141
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
142 static void
36064
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
143 imgup_upload_finish(PidginWebView *webview)
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
144 {
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
145 gpointer plswait;
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
146
39992
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
147 g_object_steal_data(G_OBJECT(webview), "imgupload-msg");
36064
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
148 plswait = g_object_get_data(G_OBJECT(webview), "imgupload-plswait");
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
149 g_object_set_data(G_OBJECT(webview), "imgupload-plswait", NULL);
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
150
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
151 if (plswait)
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
152 purple_request_close(PURPLE_REQUEST_WAIT, plswait);
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
153 }
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
154
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
155 static void
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
156 imgup_upload_done(PidginWebView *webview, const gchar *url, const gchar *title)
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
157 {
36063
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
158 gboolean url_desc;
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
159
36064
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
160 imgup_upload_finish(webview);
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
161
36065
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
162 if (!purple_prefs_get_bool(IMGUP_PREF_PREFIX "use_url_desc"))
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
163 url_desc = FALSE;
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
164 else {
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
165 PidginWebViewButtons format;
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
166
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
167 format = pidgin_webview_get_format_functions(webview);
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
168 url_desc = format & PIDGIN_WEBVIEW_LINKDESC;
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
169 }
36063
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
170
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
171 pidgin_webview_insert_link(webview, url, url_desc ? title : NULL);
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
172 }
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
173
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
174 static void
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
175 imgup_upload_failed(PidginWebView *webview)
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
176 {
36064
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
177 gboolean is_cancelled;
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
178
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
179 imgup_upload_finish(webview);
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
180
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
181 is_cancelled = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(webview),
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
182 "imgupload-cancelled"));
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
183 g_object_set_data(G_OBJECT(webview), "imgupload-cancelled", NULL);
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
184
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
185 if (!is_cancelled)
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
186 purple_debug_error("imgupload", "Failed uploading image");
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
187 }
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
188
36064
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
189 static void
39992
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
190 imgup_upload_cancel_message(SoupMessage *msg)
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
191 {
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
192 soup_session_cancel_message(session, msg, SOUP_STATUS_CANCELLED);
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
193 }
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
194
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
195 static void
36064
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
196 imgup_upload_cancel(gpointer _webview)
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
197 {
39992
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
198 SoupMessage *msg;
36064
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
199 PidginWebView *webview = PIDGIN_WEBVIEW(_webview);
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
200
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
201 g_object_set_data(G_OBJECT(webview), "imgupload-plswait", NULL);
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
202 g_object_set_data(G_OBJECT(webview), "imgupload-cancelled",
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
203 GINT_TO_POINTER(TRUE));
39992
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
204 msg = g_object_steal_data(G_OBJECT(webview), "imgupload-msg");
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
205 if (msg) {
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
206 soup_session_cancel_message(session, msg, SOUP_STATUS_CANCELLED);
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
207 }
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
208 }
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
209
36060
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
210 static gboolean
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
211 imgup_upload_start(PidginWebView *webview, PurpleImage *image, gpointer _gtkconv)
36060
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
212 {
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
213 PidginConversation *gtkconv = _gtkconv;
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
214 PurpleConversation *conv = gtkconv->active_conv;
39992
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
215 SoupMessage *msg;
36064
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
216 gpointer plswait;
36060
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
217
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
218 if (!imgup_conn_is_hooked(purple_conversation_get_connection(conv)))
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
219 return FALSE;
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
220
39992
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
221 msg = imgup_imgur_upload(webview, image);
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
222 g_object_set_data_full(G_OBJECT(webview), "imgupload-msg", msg,
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
223 (GDestroyNotify)imgup_upload_cancel_message);
36060
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
224
36064
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
225 plswait = purple_request_wait(plugin_handle, _("Uploading image"),
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
226 _("Please wait for image URL being retrieved..."),
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
227 NULL, FALSE, imgup_upload_cancel,
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
228 purple_request_cpar_from_conversation(conv), webview);
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
229 g_object_set_data(G_OBJECT(webview), "imgupload-plswait", plswait);
36062
262fbc598971 Imgupload: insert link; first working version
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36061
diff changeset
230
36060
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
231 return TRUE;
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
232 }
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
233
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
234
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
235 /******************************************************************************
36065
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
236 * Setup/cleanup
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
237 ******************************************************************************/
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
238
36060
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
239 static void
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
240 imgup_pidconv_init(PidginConversation *gtkconv)
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
241 {
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
242 PidginWebView *webview;
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
243
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
244 webview = PIDGIN_WEBVIEW(gtkconv->entry);
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
245
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
246 g_signal_connect(G_OBJECT(webview), "insert-image",
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
247 G_CALLBACK(imgup_upload_start), gtkconv);
36060
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
248 }
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
249
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
250 static void
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
251 imgup_pidconv_uninit(PidginConversation *gtkconv)
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
252 {
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
253 PidginWebView *webview;
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
254
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
255 webview = PIDGIN_WEBVIEW(gtkconv->entry);
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
256
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
257 g_signal_handlers_disconnect_by_func(G_OBJECT(webview),
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
258 G_CALLBACK(imgup_upload_start), gtkconv);
36060
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
259 }
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
260
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
261 static void
36058
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
262 imgup_conv_init(PurpleConversation *conv)
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
263 {
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
264 PurpleConnection *gc;
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
265
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
266 gc = purple_conversation_get_connection(conv);
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
267 if (!gc)
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
268 return;
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
269 if (!imgup_conn_is_hooked(gc))
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
270 return;
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
271
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
272 purple_conversation_set_features(conv,
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
273 purple_conversation_get_features(conv) &
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
274 ~PURPLE_CONNECTION_FLAG_NO_IMAGES);
36059
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
275
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
276 g_object_set_data(G_OBJECT(conv), "imgupload-set", GINT_TO_POINTER(TRUE));
36058
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
277 }
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
278
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
279 static void
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
280 imgup_conv_uninit(PurpleConversation *conv)
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
281 {
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
282 PurpleConnection *gc;
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
283
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
284 gc = purple_conversation_get_connection(conv);
36059
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
285 if (gc) {
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
286 if (!imgup_conn_is_hooked(gc))
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
287 return;
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
288 } else {
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
289 if (!g_object_get_data(G_OBJECT(conv), "imgupload-set"))
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
290 return;
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
291 }
36058
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
292
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
293 purple_conversation_set_features(conv,
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
294 purple_conversation_get_features(conv) |
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
295 PURPLE_CONNECTION_FLAG_NO_IMAGES);
36059
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
296
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
297 g_object_set_data(G_OBJECT(conv), "imgupload-set", NULL);
36058
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
298 }
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
299
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
300 static void
36056
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
301 imgup_conn_init(PurpleConnection *gc)
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
302 {
36056
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
303 PurpleConnectionFlags flags;
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
304
36056
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
305 flags = purple_connection_get_flags(gc);
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
306
36056
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
307 if (!(flags & PURPLE_CONNECTION_FLAG_NO_IMAGES))
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
308 return;
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
309
36056
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
310 flags &= ~PURPLE_CONNECTION_FLAG_NO_IMAGES;
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
311 purple_connection_set_flags(gc, flags);
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
312
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
313 g_object_set_data(G_OBJECT(gc), "imgupload-set", GINT_TO_POINTER(TRUE));
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
314 }
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
315
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
316 static void
36056
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
317 imgup_conn_uninit(PurpleConnection *gc)
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
318 {
36056
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
319 if (!imgup_conn_is_hooked(gc))
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
320 return;
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
321
36056
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
322 purple_connection_set_flags(gc, purple_connection_get_flags(gc) |
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
323 PURPLE_CONNECTION_FLAG_NO_IMAGES);
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
324
36056
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
325 g_object_set_data(G_OBJECT(gc), "imgupload-set", NULL);
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
326 }
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
327
36065
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
328 /******************************************************************************
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
329 * Prefs
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
330 ******************************************************************************/
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
331
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
332 static void
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
333 imgup_prefs_ok(gpointer _unused, PurpleRequestFields *fields)
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
334 {
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
335 gboolean use_url_desc;
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
336
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
337 use_url_desc = purple_request_fields_get_bool(fields, "use_url_desc");
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
338
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
339 purple_prefs_set_bool(IMGUP_PREF_PREFIX "use_url_desc", use_url_desc);
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
340 }
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
341
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
342 static gpointer
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
343 imgup_prefs_get(PurplePlugin *plugin)
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
344 {
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
345 PurpleRequestCommonParameters *cpar;
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
346 PurpleRequestFields *fields;
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
347 PurpleRequestFieldGroup *group;
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
348 PurpleRequestField *field;
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
349 gpointer handle;
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
350
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
351 fields = purple_request_fields_new();
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
352 group = purple_request_field_group_new(NULL);
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
353 purple_request_fields_add_group(fields, group);
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
354
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
355 field = purple_request_field_bool_new("use_url_desc",
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
356 _("Use image filename as link description"),
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
357 purple_prefs_get_bool(IMGUP_PREF_PREFIX "use_url_desc"));
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
358 purple_request_field_group_add_field(group, field);
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
359
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
360 cpar = purple_request_cpar_new();
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
361 purple_request_cpar_set_icon(cpar, PURPLE_REQUEST_ICON_DIALOG);
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
362
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
363 handle = purple_request_fields(plugin,
36071
7fab4043641f Imgupload: rename to Image Uploader
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36065
diff changeset
364 _("Image Uploader"), NULL, NULL, fields,
36065
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
365 _("OK"), (GCallback)imgup_prefs_ok,
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
366 _("Cancel"), NULL,
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
367 cpar, NULL);
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
368
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
369 return handle;
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
370 }
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
371
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
372 /******************************************************************************
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
373 * Plugin stuff
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
374 ******************************************************************************/
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
375
37147
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
376 static PidginPluginInfo *
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
377 plugin_query(GError **error)
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
378 {
37147
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
379 const gchar * const authors[] = {
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
380 "Tomasz Wasilczyk <twasilczyk@pidgin.im>",
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
381 NULL
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
382 };
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
383
37147
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
384 return pidgin_plugin_info_new(
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
385 "id", "gtk-imgupload",
37148
50f361d39a1e Merged default branch
Ankit Vani <a@nevitus.org>
parents: 37147 36071
diff changeset
386 "name", N_("Image Uploader"),
37147
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
387 "version", DISPLAY_VERSION,
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
388 "category", N_("Utility"),
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
389 "summary", N_("Inline images implementation for protocols "
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
390 "without such feature."),
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
391 "description", N_("Adds inline images support for protocols "
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
392 "lacking this feature by uploading them to the "
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
393 "external service."),
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
394 "authors", authors,
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
395 "website", PURPLE_WEBSITE,
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
396 "abi-version", PURPLE_ABI_VERSION,
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
397 "pref-request-cb", imgup_prefs_get,
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
398 NULL
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
399 );
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
400 }
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
401
37147
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
402 static gboolean
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
403 plugin_load(PurplePlugin *plugin, GError **error)
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
404 {
37147
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
405 GList *it;
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
406
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
407 purple_prefs_add_none("/plugins");
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
408 purple_prefs_add_none("/plugins/gtk");
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
409 purple_prefs_add_none("/plugins/gtk/imgupload");
36065
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
410
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
411 purple_prefs_add_bool(IMGUP_PREF_PREFIX "use_url_desc", TRUE);
37147
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
412
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
413 plugin_handle = plugin;
39992
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
414 session = soup_session_new();
37147
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
415
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
416 it = purple_connections_get_all();
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
417 for (; it; it = g_list_next(it)) {
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
418 PurpleConnection *gc = it->data;
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
419 imgup_conn_init(gc);
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
420 }
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
421
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
422 it = purple_conversations_get_all();
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
423 for (; it; it = g_list_next(it)) {
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
424 PurpleConversation *conv = it->data;
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
425 imgup_conv_init(conv);
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
426 if (PIDGIN_IS_PIDGIN_CONVERSATION(conv))
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
427 imgup_pidconv_init(PIDGIN_CONVERSATION(conv));
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
428 }
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
429
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
430 purple_signal_connect(purple_connections_get_handle(),
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
431 "signed-on", plugin,
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
432 PURPLE_CALLBACK(imgup_conn_init), NULL);
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
433 purple_signal_connect(purple_connections_get_handle(),
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
434 "signing-off", plugin,
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
435 PURPLE_CALLBACK(imgup_conn_uninit), NULL);
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
436 purple_signal_connect(pidgin_conversations_get_handle(),
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
437 "conversation-displayed", plugin,
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
438 PURPLE_CALLBACK(imgup_pidconv_init), NULL);
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
439
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
440 return TRUE;
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
441 }
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
442
37147
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
443 static gboolean
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
444 plugin_unload(PurplePlugin *plugin, GError **error)
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
445 {
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
446 GList *it;
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
447
39992
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
448 soup_session_abort(session);
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
449
37147
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
450 it = purple_conversations_get_all();
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
451 for (; it; it = g_list_next(it)) {
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
452 PurpleConversation *conv = it->data;
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
453 imgup_conv_uninit(conv);
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
454 if (PIDGIN_IS_PIDGIN_CONVERSATION(conv))
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
455 imgup_pidconv_uninit(PIDGIN_CONVERSATION(conv));
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
456 }
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
457
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
458 it = purple_connections_get_all();
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
459 for (; it; it = g_list_next(it)) {
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
460 PurpleConnection *gc = it->data;
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
461 imgup_conn_uninit(gc);
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
462 }
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
463
39992
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
464 g_clear_object(&session);
37147
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
465 plugin_handle = NULL;
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
466
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
467 return TRUE;
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
468 }
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
469
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
470 PURPLE_PLUGIN_INIT(imgupload, plugin_query, plugin_load, plugin_unload);

mercurial