From bc72e8952ca807e9d88c90ed66682f35e43e6a42 Mon Sep 17 00:00:00 2001 From: Jake Stevenson Date: Tue, 6 Sep 2016 11:11:05 -0500 Subject: [PATCH] Able to resume buffer --- index.html | 1 + js/bufferResume.js | 56 ++++++++++++++++++++++++++++++++++++++++++++++ js/glowingbear.js | 7 +++--- js/handlers.js | 10 +++++++-- js/models.js | 3 ++- package.json | 6 ++--- test/karma.conf.js | 1 + 7 files changed, 75 insertions(+), 9 deletions(-) create mode 100644 js/bufferResume.js diff --git a/index.html b/index.html index ca339f2..11b6eb5 100644 --- a/index.html +++ b/index.html @@ -42,6 +42,7 @@ + diff --git a/js/bufferResume.js b/js/bufferResume.js new file mode 100644 index 0000000..2ded8d1 --- /dev/null +++ b/js/bufferResume.js @@ -0,0 +1,56 @@ + +/* + * This file contains the service used to record the last + * accessed buffer and return to it when reconnecting to + * the relay. + */ +(function() { +'use strict'; + +var bufferResume = angular.module('bufferResume', []); + +bufferResume.service('bufferResume', ['settings', function(settings) { + var resumer = {}; + var key = settings.host + ":" + settings.port; + + // Hold the status that we were able to find the previously accessed buffer + // and reload it. If we cannot, we'll need to know so we can load the default + var hasResumed = false; + + // Store the current buffer as having been accessed. We can later retrieve it and compare + // we recieve info from weechat to determine if we should switch to it. + resumer.record = function(activeBuffer) { + var subSetting = settings.currentlyViewedBuffers; + subSetting[key] = activeBuffer.id; + settings.currentlyViewedBuffers = subSetting; + }; + + // See if the requested buffer information matches the last recorded access. If so, + // the handler should switch to this buffer. + resumer.shouldResume = function(buffer) { + var savedBuffer = settings.currentlyViewedBuffers[key]; + if (!savedBuffer) { return false; } + + if (!hasResumed) { + if (savedBuffer === buffer.id) { + hasResumed = true; + return true; + } + return false; + } + }; + + // The handler will ask for this after loading all infos. If it was unable to find a buffer + // it will need to know so it can pick the default buffer. + resumer.wasAbleToResume = function() { + return hasResumed; + }; + + // Clear out the recorded info. Maybe we'll do this when the user chooses to disconnect? + resumer.clear = function() { + record(undefined); + }; + + return resumer; +}]); +})(); diff --git a/js/glowingbear.js b/js/glowingbear.js index d5b83f6..35831c3 100644 --- a/js/glowingbear.js +++ b/js/glowingbear.js @@ -1,7 +1,7 @@ (function() { 'use strict'; -var weechat = angular.module('weechat', ['ngRoute', 'localStorage', 'weechatModels', 'plugins', 'IrcUtils', 'ngSanitize', 'ngWebsockets', 'ngTouch'], ['$compileProvider', function($compileProvider) { +var weechat = angular.module('weechat', ['ngRoute', 'localStorage', 'weechatModels', 'bufferResume', 'plugins', 'IrcUtils', 'ngSanitize', 'ngWebsockets', 'ngTouch'], ['$compileProvider', function($compileProvider) { // hacky way to be able to find out if we're in debug mode weechat.compileProvider = $compileProvider; }]); @@ -12,8 +12,8 @@ weechat.config(['$compileProvider', function ($compileProvider) { } }]); -weechat.controller('WeechatCtrl', ['$rootScope', '$scope', '$store', '$timeout', '$log', 'models', 'connection', 'notifications', 'utils', 'settings', - function ($rootScope, $scope, $store, $timeout, $log, models, connection, notifications, utils, settings) { +weechat.controller('WeechatCtrl', ['$rootScope', '$scope', '$store', '$timeout', '$log', 'models', 'bufferResume', 'connection', 'notifications', 'utils', 'settings', + function ($rootScope, $scope, $store, $timeout, $log, models, bufferResume, connection, notifications, utils, settings) { window.openBuffer = function(channel) { $scope.openBuffer(channel); @@ -45,6 +45,7 @@ weechat.controller('WeechatCtrl', ['$rootScope', '$scope', '$store', '$timeout', 'enableJSEmoji': (utils.isMobileUi() ? false : true), 'enableMathjax': false, 'customCSS': '', + "currentlyViewedBuffers":{}, }); $scope.settings = settings; diff --git a/js/handlers.js b/js/handlers.js index 960b368..f87376d 100644 --- a/js/handlers.js +++ b/js/handlers.js @@ -3,7 +3,7 @@ var weechat = angular.module('weechat'); -weechat.factory('handlers', ['$rootScope', '$log', 'models', 'plugins', 'notifications', function($rootScope, $log, models, plugins, notifications) { +weechat.factory('handlers', ['$rootScope', '$log', 'models', 'plugins', 'notifications', 'bufferResume', function($rootScope, $log, models, plugins, notifications, bufferResume) { var handleVersionInfo = function(message) { var content = message.objects[0].content; @@ -188,11 +188,17 @@ weechat.factory('handlers', ['$rootScope', '$log', 'models', 'plugins', 'notific buffer = new models.Buffer(bufferInfos[i]); models.addBuffer(buffer); // Switch to first buffer on startup - if (i === 0) { + var shouldResume = bufferResume.shouldResume(buffer); + if(shouldResume){ models.setActiveBuffer(buffer.id); } } } + // If there was no buffer to autmatically load, go to the first one. + if (!bufferResume.wasAbleToResume()) { + var first = bufferInfos[0].pointers[0]; + models.setActiveBuffer(first); + } }; var handleBufferUpdate = function(buffer, message) { diff --git a/js/models.js b/js/models.js index a485708..ba091c6 100644 --- a/js/models.js +++ b/js/models.js @@ -7,7 +7,7 @@ var models = angular.module('weechatModels', []); -models.service('models', ['$rootScope', '$filter', function($rootScope, $filter) { +models.service('models', ['$rootScope', '$filter', 'bufferResume', function($rootScope, $filter, bufferResume) { // WeeChat version this.version = null; @@ -547,6 +547,7 @@ models.service('models', ['$rootScope', '$filter', function($rootScope, $filter) $rootScope.$emit('activeBufferChanged', unreadSum); $rootScope.$emit('notificationChanged'); + bufferResume.record(activeBuffer); return true; }; diff --git a/package.json b/package.json index 17bc8d5..7658fd6 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "license": "GPLv3", "devDependencies": { "bower": "^1.3.1", - "electron-packager": "^6.0.0", + "electron-packager": "^7.0.0", "http-server": "^0.6.1", "jasmine-core": "^2.4.1", "jshint": "^2.5.2", @@ -16,14 +16,14 @@ "karma-jasmine": "^0.3.6", "karma-junit-reporter": "^0.2.2", "karma-phantomjs-launcher": "^0.2.1", - "phantomjs": "^1.9.19", + "phantomjs-prebuilt": "^2.1.1", "protractor": "~0.20.1", "shelljs": "^0.2.6", "uglify-js": "^2.4" }, "scripts": { "postinstall": "bower install", - "minify": " uglifyjs js/localstorage.js js/weechat.js js/irc-utils.js js/glowingbear.js js/settings.js js/utils.js js/notifications.js js/filters.js js/handlers.js js/connection.js js/file-change.js js/imgur-drop-directive.js js/whenscrolled-directive.js js/inputbar.js js/plugin-directive.js js/websockets.js js/models.js js/plugins.js js/imgur.js -c -m --screw-ie8 -o min.js --source-map min.map", + "minify": " uglifyjs js/localstorage.js js/weechat.js js/irc-utils.js js/glowingbear.js js/settings.js js/utils.js js/notifications.js js/filters.js js/handlers.js js/connection.js js/file-change.js js/imgur-drop-directive.js js/whenscrolled-directive.js js/inputbar.js js/plugin-directive.js js/websockets.js js/models.js js/bufferResume.js js/plugins.js js/imgur.js -c -m --screw-ie8 -o min.js --source-map min.map", "prestart": "npm install", "start": "http-server -a localhost -p 8000", "pretest": "npm install", diff --git a/test/karma.conf.js b/test/karma.conf.js index 66e3f04..8bafa0c 100644 --- a/test/karma.conf.js +++ b/test/karma.conf.js @@ -22,6 +22,7 @@ module.exports = function(config){ 'js/plugin-directive.js', 'js/websockets.js', 'js/models.js', + 'js/bufferResume.js', 'js/plugins.js', 'test/unit/**/*.js' ],