aboutsummaryrefslogtreecommitdiff
path: root/libdino/src
diff options
context:
space:
mode:
Diffstat (limited to 'libdino/src')
-rw-r--r--libdino/src/plugin/interfaces.vala37
-rw-r--r--libdino/src/plugin/registry.vala22
-rw-r--r--libdino/src/service/database.vala4
-rw-r--r--libdino/src/service/message_storage.vala2
4 files changed, 62 insertions, 3 deletions
diff --git a/libdino/src/plugin/interfaces.vala b/libdino/src/plugin/interfaces.vala
index 729f7b26..5ffd491f 100644
--- a/libdino/src/plugin/interfaces.vala
+++ b/libdino/src/plugin/interfaces.vala
@@ -71,4 +71,41 @@ public interface ConversationTitlebarWidget : Object {
public abstract void set_conversation(Conversation conversation);
}
+public abstract interface ConversationItemPopulator : Object {
+ public abstract string id { get; }
+ public abstract void init(Conversation conversation, ConversationItemCollection summary, WidgetType type);
+ public virtual void populate_timespan(Conversation conversation, DateTime from, DateTime to) { }
+ public virtual void populate_between_widgets(Conversation conversation, DateTime from, DateTime to) { }
+ public abstract void close(Conversation conversation);
+}
+
+public abstract class MetaConversationItem : Object {
+ public virtual Jid? jid { get; set; default=null; }
+ public virtual string color { get; set; default=null; }
+ public virtual string display_name { get; set; default=null; }
+ public virtual bool dim { get; set; default=false; }
+ public virtual DateTime? sort_time { get; set; default=null; }
+ public virtual DateTime? display_time { get; set; default=null; }
+ public virtual Encryption? encryption { get; set; default=null; }
+ public virtual Entities.Message.Marked? mark { get; set; default=null; }
+
+ public abstract bool can_merge { get; set; }
+ public abstract bool requires_avatar { get; set; }
+ public abstract bool requires_header { get; set; }
+
+ public abstract Object get_widget(WidgetType type);
+}
+
+public interface ConversationItemCollection : Object {
+ public abstract void insert_item(MetaConversationItem item);
+ public abstract void remove_item(MetaConversationItem item);
+}
+
+public interface MessageDisplayProvider : Object {
+ public abstract string id { get; set; }
+ public abstract double priority { get; set; }
+ public abstract bool can_display(Entities.Message? message);
+ public abstract MetaConversationItem? get_item(Entities.Message message, Entities.Conversation conversation);
+}
+
}
diff --git a/libdino/src/plugin/registry.vala b/libdino/src/plugin/registry.vala
index 6284269b..7b4410aa 100644
--- a/libdino/src/plugin/registry.vala
+++ b/libdino/src/plugin/registry.vala
@@ -7,6 +7,8 @@ public class Registry {
internal ArrayList<AccountSettingsEntry> account_settings_entries = new ArrayList<AccountSettingsEntry>();
internal ArrayList<ContactDetailsProvider> contact_details_entries = new ArrayList<ContactDetailsProvider>();
internal Map<string, TextCommand> text_commands = new HashMap<string, TextCommand>();
+ internal Gee.List<MessageDisplayProvider> message_displays = new ArrayList<MessageDisplayProvider>();
+ internal Gee.List<ConversationItemPopulator> conversation_item_populators = new ArrayList<ConversationItemPopulator>();
internal Gee.Collection<ConversationTitlebarEntry> conversation_titlebar_entries = new Gee.TreeSet<ConversationTitlebarEntry>((a, b) => {
if (a.order < b.order) {
return -1;
@@ -67,6 +69,26 @@ public class Registry {
return true;
}
}
+
+ public bool register_message_display(MessageDisplayProvider provider) {
+ lock (message_displays) {
+ foreach(MessageDisplayProvider p in message_displays) {
+ if (p.id == provider.id) return false;
+ }
+ message_displays.add(provider);
+ return true;
+ }
+ }
+
+ public bool register_conversation_item_populator(ConversationItemPopulator populator) {
+ lock (conversation_item_populators) {
+ foreach(ConversationItemPopulator p in conversation_item_populators) {
+ if (p.id == populator.id) return false;
+ }
+ conversation_item_populators.add(populator);
+ return true;
+ }
+ }
}
}
diff --git a/libdino/src/service/database.vala b/libdino/src/service/database.vala
index 91a62cce..51d16e59 100644
--- a/libdino/src/service/database.vala
+++ b/libdino/src/service/database.vala
@@ -201,7 +201,7 @@ public class Database : Qlite.Database {
}
}
- public Gee.List<Message> get_messages(Jid jid, Account account, Message.Type? type, int count, Message? before) {
+ public Gee.List<Message> get_messages(Jid jid, Account account, Message.Type? type, int count, DateTime? before) {
QueryBuilder select = message.select()
.with(message.counterpart_id, "=", get_jid_id(jid))
.with(message.account_id, "=", account.id)
@@ -214,7 +214,7 @@ public class Database : Qlite.Database {
select.with(message.type_, "=", (int) type);
}
if (before != null) {
- select.with(message.time, "<", (long) before.time.to_unix());
+ select.with(message.time, "<", (long) before.to_unix());
}
LinkedList<Message> ret = new LinkedList<Message>();
diff --git a/libdino/src/service/message_storage.vala b/libdino/src/service/message_storage.vala
index 1cde1a95..76a8e60d 100644
--- a/libdino/src/service/message_storage.vala
+++ b/libdino/src/service/message_storage.vala
@@ -47,7 +47,7 @@ public class MessageStorage : StreamInteractionModule, Object {
return null;
}
- public Gee.List<Message>? get_messages_before(Conversation? conversation, Message before, int count = 20) {
+ public Gee.List<Message>? get_messages_before(Conversation? conversation, DateTime before, int count = 20) {
Gee.List<Message> db_messages = db.get_messages(conversation.counterpart, conversation.account, Util.get_message_type_for_conversation(conversation), count, before);
return db_messages;
}