Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
This commit is contained in:
parent
93e3a48004
commit
b38dea0597
25901 changed files with 9982925 additions and 369 deletions
145
gaia/tv_apps/dlna-player/js/service_manager.js
Executable file
145
gaia/tv_apps/dlna-player/js/service_manager.js
Executable file
|
|
@ -0,0 +1,145 @@
|
|||
/* globals Plug, deviceManager */
|
||||
'use strict';
|
||||
|
||||
(function(exports) {
|
||||
var DEBUG = false;
|
||||
function ServiceManager() {
|
||||
|
||||
}
|
||||
|
||||
ServiceManager.prototype = {
|
||||
listElementId: 'elementList',
|
||||
serviceName: 'ConnectionManager',
|
||||
serviceType: 'upnp:urn:schemas-upnp-org:service:ConnectionManager:1',
|
||||
serviceConstructor: Plug.UPnP_ContentDirectory,
|
||||
savedServices: {},
|
||||
|
||||
init: function sm_init() {
|
||||
this.debugEl = document.getElementById('debug');
|
||||
this.listElement = document.getElementById(this.listElementId);
|
||||
this.discover();
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
debugLog: function sm_debugLog(msg, level) {
|
||||
if (!DEBUG && level == 'debug') {
|
||||
return;
|
||||
}
|
||||
var logEl = document.createElement('div');
|
||||
logEl.textContent = msg;
|
||||
this.debugEl.appendChild(logEl);
|
||||
},
|
||||
|
||||
appendMixinProperties: function sm_appendConfigDocument(serviceWrapper) {
|
||||
var parser = new DOMParser();
|
||||
serviceWrapper.configDocument =
|
||||
parser.parseFromString(serviceWrapper.svc.config, 'text/xml');
|
||||
serviceWrapper.friendlyName = serviceWrapper.configDocument.
|
||||
getElementsByTagName('friendlyName')[0].textContent;
|
||||
},
|
||||
|
||||
updateService: function sm_updateService(service) {
|
||||
if (!this.savedServices[service.id]) {
|
||||
var mediaServer =
|
||||
new this.serviceConstructor(service, { debug: false });
|
||||
this.appendMixinProperties(mediaServer);
|
||||
this.savedServices[service.id] = mediaServer;
|
||||
deviceManager.addService(mediaServer);
|
||||
|
||||
var serverItem = this.serverView(mediaServer);
|
||||
this.listElement.appendChild(serverItem);
|
||||
mediaServer.serverItem = serverItem;
|
||||
}
|
||||
},
|
||||
|
||||
removeService: function sm_removeService(service) {
|
||||
for(var id in this.savedServices) {
|
||||
if (service.id === id) {
|
||||
var serverItem = this.savedServices[service.id].serverItem;
|
||||
this.removeSiblingList(serverItem);
|
||||
serverItem.parentElement.removeChild(serverItem);
|
||||
delete this.savedServices[service.id];
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
serverView: function sm_serverView(serviceWrapper) {
|
||||
// Add server node
|
||||
var serverItem = document.createElement('li');
|
||||
var serverName = serviceWrapper.friendlyName;
|
||||
serverItem.className = 'server';
|
||||
serverItem.textContent = serverName;
|
||||
serverItem.dataset.serviceId = serviceWrapper.svc.id;
|
||||
return serverItem;
|
||||
},
|
||||
|
||||
onServices: function sm_onServices(services) {
|
||||
services.addEventListener('servicefound', function servicefound(e) {
|
||||
for (var i = 0; i < services.length; i++) {
|
||||
if (services[i].online) {
|
||||
this.updateService(services[i]);
|
||||
}
|
||||
}
|
||||
}.bind(this));
|
||||
services.addEventListener('servicelost', function servicelost(e) {
|
||||
for (var i = 0; i < services.length; i++) {
|
||||
if (!services[i].online) {
|
||||
this.removeService(services[i]);
|
||||
}
|
||||
}
|
||||
}.bind(this));
|
||||
|
||||
this.debugLog(services.length + ' service' +
|
||||
(services.length !== 1 ? 's' : '') +
|
||||
' found in the current network');
|
||||
|
||||
// Remove offline services
|
||||
for (var savedServiceId in this.savedServices) {
|
||||
var removed = true;
|
||||
for (var i = 0; i < services.length; i++) {
|
||||
if (services[i].id == savedServiceId) {
|
||||
removed = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (removed) {
|
||||
this.remove(savedServiceId);
|
||||
}
|
||||
}
|
||||
|
||||
// Update services individually
|
||||
for (var j = 0; j < services.length; j++) {
|
||||
this.updateService(services[j]);
|
||||
}
|
||||
},
|
||||
|
||||
get currentService() {
|
||||
return deviceManager.getSelectedService(this.serviceName);
|
||||
},
|
||||
|
||||
|
||||
removeSiblingList: function sm_remove(elem) {
|
||||
if (elem.nextElementSibling.classList.contains('sublist')) {
|
||||
elem.parentElement.removeChild(elem.nextElementSibling);
|
||||
}
|
||||
},
|
||||
|
||||
discover: function sm_discover() {
|
||||
if (navigator.getNetworkServices) {
|
||||
this.debugLog('Searching for UPnP services in the current network...');
|
||||
|
||||
navigator.getNetworkServices(this.serviceType)
|
||||
.then(this.onServices.bind(this), function(e) {
|
||||
this.debugLog('An error occurred obtaining UPnP Services [CODE: ' +
|
||||
e.code + ']');
|
||||
});
|
||||
} else {
|
||||
this.debugLog(
|
||||
'navigator.getNetworkServices API is not supported in this browser');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
exports.ServiceManager = ServiceManager;
|
||||
})(window);
|
||||
Loading…
Reference in a new issue