using GLib; using Gee; public class ConversationListModel : Object, ListModel { public SortedSet conversations { owned get { return _conversations.read_only_view; } } private SortedSet _conversations; public ConversationListModel() { _conversations = new TreeSet((a, b) => { // Sort by date in descending order (newest first) return (int)(b.date - a.date); }); Repository.get_instance().conversations_updated.connect(load_conversations); Repository.get_instance().messages_updated.connect(load_conversations); } public void load_conversations() { try { Conversation[] conversations = Repository.get_instance().get_conversations(); // Clear existing set uint old_count = _conversations.size; _conversations.clear(); // Notify of removal if (old_count > 0) { items_changed(0, old_count, 0); } // Process each conversation uint position = 0; for (int i = 0; i < conversations.length; i++) { var conversation = conversations[i]; _conversations.add(conversation); position++; } // Notify of additions if (position > 0) { items_changed(0, 0, position); } } catch (Error e) { warning("Failed to load conversations: %s", e.message); } } // ListModel implementation public Type get_item_type() { return typeof(Conversation); } public uint get_n_items() { return _conversations.size; } public Object? get_item(uint position) { return _conversations.to_array()[position]; } }