mirror of
https://github.com/Tzahi12345/YoutubeDL-Material.git
synced 2026-03-07 20:10:03 +03:00
Pagination and filtering of files is now server-side
Importing unregistered files does not block server start anymore
This commit is contained in:
@@ -18,7 +18,12 @@ var database = null;
|
||||
const tables = {
|
||||
files: {
|
||||
name: 'files',
|
||||
primary_key: 'uid'
|
||||
primary_key: 'uid',
|
||||
text_search: {
|
||||
title: 'text',
|
||||
uploader: 'text',
|
||||
uid: 'text'
|
||||
}
|
||||
},
|
||||
playlists: {
|
||||
name: 'playlists',
|
||||
@@ -131,8 +136,13 @@ exports._connectToDB = async (custom_connection_string = null) => {
|
||||
|
||||
tables_list.forEach(async table => {
|
||||
const primary_key = tables[table]['primary_key'];
|
||||
if (!primary_key) return;
|
||||
await database.collection(table).createIndex({[primary_key]: 1}, { unique: true });
|
||||
if (primary_key) {
|
||||
await database.collection(table).createIndex({[primary_key]: 1}, { unique: true });
|
||||
}
|
||||
const text_search = tables[table]['text_search'];
|
||||
if (text_search) {
|
||||
await database.collection(table).createIndex(text_search);
|
||||
}
|
||||
});
|
||||
return true;
|
||||
} catch(err) {
|
||||
@@ -695,13 +705,28 @@ exports.getRecord = async (table, filter_obj) => {
|
||||
return await database.collection(table).findOne(filter_obj);
|
||||
}
|
||||
|
||||
exports.getRecords = async (table, filter_obj = null) => {
|
||||
exports.getRecords = async (table, filter_obj = null, return_count = false, sort = null, range = null) => {
|
||||
// local db override
|
||||
if (using_local_db) {
|
||||
return filter_obj ? applyFilterLocalDB(local_db.get(table), filter_obj, 'filter').value() : local_db.get(table).value();
|
||||
let cursor = filter_obj ? applyFilterLocalDB(local_db.get(table), filter_obj, 'filter').value() : local_db.get(table).value();
|
||||
if (sort) {
|
||||
cursor = cursor.sort((a, b) => (a[sort['by']] > b[sort['by']] ? sort['order'] : sort['order']*-1));
|
||||
}
|
||||
if (range) {
|
||||
cursor = cursor.slice(range[0], range[1]);
|
||||
}
|
||||
return !return_count ? cursor : cursor.length;
|
||||
}
|
||||
|
||||
return filter_obj ? await database.collection(table).find(filter_obj).toArray() : await database.collection(table).find().toArray();
|
||||
const cursor = filter_obj ? database.collection(table).find(filter_obj) : database.collection(table).find();
|
||||
if (sort) {
|
||||
cursor.sort({[sort['by']]: sort['order']});
|
||||
}
|
||||
if (range) {
|
||||
cursor.skip(range[0]).limit(range[1] - range[0]);
|
||||
}
|
||||
|
||||
return !return_count ? await cursor.toArray() : await cursor.count();
|
||||
}
|
||||
|
||||
// Update
|
||||
@@ -1027,7 +1052,13 @@ const applyFilterLocalDB = (db_path, filter_obj, operation) => {
|
||||
if (filter_prop_value === undefined || filter_prop_value === null) {
|
||||
filtered &= record[filter_prop] === undefined || record[filter_prop] === null
|
||||
} else {
|
||||
filtered &= record[filter_prop] === filter_prop_value;
|
||||
if (typeof filter_prop_value === 'object') {
|
||||
if (filter_prop_value['$regex']) {
|
||||
filtered &= (record[filter_prop].search(new RegExp(filter_prop_value['$regex'], filter_prop_value['$options'])) !== -1);
|
||||
}
|
||||
} else {
|
||||
filtered &= record[filter_prop] === filter_prop_value;
|
||||
}
|
||||
}
|
||||
}
|
||||
return filtered;
|
||||
|
||||
Reference in New Issue
Block a user