Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Various bug fixes #1032

Merged
merged 8 commits into from
Dec 1, 2023
67 changes: 3 additions & 64 deletions backend/app.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const { uuid } = require('uuidv4');
const { v4: uuid } = require('uuid');
const fs = require('fs-extra');
const { promisify } = require('util');
const auth_api = require('./authentication/auth');
Expand Down Expand Up @@ -534,13 +534,7 @@ async function loadConfig() {
subscriptions.forEach(async sub => subscriptions_api.writeSubscriptionMetadata(sub));
subscriptions_api.updateSubscriptionPropertyMultiple(subscriptions, {downloading: false, child_process: null});
// runs initially, then runs every ${subscriptionCheckInterval} seconds
const watchSubscriptionsInterval = function() {
watchSubscriptions();
const subscriptionsCheckInterval = config_api.getConfigItem('ytdl_subscriptions_check_interval');
setTimeout(watchSubscriptionsInterval, subscriptionsCheckInterval*1000);
}

watchSubscriptionsInterval();
subscriptions_api.watchSubscriptionsInterval();
}

// start the server here
Expand Down Expand Up @@ -570,62 +564,6 @@ function loadConfigValues() {
utils.updateLoggerLevel(logger_level);
}

function calculateSubcriptionRetrievalDelay(subscriptions_amount) {
// frequency is once every 5 mins by default
const subscriptionsCheckInterval = config_api.getConfigItem('ytdl_subscriptions_check_interval');
let interval_in_ms = subscriptionsCheckInterval * 1000;
const subinterval_in_ms = interval_in_ms/subscriptions_amount;
return subinterval_in_ms;
}

async function watchSubscriptions() {
let subscriptions = await subscriptions_api.getAllSubscriptions();

if (!subscriptions) return;

// auto pause deprecated streamingOnly mode
const streaming_only_subs = subscriptions.filter(sub => sub.streamingOnly);
subscriptions_api.updateSubscriptionPropertyMultiple(streaming_only_subs, {paused: true});

const valid_subscriptions = subscriptions.filter(sub => !sub.paused && !sub.streamingOnly);

let subscriptions_amount = valid_subscriptions.length;
let delay_interval = calculateSubcriptionRetrievalDelay(subscriptions_amount);

let current_delay = 0;

const multiUserMode = config_api.getConfigItem('ytdl_multi_user_mode');
for (let i = 0; i < valid_subscriptions.length; i++) {
let sub = valid_subscriptions[i];

// don't check the sub if the last check for the same subscription has not completed
if (subscription_timeouts[sub.id]) {
logger.verbose(`Subscription: skipped checking ${sub.name} as the last check for ${sub.name} has not completed.`);
continue;
}

if (!sub.name) {
logger.verbose(`Subscription: skipped check for subscription with uid ${sub.id} as name has not been retrieved yet.`);
continue;
}

logger.verbose('Watching ' + sub.name + ' with delay interval of ' + delay_interval);
setTimeout(async () => {
const multiUserModeChanged = config_api.getConfigItem('ytdl_multi_user_mode') !== multiUserMode;
if (multiUserModeChanged) {
logger.verbose(`Skipping subscription ${sub.name} due to multi-user mode change.`);
return;
}
await subscriptions_api.getVideosForSub(sub.id);
subscription_timeouts[sub.id] = false;
}, current_delay);
subscription_timeouts[sub.id] = true;
current_delay += delay_interval;
const subscriptionsCheckInterval = config_api.getConfigItem('ytdl_subscriptions_check_interval');
if (current_delay >= subscriptionsCheckInterval * 1000) current_delay = 0;
}
}

function getOrigin() {
return url_domain.origin;
}
Expand Down Expand Up @@ -1651,6 +1589,7 @@ app.get('/api/stream', optionalJwt, async (req, res) => {
}
if (!fs.existsSync(file_path)) {
logger.error(`File ${file_path} could not be found! UID: ${uid}, ID: ${file_obj && file_obj.id}`);
return;
}
const stat = fs.statSync(file_path);
const fileSize = stat.size;
Expand Down
2 changes: 1 addition & 1 deletion backend/archive.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
const path = require('path');
const fs = require('fs-extra');
const { uuid } = require('uuidv4');
const { v4: uuid } = require('uuid');

const db_api = require('./db');

Expand Down
2 changes: 1 addition & 1 deletion backend/authentication/auth.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ const logger = require('../logger');
const db_api = require('../db');

const jwt = require('jsonwebtoken');
const { uuid } = require('uuidv4');
const { v4: uuid } = require('uuid');
const bcrypt = require('bcryptjs');
const fs = require('fs-extra');
const path = require('path');
Expand Down
1 change: 0 additions & 1 deletion backend/db.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
const fs = require('fs-extra')
const path = require('path')
const { MongoClient } = require("mongodb");
const { uuid } = require('uuidv4');
const _ = require('lodash');

const config_api = require('./config');
Expand Down
2 changes: 1 addition & 1 deletion backend/downloader.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const fs = require('fs-extra');
const { uuid } = require('uuidv4');
const { v4: uuid } = require('uuid');
const path = require('path');
const NodeID3 = require('node-id3')
const Mutex = require('async-mutex').Mutex;
Expand Down
2 changes: 1 addition & 1 deletion backend/files.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
const fs = require('fs-extra')
const path = require('path')
const { uuid } = require('uuidv4');
const { v4: uuid } = require('uuid');

const config_api = require('./config');
const db_api = require('./db');
Expand Down
2 changes: 1 addition & 1 deletion backend/notifications.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ const logger = require('./logger');
const utils = require('./utils');
const consts = require('./consts');

const { uuid } = require('uuidv4');
const { v4: uuid } = require('uuid');

const fetch = require('node-fetch');
const { gotify } = require("gotify");
Expand Down
Loading
Loading