pidgin/plugins/imgupload.c

Thu, 06 Oct 2016 10:07:48 -0400

author
Daniel Atallah <datallah@pidgin.im>
date
Thu, 06 Oct 2016 10:07:48 -0400
changeset 38114
324b3e1b30c5
parent 37148
50f361d39a1e
child 38298
f0a8f63f9312
permissions
-rw-r--r--

Merge with provide-uri-handler-desktop-file

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 #include "pidginstock.h"
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
35
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
36 #include <json-glib/json-glib.h>
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
37
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
38 #define IMGUP_IMGUR_CLIENT_ID "b6d33c6bb80e1b6"
36065
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
39 #define IMGUP_PREF_PREFIX "/plugins/gtk/imgupload/"
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
40
36064
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
41 static PurplePlugin *plugin_handle = NULL;
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
42
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
43 static void
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
44 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
45 static void
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
46 imgup_upload_failed(PidginWebView *webview);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
47
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
48
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
49 /******************************************************************************
36056
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
50 * Helper functions
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
51 ******************************************************************************/
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
52
36056
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
53 static gboolean
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
54 imgup_conn_is_hooked(PurpleConnection *gc)
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
55 {
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
56 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
57 }
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
58
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
59
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
60 /******************************************************************************
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
61 * Imgur implementation
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
62 ******************************************************************************/
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
63
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
64 static void
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
65 imgup_imgur_uploaded(PurpleHttpConnection *hc, PurpleHttpResponse *resp,
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
66 gpointer _webview)
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
67 {
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
68 JsonParser *parser;
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
69 JsonObject *result;
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
70 const gchar *data;
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
71 gsize data_len;
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
72 PidginWebView *webview = PIDGIN_WEBVIEW(_webview);
36063
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
73 const gchar *url, *title;
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
74
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
75 if (!purple_http_response_is_successful(resp)) {
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
76 imgup_upload_failed(webview);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
77 return;
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
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
80 data = purple_http_response_get_data(resp, &data_len);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
81 parser = json_parser_new();
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
82 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
83 purple_debug_warning("imgupload", "Invalid json got from imgur");
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 imgup_upload_failed(webview);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
86 return;
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
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
89 result = json_node_get_object(json_parser_get_root(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 if (!json_object_get_boolean_member(result, "success")) {
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
92 g_object_unref(parser);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
93
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
94 purple_debug_warning("imgupload", "imgur - not a success");
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 imgup_upload_failed(webview);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
97 return;
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
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
100 result = json_object_get_object_member(result, "data");
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
101 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
102
36063
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
103 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
104
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
105 imgup_upload_done(webview, url, title);
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
106
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
107 g_object_unref(parser);
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
108 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
109 }
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
110
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
111 static PurpleHttpConnection *
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
112 imgup_imgur_upload(PidginWebView *webview, PurpleImage *image)
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
113 {
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
114 PurpleHttpRequest *req;
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
115 PurpleHttpConnection *hc;
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
116 gchar *req_data, *img_data, *img_data_e;
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 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
119 purple_http_request_set_method(req, "POST");
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
120 purple_http_request_header_set(req, "Authorization",
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
121 "Client-ID " IMGUP_IMGUR_CLIENT_ID);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
122
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
123 /* TODO: make it a plain, multipart/form-data request */
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
124 img_data = purple_base64_encode(purple_image_get_data(image),
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
125 purple_image_get_size(image));
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
126 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
127 g_free(img_data);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
128 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
129 g_free(img_data_e);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
130
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
131 purple_http_request_header_set(req, "Content-Type",
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
132 "application/x-www-form-urlencoded");
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
133 purple_http_request_set_contents(req, req_data, -1);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
134 g_free(req_data);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
135
36063
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
136 /* 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
137 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
138 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
139
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
140 hc = purple_http_request(NULL, req, imgup_imgur_uploaded, webview);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
141 purple_http_request_unref(req);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
142
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
143 return hc;
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 /******************************************************************************
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
147 * Image/link upload and insertion
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
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
150 static void
36064
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
151 imgup_upload_finish(PidginWebView *webview)
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
152 {
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
153 gpointer plswait;
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 g_object_steal_data(G_OBJECT(webview), "imgupload-hc");
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
156 plswait = g_object_get_data(G_OBJECT(webview), "imgupload-plswait");
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
157 g_object_set_data(G_OBJECT(webview), "imgupload-plswait", NULL);
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
158
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
159 if (plswait)
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
160 purple_request_close(PURPLE_REQUEST_WAIT, plswait);
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
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
163 static void
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
164 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
165 {
36063
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
166 gboolean url_desc;
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
167
36064
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
168 imgup_upload_finish(webview);
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
169
36065
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
170 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
171 url_desc = FALSE;
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
172 else {
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
173 PidginWebViewButtons format;
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
174
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
175 format = pidgin_webview_get_format_functions(webview);
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
176 url_desc = format & PIDGIN_WEBVIEW_LINKDESC;
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
177 }
36063
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
178
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
179 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
180 }
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
181
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
182 static void
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
183 imgup_upload_failed(PidginWebView *webview)
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
184 {
36064
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
185 gboolean is_cancelled;
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
186
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
187 imgup_upload_finish(webview);
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
188
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
189 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
190 "imgupload-cancelled"));
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
191 g_object_set_data(G_OBJECT(webview), "imgupload-cancelled", NULL);
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
192
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
193 if (!is_cancelled)
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
194 purple_debug_error("imgupload", "Failed uploading image");
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
195 }
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
196
36064
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
197 static void
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
198 imgup_upload_cancel(gpointer _webview)
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
199 {
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
200 PurpleHttpConnection *hc;
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
201 PidginWebView *webview = PIDGIN_WEBVIEW(_webview);
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
202
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
203 g_object_set_data(G_OBJECT(webview), "imgupload-plswait", NULL);
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
204 g_object_set_data(G_OBJECT(webview), "imgupload-cancelled",
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
205 GINT_TO_POINTER(TRUE));
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
206 hc = g_object_get_data(G_OBJECT(webview), "imgupload-hc");
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
207 if (hc)
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
208 purple_http_conn_cancel(hc);
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
209 }
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
210
36060
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
211 static gboolean
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
212 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
213 {
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
214 PidginConversation *gtkconv = _gtkconv;
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
215 PurpleConversation *conv = gtkconv->active_conv;
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
216 PurpleHttpConnection *hc;
36064
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
217 gpointer plswait;
36060
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
218
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
219 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
220 return FALSE;
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
221
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
222 hc = imgup_imgur_upload(webview, image);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
223 g_object_set_data_full(G_OBJECT(webview), "imgupload-hc",
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
224 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
225
36064
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
226 plswait = purple_request_wait(plugin_handle, _("Uploading image"),
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
227 _("Please wait for image URL being retrieved..."),
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
228 NULL, FALSE, imgup_upload_cancel,
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
229 purple_request_cpar_from_conversation(conv), webview);
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
230 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
231
36060
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
232 return TRUE;
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
233 }
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
234
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
235
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
236 /******************************************************************************
36065
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
237 * Setup/cleanup
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
238 ******************************************************************************/
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
239
36060
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
240 static void
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
241 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
242 {
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
243 PidginWebView *webview;
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
244
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
245 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
246
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
247 g_signal_connect(G_OBJECT(webview), "insert-image",
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
248 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
249 }
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
250
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
251 static void
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
252 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
253 {
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
254 PidginWebView *webview;
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
255
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
256 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
257
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
258 g_signal_handlers_disconnect_by_func(G_OBJECT(webview),
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
259 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
260 }
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
261
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
262 static void
36058
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
263 imgup_conv_init(PurpleConversation *conv)
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
264 {
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
265 PurpleConnection *gc;
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
266
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
267 gc = purple_conversation_get_connection(conv);
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
268 if (!gc)
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
269 return;
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
270 if (!imgup_conn_is_hooked(gc))
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
271 return;
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
272
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
273 purple_conversation_set_features(conv,
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
274 purple_conversation_get_features(conv) &
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
275 ~PURPLE_CONNECTION_FLAG_NO_IMAGES);
36059
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
276
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
277 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
278 }
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
279
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
280 static void
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
281 imgup_conv_uninit(PurpleConversation *conv)
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
282 {
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
283 PurpleConnection *gc;
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
284
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
285 gc = purple_conversation_get_connection(conv);
36059
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
286 if (gc) {
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
287 if (!imgup_conn_is_hooked(gc))
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
288 return;
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
289 } else {
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
290 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
291 return;
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
292 }
36058
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
293
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
294 purple_conversation_set_features(conv,
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
295 purple_conversation_get_features(conv) |
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
296 PURPLE_CONNECTION_FLAG_NO_IMAGES);
36059
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
297
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
298 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
299 }
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
300
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
301 static void
36056
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
302 imgup_conn_init(PurpleConnection *gc)
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
303 {
36056
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
304 PurpleConnectionFlags flags;
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
305
36056
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
306 flags = purple_connection_get_flags(gc);
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
307
36056
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
308 if (!(flags & PURPLE_CONNECTION_FLAG_NO_IMAGES))
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
309 return;
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
310
36056
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
311 flags &= ~PURPLE_CONNECTION_FLAG_NO_IMAGES;
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
312 purple_connection_set_flags(gc, flags);
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
313
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
314 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
315 }
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
316
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
317 static void
36056
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
318 imgup_conn_uninit(PurpleConnection *gc)
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
319 {
36056
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
320 if (!imgup_conn_is_hooked(gc))
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
321 return;
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
322
36056
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
323 purple_connection_set_flags(gc, purple_connection_get_flags(gc) |
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
324 PURPLE_CONNECTION_FLAG_NO_IMAGES);
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
325
36056
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
326 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
327 }
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
328
36065
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
329 /******************************************************************************
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
330 * Prefs
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
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
333 static void
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
334 imgup_prefs_ok(gpointer _unused, PurpleRequestFields *fields)
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
335 {
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
336 gboolean use_url_desc;
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
337
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
338 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
339
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
340 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
341 }
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
342
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
343 static gpointer
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
344 imgup_prefs_get(PurplePlugin *plugin)
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
345 {
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
346 PurpleRequestCommonParameters *cpar;
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
347 PurpleRequestFields *fields;
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
348 PurpleRequestFieldGroup *group;
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
349 PurpleRequestField *field;
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
350 gpointer handle;
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
351
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
352 fields = purple_request_fields_new();
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
353 group = purple_request_field_group_new(NULL);
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
354 purple_request_fields_add_group(fields, group);
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
355
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
356 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
357 _("Use image filename as link description"),
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
358 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
359 purple_request_field_group_add_field(group, field);
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
360
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
361 cpar = purple_request_cpar_new();
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
362 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
363
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
364 handle = purple_request_fields(plugin,
36071
7fab4043641f Imgupload: rename to Image Uploader
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36065
diff changeset
365 _("Image Uploader"), NULL, NULL, fields,
36065
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
366 _("OK"), (GCallback)imgup_prefs_ok,
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
367 _("Cancel"), NULL,
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
368 cpar, NULL);
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
369
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
370 return handle;
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 /******************************************************************************
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
374 * Plugin stuff
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
375 ******************************************************************************/
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
376
37147
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
377 static PidginPluginInfo *
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
378 plugin_query(GError **error)
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
379 {
37147
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
380 const gchar * const authors[] = {
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
381 "Tomasz Wasilczyk <twasilczyk@pidgin.im>",
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
382 NULL
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
383 };
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
384
37147
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
385 return pidgin_plugin_info_new(
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
386 "id", "gtk-imgupload",
37148
50f361d39a1e Merged default branch
Ankit Vani <a@nevitus.org>
parents: 37147 36071
diff changeset
387 "name", N_("Image Uploader"),
37147
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
388 "version", DISPLAY_VERSION,
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
389 "category", N_("Utility"),
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
390 "summary", N_("Inline images implementation for protocols "
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
391 "without such feature."),
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
392 "description", N_("Adds inline images support for protocols "
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
393 "lacking this feature by uploading them to the "
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
394 "external service."),
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
395 "authors", authors,
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
396 "website", PURPLE_WEBSITE,
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
397 "abi-version", PURPLE_ABI_VERSION,
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
398 "pref-request-cb", imgup_prefs_get,
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
399 NULL
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
400 );
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
401 }
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
402
37147
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
403 static gboolean
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
404 plugin_load(PurplePlugin *plugin, GError **error)
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
405 {
37147
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
406 GList *it;
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
407
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
408 purple_prefs_add_none("/plugins");
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
409 purple_prefs_add_none("/plugins/gtk");
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
410 purple_prefs_add_none("/plugins/gtk/imgupload");
36065
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
411
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
412 purple_prefs_add_bool(IMGUP_PREF_PREFIX "use_url_desc", TRUE);
37147
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
413
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
414 plugin_handle = plugin;
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
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
448 it = purple_conversations_get_all();
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
449 for (; it; it = g_list_next(it)) {
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
450 PurpleConversation *conv = it->data;
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
451 imgup_conv_uninit(conv);
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
452 if (PIDGIN_IS_PIDGIN_CONVERSATION(conv))
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
453 imgup_pidconv_uninit(PIDGIN_CONVERSATION(conv));
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
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
456 it = purple_connections_get_all();
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
457 for (; it; it = g_list_next(it)) {
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
458 PurpleConnection *gc = it->data;
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
459 imgup_conn_uninit(gc);
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
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
462 plugin_handle = NULL;
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
463
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
464 return TRUE;
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
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
467 PURPLE_PLUGIN_INIT(imgupload, plugin_query, plugin_load, plugin_unload);

mercurial