homebridge-kodi
Version:
Kodi plugin for Homebridge
167 lines • 8.23 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.VideoLibraryCleanSwitchAccessory = exports.VideoLibraryScanSwitchAccessory = void 0;
const internal_1 = require("../../internal");
const kodi = require("../kodi");
// ===================================
// = VideoLibraryScanSwitchAccessory =
// ===================================
class VideoLibraryScanSwitchAccessory extends internal_1.KodiAccessory {
constructor(platform, accessory, log, config, name, version) {
super();
this.platform = platform;
this.accessory = accessory;
this.log = log;
this.config = config;
this.name = name;
this.version = version;
this.log.info('Adding VideoLibraryScanSwitchAccessory');
this.accessory.getService(this.platform.Service.AccessoryInformation)
.setCharacteristic(this.platform.Characteristic.Name, name)
.setCharacteristic(this.platform.Characteristic.Manufacturer, 'github.com DeutscheMark')
.setCharacteristic(this.platform.Characteristic.Model, 'Homebridge-Kodi VideoLibraryScanSwitch')
.setCharacteristic(this.platform.Characteristic.SerialNumber, this.platform.api.hap.uuid.generate(name))
.setCharacteristic(this.platform.Characteristic.FirmwareRevision, version);
this.switchService =
this.accessory.getService(this.platform.Service.Switch) || this.accessory.addService(this.platform.Service.Switch);
this.switchService.setCharacteristic(this.platform.Characteristic.Name, name);
this.switchService.getCharacteristic(this.platform.Characteristic.On)
.onGet(async () => {
return kodi.getActionResult(this.config, 'XBMC.GetInfoBooleans', { 'booleans': ['Library.IsScanningVideo'] })
.then(([, result]) => {
if (result) {
const isScanning = result['Library.IsScanningVideo'];
this.log.debug('Getting ' + this.name + ': ' + isScanning);
return isScanning;
}
else {
return false;
}
})
.catch(error => {
this.log.error('Getting ' + this.name + ' - Error: ' + error.message);
return false;
});
})
.onSet(async (on) => {
if (on) {
kodi.getActionResult(this.config, 'VideoLibrary.Scan', { 'showdialogs': true })
.then(ok => {
if (ok) {
this.log.debug('Setting ' + this.name + ': ' + on);
}
else {
this.log.debug('Setting ' + this.name + ': ' + on + ' (not ok)');
}
})
.catch(error => {
this.log.error('Setting ' + this.name + ': ' + on + ' - Error: ' + error.message);
});
}
else {
this.log.debug('Setting ' + this.name + ': ' + on + ' - A scan can\'t be stopped.');
this.resetToCurrentStatus(on); // Setting to off is not supported by Kodi JSON-RPC
}
});
}
resetToCurrentStatus(on) {
kodi.getActionResult(this.config, 'XBMC.GetInfoBooleans', { 'booleans': ['Library.IsScanningVideo'] })
.then(([, result]) => {
if (result) {
const isScanning = result['Library.IsScanningVideo'];
this.log.debug('Setting ' + this.name + ': ' + isScanning);
this.updateValue(isScanning);
}
else {
this.log.debug('Setting ' + this.name + ': ' + on + ' (no result)');
this.updateValue(false);
}
})
.catch(error => {
this.log.error('Setting ' + this.name + ': ' + on + ' - Error: ' + error.message);
this.updateValue(false);
});
}
updateValue(on) {
setTimeout(() => {
this.switchService.getCharacteristic(this.platform.api.hap.Characteristic.On).updateValue(on);
}, 100);
}
}
exports.VideoLibraryScanSwitchAccessory = VideoLibraryScanSwitchAccessory;
// ====================================
// = VideoLibraryCleanSwitchAccessory =
// ====================================
class VideoLibraryCleanSwitchAccessory extends internal_1.KodiAccessory {
constructor(platform, accessory, log, config, name, version) {
super();
this.platform = platform;
this.accessory = accessory;
this.log = log;
this.config = config;
this.name = name;
this.version = version;
this.log.info('Adding VideoLibraryCleanSwitchAccessory');
this.accessory.getService(this.platform.Service.AccessoryInformation)
.setCharacteristic(this.platform.Characteristic.Name, name)
.setCharacteristic(this.platform.Characteristic.Manufacturer, 'github.com DeutscheMark')
.setCharacteristic(this.platform.Characteristic.Model, 'Homebridge-Kodi VideoLibraryCleanSwitch')
.setCharacteristic(this.platform.Characteristic.SerialNumber, this.platform.api.hap.uuid.generate(name))
.setCharacteristic(this.platform.Characteristic.FirmwareRevision, version);
this.switchService =
this.accessory.getService(this.platform.Service.Switch) || this.accessory.addService(this.platform.Service.Switch);
this.switchService.setCharacteristic(this.platform.Characteristic.Name, name);
this.switchService.getCharacteristic(this.platform.Characteristic.On)
.onGet(async () => {
return kodi.storageGetItem(this.platform.api.user.persistPath(), this.name)
.then(on => {
this.log.debug('Getting ' + this.name + ': ' + on);
return on === 'true' ? true : false;
})
.catch(error => {
this.log.error('Getting ' + this.name + ' - Error: ' + error.message);
return false;
});
})
.onSet(async (on) => {
if (on) {
// TODO: This takes as long as the clean and produces Timeout-Errors because of that. Should be more async!
kodi.getActionResult(this.config, 'VideoLibrary.Clean', { 'showdialogs': true })
.then(([ok, result]) => {
if (ok && result) {
this.persistStatus(true);
}
else {
this.log.debug('Setting ' + this.name + ': ' + on + ' - Clean did not start!');
this.updateValueAndPersist(false);
}
})
.catch(error => {
this.log.error('Setting ' + this.name + ': ' + on + ' - Error: ' + error.message);
this.updateValueAndPersist(false);
});
}
else {
this.log.debug('Setting ' + this.name + ': ' + on + ' - A clean can\'t be stopped.');
this.persistStatus(false); // Setting to off is not supported by Kodi JSON-RPC
}
});
}
updateValueAndPersist(on) {
setTimeout(() => {
this.switchService.getCharacteristic(this.platform.api.hap.Characteristic.On).updateValue(on);
}, 100);
this.persistStatus(on);
}
persistStatus(status) {
kodi.storageSetItem(this.platform.api.user.persistPath(), this.name, status ? 'true' : 'false')
.then(() => {
this.log.debug('Setting ' + this.name + ': ' + status + ' - Status is persisted!');
})
.catch(error => {
this.log.error('Setting ' + this.name + ': ' + status + ' - Error: ' + error.message);
});
}
}
exports.VideoLibraryCleanSwitchAccessory = VideoLibraryCleanSwitchAccessory;
//# sourceMappingURL=kodiVideoLibraryAccessory.js.map