pidgin/plugins/imgupload.c

Fri, 09 Aug 2019 00:41:13 -0400

author
Elliott Sales de Andrade <qulogic@pidgin.im>
date
Fri, 09 Aug 2019 00:41:13 -0400
changeset 39785
aa7e3b71802d
parent 39502
818d74083471
child 39992
bffad41e933f
permissions
-rw-r--r--

Split pidgin_account_option_menu into its own files.

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 "glibcompat.h"
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
26 #include "http.h"
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
27 #include "version.h"
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
28
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
29 #include "gtk3compat.h"
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
30 #include "gtkconv.h"
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
31 #include "gtkplugin.h"
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
32 #include "gtkutils.h"
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
33 #include "gtkwebviewtoolbar.h"
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
34
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
35 #include <json-glib/json-glib.h>
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
36
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
37 #define IMGUP_IMGUR_CLIENT_ID "b6d33c6bb80e1b6"
36065
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
38 #define IMGUP_PREF_PREFIX "/plugins/gtk/imgupload/"
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
39
36064
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
40 static PurplePlugin *plugin_handle = NULL;
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
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
64 imgup_imgur_uploaded(PurpleHttpConnection *hc, PurpleHttpResponse *resp,
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
65 gpointer _webview)
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 const gchar *data;
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
70 gsize data_len;
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
71 PidginWebView *webview = PIDGIN_WEBVIEW(_webview);
36063
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
72 const gchar *url, *title;
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
73
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
74 if (!purple_http_response_is_successful(resp)) {
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
75 imgup_upload_failed(webview);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
76 return;
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
77 }
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
78
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
79 data = purple_http_response_get_data(resp, &data_len);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
80 parser = json_parser_new();
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
81 if (!json_parser_load_from_data(parser, data, data_len, NULL)) {
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
82 purple_debug_warning("imgupload", "Invalid json got from imgur");
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
83
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
84 imgup_upload_failed(webview);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
85 return;
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
86 }
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 result = json_node_get_object(json_parser_get_root(parser));
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
89
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
90 if (!json_object_get_boolean_member(result, "success")) {
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
91 g_object_unref(parser);
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 purple_debug_warning("imgupload", "imgur - not a success");
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
94
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
95 imgup_upload_failed(webview);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
96 return;
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
97 }
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
98
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
99 result = json_object_get_object_member(result, "data");
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
100 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
101
36063
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
102 title = g_object_get_data(G_OBJECT(webview), "imgupload-imgur-name");
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 imgup_upload_done(webview, url, title);
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
105
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
106 g_object_unref(parser);
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
107 g_object_set_data(G_OBJECT(webview), "imgupload-imgur-name", NULL);
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
108 }
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
109
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
110 static PurpleHttpConnection *
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
111 imgup_imgur_upload(PidginWebView *webview, PurpleImage *image)
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
112 {
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
113 PurpleHttpRequest *req;
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
114 PurpleHttpConnection *hc;
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
115 gchar *req_data, *img_data, *img_data_e;
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
116
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
117 req = purple_http_request_new("https://api.imgur.com/3/image");
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
118 purple_http_request_set_method(req, "POST");
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
119 purple_http_request_header_set(req, "Authorization",
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
120 "Client-ID " IMGUP_IMGUR_CLIENT_ID);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
121
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
122 /* 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
123 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
124 purple_image_get_data_size(image));
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
125 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
126 g_free(img_data);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
127 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
128 g_free(img_data_e);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
129
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
130 purple_http_request_header_set(req, "Content-Type",
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
131 "application/x-www-form-urlencoded");
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
132 purple_http_request_set_contents(req, req_data, -1);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
133 g_free(req_data);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
134
36063
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
135 /* TODO: set it to hc, not webview (after gobjectifying it) */
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
136 g_object_set_data_full(G_OBJECT(webview), "imgupload-imgur-name",
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
137 g_strdup(purple_image_get_friendly_filename(image)), g_free);
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
138
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
139 hc = purple_http_request(NULL, req, imgup_imgur_uploaded, webview);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
140 purple_http_request_unref(req);
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 return hc;
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
143 }
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
144
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
145 /******************************************************************************
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
146 * Image/link upload and insertion
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
147 ******************************************************************************/
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
148
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
149 static void
36064
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
150 imgup_upload_finish(PidginWebView *webview)
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
151 {
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
152 gpointer 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 g_object_steal_data(G_OBJECT(webview), "imgupload-hc");
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
155 plswait = g_object_get_data(G_OBJECT(webview), "imgupload-plswait");
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
156 g_object_set_data(G_OBJECT(webview), "imgupload-plswait", NULL);
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
157
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
158 if (plswait)
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
159 purple_request_close(PURPLE_REQUEST_WAIT, plswait);
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
160 }
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
161
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
162 static void
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
163 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
164 {
36063
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
165 gboolean url_desc;
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
166
36064
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
167 imgup_upload_finish(webview);
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
168
36065
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
169 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
170 url_desc = FALSE;
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
171 else {
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
172 PidginWebViewButtons format;
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
173
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
174 format = pidgin_webview_get_format_functions(webview);
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
175 url_desc = format & PIDGIN_WEBVIEW_LINKDESC;
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
176 }
36063
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
177
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
178 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
179 }
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
180
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
181 static void
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
182 imgup_upload_failed(PidginWebView *webview)
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
183 {
36064
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
184 gboolean is_cancelled;
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
185
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
186 imgup_upload_finish(webview);
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
187
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
188 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
189 "imgupload-cancelled"));
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
190 g_object_set_data(G_OBJECT(webview), "imgupload-cancelled", NULL);
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
191
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
192 if (!is_cancelled)
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
193 purple_debug_error("imgupload", "Failed uploading image");
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
194 }
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
195
36064
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
196 static void
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
197 imgup_upload_cancel(gpointer _webview)
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
198 {
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
199 PurpleHttpConnection *hc;
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
200 PidginWebView *webview = PIDGIN_WEBVIEW(_webview);
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
201
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
202 g_object_set_data(G_OBJECT(webview), "imgupload-plswait", NULL);
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
203 g_object_set_data(G_OBJECT(webview), "imgupload-cancelled",
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
204 GINT_TO_POINTER(TRUE));
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
205 hc = g_object_get_data(G_OBJECT(webview), "imgupload-hc");
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
206 if (hc)
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
207 purple_http_conn_cancel(hc);
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;
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
215 PurpleHttpConnection *hc;
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
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
221 hc = imgup_imgur_upload(webview, image);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
222 g_object_set_data_full(G_OBJECT(webview), "imgupload-hc",
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
223 hc, (GDestroyNotify)purple_http_conn_cancel);
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;
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
414
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
415 it = purple_connections_get_all();
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
416 for (; it; it = g_list_next(it)) {
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
417 PurpleConnection *gc = it->data;
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
418 imgup_conn_init(gc);
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
419 }
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 it = purple_conversations_get_all();
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
422 for (; it; it = g_list_next(it)) {
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
423 PurpleConversation *conv = it->data;
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
424 imgup_conv_init(conv);
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
425 if (PIDGIN_IS_PIDGIN_CONVERSATION(conv))
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
426 imgup_pidconv_init(PIDGIN_CONVERSATION(conv));
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
427 }
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 purple_signal_connect(purple_connections_get_handle(),
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
430 "signed-on", plugin,
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
431 PURPLE_CALLBACK(imgup_conn_init), NULL);
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
432 purple_signal_connect(purple_connections_get_handle(),
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
433 "signing-off", plugin,
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
434 PURPLE_CALLBACK(imgup_conn_uninit), NULL);
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
435 purple_signal_connect(pidgin_conversations_get_handle(),
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
436 "conversation-displayed", plugin,
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
437 PURPLE_CALLBACK(imgup_pidconv_init), NULL);
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
438
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
439 return TRUE;
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
440 }
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
441
37147
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
442 static gboolean
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
443 plugin_unload(PurplePlugin *plugin, GError **error)
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
444 {
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
445 GList *it;
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
446
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
447 it = purple_conversations_get_all();
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
448 for (; it; it = g_list_next(it)) {
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
449 PurpleConversation *conv = it->data;
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
450 imgup_conv_uninit(conv);
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
451 if (PIDGIN_IS_PIDGIN_CONVERSATION(conv))
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
452 imgup_pidconv_uninit(PIDGIN_CONVERSATION(conv));
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
453 }
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
454
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
455 it = purple_connections_get_all();
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
456 for (; it; it = g_list_next(it)) {
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
457 PurpleConnection *gc = it->data;
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
458 imgup_conn_uninit(gc);
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
459 }
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
460
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
461 plugin_handle = NULL;
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 return TRUE;
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
464 }
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
465
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
466 PURPLE_PLUGIN_INIT(imgupload, plugin_query, plugin_load, plugin_unload);

mercurial