[polari] app: Add dedicated actions for join and leave
- From: Florian Müllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [polari] app: Add dedicated actions for join and leave
- Date: Thu, 8 Aug 2013 13:14:24 +0000 (UTC)
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]