[geary] Add Geary.iterate to replace Collection.SingleItem
- From: Charles Lindsay <clindsay src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [geary] Add Geary.iterate to replace Collection.SingleItem
- Date: Thu, 30 Jan 2014 02:36:16 +0000 (UTC)
commit 3af6837e717b01b25a2f464a65abd41358efa39b
Author: Charles Lindsay <chaz yorba org>
Date: Wed Jan 29 18:32:53 2014 -0800
Add Geary.iterate to replace Collection.SingleItem
This adds a way to turn lists of items into a Geary.Iterable, which then
allows you to dump results into any kind of container. This removes the
Collection.SingleItem class, which was no longer useful.
Closes: bgo #723208
po/POTFILES.in | 1 -
src/CMakeLists.txt | 1 -
.../conversation-list/conversation-list-view.vala | 2 +-
.../conversation-viewer/conversation-viewer.vala | 11 +--
src/engine/api/geary-named-flags.vala | 4 +-
src/engine/app/app-email-store.vala | 2 +-
.../app/email-store/app-fetch-operation.vala | 2 +-
src/engine/imap-db/imap-db-folder.vala | 4 +-
.../imap-engine/imap-engine-generic-account.vala | 3 +-
.../imap-engine/imap-engine-generic-folder.vala | 5 +-
.../replay-ops/imap-engine-create-email.vala | 2 +-
.../replay-ops/imap-engine-fetch-email.vala | 7 +-
src/engine/imap/api/imap-account.vala | 2 +-
src/engine/imap/api/imap-folder.vala | 10 +-
src/engine/util/util-iterable.vala | 16 ++++
src/engine/util/util-single-item.vala | 90 --------------------
16 files changed, 44 insertions(+), 118 deletions(-)
---
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 521a3d5..0044498 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -337,7 +337,6 @@ src/engine/util/util-numeric.vala
src/engine/util/util-object.vala
src/engine/util/util-reference-semantics.vala
src/engine/util/util-scheduler.vala
-src/engine/util/util-single-item.vala
src/engine/util/util-stream.vala
src/engine/util/util-string.vala
src/engine/util/util-synchronization.vala
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 4a04d92..f48b548 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -284,7 +284,6 @@ engine/util/util-numeric.vala
engine/util/util-object.vala
engine/util/util-reference-semantics.vala
engine/util/util-scheduler.vala
-engine/util/util-single-item.vala
engine/util/util-stream.vala
engine/util/util-string.vala
engine/util/util-synchronization.vala
diff --git a/src/client/conversation-list/conversation-list-view.vala
b/src/client/conversation-list/conversation-list-view.vala
index 0350216..6bc2d91 100644
--- a/src/client/conversation-list/conversation-list-view.vala
+++ b/src/client/conversation-list/conversation-list-view.vala
@@ -170,7 +170,7 @@ public class ConversationListView : Gtk.TreeView {
if (GearyApplication.instance.controller.get_selected_conversations().contains(conversation))
to_mark = GearyApplication.instance.controller.get_selected_conversations();
else
- to_mark = new Geary.Collection.SingleItem<Geary.App.Conversation>(conversation);
+ to_mark = Geary.iterate<Geary.App.Conversation>(conversation).to_array_list();
if (read_clicked) {
// Read/unread.
diff --git a/src/client/conversation-viewer/conversation-viewer.vala
b/src/client/conversation-viewer/conversation-viewer.vala
index 94375a9..1724659 100644
--- a/src/client/conversation-viewer/conversation-viewer.vala
+++ b/src/client/conversation-viewer/conversation-viewer.vala
@@ -1216,8 +1216,7 @@ public class ConversationViewer : Gtk.Box {
if (message != null && !message.load_remote_images().is_certain()) {
Geary.EmailFlags flags = new Geary.EmailFlags();
flags.add(Geary.EmailFlags.LOAD_REMOTE_IMAGES);
- mark_messages(new Geary.Collection.SingleItem<Geary.EmailIdentifier>(
- message.id), flags, null);
+ mark_messages(Geary.iterate<Geary.EmailIdentifier>(message.id).to_array_list(), flags, null);
}
}
}
@@ -1431,14 +1430,14 @@ public class ConversationViewer : Gtk.Box {
private void on_mark_read_message(Geary.Email message) {
Geary.EmailFlags flags = new Geary.EmailFlags();
flags.add(Geary.EmailFlags.UNREAD);
- mark_messages(new Geary.Collection.SingleItem<Geary.EmailIdentifier>(message.id), null, flags);
+ mark_messages(Geary.iterate<Geary.EmailIdentifier>(message.id).to_array_list(), null, flags);
mark_manual_read(message.id);
}
private void on_mark_unread_message(Geary.Email message) {
Geary.EmailFlags flags = new Geary.EmailFlags();
flags.add(Geary.EmailFlags.UNREAD);
- mark_messages(new Geary.Collection.SingleItem<Geary.EmailIdentifier>(message.id), flags, null);
+ mark_messages(Geary.iterate<Geary.EmailIdentifier>(message.id).to_array_list(), flags, null);
mark_manual_read(message.id);
}
@@ -1488,13 +1487,13 @@ public class ConversationViewer : Gtk.Box {
private void flag_message(Geary.Email email) {
Geary.EmailFlags flags = new Geary.EmailFlags();
flags.add(Geary.EmailFlags.FLAGGED);
- mark_messages(new Geary.Collection.SingleItem<Geary.EmailIdentifier>(email.id), flags, null);
+ mark_messages(Geary.iterate<Geary.EmailIdentifier>(email.id).to_array_list(), flags, null);
}
private void unflag_message(Geary.Email email) {
Geary.EmailFlags flags = new Geary.EmailFlags();
flags.add(Geary.EmailFlags.FLAGGED);
- mark_messages(new Geary.Collection.SingleItem<Geary.EmailIdentifier>(email.id), null, flags);
+ mark_messages(Geary.iterate<Geary.EmailIdentifier>(email.id).to_array_list(), null, flags);
}
private void show_attachment_menu(Geary.Email email, Geary.Attachment attachment) {
diff --git a/src/engine/api/geary-named-flags.vala b/src/engine/api/geary-named-flags.vala
index ed4e93e..2932d39 100644
--- a/src/engine/api/geary-named-flags.vala
+++ b/src/engine/api/geary-named-flags.vala
@@ -44,7 +44,7 @@ public class Geary.NamedFlags : BaseObject, Gee.Hashable<Geary.NamedFlags> {
public virtual void add(NamedFlag flag) {
if (!list.contains(flag)) {
list.add(flag);
- notify_added(new Collection.SingleItem<NamedFlag>(flag));
+ notify_added(Geary.iterate<NamedFlag>(flag).to_array_list());
}
}
@@ -60,7 +60,7 @@ public class Geary.NamedFlags : BaseObject, Gee.Hashable<Geary.NamedFlags> {
public virtual bool remove(NamedFlag flag) {
bool removed = list.remove(flag);
if (removed)
- notify_removed(new Collection.SingleItem<NamedFlag>(flag));
+ notify_removed(Geary.iterate<NamedFlag>(flag).to_array_list());
return removed;
}
diff --git a/src/engine/app/app-email-store.vala b/src/engine/app/app-email-store.vala
index b134d31..02288d0 100644
--- a/src/engine/app/app-email-store.vala
+++ b/src/engine/app/app-email-store.vala
@@ -80,7 +80,7 @@ public class Geary.App.EmailStore : BaseObject {
Cancellable? cancellable = null) throws Error {
FetchOperation op = new Geary.App.FetchOperation(required_fields, flags);
yield do_folder_operation_async(op,
- new Geary.Collection.SingleItem<Geary.EmailIdentifier>(email_id), cancellable);
+ Geary.iterate<Geary.EmailIdentifier>(email_id).to_array_list(), cancellable);
if (op.result == null)
throw new EngineError.NOT_FOUND("Couldn't fetch email ID %s", email_id.to_string());
diff --git a/src/engine/app/email-store/app-fetch-operation.vala
b/src/engine/app/email-store/app-fetch-operation.vala
index b6df8c9..cb642a6 100644
--- a/src/engine/app/email-store/app-fetch-operation.vala
+++ b/src/engine/app/email-store/app-fetch-operation.vala
@@ -25,6 +25,6 @@ private class Geary.App.FetchOperation : Geary.App.AsyncFolderOperation {
result = yield folder.fetch_email_async(
id, required_fields, flags, cancellable);
- return new Geary.Collection.SingleItem<Geary.EmailIdentifier>(id);
+ return Geary.iterate<Geary.EmailIdentifier>(id).to_array_list();
}
}
diff --git a/src/engine/imap-db/imap-db-folder.vala b/src/engine/imap-db/imap-db-folder.vala
index 9bbc11f..155dad4 100644
--- a/src/engine/imap-db/imap-db-folder.vala
+++ b/src/engine/imap-db/imap-db-folder.vala
@@ -876,8 +876,8 @@ private class Geary.ImapDB.Folder : BaseObject, Geary.ReferenceSemantics {
}
// Check to see if message is unread (this only affects non-marked emails.)
- if (do_get_unread_count_for_ids(cx, new Geary.Collection.SingleItem
- <ImapDB.EmailIdentifier>(id), cancellable) > 0) {
+ if (do_get_unread_count_for_ids(cx,
+ Geary.iterate<ImapDB.EmailIdentifier>(id).to_array_list(), cancellable) > 0) {
do_add_to_unread_count(cx, -1, cancellable);
was_unread = true;
}
diff --git a/src/engine/imap-engine/imap-engine-generic-account.vala
b/src/engine/imap-engine/imap-engine-generic-account.vala
index 17c6393..29d227a 100644
--- a/src/engine/imap-engine/imap-engine-generic-account.vala
+++ b/src/engine/imap-engine/imap-engine-generic-account.vala
@@ -209,7 +209,8 @@ private abstract class Geary.ImapEngine.GenericAccount : Geary.AbstractAccount {
}
private GenericFolder build_folder(ImapDB.Folder local_folder) {
- return Geary.Collection.get_first(build_folders(new
Collection.SingleItem<ImapDB.Folder>(local_folder)));
+ return Geary.Collection.get_first(build_folders(
+ Geary.iterate<ImapDB.Folder>(local_folder).to_array_list()));
}
private Gee.Collection<GenericFolder> build_folders(Gee.Collection<ImapDB.Folder> local_folders) {
diff --git a/src/engine/imap-engine/imap-engine-generic-folder.vala
b/src/engine/imap-engine/imap-engine-generic-folder.vala
index 57ad377..9af8b1d 100644
--- a/src/engine/imap-engine/imap-engine-generic-folder.vala
+++ b/src/engine/imap-engine/imap-engine-generic-folder.vala
@@ -936,7 +936,8 @@ private class Geary.ImapEngine.GenericFolder : Geary.AbstractFolder, Geary.Folde
}
// Notify queued replay operations that the email has been removed (by EmailIdentifier)
- replay_queue.notify_remote_removed_ids(new
Collection.SingleItem<ImapDB.EmailIdentifier>(owned_id));
+ replay_queue.notify_remote_removed_ids(
+ Geary.iterate<ImapDB.EmailIdentifier>(owned_id).to_array_list());
} else {
debug("%s do_replay_removed_message: remote_position=%d unknown in local store "
+ "(reported_remote_count=%d local_position=%d local_count=%d)",
@@ -964,7 +965,7 @@ private class Geary.ImapEngine.GenericFolder : Geary.AbstractFolder, Geary.Folde
// notify of change
if (!marked && owned_id != null)
- notify_email_removed(new Collection.SingleItem<Geary.EmailIdentifier>(owned_id));
+ notify_email_removed(Geary.iterate<Geary.EmailIdentifier>(owned_id).to_array_list());
if (!marked)
notify_email_count_changed(reported_remote_count, CountChangeReason.REMOVED);
diff --git a/src/engine/imap-engine/replay-ops/imap-engine-create-email.vala
b/src/engine/imap-engine/replay-ops/imap-engine-create-email.vala
index 6bb4741..4419aa0 100644
--- a/src/engine/imap-engine/replay-ops/imap-engine-create-email.vala
+++ b/src/engine/imap-engine/replay-ops/imap-engine-create-email.vala
@@ -65,7 +65,7 @@ private class Geary.ImapEngine.CreateEmail : Geary.ImapEngine.SendReplayOperatio
// TODO: need to prevent gaps that may occur here
Geary.Email created = new Geary.Email(created_id);
Gee.Map<Geary.Email, bool> results = yield engine.local_folder.create_or_merge_email_async(
- new Collection.SingleItem<Geary.Email>(created), cancellable);
+ Geary.iterate<Geary.Email>(created).to_array_list(), cancellable);
if (results.size > 0)
created_id = Collection.get_first<Geary.Email>(results.keys).id;
else
diff --git a/src/engine/imap-engine/replay-ops/imap-engine-fetch-email.vala
b/src/engine/imap-engine/replay-ops/imap-engine-fetch-email.vala
index cfad9fa..02c0970 100644
--- a/src/engine/imap-engine/replay-ops/imap-engine-fetch-email.vala
+++ b/src/engine/imap-engine/replay-ops/imap-engine-fetch-email.vala
@@ -102,12 +102,13 @@ private class Geary.ImapEngine.FetchEmail : Geary.ImapEngine.SendReplayOperation
assert(email != null);
Gee.Map<Geary.Email, bool> created_or_merged =
- yield engine.local_folder.create_or_merge_email_async(new
Collection.SingleItem<Geary.Email>(email),
- cancellable);
+ yield engine.local_folder.create_or_merge_email_async(
+ Geary.iterate<Geary.Email>(email).to_array_list(), cancellable);
// true means created
if (created_or_merged.get(email)) {
- Gee.Collection<Geary.EmailIdentifier> ids = new
Collection.SingleItem<Geary.EmailIdentifier>(email.id);
+ Gee.Collection<Geary.EmailIdentifier> ids
+ = Geary.iterate<Geary.EmailIdentifier>(email.id).to_array_list();
engine.notify_email_inserted(ids);
engine.notify_email_locally_inserted(ids);
}
diff --git a/src/engine/imap/api/imap-account.vala b/src/engine/imap/api/imap-account.vala
index 691d8d9..82aa491 100644
--- a/src/engine/imap/api/imap-account.vala
+++ b/src/engine/imap/api/imap-account.vala
@@ -350,7 +350,7 @@ private class Geary.Imap.Account : BaseObject {
Gee.List<MailboxInformation>? list_results, Gee.List<StatusData>? status_results,
Cancellable? cancellable) throws Error {
Gee.Map<Command, StatusResponse> responses = yield send_multiple_async(
- new Geary.Collection.SingleItem<Command>(cmd), list_results, status_results,
+ Geary.iterate<Command>(cmd).to_array_list(), list_results, status_results,
cancellable);
assert(responses.size == 1);
diff --git a/src/engine/imap/api/imap-folder.vala b/src/engine/imap/api/imap-folder.vala
index 66edbcd..4a41df9 100644
--- a/src/engine/imap/api/imap-folder.vala
+++ b/src/engine/imap/api/imap-folder.vala
@@ -337,7 +337,7 @@ private class Geary.Imap.Folder : BaseObject {
FetchCommand cmd = new FetchCommand.data_type(msg_set, FetchDataSpecifier.UID);
Gee.HashMap<SequenceNumber, FetchedData>? fetched;
- yield exec_commands_async(new Collection.SingleItem<Command>(cmd), out fetched, null,
+ yield exec_commands_async(Geary.iterate<Command>(cmd).to_array_list(), out fetched, null,
cancellable);
if (fetched == null || fetched.size == 0)
return null;
@@ -550,9 +550,9 @@ private class Geary.Imap.Folder : BaseObject {
CopyCommand cmd = new CopyCommand(msg_set,
new MailboxSpecifier.from_folder_path(destination, null));
- Gee.Collection<Command> cmds = new Collection.SingleItem<Command>(cmd);
- yield exec_commands_async(cmds, null, null, cancellable);
+ yield exec_commands_async(Geary.iterate<Command>(cmd).to_array_list(), null,
+ null, cancellable);
}
// TODO: Support MOVE extension
@@ -888,7 +888,7 @@ private class Geary.Imap.Folder : BaseObject {
Imap.EmailFlags imap_flags = Imap.EmailFlags.from_api_email_flags(flags);
msg_flags = imap_flags.message_flags;
} else {
- msg_flags = new MessageFlags(new Geary.Collection.SingleItem<MessageFlag>(MessageFlag.SEEN));
+ msg_flags = new MessageFlags(Geary.iterate<MessageFlag>(MessageFlag.SEEN).to_array_list());
}
InternalDate? internaldate = null;
@@ -899,7 +899,7 @@ private class Geary.Imap.Folder : BaseObject {
msg_flags, internaldate, message.get_network_buffer(false));
Gee.Map<Command, StatusResponse> responses = yield exec_commands_async(
- new Collection.SingleItem<AppendCommand>(cmd), null, null, null);
+ Geary.iterate<AppendCommand>(cmd).to_array_list(), null, null, null);
// Grab the response and parse out the UID, if available.
StatusResponse response = responses.get(cmd);
diff --git a/src/engine/util/util-iterable.vala b/src/engine/util/util-iterable.vala
index 4eb004a..4407c92 100644
--- a/src/engine/util/util-iterable.vala
+++ b/src/engine/util/util-iterable.vala
@@ -11,6 +11,22 @@ namespace Geary {
public Geary.Iterable<G> traverse<G>(Gee.Iterable<G> i) {
return new Geary.Iterable<G>(i.iterator());
}
+
+ /**
+ * Take some non-null items (all must be of type G) and return a
+ * Geary.Iterable for convenience.
+ */
+ public Geary.Iterable<G> iterate<G>(G g, ...) {
+ va_list args = va_list();
+ G arg = g;
+
+ Gee.ArrayList<G> list = new Gee.ArrayList<G>();
+ do {
+ list.add(arg);
+ } while((arg = args.arg()) != null);
+
+ return Geary.traverse<G>(list);
+ }
}
/**
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]