mirror of
https://git.sr.ht/~cadence/cloudtube
synced 2024-12-22 13:07:00 +00:00
Display how recently channels were refreshed
This commit is contained in:
parent
2e69dfc4b7
commit
83dec0c7ab
@ -2,7 +2,7 @@ const {render} = require("pinski/plugins")
|
||||
const db = require("../utils/db")
|
||||
const {fetchChannelLatest} = require("../utils/youtube")
|
||||
const {getUser} = require("../utils/getuser")
|
||||
const converters = require("../utils/converters")
|
||||
const {timeToPastText} = require("../utils/converters")
|
||||
|
||||
module.exports = [
|
||||
{
|
||||
@ -11,25 +11,26 @@ module.exports = [
|
||||
let hasSubscriptions = false
|
||||
let videos = []
|
||||
let channels = []
|
||||
let refreshed = null
|
||||
if (user.token) {
|
||||
// get channels
|
||||
const subscriptions = user.getSubscriptions()
|
||||
const channelPrepared = db.prepare("SELECT * FROM Channels WHERE ucid = ?")
|
||||
channels = subscriptions.map(id => channelPrepared.get(id)).sort((a, b) => {
|
||||
if (a.name < b.name) return -1
|
||||
else if (b.name > a.name) return 1
|
||||
else return 0
|
||||
})
|
||||
const template = Array(subscriptions.length).fill("?").join(", ")
|
||||
channels = db.prepare(`SELECT * FROM Channels WHERE ucid IN (${template}) ORDER BY name`).all(subscriptions)
|
||||
// get refreshed status
|
||||
refreshed = db.prepare(`SELECT min(refreshed) as min, max(refreshed) as max, count(refreshed) as count FROM Channels WHERE ucid IN (${template})`).get(subscriptions)
|
||||
// get videos
|
||||
if (subscriptions.length) {
|
||||
hasSubscriptions = true
|
||||
const template = Array(subscriptions.length).fill("?").join(", ")
|
||||
videos = db.prepare(`SELECT * FROM Videos WHERE authorId IN (${template}) ORDER BY published DESC LIMIT 60`).all(subscriptions)
|
||||
.map(video => {
|
||||
video.publishedText = converters.timeToPastText(video.published * 1000)
|
||||
video.publishedText = timeToPastText(video.published * 1000)
|
||||
return video
|
||||
})
|
||||
}
|
||||
}
|
||||
return render(200, "pug/subscriptions.pug", {hasSubscriptions, videos, channels})
|
||||
return render(200, "pug/subscriptions.pug", {hasSubscriptions, videos, channels, refreshed, timeToPastText})
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -9,6 +9,9 @@ const prepared = {
|
||||
+ " ( videoId, title, author, authorId, published, viewCountText, descriptionHtml)"
|
||||
+ " VALUES"
|
||||
+ " (@videoId, @title, @author, @authorId, @published, @viewCountText, @descriptionHtml)"
|
||||
),
|
||||
channel_refreshed_update: db.prepare(
|
||||
"UPDATE Channels SET refreshed = ? WHERE ucid = ?"
|
||||
)
|
||||
}
|
||||
|
||||
@ -70,6 +73,8 @@ function refreshChannel(ucid) {
|
||||
// store
|
||||
prepared.video_insert.run(video)
|
||||
})
|
||||
// update channel refreshed
|
||||
prepared.channel_refreshed_update.run(Date.now(), ucid)
|
||||
console.log(`updated ${root.length} videos for channel ${ucid}`)
|
||||
} else if (root.identifier === "PUBLISHED_DATES_NOT_PROVIDED") {
|
||||
return [] // nothing we can do. skip this iteration.
|
||||
|
@ -17,6 +17,16 @@ block content
|
||||
img(src=channel.icon_url width=512 height=512 alt="").thumbnail
|
||||
span.name= channel.name
|
||||
|
||||
if refreshed
|
||||
section
|
||||
details.channels-details
|
||||
summary Last refreshed
|
||||
div Oldest channel was refreshed #{timeToPastText(refreshed.min)}
|
||||
div Newest channel was refreshed #{timeToPastText(refreshed.max)}
|
||||
- const notLoaded = channels.length - refreshed.count
|
||||
if notLoaded
|
||||
div #{notLoaded} subscriptions have not been refreshed at all
|
||||
|
||||
each video in videos
|
||||
.subscriptions-video
|
||||
+video_list_item(video)
|
||||
|
@ -18,13 +18,18 @@ const deltas = [
|
||||
.run()
|
||||
db.prepare("CREATE TABLE Settings (token TEXT NOT NULL, instance TEXT, save_history INTEGER, PRIMARY KEY (token))")
|
||||
.run()
|
||||
},
|
||||
// 1: Channels +refreshed
|
||||
function() {
|
||||
db.prepare("ALTER TABLE Channels ADD COLUMN refreshed INTEGER")
|
||||
.run()
|
||||
}
|
||||
]
|
||||
|
||||
async function createBackup(entry) {
|
||||
const filename = `db/backups/cloudtube.db.bak-v${entry-1}`
|
||||
process.stdout.write(`Backing up current to ${filename}... `)
|
||||
await db.backup(pj(__dirname, "../../", filename))
|
||||
await db.backup(pj(__dirname, "../", filename))
|
||||
process.stdout.write("done.\n")
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user