(reqOrJobData, isNextJob = false)
| 590 | } |
| 591 | |
| 592 | async doSpecificDownloads(reqOrJobData, isNextJob = false) { |
| 593 | const jobData = reqOrJobData.body ? reqOrJobData.body : reqOrJobData; |
| 594 | |
| 595 | // Build job type with optional source indicator |
| 596 | let jobType = MANUAL_DOWNLOAD_LABEL; |
| 597 | const initiatedBy = this.getJobDataValue(jobData, 'initiatedBy'); |
| 598 | if (initiatedBy && initiatedBy.type === 'api_key' && initiatedBy.name) { |
| 599 | jobType = `${MANUAL_DOWNLOAD_LABEL} (via API: ${initiatedBy.name})`; |
| 600 | } |
| 601 | const jobLabel = this.getJobDataValue(jobData, 'jobLabel'); |
| 602 | if (jobLabel && typeof jobLabel === 'string') { |
| 603 | jobType = jobLabel; |
| 604 | } |
| 605 | |
| 606 | logger.info({ jobData }, 'Running specific downloads job'); |
| 607 | |
| 608 | const urls = reqOrJobData.body |
| 609 | ? reqOrJobData.body.urls |
| 610 | : reqOrJobData.data.urls; |
| 611 | const jobId = await jobModule.addOrUpdateJob( |
| 612 | { |
| 613 | jobType: jobType, |
| 614 | status: '', |
| 615 | output: '', |
| 616 | id: jobData.id ? jobData.id : '', |
| 617 | data: jobData, |
| 618 | action: this.doSpecificDownloads.bind(this), |
| 619 | }, |
| 620 | isNextJob |
| 621 | ); |
| 622 | |
| 623 | this.registerJobWithRun(jobData, jobId); |
| 624 | |
| 625 | if (jobModule.getJob(jobId).status === 'In Progress') { |
| 626 | // Use override settings if provided, otherwise use defaults |
| 627 | const overrideSettings = this.getOverrideSettings(jobData); |
| 628 | let effectiveQuality = overrideSettings.resolution || |
| 629 | this.getJobDataValue(jobData, 'effectiveQuality') || |
| 630 | null; |
| 631 | |
| 632 | const channelId = this.getJobDataValue(jobData, 'channelId'); |
| 633 | |
| 634 | let channelRecord = null; |
| 635 | if (channelId) { |
| 636 | try { |
| 637 | const Channel = require('../models/channel'); |
| 638 | channelRecord = await Channel.findOne({ |
| 639 | where: { channel_id: channelId }, |
| 640 | attributes: ['video_quality', 'audio_format', 'skip_video_folder'], |
| 641 | }); |
| 642 | |
| 643 | if (!effectiveQuality && channelRecord && channelRecord.video_quality) { |
| 644 | effectiveQuality = channelRecord.video_quality; |
| 645 | } |
| 646 | } catch (channelErr) { |
| 647 | console.error('[DownloadModule] Error determining channel quality override:', channelErr.message); |
| 648 | } |
| 649 | } |
no test coverage detected