mirror of
				https://github.com/karl0ss/JDRssDownloader.git
				synced 2025-11-04 08:31:00 +00:00 
			
		
		
		
	latest updates
This commit is contained in:
		
							parent
							
								
									bb2e58e624
								
							
						
					
					
						commit
						73b2f98cb5
					
				
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@ -10,3 +10,5 @@ dist/jdrssdownloader-win.exe
 | 
			
		||||
dist/jdrssdownloader-macos
 | 
			
		||||
downloadHistory.json
 | 
			
		||||
shows.json
 | 
			
		||||
shows.json
 | 
			
		||||
cache/retryCache.json
 | 
			
		||||
 | 
			
		||||
@ -3,12 +3,14 @@ const { linkAdder } = require('./JDLinkAdder');
 | 
			
		||||
const { getLinksFromURL } = require('./LinkGrabber')
 | 
			
		||||
const { checkFileName } = require('./checkFileName')
 | 
			
		||||
const { checkDownloadHistory } = require('./checkDownloadHistory')
 | 
			
		||||
const { retryCache } = require('./retryCache')
 | 
			
		||||
 | 
			
		||||
async function filterFeed() {
 | 
			
		||||
    let hevcSwitch = JSON.parse(fs.readFileSync('config.json')).OnlyHEVC
 | 
			
		||||
    let myshowlist = JSON.parse(fs.readFileSync('shows.json'))
 | 
			
		||||
    let feed = JSON.parse(fs.readFileSync('./cache/feedCache.json'));
 | 
			
		||||
    let retryShowCache = []
 | 
			
		||||
    let rssFeed = JSON.parse(fs.readFileSync('./cache/feedCache.json'));
 | 
			
		||||
    let retryCacheData = retryCache()
 | 
			
		||||
    let fullFeedToCheck = retryCacheData.concat(rssFeed)
 | 
			
		||||
    let urlsToCheck = []
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -16,7 +18,7 @@ async function filterFeed() {
 | 
			
		||||
 | 
			
		||||
        try {
 | 
			
		||||
            // Find show on feed
 | 
			
		||||
            let listFilteredForShow = feed.filter(item => item.title.includes(show.Name))
 | 
			
		||||
            let listFilteredForShow = fullFeedToCheck.filter(item => item.title.includes(show.Name))
 | 
			
		||||
            if (listFilteredForShow.length > 0) {
 | 
			
		||||
                for (let match of listFilteredForShow) {
 | 
			
		||||
                    // If show is found get url then return all links on that page
 | 
			
		||||
@ -60,7 +62,7 @@ async function filterFeed() {
 | 
			
		||||
                        // No HEVC links found
 | 
			
		||||
                        log.info(downloadList.length + ' links for ' + show.Name + ' have been found, will recheck next time.')
 | 
			
		||||
                        for (let feedItem of listFilteredForShow) {
 | 
			
		||||
                            retryShowCache.push(feedItem)
 | 
			
		||||
                            retryCache(feedItem)
 | 
			
		||||
                        }
 | 
			
		||||
                        global.linkCheckTime = new Date();
 | 
			
		||||
                    }
 | 
			
		||||
@ -75,7 +77,7 @@ async function filterFeed() {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    log.info('Wiping feed cache')
 | 
			
		||||
    fs.writeFileSync('./cache/feedCache.json', JSON.stringify(retryShowCache));
 | 
			
		||||
    fs.writeFileSync('./cache/feedCache.json', JSON.stringify([]));
 | 
			
		||||
    global.linkCheckTime = new Date();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,9 +1,9 @@
 | 
			
		||||
const fs = require("fs");
 | 
			
		||||
config = JSON.parse(fs.readFileSync('config.json'))
 | 
			
		||||
 | 
			
		||||
const { feedUpdater } = require('./FeedUpdater')
 | 
			
		||||
const { filterFeed } = require('./FeedFilter')
 | 
			
		||||
const { telegrambot } = require('./telegramCommunication')
 | 
			
		||||
const { create_empty_cache_files } = require('./utils')
 | 
			
		||||
const express = require('express');
 | 
			
		||||
const bodyParser = require('body-parser');
 | 
			
		||||
const cors = require('cors');
 | 
			
		||||
@ -52,6 +52,7 @@ async function main() {
 | 
			
		||||
    log.tele('Refreshing RSS Items every ' + RSSFeedRefreshMins + ' Minutes')
 | 
			
		||||
    log.tele('Checking for links and sending to JDdownloader every ' + JDPostLinksMins + ' Minutes')
 | 
			
		||||
    app.listen(config.WebUIPort, () => log.info(`WebUi is listening on ${config.WebUIPort}!`))
 | 
			
		||||
    create_empty_cache_files()
 | 
			
		||||
    setInterval(await feedUpdater, RSSFeedRefreshMins * 60000);
 | 
			
		||||
    setInterval(await filterFeed, JDPostLinksMins * 60000);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -61,7 +61,24 @@ async function editShow(showData) {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports = {
 | 
			
		||||
    addNewShow, removeShow, editShow
 | 
			
		||||
async function removeShowFromCache(showData) {
 | 
			
		||||
    let shows = JSON.parse(fs.readFileSync('./cache/retryCache.json'))
 | 
			
		||||
 | 
			
		||||
    myArray = shows.filter(function (obj) {
 | 
			
		||||
        return obj.title !== showData;
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    shows = myArray
 | 
			
		||||
    try {
 | 
			
		||||
        fs.writeFileSync('./cache/retryCache.json', JSON.stringify(shows));
 | 
			
		||||
        log.info(showData + ' Removed from retry cache.')
 | 
			
		||||
    } catch (err) {
 | 
			
		||||
        console.error(err);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
module.exports = {
 | 
			
		||||
    addNewShow, removeShow, editShow, removeShowFromCache
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,11 +1,6 @@
 | 
			
		||||
const fs = require('fs')
 | 
			
		||||
 | 
			
		||||
function checkDownloadHistory(urlObj) {
 | 
			
		||||
    try {
 | 
			
		||||
        history = JSON.parse(fs.readFileSync('./cache/downloadHistory.json'));
 | 
			
		||||
    } catch (error) {
 | 
			
		||||
        fs.writeFileSync('./cache/downloadHistory.json', JSON.stringify([]));
 | 
			
		||||
    }
 | 
			
		||||
    history = JSON.parse(fs.readFileSync('./cache/downloadHistory.json'));
 | 
			
		||||
    if (history.includes(urlObj.fileName)) {
 | 
			
		||||
        return true
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "jdrssdownloader",
 | 
			
		||||
  "version": "1.1.1",
 | 
			
		||||
  "version": "1.1.2",
 | 
			
		||||
  "description": "",
 | 
			
		||||
  "main": "JDRssDownloader.js",
 | 
			
		||||
  "bin": "JDRssDownloader.js",
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										21
									
								
								retryCache.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								retryCache.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,21 @@
 | 
			
		||||
const fs = require('fs')
 | 
			
		||||
 | 
			
		||||
function retryCache(cache) {
 | 
			
		||||
    if (cache == null) {
 | 
			
		||||
        retryCacheData = JSON.parse(fs.readFileSync('./cache/retryCache.json'));
 | 
			
		||||
        return retryCacheData
 | 
			
		||||
    }
 | 
			
		||||
    retryCacheData = JSON.parse(fs.readFileSync('./cache/retryCache.json'));
 | 
			
		||||
    if (retryCacheData.some(e => e.title === cache.title)) {
 | 
			
		||||
        log.info(cache.title + ' is already in the retry cache.')
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
        cache.retryCount = 5
 | 
			
		||||
        retryCacheData.push(cache)
 | 
			
		||||
        fs.writeFileSync('./cache/retryCache.json', JSON.stringify(retryCacheData));
 | 
			
		||||
        log.info(cache.title + ' written to retry cache.')
 | 
			
		||||
        return retryCacheData
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports = { retryCache }
 | 
			
		||||
							
								
								
									
										25
									
								
								routes/cache.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								routes/cache.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,25 @@
 | 
			
		||||
const fs = require("fs");
 | 
			
		||||
const {removeShowFromCache} = require('../apiFunctions')
 | 
			
		||||
 | 
			
		||||
module.exports = function (app) {
 | 
			
		||||
    app.get("/feedCache", (req, res) => {
 | 
			
		||||
        feedCache = JSON.parse(fs.readFileSync('./cache/feedCache.json'))
 | 
			
		||||
        res.render("feedCache", { title: "Feed Cache", feedCache: feedCache });
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    app.get("/retryCache", (req, res) => {
 | 
			
		||||
        retryCache = JSON.parse(fs.readFileSync('./cache/retryCache.json'))
 | 
			
		||||
        for (let index = 0; index < retryCache.length; index++) {
 | 
			
		||||
            const item = retryCache[index];
 | 
			
		||||
            retryCache[index].newtitle = item.title.replace(/ /g, "‡");
 | 
			
		||||
        }
 | 
			
		||||
        res.render("retryCache", { title: "Retry Cache", retryCache: retryCache });
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    app.get('/retryCache/remove', (req, res) => {
 | 
			
		||||
        const showName = req.query.name.replaceAll("‡", " ");
 | 
			
		||||
        console.log(req)
 | 
			
		||||
        removeShowFromCache(showName)
 | 
			
		||||
        res.redirect("/retryCache");
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
@ -5,6 +5,8 @@ module.exports = function (app) {
 | 
			
		||||
 | 
			
		||||
    app.get("/", (req, res) => {
 | 
			
		||||
        showListLength = JSON.parse(fs.readFileSync('shows.json')).length
 | 
			
		||||
        feedCacheLength = JSON.parse(fs.readFileSync('./cache/feedCache.json')).length
 | 
			
		||||
        retryCacheLength = JSON.parse(fs.readFileSync('./cache/retryCache.json')).length
 | 
			
		||||
        rssTime = nextRssRefresh()
 | 
			
		||||
        linkCheck = nextLinkCheck()
 | 
			
		||||
        res.render("index", { title: "Home", showListLength: showListLength, version: global.version, rssTime: rssTime, linkCheck: linkCheck, lastDownloaded: get_last_downloaded() });
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										31
									
								
								utils.js
									
									
									
									
									
								
							
							
						
						
									
										31
									
								
								utils.js
									
									
									
									
									
								
							@ -16,13 +16,36 @@ function nextLinkCheck() {
 | 
			
		||||
    return returnUpdatedDate(global.linkCheckTime, config.JDPostLinksMins)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function get_last_downloaded(){
 | 
			
		||||
function get_last_downloaded() {
 | 
			
		||||
    history = JSON.parse(fs.readFileSync('./cache/downloadHistory.json'))
 | 
			
		||||
    last = history.slice(-1)[0] 
 | 
			
		||||
    last = history.slice(-1)[0]
 | 
			
		||||
    return last
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports = {
 | 
			
		||||
    nextRssRefresh, nextLinkCheck, get_last_downloaded
 | 
			
		||||
function create_empty_downloadHistory() {
 | 
			
		||||
    try {
 | 
			
		||||
        return JSON.parse(fs.readFileSync('./cache/downloadHistory.json'));
 | 
			
		||||
    } catch (error) {
 | 
			
		||||
        fs.writeFileSync('./cache/downloadHistory.json', JSON.stringify([]));
 | 
			
		||||
        return JSON.parse(fs.readFileSync('./cache/downloadHistory.json'));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function create_empty_retry_cache() {
 | 
			
		||||
    try {
 | 
			
		||||
        return JSON.parse(fs.readFileSync('./cache/retryCache.json'));
 | 
			
		||||
    } catch (error) {
 | 
			
		||||
        fs.writeFileSync('./cache/retryCache.json', JSON.stringify([]));
 | 
			
		||||
        return JSON.parse(fs.readFileSync('./cache/retryCache.json'));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function create_empty_cache_files() {
 | 
			
		||||
    create_empty_downloadHistory()
 | 
			
		||||
    create_empty_retry_cache()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports = {
 | 
			
		||||
    nextRssRefresh, nextLinkCheck, get_last_downloaded, create_empty_cache_files
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										26
									
								
								views/feedCache.pug
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								views/feedCache.pug
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,26 @@
 | 
			
		||||
extends layout
 | 
			
		||||
 | 
			
		||||
block layout-content
 | 
			
		||||
  div.View
 | 
			
		||||
    h1.Banner Feed Cache
 | 
			
		||||
    if (feedCache.length==0)
 | 
			
		||||
      div.Message
 | 
			
		||||
        h2 No shows in Feed Cache
 | 
			
		||||
    else
 | 
			
		||||
      div.Message
 | 
			
		||||
        table
 | 
			
		||||
          thead
 | 
			
		||||
            tr
 | 
			
		||||
              th Show Name
 | 
			
		||||
              //- th Remove
 | 
			
		||||
          tbody
 | 
			
		||||
            each val, key in feedCache
 | 
			
		||||
              tr
 | 
			
		||||
                td
 | 
			
		||||
                  a(href=val.link
 | 
			
		||||
                    target="_blank") #{val.title}
 | 
			
		||||
                //- td 
 | 
			
		||||
                //-   a(href='/retryCache/remove?name=' + val.newtitle) Remove
 | 
			
		||||
    div.NavButtons
 | 
			
		||||
      a(href="/")
 | 
			
		||||
        div.NavButton Home
 | 
			
		||||
@ -8,11 +8,18 @@ block layout-content
 | 
			
		||||
        h2 Number of Tracked Shows
 | 
			
		||||
        h3 #{showListLength}
 | 
			
		||||
        h2 Last Downloaded
 | 
			
		||||
        h3 #{lastDownloaded}            
 | 
			
		||||
        h3 #{lastDownloaded}             
 | 
			
		||||
      div.Message
 | 
			
		||||
        h2 
 | 
			
		||||
          a(href='/feedCache') RSS Feed Cache Size 
 | 
			
		||||
        h3 #{feedCacheLength}
 | 
			
		||||
        h2
 | 
			
		||||
          a(href='/retryCache') Retry Cache Size
 | 
			
		||||
        h3 #{retryCacheLength}
 | 
			
		||||
        h2 Next RSS Refresh
 | 
			
		||||
        h3 #{rssTime}
 | 
			
		||||
        h2 Next Link Check
 | 
			
		||||
        h3 #{linkCheck}        
 | 
			
		||||
        h3 #{linkCheck}   
 | 
			
		||||
    div.NavButtons
 | 
			
		||||
      a(href="/shows")
 | 
			
		||||
          div.NavButton Show List
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										26
									
								
								views/retryCache.pug
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								views/retryCache.pug
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,26 @@
 | 
			
		||||
extends layout
 | 
			
		||||
 | 
			
		||||
block layout-content
 | 
			
		||||
  div.View
 | 
			
		||||
    h1.Banner Retry Cache
 | 
			
		||||
    if (retryCache.length==0)
 | 
			
		||||
      div.Message
 | 
			
		||||
        h2 No shows in Retry Cache
 | 
			
		||||
    else
 | 
			
		||||
      div.Message
 | 
			
		||||
        table
 | 
			
		||||
          thead
 | 
			
		||||
            tr
 | 
			
		||||
              th Show Name
 | 
			
		||||
              th Remove
 | 
			
		||||
          tbody
 | 
			
		||||
            each val, key in retryCache
 | 
			
		||||
              tr
 | 
			
		||||
                td
 | 
			
		||||
                  a(href=val.link
 | 
			
		||||
                    target="_blank") #{val.title}
 | 
			
		||||
                td 
 | 
			
		||||
                  a(href='/retryCache/remove?name=' + val.newtitle) Remove
 | 
			
		||||
    div.NavButtons
 | 
			
		||||
      a(href="/")
 | 
			
		||||
        div.NavButton Home
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user