mirror of
https://github.com/Tzahi12345/YoutubeDL-Material.git
synced 2026-04-03 20:11:28 +03:00
Merge pull request #655 from Tzahi12345/improved-downloads-management
Improved downloads management
This commit is contained in:
@@ -129,6 +129,27 @@ paths:
|
|||||||
description: User is not authorized to view the file.
|
description: User is not authorized to view the file.
|
||||||
security:
|
security:
|
||||||
- Auth query parameter: []
|
- Auth query parameter: []
|
||||||
|
/api/updateFile:
|
||||||
|
post:
|
||||||
|
tags:
|
||||||
|
- files
|
||||||
|
summary: Updates file database object
|
||||||
|
description: Updates a file db object using its uid and a change object.
|
||||||
|
operationId: post-updateFile
|
||||||
|
requestBody:
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
$ref: '#/components/schemas/UpdateFileRequest'
|
||||||
|
responses:
|
||||||
|
'200':
|
||||||
|
description: OK
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
$ref: '#/components/schemas/SuccessObject'
|
||||||
|
security:
|
||||||
|
- Auth query parameter: []
|
||||||
/api/enableSharing:
|
/api/enableSharing:
|
||||||
post:
|
post:
|
||||||
tags:
|
tags:
|
||||||
@@ -841,17 +862,10 @@ paths:
|
|||||||
- Auth query parameter: []
|
- Auth query parameter: []
|
||||||
tags:
|
tags:
|
||||||
- downloader
|
- downloader
|
||||||
/api/clearFinishedDownloads:
|
/api/clearDownloads:
|
||||||
post:
|
post:
|
||||||
tags:
|
summary: Clear multiple downloads
|
||||||
- downloader
|
operationId: post-api-clear-downloads
|
||||||
summary: Clear finished downloads
|
|
||||||
operationId: post-api-clear-finished-downloads
|
|
||||||
requestBody:
|
|
||||||
content:
|
|
||||||
application/json:
|
|
||||||
schema:
|
|
||||||
type: object
|
|
||||||
responses:
|
responses:
|
||||||
'200':
|
'200':
|
||||||
description: OK
|
description: OK
|
||||||
@@ -859,8 +873,17 @@ paths:
|
|||||||
application/json:
|
application/json:
|
||||||
schema:
|
schema:
|
||||||
$ref: '#/components/schemas/SuccessObject'
|
$ref: '#/components/schemas/SuccessObject'
|
||||||
|
requestBody:
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
$ref: '#/components/schemas/ClearDownloadsRequest'
|
||||||
|
description: ''
|
||||||
|
description: "Clears multiple downloads based on a given filter."
|
||||||
security:
|
security:
|
||||||
- Auth query parameter: []
|
- Auth query parameter: []
|
||||||
|
tags:
|
||||||
|
- downloader
|
||||||
/api/getTask:
|
/api/getTask:
|
||||||
post:
|
post:
|
||||||
summary: Get info for one task
|
summary: Get info for one task
|
||||||
@@ -1507,6 +1530,8 @@ components:
|
|||||||
properties:
|
properties:
|
||||||
success:
|
success:
|
||||||
type: boolean
|
type: boolean
|
||||||
|
error:
|
||||||
|
type: string
|
||||||
FileType:
|
FileType:
|
||||||
type: string
|
type: string
|
||||||
enum:
|
enum:
|
||||||
@@ -1607,6 +1632,15 @@ components:
|
|||||||
type: array
|
type: array
|
||||||
items:
|
items:
|
||||||
$ref: '#/components/schemas/Download'
|
$ref: '#/components/schemas/Download'
|
||||||
|
ClearDownloadsRequest:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
clear_finished:
|
||||||
|
type: boolean
|
||||||
|
clear_paused:
|
||||||
|
type: boolean
|
||||||
|
clear_errors:
|
||||||
|
type: boolean
|
||||||
GetTaskRequest:
|
GetTaskRequest:
|
||||||
type: object
|
type: object
|
||||||
properties:
|
properties:
|
||||||
@@ -1727,6 +1761,18 @@ components:
|
|||||||
type: boolean
|
type: boolean
|
||||||
file:
|
file:
|
||||||
$ref: '#/components/schemas/DatabaseFile'
|
$ref: '#/components/schemas/DatabaseFile'
|
||||||
|
UpdateFileRequest:
|
||||||
|
required:
|
||||||
|
- uid
|
||||||
|
- change_obj
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
uid:
|
||||||
|
type: string
|
||||||
|
description: Video UID
|
||||||
|
change_obj:
|
||||||
|
type: object
|
||||||
|
description: Object with fields to update as keys and their new values
|
||||||
SharingToggle:
|
SharingToggle:
|
||||||
required:
|
required:
|
||||||
- uid
|
- uid
|
||||||
@@ -2153,7 +2199,6 @@ components:
|
|||||||
type: boolean
|
type: boolean
|
||||||
result:
|
result:
|
||||||
allOf:
|
allOf:
|
||||||
- $ref: '#/components/schemas/file'
|
|
||||||
- type: object
|
- type: object
|
||||||
properties:
|
properties:
|
||||||
formats:
|
formats:
|
||||||
@@ -2311,6 +2356,9 @@ components:
|
|||||||
type: string
|
type: string
|
||||||
thumbnailURL:
|
thumbnailURL:
|
||||||
type: string
|
type: string
|
||||||
|
description: Backup if thumbnailPath is not defined
|
||||||
|
thumbnailPath:
|
||||||
|
type: string
|
||||||
isAudio:
|
isAudio:
|
||||||
type: boolean
|
type: boolean
|
||||||
duration:
|
duration:
|
||||||
@@ -2322,6 +2370,7 @@ components:
|
|||||||
type: string
|
type: string
|
||||||
size:
|
size:
|
||||||
type: number
|
type: number
|
||||||
|
description: In bytes
|
||||||
path:
|
path:
|
||||||
type: string
|
type: string
|
||||||
upload_date:
|
upload_date:
|
||||||
@@ -2330,6 +2379,12 @@ components:
|
|||||||
type: string
|
type: string
|
||||||
sharingEnabled:
|
sharingEnabled:
|
||||||
type: boolean
|
type: boolean
|
||||||
|
category:
|
||||||
|
$ref: '#/components/schemas/Category'
|
||||||
|
view_count:
|
||||||
|
type: number
|
||||||
|
local_view_count:
|
||||||
|
type: number
|
||||||
Playlist:
|
Playlist:
|
||||||
required:
|
required:
|
||||||
- uids
|
- uids
|
||||||
@@ -2359,6 +2414,8 @@ components:
|
|||||||
type: number
|
type: number
|
||||||
user_uid:
|
user_uid:
|
||||||
type: string
|
type: string
|
||||||
|
auto:
|
||||||
|
type: boolean
|
||||||
Download:
|
Download:
|
||||||
required:
|
required:
|
||||||
- url
|
- url
|
||||||
@@ -2545,28 +2602,6 @@ components:
|
|||||||
type: string
|
type: string
|
||||||
passhash:
|
passhash:
|
||||||
type: string
|
type: string
|
||||||
files:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
audio:
|
|
||||||
type: array
|
|
||||||
items:
|
|
||||||
$ref: '#/components/schemas/file'
|
|
||||||
video:
|
|
||||||
type: array
|
|
||||||
items:
|
|
||||||
$ref: '#/components/schemas/file'
|
|
||||||
playlists:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
audio:
|
|
||||||
type: array
|
|
||||||
items:
|
|
||||||
$ref: '#/components/schemas/file'
|
|
||||||
video:
|
|
||||||
type: array
|
|
||||||
items:
|
|
||||||
$ref: '#/components/schemas/file'
|
|
||||||
subscriptions:
|
subscriptions:
|
||||||
type: array
|
type: array
|
||||||
items:
|
items:
|
||||||
|
|||||||
@@ -30,7 +30,8 @@
|
|||||||
"src/backend"
|
"src/backend"
|
||||||
],
|
],
|
||||||
"styles": [
|
"styles": [
|
||||||
"src/styles.scss"
|
"src/styles.scss",
|
||||||
|
"src/bootstrap.min.css"
|
||||||
],
|
],
|
||||||
"scripts": [],
|
"scripts": [],
|
||||||
"vendorChunk": true,
|
"vendorChunk": true,
|
||||||
@@ -118,7 +119,8 @@
|
|||||||
"src/backend"
|
"src/backend"
|
||||||
],
|
],
|
||||||
"styles": [
|
"styles": [
|
||||||
"src/styles.scss"
|
"src/styles.scss",
|
||||||
|
"src/bootstrap.min.css"
|
||||||
],
|
],
|
||||||
"scripts": []
|
"scripts": []
|
||||||
},
|
},
|
||||||
@@ -151,7 +153,8 @@
|
|||||||
"tsConfig": "src/tsconfig.spec.json",
|
"tsConfig": "src/tsconfig.spec.json",
|
||||||
"scripts": [],
|
"scripts": [],
|
||||||
"styles": [
|
"styles": [
|
||||||
"src/styles.scss"
|
"src/styles.scss",
|
||||||
|
"src/bootstrap.min.css"
|
||||||
],
|
],
|
||||||
"assets": [
|
"assets": [
|
||||||
"src/assets",
|
"src/assets",
|
||||||
|
|||||||
@@ -933,23 +933,34 @@ app.post('/api/getAllFiles', optionalJwt, async function (req, res) {
|
|||||||
else if (file_type_filter === 'video_only') filter_obj['isAudio'] = false;
|
else if (file_type_filter === 'video_only') filter_obj['isAudio'] = false;
|
||||||
|
|
||||||
files = await db_api.getRecords('files', filter_obj, false, sort, range, text_search);
|
files = await db_api.getRecords('files', filter_obj, false, sort, range, text_search);
|
||||||
let file_count = await db_api.getRecords('files', filter_obj, true);
|
const file_count = await db_api.getRecords('files', filter_obj, true);
|
||||||
playlists = await db_api.getRecords('playlists', {user_uid: uuid});
|
|
||||||
|
|
||||||
const categories = await categories_api.getCategoriesAsPlaylists(files);
|
|
||||||
if (categories) {
|
|
||||||
playlists = playlists.concat(categories);
|
|
||||||
}
|
|
||||||
|
|
||||||
files = JSON.parse(JSON.stringify(files));
|
files = JSON.parse(JSON.stringify(files));
|
||||||
|
|
||||||
res.send({
|
res.send({
|
||||||
files: files,
|
files: files,
|
||||||
file_count: file_count,
|
file_count: file_count,
|
||||||
playlists: playlists
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
app.post('/api/updateFile', optionalJwt, async function (req, res) {
|
||||||
|
const uid = req.body.uid;
|
||||||
|
const change_obj = req.body.change_obj;
|
||||||
|
|
||||||
|
const file = await db_api.updateRecord('files', {uid: uid}, change_obj);
|
||||||
|
|
||||||
|
if (!file) {
|
||||||
|
res.send({
|
||||||
|
success: false,
|
||||||
|
error: 'File could not be found'
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
res.send({
|
||||||
|
success: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
app.post('/api/checkConcurrentStream', async (req, res) => {
|
app.post('/api/checkConcurrentStream', async (req, res) => {
|
||||||
const uid = req.body.uid;
|
const uid = req.body.uid;
|
||||||
|
|
||||||
@@ -1365,7 +1376,7 @@ app.post('/api/getPlaylists', optionalJwt, async (req, res) => {
|
|||||||
|
|
||||||
let playlists = await db_api.getRecords('playlists', {user_uid: uuid});
|
let playlists = await db_api.getRecords('playlists', {user_uid: uuid});
|
||||||
if (include_categories) {
|
if (include_categories) {
|
||||||
const categories = await categories_api.getCategoriesAsPlaylists(files);
|
const categories = await categories_api.getCategoriesAsPlaylists();
|
||||||
if (categories) {
|
if (categories) {
|
||||||
playlists = playlists.concat(categories);
|
playlists = playlists.concat(categories);
|
||||||
}
|
}
|
||||||
@@ -1669,9 +1680,15 @@ app.post('/api/download', optionalJwt, async (req, res) => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
app.post('/api/clearFinishedDownloads', optionalJwt, async (req, res) => {
|
app.post('/api/clearDownloads', optionalJwt, async (req, res) => {
|
||||||
const user_uid = req.isAuthenticated() ? req.user.uid : null;
|
const user_uid = req.isAuthenticated() ? req.user.uid : null;
|
||||||
const success = db_api.removeAllRecords('download_queue', {finished: true, user_uid: user_uid});
|
const clear_finished = req.body.clear_finished;
|
||||||
|
const clear_paused = req.body.clear_paused;
|
||||||
|
const clear_errors = req.body.clear_errors;
|
||||||
|
let success = true;
|
||||||
|
if (clear_finished) success &= await db_api.removeAllRecords('download_queue', {finished: true, user_uid: user_uid});
|
||||||
|
if (clear_paused) success &= await db_api.removeAllRecords('download_queue', {paused: true, user_uid: user_uid});
|
||||||
|
if (clear_errors) success &= await db_api.removeAllRecords('download_queue', {error: {$ne: null}, user_uid: user_uid});
|
||||||
res.send({success: success});
|
res.send({success: success});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -171,8 +171,12 @@ exports.registerUser = async function(req, res) {
|
|||||||
|
|
||||||
|
|
||||||
exports.login = async (username, password) => {
|
exports.login = async (username, password) => {
|
||||||
|
// even if we're using LDAP, we still want users to be able to login using internal credentials
|
||||||
const user = await db_api.getRecord('users', {name: username});
|
const user = await db_api.getRecord('users', {name: username});
|
||||||
if (!user) { logger.error(`User ${username} not found`); return false }
|
if (!user) {
|
||||||
|
if (config_api.getConfigItem('ytdl_auth_method') === 'internal') logger.error(`User ${username} not found`);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if (user.auth_method && user.auth_method !== 'internal') { return false }
|
if (user.auth_method && user.auth_method !== 'internal') { return false }
|
||||||
return await bcrypt.compare(password, user.passhash) ? user : false;
|
return await bcrypt.compare(password, user.passhash) ? user : false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -55,17 +55,18 @@ async function getCategories() {
|
|||||||
return categories ? categories : null;
|
return categories ? categories : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function getCategoriesAsPlaylists(files = null) {
|
async function getCategoriesAsPlaylists() {
|
||||||
const categories_as_playlists = [];
|
const categories_as_playlists = [];
|
||||||
const available_categories = await getCategories();
|
const available_categories = await getCategories();
|
||||||
if (available_categories && files) {
|
if (available_categories) {
|
||||||
for (let category of available_categories) {
|
for (let category of available_categories) {
|
||||||
const files_that_match = utils.addUIDsToCategory(category, files);
|
const files_that_match = await db_api.getRecords('files', {'category.uid': category['uid']});
|
||||||
if (files_that_match && files_that_match.length > 0) {
|
if (files_that_match && files_that_match.length > 0) {
|
||||||
category['thumbnailURL'] = files_that_match[0].thumbnailURL;
|
category['thumbnailURL'] = files_that_match[0].thumbnailURL;
|
||||||
category['thumbnailPath'] = files_that_match[0].thumbnailPath;
|
category['thumbnailPath'] = files_that_match[0].thumbnailPath;
|
||||||
category['duration'] = files_that_match.reduce((a, b) => a + utils.durationStringToNumber(b.duration), 0);
|
category['duration'] = files_that_match.reduce((a, b) => a + utils.durationStringToNumber(b.duration), 0);
|
||||||
category['id'] = category['uid'];
|
category['id'] = category['uid'];
|
||||||
|
category['auto'] = true;
|
||||||
categories_as_playlists.push(category);
|
categories_as_playlists.push(category);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -127,7 +127,7 @@ function setConfigItem(key, value) {
|
|||||||
success = setConfigFile(config_json);
|
success = setConfigFile(config_json);
|
||||||
|
|
||||||
return success;
|
return success;
|
||||||
};
|
}
|
||||||
|
|
||||||
function setConfigItems(items) {
|
function setConfigItems(items) {
|
||||||
let success = false;
|
let success = false;
|
||||||
|
|||||||
@@ -387,9 +387,9 @@ exports.getPlaylist = async (playlist_id, user_uid = null, require_sharing = fal
|
|||||||
if (!playlist) {
|
if (!playlist) {
|
||||||
playlist = await exports.getRecord('categories', {uid: playlist_id});
|
playlist = await exports.getRecord('categories', {uid: playlist_id});
|
||||||
if (playlist) {
|
if (playlist) {
|
||||||
// category found
|
const uids = (await exports.getRecords('files', {'category.uid': playlist_id})).map(file => file.uid);
|
||||||
const files = await exports.getFiles(user_uid);
|
playlist['uids'] = uids;
|
||||||
utils.addUIDsToCategory(playlist, files);
|
playlist['auto'] = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -629,7 +629,7 @@ exports.bulkInsertRecordsIntoTable = async (table, docs) => {
|
|||||||
exports.getRecord = async (table, filter_obj) => {
|
exports.getRecord = async (table, filter_obj) => {
|
||||||
// local db override
|
// local db override
|
||||||
if (using_local_db) {
|
if (using_local_db) {
|
||||||
return applyFilterLocalDB(local_db.get(table), filter_obj, 'find').value();
|
return exports.applyFilterLocalDB(local_db.get(table), filter_obj, 'find').value();
|
||||||
}
|
}
|
||||||
|
|
||||||
return await database.collection(table).findOne(filter_obj);
|
return await database.collection(table).findOne(filter_obj);
|
||||||
@@ -638,7 +638,7 @@ exports.getRecord = async (table, filter_obj) => {
|
|||||||
exports.getRecords = async (table, filter_obj = null, return_count = false, sort = null, range = null) => {
|
exports.getRecords = async (table, filter_obj = null, return_count = false, sort = null, range = null) => {
|
||||||
// local db override
|
// local db override
|
||||||
if (using_local_db) {
|
if (using_local_db) {
|
||||||
let cursor = filter_obj ? applyFilterLocalDB(local_db.get(table), filter_obj, 'filter').value() : local_db.get(table).value();
|
let cursor = filter_obj ? exports.applyFilterLocalDB(local_db.get(table), filter_obj, 'filter').value() : local_db.get(table).value();
|
||||||
if (sort) {
|
if (sort) {
|
||||||
cursor = cursor.sort((a, b) => (a[sort['by']] > b[sort['by']] ? sort['order'] : sort['order']*-1));
|
cursor = cursor.sort((a, b) => (a[sort['by']] > b[sort['by']] ? sort['order'] : sort['order']*-1));
|
||||||
}
|
}
|
||||||
@@ -664,7 +664,7 @@ exports.getRecords = async (table, filter_obj = null, return_count = false, sort
|
|||||||
exports.updateRecord = async (table, filter_obj, update_obj) => {
|
exports.updateRecord = async (table, filter_obj, update_obj) => {
|
||||||
// local db override
|
// local db override
|
||||||
if (using_local_db) {
|
if (using_local_db) {
|
||||||
applyFilterLocalDB(local_db.get(table), filter_obj, 'find').assign(update_obj).write();
|
exports.applyFilterLocalDB(local_db.get(table), filter_obj, 'find').assign(update_obj).write();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -677,7 +677,7 @@ exports.updateRecord = async (table, filter_obj, update_obj) => {
|
|||||||
exports.updateRecords = async (table, filter_obj, update_obj) => {
|
exports.updateRecords = async (table, filter_obj, update_obj) => {
|
||||||
// local db override
|
// local db override
|
||||||
if (using_local_db) {
|
if (using_local_db) {
|
||||||
applyFilterLocalDB(local_db.get(table), filter_obj, 'filter').assign(update_obj).write();
|
exports.applyFilterLocalDB(local_db.get(table), filter_obj, 'filter').assign(update_obj).write();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -722,7 +722,7 @@ exports.bulkUpdateRecords = async (table, key_label, update_obj) => {
|
|||||||
exports.pushToRecordsArray = async (table, filter_obj, key, value) => {
|
exports.pushToRecordsArray = async (table, filter_obj, key, value) => {
|
||||||
// local db override
|
// local db override
|
||||||
if (using_local_db) {
|
if (using_local_db) {
|
||||||
applyFilterLocalDB(local_db.get(table), filter_obj, 'find').get(key).push(value).write();
|
exports.applyFilterLocalDB(local_db.get(table), filter_obj, 'find').get(key).push(value).write();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -733,7 +733,7 @@ exports.pushToRecordsArray = async (table, filter_obj, key, value) => {
|
|||||||
exports.pullFromRecordsArray = async (table, filter_obj, key, value) => {
|
exports.pullFromRecordsArray = async (table, filter_obj, key, value) => {
|
||||||
// local db override
|
// local db override
|
||||||
if (using_local_db) {
|
if (using_local_db) {
|
||||||
applyFilterLocalDB(local_db.get(table), filter_obj, 'find').get(key).pull(value).write();
|
exports.applyFilterLocalDB(local_db.get(table), filter_obj, 'find').get(key).pull(value).write();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -746,7 +746,7 @@ exports.pullFromRecordsArray = async (table, filter_obj, key, value) => {
|
|||||||
exports.removeRecord = async (table, filter_obj) => {
|
exports.removeRecord = async (table, filter_obj) => {
|
||||||
// local db override
|
// local db override
|
||||||
if (using_local_db) {
|
if (using_local_db) {
|
||||||
applyFilterLocalDB(local_db.get(table), filter_obj, 'remove').write();
|
exports.applyFilterLocalDB(local_db.get(table), filter_obj, 'remove').write();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -757,7 +757,7 @@ exports.removeRecord = async (table, filter_obj) => {
|
|||||||
// exports.removeRecordsByUIDBulk = async (table, uids) => {
|
// exports.removeRecordsByUIDBulk = async (table, uids) => {
|
||||||
// // local db override
|
// // local db override
|
||||||
// if (using_local_db) {
|
// if (using_local_db) {
|
||||||
// applyFilterLocalDB(local_db.get(table), filter_obj, 'remove').write();
|
// exports.applyFilterLocalDB(local_db.get(table), filter_obj, 'remove').write();
|
||||||
// return true;
|
// return true;
|
||||||
// }
|
// }
|
||||||
|
|
||||||
@@ -821,7 +821,7 @@ exports.removeAllRecords = async (table = null, filter_obj = null) => {
|
|||||||
if (using_local_db) {
|
if (using_local_db) {
|
||||||
for (let i = 0; i < tables_to_remove.length; i++) {
|
for (let i = 0; i < tables_to_remove.length; i++) {
|
||||||
const table_to_remove = tables_to_remove[i];
|
const table_to_remove = tables_to_remove[i];
|
||||||
if (filter_obj) applyFilterLocalDB(local_db.get(table), filter_obj, 'remove').write();
|
if (filter_obj) exports.applyFilterLocalDB(local_db.get(table), filter_obj, 'remove').write();
|
||||||
else local_db.assign({[table_to_remove]: []}).write();
|
else local_db.assign({[table_to_remove]: []}).write();
|
||||||
logger.debug(`Successfully removed records from ${table_to_remove}`);
|
logger.debug(`Successfully removed records from ${table_to_remove}`);
|
||||||
}
|
}
|
||||||
@@ -1075,8 +1075,13 @@ exports.transferDB = async (local_to_remote) => {
|
|||||||
This function is necessary to emulate mongodb's ability to search for null or missing values.
|
This function is necessary to emulate mongodb's ability to search for null or missing values.
|
||||||
A filter of null or undefined for a property will find docs that have that property missing, or have it
|
A filter of null or undefined for a property will find docs that have that property missing, or have it
|
||||||
null or undefined. We want that same functionality for the local DB as well
|
null or undefined. We want that same functionality for the local DB as well
|
||||||
|
|
||||||
|
error: {$ne: null}
|
||||||
|
^ ^
|
||||||
|
| |
|
||||||
|
filter_prop filter_prop_value
|
||||||
*/
|
*/
|
||||||
const applyFilterLocalDB = (db_path, filter_obj, operation) => {
|
exports.applyFilterLocalDB = (db_path, filter_obj, operation) => {
|
||||||
const filter_props = Object.keys(filter_obj);
|
const filter_props = Object.keys(filter_obj);
|
||||||
const return_val = db_path[operation](record => {
|
const return_val = db_path[operation](record => {
|
||||||
if (!filter_props) return true;
|
if (!filter_props) return true;
|
||||||
@@ -1085,14 +1090,20 @@ const applyFilterLocalDB = (db_path, filter_obj, operation) => {
|
|||||||
const filter_prop = filter_props[i];
|
const filter_prop = filter_props[i];
|
||||||
const filter_prop_value = filter_obj[filter_prop];
|
const filter_prop_value = filter_obj[filter_prop];
|
||||||
if (filter_prop_value === undefined || filter_prop_value === null) {
|
if (filter_prop_value === undefined || filter_prop_value === null) {
|
||||||
filtered &= record[filter_prop] === undefined || record[filter_prop] === null
|
filtered &= record[filter_prop] === undefined || record[filter_prop] === null;
|
||||||
} else {
|
} else {
|
||||||
if (typeof filter_prop_value === 'object') {
|
if (typeof filter_prop_value === 'object') {
|
||||||
if (filter_prop_value['$regex']) {
|
if ('$regex' in filter_prop_value) {
|
||||||
filtered &= (record[filter_prop].search(new RegExp(filter_prop_value['$regex'], filter_prop_value['$options'])) !== -1);
|
filtered &= (record[filter_prop].search(new RegExp(filter_prop_value['$regex'], filter_prop_value['$options'])) !== -1);
|
||||||
|
} else if ('$ne' in filter_prop_value) {
|
||||||
|
filtered &= filter_prop in record && record[filter_prop] !== filter_prop_value['$ne'];
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
filtered &= record[filter_prop] === filter_prop_value;
|
// handle case of nested property check
|
||||||
|
if (filter_prop.includes('.'))
|
||||||
|
filtered &= utils.searchObjectByString(record, filter_prop) === filter_prop_value;
|
||||||
|
else
|
||||||
|
filtered &= record[filter_prop] === filter_prop_value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -108,6 +108,7 @@ exports.clearDownload = async (download_uid) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function handleDownloadError(download_uid, error_message) {
|
async function handleDownloadError(download_uid, error_message) {
|
||||||
|
if (!download_uid) return;
|
||||||
await db_api.updateRecord('download_queue', {uid: download_uid}, {error: error_message, finished: true, running: false});
|
await db_api.updateRecord('download_queue', {uid: download_uid}, {error: error_message, finished: true, running: false});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -186,7 +187,7 @@ async function collectInfo(download_uid) {
|
|||||||
let args = await exports.generateArgs(url, type, options, download['user_uid']);
|
let args = await exports.generateArgs(url, type, options, download['user_uid']);
|
||||||
|
|
||||||
// get video info prior to download
|
// get video info prior to download
|
||||||
let info = await getVideoInfoByURL(url, args, download_uid);
|
let info = await exports.getVideoInfoByURL(url, args, download_uid);
|
||||||
|
|
||||||
if (!info) {
|
if (!info) {
|
||||||
// info failed, error presumably already recorded
|
// info failed, error presumably already recorded
|
||||||
@@ -203,9 +204,11 @@ async function collectInfo(download_uid) {
|
|||||||
options.customOutput = category['custom_output'];
|
options.customOutput = category['custom_output'];
|
||||||
options.noRelativePath = true;
|
options.noRelativePath = true;
|
||||||
args = await exports.generateArgs(url, type, options, download['user_uid']);
|
args = await exports.generateArgs(url, type, options, download['user_uid']);
|
||||||
info = await getVideoInfoByURL(url, args, download_uid);
|
info = await exports.getVideoInfoByURL(url, args, download_uid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
download['category'] = category;
|
||||||
|
|
||||||
// setup info required to calculate download progress
|
// setup info required to calculate download progress
|
||||||
|
|
||||||
const expected_file_size = utils.getExpectedFileSize(info);
|
const expected_file_size = utils.getExpectedFileSize(info);
|
||||||
@@ -507,7 +510,7 @@ exports.generateArgs = async (url, type, options, user_uid = null, simulated = f
|
|||||||
return downloadConfig;
|
return downloadConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function getVideoInfoByURL(url, args = [], download_uid = null) {
|
exports.getVideoInfoByURL = async (url, args = [], download_uid = null) => {
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
// remove bad args
|
// remove bad args
|
||||||
const new_args = [...args];
|
const new_args = [...args];
|
||||||
|
|||||||
@@ -148,6 +148,7 @@ exports.updateTaskSchedule = async (task_key, schedule) => {
|
|||||||
await db_api.updateRecord('tasks', {key: task_key}, {schedule: schedule});
|
await db_api.updateRecord('tasks', {key: task_key}, {schedule: schedule});
|
||||||
if (TASKS[task_key]['job']) {
|
if (TASKS[task_key]['job']) {
|
||||||
TASKS[task_key]['job'].cancel();
|
TASKS[task_key]['job'].cancel();
|
||||||
|
TASKS[task_key]['job'] = null;
|
||||||
}
|
}
|
||||||
if (schedule) {
|
if (schedule) {
|
||||||
TASKS[task_key]['job'] = scheduleJob(task_key, schedule);
|
TASKS[task_key]['job'] = scheduleJob(task_key, schedule);
|
||||||
|
|||||||
@@ -42,6 +42,25 @@ const { uuid } = require('uuidv4');
|
|||||||
|
|
||||||
db_api.initialize(db, users_db);
|
db_api.initialize(db, users_db);
|
||||||
|
|
||||||
|
const sample_video_json = {
|
||||||
|
id: "Sample Video",
|
||||||
|
title: "Sample Video",
|
||||||
|
thumbnailURL: "https://sampleurl.jpg",
|
||||||
|
isAudio: false,
|
||||||
|
duration: 177.413,
|
||||||
|
url: "sampleurl.com",
|
||||||
|
uploader: "Sample Uploader",
|
||||||
|
size: 2838445,
|
||||||
|
path: "users\\admin\\video\\Sample Video.mp4",
|
||||||
|
upload_date: "2017-07-28",
|
||||||
|
description: null,
|
||||||
|
view_count: 230,
|
||||||
|
abr: 128,
|
||||||
|
thumbnailPath: null,
|
||||||
|
user_uid: "admin",
|
||||||
|
uid: "1ada04ab-2773-4dd4-bbdd-3e2d40761c50",
|
||||||
|
registered: 1628469039377
|
||||||
|
}
|
||||||
|
|
||||||
describe('Database', async function() {
|
describe('Database', async function() {
|
||||||
describe('Import', async function() {
|
describe('Import', async function() {
|
||||||
@@ -214,7 +233,7 @@ describe('Database', async function() {
|
|||||||
for (let i = 0; i < NUM_RECORDS_TO_ADD; i++) {
|
for (let i = 0; i < NUM_RECORDS_TO_ADD; i++) {
|
||||||
const uid = uuid();
|
const uid = uuid();
|
||||||
if (i === NUM_RECORDS_TO_ADD/2) random_uid = uid;
|
if (i === NUM_RECORDS_TO_ADD/2) random_uid = uid;
|
||||||
test_records.push({"id":"A$AP Mob - Yamborghini High (Official Music Video) ft. Juicy J","title":"A$AP Mob - Yamborghini High (Official Music Video) ft. Juicy J","thumbnailURL":"https://i.ytimg.com/vi/tt7gP_IW-1w/maxresdefault.jpg","isAudio":true,"duration":312,"url":"https://www.youtube.com/watch?v=tt7gP_IW-1w","uploader":"asapmobVEVO","size":5060157,"path":"audio\\A$AP Mob - Yamborghini High (Official Music Video) ft. Juicy J.mp3","upload_date":"2016-05-11","description":"A$AP Mob ft. Juicy J - \"Yamborghini High\" Get it now on:\niTunes: http://smarturl.it/iYAMH?IQid=yt\nListen on Spotify: http://smarturl.it/sYAMH?IQid=yt\nGoogle Play: http://smarturl.it/gYAMH?IQid=yt\nAmazon: http://smarturl.it/aYAMH?IQid=yt\n\nFollow A$AP Mob:\nhttps://www.facebook.com/asapmobofficial\nhttps://twitter.com/ASAPMOB\nhttp://instagram.com/asapmob \nhttp://www.asapmob.com/\n\n#AsapMob #YamborghiniHigh #Vevo #HipHop #OfficialMusicVideo #JuicyJ","view_count":118689353,"height":null,"abr":160,"uid": uid,"registered":1626672120632});
|
test_records.push({"id":"RandomTextRandomText","title":"RandomTextRandomTextRandomTextRandomTextRandomTextRandomTextRandomTextRandomText","thumbnailURL":"https://i.ytimg.com/vi/randomurl/maxresdefault.jpg","isAudio":true,"duration":312,"url":"https://www.youtube.com/watch?v=randomvideo","uploader":"randomUploader","size":5060157,"path":"audio\\RandomTextRandomText.mp3","upload_date":"2016-05-11","description":"RandomTextRandomTextRandomTextRandomTextRandomTextRandomTextRandomTextRandomTextRandomTextRandomTextRandomTextRandomText","view_count":118689353,"height":null,"abr":160,"uid": uid,"registered":1626672120632});
|
||||||
}
|
}
|
||||||
const insert_start = Date.now();
|
const insert_start = Date.now();
|
||||||
let success = await db_api.bulkInsertRecordsIntoTable('test', test_records);
|
let success = await db_api.bulkInsertRecordsIntoTable('test', test_records);
|
||||||
@@ -235,6 +254,30 @@ describe('Database', async function() {
|
|||||||
assert(success);
|
assert(success);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('Local DB Filters', async function() {
|
||||||
|
it('Basic', async function() {
|
||||||
|
const result = db_api.applyFilterLocalDB([{test: 'test'}, {test: 'test1'}], {test: 'test'}, 'find');
|
||||||
|
assert(result && result['test'] === 'test');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Regex', async function() {
|
||||||
|
const filter = {$regex: `\\w+\\d`, $options: 'i'};
|
||||||
|
const result = db_api.applyFilterLocalDB([{test: 'test'}, {test: 'test1'}], {test: filter}, 'find');
|
||||||
|
assert(result && result['test'] === 'test1');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Not equals', async function() {
|
||||||
|
const filter = {$ne: 'test'};
|
||||||
|
const result = db_api.applyFilterLocalDB([{test: 'test'}, {test: 'test1'}], {test: filter}, 'find');
|
||||||
|
assert(result && result['test'] === 'test1');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Nested', async function() {
|
||||||
|
const result = db_api.applyFilterLocalDB([{test1: {test2: 'test3'}}, {test4: 'test5'}], {'test1.test2': 'test3'}, 'find');
|
||||||
|
assert(result && result['test1']['test2'] === 'test3');
|
||||||
|
});
|
||||||
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Multi User', async function() {
|
describe('Multi User', async function() {
|
||||||
@@ -253,10 +296,12 @@ describe('Multi User', async function() {
|
|||||||
assert(user);
|
assert(user);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
describe('Video player - normal', function() {
|
describe('Video player - normal', async function() {
|
||||||
const video_to_test = 'ebbcfffb-d6f1-4510-ad25-d1ec82e0477e';
|
await db_api.removeRecord('files', {uid: sample_video_json['uid']});
|
||||||
|
await db_api.insertRecordIntoTable('files', sample_video_json);
|
||||||
|
const video_to_test = sample_video_json['uid'];
|
||||||
it('Get video', async function() {
|
it('Get video', async function() {
|
||||||
const video_obj = db_api.getVideo(video_to_test, 'admin');
|
const video_obj = await db_api.getVideo(video_to_test);
|
||||||
assert(video_obj);
|
assert(video_obj);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -341,7 +386,9 @@ describe('Downloader', function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('Get file info', async function() {
|
it('Get file info', async function() {
|
||||||
|
this.timeout(300000);
|
||||||
|
const info = await downloader_api.getVideoInfoByURL(url);
|
||||||
|
assert(!!info);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Download file', async function() {
|
it('Download file', async function() {
|
||||||
@@ -360,20 +407,23 @@ describe('Downloader', function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('Pause file', async function() {
|
it('Pause file', async function() {
|
||||||
|
const returned_download = await downloader_api.createDownload(url, 'video', options);
|
||||||
|
await downloader_api.pauseDownload(returned_download['uid']);
|
||||||
|
const updated_download = await db_api.getRecord('download_queue', {uid: returned_download['uid']});
|
||||||
|
assert(updated_download['paused'] && !updated_download['running']);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Generate args', async function() {
|
it('Generate args', async function() {
|
||||||
const args = await downloader_api.generateArgs(url, 'video', options);
|
const args = await downloader_api.generateArgs(url, 'video', options);
|
||||||
console.log(args);
|
assert(args.length > 0);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Generate args - subscription', async function() {
|
it('Generate args - subscription', async function() {
|
||||||
subscriptions_api.initialize(db_api, logger);
|
|
||||||
const sub = await subscriptions_api.getSubscription(sub_id);
|
const sub = await subscriptions_api.getSubscription(sub_id);
|
||||||
const sub_options = subscriptions_api.generateOptionsForSubscriptionDownload(sub, 'admin');
|
const sub_options = subscriptions_api.generateOptionsForSubscriptionDownload(sub, 'admin');
|
||||||
const args = await downloader_api.generateArgs(url, 'video', sub_options, 'admin');
|
const args_normal = await downloader_api.generateArgs(url, 'video', options);
|
||||||
console.log(args);
|
const args_sub = await downloader_api.generateArgs(url, 'video', sub_options, 'admin');
|
||||||
|
console.log(JSON.stringify(args_normal) !== JSON.stringify(args_sub));
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Generate kodi NFO file', async function() {
|
it('Generate kodi NFO file', async function() {
|
||||||
@@ -417,7 +467,7 @@ describe('Tasks', function() {
|
|||||||
};
|
};
|
||||||
tasks_api.TASKS['dummy_task'] = dummy_task;
|
tasks_api.TASKS['dummy_task'] = dummy_task;
|
||||||
|
|
||||||
await tasks_api.initialize();
|
await tasks_api.setupTasks();
|
||||||
});
|
});
|
||||||
it('Backup db', async function() {
|
it('Backup db', async function() {
|
||||||
const backups_original = await utils.recFindByExt('appdata', 'bak');
|
const backups_original = await utils.recFindByExt('appdata', 'bak');
|
||||||
@@ -429,12 +479,13 @@ describe('Tasks', function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('Check for missing files', async function() {
|
it('Check for missing files', async function() {
|
||||||
|
this.timeout(300000);
|
||||||
await db_api.removeAllRecords('files', {uid: 'test'});
|
await db_api.removeAllRecords('files', {uid: 'test'});
|
||||||
const test_missing_file = {uid: 'test', path: 'test/missing_file.mp4'};
|
const test_missing_file = {uid: 'test', path: 'test/missing_file.mp4'};
|
||||||
await db_api.insertRecordIntoTable('files', test_missing_file);
|
await db_api.insertRecordIntoTable('files', test_missing_file);
|
||||||
await tasks_api.executeTask('missing_files_check');
|
await tasks_api.executeTask('missing_files_check');
|
||||||
const task_obj = await db_api.getRecord('tasks', {key: 'missing_files_check'});
|
const missing_file_db_record = await db_api.getRecord('files', {uid: 'test'});
|
||||||
assert(task_obj['data'] && task_obj['data']['uids'] && task_obj['data']['uids'].length >= 1, true);
|
assert(!missing_file_db_record, true);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Check for duplicate files', async function() {
|
it('Check for duplicate files', async function() {
|
||||||
@@ -447,10 +498,13 @@ describe('Tasks', function() {
|
|||||||
await db_api.insertRecordIntoTable('files', test_duplicate_file1);
|
await db_api.insertRecordIntoTable('files', test_duplicate_file1);
|
||||||
await db_api.insertRecordIntoTable('files', test_duplicate_file2);
|
await db_api.insertRecordIntoTable('files', test_duplicate_file2);
|
||||||
await db_api.insertRecordIntoTable('files', test_duplicate_file3);
|
await db_api.insertRecordIntoTable('files', test_duplicate_file3);
|
||||||
await tasks_api.executeTask('duplicate_files_check');
|
|
||||||
|
await tasks_api.executeRun('duplicate_files_check');
|
||||||
const task_obj = await db_api.getRecord('tasks', {key: 'duplicate_files_check'});
|
const task_obj = await db_api.getRecord('tasks', {key: 'duplicate_files_check'});
|
||||||
const duplicated_record_count = await db_api.getRecords('files', {path: 'test/missing_file.mp4'}, true);
|
|
||||||
assert(task_obj['data'] && task_obj['data']['uids'] && task_obj['data']['uids'].length >= 1, true);
|
assert(task_obj['data'] && task_obj['data']['uids'] && task_obj['data']['uids'].length >= 1, true);
|
||||||
|
|
||||||
|
await tasks_api.executeTask('duplicate_files_check');
|
||||||
|
const duplicated_record_count = await db_api.getRecords('files', {path: 'test/missing_file.mp4'}, true);
|
||||||
assert(duplicated_record_count == 1, true);
|
assert(duplicated_record_count == 1, true);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -475,22 +529,36 @@ describe('Tasks', function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('Schedule and cancel task', async function() {
|
it('Schedule and cancel task', async function() {
|
||||||
const today_4_hours = new Date();
|
this.timeout(5000);
|
||||||
today_4_hours.setHours(today_4_hours.getHours() + 4);
|
const today_one_year = new Date();
|
||||||
await tasks_api.updateTaskSchedule('dummy_task', today_4_hours);
|
today_one_year.setFullYear(today_one_year.getFullYear() + 1);
|
||||||
assert(!!tasks_api.TASKS['dummy_task']['job'], true);
|
const schedule_obj = {
|
||||||
|
type: 'timestamp',
|
||||||
|
data: { timestamp: today_one_year.getTime() }
|
||||||
|
}
|
||||||
|
await tasks_api.updateTaskSchedule('dummy_task', schedule_obj);
|
||||||
|
const dummy_task = await db_api.getRecord('tasks', {key: 'dummy_task'});
|
||||||
|
assert(!!tasks_api.TASKS['dummy_task']['job']);
|
||||||
|
assert(!!dummy_task['schedule']);
|
||||||
|
|
||||||
await tasks_api.updateTaskSchedule('dummy_task', null);
|
await tasks_api.updateTaskSchedule('dummy_task', null);
|
||||||
assert(!!tasks_api.TASKS['dummy_task']['job'], false);
|
const dummy_task_updated = await db_api.getRecord('tasks', {key: 'dummy_task'});
|
||||||
|
assert(!tasks_api.TASKS['dummy_task']['job']);
|
||||||
|
assert(!dummy_task_updated['schedule']);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Schedule and run task', async function() {
|
it('Schedule and run task', async function() {
|
||||||
this.timeout(5000);
|
this.timeout(5000);
|
||||||
const today_1_second = new Date();
|
const today_1_second = new Date();
|
||||||
today_1_second.setSeconds(today_1_second.getSeconds() + 1);
|
today_1_second.setSeconds(today_1_second.getSeconds() + 1);
|
||||||
await tasks_api.updateTaskSchedule('dummy_task', today_1_second);
|
const schedule_obj = {
|
||||||
assert(!!tasks_api.TASKS['dummy_task']['job'], true);
|
type: 'timestamp',
|
||||||
|
data: { timestamp: today_1_second.getTime() }
|
||||||
|
}
|
||||||
|
await tasks_api.updateTaskSchedule('dummy_task', schedule_obj);
|
||||||
|
assert(!!tasks_api.TASKS['dummy_task']['job']);
|
||||||
await utils.wait(2000);
|
await utils.wait(2000);
|
||||||
const dummy_task_obj = await db_api.getRecord('tasks', {key: 'dummy_task'});
|
const dummy_task_obj = await db_api.getRecord('tasks', {key: 'dummy_task'});
|
||||||
assert(dummy_task_obj['data'], true);
|
assert(dummy_task_obj['data']);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -456,6 +456,21 @@ function injectArgs(original_args, new_args) {
|
|||||||
return updated_args;
|
return updated_args;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const searchObjectByString = function(o, s) {
|
||||||
|
s = s.replace(/\[(\w+)\]/g, '.$1'); // convert indexes to properties
|
||||||
|
s = s.replace(/^\./, ''); // strip a leading dot
|
||||||
|
var a = s.split('.');
|
||||||
|
for (var i = 0, n = a.length; i < n; ++i) {
|
||||||
|
var k = a[i];
|
||||||
|
if (k in o) {
|
||||||
|
o = o[k];
|
||||||
|
} else {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
|
||||||
// objects
|
// objects
|
||||||
|
|
||||||
function File(id, title, thumbnailURL, isAudio, duration, url, uploader, size, path, upload_date, description, view_count, height, abr) {
|
function File(id, title, thumbnailURL, isAudio, duration, url, uploader, size, path, upload_date, description, view_count, height, abr) {
|
||||||
@@ -489,7 +504,6 @@ module.exports = {
|
|||||||
createContainerZipFile: createContainerZipFile,
|
createContainerZipFile: createContainerZipFile,
|
||||||
durationStringToNumber: durationStringToNumber,
|
durationStringToNumber: durationStringToNumber,
|
||||||
getMatchingCategoryFiles: getMatchingCategoryFiles,
|
getMatchingCategoryFiles: getMatchingCategoryFiles,
|
||||||
addUIDsToCategory: addUIDsToCategory,
|
|
||||||
getCurrentDownloader: getCurrentDownloader,
|
getCurrentDownloader: getCurrentDownloader,
|
||||||
recFindByExt: recFindByExt,
|
recFindByExt: recFindByExt,
|
||||||
removeFileExtension: removeFileExtension,
|
removeFileExtension: removeFileExtension,
|
||||||
@@ -501,5 +515,6 @@ module.exports = {
|
|||||||
fetchFile: fetchFile,
|
fetchFile: fetchFile,
|
||||||
restartServer: restartServer,
|
restartServer: restartServer,
|
||||||
injectArgs: injectArgs,
|
injectArgs: injectArgs,
|
||||||
|
searchObjectByString: searchObjectByString,
|
||||||
File: File
|
File: File
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ exports.updateYoutubeDL = async (latest_update_version) => {
|
|||||||
|
|
||||||
exports.verifyBinaryExistsLinux = () => {
|
exports.verifyBinaryExistsLinux = () => {
|
||||||
const details_json = fs.readJSONSync(CONSTS.DETAILS_BIN_PATH);
|
const details_json = fs.readJSONSync(CONSTS.DETAILS_BIN_PATH);
|
||||||
if (!is_windows && details_json && details_json['path'] && details_json['path'].includes('.exe')) {
|
if (!is_windows && details_json && (details_json['path'].includes('.exe') || !details_json['path'])) {
|
||||||
details_json['path'] = 'node_modules/youtube-dl/bin/youtube-dl';
|
details_json['path'] = 'node_modules/youtube-dl/bin/youtube-dl';
|
||||||
details_json['exec'] = 'youtube-dl';
|
details_json['exec'] = 'youtube-dl';
|
||||||
details_json['version'] = OUTDATED_VERSION;
|
details_json['version'] = OUTDATED_VERSION;
|
||||||
|
|||||||
59
package-lock.json
generated
59
package-lock.json
generated
@@ -3295,65 +3295,12 @@
|
|||||||
"safer-buffer": "~2.1.0"
|
"safer-buffer": "~2.1.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"asn1.js": {
|
|
||||||
"version": "5.4.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz",
|
|
||||||
"integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"bn.js": "^4.0.0",
|
|
||||||
"inherits": "^2.0.1",
|
|
||||||
"minimalistic-assert": "^1.0.0",
|
|
||||||
"safer-buffer": "^2.1.0"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"bn.js": {
|
|
||||||
"version": "4.11.9",
|
|
||||||
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
|
|
||||||
"integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
|
|
||||||
"dev": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"assert": {
|
|
||||||
"version": "1.5.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
|
|
||||||
"integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"object-assign": "^4.1.1",
|
|
||||||
"util": "0.10.3"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"inherits": {
|
|
||||||
"version": "2.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
|
|
||||||
"integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"util": {
|
|
||||||
"version": "0.10.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
|
|
||||||
"integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"inherits": "2.0.1"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"assert-plus": {
|
"assert-plus": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
|
||||||
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
|
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"assign-symbols": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
|
|
||||||
"integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"ast-types-flow": {
|
"ast-types-flow": {
|
||||||
"version": "0.0.7",
|
"version": "0.0.7",
|
||||||
"resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz",
|
"resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz",
|
||||||
@@ -3367,9 +3314,9 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"async": {
|
"async": {
|
||||||
"version": "2.6.3",
|
"version": "2.6.4",
|
||||||
"resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
|
"resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz",
|
||||||
"integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
|
"integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"lodash": "^4.17.14"
|
"lodash": "^4.17.14"
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
export type { AddFileToPlaylistRequest } from './models/AddFileToPlaylistRequest';
|
export type { AddFileToPlaylistRequest } from './models/AddFileToPlaylistRequest';
|
||||||
export type { BaseChangePermissionsRequest } from './models/BaseChangePermissionsRequest';
|
export type { BaseChangePermissionsRequest } from './models/BaseChangePermissionsRequest';
|
||||||
|
export type { binary } from './models/binary';
|
||||||
export type { body_19 } from './models/body_19';
|
export type { body_19 } from './models/body_19';
|
||||||
export type { body_20 } from './models/body_20';
|
export type { body_20 } from './models/body_20';
|
||||||
export type { Category } from './models/Category';
|
export type { Category } from './models/Category';
|
||||||
@@ -12,6 +13,7 @@ export type { ChangeRolePermissionsRequest } from './models/ChangeRolePermission
|
|||||||
export type { ChangeUserPermissionsRequest } from './models/ChangeUserPermissionsRequest';
|
export type { ChangeUserPermissionsRequest } from './models/ChangeUserPermissionsRequest';
|
||||||
export type { CheckConcurrentStreamRequest } from './models/CheckConcurrentStreamRequest';
|
export type { CheckConcurrentStreamRequest } from './models/CheckConcurrentStreamRequest';
|
||||||
export type { CheckConcurrentStreamResponse } from './models/CheckConcurrentStreamResponse';
|
export type { CheckConcurrentStreamResponse } from './models/CheckConcurrentStreamResponse';
|
||||||
|
export type { ClearDownloadsRequest } from './models/ClearDownloadsRequest';
|
||||||
export type { ConcurrentStream } from './models/ConcurrentStream';
|
export type { ConcurrentStream } from './models/ConcurrentStream';
|
||||||
export type { Config } from './models/Config';
|
export type { Config } from './models/Config';
|
||||||
export type { ConfigResponse } from './models/ConfigResponse';
|
export type { ConfigResponse } from './models/ConfigResponse';
|
||||||
@@ -23,6 +25,7 @@ export type { CropFileSettings } from './models/CropFileSettings';
|
|||||||
export type { DatabaseFile } from './models/DatabaseFile';
|
export type { DatabaseFile } from './models/DatabaseFile';
|
||||||
export { DBBackup } from './models/DBBackup';
|
export { DBBackup } from './models/DBBackup';
|
||||||
export type { DBInfoResponse } from './models/DBInfoResponse';
|
export type { DBInfoResponse } from './models/DBInfoResponse';
|
||||||
|
export type { DeleteAllFilesResponse } from './models/DeleteAllFilesResponse';
|
||||||
export type { DeleteCategoryRequest } from './models/DeleteCategoryRequest';
|
export type { DeleteCategoryRequest } from './models/DeleteCategoryRequest';
|
||||||
export type { DeleteMp3Mp4Request } from './models/DeleteMp3Mp4Request';
|
export type { DeleteMp3Mp4Request } from './models/DeleteMp3Mp4Request';
|
||||||
export type { DeletePlaylistRequest } from './models/DeletePlaylistRequest';
|
export type { DeletePlaylistRequest } from './models/DeletePlaylistRequest';
|
||||||
@@ -36,7 +39,6 @@ export type { DownloadResponse } from './models/DownloadResponse';
|
|||||||
export type { DownloadTwitchChatByVODIDRequest } from './models/DownloadTwitchChatByVODIDRequest';
|
export type { DownloadTwitchChatByVODIDRequest } from './models/DownloadTwitchChatByVODIDRequest';
|
||||||
export type { DownloadTwitchChatByVODIDResponse } from './models/DownloadTwitchChatByVODIDResponse';
|
export type { DownloadTwitchChatByVODIDResponse } from './models/DownloadTwitchChatByVODIDResponse';
|
||||||
export type { DownloadVideosForSubscriptionRequest } from './models/DownloadVideosForSubscriptionRequest';
|
export type { DownloadVideosForSubscriptionRequest } from './models/DownloadVideosForSubscriptionRequest';
|
||||||
export type { File } from './models/File';
|
|
||||||
export { FileType } from './models/FileType';
|
export { FileType } from './models/FileType';
|
||||||
export type { GenerateArgsResponse } from './models/GenerateArgsResponse';
|
export type { GenerateArgsResponse } from './models/GenerateArgsResponse';
|
||||||
export type { GenerateNewApiKeyResponse } from './models/GenerateNewApiKeyResponse';
|
export type { GenerateNewApiKeyResponse } from './models/GenerateNewApiKeyResponse';
|
||||||
@@ -98,6 +100,7 @@ export type { UpdateCategoriesRequest } from './models/UpdateCategoriesRequest';
|
|||||||
export type { UpdateCategoryRequest } from './models/UpdateCategoryRequest';
|
export type { UpdateCategoryRequest } from './models/UpdateCategoryRequest';
|
||||||
export type { UpdateConcurrentStreamRequest } from './models/UpdateConcurrentStreamRequest';
|
export type { UpdateConcurrentStreamRequest } from './models/UpdateConcurrentStreamRequest';
|
||||||
export type { UpdateConcurrentStreamResponse } from './models/UpdateConcurrentStreamResponse';
|
export type { UpdateConcurrentStreamResponse } from './models/UpdateConcurrentStreamResponse';
|
||||||
|
export type { UpdateFileRequest } from './models/UpdateFileRequest';
|
||||||
export type { UpdatePlaylistRequest } from './models/UpdatePlaylistRequest';
|
export type { UpdatePlaylistRequest } from './models/UpdatePlaylistRequest';
|
||||||
export type { UpdaterStatus } from './models/UpdaterStatus';
|
export type { UpdaterStatus } from './models/UpdaterStatus';
|
||||||
export type { UpdateServerRequest } from './models/UpdateServerRequest';
|
export type { UpdateServerRequest } from './models/UpdateServerRequest';
|
||||||
|
|||||||
@@ -2,8 +2,7 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
|
export type AddFileToPlaylistRequest = {
|
||||||
export interface AddFileToPlaylistRequest {
|
|
||||||
file_uid: string;
|
file_uid: string;
|
||||||
playlist_id: string;
|
playlist_id: string;
|
||||||
}
|
};
|
||||||
@@ -2,10 +2,10 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
import { UserPermission } from './UserPermission';
|
import type { UserPermission } from './UserPermission';
|
||||||
import { YesNo } from './YesNo';
|
import type { YesNo } from './YesNo';
|
||||||
|
|
||||||
export interface BaseChangePermissionsRequest {
|
export type BaseChangePermissionsRequest = {
|
||||||
permission: UserPermission;
|
permission: UserPermission;
|
||||||
new_value: YesNo;
|
new_value: YesNo;
|
||||||
}
|
};
|
||||||
@@ -2,9 +2,9 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
import { CategoryRule } from './CategoryRule';
|
import type { CategoryRule } from './CategoryRule';
|
||||||
|
|
||||||
export interface Category {
|
export type Category = {
|
||||||
name?: string;
|
name?: string;
|
||||||
uid?: string;
|
uid?: string;
|
||||||
rules?: Array<CategoryRule>;
|
rules?: Array<CategoryRule>;
|
||||||
@@ -12,4 +12,4 @@ export interface Category {
|
|||||||
* Overrides file output for downloaded files in category
|
* Overrides file output for downloaded files in category
|
||||||
*/
|
*/
|
||||||
custom_output?: string;
|
custom_output?: string;
|
||||||
}
|
};
|
||||||
@@ -2,11 +2,10 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
|
export type CategoryRule = {
|
||||||
export interface CategoryRule {
|
|
||||||
preceding_operator?: CategoryRule.preceding_operator;
|
preceding_operator?: CategoryRule.preceding_operator;
|
||||||
comparator?: CategoryRule.comparator;
|
comparator?: CategoryRule.comparator;
|
||||||
}
|
};
|
||||||
|
|
||||||
export namespace CategoryRule {
|
export namespace CategoryRule {
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
import { BaseChangePermissionsRequest } from './BaseChangePermissionsRequest';
|
import type { BaseChangePermissionsRequest } from './BaseChangePermissionsRequest';
|
||||||
|
|
||||||
export interface ChangeRolePermissionsRequest extends BaseChangePermissionsRequest {
|
export type ChangeRolePermissionsRequest = (BaseChangePermissionsRequest & {
|
||||||
role: string;
|
role: string;
|
||||||
}
|
});
|
||||||
@@ -2,8 +2,8 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
import { BaseChangePermissionsRequest } from './BaseChangePermissionsRequest';
|
import type { BaseChangePermissionsRequest } from './BaseChangePermissionsRequest';
|
||||||
|
|
||||||
export interface ChangeUserPermissionsRequest extends BaseChangePermissionsRequest {
|
export type ChangeUserPermissionsRequest = (BaseChangePermissionsRequest & {
|
||||||
user_uid: string;
|
user_uid: string;
|
||||||
}
|
});
|
||||||
@@ -2,10 +2,9 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
|
export type CheckConcurrentStreamRequest = {
|
||||||
export interface CheckConcurrentStreamRequest {
|
|
||||||
/**
|
/**
|
||||||
* UID of the concurrent stream
|
* UID of the concurrent stream
|
||||||
*/
|
*/
|
||||||
uid: string;
|
uid: string;
|
||||||
}
|
};
|
||||||
@@ -2,8 +2,8 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
import { ConcurrentStream } from './ConcurrentStream';
|
import type { ConcurrentStream } from './ConcurrentStream';
|
||||||
|
|
||||||
export interface CheckConcurrentStreamResponse {
|
export type CheckConcurrentStreamResponse = {
|
||||||
stream: ConcurrentStream;
|
stream: ConcurrentStream;
|
||||||
}
|
};
|
||||||
9
src/api-types/models/ClearDownloadsRequest.ts
Normal file
9
src/api-types/models/ClearDownloadsRequest.ts
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
/* istanbul ignore file */
|
||||||
|
/* tslint:disable */
|
||||||
|
/* eslint-disable */
|
||||||
|
|
||||||
|
export type ClearDownloadsRequest = {
|
||||||
|
clear_finished?: boolean;
|
||||||
|
clear_paused?: boolean;
|
||||||
|
clear_errors?: boolean;
|
||||||
|
};
|
||||||
@@ -2,9 +2,8 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
|
export type ConcurrentStream = {
|
||||||
export interface ConcurrentStream {
|
|
||||||
playback_timestamp?: number;
|
playback_timestamp?: number;
|
||||||
unix_timestamp?: number;
|
unix_timestamp?: number;
|
||||||
playing?: boolean;
|
playing?: boolean;
|
||||||
}
|
};
|
||||||
@@ -2,7 +2,6 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
|
export type Config = {
|
||||||
export interface Config {
|
|
||||||
YoutubeDLMaterial: any;
|
YoutubeDLMaterial: any;
|
||||||
}
|
};
|
||||||
@@ -2,9 +2,9 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
import { Config } from './Config';
|
import type { Config } from './Config';
|
||||||
|
|
||||||
export interface ConfigResponse {
|
export type ConfigResponse = {
|
||||||
config_file: Config;
|
config_file: Config;
|
||||||
success: boolean;
|
success: boolean;
|
||||||
}
|
};
|
||||||
@@ -2,7 +2,6 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
|
export type CreateCategoryRequest = {
|
||||||
export interface CreateCategoryRequest {
|
|
||||||
name: string;
|
name: string;
|
||||||
}
|
};
|
||||||
@@ -2,9 +2,9 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
import { Category } from './Category';
|
import type { Category } from './Category';
|
||||||
|
|
||||||
export interface CreateCategoryResponse {
|
export type CreateCategoryResponse = {
|
||||||
new_category?: Category;
|
new_category?: Category;
|
||||||
success?: boolean;
|
success?: boolean;
|
||||||
}
|
};
|
||||||
@@ -2,11 +2,11 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
import { FileType } from './FileType';
|
import type { FileType } from './FileType';
|
||||||
|
|
||||||
export interface CreatePlaylistRequest {
|
export type CreatePlaylistRequest = {
|
||||||
playlistName: string;
|
playlistName: string;
|
||||||
uids: Array<string>;
|
uids: Array<string>;
|
||||||
type: FileType;
|
type: FileType;
|
||||||
thumbnailURL: string;
|
thumbnailURL: string;
|
||||||
}
|
};
|
||||||
@@ -2,9 +2,9 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
import { Playlist } from './Playlist';
|
import type { Playlist } from './Playlist';
|
||||||
|
|
||||||
export interface CreatePlaylistResponse {
|
export type CreatePlaylistResponse = {
|
||||||
new_playlist: Playlist;
|
new_playlist: Playlist;
|
||||||
success: boolean;
|
success: boolean;
|
||||||
}
|
};
|
||||||
@@ -2,8 +2,7 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
|
export type CropFileSettings = {
|
||||||
export interface CropFileSettings {
|
|
||||||
cropFileStart: number;
|
cropFileStart: number;
|
||||||
cropFileEnd: number;
|
cropFileEnd: number;
|
||||||
}
|
};
|
||||||
@@ -2,13 +2,12 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
|
export type DBBackup = {
|
||||||
export interface DBBackup {
|
|
||||||
name: string;
|
name: string;
|
||||||
timestamp: number;
|
timestamp: number;
|
||||||
size: number;
|
size: number;
|
||||||
source: DBBackup.source;
|
source: DBBackup.source;
|
||||||
}
|
};
|
||||||
|
|
||||||
export namespace DBBackup {
|
export namespace DBBackup {
|
||||||
|
|
||||||
|
|||||||
@@ -2,17 +2,17 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
import { TableInfo } from './TableInfo';
|
import type { TableInfo } from './TableInfo';
|
||||||
|
|
||||||
export interface DBInfoResponse {
|
export type DBInfoResponse = {
|
||||||
using_local_db?: boolean;
|
using_local_db?: boolean;
|
||||||
stats_by_table?: {
|
stats_by_table?: {
|
||||||
files?: TableInfo,
|
files?: TableInfo;
|
||||||
playlists?: TableInfo,
|
playlists?: TableInfo;
|
||||||
categories?: TableInfo,
|
categories?: TableInfo;
|
||||||
subscriptions?: TableInfo,
|
subscriptions?: TableInfo;
|
||||||
users?: TableInfo,
|
users?: TableInfo;
|
||||||
roles?: TableInfo,
|
roles?: TableInfo;
|
||||||
download_queue?: TableInfo,
|
download_queue?: TableInfo;
|
||||||
};
|
};
|
||||||
}
|
};
|
||||||
@@ -2,11 +2,16 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
|
import type { Category } from './Category';
|
||||||
|
|
||||||
export interface DatabaseFile {
|
export type DatabaseFile = {
|
||||||
id: string;
|
id: string;
|
||||||
title: string;
|
title: string;
|
||||||
|
/**
|
||||||
|
* Backup if thumbnailPath is not defined
|
||||||
|
*/
|
||||||
thumbnailURL: string;
|
thumbnailURL: string;
|
||||||
|
thumbnailPath?: string;
|
||||||
isAudio: boolean;
|
isAudio: boolean;
|
||||||
/**
|
/**
|
||||||
* In seconds
|
* In seconds
|
||||||
@@ -14,9 +19,15 @@ export interface DatabaseFile {
|
|||||||
duration: number;
|
duration: number;
|
||||||
url: string;
|
url: string;
|
||||||
uploader: string;
|
uploader: string;
|
||||||
|
/**
|
||||||
|
* In bytes
|
||||||
|
*/
|
||||||
size: number;
|
size: number;
|
||||||
path: string;
|
path: string;
|
||||||
upload_date: string;
|
upload_date: string;
|
||||||
uid: string;
|
uid: string;
|
||||||
sharingEnabled?: boolean;
|
sharingEnabled?: boolean;
|
||||||
}
|
category?: Category;
|
||||||
|
view_count?: number;
|
||||||
|
local_view_count?: number;
|
||||||
|
};
|
||||||
14
src/api-types/models/DeleteAllFilesResponse.ts
Normal file
14
src/api-types/models/DeleteAllFilesResponse.ts
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
/* istanbul ignore file */
|
||||||
|
/* tslint:disable */
|
||||||
|
/* eslint-disable */
|
||||||
|
|
||||||
|
export type DeleteAllFilesResponse = {
|
||||||
|
/**
|
||||||
|
* Number of files found matching search parameters
|
||||||
|
*/
|
||||||
|
file_count?: number;
|
||||||
|
/**
|
||||||
|
* Number of files removed
|
||||||
|
*/
|
||||||
|
delete_count?: number;
|
||||||
|
};
|
||||||
@@ -2,7 +2,6 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
|
export type DeleteCategoryRequest = {
|
||||||
export interface DeleteCategoryRequest {
|
|
||||||
category_uid: string;
|
category_uid: string;
|
||||||
}
|
};
|
||||||
@@ -2,8 +2,7 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
|
export type DeleteMp3Mp4Request = {
|
||||||
export interface DeleteMp3Mp4Request {
|
|
||||||
uid: string;
|
uid: string;
|
||||||
blacklistMode?: boolean;
|
blacklistMode?: boolean;
|
||||||
}
|
};
|
||||||
@@ -2,9 +2,9 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
import { FileType } from './FileType';
|
import type { FileType } from './FileType';
|
||||||
|
|
||||||
export interface DeletePlaylistRequest {
|
export type DeletePlaylistRequest = {
|
||||||
playlist_id: string;
|
playlist_id: string;
|
||||||
type: FileType;
|
type: FileType;
|
||||||
}
|
};
|
||||||
@@ -2,9 +2,9 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
import { SubscriptionRequestData } from './SubscriptionRequestData';
|
import type { SubscriptionRequestData } from './SubscriptionRequestData';
|
||||||
|
|
||||||
export interface DeleteSubscriptionFileRequest {
|
export type DeleteSubscriptionFileRequest = {
|
||||||
file: string;
|
file: string;
|
||||||
file_uid?: string;
|
file_uid?: string;
|
||||||
sub: SubscriptionRequestData;
|
sub: SubscriptionRequestData;
|
||||||
@@ -12,4 +12,4 @@ export interface DeleteSubscriptionFileRequest {
|
|||||||
* If true, does not remove id from archive. Only valid if youtube-dl archive is enabled in settings.
|
* If true, does not remove id from archive. Only valid if youtube-dl archive is enabled in settings.
|
||||||
*/
|
*/
|
||||||
deleteForever?: boolean;
|
deleteForever?: boolean;
|
||||||
}
|
};
|
||||||
@@ -2,7 +2,6 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
|
export type DeleteUserRequest = {
|
||||||
export interface DeleteUserRequest {
|
|
||||||
uid: string;
|
uid: string;
|
||||||
}
|
};
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
/* istanbul ignore file */
|
|
||||||
/* tslint:disable */
|
|
||||||
/* eslint-disable */
|
|
||||||
|
|
||||||
export type Dictionary<T> = {
|
|
||||||
[key: string]: T;
|
|
||||||
}
|
|
||||||
@@ -2,8 +2,7 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
|
export type Download = {
|
||||||
export interface Download {
|
|
||||||
uid: string;
|
uid: string;
|
||||||
ui_uid?: string;
|
ui_uid?: string;
|
||||||
running: boolean;
|
running: boolean;
|
||||||
@@ -23,4 +22,4 @@ export interface Download {
|
|||||||
user_uid?: string;
|
user_uid?: string;
|
||||||
sub_id?: string;
|
sub_id?: string;
|
||||||
sub_name?: string;
|
sub_name?: string;
|
||||||
}
|
};
|
||||||
@@ -2,9 +2,8 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
|
export type DownloadArchiveRequest = {
|
||||||
export interface DownloadArchiveRequest {
|
|
||||||
sub: {
|
sub: {
|
||||||
archive_dir: string,
|
archive_dir: string;
|
||||||
};
|
};
|
||||||
}
|
};
|
||||||
@@ -2,13 +2,13 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
import { FileType } from './FileType';
|
import type { FileType } from './FileType';
|
||||||
|
|
||||||
export interface DownloadFileRequest {
|
export type DownloadFileRequest = {
|
||||||
uid?: string;
|
uid?: string;
|
||||||
uuid?: string;
|
uuid?: string;
|
||||||
sub_id?: string;
|
sub_id?: string;
|
||||||
playlist_id?: string;
|
playlist_id?: string;
|
||||||
url?: string;
|
url?: string;
|
||||||
type?: FileType;
|
type?: FileType;
|
||||||
}
|
};
|
||||||
@@ -2,10 +2,10 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
import { CropFileSettings } from './CropFileSettings';
|
import type { CropFileSettings } from './CropFileSettings';
|
||||||
import { FileType } from './FileType';
|
import type { FileType } from './FileType';
|
||||||
|
|
||||||
export interface DownloadRequest {
|
export type DownloadRequest = {
|
||||||
url: string;
|
url: string;
|
||||||
/**
|
/**
|
||||||
* Video format code. Overrides other quality options.
|
* Video format code. Overrides other quality options.
|
||||||
@@ -41,4 +41,4 @@ export interface DownloadRequest {
|
|||||||
maxBitrate?: string;
|
maxBitrate?: string;
|
||||||
type?: FileType;
|
type?: FileType;
|
||||||
cropFileSettings?: CropFileSettings;
|
cropFileSettings?: CropFileSettings;
|
||||||
}
|
};
|
||||||
@@ -2,8 +2,8 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
import { Download } from './Download';
|
import type { Download } from './Download';
|
||||||
|
|
||||||
export interface DownloadResponse {
|
export type DownloadResponse = {
|
||||||
download?: Download;
|
download?: Download;
|
||||||
}
|
};
|
||||||
@@ -2,10 +2,10 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
import { FileType } from './FileType';
|
import type { FileType } from './FileType';
|
||||||
import { Subscription } from './Subscription';
|
import type { Subscription } from './Subscription';
|
||||||
|
|
||||||
export interface DownloadTwitchChatByVODIDRequest {
|
export type DownloadTwitchChatByVODIDRequest = {
|
||||||
/**
|
/**
|
||||||
* File ID
|
* File ID
|
||||||
*/
|
*/
|
||||||
@@ -20,4 +20,4 @@ export interface DownloadTwitchChatByVODIDRequest {
|
|||||||
*/
|
*/
|
||||||
uuid?: string;
|
uuid?: string;
|
||||||
sub?: Subscription;
|
sub?: Subscription;
|
||||||
}
|
};
|
||||||
@@ -2,8 +2,8 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
import { TwitchChatMessage } from './TwitchChatMessage';
|
import type { TwitchChatMessage } from './TwitchChatMessage';
|
||||||
|
|
||||||
export interface DownloadTwitchChatByVODIDResponse {
|
export type DownloadTwitchChatByVODIDResponse = {
|
||||||
chat: Array<TwitchChatMessage>;
|
chat: Array<TwitchChatMessage>;
|
||||||
}
|
};
|
||||||
@@ -2,7 +2,6 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
|
export type DownloadVideosForSubscriptionRequest = {
|
||||||
export interface DownloadVideosForSubscriptionRequest {
|
|
||||||
subID: string;
|
subID: string;
|
||||||
}
|
};
|
||||||
@@ -2,7 +2,6 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
|
|
||||||
export enum FileType {
|
export enum FileType {
|
||||||
AUDIO = 'audio',
|
AUDIO = 'audio',
|
||||||
VIDEO = 'video',
|
VIDEO = 'video',
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
|
export type GenerateArgsResponse = {
|
||||||
export interface GenerateArgsResponse {
|
|
||||||
args?: Array<string>;
|
args?: Array<string>;
|
||||||
}
|
};
|
||||||
@@ -2,7 +2,6 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
|
export type GenerateNewApiKeyResponse = {
|
||||||
export interface GenerateNewApiKeyResponse {
|
|
||||||
new_api_key: string;
|
new_api_key: string;
|
||||||
}
|
};
|
||||||
@@ -2,8 +2,8 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
import { Category } from './Category';
|
import type { Category } from './Category';
|
||||||
|
|
||||||
export interface GetAllCategoriesResponse {
|
export type GetAllCategoriesResponse = {
|
||||||
categories: Array<Category>;
|
categories: Array<Category>;
|
||||||
}
|
};
|
||||||
@@ -2,10 +2,9 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
|
export type GetAllDownloadsRequest = {
|
||||||
export interface GetAllDownloadsRequest {
|
|
||||||
/**
|
/**
|
||||||
* Filters downloads with the array
|
* Filters downloads with the array
|
||||||
*/
|
*/
|
||||||
uids?: Array<string> | null;
|
uids?: Array<string> | null;
|
||||||
}
|
};
|
||||||
@@ -2,8 +2,8 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
import { Download } from './Download';
|
import type { Download } from './Download';
|
||||||
|
|
||||||
export interface GetAllDownloadsResponse {
|
export type GetAllDownloadsResponse = {
|
||||||
downloads?: Array<Download>;
|
downloads?: Array<Download>;
|
||||||
}
|
};
|
||||||
@@ -2,13 +2,13 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
import { DatabaseFile } from './DatabaseFile';
|
import type { DatabaseFile } from './DatabaseFile';
|
||||||
import { Playlist } from './Playlist';
|
import type { Playlist } from './Playlist';
|
||||||
|
|
||||||
export interface GetAllFilesResponse {
|
export type GetAllFilesResponse = {
|
||||||
files: Array<DatabaseFile>;
|
files: Array<DatabaseFile>;
|
||||||
/**
|
/**
|
||||||
* All video playlists
|
* All video playlists
|
||||||
*/
|
*/
|
||||||
playlists: Array<Playlist>;
|
playlists: Array<Playlist>;
|
||||||
}
|
};
|
||||||
@@ -2,8 +2,8 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
import { Subscription } from './Subscription';
|
import type { Subscription } from './Subscription';
|
||||||
|
|
||||||
export interface GetAllSubscriptionsResponse {
|
export type GetAllSubscriptionsResponse = {
|
||||||
subscriptions: Array<Subscription>;
|
subscriptions: Array<Subscription>;
|
||||||
}
|
};
|
||||||
@@ -2,8 +2,8 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
import { Task } from './Task';
|
import type { Task } from './Task';
|
||||||
|
|
||||||
export interface GetAllTasksResponse {
|
export type GetAllTasksResponse = {
|
||||||
tasks?: Array<Task>;
|
tasks?: Array<Task>;
|
||||||
}
|
};
|
||||||
@@ -2,8 +2,8 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
import { DBBackup } from './DBBackup';
|
import type { DBBackup } from './DBBackup';
|
||||||
|
|
||||||
export interface GetDBBackupsResponse {
|
export type GetDBBackupsResponse = {
|
||||||
tasks?: Array<DBBackup>;
|
tasks?: Array<DBBackup>;
|
||||||
}
|
};
|
||||||
@@ -2,7 +2,6 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
|
export type GetDownloadRequest = {
|
||||||
export interface GetDownloadRequest {
|
|
||||||
download_uid: string;
|
download_uid: string;
|
||||||
}
|
};
|
||||||
@@ -2,8 +2,8 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
import { Download } from './Download';
|
import type { Download } from './Download';
|
||||||
|
|
||||||
export interface GetDownloadResponse {
|
export type GetDownloadResponse = {
|
||||||
download?: Download;
|
download?: Download;
|
||||||
}
|
};
|
||||||
@@ -2,7 +2,6 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
|
export type GetFileFormatsRequest = {
|
||||||
export interface GetFileFormatsRequest {
|
|
||||||
url?: string;
|
url?: string;
|
||||||
}
|
};
|
||||||
@@ -2,11 +2,9 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
import { File } from './File';
|
export type GetFileFormatsResponse = {
|
||||||
|
|
||||||
export interface GetFileFormatsResponse {
|
|
||||||
success: boolean;
|
success: boolean;
|
||||||
result: {
|
result: {
|
||||||
formats?: Array<any>,
|
formats?: Array<any>;
|
||||||
};
|
};
|
||||||
}
|
};
|
||||||
@@ -2,9 +2,9 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
import { FileType } from './FileType';
|
import type { FileType } from './FileType';
|
||||||
|
|
||||||
export interface GetFileRequest {
|
export type GetFileRequest = {
|
||||||
/**
|
/**
|
||||||
* Video UID
|
* Video UID
|
||||||
*/
|
*/
|
||||||
@@ -14,4 +14,4 @@ export interface GetFileRequest {
|
|||||||
* User UID
|
* User UID
|
||||||
*/
|
*/
|
||||||
uuid?: string;
|
uuid?: string;
|
||||||
}
|
};
|
||||||
@@ -2,9 +2,9 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
import { DatabaseFile } from './DatabaseFile';
|
import type { DatabaseFile } from './DatabaseFile';
|
||||||
|
|
||||||
export interface GetFileResponse {
|
export type GetFileResponse = {
|
||||||
success: boolean;
|
success: boolean;
|
||||||
file?: DatabaseFile;
|
file?: DatabaseFile;
|
||||||
}
|
};
|
||||||
@@ -2,10 +2,10 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
import { FileType } from './FileType';
|
import type { FileType } from './FileType';
|
||||||
import { Subscription } from './Subscription';
|
import type { Subscription } from './Subscription';
|
||||||
|
|
||||||
export interface GetFullTwitchChatRequest {
|
export type GetFullTwitchChatRequest = {
|
||||||
/**
|
/**
|
||||||
* File ID
|
* File ID
|
||||||
*/
|
*/
|
||||||
@@ -16,4 +16,4 @@ export interface GetFullTwitchChatRequest {
|
|||||||
*/
|
*/
|
||||||
uuid?: string;
|
uuid?: string;
|
||||||
sub?: Subscription;
|
sub?: Subscription;
|
||||||
}
|
};
|
||||||
@@ -2,8 +2,7 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
|
export type GetFullTwitchChatResponse = {
|
||||||
export interface GetFullTwitchChatResponse {
|
|
||||||
success: boolean;
|
success: boolean;
|
||||||
error?: string;
|
error?: string;
|
||||||
}
|
};
|
||||||
@@ -2,7 +2,6 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
|
export type GetLogsRequest = {
|
||||||
export interface GetLogsRequest {
|
|
||||||
lines?: number;
|
lines?: number;
|
||||||
}
|
};
|
||||||
@@ -2,11 +2,10 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
|
export type GetLogsResponse = {
|
||||||
export interface GetLogsResponse {
|
|
||||||
/**
|
/**
|
||||||
* Number of lines to retrieve from the bottom
|
* Number of lines to retrieve from the bottom
|
||||||
*/
|
*/
|
||||||
logs?: string;
|
logs?: string;
|
||||||
success?: boolean;
|
success?: boolean;
|
||||||
}
|
};
|
||||||
@@ -2,13 +2,13 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
import { DatabaseFile } from './DatabaseFile';
|
import type { DatabaseFile } from './DatabaseFile';
|
||||||
import { Playlist } from './Playlist';
|
import type { Playlist } from './Playlist';
|
||||||
|
|
||||||
export interface GetMp3sResponse {
|
export type GetMp3sResponse = {
|
||||||
mp3s: Array<DatabaseFile>;
|
mp3s: Array<DatabaseFile>;
|
||||||
/**
|
/**
|
||||||
* All audio playlists
|
* All audio playlists
|
||||||
*/
|
*/
|
||||||
playlists: Array<Playlist>;
|
playlists: Array<Playlist>;
|
||||||
}
|
};
|
||||||
@@ -2,13 +2,13 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
import { DatabaseFile } from './DatabaseFile';
|
import type { DatabaseFile } from './DatabaseFile';
|
||||||
import { Playlist } from './Playlist';
|
import type { Playlist } from './Playlist';
|
||||||
|
|
||||||
export interface GetMp4sResponse {
|
export type GetMp4sResponse = {
|
||||||
mp4s: Array<DatabaseFile>;
|
mp4s: Array<DatabaseFile>;
|
||||||
/**
|
/**
|
||||||
* All video playlists
|
* All video playlists
|
||||||
*/
|
*/
|
||||||
playlists: Array<Playlist>;
|
playlists: Array<Playlist>;
|
||||||
}
|
};
|
||||||
@@ -2,11 +2,11 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
import { FileType } from './FileType';
|
import type { FileType } from './FileType';
|
||||||
|
|
||||||
export interface GetPlaylistRequest {
|
export type GetPlaylistRequest = {
|
||||||
playlist_id: string;
|
playlist_id: string;
|
||||||
type?: FileType;
|
type?: FileType;
|
||||||
uuid?: string;
|
uuid?: string;
|
||||||
include_file_metadata?: boolean;
|
include_file_metadata?: boolean;
|
||||||
}
|
};
|
||||||
@@ -2,11 +2,11 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
import { FileType } from './FileType';
|
import type { FileType } from './FileType';
|
||||||
import { Playlist } from './Playlist';
|
import type { Playlist } from './Playlist';
|
||||||
|
|
||||||
export interface GetPlaylistResponse {
|
export type GetPlaylistResponse = {
|
||||||
playlist: Playlist;
|
playlist: Playlist;
|
||||||
type: FileType;
|
type: FileType;
|
||||||
success: boolean;
|
success: boolean;
|
||||||
}
|
};
|
||||||
@@ -2,7 +2,6 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
|
export type GetPlaylistsRequest = {
|
||||||
export interface GetPlaylistsRequest {
|
|
||||||
include_categories?: boolean;
|
include_categories?: boolean;
|
||||||
}
|
};
|
||||||
@@ -2,8 +2,8 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
import { Playlist } from './Playlist';
|
import type { Playlist } from './Playlist';
|
||||||
|
|
||||||
export interface GetPlaylistsResponse {
|
export type GetPlaylistsResponse = {
|
||||||
playlists: Array<Playlist>;
|
playlists: Array<Playlist>;
|
||||||
}
|
};
|
||||||
@@ -2,15 +2,15 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
import { UserPermission } from './UserPermission';
|
import type { UserPermission } from './UserPermission';
|
||||||
|
|
||||||
export interface GetRolesResponse {
|
export type GetRolesResponse = {
|
||||||
roles: {
|
roles: {
|
||||||
admin?: {
|
admin?: {
|
||||||
permissions?: Array<UserPermission>,
|
permissions?: Array<UserPermission>;
|
||||||
},
|
|
||||||
user?: {
|
|
||||||
permissions?: Array<UserPermission>,
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
}
|
user?: {
|
||||||
|
permissions?: Array<UserPermission>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
@@ -2,8 +2,7 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
|
export type GetSubscriptionRequest = {
|
||||||
export interface GetSubscriptionRequest {
|
|
||||||
/**
|
/**
|
||||||
* Subscription ID
|
* Subscription ID
|
||||||
*/
|
*/
|
||||||
@@ -12,4 +11,4 @@ export interface GetSubscriptionRequest {
|
|||||||
* Subscription name
|
* Subscription name
|
||||||
*/
|
*/
|
||||||
name?: string;
|
name?: string;
|
||||||
}
|
};
|
||||||
@@ -2,9 +2,9 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
import { Subscription } from './Subscription';
|
import type { Subscription } from './Subscription';
|
||||||
|
|
||||||
export interface GetSubscriptionResponse {
|
export type GetSubscriptionResponse = {
|
||||||
subscription: Subscription;
|
subscription: Subscription;
|
||||||
files: Array<any>;
|
files: Array<any>;
|
||||||
}
|
};
|
||||||
@@ -2,7 +2,6 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
|
export type GetTaskRequest = {
|
||||||
export interface GetTaskRequest {
|
|
||||||
task_key: string;
|
task_key: string;
|
||||||
}
|
};
|
||||||
@@ -2,8 +2,8 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
import { Task } from './Task';
|
import type { Task } from './Task';
|
||||||
|
|
||||||
export interface GetTaskResponse {
|
export type GetTaskResponse = {
|
||||||
task?: Task;
|
task?: Task;
|
||||||
}
|
};
|
||||||
@@ -2,8 +2,8 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
import { User } from './User';
|
import type { User } from './User';
|
||||||
|
|
||||||
export interface GetUsersResponse {
|
export type GetUsersResponse = {
|
||||||
users: Array<User>;
|
users: Array<User>;
|
||||||
}
|
};
|
||||||
@@ -2,12 +2,11 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
|
export type IncrementViewCountRequest = {
|
||||||
export interface IncrementViewCountRequest {
|
|
||||||
file_uid: string;
|
file_uid: string;
|
||||||
sub_id?: string;
|
sub_id?: string;
|
||||||
/**
|
/**
|
||||||
* User UID
|
* User UID
|
||||||
*/
|
*/
|
||||||
uuid?: string;
|
uuid?: string;
|
||||||
}
|
};
|
||||||
@@ -2,8 +2,7 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
|
export type LoginRequest = {
|
||||||
export interface LoginRequest {
|
|
||||||
username: string;
|
username: string;
|
||||||
password: string;
|
password: string;
|
||||||
}
|
};
|
||||||
@@ -2,12 +2,12 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
import { User } from './User';
|
import type { User } from './User';
|
||||||
import { UserPermission } from './UserPermission';
|
import type { UserPermission } from './UserPermission';
|
||||||
|
|
||||||
export interface LoginResponse {
|
export type LoginResponse = {
|
||||||
user?: User;
|
user?: User;
|
||||||
token?: string;
|
token?: string;
|
||||||
permissions?: Array<UserPermission>;
|
permissions?: Array<UserPermission>;
|
||||||
available_permissions?: Array<UserPermission>;
|
available_permissions?: Array<UserPermission>;
|
||||||
}
|
};
|
||||||
@@ -2,9 +2,9 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
import { FileType } from './FileType';
|
import type { FileType } from './FileType';
|
||||||
|
|
||||||
export interface Playlist {
|
export type Playlist = {
|
||||||
name: string;
|
name: string;
|
||||||
uids: Array<string>;
|
uids: Array<string>;
|
||||||
id: string;
|
id: string;
|
||||||
@@ -13,4 +13,5 @@ export interface Playlist {
|
|||||||
registered: number;
|
registered: number;
|
||||||
duration: number;
|
duration: number;
|
||||||
user_uid?: string;
|
user_uid?: string;
|
||||||
}
|
auto?: boolean;
|
||||||
|
};
|
||||||
@@ -2,9 +2,8 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
|
export type RegisterRequest = {
|
||||||
export interface RegisterRequest {
|
|
||||||
userid: string;
|
userid: string;
|
||||||
username: string;
|
username: string;
|
||||||
password: string;
|
password: string;
|
||||||
}
|
};
|
||||||
@@ -2,8 +2,8 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
import { User } from './User';
|
import type { User } from './User';
|
||||||
|
|
||||||
export interface RegisterResponse {
|
export type RegisterResponse = {
|
||||||
user?: User;
|
user?: User;
|
||||||
}
|
};
|
||||||
@@ -2,7 +2,6 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
|
export type RestoreDBBackupRequest = {
|
||||||
export interface RestoreDBBackupRequest {
|
|
||||||
file_name: string;
|
file_name: string;
|
||||||
}
|
};
|
||||||
@@ -2,16 +2,15 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
|
export type Schedule = {
|
||||||
export interface Schedule {
|
|
||||||
type: Schedule.type;
|
type: Schedule.type;
|
||||||
data: {
|
data: {
|
||||||
dayOfWeek?: Array<number>,
|
dayOfWeek?: Array<number>;
|
||||||
hour?: number,
|
hour?: number;
|
||||||
minute?: number,
|
minute?: number;
|
||||||
timestamp?: number,
|
timestamp?: number;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
|
||||||
|
|
||||||
export namespace Schedule {
|
export namespace Schedule {
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
import { Config } from './Config';
|
import type { Config } from './Config';
|
||||||
|
|
||||||
export interface SetConfigRequest {
|
export type SetConfigRequest = {
|
||||||
new_config_file: Config;
|
new_config_file: Config;
|
||||||
}
|
};
|
||||||
@@ -2,8 +2,7 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
|
export type SharingToggle = {
|
||||||
export interface SharingToggle {
|
|
||||||
uid: string;
|
uid: string;
|
||||||
is_playlist?: boolean;
|
is_playlist?: boolean;
|
||||||
}
|
};
|
||||||
@@ -2,8 +2,7 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
|
export type SubscribeRequest = {
|
||||||
export interface SubscribeRequest {
|
|
||||||
name: string;
|
name: string;
|
||||||
url: string;
|
url: string;
|
||||||
timerange?: string;
|
timerange?: string;
|
||||||
@@ -11,4 +10,4 @@ export interface SubscribeRequest {
|
|||||||
customArgs?: string;
|
customArgs?: string;
|
||||||
customFileOutput?: string;
|
customFileOutput?: string;
|
||||||
maxQuality?: string;
|
maxQuality?: string;
|
||||||
}
|
};
|
||||||
@@ -2,9 +2,9 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
import { Subscription } from './Subscription';
|
import type { Subscription } from './Subscription';
|
||||||
|
|
||||||
export interface SubscribeResponse {
|
export type SubscribeResponse = {
|
||||||
new_sub: Subscription;
|
new_sub: Subscription;
|
||||||
error?: string;
|
error?: string;
|
||||||
}
|
};
|
||||||
@@ -2,9 +2,9 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
import { FileType } from './FileType';
|
import type { FileType } from './FileType';
|
||||||
|
|
||||||
export interface Subscription {
|
export type Subscription = {
|
||||||
name: string;
|
name: string;
|
||||||
url: string;
|
url: string;
|
||||||
id: string;
|
id: string;
|
||||||
@@ -17,4 +17,4 @@ export interface Subscription {
|
|||||||
custom_args?: string;
|
custom_args?: string;
|
||||||
custom_output?: string;
|
custom_output?: string;
|
||||||
videos: Array<any>;
|
videos: Array<any>;
|
||||||
}
|
};
|
||||||
@@ -2,12 +2,12 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
import { FileType } from './FileType';
|
import type { FileType } from './FileType';
|
||||||
|
|
||||||
export interface SubscriptionRequestData {
|
export type SubscriptionRequestData = {
|
||||||
name: string;
|
name: string;
|
||||||
id: string;
|
id: string;
|
||||||
type?: FileType;
|
type?: FileType;
|
||||||
isPlaylist?: boolean;
|
isPlaylist?: boolean;
|
||||||
archive?: string;
|
archive?: string;
|
||||||
}
|
};
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
|
export type SuccessObject = {
|
||||||
export interface SuccessObject {
|
|
||||||
success: boolean;
|
success: boolean;
|
||||||
}
|
error?: string;
|
||||||
|
};
|
||||||
@@ -2,7 +2,6 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
|
export type TableInfo = {
|
||||||
export interface TableInfo {
|
|
||||||
records_count?: number;
|
records_count?: number;
|
||||||
}
|
};
|
||||||
@@ -2,8 +2,7 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
|
export type Task = {
|
||||||
export interface Task {
|
|
||||||
key: string;
|
key: string;
|
||||||
last_ran: number;
|
last_ran: number;
|
||||||
last_confirmed: number;
|
last_confirmed: number;
|
||||||
@@ -12,4 +11,4 @@ export interface Task {
|
|||||||
data: any;
|
data: any;
|
||||||
error: string;
|
error: string;
|
||||||
schedule: any;
|
schedule: any;
|
||||||
}
|
};
|
||||||
@@ -2,10 +2,9 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
|
export type TestConnectionStringRequest = {
|
||||||
export interface TestConnectionStringRequest {
|
|
||||||
/**
|
/**
|
||||||
* MongoDB connection string
|
* MongoDB connection string
|
||||||
*/
|
*/
|
||||||
connection_string: string;
|
connection_string: string;
|
||||||
}
|
};
|
||||||
@@ -2,8 +2,7 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
|
export type TestConnectionStringResponse = {
|
||||||
export interface TestConnectionStringResponse {
|
|
||||||
success: boolean;
|
success: boolean;
|
||||||
error?: string;
|
error?: string;
|
||||||
}
|
};
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user