[polari] app: Add dedicated actions for join and leave



commit 50a7e372e6b7fb842f3af95d9a8d0d636d3c7272
Author: Florian Müllner <fmuellner gnome org>
Date:   Thu Aug 1 11:33:46 2013 +0200

    app: Add dedicated actions for join and leave
    
    As we start to do more on join/leave than just calling the corresponding
    tp method, we should share the implementation. We could just add some
    utility methods, but GActions are actually a nice fit ...

 src/application.js     |   31 +++++++++++++++++++++++++++++--
 src/chatroomManager.js |    4 ++++
 2 files changed, 33 insertions(+), 2 deletions(-)
---
diff --git a/src/application.js b/src/application.js
index 9218e66..71410e0 100644
--- a/src/application.js
+++ b/src/application.js
@@ -67,6 +67,12 @@ const Application = new Lang.Class({
             accel: '<Primary>n' },
           { name: 'message-user',
             activate: Lang.bind(this, this._onMessageUser) },
+          { name: 'join-room',
+            activate: Lang.bind(this, this._onJoinRoom),
+            parameter_type: GLib.VariantType.new('(ssu)') },
+          { name: 'leave-room',
+            activate: Lang.bind(this, this._onLeaveRoom),
+            parameter_type: GLib.VariantType.new('s') },
           { name: 'leave-current-room',
             activate: Lang.bind(this, this._onLeaveCurrentRoom),
             create_hook: Lang.bind(this, this._leaveRoomCreateHook),
@@ -185,10 +191,23 @@ const Application = new Lang.Class({
         log('Activated action "Message user"');
     },
 
-    _onLeaveCurrentRoom: function() {
+    _onJoinRoom: function(action, parameter) {
+        let [accountPath, channelName, time] = parameter.deep_unpack();
+        // have this in AccountMonitor?
+        let factory = Tp.AccountManager.dup().get_factory();
+        let account = factory.ensure_account(accountPath, []);
+
+        let req = Tp.AccountChannelRequest.new_text(account, time);
+        req.set_target_id(Tp.HandleType.ROOM, channelName);
+        req.set_delegate_to_preferred_handler(true);
+        let preferredHandler = Tp.CLIENT_BUS_NAME_BASE + 'Polari';
+        req.ensure_channel_async(preferredHandler, null, null);
+    },
+
+    _onLeaveRoom: function(action, parameter) {
         let reason = Tp.ChannelGroupChangeReason.NONE;
         let message = _("Good Bye"); // TODO - our first setting!
-        let room = this._chatroomManager.getActiveRoom();
+        let room = this._chatroomManager.getRoomById(parameter.deep_unpack());
         if (!room)
             return;
         room.channel.leave_async(reason, message, Lang.bind(this,
@@ -201,6 +220,14 @@ const Application = new Lang.Class({
             }));
     },
 
+    _onLeaveCurrentRoom: function() {
+        let room = this._chatroomManager.getActiveRoom();
+        if (!room)
+            return;
+        let action = this.lookup_action('leave-room');
+        action.activate(GLib.Variant.new('s', room.id));
+    },
+
     _onToggleAction: function(action) {
         let state = action.get_state();
         action.change_state(GLib.Variant.new('b', !state.get_boolean()));
diff --git a/src/chatroomManager.js b/src/chatroomManager.js
index 1c70b3e..27014bf 100644
--- a/src/chatroomManager.js
+++ b/src/chatroomManager.js
@@ -227,6 +227,10 @@ const _ChatroomManager = new Lang.Class({
         return null;
     },
 
+    getRoomById: function(id) {
+        return this._rooms[id];
+    },
+
     get roomCount() {
         return Object.keys(this._rooms).length;
     }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]