'use strict'; (function () { /** * The RepoService provides access to repository * data using REST API calls. */ function RepoService($http, $window) { var callback, websocket, token = localStorage.getItem('access_token'); /** * Gets a list of all repositories. */ this.list = function () { return $http.get('/api/user/repos'); }; /** * Gets a repository by name. * * @param {string} Name of the repository. */ this.get = function (repoName) { return $http.get('/api/repos/' + repoName); }; /** * Creates a new repository. * * @param {object} JSON representation of a repository. */ this.post = function (repoName) { return $http.post('/api/repos/' + repoName); }; /** * Updates an existing repository. * * @param {object} JSON representation of a repository. */ this.update = function (repo) { return $http.patch('/api/repos/' + repo.full_name, repo); }; /** * Deletes a repository. * * @param {string} Name of the repository. */ this.delete = function (repoName) { return $http.delete('/api/repos/' + repoName); }; /** * Watch a repository. * * @param {string} Name of the repository. */ this.watch = function (repoName) { return $http.post('/api/repos/' + repoName + '/watch'); }; /** * Unwatch a repository. * * @param {string} Name of the repository. */ this.unwatch = function (repoName) { return $http.delete('/api/repos/' + repoName + '/unwatch'); }; var callback, events, token = localStorage.getItem('access_token'); /** * Subscribes to a live update feed for a repository * * @param {string} Name of the repository. */ this.subscribe = function (repo, _callback) { callback = _callback; events = new EventSource("/api/stream/" + repo + "?access_token=" + token, {withCredentials: true}); events.onmessage = function (event) { if (callback !== undefined) { callback(angular.fromJson(event.data)); } }; events.onerror = function (event) { callback = undefined; if (events !== undefined) { events.close(); events = undefined; } console.log('user event stream closed due to error.', event); }; }; this.unsubscribe = function () { callback = undefined; if (events !== undefined) { events.close(); events = undefined; } }; } angular .module('drone') .service('repos', RepoService); })();