1
0
mirror of https://git.sr.ht/~cadence/cloudtube synced 2024-09-19 18:57:30 +00:00

Display how recently channels were refreshed

This commit is contained in:
Cadence Ember 2020-09-24 00:48:32 +12:00
parent 2e69dfc4b7
commit 83dec0c7ab
No known key found for this signature in database
GPG Key ID: BC1C2C61CF521B17
4 changed files with 31 additions and 10 deletions

View File

@ -2,7 +2,7 @@ const {render} = require("pinski/plugins")
const db = require("../utils/db") const db = require("../utils/db")
const {fetchChannelLatest} = require("../utils/youtube") const {fetchChannelLatest} = require("../utils/youtube")
const {getUser} = require("../utils/getuser") const {getUser} = require("../utils/getuser")
const converters = require("../utils/converters") const {timeToPastText} = require("../utils/converters")
module.exports = [ module.exports = [
{ {
@ -11,25 +11,26 @@ module.exports = [
let hasSubscriptions = false let hasSubscriptions = false
let videos = [] let videos = []
let channels = [] let channels = []
let refreshed = null
if (user.token) { if (user.token) {
// get channels
const subscriptions = user.getSubscriptions() const subscriptions = user.getSubscriptions()
const channelPrepared = db.prepare("SELECT * FROM Channels WHERE ucid = ?") const template = Array(subscriptions.length).fill("?").join(", ")
channels = subscriptions.map(id => channelPrepared.get(id)).sort((a, b) => { channels = db.prepare(`SELECT * FROM Channels WHERE ucid IN (${template}) ORDER BY name`).all(subscriptions)
if (a.name < b.name) return -1 // get refreshed status
else if (b.name > a.name) return 1 refreshed = db.prepare(`SELECT min(refreshed) as min, max(refreshed) as max, count(refreshed) as count FROM Channels WHERE ucid IN (${template})`).get(subscriptions)
else return 0 // get videos
})
if (subscriptions.length) { if (subscriptions.length) {
hasSubscriptions = true hasSubscriptions = true
const template = Array(subscriptions.length).fill("?").join(", ") 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) videos = db.prepare(`SELECT * FROM Videos WHERE authorId IN (${template}) ORDER BY published DESC LIMIT 60`).all(subscriptions)
.map(video => { .map(video => {
video.publishedText = converters.timeToPastText(video.published * 1000) video.publishedText = timeToPastText(video.published * 1000)
return video return video
}) })
} }
} }
return render(200, "pug/subscriptions.pug", {hasSubscriptions, videos, channels}) return render(200, "pug/subscriptions.pug", {hasSubscriptions, videos, channels, refreshed, timeToPastText})
} }
} }
] ]

View File

@ -9,6 +9,9 @@ const prepared = {
+ " ( videoId, title, author, authorId, published, viewCountText, descriptionHtml)" + " ( videoId, title, author, authorId, published, viewCountText, descriptionHtml)"
+ " VALUES" + " VALUES"
+ " (@videoId, @title, @author, @authorId, @published, @viewCountText, @descriptionHtml)" + " (@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 // store
prepared.video_insert.run(video) 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}`) console.log(`updated ${root.length} videos for channel ${ucid}`)
} else if (root.identifier === "PUBLISHED_DATES_NOT_PROVIDED") { } else if (root.identifier === "PUBLISHED_DATES_NOT_PROVIDED") {
return [] // nothing we can do. skip this iteration. return [] // nothing we can do. skip this iteration.

View File

@ -17,6 +17,16 @@ block content
img(src=channel.icon_url width=512 height=512 alt="").thumbnail img(src=channel.icon_url width=512 height=512 alt="").thumbnail
span.name= channel.name 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 each video in videos
.subscriptions-video .subscriptions-video
+video_list_item(video) +video_list_item(video)

View File

@ -18,13 +18,18 @@ const deltas = [
.run() .run()
db.prepare("CREATE TABLE Settings (token TEXT NOT NULL, instance TEXT, save_history INTEGER, PRIMARY KEY (token))") db.prepare("CREATE TABLE Settings (token TEXT NOT NULL, instance TEXT, save_history INTEGER, PRIMARY KEY (token))")
.run() .run()
},
// 1: Channels +refreshed
function() {
db.prepare("ALTER TABLE Channels ADD COLUMN refreshed INTEGER")
.run()
} }
] ]
async function createBackup(entry) { async function createBackup(entry) {
const filename = `db/backups/cloudtube.db.bak-v${entry-1}` const filename = `db/backups/cloudtube.db.bak-v${entry-1}`
process.stdout.write(`Backing up current to ${filename}... `) 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") process.stdout.write("done.\n")
} }