yoichiro/chrome_mysql_admin

View on GitHub
app/scripts/window/services/favorite_service.js

Summary

Maintainability
B
6 hrs
Test Coverage
chromeMyAdmin.factory("favoriteService", function(
    $rootScope,
    $q,
    Events
) {
    "use strict";

    var doSelect = function(name) {
        var deferred = $q.defer();
        chrome.storage.local.get("favorites", function(items) {
            var favorites = items.favorites || {};
            var result = favorites[name];
            if (result) {
                result.name = name;
                $rootScope.$broadcast(Events.FAVORITE_SELECTED, result);
                deferred.resolve(result);
            } else {
                deferred.reject();
            }
        });
        return deferred.promise;
    };

    return {
        set: function(name, hostName, port, userName, password, useSSL, caCert, checkCN, usePortForwarding, ssh2HostName, ssh2Port, ssh2AuthType, ssh2UserName, ssh2Password, ssh2PrivateKey) {
            var deferred = $q.defer();
            chrome.storage.local.get("favorites", function(items) {
                var favorites = items.favorites || {};
                var favorite = favorites[name] || {};
                favorite.hostName = hostName;
                favorite.port = port;
                favorite.userName = userName;
                favorite.password = password;
                favorite.useSSL = useSSL;
                favorite.caCert = caCert;
                favorite.checkCN = checkCN;
                favorite.usePortForwarding = usePortForwarding;
                favorite.ssh2HostName = ssh2HostName;
                favorite.ssh2Port = ssh2Port;
                favorite.ssh2AuthType = ssh2AuthType;
                favorite.ssh2UserName = ssh2UserName;
                favorite.ssh2Password = ssh2Password;
                favorite.ssh2PrivateKey = ssh2PrivateKey;
                favorites[name] = favorite;
                chrome.storage.local.set({favorites: favorites}, function() {
                    $rootScope.$broadcast(Events.FAVORITES_CHANGED, favorites);
                    deferred.resolve();
                });
            });
            return deferred.promise;
        },
        select: function(name) {
            return doSelect(name);
        },
        selectAndLogin: function(name) {
            doSelect(name).then(function(result) {
                $rootScope.login();
            });
        },
        getAll: function() {
            var deferred = $q.defer();
            chrome.storage.local.get("favorites", function(items) {
                var favorites = items.favorites || {};
                deferred.resolve(favorites);
            });
            return deferred.promise;
        },
        delete: function(name) {
            var deferred = $q.defer();
            chrome.storage.local.get("favorites", function(items) {
                var favorites = items.favorites || {};
                delete favorites[name];
                chrome.storage.local.set({favorites: favorites}, function() {
                    $rootScope.$broadcast(Events.FAVORITES_CHANGED, favorites);
                    deferred.resolve();
                });
            });
            return deferred.promise;
        }
    };

});