Private
Public Access
1
0
Files
Kordophone/src/conversation-list/conversation-list-model.vala

64 lines
1.8 KiB
Vala
Raw Normal View History

using GLib;
using Gee;
public class ConversationListModel : Object, ListModel
{
public SortedSet<Conversation> conversations {
owned get { return _conversations.read_only_view; }
}
private SortedSet<Conversation> _conversations;
public ConversationListModel() {
_conversations = new TreeSet<Conversation>((a, b) => {
// Sort by date in descending order (newest first)
return (int)(b.date - a.date);
});
Repository.get_instance().conversations_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];
}
}