mirror of
https://git.sr.ht/~cadence/cloudtube
synced 2024-11-22 15:47:30 +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 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})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
@ -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.
|
||||||
|
@ -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)
|
||||||
|
@ -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")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user