libpurple/purplefiletransfermanager.c

Thu, 22 Feb 2024 06:03:16 -0600

author
Gary Kramlich <grim@reaperworld.com>
date
Thu, 22 Feb 2024 06:03:16 -0600
changeset 42596
b64b96f3b781
parent 42594
eddde70cedd8
child 42614
b75a5bbf6c35
permissions
-rw-r--r--

Add a favorite property to PurpleContactInfo

This will be used in the future for toggling whether or not contacts are
favorited or starred.

Testing Done:
Ran the unit tests under valgrind.

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

42560
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
1 /*
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
2 * Purple - Internet Messaging Library
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
3 * Copyright (C) Pidgin Developers <devel@pidgin.im>
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
4 *
42594
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42584
diff changeset
5 * Purple is the legal property of its developers, whose names are too numerous
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42584
diff changeset
6 * to list here. Please refer to the COPYRIGHT file distributed with this
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42584
diff changeset
7 * source distribution.
42560
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
8 *
42594
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42584
diff changeset
9 * This library is free software; you can redistribute it and/or modify it
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42584
diff changeset
10 * under the terms of the GNU General Public License as published by the Free
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42584
diff changeset
11 * Software Foundation; either version 2 of the License, or (at your option)
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42584
diff changeset
12 * any later version.
42560
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
13 *
42594
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42584
diff changeset
14 * This library is distributed in the hope that it will be useful, but WITHOUT
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42584
diff changeset
15 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42584
diff changeset
16 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42584
diff changeset
17 * more details.
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42584
diff changeset
18 *
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42584
diff changeset
19 * You should have received a copy of the GNU General Public License along with
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42584
diff changeset
20 * this library; if not, see <https://www.gnu.org/licenses/>.
42560
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
21 */
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
22
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
23 #include "purplefiletransfermanager.h"
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
24 #include "purplefiletransfermanagerprivate.h"
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
25
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
26 enum {
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
27 SIG_ADDED,
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
28 SIG_REMOVED,
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
29 SIG_TRANSFER_CHANGED,
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
30 N_SIGNALS,
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
31 };
42584
687260353985 Make signal and property enums and initializers consistent
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42560
diff changeset
32 static guint signals[N_SIGNALS] = {0, };
42560
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
33
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
34 struct _PurpleFileTransferManager {
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
35 GObject parent;
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
36
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
37 GPtrArray *transfers;
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
38 };
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
39
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
40 static PurpleFileTransferManager *default_manager = NULL;
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
41
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
42 /******************************************************************************
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
43 * Callbacks
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
44 *****************************************************************************/
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
45 static void
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
46 purple_file_transfer_manager_transfer_changed_cb(PurpleFileTransfer *transfer,
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
47 GParamSpec *pspec,
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
48 gpointer data)
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
49 {
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
50 g_signal_emit(data, signals[SIG_TRANSFER_CHANGED],
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
51 g_param_spec_get_name_quark(pspec),
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
52 transfer, pspec);
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
53 }
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
54
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
55 /******************************************************************************
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
56 * GListModel Implementation
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
57 *****************************************************************************/
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
58 static GType
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
59 purple_file_transfer_manager_get_item_type(G_GNUC_UNUSED GListModel *list) {
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
60 return PURPLE_TYPE_FILE_TRANSFER;
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
61 }
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
62
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
63 static guint
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
64 purple_file_transfer_manager_get_n_items(GListModel *list) {
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
65 PurpleFileTransferManager *manager = PURPLE_FILE_TRANSFER_MANAGER(list);
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
66
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
67 return manager->transfers->len;
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
68 }
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
69
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
70 static gpointer
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
71 purple_file_transfer_manager_get_item(GListModel *list, guint position) {
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
72 PurpleFileTransferManager *manager = PURPLE_FILE_TRANSFER_MANAGER(list);
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
73 PurpleFileTransfer *transfer = NULL;
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
74
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
75 if(position < manager->transfers->len) {
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
76 transfer = g_ptr_array_index(manager->transfers, position);
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
77 g_object_ref(transfer);
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
78 }
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
79
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
80 return transfer;
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
81 }
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
82
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
83 static void
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
84 pidgin_file_transfer_manager_list_model_iface_init(GListModelInterface *iface) {
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
85 iface->get_item_type = purple_file_transfer_manager_get_item_type;
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
86 iface->get_n_items = purple_file_transfer_manager_get_n_items;
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
87 iface->get_item = purple_file_transfer_manager_get_item;
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
88 }
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
89
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
90 /******************************************************************************
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
91 * GObject Implementation
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
92 *****************************************************************************/
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
93 G_DEFINE_FINAL_TYPE_WITH_CODE(PurpleFileTransferManager,
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
94 purple_file_transfer_manager,
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
95 G_TYPE_OBJECT,
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
96 G_IMPLEMENT_INTERFACE(G_TYPE_LIST_MODEL,
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
97 pidgin_file_transfer_manager_list_model_iface_init))
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
98
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
99 static void
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
100 purple_file_transfer_manager_finalize(GObject *obj) {
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
101 PurpleFileTransferManager *manager= PURPLE_FILE_TRANSFER_MANAGER(obj);
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
102
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
103 g_clear_pointer(&manager->transfers, g_ptr_array_unref);
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
104
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
105 G_OBJECT_CLASS(purple_file_transfer_manager_parent_class)->finalize(obj);
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
106 }
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
107
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
108 static void
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
109 purple_file_transfer_manager_init(PurpleFileTransferManager *manager) {
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
110 manager->transfers = g_ptr_array_new_with_free_func(g_object_unref);
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
111 }
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
112
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
113 static void
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
114 purple_file_transfer_manager_class_init(PurpleFileTransferManagerClass *klass)
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
115 {
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
116 GObjectClass *obj_class = G_OBJECT_CLASS(klass);
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
117
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
118 obj_class->finalize = purple_file_transfer_manager_finalize;
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
119
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
120 /**
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
121 * PurpleFileTransferManager::added:
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
122 * @manager: The instance.
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
123 * @transfer: The [class@FileTransfer] that was added.
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
124 * @data: User data.
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
125 *
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
126 * Emitted when a file transfer is added to @manager.
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
127 *
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
128 * Since: 3.0.0
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
129 */
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
130 signals[SIG_ADDED] = g_signal_new_class_handler(
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
131 "added",
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
132 G_OBJECT_CLASS_TYPE(klass),
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
133 G_SIGNAL_RUN_LAST,
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
134 NULL,
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
135 NULL,
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
136 NULL,
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
137 NULL,
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
138 G_TYPE_NONE,
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
139 1,
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
140 PURPLE_TYPE_FILE_TRANSFER);
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
141
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
142 /**
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
143 * PurpleFileTransferManager::removed:
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
144 * @manager: The instance.
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
145 * @transfer: The [class@FileTransfer] that was removed.
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
146 * @data: User data.
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
147 *
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
148 * Emitted when a file transfer is removed from @manager.
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
149 *
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
150 * Since: 3.0.0
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
151 */
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
152 signals[SIG_REMOVED] = g_signal_new_class_handler(
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
153 "removed",
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
154 G_OBJECT_CLASS_TYPE(klass),
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
155 G_SIGNAL_RUN_LAST,
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
156 NULL,
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
157 NULL,
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
158 NULL,
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
159 NULL,
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
160 G_TYPE_NONE,
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
161 1,
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
162 PURPLE_TYPE_FILE_TRANSFER);
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
163
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
164 /**
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
165 * PurpleFileTransferManager::transfer-changed:
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
166 * @manager: The manager instance.
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
167 * @transfer: The transfer that changed.
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
168 * @pspec: The [class@GObject.ParamSpec] for the property that changed.
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
169 *
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
170 * This is a propagation of the notify signal from @transfer. This means
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
171 * that your callback will be called for any file transfer that @manager
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
172 * knows about.
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
173 *
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
174 * This also supports details, so you can specify the signal name as
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
175 * something like `transfer-changed::state` and your callback will only
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
176 * be called when the state property of @transfer has been changed.
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
177 *
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
178 * Since: 3.0.0
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
179 */
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
180 signals[SIG_TRANSFER_CHANGED] = g_signal_new_class_handler(
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
181 "transfer-changed",
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
182 G_OBJECT_CLASS_TYPE(klass),
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
183 G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
184 NULL,
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
185 NULL,
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
186 NULL,
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
187 NULL,
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
188 G_TYPE_NONE,
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
189 2,
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
190 PURPLE_TYPE_FILE_TRANSFER,
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
191 G_TYPE_PARAM);
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
192 }
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
193
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
194 /******************************************************************************
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
195 * Private API
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
196 *****************************************************************************/
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
197 void
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
198 purple_file_transfer_manager_startup(void) {
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
199 if(!PURPLE_IS_FILE_TRANSFER_MANAGER(default_manager)) {
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
200 default_manager = g_object_new(PURPLE_TYPE_FILE_TRANSFER_MANAGER,
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
201 NULL);
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
202
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
203 g_object_add_weak_pointer(G_OBJECT(default_manager),
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
204 (gpointer *)&default_manager);
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
205 }
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
206 }
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
207
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
208 void
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
209 purple_file_transfer_manager_shutdown(void) {
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
210 g_clear_object(&default_manager);
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
211 }
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
212
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
213 /******************************************************************************
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
214 * Public API
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
215 *****************************************************************************/
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
216 PurpleFileTransferManager *
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
217 purple_file_transfer_manager_get_default(void) {
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
218 return default_manager;
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
219 }
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
220
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
221 GListModel *
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
222 purple_file_transfer_manager_get_default_as_model(void) {
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
223 if(PURPLE_IS_FILE_TRANSFER_MANAGER(default_manager)) {
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
224 return G_LIST_MODEL(default_manager);
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
225 }
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
226
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
227 return NULL;
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
228 }
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
229
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
230 void
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
231 purple_file_transfer_manager_add(PurpleFileTransferManager *manager,
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
232 PurpleFileTransfer *transfer)
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
233 {
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
234 guint position = 0;
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
235
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
236 g_return_if_fail(PURPLE_IS_FILE_TRANSFER_MANAGER(manager));
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
237 g_return_if_fail(PURPLE_IS_FILE_TRANSFER(transfer));
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
238
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
239 /* Store the len as position before appending to avoid math. */
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
240 position = manager->transfers->len;
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
241 g_ptr_array_add(manager->transfers, g_object_ref(transfer));
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
242
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
243 g_signal_connect_object(transfer, "notify",
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
244 G_CALLBACK(purple_file_transfer_manager_transfer_changed_cb),
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
245 manager, 0);
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
246
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
247 g_list_model_items_changed(G_LIST_MODEL(manager), position, 0, 1);
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
248
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
249 g_signal_emit(manager, signals[SIG_ADDED], 0, transfer);
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
250 }
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
251
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
252 gboolean
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
253 purple_file_transfer_manager_remove(PurpleFileTransferManager *manager,
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
254 PurpleFileTransfer *transfer)
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
255 {
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
256 gboolean found = FALSE;
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
257 guint position = 0;
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
258
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
259 g_return_val_if_fail(PURPLE_IS_FILE_TRANSFER_MANAGER(manager), FALSE);
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
260 g_return_val_if_fail(PURPLE_IS_FILE_TRANSFER(transfer), FALSE);
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
261
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
262 found = g_ptr_array_find(manager->transfers, transfer, &position);
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
263 if(!found) {
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
264 return FALSE;
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
265 }
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
266
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
267 /* Temporarily add a ref to the transfer so we can emit the removed
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
268 * signal without issue.
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
269 */
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
270 g_object_ref(transfer);
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
271
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
272 g_ptr_array_remove_index(manager->transfers, position);
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
273
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
274 g_list_model_items_changed(G_LIST_MODEL(manager), position, 1, 0);
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
275 g_signal_emit(manager, signals[SIG_REMOVED], 0, transfer);
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
276
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
277 g_object_unref(transfer);
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
278
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
279 return TRUE;
dcdf8a9a686b Implement PurpleFileTransferManager
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
280 }

mercurial