From e8ff1f757a75f3d999cb5ae2819bfbedd34440a8 Mon Sep 17 00:00:00 2001 From: Tim Date: Sun, 10 Dec 2023 18:13:38 +0100 Subject: [PATCH 1/2] feat: implement adaptative cache for Tizen --- src/withStreamingServer/getFreeSpace.js | 29 +++++++++++++++++++ src/withStreamingServer/removeAllStreams.js | 23 +++++++++++++++ src/withStreamingServer/setFreeSpace.js | 28 ++++++++++++++++++ .../withStreamingServer.js | 20 +++++++++++++ 4 files changed, 100 insertions(+) create mode 100644 src/withStreamingServer/getFreeSpace.js create mode 100644 src/withStreamingServer/removeAllStreams.js create mode 100644 src/withStreamingServer/setFreeSpace.js diff --git a/src/withStreamingServer/getFreeSpace.js b/src/withStreamingServer/getFreeSpace.js new file mode 100644 index 00000000..9c06fbd3 --- /dev/null +++ b/src/withStreamingServer/getFreeSpace.js @@ -0,0 +1,29 @@ +function getFreeSpace() { + return new Promise(function (resolve, reject) { + function onStorageInfo(info) { + if (info && info.units) { + var internalStorage = info.units.find(function (unit) { + return unit.type === 'INTERNAL'; + }); + + if (internalStorage && typeof internalStorage.availableCapacity === 'number') { + return resolve(internalStorage.availableCapacity); + } + + return reject(new Error('No internal storage found')); + } + } + + function onStorageInfoError(error) { + return reject(error); + } + + if (window.tizen) { + window.tizen.systeminfo.getPropertyValue('STORAGE', onStorageInfo, onStorageInfoError); + } else { + reject('Tizen api not available'); + } + }); +} + +module.exports = getFreeSpace; diff --git a/src/withStreamingServer/removeAllStreams.js b/src/withStreamingServer/removeAllStreams.js new file mode 100644 index 00000000..a62e036b --- /dev/null +++ b/src/withStreamingServer/removeAllStreams.js @@ -0,0 +1,23 @@ +var url = require('url'); + +function removeAllStreams(streamingServerURL) { + var endpoint = url.resolve(streamingServerURL, '/removeAll'); + + var options = { + method: 'GET', + headers: { + 'Content-Type': 'application/json' + }, + }; + + return fetch(endpoint, options) + .then(function(resp) { + if (resp.ok) { + return resp.json(); + } + + throw new Error(resp.status + ' (' + resp.statusText + ')'); + }); +} + +module.exports = removeAllStreams; diff --git a/src/withStreamingServer/setFreeSpace.js b/src/withStreamingServer/setFreeSpace.js new file mode 100644 index 00000000..de2b7c9a --- /dev/null +++ b/src/withStreamingServer/setFreeSpace.js @@ -0,0 +1,28 @@ +var url = require('url'); + +function setFreeSpace(streamingServerURL, freeSpace) { + var endpoint = url.resolve(streamingServerURL, '/setFreeSpace'); + + var body = JSON.stringify({ + freeSpace: freeSpace, + }); + + var options = { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: body, + }; + + return fetch(endpoint, options) + .then(function(resp) { + if (resp.ok) { + return resp.json(); + } + + throw new Error(resp.status + ' (' + resp.statusText + ')'); + }); +} + +module.exports = setFreeSpace; diff --git a/src/withStreamingServer/withStreamingServer.js b/src/withStreamingServer/withStreamingServer.js index e8ff6225..b0f72172 100644 --- a/src/withStreamingServer/withStreamingServer.js +++ b/src/withStreamingServer/withStreamingServer.js @@ -6,6 +6,9 @@ var deepFreeze = require('deep-freeze'); var mediaCapabilities = require('../mediaCapabilities'); var convertStream = require('./convertStream'); var fetchVideoParams = require('./fetchVideoParams'); +var getFreeSpace = require('./getFreeSpace'); +var setFreeSpace = require('./setFreeSpace'); +var removeAllStreams = require('./removeAllStreams'); var ERROR = require('../error'); function withStreamingServer(Video) { @@ -102,6 +105,17 @@ function withStreamingServer(Video) { video.dispatch({ type: 'command', commandName: 'unload' }); loadArgs = commandArgs; onPropChanged('stream'); + + getFreeSpace() + .then(function(freeSpace) { + setFreeSpace(commandArgs.streamingServerURL, freeSpace) + .catch(function(error) { + console.warn('Failed to set free space', error); + }); + }).catch(function(error) { + console.warn('Failed to get free space', error); + }); + convertStream(commandArgs.streamingServerURL, commandArgs.stream, commandArgs.seriesInfo) .then(function(result) { var mediaURL = result.url; @@ -273,6 +287,12 @@ function withStreamingServer(Video) { return true; } case 'unload': { + if (loadArgs && loadArgs.streamingServerURL) { + removeAllStreams(loadArgs.streamingServerURL) + .catch(function(error) { + console.warn('Failed to remove all streams', error); + }); + } loadArgs = null; loaded = false; actionsQueue = []; From 3f3f349203789043f6f16c6bc1a474a129f56a95 Mon Sep 17 00:00:00 2001 From: Tim Date: Thu, 14 Dec 2023 14:20:47 +0100 Subject: [PATCH 2/2] refactor(withStreamingServer): use wipeAll instead of removeAll --- src/withStreamingServer/{removeAllStreams.js => wipeAll.js} | 6 +++--- src/withStreamingServer/withStreamingServer.js | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) rename src/withStreamingServer/{removeAllStreams.js => wipeAll.js} (72%) diff --git a/src/withStreamingServer/removeAllStreams.js b/src/withStreamingServer/wipeAll.js similarity index 72% rename from src/withStreamingServer/removeAllStreams.js rename to src/withStreamingServer/wipeAll.js index a62e036b..c40bc666 100644 --- a/src/withStreamingServer/removeAllStreams.js +++ b/src/withStreamingServer/wipeAll.js @@ -1,7 +1,7 @@ var url = require('url'); -function removeAllStreams(streamingServerURL) { - var endpoint = url.resolve(streamingServerURL, '/removeAll'); +function wipeAll(streamingServerURL) { + var endpoint = url.resolve(streamingServerURL, '/wipeAll'); var options = { method: 'GET', @@ -20,4 +20,4 @@ function removeAllStreams(streamingServerURL) { }); } -module.exports = removeAllStreams; +module.exports = wipeAll; diff --git a/src/withStreamingServer/withStreamingServer.js b/src/withStreamingServer/withStreamingServer.js index b0f72172..1069c80d 100644 --- a/src/withStreamingServer/withStreamingServer.js +++ b/src/withStreamingServer/withStreamingServer.js @@ -8,7 +8,7 @@ var convertStream = require('./convertStream'); var fetchVideoParams = require('./fetchVideoParams'); var getFreeSpace = require('./getFreeSpace'); var setFreeSpace = require('./setFreeSpace'); -var removeAllStreams = require('./removeAllStreams'); +var wipeAll = require('./wipeAll'); var ERROR = require('../error'); function withStreamingServer(Video) { @@ -288,7 +288,7 @@ function withStreamingServer(Video) { } case 'unload': { if (loadArgs && loadArgs.streamingServerURL) { - removeAllStreams(loadArgs.streamingServerURL) + wipeAll(loadArgs.streamingServerURL) .catch(function(error) { console.warn('Failed to remove all streams', error); });