Applying lessons learned from ESourceRegistry.
Rename camel_service_get_settings() to camel_service_ref_settings()
and have it return a new reference.
When returning a pointer to a reference-counted object in a multi-
threaded environment, always increase the object's reference count
before returning so as to transfer a new reference to the caller.
Otherwise it introduces a potential race where the reference-counted
object may lose its last reference and be freed while the caller is
still using the object. Even if the caller immediately increments
the object's reference count, it's still a potential race.
Transferring a new reference to the caller means the caller must
unreference the object when finished with it so the object will be
properly freed when it's no longer needed.
service = CAMEL_SERVICE (parent_store);
session = camel_service_get_session (service);
- settings = camel_service_get_settings (service);
sync_folder = camel_disco_folder_get_offline_sync (
CAMEL_DISCO_FOLDER (folder));
+ settings = camel_service_ref_settings (service);
+
sync_store = camel_offline_settings_get_stay_synchronized (
CAMEL_OFFLINE_SETTINGS (settings));
+ g_object_unref (settings);
+
if (changes->uid_added->len > 0 && (sync_folder || sync_store)) {
struct _cdf_sync_data *data;
store = CAMEL_STORE (disco_store);
service = CAMEL_SERVICE (disco_store);
session = camel_service_get_session (service);
- settings = camel_service_get_settings (service);
network_available = camel_session_get_network_available (session);
store_is_online = (disco_store->status == CAMEL_DISCO_STORE_ONLINE);
going_offline = (status == CAMEL_DISCO_STORE_OFFLINE);
+ settings = camel_service_ref_settings (service);
+
sync_store = camel_offline_settings_get_stay_synchronized (
CAMEL_OFFLINE_SETTINGS (settings));
+ g_object_unref (settings);
+
if (network_available) {
if (store_is_online && going_offline && store->folders != NULL) {
GPtrArray *folders;
store = CAMEL_STORE (disco_store);
service = CAMEL_SERVICE (disco_store);
session = camel_service_get_session (service);
- settings = camel_service_get_settings (service);
/* We can't prepare for offline if we're already offline. */
if (!camel_session_get_network_available (session))
/* Sync the folder fully if we've been told to
* sync offline for this store or this folder. */
+ settings = camel_service_ref_settings (service);
+
sync_store = camel_offline_settings_get_stay_synchronized (
CAMEL_OFFLINE_SETTINGS (settings));
+ g_object_unref (settings);
+
store_is_online = (disco_store->status == CAMEL_DISCO_STORE_ONLINE);
if (store_is_online && store->folders != NULL) {
/* Caller must be holding CON_WRITE_LOCK. */
service = CAMEL_SERVICE (con_man->priv->store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
concurrent_connections =
camel_imapx_settings_get_concurrent_connections (
CAMEL_IMAPX_SETTINGS (settings));
+ g_object_unref (settings);
+
/* XXX Have a dedicated connection for INBOX ? */
list = con_man->priv->connections;
d("opening imap folder '%s'\n", folder_dir);
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
g_object_get (
settings,
"filter-junk-inbox", &filter_junk_inbox,
NULL);
+ g_object_unref (settings);
+
short_name = strrchr (folder_name, '/');
if (short_name)
short_name++;
gboolean ok = FALSE;
service = CAMEL_SERVICE (is->store);
- settings = camel_service_get_settings (service);
priv = CAMEL_IMAPX_SERVER_GET_PRIVATE (is);
/* If priv->context is not NULL here, it basically means that
g_return_val_if_fail (priv->context == NULL, FALSE);
priv->context = g_new0 (CamelIMAPXServerUntaggedContext, 1);
+ settings = camel_service_ref_settings (service);
+
priv->context->lsub = FALSE;
priv->context->fetch_order = camel_imapx_settings_get_fetch_order (
CAMEL_IMAPX_SETTINGS (settings));
+ g_object_unref (settings);
+
e(is->tagprefix, "got untagged response\n");
priv->context->id = 0;
priv->context->tok = camel_imapx_stream_token (is->stream,
service = CAMEL_SERVICE (is->store);
password = camel_service_get_password (service);
provider = camel_service_get_provider (service);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
port = camel_network_settings_get_port (network_settings);
user = camel_network_settings_dup_user (network_settings);
+ g_object_unref (settings);
+
/* Put full details in the environment, in case the connection
* program needs them */
camel_url_set_protocol (&url, provider->protocol);
#endif
service = CAMEL_SERVICE (is->store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
if (use_shell_command)
shell_command = camel_imapx_settings_dup_shell_command (
CAMEL_IMAPX_SETTINGS (settings));
+#endif
+ g_object_unref (settings);
+
+#ifndef G_OS_WIN32
if (shell_command != NULL) {
gboolean success;
CAMEL_AUTHENTICATION_REJECTED);
service = CAMEL_SERVICE (is->store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
user = camel_network_settings_dup_user (network_settings);
+ g_object_unref (settings);
+
if (mechanism != NULL) {
if (!g_hash_table_lookup (is->cinfo->auth_types, mechanism)) {
g_set_error (
service = CAMEL_SERVICE (is->store);
session = camel_service_get_session (service);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
mechanism = camel_network_settings_dup_auth_mechanism (
CAMEL_NETWORK_SETTINGS (settings));
use_qresync = camel_imapx_settings_get_use_qresync (
CAMEL_IMAPX_SETTINGS (settings));
+ g_object_unref (settings);
+
if (!imapx_connect_to_server (is, cancellable, error))
goto exception;
isum = (CamelIMAPXSummary *) job->folder->summary;
service = CAMEL_SERVICE (is->store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
batch_count = camel_imapx_settings_get_batch_fetch_count (
CAMEL_IMAPX_SETTINGS (settings));
mobile_mode = camel_imapx_settings_get_mobile_mode (
CAMEL_IMAPX_SETTINGS (settings));
+ g_object_unref (settings);
+
i = data->index;
//printf("%s: Mobile mode: %d Fetch Count %d\n", camel_folder_get_display_name (job->folder), mobile_mode, batch_count);
data->scan_changes = FALSE;
service = CAMEL_SERVICE (is->store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
uidset_size = camel_imapx_settings_get_batch_fetch_count (
CAMEL_IMAPX_SETTINGS (settings));
mobile_mode = camel_imapx_settings_get_mobile_mode (
CAMEL_IMAPX_SETTINGS (settings));
+ g_object_unref (settings);
+
if (camel_imapx_command_set_error_if_failed (ic, error)) {
g_prefix_error (
error, "%s: ",
gchar *uid = NULL;
service = CAMEL_SERVICE (is->store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
+
mobile_mode = camel_imapx_settings_get_mobile_mode (
CAMEL_IMAPX_SETTINGS (settings));
+ g_object_unref (settings);
+
if (mobile_mode)
uid = imapx_get_uid_from_index (job->folder->summary, 0);
g_return_if_fail (data != NULL);
service = CAMEL_SERVICE (is->store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
fetch_order = camel_imapx_settings_get_fetch_order (
CAMEL_IMAPX_SETTINGS (settings));
uidset_size = camel_imapx_settings_get_batch_fetch_count (
CAMEL_IMAPX_SETTINGS (settings));
+ g_object_unref (settings);
+
total = camel_folder_summary_count (folder->summary);
diff = ifolder->exists_on_server - total;
g_return_if_fail (data != NULL);
service = CAMEL_SERVICE (is->store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
fetch_order = camel_imapx_settings_get_fetch_order (
CAMEL_IMAPX_SETTINGS (settings));
uidset_size = camel_imapx_settings_get_batch_fetch_count (
CAMEL_IMAPX_SETTINGS (settings));
+ g_object_unref (settings);
+
if (ftype == CAMEL_FETCH_NEW_MESSAGES ||
(ftype == CAMEL_FETCH_OLD_MESSAGES && total <=0 )) {
gboolean mobile_mode;
service = CAMEL_SERVICE (is->store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
+
mobile_mode = camel_imapx_settings_get_mobile_mode (
CAMEL_IMAPX_SETTINGS (settings));
+ g_object_unref (settings);
+
full_name = camel_folder_get_full_name (folder);
/* Sync changes first, else unread count will not
g_return_val_if_fail (data != NULL, FALSE);
service = CAMEL_SERVICE (is->store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
+
mobile_mode = camel_imapx_settings_get_mobile_mode (
CAMEL_IMAPX_SETTINGS (settings));
+ g_object_unref (settings);
+
job->commands--;
full_name = camel_folder_get_full_name (job->folder);
gchar *user;
gchar *name;
- settings = camel_service_get_settings (service);
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
user = camel_network_settings_dup_user (network_settings);
+ g_object_unref (settings);
+
if (brief)
name = g_strdup_printf (
_("IMAP server %s"), host);
CamelSettings *settings;
gboolean mobile_mode;
- settings = camel_service_get_settings (service);
+ settings = camel_service_ref_settings (service);
+
mobile_mode = camel_imapx_settings_get_mobile_mode (
CAMEL_IMAPX_SETTINGS (settings));
+ g_object_unref (settings);
+
folder = camel_object_bag_peek (store->folders, fi->full_name);
if (folder) {
CamelIMAPXSummary *ims;
gint i;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
use_namespace = camel_imapx_settings_get_use_namespace (
CAMEL_IMAPX_SETTINGS (settings));
use_subscriptions = camel_imapx_settings_get_use_subscriptions (
CAMEL_IMAPX_SETTINGS (settings));
+ g_object_unref (settings);
+
/* FIXME: obey other flags */
folders = g_ptr_array_new ();
if (top[0] == 0) {
gchar *namespace = NULL;
- if (use_namespace)
+ if (use_namespace) {
+ settings = camel_service_ref_settings (service);
+
namespace = camel_imapx_settings_dup_namespace (
CAMEL_IMAPX_SETTINGS (settings));
+ g_object_unref (settings);
+ }
+
if (namespace != NULL) {
name = g_strdup (imapx_store->summary->namespaces->personal->full_name);
top = imapx_store->summary->namespaces->personal->path;
store_class = CAMEL_STORE_CLASS (camel_imapx_store_parent_class);
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
check_all = camel_imapx_settings_get_check_all (
CAMEL_IMAPX_SETTINGS (settings));
check_subscribed = camel_imapx_settings_get_check_subscribed (
CAMEL_IMAPX_SETTINGS (settings));
+ g_object_unref (settings);
+
subscribed = ((info->flags & CAMEL_FOLDER_SUBSCRIBED) != 0);
res = store_class->can_refresh_folder (store, info, &local_error) ||
service = CAMEL_SERVICE (store);
session = camel_service_get_session (service);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
use_subscriptions = camel_imapx_settings_get_use_subscriptions (
CAMEL_IMAPX_SETTINGS (settings));
+ g_object_unref (settings);
+
if (top == NULL)
top = "";
gboolean success = FALSE;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
user_cache_dir = camel_service_get_user_cache_dir (service);
+ settings = camel_service_ref_settings (service);
+
use_subscriptions = camel_imapx_settings_get_use_subscriptions (
CAMEL_IMAPX_SETTINGS (settings));
+ g_object_unref (settings);
+
if (!camel_offline_store_get_online (CAMEL_OFFLINE_STORE (store))) {
g_set_error (
error, CAMEL_SERVICE_ERROR,
full_name = camel_folder_get_full_name (folder);
parent_store = camel_folder_get_parent_store (folder);
service = CAMEL_SERVICE (parent_store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
+
mobile_mode = camel_imapx_settings_get_mobile_mode (
CAMEL_IMAPX_SETTINGS (settings));
+ g_object_unref (settings);
+
si = camel_store_summary_path ((CamelStoreSummary *) ((CamelIMAPXStore *) parent_store)->summary, full_name);
if (si) {
guint32 unread, total;
gint status;
session = camel_service_get_session (CAMEL_SERVICE (service));
- settings = camel_service_get_settings (CAMEL_SERVICE (service));
+ settings = camel_service_ref_settings (CAMEL_SERVICE (service));
g_return_val_if_fail (CAMEL_IS_NETWORK_SETTINGS (settings), NULL);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
port = camel_network_settings_get_port (network_settings);
+ g_object_unref (settings);
+
service_name = camel_network_service_get_service_name (service, method);
default_port = camel_network_service_get_default_port (service, method);
service = CAMEL_SERVICE (parent_store);
session = camel_service_get_session (service);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
sync_store = camel_offline_settings_get_stay_synchronized (
CAMEL_OFFLINE_SETTINGS (settings));
+ g_object_unref (settings);
+
sync_folder = camel_offline_folder_get_offline_sync (
CAMEL_OFFLINE_FOLDER (folder));
service = CAMEL_SERVICE (store);
session = camel_service_get_session (service);
- settings = camel_service_get_settings (service);
network_available = camel_session_get_network_available (session);
store_is_online = camel_offline_store_get_online (store);
+ settings = camel_service_ref_settings (service);
+
sync_store = camel_offline_settings_get_stay_synchronized (
CAMEL_OFFLINE_SETTINGS (settings));
+ g_object_unref (settings);
+
/* Returning to online mode is the simpler case. */
if (!store_is_online) {
store->priv->online = online;
service = CAMEL_SERVICE (store);
session = camel_service_get_session (service);
- settings = camel_service_get_settings (service);
network_available = camel_session_get_network_available (session);
store_is_online = camel_offline_store_get_online (store);
+ settings = camel_service_ref_settings (service);
+
sync_store = camel_offline_settings_get_stay_synchronized (
CAMEL_OFFLINE_SETTINGS (settings));
+ g_object_unref (settings);
+
if (network_available && store_is_online) {
GPtrArray *folders;
guint ii;
service = camel_sasl_get_service (sasl);
- settings = camel_service_get_settings (service);
+ settings = camel_service_ref_settings (service);
g_return_val_if_fail (CAMEL_IS_NETWORK_SETTINGS (settings), NULL);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
user = camel_network_settings_dup_user (network_settings);
+
+ g_object_unref (settings);
+
g_return_val_if_fail (user != NULL, NULL);
password = camel_service_get_password (service);
service = camel_sasl_get_service (sasl);
service_name = camel_sasl_get_service_name (sasl);
- settings = camel_service_get_settings (service);
+ settings = camel_service_ref_settings (service);
g_return_val_if_fail (CAMEL_IS_NETWORK_SETTINGS (settings), NULL);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
user = camel_network_settings_dup_user (network_settings);
+
+ g_object_unref (settings);
+
g_return_val_if_fail (user != NULL, NULL);
if (host == NULL)
service = camel_sasl_get_service (sasl);
service_name = camel_sasl_get_service_name (sasl);
- settings = camel_service_get_settings (service);
+ settings = camel_service_ref_settings (service);
g_return_val_if_fail (CAMEL_IS_NETWORK_SETTINGS (settings), NULL);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
user = camel_network_settings_dup_user (network_settings);
+
+ g_object_unref (settings);
+
g_return_val_if_fail (user != NULL, NULL);
if (host == NULL)
service = camel_sasl_get_service (sasl);
- settings = camel_service_get_settings (service);
+ settings = camel_service_ref_settings (service);
g_return_val_if_fail (CAMEL_IS_NETWORK_SETTINGS (settings), NULL);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
user = camel_network_settings_dup_user (network_settings);
+
+ g_object_unref (settings);
+
g_return_val_if_fail (user != NULL, NULL);
password = camel_service_get_password (service);
service = camel_sasl_get_service (sasl);
- settings = camel_service_get_settings (service);
+ settings = camel_service_ref_settings (service);
g_return_val_if_fail (CAMEL_IS_NETWORK_SETTINGS (settings), NULL);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
user = camel_network_settings_dup_user (network_settings);
+
+ g_object_unref (settings);
+
g_return_val_if_fail (user != NULL, NULL);
password = camel_service_get_password (service);
service = camel_sasl_get_service (sasl);
- settings = camel_service_get_settings (service);
+ settings = camel_service_ref_settings (service);
g_return_val_if_fail (CAMEL_IS_NETWORK_SETTINGS (settings), FALSE);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
user = camel_network_settings_dup_user (network_settings);
+
+ g_object_unref (settings);
+
g_return_val_if_fail (user != NULL, FALSE);
cp = strchr (user, '\\');
service = camel_sasl_get_service (sasl);
- settings = camel_service_get_settings (service);
+ settings = camel_service_ref_settings (service);
g_return_val_if_fail (CAMEL_IS_NETWORK_SETTINGS (settings), NULL);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
user = camel_network_settings_dup_user (network_settings);
+
+ g_object_unref (settings);
+
g_return_val_if_fail (user != NULL, NULL);
password = camel_service_get_password (service);
gpointer session; /* weak pointer */
CamelSettings *settings;
+ GMutex *settings_lock;
+
CamelProvider *provider;
gchar *display_name;
return;
case PROP_SETTINGS:
- g_value_set_object (
- value, camel_service_get_settings (
+ g_value_take_object (
+ value, camel_service_ref_settings (
CAMEL_SERVICE (object)));
return;
CAMEL_SERVICE_GET_CLASS (object)->disconnect_sync (
CAMEL_SERVICE (object), TRUE, NULL, NULL);
+ g_mutex_free (priv->settings_lock);
+
g_free (priv->display_name);
g_free (priv->user_data_dir);
g_free (priv->user_cache_dir);
{
service->priv = CAMEL_SERVICE_GET_PRIVATE (service);
+ service->priv->settings_lock = g_mutex_new ();
service->priv->connection_lock = g_mutex_new ();
service->priv->status = CAMEL_SERVICE_DISCONNECTED;
}
g_return_val_if_fail (CAMEL_IS_SERVICE (service), NULL);
provider = camel_service_get_provider (service);
- settings = camel_service_get_settings (service);
-
g_return_val_if_fail (provider != NULL, NULL);
+ settings = camel_service_ref_settings (service);
+
/* Allocate as camel_url_new_with_base() does. */
url = g_new0 (CamelURL, 1);
g_free (user);
g_free (path);
+ g_object_unref (settings);
+
return url;
}
}
/**
- * camel_service_get_settings:
+ * camel_service_ref_settings:
* @service: a #CamelService
*
* Returns the #CamelSettings instance associated with the service.
*
+ * The returned #CamelSettings is referenced for thread-safety and must
+ * be unreferenced with g_object_unref() when finished with it.
+ *
* Returns: the #CamelSettings
*
- * Since: 3.2
+ * Since: 3.6
**/
CamelSettings *
-camel_service_get_settings (CamelService *service)
+camel_service_ref_settings (CamelService *service)
{
+ CamelSettings *settings;
+
g_return_val_if_fail (CAMEL_IS_SERVICE (service), NULL);
/* Every service should have a settings object. */
- g_warn_if_fail (service->priv->settings != NULL);
+ g_return_val_if_fail (service->priv->settings != NULL, NULL);
+
+ g_mutex_lock (service->priv->settings_lock);
+
+ settings = g_object_ref (service->priv->settings);
+
+ g_mutex_unlock (service->priv->settings_lock);
- return service->priv->settings;
+ return settings;
}
/**
g_return_if_fail (CAMEL_IS_SERVICE (service));
- if (settings && service->priv->settings == settings)
- return;
-
class = CAMEL_SERVICE_GET_CLASS (service);
if (settings != NULL) {
settings = g_object_new (class->settings_type, NULL);
}
+ g_mutex_lock (service->priv->settings_lock);
+
if (service->priv->settings != NULL)
g_object_unref (service->priv->settings);
- service->priv->settings = settings;
+ service->priv->settings = settings; /* takes ownership */
+
+ g_mutex_unlock (service->priv->settings_lock);
g_object_notify (G_OBJECT (service), "settings");
}
CamelProvider * camel_service_get_provider (CamelService *service);
struct _CamelSession *
camel_service_get_session (CamelService *service);
-CamelSettings * camel_service_get_settings (CamelService *service);
+CamelSettings * camel_service_ref_settings (CamelService *service);
void camel_service_set_settings (CamelService *service,
CamelSettings *settings);
const gchar * camel_service_get_uid (CamelService *service);
service = CAMEL_SERVICE (store);
session = camel_service_get_session (service);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
user = camel_network_settings_dup_user (network_settings);
+ g_object_unref (settings);
+
if (camel_imap_store_readline (store, &respbuf, cancellable, error) < 0) {
g_static_rec_mutex_unlock (&store->command_and_response_lock);
type = CAMEL_IMAP_RESPONSE_ERROR;
CamelFolder *folder;
CamelStore *parent_store;
const gchar *full_name;
- const gchar *host;
- const gchar *user;
gchar *description;
+ gchar *host;
+ gchar *user;
folder = CAMEL_FOLDER (object);
full_name = camel_folder_get_full_name (folder);
parent_store = camel_folder_get_parent_store (folder);
service = CAMEL_SERVICE (parent_store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
- host = camel_network_settings_get_host (network_settings);
- user = camel_network_settings_get_user (network_settings);
+ host = camel_network_settings_dup_host (network_settings);
+ user = camel_network_settings_dup_user (network_settings);
+
+ g_object_unref (settings);
description = g_strdup_printf (
"%s@%s:%s", user, host, full_name);
camel_folder_set_description (folder, description);
g_free (description);
+
+ g_free (host);
+ g_free (user);
}
static void
}
service = CAMEL_SERVICE (parent);
- settings = camel_service_get_settings (service);
+ settings = camel_service_ref_settings (service);
g_object_get (
settings,
g_free (trash_path);
}
+ g_object_unref (settings);
+
imap_folder->search = camel_imap_search_new (folder_dir);
camel_store_summary_connect_folder_summary (
g_return_val_if_fail (CAMEL_IS_STORE (store), FALSE);
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
+ g_object_unref (settings);
+
is_google =
(host != NULL) && (
host_ends_with (host, "gmail.com") ||
is_gmail = is_google_account (parent_store);
service = CAMEL_SERVICE (parent_store);
- settings = camel_service_get_settings (service);
if (folder->permanent_flags == 0 || !camel_offline_store_get_online (CAMEL_OFFLINE_STORE (store))) {
if (expunge) {
camel_folder_sort_uids (folder, summary);
max = summary->len;
+ settings = camel_service_ref_settings (service);
+
/* deleted_uids is NULL when not using real trash */
folder_path = camel_imap_settings_dup_real_trash_path (
CAMEL_IMAP_SETTINGS (settings));
}
g_free (folder_path);
- if (real_trash)
- deleted_uids = g_ptr_array_new ();
-
/* junked_uids is NULL when not using real junk */
folder_path = camel_imap_settings_dup_real_junk_path (
CAMEL_IMAP_SETTINGS (settings));
}
g_free (folder_path);
+ g_object_unref (settings);
+
+ if (real_trash)
+ deleted_uids = g_ptr_array_new ();
+
if (real_junk)
junked_uids = g_ptr_array_new ();
return FALSE;
service = CAMEL_SERVICE (parent_store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
trash_path = camel_imap_settings_dup_real_trash_path (
CAMEL_IMAP_SETTINGS (settings));
+ g_object_unref (settings);
+
mark_moved = is_google_account (parent_store) && trash_path != NULL;
full_name = camel_folder_get_full_name (destination);
parent_store = camel_folder_get_parent_store (folder);
store = CAMEL_IMAP_STORE (parent_store);
service = CAMEL_SERVICE (parent_store);
- settings = camel_service_get_settings (service);
if (!camel_imap_store_connected (store, error))
return FALSE;
+ settings = camel_service_ref_settings (service);
+
fetch_headers = camel_imap_settings_get_fetch_headers (
CAMEL_IMAP_SETTINGS (settings));
extra_headers = camel_imap_settings_dup_fetch_headers_extra (
CAMEL_IMAP_SETTINGS (settings));
+ g_object_unref (settings);
+
if (store->server_level >= IMAP_LEVEL_IMAP4REV1) {
if (fetch_headers == CAMEL_FETCH_HEADERS_ALL)
header_spec = g_string_new ("HEADER");
* to take effect. */
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+ settings = camel_service_ref_settings (service);
imap_settings = CAMEL_IMAP_SETTINGS (settings);
real_path = camel_imap_settings_dup_real_junk_path (imap_settings);
store->flags |= CAMEL_STORE_VTRASH;
g_free (real_path);
+
+ g_object_unref (settings);
}
static void
if (tcp_stream == NULL)
return FALSE;
- settings = camel_service_get_settings (service);
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
method = camel_network_settings_get_security_method (network_settings);
+ g_object_unref (settings);
+
store->ostream = tcp_stream;
store->istream = camel_stream_buffer_new (tcp_stream, CAMEL_STREAM_BUFFER_READ);
password = camel_service_get_password (service);
provider = camel_service_get_provider (service);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
port = camel_network_settings_get_port (network_settings);
user = camel_network_settings_dup_user (network_settings);
+ g_object_unref (settings);
+
camel_url_set_protocol (&url, provider->protocol);
camel_url_set_host (&url, host);
camel_url_set_port (&url, port);
gboolean use_shell_command;
gboolean success;
- settings = camel_service_get_settings (service);
+ settings = camel_service_ref_settings (service);
+
shell_command = camel_imap_settings_dup_shell_command (
CAMEL_IMAP_SETTINGS (settings));
use_shell_command = camel_imap_settings_get_use_shell_command (
CAMEL_IMAP_SETTINGS (settings));
+ g_object_unref (settings);
+
#ifndef G_OS_WIN32
if (use_shell_command && shell_command != NULL)
success = connect_to_server_process (
gboolean success = TRUE;
session = camel_service_get_session (service);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
mechanism = camel_network_settings_dup_auth_mechanism (network_settings);
+ g_object_unref (settings);
+
if (store->preauthed) {
if (camel_verbose_debug)
fprintf(stderr, "Server %s has preauthenticated us.\n",
gchar *user;
gchar *name;
- settings = camel_service_get_settings (service);
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
user = camel_network_settings_dup_user (network_settings);
+ g_object_unref (settings);
+
if (brief)
name = g_strdup_printf (
_("IMAP server %s"), host);
const gchar *namespace;
GError *local_error = NULL;
- settings = camel_service_get_settings (service);
- imap_settings = CAMEL_IMAP_SETTINGS (settings);
-
if (!camel_offline_store_get_online (CAMEL_OFFLINE_STORE (store)))
return TRUE;
return FALSE;
}
+ settings = camel_service_ref_settings (service);
+ imap_settings = CAMEL_IMAP_SETTINGS (settings);
+
/* Get namespace and hierarchy separator */
if (store->capabilities & IMAP_CAPABILITY_NAMESPACE) {
struct _namespaces *namespaces;
}
done:
+ g_object_unref (settings);
+
/* save any changes we had */
camel_store_summary_save ((CamelStoreSummary *) store->summary);
CamelSettings *settings;
CamelImapSettings *imap_settings;
- settings = camel_service_get_settings (service);
- imap_settings = CAMEL_IMAP_SETTINGS (settings);
-
if (camel_offline_store_get_online (CAMEL_OFFLINE_STORE (store)) && clean) {
CamelImapResponse *response;
g_hash_table_remove_all (store->known_alerts);
+ settings = camel_service_ref_settings (service);
+ imap_settings = CAMEL_IMAP_SETTINGS (settings);
+
if (camel_imap_settings_get_use_namespace (imap_settings))
camel_imap_settings_set_namespace (imap_settings, NULL);
+ g_object_unref (settings);
+
return TRUE;
}
gchar *user;
password = camel_service_get_password (service);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
user = camel_network_settings_dup_user (network_settings);
+ g_object_unref (settings);
+
if (user == NULL) {
g_set_error_literal (
error, CAMEL_SERVICE_ERROR,
gchar *trash_path;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
user_cache_dir = camel_service_get_user_cache_dir (service);
+ settings = camel_service_ref_settings (service);
+
trash_path = camel_imap_settings_dup_real_trash_path (
CAMEL_IMAP_SETTINGS (settings));
if (trash_path != NULL) {
}
g_free (trash_path);
+ g_object_unref (settings);
+
if (folder)
return folder;
gchar *junk_path;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
user_cache_dir = camel_service_get_user_cache_dir (service);
+ settings = camel_service_ref_settings (service);
+
junk_path = camel_imap_settings_dup_real_junk_path (
CAMEL_IMAP_SETTINGS (settings));
if (junk_path != NULL) {
}
g_free (junk_path);
+ g_object_unref (settings);
+
if (folder)
return folder;
gboolean success = TRUE;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
user_cache_dir = camel_service_get_user_cache_dir (service);
+ settings = camel_service_ref_settings (service);
+
use_subscriptions = camel_imap_settings_get_use_subscriptions (
CAMEL_IMAP_SETTINGS (settings));
+ g_object_unref (settings);
+
if (!camel_imap_store_connected (imap_store, error)) {
success = FALSE;
goto fail;
gchar *namespace;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
namespace = camel_imap_settings_dup_namespace (
CAMEL_IMAP_SETTINGS (settings));
+ g_object_unref (settings);
+
camel_operation_push_message (cancellable,
_("Retrieving list of folders at '%s'"),
camel_service_get_display_name (service));
printf("get folder info offline\n");
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
use_subscriptions = camel_imap_settings_get_use_subscriptions (
CAMEL_IMAP_SETTINGS (settings));
junk_path = camel_imap_settings_dup_real_junk_path (
CAMEL_IMAP_SETTINGS (settings));
+ trash_path = camel_imap_settings_dup_real_trash_path (
+ CAMEL_IMAP_SETTINGS (settings));
+
+ g_object_unref (settings);
+
/* So we can safely compare strings. */
if (junk_path == NULL)
junk_path = g_strdup ("");
- trash_path = camel_imap_settings_dup_real_trash_path (
- CAMEL_IMAP_SETTINGS (settings));
-
/* So we can safely compare strings. */
if (trash_path == NULL)
trash_path = g_strdup ("");
GError *local_error = NULL;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
check_all = camel_imap_settings_get_check_all (
CAMEL_IMAP_SETTINGS (settings));
check_subscribed = camel_imap_settings_get_check_subscribed (
CAMEL_IMAP_SETTINGS (settings));
+ g_object_unref (settings);
+
subscribed = ((info->flags & CAMEL_FOLDER_SUBSCRIBED) != 0);
res = CAMEL_STORE_CLASS (camel_imap_store_parent_class)->
store = camel_folder_get_parent_store (CAMEL_FOLDER (imap_folder));
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
sync_offline =
camel_offline_settings_get_stay_synchronized (
camel_offline_folder_get_offline_sync (
CAMEL_OFFLINE_FOLDER (imap_folder));
+ g_object_unref (settings);
+
imap_wrapper = g_object_new (CAMEL_TYPE_IMAP_WRAPPER, NULL);
camel_data_wrapper_set_mime_type_field (CAMEL_DATA_WRAPPER (imap_wrapper), type);
((CamelDataWrapper *) imap_wrapper)->offline = !sync_offline;
CamelFolder *folder;
CamelStore *parent_store;
const gchar *full_name;
- const gchar *root_path;
const gchar *tmp;
gchar *description;
+ gchar *root_path;
gchar *path;
folder = CAMEL_FOLDER (object);
service = CAMEL_SERVICE (parent_store);
provider = camel_service_get_provider (service);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
- root_path = camel_local_settings_get_path (local_settings);
+ root_path = camel_local_settings_dup_path (local_settings);
+
+ g_object_unref (settings);
if (root_path == NULL)
return;
camel_folder_set_description (folder, description);
g_free (description);
+ g_free (root_path);
g_free (path);
}
CamelLocalStore *ls;
CamelStore *parent_store;
const gchar *full_name;
- const gchar *path;
gboolean need_summary_check;
folder = CAMEL_FOLDER (lf);
parent_store = camel_folder_get_parent_store (folder);
service = CAMEL_SERVICE (parent_store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
- path = camel_local_settings_get_path (local_settings);
+ lf->base_path = camel_local_settings_dup_path (local_settings);
+
+ g_object_unref (settings);
ls = CAMEL_LOCAL_STORE (parent_store);
need_summary_check = camel_local_store_get_need_summary_check (ls);
- lf->base_path = g_strdup (path);
-
lf->folder_path = camel_local_store_get_full_path (ls, full_name);
lf->index_path = camel_local_store_get_meta_path(ls, full_name, ".ibex");
statepath = camel_local_store_get_meta_path(ls, full_name, ".cmeta");
gchar *path;
gchar *name;
- settings = camel_service_get_settings (service);
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
+ g_object_unref (settings);
+
if (brief)
name = g_strdup (path);
else
gchar *path;
service = CAMEL_SERVICE (store);
- settings= camel_service_get_settings (service);
+
+ settings= camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
+ g_object_unref (settings);
+
if (!g_path_is_absolute (path)) {
g_set_error (
error, CAMEL_STORE_ERROR,
struct stat st;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
+ g_object_unref (settings);
+
/* This is a pretty hacky version of create folder, but should basically work */
if (!g_path_is_absolute (path)) {
gboolean success = TRUE;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
+ g_object_unref (settings);
+
/* remove metadata only */
name = g_build_filename (path, folder_name, NULL);
str = g_strdup_printf ("%s.ibex", name);
gboolean success = TRUE;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
+ g_object_unref (settings);
+
old_basename = g_strdup_printf ("%s.ibex", old);
new_basename = g_strdup_printf ("%s.ibex", new);
gchar *path;
service = CAMEL_SERVICE (ls);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
+ g_object_unref (settings);
+
filename = g_build_filename (path, full_name, NULL);
g_free (path);
gchar *path;
service = CAMEL_SERVICE (ls);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
+ g_object_unref (settings);
+
basename = g_strconcat (full_name, ext, NULL);
filename = g_build_filename (path, basename, NULL);
g_free (basename);
NULL);
service = CAMEL_SERVICE (parent_store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
filter_inbox = camel_store_settings_get_filter_inbox (
CAMEL_STORE_SETTINGS (settings));
+ g_object_unref (settings);
+
if (filter_inbox && strcmp (full_name, ".") == 0)
folder->folder_flags |= CAMEL_FOLDER_FILTER_RECENT;
/* This is a pretty hacky version of create folder, but should basically work */
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
+ g_object_unref (settings);
+
if (!g_path_is_absolute (path)) {
g_set_error (
error, CAMEL_STORE_ERROR,
CamelFolder *folder = NULL;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
+ g_object_unref (settings);
+
folder_name = md_canon_name (folder_name);
dir_name = maildir_full_name_to_dir_name (folder_name);
}
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
+ g_object_unref (settings);
+
/* maildir++ directory names start with a '.' */
dir_name = maildir_full_name_to_dir_name (folder_name);
name = g_build_filename (path, dir_name, NULL);
gchar *root;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
root = camel_local_settings_dup_path (local_settings);
+ g_object_unref (settings);
+
/* This should be fast enough not to have to test for INFO_FAST */
dir_name = maildir_full_name_to_dir_name (fi->full_name);
struct stat st;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
+
+ g_object_unref (settings);
+
g_return_val_if_fail (path != NULL, NULL);
fi = camel_folder_info_new ();
gchar *path;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
+
+ g_object_unref (settings);
+
g_return_val_if_fail (path != NULL, -1);
folders = g_ptr_array_new ();
gchar *path;
service = CAMEL_SERVICE (ls);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
+ g_object_unref (settings);
+
dir_name = maildir_full_name_to_dir_name (full_name);
filename = g_build_filename (path, dir_name, NULL);
g_free (dir_name);
gchar *tmp;
service = CAMEL_SERVICE (ls);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
+ g_object_unref (settings);
+
dir_name = maildir_full_name_to_dir_name (full_name);
tmp = g_build_filename (path, dir_name, NULL);
filename = g_strconcat (tmp, ext, NULL);
gint res = -1;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
+ g_object_unref (settings);
+
visited = g_hash_table_new (scan_hash, scan_equal);
sn = g_malloc0 (sizeof (*sn));
struct stat st;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
root_path = camel_local_settings_dup_path (local_settings);
+ g_object_unref (settings);
+
local_store = CAMEL_LOCAL_STORE (store);
if (!g_path_is_absolute (root_path)) {
const gchar *cp;
service = CAMEL_SERVICE (ls);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
root_path = camel_local_settings_dup_path (local_settings);
+
+ g_object_unref (settings);
+
g_return_val_if_fail (root_path != NULL, NULL);
full_path = g_string_new (root_path);
gchar *path;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
+ g_object_unref (settings);
+
/* This should be fast enough not to have to test for INFO_FAST */
/* We could: if we have no folder, and FAST isn't specified,
return NULL;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
use_dot_folders = camel_mh_settings_get_use_dot_folders (
CAMEL_MH_SETTINGS (settings));
+ g_object_unref (settings);
+
name = g_build_filename (path, folder_name, NULL);
if (g_stat (name, &st) == -1) {
gchar *path;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
use_dot_folders = camel_mh_settings_get_use_dot_folders (
CAMEL_MH_SETTINGS (settings));
+ g_object_unref (settings);
+
/* use .folders if we are supposed to */
if (use_dot_folders) {
folders_scan (
gchar *path;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
use_dot_folders = camel_mh_settings_get_use_dot_folders (
CAMEL_MH_SETTINGS (settings));
+ g_object_unref (settings);
+
/* remove folder directory - will fail if not empty */
name = g_build_filename (path, folder_name, NULL);
if (rmdir (name) == -1) {
gchar *path;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
use_dot_folders = camel_mh_settings_get_use_dot_folders (
CAMEL_MH_SETTINGS (settings));
+ g_object_unref (settings);
+
/* Chain up to parent's rename_folder() method. */
store_class = CAMEL_STORE_CLASS (camel_mh_store_parent_class);
success = store_class->rename_folder_sync (
gchar *basename;
service = CAMEL_SERVICE (parent_store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
filter_inbox = camel_store_settings_get_filter_inbox (
CAMEL_STORE_SETTINGS (settings));
use_xstatus_headers = camel_spool_settings_get_use_xstatus_headers (
CAMEL_SPOOL_SETTINGS (settings));
+ g_object_unref (settings);
+
basename = g_path_get_basename (full_name);
folder = g_object_new (
gchar *path;
service = CAMEL_SERVICE (spool_store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
+ g_object_unref (settings);
+
/* Check the path for validity while we have the opportunity. */
if (path == NULL || *path != '/') {
gchar *path;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
+ g_object_unref (settings);
+
visited = g_hash_table_new (inode_hash, inode_equal);
if (scan_dir (
gchar *path;
spool_store = CAMEL_SPOOL_STORE (service);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
+ g_object_unref (settings);
+
if (brief)
return path;
return NULL;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
+ g_object_unref (settings);
+
/* we only support an 'INBOX' in mbox mode */
if (type == CAMEL_SPOOL_STORE_MBOX) {
if (strcmp(folder_name, "INBOX") != 0) {
gchar *path;
service = CAMEL_SERVICE (local_store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
+ g_object_unref (settings);
+
spool_store = CAMEL_SPOOL_STORE (local_store);
switch (spool_store_get_type (spool_store, NULL)) {
gboolean filter_all;
service = CAMEL_SERVICE (parent);
- settings = camel_service_get_settings (service);
user_cache_dir = camel_service_get_user_cache_dir (service);
+ settings = camel_service_ref_settings (service);
+
g_object_get (
settings,
"filter-all", &filter_all,
NULL);
+ g_object_unref (settings);
+
folder = g_object_new (
CAMEL_TYPE_NNTP_FOLDER,
"display-name", folder_name,
gchar *user;
session = camel_service_get_session (service);
- settings = camel_service_get_settings (service);
user_cache_dir = camel_service_get_user_cache_dir (service);
+ settings = camel_service_ref_settings (service);
+
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
user = camel_network_settings_dup_user (network_settings);
+ g_object_unref (settings);
+
tcp_stream = camel_network_service_connect_sync (
CAMEL_NETWORK_SERVICE (service), cancellable, error);
gchar *host;
gchar *name;
- settings = camel_service_get_settings (service);
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
+ g_object_unref (settings);
+
if (brief)
name = g_strdup_printf ("%s", host);
else
store = CAMEL_NNTP_STORE (service);
password = camel_service_get_password (service);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
user = camel_network_settings_dup_user (network_settings);
+ g_object_unref (settings);
+
if (user == NULL) {
g_set_error_literal (
error, CAMEL_SERVICE_ERROR,
return NULL;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
short_folder_names = camel_nntp_settings_get_short_folder_names (
CAMEL_NNTP_SETTINGS (settings));
+ g_object_unref (settings);
+
for (i = 0; i < camel_store_summary_count ((CamelStoreSummary *) store->summary); i++) {
si = camel_store_summary_index ((CamelStoreSummary *) store->summary, i);
if (si == NULL)
gint toplen = strlen (top);
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
folder_hierarchy_relative =
camel_nntp_settings_get_folder_hierarchy_relative (
CAMEL_NNTP_SETTINGS (settings));
+ g_object_unref (settings);
+
known = g_hash_table_new (g_str_hash, g_str_equal);
for (i = 0; (si = camel_store_summary_index ((CamelStoreSummary *) store->summary, i)); i++) {
gboolean success = TRUE;
service = CAMEL_SERVICE (subscribable);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
short_folder_names = camel_nntp_settings_get_short_folder_names (
CAMEL_NNTP_SETTINGS (settings));
+ g_object_unref (settings);
+
si = camel_store_summary_path (CAMEL_STORE_SUMMARY (nntp_store->summary), folder_name);
if (!si) {
g_set_error (
gboolean success = TRUE;
service = CAMEL_SERVICE (subscribable);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
short_folder_names = camel_nntp_settings_get_short_folder_names (
CAMEL_NNTP_SETTINGS (settings));
+ g_object_unref (settings);
+
fitem = camel_store_summary_path (CAMEL_STORE_SUMMARY (nntp_store->summary), folder_name);
if (!fitem) {
(camel_folder_summary_get_folder (s)->folder_flags & CAMEL_FOLDER_FILTER_RECENT) != 0;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
+ g_object_unref (settings);
+
camel_operation_push_message (
cancellable, _("%s: Scanning new messages"), host);
mp = camel_mime_parser_new ();
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
+ g_object_unref (settings);
+
camel_operation_push_message (
cancellable, _("%s: Scanning new messages"), host);
pop3_store = CAMEL_POP3_STORE (parent_store);
pop3_folder = (CamelPOP3Folder *) folder;
service = (CamelService *) parent_store;
- settings = camel_service_get_settings (service);
- batch_fetch_count = camel_pop3_settings_get_batch_fetch_count (CAMEL_POP3_SETTINGS (settings));
+ settings = camel_service_ref_settings (service);
+
+ batch_fetch_count = camel_pop3_settings_get_batch_fetch_count (
+ CAMEL_POP3_SETTINGS (settings));
+
+ g_object_unref (settings);
do {
ret = camel_pop3_stream_line (stream, &line, &len, cancellable, NULL);
if (pop3_folder->mobile_mode && pop3_folder->uids->len) {
gint y = 0;
gboolean save_uid = FALSE;
- CamelNetworkSettings *network_settings;
- const gchar *host;
-
- network_settings = CAMEL_NETWORK_SETTINGS (settings);
- host = camel_network_settings_get_host (network_settings);
-
- d(printf("*********** Mobile mode *************\n"));
- d(printf("Total Count: %s: %d\n", host, pop3_folder->uids->len));
/* Preserve the first message's ID */
fi = pop3_folder->uids->pdata[0];
pop3_store = CAMEL_POP3_STORE (parent_store);
service = CAMEL_SERVICE (parent_store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
g_object_get (
settings,
"auto-fetch", &auto_fetch,
NULL);
+ g_object_unref (settings);
+
fi = g_hash_table_lookup (pop3_folder->uids_fi, uid);
if (fi == NULL) {
g_set_error (
parent_store = camel_folder_get_parent_store (folder);
service = (CamelService *) parent_store;
- settings = camel_service_get_settings (service);
- batch_fetch_count = camel_pop3_settings_get_batch_fetch_count (CAMEL_POP3_SETTINGS (settings));
+ settings = camel_service_ref_settings (service);
+
+ batch_fetch_count = camel_pop3_settings_get_batch_fetch_count (
+ CAMEL_POP3_SETTINGS (settings));
+
+ g_object_unref (settings);
old_len = pop3_folder->uids->len;
pop3_store = CAMEL_POP3_STORE (parent_store);
service = CAMEL_SERVICE (parent_store);
- settings = camel_service_get_settings (service);
is_online = camel_service_get_connection_status (service) == CAMEL_SERVICE_CONNECTED;
+ settings = camel_service_ref_settings (service);
+
g_object_get (
settings,
"delete-after-days", &delete_after_days,
"keep-on-server", &keep_on_server,
NULL);
+ g_object_unref (settings);
+
if (is_online && delete_after_days > 0 && !expunge) {
camel_operation_push_message (
cancellable, _("Expunging old messages"));
CamelPOP3Folder *pop3_folder;
service = CAMEL_SERVICE (parent);
- settings = camel_service_get_settings (service);
d(printf("opening pop3 INBOX folder\n"));
"full-name", "inbox", "display-name", "inbox",
"parent-store", parent, NULL);
+ settings = camel_service_ref_settings (service);
+
pop3_folder = (CamelPOP3Folder *) folder;
- pop3_folder->mobile_mode = camel_pop3_settings_get_mobile_mode (CAMEL_POP3_SETTINGS (settings));
+ pop3_folder->mobile_mode = camel_pop3_settings_get_mobile_mode (
+ CAMEL_POP3_SETTINGS (settings));
+
+ g_object_unref (settings);
pop3_folder->fetch_more = 0;
if (pop3_folder->mobile_mode) {
guint32 flags = 0;
gint ret;
- settings = camel_service_get_settings (service);
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
+ method = camel_network_settings_get_security_method (network_settings);
+
+ disable_extensions = camel_pop3_settings_get_disable_extensions (
+ CAMEL_POP3_SETTINGS (settings));
+
+ g_object_unref (settings);
tcp_stream = camel_network_service_connect_sync (
CAMEL_NETWORK_SERVICE (service), cancellable, error);
goto exit;
}
- disable_extensions = camel_pop3_settings_get_disable_extensions (
- CAMEL_POP3_SETTINGS (settings));
-
if (disable_extensions)
flags |= CAMEL_POP3_ENGINE_DISABLE_EXTENSIONS;
goto exit;
}
- g_object_get (settings, "security-method", &method, NULL);
-
if (method != CAMEL_NETWORK_SECURITY_METHOD_STARTTLS_ON_STANDARD_PORT) {
g_object_unref (tcp_stream);
goto exit;
gint ret;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
+ g_object_unref (settings);
+
sasl = camel_sasl_new ("pop", mechanism, service);
if (sasl == NULL) {
g_set_error (
gchar *user;
gchar *name;
- settings = camel_service_get_settings (service);
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
user = camel_network_settings_dup_user (network_settings);
+ g_object_unref (settings);
+
if (brief)
name = g_strdup_printf (
_("POP3 server %s"), host);
gchar *mechanism;
session = camel_service_get_session (service);
- settings = camel_service_get_settings (service);
user_data_dir = camel_service_get_user_data_dir (service);
+ settings = camel_service_ref_settings (service);
+
mechanism = camel_network_settings_dup_auth_mechanism (
CAMEL_NETWORK_SETTINGS (settings));
+ g_object_unref (settings);
+
if (!camel_session_get_online (session)) {
g_set_error (
error, CAMEL_SERVICE_ERROR,
gint status;
password = camel_service_get_password (service);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
user = camel_network_settings_dup_user (network_settings);
+ g_object_unref (settings);
+
if (mechanism == NULL) {
if (password == NULL) {
g_set_error_literal (
return NULL;
}
- settings = camel_service_get_settings (service);
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
+ g_object_unref (settings);
+
if (connect_to_server (service, cancellable, NULL)) {
types = g_list_concat (types, g_list_copy (store->engine->auth));
pop3_store_disconnect_sync (service, TRUE, cancellable, NULL);
transport->flags = 0;
transport->authtypes = NULL;
- settings = camel_service_get_settings (service);
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
method = camel_network_settings_get_security_method (network_settings);
+ g_object_unref (settings);
+
tcp_stream = camel_network_service_connect_sync (
CAMEL_NETWORK_SERVICE (service), cancellable, error);
gchar *host;
gchar *name;
- settings = camel_service_get_settings (service);
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
+ g_object_unref (settings);
+
if (brief)
name = g_strdup_printf (
_("SMTP server %s"), host);
gboolean auth_required;
gboolean success = TRUE;
- settings = camel_service_get_settings (service);
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
mechanism = camel_network_settings_dup_auth_mechanism (network_settings);
+ g_object_unref (settings);
+
/* We (probably) need to check popb4smtp before we connect ... */
if (g_strcmp0 (mechanism, "POPB4SMTP") == 0) {
GByteArray *chal;
camel_service_get_name
camel_service_get_provider
camel_service_get_session
-camel_service_get_settings
+camel_service_ref_settings
camel_service_set_settings
camel_service_get_uid
camel_service_connect_sync