pidgin/plugins/imgupload.c

Tue, 13 Oct 2020 00:42:59 -0500

author
Gary Kramlich <grim@reaperworld.com>
date
Tue, 13 Oct 2020 00:42:59 -0500
changeset 40555
0bf5825aab0a
parent 40360
e21f3bbcc2a5
permissions
-rw-r--r--

Replace pidgin_set_urgent with gtk_window_set_urgency_hint

Testing Done:
Compiled and grepped for usage of the winpidgin functions that were removed.

Reviewed at https://reviews.imfreedom.org/r/161/

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
40360
e21f3bbcc2a5 Update all of the pidgin code to include purple.h
Gary Kramlich <grim@reaperworld.com>
parents: 40197
diff changeset
24 #include <purple.h>
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
25
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
26 #include "gtkconv.h"
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
27 #include "gtkplugin.h"
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
28 #include "gtkutils.h"
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
29 #include "gtkwebviewtoolbar.h"
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
30
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
31 #include <json-glib/json-glib.h>
39992
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
32 #include <libsoup/soup.h>
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
33
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
34 #define IMGUP_IMGUR_CLIENT_ID "b6d33c6bb80e1b6"
36065
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
35 #define IMGUP_PREF_PREFIX "/plugins/gtk/imgupload/"
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
36
36064
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
37 static PurplePlugin *plugin_handle = NULL;
39992
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
38 static SoupSession *session = NULL;
36064
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
39
36061
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
39992
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
62 imgup_imgur_uploaded(G_GNUC_UNUSED SoupSession *session, SoupMessage *msg,
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
63 gpointer _webview)
36061
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 PidginWebView *webview = PIDGIN_WEBVIEW(_webview);
36063
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
68 const gchar *url, *title;
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
69
39992
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
70 if (!SOUP_STATUS_IS_SUCCESSFUL(msg->status_code)) {
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
71 imgup_upload_failed(webview);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
72 return;
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
73 }
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
74
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
75 parser = json_parser_new();
39992
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
76 if (!json_parser_load_from_data(parser, msg->response_body->data,
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
77 msg->response_body->length, NULL)) {
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
78 purple_debug_warning("imgupload", "Invalid json got from imgur");
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 imgup_upload_failed(webview);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
81 return;
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
82 }
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
83
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
84 result = json_node_get_object(json_parser_get_root(parser));
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 if (!json_object_get_boolean_member(result, "success")) {
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
87 g_object_unref(parser);
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 purple_debug_warning("imgupload", "imgur - not a success");
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 imgup_upload_failed(webview);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
92 return;
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
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
95 result = json_object_get_object_member(result, "data");
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
96 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
97
39992
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
98 title = g_object_get_data(G_OBJECT(msg), "imgupload-imgur-name");
36063
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
99
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
100 imgup_upload_done(webview, url, title);
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 g_object_unref(parser);
39992
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
103 g_object_set_data(G_OBJECT(msg), "imgupload-imgur-name", NULL);
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
104 }
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
105
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
106 static PurpleHttpConnection *
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
107 imgup_imgur_upload(PidginWebView *webview, PurpleImage *image)
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
108 {
39992
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
109 SoupMessage *msg;
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
110 gchar *req_data, *img_data, *img_data_e;
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
111
39992
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
112 msg = soup_message_new("POST", "https://api.imgur.com/3/image");
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
113 soup_message_headers_replace(msg, "Authorization",
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
114 "Client-ID " IMGUP_IMGUR_CLIENT_ID);
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
115
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
116 /* TODO: make it a plain, multipart/form-data request */
38341
3da74e727e78 Remove purple_base64_encode/decode() wrappers
Mike Ruprecht <cmaiku@gmail.com>
parents: 38298
diff changeset
117 img_data = g_base64_encode(purple_image_get_data(image),
38298
f0a8f63f9312 rename purple_image_get_size to purple_image_get_data_size and deal with the fallout
Gary Kramlich <grim@reaperworld.com>
parents: 37148
diff changeset
118 purple_image_get_data_size(image));
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
119 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
120 g_free(img_data);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
121 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
122 g_free(img_data_e);
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
123
39992
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
124 soup_message_set_request(msg, "application/x-www-form-urlencoded",
40016
26a9086b8cec Fix an incorrect call to soup_message_set_request.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39992
diff changeset
125 SOUP_MESSAGE_TAKE, req_data, strlen(req_data));
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
126
39992
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
127 g_object_set_data_full(G_OBJECT(msg), "imgupload-imgur-name",
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
128 g_strdup(purple_image_get_friendly_filename(image)),
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
129 g_free);
36063
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
130
39992
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
131 soup_session_queue_message(session, msg, imgup_imgur_uploaded, webview);
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
132
39992
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
133 return msg;
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
134 }
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
135
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
136 /******************************************************************************
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
137 * Image/link upload and insertion
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
138 ******************************************************************************/
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
139
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
140 static void
36064
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
141 imgup_upload_finish(PidginWebView *webview)
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
142 {
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
143 gpointer plswait;
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
144
39992
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
145 g_object_steal_data(G_OBJECT(webview), "imgupload-msg");
36064
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
146 plswait = g_object_get_data(G_OBJECT(webview), "imgupload-plswait");
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
147 g_object_set_data(G_OBJECT(webview), "imgupload-plswait", NULL);
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
148
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
149 if (plswait)
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
150 purple_request_close(PURPLE_REQUEST_WAIT, plswait);
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
151 }
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
152
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
153 static void
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
154 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
155 {
36063
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
156 gboolean url_desc;
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
157
36064
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
158 imgup_upload_finish(webview);
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
159
36065
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
160 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
161 url_desc = FALSE;
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
162 else {
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
163 PidginWebViewButtons format;
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
164
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
165 format = pidgin_webview_get_format_functions(webview);
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
166 url_desc = format & PIDGIN_WEBVIEW_LINKDESC;
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
167 }
36063
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
168
90b78170f622 Imgupload: fill image file names as link description
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36062
diff changeset
169 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
170 }
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
171
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
172 static void
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
173 imgup_upload_failed(PidginWebView *webview)
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
174 {
36064
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
175 gboolean is_cancelled;
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
176
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
177 imgup_upload_finish(webview);
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
178
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
179 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
180 "imgupload-cancelled"));
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
181 g_object_set_data(G_OBJECT(webview), "imgupload-cancelled", NULL);
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
182
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
183 if (!is_cancelled)
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
184 purple_debug_error("imgupload", "Failed uploading image");
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
185 }
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
186
36064
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
187 static void
39992
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
188 imgup_upload_cancel_message(SoupMessage *msg)
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
189 {
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
190 soup_session_cancel_message(session, msg, SOUP_STATUS_CANCELLED);
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
191 }
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
192
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
193 static void
36064
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
194 imgup_upload_cancel(gpointer _webview)
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
195 {
39992
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
196 SoupMessage *msg;
36064
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
197 PidginWebView *webview = PIDGIN_WEBVIEW(_webview);
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
198
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
199 g_object_set_data(G_OBJECT(webview), "imgupload-plswait", NULL);
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
200 g_object_set_data(G_OBJECT(webview), "imgupload-cancelled",
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
201 GINT_TO_POINTER(TRUE));
39992
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
202 msg = g_object_steal_data(G_OBJECT(webview), "imgupload-msg");
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
203 if (msg) {
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
204 soup_session_cancel_message(session, msg, SOUP_STATUS_CANCELLED);
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
205 }
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
206 }
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
207
36060
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
208 static gboolean
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
209 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
210 {
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
211 PidginConversation *gtkconv = _gtkconv;
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
212 PurpleConversation *conv = gtkconv->active_conv;
39992
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
213 SoupMessage *msg;
36064
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
214 gpointer plswait;
36060
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
215
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
216 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
217 return FALSE;
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
218
39992
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
219 msg = imgup_imgur_upload(webview, image);
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
220 g_object_set_data_full(G_OBJECT(webview), "imgupload-msg", msg,
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
221 (GDestroyNotify)imgup_upload_cancel_message);
36060
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
222
36064
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
223 plswait = purple_request_wait(plugin_handle, _("Uploading image"),
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
224 _("Please wait for image URL being retrieved..."),
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
225 NULL, FALSE, imgup_upload_cancel,
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
226 purple_request_cpar_from_conversation(conv), webview);
11a0f3837a64 Imgupload: please wait dialog
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36063
diff changeset
227 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
228
36060
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
229 return TRUE;
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
230 }
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
231
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
232
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
233 /******************************************************************************
36065
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
234 * Setup/cleanup
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
36060
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
237 static void
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
238 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
239 {
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
240 PidginWebView *webview;
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
241
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
242 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
243
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
244 g_signal_connect(G_OBJECT(webview), "insert-image",
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
245 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
246 }
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
247
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
248 static void
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
249 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
250 {
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
251 PidginWebView *webview;
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
252
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
253 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
254
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
255 g_signal_handlers_disconnect_by_func(G_OBJECT(webview),
36061
8b5b33f733d6 Imgupload: implement imgur service
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36060
diff changeset
256 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
257 }
965aaea4a59b Imgupload: use our own insert image callback for hooked conversations
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36059
diff changeset
258
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
259 static void
36058
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
260 imgup_conv_init(PurpleConversation *conv)
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
261 {
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
262 PurpleConnection *gc;
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
263
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
264 gc = purple_conversation_get_connection(conv);
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
265 if (!gc)
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
266 return;
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
267 if (!imgup_conn_is_hooked(gc))
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
268 return;
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
269
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
270 purple_conversation_set_features(conv,
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
271 purple_conversation_get_features(conv) &
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
272 ~PURPLE_CONNECTION_FLAG_NO_IMAGES);
36059
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
273
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
274 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
275 }
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
276
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
277 static void
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
278 imgup_conv_uninit(PurpleConversation *conv)
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 PurpleConnection *gc;
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
281
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
282 gc = purple_conversation_get_connection(conv);
36059
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
283 if (gc) {
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
284 if (!imgup_conn_is_hooked(gc))
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
285 return;
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
286 } else {
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
287 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
288 return;
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
289 }
36058
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
290
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
291 purple_conversation_set_features(conv,
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
292 purple_conversation_get_features(conv) |
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
293 PURPLE_CONNECTION_FLAG_NO_IMAGES);
36059
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
294
c568fcefdb82 Imgupload: hook newly created connections
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36058
diff changeset
295 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
296 }
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
297
cb8995eb4a73 Imgupload: hook conversations too
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36056
diff changeset
298 static void
36056
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
299 imgup_conn_init(PurpleConnection *gc)
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
300 {
36056
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
301 PurpleConnectionFlags flags;
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
302
36056
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
303 flags = purple_connection_get_flags(gc);
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
304
36056
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
305 if (!(flags & PURPLE_CONNECTION_FLAG_NO_IMAGES))
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
306 return;
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 flags &= ~PURPLE_CONNECTION_FLAG_NO_IMAGES;
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
309 purple_connection_set_flags(gc, flags);
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
310
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
311 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
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 void
36056
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
315 imgup_conn_uninit(PurpleConnection *gc)
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
316 {
36056
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
317 if (!imgup_conn_is_hooked(gc))
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
318 return;
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 purple_connection_set_flags(gc, purple_connection_get_flags(gc) |
4c36d9f09020 Imgupload: fix basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36055
diff changeset
321 PURPLE_CONNECTION_FLAG_NO_IMAGES);
36054
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 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
324 }
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
325
36065
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
326 /******************************************************************************
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
327 * Prefs
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
328 ******************************************************************************/
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
329
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
330 static void
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
331 imgup_prefs_ok(gpointer _unused, PurpleRequestFields *fields)
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 gboolean use_url_desc;
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
334
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
335 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
336
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
337 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
338 }
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 static gpointer
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
341 imgup_prefs_get(PurplePlugin *plugin)
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 PurpleRequestCommonParameters *cpar;
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
344 PurpleRequestFields *fields;
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
345 PurpleRequestFieldGroup *group;
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
346 PurpleRequestField *field;
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
347 gpointer handle;
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
348
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
349 fields = purple_request_fields_new();
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
350 group = purple_request_field_group_new(NULL);
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
351 purple_request_fields_add_group(fields, group);
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
352
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
353 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
354 _("Use image filename as link description"),
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
355 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
356 purple_request_field_group_add_field(group, field);
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
357
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
358 cpar = purple_request_cpar_new();
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
359 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
360
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
361 handle = purple_request_fields(plugin,
36071
7fab4043641f Imgupload: rename to Image Uploader
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36065
diff changeset
362 _("Image Uploader"), NULL, NULL, fields,
36065
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
363 _("OK"), (GCallback)imgup_prefs_ok,
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
364 _("Cancel"), NULL,
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
365 cpar, NULL);
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
366
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
367 return handle;
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
368 }
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
369
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
370 /******************************************************************************
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
371 * Plugin stuff
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
37147
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
374 static PidginPluginInfo *
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
375 plugin_query(GError **error)
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
376 {
37147
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
377 const gchar * const authors[] = {
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
378 "Tomasz Wasilczyk <twasilczyk@pidgin.im>",
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
379 NULL
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
380 };
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
381
37147
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
382 return pidgin_plugin_info_new(
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
383 "id", "gtk-imgupload",
37148
50f361d39a1e Merged default branch
Ankit Vani <a@nevitus.org>
parents: 37147 36071
diff changeset
384 "name", N_("Image Uploader"),
37147
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
385 "version", DISPLAY_VERSION,
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
386 "category", N_("Utility"),
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
387 "summary", N_("Inline images implementation for protocols "
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
388 "without such feature."),
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
389 "description", N_("Adds inline images support for protocols "
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
390 "lacking this feature by uploading them to the "
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
391 "external service."),
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
392 "authors", authors,
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
393 "website", PURPLE_WEBSITE,
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
394 "abi-version", PURPLE_ABI_VERSION,
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
395 "pref-request-cb", imgup_prefs_get,
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
396 NULL
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
397 );
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
398 }
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
399
37147
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
400 static gboolean
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
401 plugin_load(PurplePlugin *plugin, GError **error)
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 GList *it;
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
404
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
405 purple_prefs_add_none("/plugins");
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
406 purple_prefs_add_none("/plugins/gtk");
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
407 purple_prefs_add_none("/plugins/gtk/imgupload");
36065
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
408
53fc67d0e684 Imgupload: add use_url_desc pref
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36064
diff changeset
409 purple_prefs_add_bool(IMGUP_PREF_PREFIX "use_url_desc", TRUE);
37147
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
410
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
411 plugin_handle = plugin;
39992
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
412 session = soup_session_new();
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 it = purple_connections_get_all();
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
415 for (; it; it = g_list_next(it)) {
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
416 PurpleConnection *gc = it->data;
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
417 imgup_conn_init(gc);
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
418 }
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
419
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
420 it = purple_conversations_get_all();
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
421 for (; it; it = g_list_next(it)) {
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
422 PurpleConversation *conv = it->data;
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
423 imgup_conv_init(conv);
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
424 if (PIDGIN_IS_PIDGIN_CONVERSATION(conv))
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
425 imgup_pidconv_init(PIDGIN_CONVERSATION(conv));
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
426 }
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
427
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
428 purple_signal_connect(purple_connections_get_handle(),
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
429 "signed-on", plugin,
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
430 PURPLE_CALLBACK(imgup_conn_init), NULL);
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
431 purple_signal_connect(purple_connections_get_handle(),
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
432 "signing-off", plugin,
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
433 PURPLE_CALLBACK(imgup_conn_uninit), NULL);
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
434 purple_signal_connect(pidgin_conversations_get_handle(),
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
435 "conversation-displayed", plugin,
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
436 PURPLE_CALLBACK(imgup_pidconv_init), NULL);
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
437
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
438 return TRUE;
36054
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
439 }
501ed6c0631e Imgupload: initial implementation and basic hooks
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
440
37147
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
441 static gboolean
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
442 plugin_unload(PurplePlugin *plugin, GError **error)
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
443 {
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
444 GList *it;
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
445
39992
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
446 soup_session_abort(session);
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
447
37147
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
39992
bffad41e933f Convert Pidgin plugins to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39502
diff changeset
462 g_clear_object(&session);
37147
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
463 plugin_handle = NULL;
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
464
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
465 return TRUE;
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
6037d5c3a06c Fix build
Ankit Vani <a@nevitus.org>
parents: 36065
diff changeset
468 PURPLE_PLUGIN_INIT(imgupload, plugin_query, plugin_load, plugin_unload);

mercurial