[polari/wip/fmuellner/nickserv: 1/4] roomStack: Ask users whether to save "identify" passwords
- From: Florian Müllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [polari/wip/fmuellner/nickserv: 1/4] roomStack: Ask users whether to save "identify" passwords
- Date: Mon, 29 Aug 2016 13:31:31 +0000 (UTC)
commit 2ed6d7cbc3529780df4351f3ecf12db521a683d3
Author: Florian Müllner <fmuellner gnome org>
Date: Tue Aug 2 15:28:38 2016 +0200
roomStack: Ask users whether to save "identify" passwords
We now have everything in place to allow saving users' NickServ
passwords, so listen for the room's ::identify-sent signal and
slide down an info bar to ask the user for confirmation.
https://bugzilla.gnome.org/show_bug.cgi?id=709982
src/roomStack.js | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 75 insertions(+), 4 deletions(-)
---
diff --git a/src/roomStack.js b/src/roomStack.js
index d8e444c..13cc6d2 100644
--- a/src/roomStack.js
+++ b/src/roomStack.js
@@ -2,6 +2,8 @@ const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const GObject = imports.gi.GObject;
const Gtk = imports.gi.Gtk;
+const Pango = imports.gi.Pango;
+const Tp = imports.gi.TelepathyGLib;
const AccountsMonitor = imports.accountsMonitor;
const ChatView = imports.chatView;
@@ -89,6 +91,69 @@ const RoomStack = new Lang.Class({
}
});
+const SavePasswordConfirmationBar = new Lang.Class({
+ Name: 'SavePasswordConfirmationBar',
+ Extends: Gtk.Revealer,
+
+ _init: function(room) {
+ this._room = room;
+
+ this.parent({ valign: Gtk.Align.START });
+
+ this._createWidget();
+
+ this._identifySentId = this._room.connect('identify-sent', () => {
+ this.reveal_child = true;
+ });
+ this._infoBar.connect('response', (w, res) => {
+ if (res == Gtk.ResponseType.CLOSE) {
+ let app = Gio.Application.get_default();
+ let target = new GLib.Variant('o', this._room.account.object_path);
+ app.lookup_action('discard-identify-password').activate(target);
+ }
+ this.reveal_child = false;
+ });
+ },
+
+ _createWidget: function() {
+ this._infoBar = new Gtk.InfoBar({ show_close_button: true })
+ this.add(this._infoBar);
+
+ let target = new GLib.Variant('o', this._room.account.object_path);
+ let button = new Gtk.Button({ label: _("_Save Password"),
+ use_underline: true,
+ action_name: 'app.save-identify-password',
+ action_target: target });
+ this._infoBar.add_action_widget(button, Gtk.ResponseType.ACCEPT);
+
+ let box = new Gtk.Box({ orientation: Gtk.Orientation.VERTICAL });
+ this._infoBar.get_content_area().add(box);
+
+ let title = _("Should the password be saved?");
+ this._titleLabel = new Gtk.Label({ halign: Gtk.Align.START,
+ valign: Gtk.Align.CENTER,
+ wrap: true });
+ this._titleLabel.set_markup('<b>' + title + '</b>');
+ box.add(this._titleLabel);
+
+ let accountName = this._room.account.display_name;
+ let text = _("Identification will happen automatically the next time you connect to
%s").format(accountName);
+ this._subtitleLabel = new Gtk.Label({ label: text,
+ ellipsize: Pango.EllipsizeMode.END });
+ box.add(this._subtitleLabel);
+
+ this._infoBar.show_all();
+ },
+
+ vfunc_destroy: function() {
+ if (this._identifySentId)
+ this._room.disconnect(this._identifySentId);
+ this._identifySentId = 0;
+
+ this.parent();
+ }
+});
+
const ChatPlaceholder = new Lang.Class({
Name: 'ChatPlaceholder',
Extends: Gtk.Overlay,
@@ -129,17 +194,23 @@ const ChatPlaceholder = new Lang.Class({
const RoomView = new Lang.Class({
Name: 'RoomView',
- Extends: Gtk.Box,
+ Extends: Gtk.Overlay,
_init: function(room, sizeGroup) {
- this.parent({ orientation: Gtk.Orientation.VERTICAL });
+ this.parent();
+
+ let box = new Gtk.Box({ orientation: Gtk.Orientation.VERTICAL });
+ this.add(box);
+
+ if (room.type == Tp.HandleType.CONTACT)
+ this.add_overlay(new SavePasswordConfirmationBar(room));
this._view = new ChatView.ChatView(room);
- this.add(this._view);
+ box.add(this._view);
this._entryArea = new EntryArea.EntryArea({ room: room,
sensitive: false });
- this.add(this._entryArea);
+ box.add(this._entryArea);
this._view.bind_property('max-nick-chars',
this._entryArea, 'max-nick-chars',
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]