[polari] chatroomManager: Save channel list on shutdown



commit 658325cc8832fae2ed188ae91de072a07d66a97c
Author: Florian Müllner <fmuellner gnome org>
Date:   Sat Jul 27 01:18:45 2013 +0200

    chatroomManager: Save channel list on shutdown

 .gitignore                           |    2 ++
 data/Makefile.am                     |    8 ++++++++
 data/org.gnome.polari.gschema.xml.in |   10 ++++++++++
 src/chatroomManager.js               |   17 +++++++++++++++++
 4 files changed, 37 insertions(+), 0 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index aa74323..b828709 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,6 +16,8 @@ config.*
 configure
 data/*.desktop
 data/*.gresource
+data/*.gschema.valid
+data/*.gschema.xml
 depcomp
 install-sh
 libtool
diff --git a/data/Makefile.am b/data/Makefile.am
index ca455fc..bd51b09 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -14,13 +14,21 @@ polari.gresource: polari.gresource.xml $(resource_files)
 resourcedir=$(pkgdatadir)
 resource_DATA=polari.gresource
 
+gsettings_in_files = org.gnome.polari.gschema.xml.in
+gsettings_SCHEMAS = $(gsettings_in_files:.xml.in=.xml)
+
+ INTLTOOL_XML_NOMERGE_RULE@
+ GSETTINGS_RULES@
+
 EXTRA_DIST = \
        $(desktop_in_files) \
        polari.gresource.xml \
        $(resource_files) \
+       $(gsettings_in_files) \
        $(NULL)
 
 CLEANFILES = \
        $(desktop_DATA) \
        $(resource_DATA) \
+k$(gsettings_SCHEMAS) \
        $(NULL)
diff --git a/data/org.gnome.polari.gschema.xml.in b/data/org.gnome.polari.gschema.xml.in
new file mode 100644
index 0000000..0cecb5d
--- /dev/null
+++ b/data/org.gnome.polari.gschema.xml.in
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schemalist gettext-domain="polari">
+  <schema path="/org/gnome/polari/" id="org.gnome.polari">
+    <key type="aa{sv}" name="saved-channel-list">
+      <default>[]</default>
+      <summary>Saved channel list</summary>
+      <description>List of channels to restore on startup</description>
+    </key>
+  </schema>
+</schemalist>
diff --git a/src/chatroomManager.js b/src/chatroomManager.js
index 610ac48..fb54f54 100644
--- a/src/chatroomManager.js
+++ b/src/chatroomManager.js
@@ -1,4 +1,5 @@
 const Gio = imports.gi.Gio;
+const GLib = imports.gi.GLib;
 const Polari = imports.gi.Polari;
 const Tp = imports.gi.TelepathyGLib;
 
@@ -34,12 +35,22 @@ const _ChatroomManager = new Lang.Class({
     },
 
     _onPrepareShutdown: function() {
+        this._app.hold();
+        let savedChannels = [];
+
         for (let id in this._rooms) {
             let room = this._rooms[id];
 
             if (room.channel.get_invalidated())
                 continue;
 
+            let account = room.channel.connection.get_account();
+            let serializedChannel = {
+                account: GLib.Variant.new('s', account.get_object_path()),
+                channel: GLib.Variant.new('s', room.channel.identifier)
+            };
+            savedChannels.push(serializedChannel);
+
             this._app.hold();
             room.channel.connect('invalidated', Lang.bind(this,
                 function() {
@@ -47,6 +58,12 @@ const _ChatroomManager = new Lang.Class({
                 }));
             room.channel.leave_async(Tp.ChannelGroupChangeReason.NONE, '', null);
         }
+
+        let settings = new Gio.Settings({ schema: 'org.gnome.polari' });
+        settings.set_value('saved-channel-list',
+                           GLib.Variant.new('aa{sv}', savedChannels));
+
+        this._app.release();
     },
 
     _onPrepared: function(am, res) {


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