Updating branch refs/heads/master to 9b2bcea2bc2f04739dccbff6df8e0878b6882137 (commit) from 1e1af39ff36e313af95912ccf70e5b55b872d99b (commit)
commit 9b2bcea2bc2f04739dccbff6df8e0878b6882137 Author: Christian Dywan <christ...@twotoasts.de> Date: Fri Jul 1 22:52:49 2011 +0200 Remove account awareness from messages to content postler/postler-accounts.vala | 4 -- postler/postler-bureau.vala | 16 +++---- postler/postler-content.vala | 12 +++--- postler/postler-folders.vala | 2 +- postler/postler-message.vala | 15 +++++++ postler/postler-messages.vala | 93 ++++++++-------------------------------- 6 files changed, 47 insertions(+), 95 deletions(-) diff --git a/postler/postler-accounts.vala b/postler/postler-accounts.vala index fdb0bc2..636b033 100644 --- a/postler/postler-accounts.vala +++ b/postler/postler-accounts.vala @@ -108,10 +108,6 @@ namespace Postler { return folders[type]; } - public bool can_delete () { - return type == AccountType.SEARCH || folders[FolderType.TRASH] != null; - } - public void set_folder (FolderType type, string folder) { folders[type] = folder; } diff --git a/postler/postler-bureau.vala b/postler/postler-bureau.vala index 5e70519..0dc4bea 100644 --- a/postler/postler-bureau.vala +++ b/postler/postler-bureau.vala @@ -134,16 +134,14 @@ public class Postler.Bureau : Gtk.Window { } void action_archive () { - string folder = Path.get_basename (folders.selected_location); - if (folder != messages.account_info.get_folder (FolderType.ARCHIVE)) + if (messages.selected_folder_type != FolderType.ARCHIVE) messages.move_selected (FolderType.ARCHIVE); else messages.move_selected (FolderType.INBOX); } void action_junk () { - string folder = Path.get_basename (folders.selected_location); - if (folder != messages.account_info.get_folder (FolderType.JUNK)) + if (messages.selected_folder_type != FolderType.JUNK) messages.move_selected (FolderType.JUNK); else messages.move_selected (FolderType.INBOX); @@ -740,13 +738,11 @@ public class Postler.Bureau : Gtk.Window { Postler.Messages messages = object as Postler.Messages; bool state = messages.selected_message != null; actions.get_action ("MessageFlag").sensitive = state; - actions.get_action ("MessageArchive").sensitive = state - && messages.account_info.get_folder (FolderType.ARCHIVE) != null; + actions.get_action ("MessageArchive").sensitive = state; var action = actions.get_action ("MessageJunk"); - action.sensitive = state - && messages.account_info.get_folder (FolderType.JUNK) != null; + action.sensitive = state; action = actions.get_action ("MessageDelete"); - action.sensitive = state && messages.account_info.can_delete (); + action.sensitive = state; }); var scrolled = new Postler.ScrolledWindow (messages); messages_box.pack_end (scrolled, true, true, 0); @@ -881,7 +877,7 @@ public class Postler.Bureau : Gtk.Window { /* Never focus hidden widgets: assertion `WIDGET_REALIZED_FOR_EVENT */ if (messages.visible) { messages.grab_focus (); - messages.populate ("%INBOX", new Postler.AccountInfo ()); + messages.populate ("%INBOX", FolderType.INBOX); } } } diff --git a/postler/postler-content.vala b/postler/postler-content.vala index 7517d03..27e6ee7 100644 --- a/postler/postler-content.vala +++ b/postler/postler-content.vala @@ -15,7 +15,6 @@ struct Postler.EmoticonMapping { } public class Postler.Content : WebKit.WebView { - AccountInfo? selected_account; public Message message { get; private set; } string reply; @@ -633,11 +632,11 @@ public class Postler.Content : WebKit.WebView { public string? choose_from (Message the_message) { /* See if recipient is among the accounts, otherwise pick a fallback */ + var accounts = new Accounts (); string? recipient = the_message.get_field ("to"); if (recipient != null) { string from = Postler.Contact.address_from_string (recipient); - var accounts = new Accounts (); - foreach (var info in accounts.get_infos ()) { + foreach (unowned AccountInfo info in accounts.get_infos ()) { if (info.address == null) continue; foreach (string address in info.address.split (",")) { @@ -646,8 +645,10 @@ public class Postler.Content : WebKit.WebView { } } } - if (selected_account != null && selected_account.address != null) - return selected_account.address.split (",")[0]; + if (the_message.uri != null) { + var account_info = the_message.get_account (accounts); + return account_info.address.split (",")[0]; + } return null; } @@ -683,7 +684,6 @@ public class Postler.Content : WebKit.WebView { } public async bool display (Message the_message, AccountInfo? account_info=null) { - selected_account = account_info; try { GLib.List<Message> thread; if (the_message.stream != null) { diff --git a/postler/postler-folders.vala b/postler/postler-folders.vala index 2919ec9..f0b7a11 100644 --- a/postler/postler-folders.vala +++ b/postler/postler-folders.vala @@ -63,7 +63,7 @@ public class Postler.Folders : Gtk.Toolbar { selected_label = label; selected_type = folder_type; selected_location = uri; - messages.populate (uri, new Postler.AccountInfo ()); + messages.populate (uri, folder_type); }); return button; } diff --git a/postler/postler-message.vala b/postler/postler-message.vala index 5eb1cd5..eda8159 100644 --- a/postler/postler-message.vala +++ b/postler/postler-message.vala @@ -228,6 +228,21 @@ namespace Postler { file.move (destination_file, GLib.FileCopyFlags.NONE); } + public AccountInfo? get_account (Accounts accounts) { + return_val_if_fail (uri != null, null); + /* Look for the account belonging to the message */ + string folder = uri.substring (0, uri.pointer_to_offset (uri.rstr ("/"))); + return_val_if_fail (folder.has_suffix ("/new") || folder.has_suffix ("/cur"), null); + folder = folder.substring (0, folder.pointer_to_offset (folder.rstr ("/"))); + folder = folder.substring (0, folder.pointer_to_offset (folder.rstr ("/"))); + folder = folder.substring (7, -1); + foreach (unowned AccountInfo info in accounts.get_infos ()) { + if (info.type != AccountType.SEARCH && info.path.has_prefix (folder)) + return info; + } + return new AccountInfo (); + } + public Message.from_file (GLib.File file, GLib.Cancellable? cancellable = null) throws GLib.Error { read_from_file (file, cancellable); diff --git a/postler/postler-messages.vala b/postler/postler-messages.vala index 2157d1a..459561a 100644 --- a/postler/postler-messages.vala +++ b/postler/postler-messages.vala @@ -18,15 +18,10 @@ public class Postler.Messages : Gtk.TreeView { public Postler.Content content { get; set; } public bool hide_read { get; set; } + public FolderType selected_folder_type { get; private set; } public string? location { get; private set; } - public AccountInfo account_info { get; private set; } public Message? selected_message { get; private set; } - string to_or_from; - string[] headers = {}; - string[] filters = {}; - string[] folders = {}; - enum Columns { MESSAGE } @@ -283,7 +278,7 @@ public class Postler.Messages : Gtk.TreeView { content_display_window.connect (content_new_window); notify["hide-read"].connect (() => { - search (filters[0] ?? "", headers[0] ?? ""); + populate ("search:unread/1", FolderType.GENERIC); }); } @@ -398,62 +393,30 @@ public class Postler.Messages : Gtk.TreeView { } public void search (string filter, string header="subject") { - headers = {}; - filters = {}; - populate (location, account_info, filter.down (), header); + populate (location, FolderType.GENERIC, filter.down (), header); } - public async bool populate (string? location, AccountInfo account_info, + public async bool populate (string location, FolderType folder_type, string? filter=null, string? header=null) { clear (); - if (location == null) - return true; - if (Path.is_absolute (location) - && !FileUtils.test (location + "/cur", FileTest.EXISTS)) - return true; var now = GLib.Date (); now.set_time_val (GLib.TimeVal ()); - string basename = Path.get_basename (location); - if (basename == account_info.get_folder (FolderType.SENT) - || basename == account_info.get_folder (FolderType.QUEUE) - || basename == account_info.get_folder (FolderType.DRAFTS)) - to_or_from = "to"; - else - to_or_from = "from"; + selected_folder_type = folder_type; var messages = new GLib.List<Message> (); try { if (location != this.location) { - folders = {}; - headers = {}; - filters = {}; client = new Client (); /* FIXME: The client emits, the callback isn't called */ client.got_message.connect (got_message); - /* TODO: pass search: URI */ if (location.has_prefix ("search:")) messages = yield client.get_messages ("%/INBOX/%"); else messages = yield client.get_messages ("file://" + location + "%"); } - if (filters[0] == null) { - headers = { filter != null && filter != "" ? header : null }; - filters = { filter != "" ? filter : null }; - - if (location.has_prefix ("search:")) { - string query = location.substring (7); - string[] parts = query.split ("/", 2); - return_val_if_fail (parts[0] != null && parts[1] != null, false); - headers += parts[0]; - if (filters[0] == null) - filters = { parts[1].down () }; - filters += parts[1].down (); - } - } - foreach (var message in messages) { store.insert_with_values (null, null, 0, Columns.MESSAGE, message); @@ -461,7 +424,7 @@ public class Postler.Messages : Gtk.TreeView { /* Show error for failed search, ie. no results */ int n_messages = store.iter_n_children (null); - if (filters[0] != null && n_messages == 0) { + if (location.has_prefix ("search:") && n_messages == 0) { display_error (_("No messages found"), _("Check the spelling or try a different filter.")); get_selection().set_select_function( () => { return false; }); @@ -481,7 +444,6 @@ public class Postler.Messages : Gtk.TreeView { /* Avoid changing 'location' to not cause property notification */ if (this.location != location) this.location = location; - this.account_info = account_info; return false; } @@ -602,7 +564,7 @@ public class Postler.Messages : Gtk.TreeView { void display_message (Gtk.TreeIter iter) { toggle_message_flag (iter, MessageFlags.MARK_READ, (message, result) => { - content.display (message as Message, account_info); + content.display (message as Message); }); } @@ -622,7 +584,7 @@ public class Postler.Messages : Gtk.TreeView { } public void delete_selected () { - if (location.has_suffix ("/" + account_info.get_folder (FolderType.TRASH))) + if (selected_folder_type == FolderType.TRASH) move_selected (null); else move_selected (FolderType.TRASH); @@ -691,16 +653,8 @@ public class Postler.Messages : Gtk.TreeView { string? destination_path; if (type == null) destination_path = null; - else if (account_info.type == AccountType.SEARCH) + else destination_path = "/"; /* Nonsense path, in case of later errors */ - else { - return_if_fail (account_info.get_folder (type) != null); - destination_path = account_info.path + "/" + account_info.get_folder (type); - if (!ensure_folder (destination_path)) { - GLib.critical (_("Folders for moving messages couldn't be created.")); - return; - } - } GLib.List<Gtk.TreePath> paths; var references = new GLib.List<Gtk.TreeRowReference> (); @@ -715,26 +669,17 @@ public class Postler.Messages : Gtk.TreeView { Message message; model.get (iter, Columns.MESSAGE, out message); try { - if (account_info.type == AccountType.SEARCH) { - /* Look for the account belonging to the message */ - string location = message.get_path (); - string inbox_folder = location.substring (0, - location.pointer_to_offset (location.rstr ("/"))); - return_if_fail (inbox_folder.has_suffix ("/INBOX/new") - || inbox_folder.has_suffix ("/INBOX/cur")); - string account_folder = inbox_folder.slice (0, -10); - string? folder_name = null; - foreach (var info in accounts.get_infos ()) { - if (info.path == account_folder) { - folder_name = info.get_folder (type); - break; - } - } - return_if_fail (folder_name != null); - destination_path = account_folder + "/" + folder_name; - return_if_fail (destination_path != null); + AccountInfo account_info = message.get_account (accounts); + return_if_fail (account_info != null); + string? folder_name = null; + foreach (var info in accounts.get_infos ()) { + if (info.path == account_info.path) { + folder_name = info.get_folder (type); + break; } - + } + destination_path = account_info.path + "/" + folder_name; + return_if_fail (destination_path != null); message.move (destination_path); /* Move to next, more recent message row */ _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org http://foo-projects.org/mailman/listinfo/xfce4-commits