Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ gobject_dep = dependency('gobject-2.0')
granite_dep = dependency('granite', version: '>= 6.0.0')
gee_dep = dependency('gee-0.8')
handy_dep = dependency('libhandy-1', version: '>=1.1.90')
camel_dep = dependency('camel-1.2', version: '>= 3.28')
camel_dep = dependency('camel-1.2', version: '>= 3.57.1')
libedataserver_dep = dependency('libedataserver-1.2', version: '>= 3.28')
libedataserverui_dep = dependency('libedataserverui-1.2', version: '>=3.45.1')
webkit2_dep = dependency('webkit2gtk-4.1')
Expand Down
9 changes: 4 additions & 5 deletions src/Backend/MoveOperation.vala
Original file line number Diff line number Diff line change
Expand Up @@ -189,10 +189,9 @@ public class Mail.MoveOperation : Object {
var vee_folder = (Camel.VeeFolder)src_folder;

store = null;
unowned Camel.Folder? orig_folder = null;

foreach (unowned Camel.MessageInfo message in moved_messages) {
orig_folder = vee_folder.get_vee_uid_folder (message.uid);
Camel.Folder? orig_folder = vee_folder.dup_vee_uid_folder (message.uid);
if (orig_folder != null) {
if (store != null && orig_folder.get_parent_store () != store) {
// Don't know which archive folder to use when messages are from
Expand All @@ -214,11 +213,11 @@ public class Mail.MoveOperation : Object {
}

private async void collect_thread_messages (Camel.FolderThreadNode thread) {
moved_messages.add (thread.message);
unowned Camel.FolderThreadNode? child = (Camel.FolderThreadNode?) thread.child;
moved_messages.add ((Camel.MessageInfo?) thread.get_item ());
unowned Camel.FolderThreadNode? child = (Camel.FolderThreadNode?) thread.get_child ();
while (child != null) {
yield collect_thread_messages (child);
child = (Camel.FolderThreadNode?) child.next;
child = (Camel.FolderThreadNode?) child.get_next ();
}
}

Expand Down
30 changes: 15 additions & 15 deletions src/ConversationList/ConversationItemModel.vala
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public class Mail.ConversationItemModel : GLib.Object {

unowned Camel.FolderThreadNode? current_node = node;
while (current_node != null) {
weak Camel.MessageInfo? message = current_node.message;
weak Camel.MessageInfo? message = (Camel.MessageInfo?) current_node.get_item ();
if (message != null) {
var address = new Camel.InternetAddress ();
if (address.decode (message.from) > 0) {
Expand All @@ -67,7 +67,7 @@ public class Mail.ConversationItemModel : GLib.Object {
}
}

current_node = (Camel.FolderThreadNode?) current_node.child;
current_node = (Camel.FolderThreadNode?) current_node.get_child ();
}

if (senders.length > 0) {
Expand All @@ -84,7 +84,7 @@ public class Mail.ConversationItemModel : GLib.Object {

unowned Camel.FolderThreadNode? current_node = node;
while (current_node != null) {
weak Camel.MessageInfo? message = current_node.message;
weak Camel.MessageInfo? message = (Camel.MessageInfo?) current_node.get_item ();
if (message != null) {
var address = new Camel.InternetAddress ();
if (address.decode (message.to) > 0) {
Expand All @@ -105,7 +105,7 @@ public class Mail.ConversationItemModel : GLib.Object {
}
}

current_node = (Camel.FolderThreadNode?) current_node.child;
current_node = (Camel.FolderThreadNode?) current_node.get_child ();
}

if (recipients.length > 0) {
Expand All @@ -118,7 +118,7 @@ public class Mail.ConversationItemModel : GLib.Object {

public string subject {
get {
weak Camel.MessageInfo? message = node.message;
weak Camel.MessageInfo? message = (Camel.MessageInfo?) node.get_item ();
if (message == null) {
return _("Unknown");
}
Expand All @@ -129,7 +129,7 @@ public class Mail.ConversationItemModel : GLib.Object {

public bool flagged {
get {
weak Camel.MessageInfo? message = node.message;
weak Camel.MessageInfo? message = (Camel.MessageInfo?) node.get_item ();
if (message == null) {
return false;
}
Expand All @@ -140,7 +140,7 @@ public class Mail.ConversationItemModel : GLib.Object {

public bool forwarded {
get {
weak Camel.MessageInfo? message = node.message;
weak Camel.MessageInfo? message = (Camel.MessageInfo?) node.get_item ();
if (message == null) {
return false;
}
Expand All @@ -151,7 +151,7 @@ public class Mail.ConversationItemModel : GLib.Object {

public bool replied {
get {
weak Camel.MessageInfo? message = node.message;
weak Camel.MessageInfo? message = (Camel.MessageInfo?) node.get_item ();
if (message == null) {
return false;
}
Expand All @@ -162,7 +162,7 @@ public class Mail.ConversationItemModel : GLib.Object {

public bool replied_all {
get {
weak Camel.MessageInfo? message = node.message;
weak Camel.MessageInfo? message = (Camel.MessageInfo?) node.get_item ();
if (message == null) {
return false;
}
Expand All @@ -179,7 +179,7 @@ public class Mail.ConversationItemModel : GLib.Object {

public bool deleted {
get {
weak Camel.MessageInfo? message = node.message;
weak Camel.MessageInfo? message = (Camel.MessageInfo?) node.get_item ();
if (message == null) {
return false;
}
Expand All @@ -204,7 +204,7 @@ public class Mail.ConversationItemModel : GLib.Object {

private static uint count_thread_messages (Camel.FolderThreadNode node) {
uint i = 1;
for (unowned Camel.FolderThreadNode? child = node.child; child != null; child = child.next) {
for (unowned Camel.FolderThreadNode? child = node.get_child (); child != null; child = child.get_next ()) {
i += count_thread_messages (child);
}

Expand All @@ -217,13 +217,13 @@ public class Mail.ConversationItemModel : GLib.Object {
return time;
}

weak Camel.MessageInfo? message = node.message;
weak Camel.MessageInfo? message = (Camel.MessageInfo?) node.get_item ();
if (message != null) {
time = int64.max (time, message.date_received);
time = int64.max (time, message.date_sent);
}

for (unowned Camel.FolderThreadNode? child = node.child; child != null; child = child.next) {
for (unowned Camel.FolderThreadNode? child = node.get_child (); child != null; child = child.get_next ()) {
time = get_newest_timestamp (child, time);
}

Expand All @@ -235,10 +235,10 @@ public class Mail.ConversationItemModel : GLib.Object {
return false;
}

var has_flag = !(flag in (int)node.message.flags);
var has_flag = !(flag in (int)((Camel.MessageInfo?) node.get_item ()).flags);

if (!has_flag) {
for (unowned Camel.FolderThreadNode? child = node.child; child != null; child = child.next) {
for (unowned Camel.FolderThreadNode? child = node.get_child (); child != null; child = child.get_next ()) {
has_flag = has_thread_flag (child, flag);
if (has_flag) {
break;
Expand Down
42 changes: 22 additions & 20 deletions src/ConversationList/ConversationList.vala
Original file line number Diff line number Diff line change
Expand Up @@ -213,11 +213,11 @@ public class Mail.ConversationList : Gtk.Box {
return;
}

if (!(flag in (int)node.message.flags)) {
node.message.set_flags (flag, ~0);
if (!(flag in (int)((Camel.MessageInfo?) node.get_item ()).flags)) {
((Camel.MessageInfo?) node.get_item ()).set_flags (flag, ~0);
}

for (unowned Camel.FolderThreadNode? child = node.child; child != null; child = child.next) {
for (unowned Camel.FolderThreadNode? child = node.get_child (); child != null; child = child.get_next ()) {
set_thread_flag (child, flag);
}
}
Expand Down Expand Up @@ -269,17 +269,17 @@ public class Mail.ConversationList : Gtk.Box {

var search_result_uids = get_search_result_uids (current_account.service.uid);
if (search_result_uids != null) {
var thread = new Camel.FolderThread (folder, search_result_uids, false);
var thread = new Camel.FolderThread (folder, (GLib.GenericArray<string>?) search_result_uids, Camel.FolderThreadFlags.NONE);
threads[current_account.service.uid] = thread;

weak Camel.FolderThreadNode? child = thread.tree;
weak Camel.FolderThreadNode? child = thread.get_tree ();
while (child != null) {
if (cancellable.is_cancelled ()) {
break;
}

add_conversation_item (folder_info_flags[current_account.service.uid], child, thread, current_account.service.uid);
child = child.next;
child = child.get_next ();
}
}
} catch (Error e) {
Expand Down Expand Up @@ -326,7 +326,7 @@ public class Mail.ConversationList : Gtk.Box {
return;
}

threads[service_uid] = new Camel.FolderThread (folders[service_uid], search_result_uids, false);
threads[service_uid] = new Camel.FolderThread (folders[service_uid], (GLib.GenericArray<string>?) search_result_uids, Camel.FolderThreadFlags.NONE);

var removed = 0;
change_info.get_removed_uids ().foreach ((uid) => {
Expand All @@ -338,33 +338,33 @@ public class Mail.ConversationList : Gtk.Box {
}
});

unowned Camel.FolderThreadNode? child = threads[service_uid].tree;
unowned Camel.FolderThreadNode? child = threads[service_uid].get_tree ();
while (child != null) {
if (cancellable.is_cancelled ()) {
return;
}

var item = conversations[child.message.uid];
var item = conversations[((Camel.MessageInfo?) child.get_item ()).uid];
if (item == null) {
add_conversation_item (folder_info_flags[service_uid], child, threads[service_uid], service_uid);
} else {
if (item.is_older_than (child)) {
conversations.unset (child.message.uid);
conversations.unset (((Camel.MessageInfo?) child.get_item ()).uid);
list_store.remove (item);
removed++;
add_conversation_item (folder_info_flags[service_uid], child, threads[service_uid], service_uid);
};
}

child = child.next;
child = child.get_next ();
}

list_store.items_changed (0, removed, list_store.get_n_items ());
}
}
}

private GenericArray<string>? get_search_result_uids (string service_uid) {
private GenericArray<weak string>? get_search_result_uids (string service_uid) {
var style_context = filter_button.get_style_context ();
if (hide_read_switch.active || hide_unstarred_switch.active) {
if (!style_context.has_class (Granite.STYLE_CLASS_ACCENT)) {
Expand All @@ -381,7 +381,7 @@ public class Mail.ConversationList : Gtk.Box {

var has_current_search_query = search_entry.text.strip () != "";
if (!has_current_search_query && !hide_read_switch.active && !hide_unstarred_switch.active) {
return folders[service_uid].get_uids ();
return folders[service_uid].dup_uids ();
}

string[] current_search_expressions = {};
Expand All @@ -406,20 +406,22 @@ public class Mail.ConversationList : Gtk.Box {
string search_query = "(match-all (and " + string.joinv ("", current_search_expressions) + "))";

try {
return folders[service_uid].search_by_expression (search_query, cancellable);
GenericArray<weak string>? uids = null;
folders[service_uid].search_sync (search_query, out uids, cancellable);
return uids;
} catch (Error e) {
if (!(e is GLib.IOError.CANCELLED)) {
warning ("Error while searching: %s", e.message);
}

return folders[service_uid].get_uids ();
return folders[service_uid].dup_uids ();
}
}
}

private void add_conversation_item (Camel.FolderInfoFlags folder_info_flags, Camel.FolderThreadNode child, Camel.FolderThread thread, string service_uid) {
var item = new ConversationItemModel (folder_info_flags, child, thread, service_uid);
conversations[child.message.uid] = item;
conversations[((Camel.MessageInfo?) child.get_item ()).uid] = item;
list_store.add (item);
}

Expand All @@ -439,28 +441,28 @@ public class Mail.ConversationList : Gtk.Box {
public void mark_read_selected_messages () {
var selected_rows = list_box.get_selected_rows ();
foreach (var row in selected_rows) {
(((ConversationItemModel)row).node).message.set_flags (Camel.MessageFlags.SEEN, ~0);
((Camel.MessageInfo?) (((ConversationItemModel)row).node).get_item ()).set_flags (Camel.MessageFlags.SEEN, ~0);
}
}

public void mark_star_selected_messages () {
var selected_rows = list_box.get_selected_rows ();
foreach (var row in selected_rows) {
(((ConversationItemModel)row).node).message.set_flags (Camel.MessageFlags.FLAGGED, ~0);
((Camel.MessageInfo?) (((ConversationItemModel)row).node).get_item ()).set_flags (Camel.MessageFlags.FLAGGED, ~0);
}
}

public void mark_unread_selected_messages () {
var selected_rows = list_box.get_selected_rows ();
foreach (var row in selected_rows) {
(((ConversationItemModel)row).node).message.set_flags (Camel.MessageFlags.SEEN, 0);
((Camel.MessageInfo?) (((ConversationItemModel)row).node).get_item ()).set_flags (Camel.MessageFlags.SEEN, 0);
}
}

public void mark_unstar_selected_messages () {
var selected_rows = list_box.get_selected_rows ();
foreach (var row in selected_rows) {
(((ConversationItemModel)row).node).message.set_flags (Camel.MessageFlags.FLAGGED, 0);
((Camel.MessageInfo?) (((ConversationItemModel)row).node).get_item ()).set_flags (Camel.MessageFlags.FLAGGED, 0);
}
}

Expand Down
22 changes: 11 additions & 11 deletions src/MessageList/MessageList.vala
Original file line number Diff line number Diff line change
Expand Up @@ -179,14 +179,14 @@ public class Mail.MessageList : Gtk.Box {
*/
can_move_thread (true);

var store = node.message.summary.folder.parent_store;
var store = ((Camel.MessageInfo?) node.get_item ()).summary.folder.parent_store;
folder_popover.set_store (store);

var item = new MessageListItem (node.message);
var item = new MessageListItem ((Camel.MessageInfo?) node.get_item ());
list_box.add (item);
messages.set (node.message.uid, item);
if (node.child != null) {
go_down ((Camel.FolderThreadNode?) node.child);
messages.set (((Camel.MessageInfo?) node.get_item ()).uid, item);
if (node.get_child () != null) {
go_down ((Camel.FolderThreadNode?) node.get_child ());
}

var children = list_box.get_children ();
Expand All @@ -203,22 +203,22 @@ public class Mail.MessageList : Gtk.Box {
}
}

if (node.message != null && Camel.MessageFlags.DRAFT in (int) node.message.flags) {
if (node.get_item () != null && Camel.MessageFlags.DRAFT in (int) ((Camel.MessageInfo?) node.get_item ()).flags) {
compose.begin (Composer.Type.DRAFT, "");
}
}

private void go_down (Camel.FolderThreadNode node) {
unowned Camel.FolderThreadNode? current_node = node;
while (current_node != null) {
var item = new MessageListItem (current_node.message);
var item = new MessageListItem ((Camel.MessageInfo?) current_node.get_item ());
list_box.add (item);
messages.set (current_node.message.uid, item);
if (current_node.next != null) {
go_down ((Camel.FolderThreadNode?) current_node.next);
messages.set (((Camel.MessageInfo?) current_node.get_item ()).uid, item);
if (current_node.get_next () != null) {
go_down ((Camel.FolderThreadNode?) current_node.get_next ());
}

current_node = (Camel.FolderThreadNode?) current_node.child;
current_node = (Camel.FolderThreadNode?) current_node.get_child ();
}
}

Expand Down
Loading
Loading