pidgin/plugins/imgupload.c

Mon, 19 May 2014 21:22:39 +0200

author
Tomasz Wasilczyk <twasilczyk@pidgin.im>
date
Mon, 19 May 2014 21:22:39 +0200
changeset 36063
90b78170f622
parent 36062
262fbc598971
child 36064
11a0f3837a64
permissions
-rw-r--r--

Imgupload: fill image file names as link description

36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
1 /*
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
2 * Image Upload - an inline images implementation for protocols without
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"
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
39
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
40 static void
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
41 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
42 static void
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
43 imgup_upload_failed(PidginWebView *webview);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
44
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
45
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
46 /******************************************************************************
36056
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
47 * Helper functions
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
48 ******************************************************************************/
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 static gboolean
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
51 imgup_conn_is_hooked(PurpleConnection *gc)
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
52 {
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
53 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
54 }
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
55
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
56
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
57 /******************************************************************************
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
58 * Imgur implementation
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 static void
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
62 imgup_imgur_uploaded(PurpleHttpConnection *hc, PurpleHttpResponse *resp,
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
63 gpointer _webview)
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
64 {
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
65 JsonParser *parser;
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
66 JsonObject *result;
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
67 const gchar *data;
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
68 gsize data_len;
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
69 PidginWebView *webview = PIDGIN_WEBVIEW(_webview);
36063
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
70 const gchar *url, *title;
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
71
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
72 if (!purple_http_response_is_successful(resp)) {
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
73 imgup_upload_failed(webview);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
74 return;
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
75 }
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
76
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
77 data = purple_http_response_get_data(resp, &data_len);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
78 parser = json_parser_new();
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
79 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
80 purple_debug_warning("imgupload", "Invalid json got from imgur");
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
81
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
82 imgup_upload_failed(webview);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
83 return;
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
84 }
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
85
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
86 result = json_node_get_object(json_parser_get_root(parser));
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
87
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
88 if (!json_object_get_boolean_member(result, "success")) {
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
89 g_object_unref(parser);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
90
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
91 purple_debug_warning("imgupload", "imgur - not a success");
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
92
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
93 imgup_upload_failed(webview);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
94 return;
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
95 }
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
96
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
97 result = json_object_get_object_member(result, "data");
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
98 url = json_object_get_string_member(result, "link");
36062
262fbc598971 Imgupload: insert link; first working version
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36061
diff changeset
99
36063
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
100 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
101
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
102 imgup_upload_done(webview, url, title);
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
103
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
104 g_object_unref(parser);
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
105 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
106 }
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
107
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
108 static PurpleHttpConnection *
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
109 imgup_imgur_upload(PidginWebView *webview, PurpleImage *image)
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
110 {
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
111 PurpleHttpRequest *req;
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
112 PurpleHttpConnection *hc;
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
113 gchar *req_data, *img_data, *img_data_e;
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
114
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
115 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
116 purple_http_request_set_method(req, "POST");
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
117 purple_http_request_header_set(req, "Authorization",
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
118 "Client-ID " IMGUP_IMGUR_CLIENT_ID);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
119
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
120 /* TODO: make it a plain, multipart/form-data request */
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
121 img_data = purple_base64_encode(purple_image_get_data(image),
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
122 purple_image_get_size(image));
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
123 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
124 g_free(img_data);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
125 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
126 g_free(img_data_e);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
127
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
128 purple_http_request_header_set(req, "Content-Type",
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
129 "application/x-www-form-urlencoded");
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
130 purple_http_request_set_contents(req, req_data, -1);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
131 g_free(req_data);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
132
36063
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
133 /* 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
134 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
135 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
136
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
137 hc = purple_http_request(NULL, req, imgup_imgur_uploaded, webview);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
138 purple_http_request_unref(req);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
139
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
140 return hc;
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
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 * Image/link upload and insertion
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 static void
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
148 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
149 {
36063
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
150 PidginWebViewButtons format;
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
151 gboolean url_desc;
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
152
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
153 g_object_steal_data(G_OBJECT(webview), "imgupload-hc");
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
154
36063
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
155 format = pidgin_webview_get_format_functions(webview);
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
156 url_desc = format & PIDGIN_WEBVIEW_LINKDESC;
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
157
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
158 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
159 }
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
160
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
161 static void
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
162 imgup_upload_failed(PidginWebView *webview)
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
163 {
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
164 g_object_steal_data(G_OBJECT(webview), "imgupload-hc");
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
165
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
166 purple_debug_error("imgupload", "Failed uploading image");
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
167 }
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
168
36060
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
169 static gboolean
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
170 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
171 {
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
172 PidginConversation *gtkconv = _gtkconv;
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
173 PurpleConversation *conv = gtkconv->active_conv;
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
174 PurpleHttpConnection *hc;
36060
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
175
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
176 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
177 return FALSE;
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
178
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
179 hc = imgup_imgur_upload(webview, image);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
180 g_object_set_data_full(G_OBJECT(webview), "imgupload-hc",
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
181 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
182
36062
262fbc598971 Imgupload: insert link; first working version
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36061
diff changeset
183 /* TODO: please wait dialog */
262fbc598971 Imgupload: insert link; first working version
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36061
diff changeset
184
36060
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
185 return TRUE;
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
186 }
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
187
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
188
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
189 /******************************************************************************
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
190 * Plugin setup
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
191 ******************************************************************************/
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
192
36060
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
193 static void
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
194 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
195 {
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
196 PidginWebView *webview;
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
197
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
198 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
199
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
200 g_signal_connect(G_OBJECT(webview), "insert-image",
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
201 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
202 }
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
203
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
204 static void
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
205 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
206 {
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
207 PidginWebView *webview;
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
208
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
209 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
210
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
211 g_signal_handlers_disconnect_by_func(G_OBJECT(webview),
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
212 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
213 }
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
214
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
215 static void
36058
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
216 imgup_conv_init(PurpleConversation *conv)
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
217 {
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
218 PurpleConnection *gc;
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
219
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
220 gc = purple_conversation_get_connection(conv);
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
221 if (!gc)
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
222 return;
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
223 if (!imgup_conn_is_hooked(gc))
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
224 return;
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
225
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
226 purple_conversation_set_features(conv,
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
227 purple_conversation_get_features(conv) &
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
228 ~PURPLE_CONNECTION_FLAG_NO_IMAGES);
36059
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
229
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
230 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
231 }
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
232
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
233 static void
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
234 imgup_conv_uninit(PurpleConversation *conv)
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
235 {
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
236 PurpleConnection *gc;
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
237
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
238 gc = purple_conversation_get_connection(conv);
36059
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
239 if (gc) {
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
240 if (!imgup_conn_is_hooked(gc))
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
241 return;
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
242 } else {
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
243 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
244 return;
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
245 }
36058
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
246
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
247 purple_conversation_set_features(conv,
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
248 purple_conversation_get_features(conv) |
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
249 PURPLE_CONNECTION_FLAG_NO_IMAGES);
36059
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
250
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
251 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
252 }
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
253
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
254 static void
36056
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
255 imgup_conn_init(PurpleConnection *gc)
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
256 {
36056
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
257 PurpleConnectionFlags flags;
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
258
36056
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
259 flags = purple_connection_get_flags(gc);
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
260
36056
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
261 if (!(flags & PURPLE_CONNECTION_FLAG_NO_IMAGES))
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
262 return;
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
263
36056
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
264 flags &= ~PURPLE_CONNECTION_FLAG_NO_IMAGES;
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
265 purple_connection_set_flags(gc, flags);
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
266
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
267 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
268 }
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
269
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
270 static void
36056
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
271 imgup_conn_uninit(PurpleConnection *gc)
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
272 {
36056
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
273 if (!imgup_conn_is_hooked(gc))
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
274 return;
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
275
36056
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
276 purple_connection_set_flags(gc, purple_connection_get_flags(gc) |
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
277 PURPLE_CONNECTION_FLAG_NO_IMAGES);
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
278
36056
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
279 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
280 }
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
281
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
282 static gboolean
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
283 imgup_plugin_load(PurplePlugin *plugin)
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
284 {
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
285 GList *it;
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
286
36056
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
287 it = purple_connections_get_all();
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
288 for (; it; it = g_list_next(it)) {
36056
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
289 PurpleConnection *gc = it->data;
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
290 imgup_conn_init(gc);
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
291 }
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
292
36058
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
293 it = purple_conversations_get_all();
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
294 for (; it; it = g_list_next(it)) {
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
295 PurpleConversation *conv = it->data;
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
296 imgup_conv_init(conv);
36060
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
297 if (PIDGIN_IS_PIDGIN_CONVERSATION(conv))
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
298 imgup_pidconv_init(PIDGIN_CONVERSATION(conv));
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
36059
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
301 purple_signal_connect(purple_connections_get_handle(),
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
302 "signed-on", plugin,
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
303 PURPLE_CALLBACK(imgup_conn_init), NULL);
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
304 purple_signal_connect(purple_connections_get_handle(),
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
305 "signing-off", plugin,
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
306 PURPLE_CALLBACK(imgup_conn_uninit), NULL);
36060
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
307 purple_signal_connect(pidgin_conversations_get_handle(),
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
308 "conversation-displayed", plugin,
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
309 PURPLE_CALLBACK(imgup_pidconv_init), NULL);
36059
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
310
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
311 return TRUE;
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
312 }
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
313
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
314 static gboolean
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
315 imgup_plugin_unload(PurplePlugin *plugin)
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 GList *it;
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
318
36058
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
319 it = purple_conversations_get_all();
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
320 for (; it; it = g_list_next(it)) {
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
321 PurpleConversation *conv = it->data;
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
322 imgup_conv_uninit(conv);
36060
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
323 if (PIDGIN_IS_PIDGIN_CONVERSATION(conv))
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
324 imgup_pidconv_uninit(PIDGIN_CONVERSATION(conv));
36058
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
325 }
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
326
36056
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
327 it = purple_connections_get_all();
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
328 for (; it; it = g_list_next(it)) {
36056
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
329 PurpleConnection *gc = it->data;
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
330 imgup_conn_uninit(gc);
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
331 }
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
332
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
333 return TRUE;
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
334 }
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
335
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
336 static PurplePluginInfo imgup_info =
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
337 {
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
338 PURPLE_PLUGIN_MAGIC,
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
339 PURPLE_MAJOR_VERSION,
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
340 PURPLE_MINOR_VERSION,
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
341 PURPLE_PLUGIN_STANDARD,
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
342 PIDGIN_PLUGIN_TYPE,
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
343 0,
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
344 NULL,
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
345 PURPLE_PRIORITY_DEFAULT,
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
346 "gtk-imgupload",
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
347 N_("Image Upload"),
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
348 DISPLAY_VERSION,
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
349 N_("Inline images implementation for protocols without such feature."),
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
350 N_("Adds inline images support for protocols lacking this feature by "
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
351 "uploading them to the external service."),
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
352 "Tomasz Wasilczyk <twasilczyk@pidgin.im>",
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
353 PURPLE_WEBSITE,
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
354 imgup_plugin_load,
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
355 imgup_plugin_unload,
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
356 NULL,
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
357 NULL,
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
358 NULL,
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
359 NULL,
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
360 NULL,
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
361
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
362 /* padding */
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
363 NULL, NULL, NULL, NULL
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
364 };
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
365
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
366 static void
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
367 imgup_init_plugin(PurplePlugin *plugin)
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
368 {
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
369 #if 0
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
370 purple_prefs_add_none("/plugins");
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
371 purple_prefs_add_none("/plugins/gtk");
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
372 purple_prefs_add_none("/plugins/gtk/imgupload");
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
373 #endif
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
374 }
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
375
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
376 PURPLE_INIT_PLUGIN(imgupload, imgup_init_plugin, imgup_info)

mercurial