switch (camel_disco_store_status (CAMEL_DISCO_STORE (parent_store))) {
case CAMEL_DISCO_STORE_ONLINE:
+ g_return_val_if_fail (disco_folder_class->expunge_uids_online != NULL, FALSE);
success = disco_folder_class->expunge_uids_online (
folder, uids, error);
CAMEL_CHECK_GERROR (
return success;
case CAMEL_DISCO_STORE_OFFLINE:
+ g_return_val_if_fail (disco_folder_class->expunge_uids_offline != NULL, FALSE);
success = disco_folder_class->expunge_uids_offline (
folder, uids, error);
CAMEL_CHECK_GERROR (
return success;
case CAMEL_DISCO_STORE_RESYNCING:
+ g_return_val_if_fail (disco_folder_class->expunge_uids_resyncing != NULL, FALSE);
success = disco_folder_class->expunge_uids_resyncing (
folder, uids, error);
CAMEL_CHECK_GERROR (
switch (camel_disco_store_status (CAMEL_DISCO_STORE (parent_store))) {
case CAMEL_DISCO_STORE_ONLINE:
+ g_return_val_if_fail (disco_folder_class->append_online != NULL, FALSE);
success = disco_folder_class->append_online (
folder, message, info,
appended_uid, cancellable, error);
return success;
case CAMEL_DISCO_STORE_OFFLINE:
+ g_return_val_if_fail (disco_folder_class->append_offline != NULL, FALSE);
success = disco_folder_class->append_offline (
folder, message, info,
appended_uid, cancellable, error);
return success;
case CAMEL_DISCO_STORE_RESYNCING:
+ g_return_val_if_fail (disco_folder_class->append_resyncing != NULL, FALSE);
success = disco_folder_class->append_resyncing (
folder, message, info,
appended_uid, cancellable, error);
return TRUE;
disco_folder_class = CAMEL_DISCO_FOLDER_GET_CLASS (folder);
+ g_return_val_if_fail (disco_folder_class->refresh_info_online != NULL, FALSE);
success = disco_folder_class->refresh_info_online (
folder, cancellable, error);
switch (camel_disco_store_status (CAMEL_DISCO_STORE (parent_store))) {
case CAMEL_DISCO_STORE_ONLINE:
+ g_return_val_if_fail (disco_folder_class->sync_online != NULL, FALSE);
success = disco_folder_class->sync_online (folder, error);
CAMEL_CHECK_GERROR (folder, sync_online, success, error);
return success;
case CAMEL_DISCO_STORE_OFFLINE:
+ g_return_val_if_fail (disco_folder_class->sync_offline != NULL, FALSE);
success = disco_folder_class->sync_offline (folder, error);
CAMEL_CHECK_GERROR (folder, sync_offline, success, error);
return success;
case CAMEL_DISCO_STORE_RESYNCING:
+ g_return_val_if_fail (disco_folder_class->sync_resyncing != NULL, FALSE);
success = disco_folder_class->sync_resyncing (folder, error);
CAMEL_CHECK_GERROR (folder, sync_resyncing, success, error);
return success;
switch (camel_disco_store_status (CAMEL_DISCO_STORE (parent_store))) {
case CAMEL_DISCO_STORE_ONLINE:
+ g_return_val_if_fail (disco_folder_class->transfer_online != NULL, FALSE);
success = disco_folder_class->transfer_online (
source, uids, dest, transferred_uids,
delete_originals, cancellable, error);
return success;
case CAMEL_DISCO_STORE_OFFLINE:
+ g_return_val_if_fail (disco_folder_class->transfer_offline != NULL, FALSE);
success = disco_folder_class->transfer_offline (
source, uids, dest, transferred_uids,
delete_originals, cancellable, error);
return success;
case CAMEL_DISCO_STORE_RESYNCING:
+ g_return_val_if_fail (disco_folder_class->transfer_resyncing != NULL, FALSE);
success = disco_folder_class->transfer_resyncing (
source, uids, dest, transferred_uids,
delete_originals, cancellable, error);
return FALSE;
}
+static gboolean
+nntp_folder_expunge_uids_offline (CamelFolder *folder, GPtrArray *uids, GError **error)
+{
+ CamelFolderChangeInfo *changes;
+ gint ii;
+
+ g_return_val_if_fail (folder != NULL, FALSE);
+ g_return_val_if_fail (CAMEL_IS_NNTP_FOLDER (folder), FALSE);
+ g_return_val_if_fail (uids != NULL, FALSE);
+ g_return_val_if_fail (folder->summary != NULL, FALSE);
+
+ /* can only remove deleted messages from a local cache */
+
+ changes = camel_folder_change_info_new ();
+ for (ii = 0; ii < uids->len; ii++) {
+ camel_folder_summary_remove_uid (folder->summary, uids->pdata[ii]);
+ camel_folder_change_info_remove_uid (changes, uids->pdata[ii]);
+ }
+
+ camel_folder_summary_save_to_db (folder->summary, NULL);
+ camel_folder_changed (folder, changes);
+ camel_folder_change_info_free (changes);
+
+ return TRUE;
+}
+
static void
camel_nntp_folder_class_init (CamelNNTPFolderClass *class)
{
disco_folder_class->transfer_resyncing = nntp_folder_transfer_message;
disco_folder_class->transfer_offline = nntp_folder_transfer_message;
disco_folder_class->refresh_info_online = nntp_folder_refresh_info_online;
+ disco_folder_class->expunge_uids_online = nntp_folder_expunge_uids_offline;
+ disco_folder_class->expunge_uids_offline = nntp_folder_expunge_uids_offline;
+ disco_folder_class->expunge_uids_resyncing = nntp_folder_expunge_uids_offline;
}
static void