aboutsummaryrefslogtreecommitdiff
path: root/libdino/src/service/stream_interactor.vala
diff options
context:
space:
mode:
authorfiaxh <git@mx.ax.lt>2017-03-19 12:55:36 +0100
committerfiaxh <git@mx.ax.lt>2017-03-20 22:28:27 +0100
commitdb57a973534f099af2b150f1a1307d1948553d9f (patch)
tree238ae1d4e53412a33e3febd07318dfd38b0eb2f8 /libdino/src/service/stream_interactor.vala
parent233f2b35d033cd20d1ac648bf2d723bcb7a918fc (diff)
downloaddino-db57a973534f099af2b150f1a1307d1948553d9f.tar.gz
dino-db57a973534f099af2b150f1a1307d1948553d9f.zip
Add typed identity to manager modules and stream flags
Diffstat (limited to 'libdino/src/service/stream_interactor.vala')
-rw-r--r--libdino/src/service/stream_interactor.vala31
1 files changed, 23 insertions, 8 deletions
diff --git a/libdino/src/service/stream_interactor.vala b/libdino/src/service/stream_interactor.vala
index f42eb41b..bdc1ac96 100644
--- a/libdino/src/service/stream_interactor.vala
+++ b/libdino/src/service/stream_interactor.vala
@@ -13,7 +13,7 @@ public class StreamInteractor {
public ModuleManager module_manager;
public ConnectionManager connection_manager;
- private ArrayList<StreamInteractionModule> interaction_modules = new ArrayList<StreamInteractionModule>();
+ private ArrayList<StreamInteractionModule> modules = new ArrayList<StreamInteractionModule>();
public StreamInteractor(Database db) {
module_manager = new ModuleManager(db);
@@ -46,14 +46,13 @@ public class StreamInteractor {
}
public void add_module(StreamInteractionModule module) {
- interaction_modules.add(module);
+ modules.add(module);
}
- public StreamInteractionModule? get_module(string id) {
- foreach (StreamInteractionModule module in interaction_modules) {
- if (module.get_id() == id) {
- return module;
- }
+ public T? get_module<T>(ModuleIdentity<T>? identity) {
+ if (identity == null) return null;
+ foreach (StreamInteractionModule module in modules) {
+ if (identity.matches(module)) return identity.cast(module);
}
return null;
}
@@ -65,8 +64,24 @@ public class StreamInteractor {
}
}
+public class ModuleIdentity<T> : Object {
+ public string id { get; private set; }
+
+ public ModuleIdentity(string id) {
+ this.id = id;
+ }
+
+ public T? cast(StreamInteractionModule module) {
+ return (T?) module;
+ }
+
+ public bool matches(StreamInteractionModule module) {
+ return module.id== id;
+ }
+}
+
public interface StreamInteractionModule : Object {
- public abstract string get_id();
+ public abstract string id { get; }
}
} \ No newline at end of file