aboutsummaryrefslogtreecommitdiff
path: root/libdino
diff options
context:
space:
mode:
authorMarvin W <git@larma.de>2018-11-10 08:05:14 -0600
committerMarvin W <git@larma.de>2018-11-10 08:05:14 -0600
commitdfb75e2cda1eb9edbbdd9ea88c131d9cb31742ed (patch)
treed3c1ae4251844239eb46e57c8eacf03466aed608 /libdino
parent559bbc5ca3ad5d44ea949788005a29fe9d86a232 (diff)
parent65a12021bc7abbf5ddea068ffe9b4715cfc34f0b (diff)
downloaddino-dfb75e2cda1eb9edbbdd9ea88c131d9cb31742ed.tar.gz
dino-dfb75e2cda1eb9edbbdd9ea88c131d9cb31742ed.zip
Merge PR #413 "Improvements to the OMEMO plugin"
Diffstat (limited to 'libdino')
-rw-r--r--libdino/src/plugin/interfaces.vala15
-rw-r--r--libdino/src/plugin/registry.vala11
-rw-r--r--libdino/src/service/roster_manager.vala5
3 files changed, 31 insertions, 0 deletions
diff --git a/libdino/src/plugin/interfaces.vala b/libdino/src/plugin/interfaces.vala
index 2378feb7..01cd525a 100644
--- a/libdino/src/plugin/interfaces.vala
+++ b/libdino/src/plugin/interfaces.vala
@@ -82,6 +82,12 @@ public abstract interface ConversationAdditionPopulator : ConversationItemPopula
public virtual void populate_timespan(Conversation conversation, DateTime from, DateTime to) { }
}
+public abstract interface NotificationPopulator : Object {
+ public abstract string id { get; }
+ public abstract void init(Conversation conversation, NotificationCollection summary, WidgetType type);
+ public abstract void close(Conversation conversation);
+}
+
public abstract class MetaConversationItem : Object {
public virtual string populator_id { get; set; }
public virtual Jid? jid { get; set; default=null; }
@@ -99,9 +105,18 @@ public abstract class MetaConversationItem : Object {
public abstract Object? get_widget(WidgetType type);
}
+public abstract class MetaConversationNotification : Object {
+ public abstract Object? get_widget(WidgetType type);
+}
+
public interface ConversationItemCollection : Object {
public signal void insert_item(MetaConversationItem item);
public signal void remove_item(MetaConversationItem item);
}
+public interface NotificationCollection : Object {
+ public signal void add_meta_notification(MetaConversationNotification item);
+ public signal void remove_meta_notification(MetaConversationNotification item);
+}
+
}
diff --git a/libdino/src/plugin/registry.vala b/libdino/src/plugin/registry.vala
index 2b496288..9c211a6d 100644
--- a/libdino/src/plugin/registry.vala
+++ b/libdino/src/plugin/registry.vala
@@ -8,6 +8,7 @@ public class Registry {
internal ArrayList<ContactDetailsProvider> contact_details_entries = new ArrayList<ContactDetailsProvider>();
internal Map<string, TextCommand> text_commands = new HashMap<string, TextCommand>();
internal Gee.List<ConversationAdditionPopulator> conversation_addition_populators = new ArrayList<ConversationAdditionPopulator>();
+ internal Gee.List<NotificationPopulator> notification_populators = new ArrayList<NotificationPopulator>();
internal Gee.Collection<ConversationTitlebarEntry> conversation_titlebar_entries = new Gee.TreeSet<ConversationTitlebarEntry>((a, b) => {
if (a.order < b.order) {
return -1;
@@ -78,6 +79,16 @@ public class Registry {
return true;
}
}
+
+ public bool register_notification_populator(NotificationPopulator populator) {
+ lock (notification_populators) {
+ foreach(NotificationPopulator p in notification_populators) {
+ if (p.id == populator.id) return false;
+ }
+ notification_populators.add(populator);
+ return true;
+ }
+ }
}
}
diff --git a/libdino/src/service/roster_manager.vala b/libdino/src/service/roster_manager.vala
index 23bc8b76..5181b90e 100644
--- a/libdino/src/service/roster_manager.vala
+++ b/libdino/src/service/roster_manager.vala
@@ -11,6 +11,7 @@ public class RosterManager : StreamInteractionModule, Object {
public signal void removed_roster_item(Account account, Jid jid, Roster.Item roster_item);
public signal void updated_roster_item(Account account, Jid jid, Roster.Item roster_item);
+ public signal void mutual_subscription(Account account, Jid jid);
private StreamInteractor stream_interactor;
private Database db;
@@ -66,6 +67,10 @@ public class RosterManager : StreamInteractionModule, Object {
stream_interactor.module_manager.get_module(account, Roster.Module.IDENTITY).item_updated.connect_after( (stream, roster_item) => {
on_roster_item_updated(account, roster_item);
});
+
+ stream_interactor.module_manager.get_module(account, Roster.Module.IDENTITY).mutual_subscription.connect_after( (stream, jid) => {
+ mutual_subscription(account, jid);
+ });
}
private void on_roster_item_updated(Account account, Roster.Item roster_item) {