Mercurial > pidgin
annotate finch/gntft.c @ 19408:cc36a5aac908
Fix some conversion warnings about using negative values with unsigned types. There are more, but these were easy fixes. You may think that I'm changing the API, but I'm really not - it was just wrong.
author | Daniel Atallah <daniel.atallah@gmail.com> |
---|---|
date | Fri, 24 Aug 2007 19:43:41 +0000 |
parents | d65ce3df5be2 |
children | 44b4e8bd759b 315151da0dc6 |
rev | line source |
---|---|
15817 | 1 /** |
2 * @file gntft.c GNT File Transfer UI | |
16194
0f0832c13fcb
Rename the Doxygen group from gntui to finch and define the finch group
Richard Laager <rlaager@wiktel.com>
parents:
15964
diff
changeset
|
3 * @ingroup finch |
15817 | 4 * |
15870
66dff3dfdea6
Re-sed the copyright notices so they don't all talk about Purple.
Richard Laager <rlaager@wiktel.com>
parents:
15822
diff
changeset
|
5 * finch |
15817 | 6 * |
15870
66dff3dfdea6
Re-sed the copyright notices so they don't all talk about Purple.
Richard Laager <rlaager@wiktel.com>
parents:
15822
diff
changeset
|
7 * Finch is the legal property of its developers, whose names are too numerous |
15817 | 8 * to list here. Please refer to the COPYRIGHT file distributed with this |
9 * source distribution. | |
10 * | |
11 * This program is free software; you can redistribute it and/or modify | |
12 * it under the terms of the GNU General Public License as published by | |
13 * the Free Software Foundation; either version 2 of the License, or | |
14 * (at your option) any later version. | |
15 * | |
16 * This program is distributed in the hope that it will be useful, | |
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
19 * GNU General Public License for more details. | |
20 * | |
21 * You should have received a copy of the GNU General Public License | |
22 * along with this program; if not, write to the Free Software | |
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
24 */ | |
25 #include <gnt.h> | |
26 #include <gntbox.h> | |
27 #include <gntbutton.h> | |
28 #include <gntcheckbox.h> | |
29 #include <gntlabel.h> | |
30 #include <gnttree.h> | |
31 #include "internal.h" | |
32 | |
33 #include "debug.h" | |
34 #include "notify.h" | |
35 #include "ft.h" | |
36 #include "prpl.h" | |
37 #include "util.h" | |
38 | |
39 #include "gntft.h" | |
40 #include "prefs.h" | |
41 | |
15822 | 42 #define FINCHXFER(xfer) \ |
43 (PurpleGntXferUiData *)(xfer)->ui_data | |
15817 | 44 |
45 typedef struct | |
46 { | |
47 gboolean keep_open; | |
48 gboolean auto_clear; | |
49 gint num_transfers; | |
50 | |
51 GntWidget *window; | |
52 GntWidget *tree; | |
53 | |
54 GntWidget *remove_button; | |
55 GntWidget *stop_button; | |
56 GntWidget *close_button; | |
15822 | 57 } PurpleGntXferDialog; |
15817 | 58 |
15822 | 59 static PurpleGntXferDialog *xfer_dialog = NULL; |
15817 | 60 |
61 typedef struct | |
62 { | |
63 time_t last_updated_time; | |
64 gboolean in_list; | |
65 | |
66 char *name; | |
67 | |
15822 | 68 } PurpleGntXferUiData; |
15817 | 69 |
70 enum | |
71 { | |
72 COLUMN_PROGRESS = 0, | |
73 COLUMN_FILENAME, | |
74 COLUMN_SIZE, | |
75 COLUMN_SPEED, | |
76 COLUMN_REMAINING, | |
77 COLUMN_STATUS, | |
78 NUM_COLUMNS | |
79 }; | |
80 | |
81 | |
82 /************************************************************************** | |
83 * Utility Functions | |
84 **************************************************************************/ | |
85 | |
86 static void | |
87 update_title_progress() | |
88 { | |
18118
ab6d2763b8d8
Re-fix the DBus list handling code by killing const GList* / const GSList*
Richard Laager <rlaager@wiktel.com>
parents:
16669
diff
changeset
|
89 GList *list; |
15817 | 90 int num_active_xfers = 0; |
91 guint64 total_bytes_xferred = 0; | |
92 guint64 total_file_size = 0; | |
93 | |
94 if (xfer_dialog == NULL || xfer_dialog->window == NULL) | |
95 return; | |
96 | |
97 /* Find all active transfers */ | |
98 for (list = gnt_tree_get_rows(GNT_TREE(xfer_dialog->tree)); list; list = list->next) { | |
15822 | 99 PurpleXfer *xfer = (PurpleXfer *)list->data; |
15817 | 100 |
15822 | 101 if (purple_xfer_get_status(xfer) == PURPLE_XFER_STATUS_STARTED) { |
15817 | 102 num_active_xfers++; |
15822 | 103 total_bytes_xferred += purple_xfer_get_bytes_sent(xfer); |
104 total_file_size += purple_xfer_get_size(xfer); | |
15817 | 105 } |
106 } | |
107 | |
108 /* Update the title */ | |
109 if (num_active_xfers > 0) { | |
110 gchar *title; | |
111 int total_pct = 0; | |
112 | |
113 if (total_file_size > 0) { | |
114 total_pct = 100 * total_bytes_xferred / total_file_size; | |
115 } | |
116 | |
117 title = g_strdup_printf(_("File Transfers - %d%% of %d files"), | |
118 total_pct, num_active_xfers); | |
119 gnt_screen_rename_widget((xfer_dialog->window), title); | |
120 g_free(title); | |
121 } else { | |
122 gnt_screen_rename_widget((xfer_dialog->window), _("File Transfers")); | |
123 } | |
124 } | |
125 | |
126 | |
127 /************************************************************************** | |
128 * Callbacks | |
129 **************************************************************************/ | |
130 static void | |
131 toggle_keep_open_cb(GntWidget *w) | |
132 { | |
133 xfer_dialog->keep_open = !xfer_dialog->keep_open; | |
16424
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
16194
diff
changeset
|
134 purple_prefs_set_bool("/finch/filetransfer/keep_open", |
15817 | 135 xfer_dialog->keep_open); |
136 } | |
137 | |
138 static void | |
139 toggle_clear_finished_cb(GntWidget *w) | |
140 { | |
141 xfer_dialog->auto_clear = !xfer_dialog->auto_clear; | |
16424
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
16194
diff
changeset
|
142 purple_prefs_set_bool("/finch/filetransfer/clear_finished", |
15817 | 143 xfer_dialog->auto_clear); |
144 } | |
145 | |
146 static void | |
147 remove_button_cb(GntButton *button) | |
148 { | |
15822 | 149 PurpleXfer *selected_xfer = gnt_tree_get_selection_data(GNT_TREE(xfer_dialog->tree)); |
150 if (selected_xfer && (selected_xfer->status == PURPLE_XFER_STATUS_CANCEL_LOCAL || | |
151 selected_xfer->status == PURPLE_XFER_STATUS_CANCEL_REMOTE || | |
152 selected_xfer->status == PURPLE_XFER_STATUS_DONE)) { | |
15817 | 153 finch_xfer_dialog_remove_xfer(selected_xfer); |
154 } | |
155 } | |
156 | |
157 static void | |
158 stop_button_cb(GntButton *button) | |
159 { | |
15822 | 160 PurpleXfer *selected_xfer = gnt_tree_get_selection_data(GNT_TREE(xfer_dialog->tree)); |
15942
ee397e53d9ce
allow cancellation of transfers waiting to be accepted
Richard Nelson <wabz@pidgin.im>
parents:
15870
diff
changeset
|
161 if (selected_xfer && selected_xfer->status != PURPLE_XFER_STATUS_CANCEL_LOCAL && |
ee397e53d9ce
allow cancellation of transfers waiting to be accepted
Richard Nelson <wabz@pidgin.im>
parents:
15870
diff
changeset
|
162 selected_xfer->status != PURPLE_XFER_STATUS_CANCEL_REMOTE && |
ee397e53d9ce
allow cancellation of transfers waiting to be accepted
Richard Nelson <wabz@pidgin.im>
parents:
15870
diff
changeset
|
163 selected_xfer->status != PURPLE_XFER_STATUS_DONE) |
15822 | 164 purple_xfer_cancel_local(selected_xfer); |
15817 | 165 } |
166 | |
167 /************************************************************************** | |
168 * Dialog Building Functions | |
169 **************************************************************************/ | |
170 | |
171 | |
172 void | |
173 finch_xfer_dialog_new(void) | |
174 { | |
18118
ab6d2763b8d8
Re-fix the DBus list handling code by killing const GList* / const GSList*
Richard Laager <rlaager@wiktel.com>
parents:
16669
diff
changeset
|
175 GList *iter; |
15817 | 176 GntWidget *window; |
177 GntWidget *bbox; | |
178 GntWidget *button; | |
179 GntWidget *checkbox; | |
180 GntWidget *tree; | |
18404
9a0f99ea664d
Resize tree-columns nicely when the tree is resized. We can tell it to
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18345
diff
changeset
|
181 int widths[] = {8, 12, 8, 8, 8, 8, -1}; |
15817 | 182 |
183 if (!xfer_dialog) | |
15822 | 184 xfer_dialog = g_new0(PurpleGntXferDialog, 1); |
15817 | 185 |
186 xfer_dialog->keep_open = | |
16424
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
16194
diff
changeset
|
187 purple_prefs_get_bool("/finch/filetransfer/keep_open"); |
15817 | 188 xfer_dialog->auto_clear = |
16424
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
16194
diff
changeset
|
189 purple_prefs_get_bool("/finch/filetransfer/clear_finished"); |
15817 | 190 |
191 /* Create the window. */ | |
192 xfer_dialog->window = window = gnt_vbox_new(FALSE); | |
193 g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(finch_xfer_dialog_destroy), NULL); | |
194 gnt_box_set_toplevel(GNT_BOX(window), TRUE); | |
195 gnt_box_set_title(GNT_BOX(window), _("File Transfers")); | |
19374
d65ce3df5be2
Make some of the dialogs look and behave more like each other.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18404
diff
changeset
|
196 gnt_box_set_fill(GNT_BOX(window), TRUE); |
d65ce3df5be2
Make some of the dialogs look and behave more like each other.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18404
diff
changeset
|
197 gnt_box_set_alignment(GNT_BOX(window), GNT_ALIGN_MID); |
15817 | 198 |
199 xfer_dialog->tree = tree = gnt_tree_new_with_columns(NUM_COLUMNS); | |
200 gnt_tree_set_column_titles(GNT_TREE(tree), _("Progress"), _("Filename"), _("Size"), _("Speed"), _("Remaining"), _("Status")); | |
18404
9a0f99ea664d
Resize tree-columns nicely when the tree is resized. We can tell it to
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18345
diff
changeset
|
201 gnt_tree_set_column_width_ratio(GNT_TREE(tree), widths); |
9a0f99ea664d
Resize tree-columns nicely when the tree is resized. We can tell it to
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18345
diff
changeset
|
202 gnt_tree_set_column_resizable(GNT_TREE(tree), COLUMN_PROGRESS, FALSE); |
9a0f99ea664d
Resize tree-columns nicely when the tree is resized. We can tell it to
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18345
diff
changeset
|
203 gnt_tree_set_column_resizable(GNT_TREE(tree), COLUMN_SIZE, FALSE); |
9a0f99ea664d
Resize tree-columns nicely when the tree is resized. We can tell it to
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18345
diff
changeset
|
204 gnt_tree_set_column_resizable(GNT_TREE(tree), COLUMN_SPEED, FALSE); |
9a0f99ea664d
Resize tree-columns nicely when the tree is resized. We can tell it to
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18345
diff
changeset
|
205 gnt_tree_set_column_resizable(GNT_TREE(tree), COLUMN_REMAINING, FALSE); |
9a0f99ea664d
Resize tree-columns nicely when the tree is resized. We can tell it to
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18345
diff
changeset
|
206 gnt_widget_set_size(tree, 70, -1); |
15817 | 207 gnt_tree_set_show_title(GNT_TREE(tree), TRUE); |
208 gnt_box_add_widget(GNT_BOX(window), tree); | |
15942
ee397e53d9ce
allow cancellation of transfers waiting to be accepted
Richard Nelson <wabz@pidgin.im>
parents:
15870
diff
changeset
|
209 |
15817 | 210 checkbox = gnt_check_box_new( _("Close this window when all transfers finish")); |
211 gnt_check_box_set_checked(GNT_CHECK_BOX(checkbox), | |
212 !xfer_dialog->keep_open); | |
213 g_signal_connect(G_OBJECT(checkbox), "toggled", | |
214 G_CALLBACK(toggle_keep_open_cb), NULL); | |
215 gnt_box_add_widget(GNT_BOX(window), checkbox); | |
216 | |
217 checkbox = gnt_check_box_new(_("Clear finished transfers")); | |
218 gnt_check_box_set_checked(GNT_CHECK_BOX(checkbox), | |
219 xfer_dialog->auto_clear); | |
220 g_signal_connect(G_OBJECT(checkbox), "toggled", | |
221 G_CALLBACK(toggle_clear_finished_cb), NULL); | |
222 gnt_box_add_widget(GNT_BOX(window), checkbox); | |
223 | |
19374
d65ce3df5be2
Make some of the dialogs look and behave more like each other.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18404
diff
changeset
|
224 bbox = gnt_hbox_new(FALSE); |
15817 | 225 |
226 xfer_dialog->remove_button = button = gnt_button_new(_("Remove")); | |
227 g_signal_connect(G_OBJECT(button), "activate", | |
228 G_CALLBACK(remove_button_cb), NULL); | |
229 gnt_box_add_widget(GNT_BOX(bbox), button); | |
230 | |
231 xfer_dialog->stop_button = button = gnt_button_new(_("Stop")); | |
232 g_signal_connect(G_OBJECT(button), "activate", | |
233 G_CALLBACK(stop_button_cb), NULL); | |
234 gnt_box_add_widget(GNT_BOX(bbox), button); | |
235 | |
236 xfer_dialog->close_button = button = gnt_button_new(_("Close")); | |
237 g_signal_connect(G_OBJECT(button), "activate", | |
238 G_CALLBACK(finch_xfer_dialog_destroy), NULL); | |
239 gnt_box_add_widget(GNT_BOX(bbox), button); | |
240 | |
241 gnt_box_add_widget(GNT_BOX(window), bbox); | |
242 | |
15822 | 243 for (iter = purple_xfers_get_all(); iter; iter = iter->next) { |
244 PurpleXfer *xfer = (PurpleXfer *)iter->data; | |
245 PurpleGntXferUiData *data = FINCHXFER(xfer); | |
15817 | 246 if (data->in_list) { |
247 finch_xfer_dialog_add_xfer(xfer); | |
248 finch_xfer_dialog_update_xfer(xfer); | |
249 gnt_tree_set_selected(GNT_TREE(tree), xfer); | |
250 } | |
251 } | |
252 gnt_widget_show(xfer_dialog->window); | |
253 } | |
254 | |
255 void | |
256 finch_xfer_dialog_destroy() | |
257 { | |
258 gnt_widget_destroy(xfer_dialog->window); | |
259 g_free(xfer_dialog); | |
260 xfer_dialog = NULL; | |
261 } | |
262 | |
263 void | |
264 finch_xfer_dialog_show() | |
265 { | |
266 if (xfer_dialog == NULL) | |
267 finch_xfer_dialog_new(); | |
18345
2d4df5ef0090
If the action-windows are already there, then bring them to front when
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18129
diff
changeset
|
268 else |
2d4df5ef0090
If the action-windows are already there, then bring them to front when
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18129
diff
changeset
|
269 gnt_window_present(xfer_dialog->window); |
15817 | 270 } |
271 | |
272 void | |
15822 | 273 finch_xfer_dialog_add_xfer(PurpleXfer *xfer) |
15817 | 274 { |
15822 | 275 PurpleGntXferUiData *data; |
276 PurpleXferType type; | |
15817 | 277 char *size_str, *remaining_str; |
278 char *lfilename, *utf8; | |
279 | |
280 g_return_if_fail(xfer_dialog != NULL); | |
281 g_return_if_fail(xfer != NULL); | |
282 | |
15822 | 283 purple_xfer_ref(xfer); |
15817 | 284 |
15822 | 285 data = FINCHXFER(xfer); |
15817 | 286 data->in_list = TRUE; |
287 | |
288 finch_xfer_dialog_show(); | |
289 | |
290 data->last_updated_time = 0; | |
291 | |
15822 | 292 type = purple_xfer_get_type(xfer); |
15817 | 293 |
15822 | 294 size_str = purple_str_size_to_units(purple_xfer_get_size(xfer)); |
295 remaining_str = purple_str_size_to_units(purple_xfer_get_bytes_remaining(xfer)); | |
15817 | 296 |
15822 | 297 lfilename = g_path_get_basename(purple_xfer_get_local_filename(xfer)); |
15817 | 298 utf8 = g_filename_to_utf8(lfilename, -1, NULL, NULL, NULL); |
299 g_free(lfilename); | |
300 lfilename = utf8; | |
301 gnt_tree_add_row_last(GNT_TREE(xfer_dialog->tree), xfer, | |
302 gnt_tree_create_row(GNT_TREE(xfer_dialog->tree), | |
15822 | 303 "0.0", (type == PURPLE_XFER_RECEIVE) ? purple_xfer_get_filename(xfer) : lfilename, |
15817 | 304 size_str, "0.0", "",_("Waiting for transfer to begin")), NULL); |
305 g_free(lfilename); | |
306 | |
307 g_free(size_str); | |
308 g_free(remaining_str); | |
309 | |
310 xfer_dialog->num_transfers++; | |
311 | |
312 update_title_progress(); | |
313 } | |
314 | |
315 void | |
15822 | 316 finch_xfer_dialog_remove_xfer(PurpleXfer *xfer) |
15817 | 317 { |
15822 | 318 PurpleGntXferUiData *data; |
15817 | 319 |
320 g_return_if_fail(xfer_dialog != NULL); | |
321 g_return_if_fail(xfer != NULL); | |
322 | |
15822 | 323 data = FINCHXFER(xfer); |
15817 | 324 |
325 if (data == NULL) | |
326 return; | |
327 | |
328 if (!data->in_list) | |
329 return; | |
330 | |
331 data->in_list = FALSE; | |
332 | |
333 gnt_tree_remove(GNT_TREE(xfer_dialog->tree), xfer); | |
334 | |
335 xfer_dialog->num_transfers--; | |
336 | |
337 if (xfer_dialog->num_transfers == 0 && !xfer_dialog->keep_open) | |
338 finch_xfer_dialog_destroy(); | |
339 else | |
340 update_title_progress(); | |
15822 | 341 purple_xfer_unref(xfer); |
15817 | 342 } |
343 | |
344 void | |
15822 | 345 finch_xfer_dialog_cancel_xfer(PurpleXfer *xfer) |
15817 | 346 { |
15822 | 347 PurpleGntXferUiData *data; |
15817 | 348 const gchar *status; |
349 | |
350 g_return_if_fail(xfer_dialog != NULL); | |
351 g_return_if_fail(xfer != NULL); | |
352 | |
15822 | 353 data = FINCHXFER(xfer); |
15817 | 354 |
355 if (data == NULL) | |
356 return; | |
357 | |
358 if (!data->in_list) | |
359 return; | |
360 | |
15822 | 361 if ((purple_xfer_get_status(xfer) == PURPLE_XFER_STATUS_CANCEL_LOCAL) && (xfer_dialog->auto_clear)) { |
15817 | 362 finch_xfer_dialog_remove_xfer(xfer); |
363 return; | |
364 } | |
365 | |
15822 | 366 data = FINCHXFER(xfer); |
15817 | 367 |
368 update_title_progress(); | |
369 | |
15822 | 370 if (purple_xfer_is_canceled(xfer)) |
15817 | 371 status = _("Canceled"); |
372 else | |
373 status = _("Failed"); | |
374 | |
375 gnt_tree_change_text(GNT_TREE(xfer_dialog->tree), xfer, COLUMN_STATUS, status); | |
376 } | |
377 | |
378 void | |
15822 | 379 finch_xfer_dialog_update_xfer(PurpleXfer *xfer) |
15817 | 380 { |
15822 | 381 PurpleGntXferUiData *data; |
15817 | 382 char *size_str, *remaining_str; |
383 time_t current_time; | |
384 char prog_str[5]; | |
385 double kb_sent, kb_rem; | |
386 double kbps = 0.0; | |
387 time_t elapsed, now; | |
388 char *kbsec; | |
389 | |
390 if (xfer->end_time != 0) | |
391 now = xfer->end_time; | |
392 else | |
393 now = time(NULL); | |
394 | |
15822 | 395 kb_sent = purple_xfer_get_bytes_sent(xfer) / 1024.0; |
396 kb_rem = purple_xfer_get_bytes_remaining(xfer) / 1024.0; | |
15817 | 397 elapsed = (xfer->start_time > 0 ? now - xfer->start_time : 0); |
398 kbps = (elapsed > 0 ? (kb_sent / elapsed) : 0); | |
399 | |
400 g_return_if_fail(xfer_dialog != NULL); | |
401 g_return_if_fail(xfer != NULL); | |
402 | |
15822 | 403 if ((data = FINCHXFER(xfer)) == NULL) |
15817 | 404 return; |
405 | |
406 if (data->in_list == FALSE) | |
407 return; | |
408 | |
409 current_time = time(NULL); | |
410 if (((current_time - data->last_updated_time) == 0) && | |
15822 | 411 (!purple_xfer_is_completed(xfer))) { |
15817 | 412 /* Don't update the window more than once per second */ |
413 return; | |
414 } | |
415 data->last_updated_time = current_time; | |
416 | |
15822 | 417 size_str = purple_str_size_to_units(purple_xfer_get_size(xfer)); |
418 remaining_str = purple_str_size_to_units(purple_xfer_get_bytes_remaining(xfer)); | |
18129
16f3919b78f5
Use the IEC binary units to match our math.
Richard Laager <rlaager@wiktel.com>
parents:
18118
diff
changeset
|
419 kbsec = g_strdup_printf(_("%.2f KiB/s"), kbps); |
15817 | 420 |
421 gnt_tree_change_text(GNT_TREE(xfer_dialog->tree), xfer, COLUMN_PROGRESS, | |
15822 | 422 g_ascii_dtostr(prog_str, sizeof(prog_str), purple_xfer_get_progress(xfer) * 100.)); |
15817 | 423 gnt_tree_change_text(GNT_TREE(xfer_dialog->tree), xfer, COLUMN_SIZE, size_str); |
424 gnt_tree_change_text(GNT_TREE(xfer_dialog->tree), xfer, COLUMN_REMAINING, remaining_str); | |
425 gnt_tree_change_text(GNT_TREE(xfer_dialog->tree), xfer, COLUMN_SPEED, kbsec); | |
426 g_free(size_str); | |
427 g_free(remaining_str); | |
15964 | 428 g_free(kbsec); |
15822 | 429 if (purple_xfer_is_completed(xfer)) { |
19374
d65ce3df5be2
Make some of the dialogs look and behave more like each other.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18404
diff
changeset
|
430 char *msg = g_strdup_printf(_("The file was saved as %s."), purple_xfer_get_local_filename(xfer)); |
15817 | 431 gnt_tree_change_text(GNT_TREE(xfer_dialog->tree), xfer, COLUMN_STATUS, _("Finished")); |
15942
ee397e53d9ce
allow cancellation of transfers waiting to be accepted
Richard Nelson <wabz@pidgin.im>
parents:
15870
diff
changeset
|
432 gnt_tree_change_text(GNT_TREE(xfer_dialog->tree), xfer, COLUMN_REMAINING, _("Finished")); |
19374
d65ce3df5be2
Make some of the dialogs look and behave more like each other.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18404
diff
changeset
|
433 purple_xfer_conversation_write(xfer, msg, FALSE); |
d65ce3df5be2
Make some of the dialogs look and behave more like each other.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18404
diff
changeset
|
434 g_free(msg); |
15817 | 435 } else { |
436 gnt_tree_change_text(GNT_TREE(xfer_dialog->tree), xfer, COLUMN_STATUS, _("Transferring")); | |
437 } | |
438 | |
439 update_title_progress(); | |
440 | |
15822 | 441 if (purple_xfer_is_completed(xfer) && xfer_dialog->auto_clear) |
15817 | 442 finch_xfer_dialog_remove_xfer(xfer); |
443 } | |
444 | |
445 /************************************************************************** | |
446 * File Transfer UI Ops | |
447 **************************************************************************/ | |
448 static void | |
15822 | 449 finch_xfer_new_xfer(PurpleXfer *xfer) |
15817 | 450 { |
15822 | 451 PurpleGntXferUiData *data; |
15817 | 452 |
453 /* This is where we're setting xfer->ui_data for the first time. */ | |
15822 | 454 data = g_new0(PurpleGntXferUiData, 1); |
15817 | 455 xfer->ui_data = data; |
456 } | |
457 | |
458 static void | |
15822 | 459 finch_xfer_destroy(PurpleXfer *xfer) |
15817 | 460 { |
15822 | 461 PurpleGntXferUiData *data; |
15817 | 462 |
15822 | 463 data = FINCHXFER(xfer); |
15817 | 464 if (data) { |
465 g_free(data->name); | |
466 g_free(data); | |
467 xfer->ui_data = NULL; | |
468 } | |
469 } | |
470 | |
471 static void | |
15822 | 472 finch_xfer_add_xfer(PurpleXfer *xfer) |
15817 | 473 { |
474 if (!xfer_dialog) | |
475 finch_xfer_dialog_new(); | |
476 | |
477 finch_xfer_dialog_add_xfer(xfer); | |
478 gnt_tree_set_selected(GNT_TREE(xfer_dialog->tree), xfer); | |
479 } | |
480 | |
481 static void | |
15822 | 482 finch_xfer_update_progress(PurpleXfer *xfer, double percent) |
15817 | 483 { |
484 if (xfer_dialog) | |
485 finch_xfer_dialog_update_xfer(xfer); | |
486 } | |
487 | |
488 static void | |
15822 | 489 finch_xfer_cancel_local(PurpleXfer *xfer) |
15817 | 490 { |
491 if (xfer_dialog) | |
492 finch_xfer_dialog_cancel_xfer(xfer); | |
493 } | |
494 | |
495 static void | |
15822 | 496 finch_xfer_cancel_remote(PurpleXfer *xfer) |
15817 | 497 { |
498 if (xfer_dialog) | |
499 finch_xfer_dialog_cancel_xfer(xfer); | |
500 } | |
501 | |
15822 | 502 static PurpleXferUiOps ops = |
15817 | 503 { |
504 finch_xfer_new_xfer, | |
505 finch_xfer_destroy, | |
506 finch_xfer_add_xfer, | |
507 finch_xfer_update_progress, | |
508 finch_xfer_cancel_local, | |
16669
30829e806dae
And finch is up to date
Gary Kramlich <grim@reaperworld.com>
parents:
16424
diff
changeset
|
509 finch_xfer_cancel_remote, |
30829e806dae
And finch is up to date
Gary Kramlich <grim@reaperworld.com>
parents:
16424
diff
changeset
|
510 |
30829e806dae
And finch is up to date
Gary Kramlich <grim@reaperworld.com>
parents:
16424
diff
changeset
|
511 /* padding */ |
30829e806dae
And finch is up to date
Gary Kramlich <grim@reaperworld.com>
parents:
16424
diff
changeset
|
512 NULL, |
30829e806dae
And finch is up to date
Gary Kramlich <grim@reaperworld.com>
parents:
16424
diff
changeset
|
513 NULL, |
30829e806dae
And finch is up to date
Gary Kramlich <grim@reaperworld.com>
parents:
16424
diff
changeset
|
514 NULL, |
30829e806dae
And finch is up to date
Gary Kramlich <grim@reaperworld.com>
parents:
16424
diff
changeset
|
515 NULL |
15817 | 516 }; |
517 | |
518 /************************************************************************** | |
519 * GNT File Transfer API | |
520 **************************************************************************/ | |
521 void | |
522 finch_xfers_init(void) | |
523 { | |
16424
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
16194
diff
changeset
|
524 purple_prefs_add_none("/finch/filetransfer"); |
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
16194
diff
changeset
|
525 purple_prefs_add_bool("/finch/filetransfer/clear_finished", TRUE); |
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
16194
diff
changeset
|
526 purple_prefs_add_bool("/finch/filetransfer/keep_open", FALSE); |
15817 | 527 } |
528 | |
529 void | |
530 finch_xfers_uninit(void) | |
531 { | |
532 if (xfer_dialog != NULL) | |
533 finch_xfer_dialog_destroy(); | |
534 } | |
535 | |
15822 | 536 PurpleXferUiOps * |
15817 | 537 finch_xfers_get_ui_ops(void) |
538 { | |
539 return &ops; | |
540 } |