4
* Authors: Rodrigo Moya <rodrigo.moya@canonical.com>
6
* Copyright 2010-2012 Canonical Ltd.
8
* This program is free software: you can redistribute it and/or modify it
9
* under the terms of the GNU General Public License version 3, as published
10
* by the Free Software Foundation.
12
* This program is distributed in the hope that it will be useful, but
13
* WITHOUT ANY WARRANTY; without even the implied warranties of
14
* MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
15
* PURPOSE. See the GNU General Public License for more details.
17
* You should have received a copy of the GNU General Public License along
18
* with this program. If not, see <http://www.gnu.org/licenses/>.
20
* In addition, as a special exception, the copyright holders give
21
* permission to link the code of portions of this program with the
22
* OpenSSL library under certain conditions as described in each
23
* individual source file, and distribute linked combinations
25
* You must obey the GNU General Public License in all respects
26
* for all of the code used other than OpenSSL. If you modify
27
* file(s) with this exception, you may extend this exception to your
28
* version of the file(s), but you are not obligated to do so. If you
29
* do not wish to do so, delete this exception statement from your
30
* version. If you delete this exception statement from all source
31
* files in the program, then also delete it here.
35
#include "syncdaemon-metadata.h"
37
G_DEFINE_TYPE(SyncdaemonMetadata, syncdaemon_metadata, G_TYPE_OBJECT)
39
struct _SyncdaemonMetadataPrivate {
50
syncdaemon_metadata_finalize (GObject *object)
52
SyncdaemonMetadata *metadata = SYNCDAEMON_METADATA (object);
54
if (metadata->priv != NULL) {
55
if (metadata->priv->path != NULL)
56
g_free (metadata->priv->path);
58
if (metadata->priv->local_hash != NULL)
59
g_free (metadata->priv->local_hash);
61
if (metadata->priv->server_hash != NULL)
62
g_free (metadata->priv->server_hash);
64
if (metadata->priv->share_id != NULL)
65
g_free (metadata->priv->share_id);
67
if (metadata->priv->node_id != NULL)
68
g_free (metadata->priv->node_id);
70
g_free (metadata->priv);
73
G_OBJECT_CLASS (syncdaemon_metadata_parent_class)->finalize (object);
77
syncdaemon_metadata_class_init (SyncdaemonMetadataClass *klass)
79
GObjectClass *object_class = G_OBJECT_CLASS (klass);
81
object_class->finalize = syncdaemon_metadata_finalize;
85
syncdaemon_metadata_init (SyncdaemonMetadata *metadata)
87
metadata->priv = g_new0 (SyncdaemonMetadataPrivate, 1);
91
* syncdaemon_metadata_new:
94
syncdaemon_metadata_new (void)
96
return g_object_new (SYNCDAEMON_TYPE_METADATA, NULL);
100
* syncdaemon_metadata_new_from_hash_table:
103
syncdaemon_metadata_new_from_hash_table (GHashTable *hash)
105
SyncdaemonMetadata *metadata;
107
metadata = g_object_new (SYNCDAEMON_TYPE_METADATA, NULL);
109
syncdaemon_metadata_set_path (metadata, g_hash_table_lookup (hash, "path"));
110
syncdaemon_metadata_set_local_hash (metadata, g_hash_table_lookup (hash, "local_hash"));
111
syncdaemon_metadata_set_server_hash (metadata, g_hash_table_lookup (hash, "server_hash"));
112
syncdaemon_metadata_set_share_id (metadata, g_hash_table_lookup (hash, "share_id"));
113
syncdaemon_metadata_set_node_id (metadata, g_hash_table_lookup (hash, "node_id"));
114
syncdaemon_metadata_set_is_synced (
116
g_strcmp0 (g_hash_table_lookup (hash, "quick_tree_synced"), "synced") == 0);
117
metadata->priv->is_dir = g_strcmp0 (g_hash_table_lookup (hash, "is_dir"), "True") == 0;
118
/* FIXME: we ignore the other values in the hash table since none of our
119
clients use them for now */
126
* syncdaemon_metadata_get_path:
129
syncdaemon_metadata_get_path (SyncdaemonMetadata *metadata)
131
g_return_val_if_fail (SYNCDAEMON_IS_METADATA (metadata), NULL);
133
return (const gchar *) metadata->priv->path;
137
* syncdaemon_metadata_set_path:
140
syncdaemon_metadata_set_path (SyncdaemonMetadata *metadata, const gchar *path)
142
g_return_if_fail (SYNCDAEMON_IS_METADATA (metadata));
144
if (metadata->priv->path != NULL)
145
g_free (metadata->priv->path);
147
metadata->priv->path = g_strdup (path);
151
* syncdaemon_metadata_get_local_hash:
154
syncdaemon_metadata_get_local_hash (SyncdaemonMetadata *metadata)
156
g_return_val_if_fail (SYNCDAEMON_IS_METADATA (metadata), NULL);
158
return (const gchar *) metadata->priv->local_hash;
162
* syncdaemon_metadata_set_local_hash:
165
syncdaemon_metadata_set_local_hash (SyncdaemonMetadata *metadata, const gchar *local_hash)
167
g_return_if_fail (SYNCDAEMON_IS_METADATA (metadata));
169
if (metadata->priv->local_hash != NULL)
170
g_free (metadata->priv->local_hash);
172
metadata->priv->local_hash = g_strdup (local_hash);
176
* syncdaemon_metadata_get_server_hash:
179
syncdaemon_metadata_get_server_hash (SyncdaemonMetadata *metadata)
181
g_return_val_if_fail (SYNCDAEMON_IS_METADATA (metadata), NULL);
183
return (const gchar *) metadata->priv->server_hash;
187
* syncdaemon_metadata_set_server_hash:
190
syncdaemon_metadata_set_server_hash (SyncdaemonMetadata *metadata, const gchar *server_hash)
192
g_return_if_fail (SYNCDAEMON_IS_METADATA (metadata));
194
if (metadata->priv->server_hash != NULL)
195
g_free (metadata->priv->server_hash);
197
metadata->priv->server_hash = g_strdup (server_hash);
201
* syncdaemon_metadata_get_share_id:
204
syncdaemon_metadata_get_share_id (SyncdaemonMetadata *metadata)
206
g_return_val_if_fail (SYNCDAEMON_IS_METADATA (metadata), NULL);
208
return (const gchar *) metadata->priv->share_id;
212
* syncdaemon_metadata_set_share_id:
215
syncdaemon_metadata_set_share_id (SyncdaemonMetadata *metadata, const gchar *share_id)
217
g_return_if_fail (SYNCDAEMON_IS_METADATA (metadata));
219
if (metadata->priv->share_id != NULL)
220
g_free (metadata->priv->share_id);
222
metadata->priv->share_id = g_strdup (share_id);
226
* syncdaemon_metadata_get_node_id:
229
syncdaemon_metadata_get_node_id (SyncdaemonMetadata *metadata)
231
g_return_val_if_fail (SYNCDAEMON_IS_METADATA (metadata), NULL);
233
return (const gchar *) metadata->priv->node_id;
237
* syncdaemon_metadata_set_node_id:
240
syncdaemon_metadata_set_node_id (SyncdaemonMetadata *metadata, const gchar *node_id)
242
g_return_if_fail (SYNCDAEMON_IS_METADATA (metadata));
244
if (metadata->priv->node_id != NULL)
245
g_free (metadata->priv->node_id);
247
metadata->priv->node_id = g_strdup (node_id);
251
* syncdaemon_metadata_get_is_synced:
254
syncdaemon_metadata_get_is_synced (SyncdaemonMetadata *metadata)
256
gchar *local, *server;
259
g_return_val_if_fail (SYNCDAEMON_IS_METADATA (metadata), FALSE);
261
/* If it's a dir, we have the 'quick_tree_synced' value */
262
if (metadata->priv->is_dir)
263
return metadata->priv->is_synced;
265
local = metadata->priv->local_hash;
266
server = metadata->priv->server_hash;
268
is_updated = local && server && *local && *server &&
269
g_strcmp0 (local, server) == 0;
275
* syncdaemon_metadata_set_is_synced:
278
syncdaemon_metadata_set_is_synced (SyncdaemonMetadata *metadata, gboolean is_synced)
280
g_return_if_fail (SYNCDAEMON_IS_METADATA (metadata));
282
metadata->priv->is_synced = is_synced;