diff --git a/app/common/main-controller.js b/app/common/main-controller.js index 67fa692..377db03 100644 --- a/app/common/main-controller.js +++ b/app/common/main-controller.js @@ -351,35 +351,6 @@ } }); }; - $scope.ping = function () { - return $http({ - method: 'GET', - timeout: globals.settings.Timeout, - url: globals.BaseURL() + '/ping.view?' + globals.BaseParams(), - }).error(function (data) { - notifications.updateMessage('Unable to connect to Subsonic server'); - }); - /* - $.ajax({ - url: globals.BaseURL() + '/ping.view?' + globals.BaseParams(), - method: 'GET', - dataType: globals.settings.Protocol, - timeout: globals.settings.Timeout, - success: function (data) { - if (data["subsonic-response"].status == 'ok') { - globals.settings.ApiVersion = data["subsonic-response"].version; - } else { - if (typeof data["subsonic-response"].error != 'undefined') { - notifications.updateMessage(data["subsonic-response"].error.message); - } - } - }, - error: function () { - notifications.updateMessage('Unable to connect to Subsonic server'); - } - }); - */ - }; $scope.queueRemoveSelected = function (data, event) { angular.forEach($scope.selectedSongs, function (item, key) { var index = $rootScope.queue.indexOf(item); diff --git a/app/settings/settings-service.js b/app/settings/settings-service.js index edd541e..bb790c8 100644 --- a/app/settings/settings-service.js +++ b/app/settings/settings-service.js @@ -70,6 +70,7 @@ angular.module('jamstash.settings', []) this.BaseURL = function () { return this.settings.Server + '/rest'; }; this.BaseParams = function () { return 'u=' + this.settings.Username + '&p=' + this.settings.Password + '&f=' + this.settings.Protocol + '&v=' + this.settings.ApiVersion + '&c=' + this.settings.ApplicationName; }; + this.BaseJSONParams = function () { return 'u=' + this.settings.Username + '&p=' + this.settings.Password + '&f=json&v=' + this.settings.ApiVersion + '&c=' + this.settings.ApplicationName; }; }) .factory('json', ['$http', function ($http) { // Deferred loading diff --git a/app/settings/settings.js b/app/settings/settings.js index 6028972..30b7039 100644 --- a/app/settings/settings.js +++ b/app/settings/settings.js @@ -1,10 +1,11 @@ angular.module('JamStash') -.controller('SettingsCtrl', ['$rootScope', '$scope', '$routeParams', '$location', 'utils', 'globals', 'json', 'notifications', 'player', - function ($rootScope, $scope, $routeParams, $location, utils, globals, json, notifications, player) { +.controller('SettingsCtrl', ['$rootScope', '$scope', '$routeParams', '$location', '$http', '$q', 'utils', 'globals', 'json', 'notifications', 'player', + function ($rootScope, $scope, $routeParams, $location, $http, $q, utils, globals, json, notifications, player) { 'use strict'; $rootScope.hideQueue(); $scope.settings = globals.settings; /* See service.js */ + $scope.ApiVersion = globals.settings.ApiVersion; $scope.Timeouts = [ { id: 10000, name: 10 }, { id: 20000, name: 20 }, @@ -27,6 +28,34 @@ $('#AZIndex').show(); } }); + $scope.ping = function () { + var exception = {reason: 'Error when contacting the Subsonic server.'}; + var deferred = $q.defer(); + var httpPromise; + httpPromise = $http({ + method: 'GET', + timeout: globals.settings.Timeout, + // 2015-1-5: This API call only works with json as of SS v5.0?!? + //url: globals.BaseURL() + '/ping.view?' + globals.BaseParams(), + url: globals.BaseURL() + '/ping.view?' + globals.BaseJSONParams() + }); + httpPromise.success(function(data, status) { + var subsonicResponse = (data['subsonic-response'] !== undefined) ? data['subsonic-response'] : {status: 'failed'}; + if (subsonicResponse.status === 'ok') { + $scope.ApiVersion = subsonicResponse.version; + globals.settings.ApiVersion = $scope.ApiVersion; + deferred.resolve(data); + } else { + if(subsonicResponse.status === 'failed' && subsonicResponse.error !== undefined) { + notifications.updateMessage(subsonicResponse.error.message); + } + } + }).error(function(data, status) { + exception.httpError = status; + deferred.reject(exception); + }); + return deferred.promise; + }; $scope.reset = function () { utils.setValue('Settings', null, true); $scope.loadSettings(); @@ -63,16 +92,9 @@ notifications.updateMessage('Settings Updated!', true); $scope.loadSettings(); if (globals.settings.Server !== '' && globals.settings.Username !== '' && globals.settings.Password !== '') { - $scope.ping().then(function(data) { - if (data["subsonic-response"].status == 'ok') { - globals.settings.ApiVersion = data["subsonic-response"].version; - $location.path('/library').replace(); - $rootScope.showIndex = true; - } else { - if (typeof data["subsonic-response"].error != 'undefined') { - notifications.updateMessage(data["subsonic-response"].error.message); - } - } + $scope.ping().then(function() { + $location.path('/library').replace(); + $rootScope.showIndex = true; }); } };