/*
* camel-offline-settings.c
*
* This library is free software: you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation.
*
* This library is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library. If not, see .
*
*/
#include "camel-offline-settings.h"
#include
#define CAMEL_OFFLINE_SETTINGS_GET_PRIVATE(obj) \
(G_TYPE_INSTANCE_GET_PRIVATE \
((obj), CAMEL_TYPE_OFFLINE_SETTINGS, CamelOfflineSettingsPrivate))
struct _CamelOfflineSettingsPrivate {
gboolean stay_synchronized;
gint store_changes_interval;
};
enum {
PROP_0,
PROP_STAY_SYNCHRONIZED,
PROP_STORE_CHANGES_INTERVAL
};
G_DEFINE_TYPE (
CamelOfflineSettings,
camel_offline_settings,
CAMEL_TYPE_STORE_SETTINGS)
static void
offline_settings_set_property (GObject *object,
guint property_id,
const GValue *value,
GParamSpec *pspec)
{
switch (property_id) {
case PROP_STAY_SYNCHRONIZED:
camel_offline_settings_set_stay_synchronized (
CAMEL_OFFLINE_SETTINGS (object),
g_value_get_boolean (value));
return;
case PROP_STORE_CHANGES_INTERVAL:
camel_offline_settings_set_store_changes_interval (
CAMEL_OFFLINE_SETTINGS (object),
g_value_get_int (value));
return;
}
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
}
static void
offline_settings_get_property (GObject *object,
guint property_id,
GValue *value,
GParamSpec *pspec)
{
switch (property_id) {
case PROP_STAY_SYNCHRONIZED:
g_value_set_boolean (
value,
camel_offline_settings_get_stay_synchronized (
CAMEL_OFFLINE_SETTINGS (object)));
return;
case PROP_STORE_CHANGES_INTERVAL:
g_value_set_int (
value,
camel_offline_settings_get_store_changes_interval (
CAMEL_OFFLINE_SETTINGS (object)));
return;
}
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
}
static void
camel_offline_settings_class_init (CamelOfflineSettingsClass *class)
{
GObjectClass *object_class;
g_type_class_add_private (class, sizeof (CamelOfflineSettingsPrivate));
object_class = G_OBJECT_CLASS (class);
object_class->set_property = offline_settings_set_property;
object_class->get_property = offline_settings_get_property;
g_object_class_install_property (
object_class,
PROP_STAY_SYNCHRONIZED,
g_param_spec_boolean (
"stay-synchronized",
"Stay Synchronized",
"Stay synchronized with the remote server",
FALSE,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT |
G_PARAM_STATIC_STRINGS));
g_object_class_install_property (
object_class,
PROP_STORE_CHANGES_INTERVAL,
g_param_spec_int (
"store-changes-interval",
"Store Changes Interval",
"Interval, in seconds, to store folder changes",
G_MININT,
G_MAXINT,
3,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT |
G_PARAM_STATIC_STRINGS));
}
static void
camel_offline_settings_init (CamelOfflineSettings *settings)
{
settings->priv = CAMEL_OFFLINE_SETTINGS_GET_PRIVATE (settings);
}
/**
* camel_offline_settings_get_stay_synchronized:
* @settings: a #CamelOfflineSettings
*
* Returns whether to synchronize the local cache with the remote server
* before switching to offline mode, so the store's content can still be
* read while offline.
*
* Returns: whether to stay synchronized with the remote server
*
* Since: 3.2
**/
gboolean
camel_offline_settings_get_stay_synchronized (CamelOfflineSettings *settings)
{
g_return_val_if_fail (CAMEL_IS_OFFLINE_SETTINGS (settings), FALSE);
return settings->priv->stay_synchronized;
}
/**
* camel_offline_settings_set_stay_synchronized:
* @settings: a #CamelOfflineSettings
* @stay_synchronized: whether to stay synchronized with the remote server
*
* Sets whether to synchronize the local cache with the remote server before
* switching to offline mode, so the store's content can still be read while
* offline.
*
* Since: 3.2
**/
void
camel_offline_settings_set_stay_synchronized (CamelOfflineSettings *settings,
gboolean stay_synchronized)
{
g_return_if_fail (CAMEL_IS_OFFLINE_SETTINGS (settings));
if (settings->priv->stay_synchronized == stay_synchronized)
return;
settings->priv->stay_synchronized = stay_synchronized;
g_object_notify (G_OBJECT (settings), "stay-synchronized");
}
/**
* camel_offline_settings_get_store_changes_interval:
* @settings: a #CamelOfflineSettings
*
* Returns the interval, in seconds, for the changes in the folder being
* saved automatically. 0 means immediately, while -1 means turning off
* automatic folder change saving.
*
* Returns: the interval for automatic store of folder changes
*
* Since: 3.18
**/
gint
camel_offline_settings_get_store_changes_interval (CamelOfflineSettings *settings)
{
g_return_val_if_fail (CAMEL_IS_OFFLINE_SETTINGS (settings), -1);
return settings->priv->store_changes_interval;
}
/**
* camel_offline_settings_set_store_changes_interval:
* @settings: a #CamelOfflineSettings
* @interval: the interval, in seconds
*
* Sets the interval, in seconds, for the changes in the folder being
* saved automatically. 0 means immediately, while -1 means turning off
* automatic folder change saving.
*
* Since: 3.18
**/
void
camel_offline_settings_set_store_changes_interval (CamelOfflineSettings *settings,
gint interval)
{
g_return_if_fail (CAMEL_IS_OFFLINE_SETTINGS (settings));
if (settings->priv->store_changes_interval == interval)
return;
settings->priv->store_changes_interval = interval;
g_object_notify (G_OBJECT (settings), "store-changes-interval");
}