jellyfish-web/src/components/recordingcreator/recordinghelper.js

195 lines
7.2 KiB
JavaScript
Raw Normal View History

2019-03-19 17:03:11 -07:00
define(['globalize', 'loading', 'connectionManager'], function (globalize, loading, connectionManager) {
'use strict';
2018-10-23 01:05:09 +03:00
2020-07-28 23:08:27 +01:00
loading = loading.default || loading;
2018-10-23 01:05:09 +03:00
function changeRecordingToSeries(apiClient, timerId, programId, confirmTimerCancellation) {
loading.show();
return apiClient.getItem(apiClient.getCurrentUserId(), programId).then(function (item) {
if (item.IsSeries) {
// create series
return apiClient.getNewLiveTvTimerDefaults({ programId: programId }).then(function (timerDefaults) {
return apiClient.createLiveTvSeriesTimer(timerDefaults).then(function () {
loading.hide();
sendToast(globalize.translate('SeriesRecordingScheduled'));
});
});
} else {
2019-03-19 17:03:11 -07:00
// cancel
if (confirmTimerCancellation) {
return cancelTimerWithConfirmation(timerId, apiClient.serverId());
}
return cancelTimer(apiClient.serverId(), timerId, true);
}
});
2018-10-23 01:05:09 +03:00
}
function cancelTimerWithConfirmation(timerId, serverId) {
return new Promise(function (resolve, reject) {
require(['confirm'], function (confirm) {
2020-06-18 22:41:43 +03:00
confirm.default({
text: globalize.translate('MessageConfirmRecordingCancellation'),
2019-09-06 02:02:58 -07:00
primary: 'delete',
confirmText: globalize.translate('HeaderCancelRecording'),
cancelText: globalize.translate('HeaderKeepRecording')
}).then(function () {
loading.show();
var apiClient = connectionManager.getApiClient(serverId);
cancelTimer(apiClient, timerId, true).then(resolve, reject);
}, reject);
});
});
2018-10-23 01:05:09 +03:00
}
function cancelSeriesTimerWithConfirmation(timerId, serverId) {
return new Promise(function (resolve, reject) {
require(['confirm'], function (confirm) {
2020-06-18 22:41:43 +03:00
confirm.default({
text: globalize.translate('MessageConfirmRecordingCancellation'),
2019-09-06 02:02:58 -07:00
primary: 'delete',
confirmText: globalize.translate('HeaderCancelSeries'),
cancelText: globalize.translate('HeaderKeepSeries')
}).then(function () {
loading.show();
var apiClient = connectionManager.getApiClient(serverId);
apiClient.cancelLiveTvSeriesTimer(timerId).then(function () {
require(['toast'], function (toast) {
toast(globalize.translate('SeriesCancelled'));
});
loading.hide();
resolve();
}, reject);
}, reject);
});
});
2018-10-23 01:05:09 +03:00
}
function cancelTimer(apiClient, timerId, hideLoading) {
loading.show();
return apiClient.cancelLiveTvTimer(timerId).then(function () {
if (hideLoading !== false) {
loading.hide();
sendToast(globalize.translate('RecordingCancelled'));
}
});
2018-10-23 01:05:09 +03:00
}
function createRecording(apiClient, programId, isSeries) {
loading.show();
return apiClient.getNewLiveTvTimerDefaults({ programId: programId }).then(function (item) {
var promise = isSeries ?
apiClient.createLiveTvSeriesTimer(item) :
apiClient.createLiveTvTimer(item);
return promise.then(function () {
loading.hide();
sendToast(globalize.translate('RecordingScheduled'));
});
});
2018-10-23 01:05:09 +03:00
}
function sendToast(msg) {
require(['toast'], function (toast) {
toast(msg);
});
2018-10-23 01:05:09 +03:00
}
function showMultiCancellationPrompt(serverId, programId, timerId, timerStatus, seriesTimerId) {
return new Promise(function (resolve, reject) {
require(['dialog'], function (dialog) {
2018-10-23 01:05:09 +03:00
var items = [];
items.push({
name: globalize.translate('HeaderKeepRecording'),
id: 'cancel',
type: 'submit'
});
if (timerStatus === 'InProgress') {
items.push({
name: globalize.translate('HeaderStopRecording'),
id: 'canceltimer',
type: 'cancel'
});
} else {
items.push({
name: globalize.translate('HeaderCancelRecording'),
id: 'canceltimer',
type: 'cancel'
});
}
2018-10-23 01:05:09 +03:00
items.push({
name: globalize.translate('HeaderCancelSeries'),
id: 'cancelseriestimer',
type: 'cancel'
});
dialog({
text: globalize.translate('MessageConfirmRecordingCancellation'),
2018-10-23 01:05:09 +03:00
buttons: items
}).then(function (result) {
2018-10-23 01:05:09 +03:00
var apiClient = connectionManager.getApiClient(serverId);
if (result === 'canceltimer') {
loading.show();
cancelTimer(apiClient, timerId, true).then(resolve, reject);
} else if (result === 'cancelseriestimer') {
loading.show();
apiClient.cancelLiveTvSeriesTimer(seriesTimerId).then(function () {
require(['toast'], function (toast) {
toast(globalize.translate('SeriesCancelled'));
});
loading.hide();
resolve();
}, reject);
} else {
resolve();
}
}, reject);
});
});
2018-10-23 01:05:09 +03:00
}
function toggleRecording(serverId, programId, timerId, timerStatus, seriesTimerId) {
2019-03-19 17:03:11 -07:00
var apiClient = connectionManager.getApiClient(serverId);
var hasTimer = timerId && timerStatus !== 'Cancelled';
if (seriesTimerId && hasTimer) {
// cancel
return showMultiCancellationPrompt(serverId, programId, timerId, timerStatus, seriesTimerId);
} else if (hasTimer && programId) {
// change to series recording, if possible
// otherwise cancel individual recording
return changeRecordingToSeries(apiClient, timerId, programId, true);
} else if (programId) {
// schedule recording
return createRecording(apiClient, programId);
} else {
return Promise.reject();
}
2018-10-23 01:05:09 +03:00
}
2018-10-23 01:05:09 +03:00
return {
cancelTimer: cancelTimer,
createRecording: createRecording,
changeRecordingToSeries: changeRecordingToSeries,
toggleRecording: toggleRecording,
cancelTimerWithConfirmation: cancelTimerWithConfirmation,
cancelSeriesTimerWithConfirmation: cancelSeriesTimerWithConfirmation
};
});