From 67e00e798d85d897e4793077aa14bcb4fb3d1765 Mon Sep 17 00:00:00 2001 From: Bernhard Posselt Date: Fri, 19 Apr 2013 12:31:54 +0200 Subject: added javascript for uploading google reader json files --- appinfo/routes.php | 2 +- js/app/controllers/settingscontroller.coffee | 12 ++++++ .../businesslayer/feedbusinesslayer.coffee | 16 ++++++++ js/app/services/persistence.coffee | 8 ++++ js/public/app.js | 44 +++++++++++++++++++++- js/tests/controllers/settingscontrollerSpec.coffee | 29 +++++++++++++- .../businesslayer/feedbusinesslayerSpec.coffee | 33 +++++++++++++++- js/tests/services/persistenceSpec.coffee | 13 ++++++- templates/part.settings.php | 5 +-- 9 files changed, 154 insertions(+), 8 deletions(-) diff --git a/appinfo/routes.php b/appinfo/routes.php index 948a17566..f6b05ed01 100644 --- a/appinfo/routes.php +++ b/appinfo/routes.php @@ -127,7 +127,7 @@ $this->create('news_feeds_read', '/feeds/{feedId}/read')->post()->action( $this->create('news_feeds_import_googlereader', '/feeds/import/googlereader') ->post()->action( function($params){ - App::main('ItemController', 'importGoogleReader', $params, + App::main('FeedController', 'importGoogleReader', $params, new DIContainer()); } ); diff --git a/js/app/controllers/settingscontroller.coffee b/js/app/controllers/settingscontroller.coffee index a1632a761..ef282c900 100644 --- a/js/app/controllers/settingscontroller.coffee +++ b/js/app/controllers/settingscontroller.coffee @@ -37,4 +37,16 @@ angular.module('News').controller 'SettingsController', console.error error $scope.error = true + + $scope.importGoogleReader = (fileContent) => + $scope.jsonError = false + ShowAll.setShowAll(true) + + try + parsedJSON = JSON.parse(fileContent) + FeedBusinessLayer.importGoogleReader(parsedJSON) + catch error + console.error error + $scope.jsonError = true + ] \ No newline at end of file diff --git a/js/app/services/businesslayer/feedbusinesslayer.coffee b/js/app/services/businesslayer/feedbusinesslayer.coffee index f02252618..a2fa0df3e 100644 --- a/js/app/services/businesslayer/feedbusinesslayer.coffee +++ b/js/app/services/businesslayer/feedbusinesslayer.coffee @@ -172,6 +172,22 @@ FeedModel, NewLoading, _ExistsError, Utils) -> @_persistence.updateFeed(feed.id) + importGoogleReader: (json) -> + url = 'http://owncloud/googlereader' # hardcoded + + if angular.isUndefined(@_feedModel.getByUrl(url)) + feed = + title: 'Google Reader' + url: url + folderId: 0 + unreadCount: 0 + faviconLink: 'url('+@_utils.imagePath('core', 'loading.gif')+')' + + @_feedModel.add(feed) + + @_persistence.importGoogleReader(json) + + return new FeedBusinessLayer(ShowAll, FeedModel, Persistence, ActiveFeed, FeedType, ItemModel, NewLoading, Utils) diff --git a/js/app/services/persistence.coffee b/js/app/services/persistence.coffee index 06945f433..88d1d18cc 100644 --- a/js/app/services/persistence.coffee +++ b/js/app/services/persistence.coffee @@ -248,6 +248,14 @@ $rootScope) -> @_request.post 'news_feeds_update', params + importGoogleReader: (json) -> + params = + data: + json: json + + @_request.post 'news_feeds_import_googlereader', params + + ### FOLDER CONTROLLER ### diff --git a/js/public/app.js b/js/public/app.js index 855bcd895..7422fc83a 100644 --- a/js/public/app.js +++ b/js/public/app.js @@ -545,7 +545,7 @@ License along with this library. If not, see . var _this = this; $scope.feedBusinessLayer = FeedBusinessLayer; - return $scope["import"] = function(fileContent) { + $scope["import"] = function(fileContent) { var error; $scope.error = false; @@ -558,6 +558,20 @@ License along with this library. If not, see . return $scope.error = true; } }; + return $scope.importGoogleReader = function(fileContent) { + var error, parsedJSON; + + $scope.jsonError = false; + ShowAll.setShowAll(true); + try { + parsedJSON = JSON.parse(fileContent); + return FeedBusinessLayer.importGoogleReader(parsedJSON); + } catch (_error) { + error = _error; + console.error(error); + return $scope.jsonError = true; + } + }; } ]); @@ -898,6 +912,23 @@ License along with this library. If not, see . return _results; }; + FeedBusinessLayer.prototype.importGoogleReader = function(json) { + var feed, url; + + url = 'http://owncloud/googlereader'; + if (angular.isUndefined(this._feedModel.getByUrl(url))) { + feed = { + title: 'Google Reader', + url: url, + folderId: 0, + unreadCount: 0, + faviconLink: 'url(' + this._utils.imagePath('core', 'loading.gif') + ')' + }; + this._feedModel.add(feed); + } + return this._persistence.importGoogleReader(json); + }; + return FeedBusinessLayer; })(_BusinessLayer); @@ -2516,6 +2547,17 @@ License along with this library. If not, see . return this._request.post('news_feeds_update', params); }; + Persistence.prototype.importGoogleReader = function(json) { + var params; + + params = { + data: { + json: json + } + }; + return this._request.post('news_feeds_import_googlereader', params); + }; + /* FOLDER CONTROLLER */ diff --git a/js/tests/controllers/settingscontrollerSpec.coffee b/js/tests/controllers/settingscontrollerSpec.coffee index 88e16c969..dca53ff4b 100644 --- a/js/tests/controllers/settingscontrollerSpec.coffee +++ b/js/tests/controllers/settingscontrollerSpec.coffee @@ -56,4 +56,31 @@ describe 'SettingsController', -> @scope.import(xml) expect(@ShowAll.getShowAll()).toBe(true) - \ No newline at end of file + + + it 'should set showall to true if importing json', => + json = "[\"test\"]" + + @scope.importGoogleReader(json) + + expect(@ShowAll.getShowAll()).toBe(true) + + + it 'should show an error if the json import failed', => + json = 'test' + + @scope.importGoogleReader(json) + + expect(@scope.jsonError).toBe(true) + + + it 'should import json', => + @FeedBusinessLayer.importGoogleReader = jasmine.createSpy('googlereader') + json = "{\"test\": \"abc\"}" + + @scope.importGoogleReader(json) + + expected = JSON.parse(json) + expect(@FeedBusinessLayer.importGoogleReader).toHaveBeenCalledWith( + expected + ) diff --git a/js/tests/services/businesslayer/feedbusinesslayerSpec.coffee b/js/tests/services/businesslayer/feedbusinesslayerSpec.coffee index f867443c7..5ac93f25e 100644 --- a/js/tests/services/businesslayer/feedbusinesslayerSpec.coffee +++ b/js/tests/services/businesslayer/feedbusinesslayerSpec.coffee @@ -344,4 +344,35 @@ describe 'FeedBusinessLayer', -> @FeedBusinessLayer.updateFeeds() - expect(@persistence.updateFeed).not.toHaveBeenCalled() \ No newline at end of file + expect(@persistence.updateFeed).not.toHaveBeenCalled() + + + it 'should not import google reader json', => + @persistence.importGoogleReader = jasmine.createSpy('importGoogleReader') + + json = {"test": "hi"} + @FeedBusinessLayer.importGoogleReader(json) + + imported = @FeedModel.getByUrl('http://owncloud/googlereader') + expect(imported.title).toBe('Google Reader') + expect(imported.folderId).toBe(0) + expect(imported.unreadCount).toBe(0) + + + it 'should not create a google reader feed if it already exists', => + @persistence.importGoogleReader = jasmine.createSpy('importGoogleReader') + + @FeedModel.add({id: 3, url: 'http://owncloud/googlereader'}) + json = {"test": "hi"} + @FeedBusinessLayer.importGoogleReader(json) + + imported = @FeedModel.getByUrl('http://owncloud/googlereader') + expect(imported.folderId).not.toBeDefined() + + + it 'should create an import google reader request', => + @persistence.importGoogleReader = jasmine.createSpy('importGoogleReader') + json = {"test": "hi"} + @FeedBusinessLayer.importGoogleReader(json) + + expect(@persistence.importGoogleReader).toHaveBeenCalledWith(json) \ No newline at end of file diff --git a/js/tests/services/persistenceSpec.coffee b/js/tests/services/persistenceSpec.coffee index 3fca95cc2..98bd96531 100644 --- a/js/tests/services/persistenceSpec.coffee +++ b/js/tests/services/persistenceSpec.coffee @@ -237,6 +237,17 @@ describe 'Persistence', -> expect(@req.post).toHaveBeenCalledWith('news_feeds_create', params) + it 'should do a proper import google reader request', => + params = + data: + json: {"some": "json"} + + @Persistence.importGoogleReader(params.data.json) + + + expect(@req.post).toHaveBeenCalledWith('news_feeds_import_googlereader', + params) + ### FOLDER CONTROLLER @@ -367,4 +378,4 @@ describe 'Persistence', -> onFailure: jasmine.any(Function) expect(@req.get).toHaveBeenCalledWith('news_usersettings_language', - expected) \ No newline at end of file + expected) diff --git a/templates/part.settings.php b/templates/part.settings.php index ed0372241..b245ee3be 100644 --- a/templates/part.settings.php +++ b/templates/part.settings.php @@ -49,10 +49,9 @@ t('Import')); ?> -

- t('Error when importing: file does not contain valid OPML')); ?> +

+ t('Error when importing: file does not contain valid JSON')); ?>

- \ No newline at end of file -- cgit v1.2.3