Merge remote-tracking branch 'origin/main' into main
This commit is contained in:
commit
f457dc0dfc
3
.gitignore
vendored
3
.gitignore
vendored
@ -1,2 +1,3 @@
|
||||
.well-known
|
||||
node_modules
|
||||
node_modules
|
||||
db.json
|
||||
3
index.js
3
index.js
@ -1,6 +1,7 @@
|
||||
const express = require('express')
|
||||
const app = express()
|
||||
const fs = require('fs')
|
||||
const util = require('./server/util')
|
||||
require('dotenv').config()
|
||||
|
||||
app.set('env', process.env.NODE_ENV || "production")
|
||||
@ -29,6 +30,8 @@ app.use('/', require('./routes/static'))
|
||||
app.use('/feed', require('./routes/feed'))
|
||||
app.use('/rss', require('./routes/feed'))
|
||||
|
||||
util.updateDB()
|
||||
|
||||
app.listen(app.get('port'), () => {
|
||||
console.log(`Node server listening at http://localhost:${app.get('port')}`)
|
||||
})
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
{
|
||||
"ignore": [],
|
||||
"ignore": ["db.json"],
|
||||
"env": {
|
||||
"NODE_ENV": "development"
|
||||
}
|
||||
|
||||
@ -55,4 +55,9 @@ router.get('/pgp', (req, res) => {
|
||||
res.render('pgp', { title: 'PGP — yarmo.eu' })
|
||||
})
|
||||
|
||||
// router.get('/updateDB', async (req, res) => {
|
||||
// const response = await util.updateDB()
|
||||
// res.send(response)
|
||||
// })
|
||||
|
||||
module.exports = router
|
||||
|
||||
@ -9,6 +9,13 @@ const md = require('markdown-it')({ typographer: true })
|
||||
const yamlFront = require('yaml-front-matter')
|
||||
const { DateTime } = require('luxon')
|
||||
const Feed = require('feed').Feed
|
||||
const low = require('lowdb')
|
||||
const FileSync = require('lowdb/adapters/FileSync')
|
||||
|
||||
const adapter = new FileSync('db.json')
|
||||
const db = low(adapter)
|
||||
db.defaults({ posts: [] })
|
||||
.write()
|
||||
|
||||
md.use(require("markdown-it-anchor"), {
|
||||
"level": 2,
|
||||
@ -34,6 +41,15 @@ const getBlogPosts = async (opts) => {
|
||||
if (!opts) { opts = {} }
|
||||
opts.publishedOnly = 'publishedOnly' in opts ? opts.publishedOnly : true
|
||||
|
||||
return db._.reverse(db.get('posts')
|
||||
.filter({ type: 'blog', published: opts.publishedOnly })
|
||||
.sortBy('date')
|
||||
.value())
|
||||
}
|
||||
const getBlogPostsFromFiles = async (opts) => {
|
||||
if (!opts) { opts = {} }
|
||||
opts.publishedOnly = 'publishedOnly' in opts ? opts.publishedOnly : true
|
||||
|
||||
let data = []
|
||||
for await (const f of getFiles(path.join(__dirname, '../', 'content', 'blog'))) {
|
||||
const rawContent = fs.readFileSync(f, 'utf8')
|
||||
@ -62,6 +78,15 @@ const getNotes = async (opts) => {
|
||||
if (!opts) { opts = {} }
|
||||
opts.publishedOnly = 'publishedOnly' in opts ? opts.publishedOnly : true
|
||||
|
||||
return db._.reverse(db.get('posts')
|
||||
.filter({ type: 'note', published: opts.publishedOnly })
|
||||
.sortBy('date')
|
||||
.value())
|
||||
}
|
||||
const getNotesFromFiles = async (opts) => {
|
||||
if (!opts) { opts = {} }
|
||||
opts.publishedOnly = 'publishedOnly' in opts ? opts.publishedOnly : true
|
||||
|
||||
let data = []
|
||||
for await (const f of getFiles(path.join(__dirname, '../', 'content', 'notes'))) {
|
||||
const rawContent = fs.readFileSync(f, 'utf8')
|
||||
@ -87,15 +112,19 @@ const getNotes = async (opts) => {
|
||||
}
|
||||
|
||||
const getPost = async (slug) => {
|
||||
let post = null, posts = await getBlogPosts()
|
||||
posts = _.filter(posts, (p) => { return slug == p.slug })
|
||||
post = posts.length > 0 ? posts[0] : null
|
||||
// let post = null, posts = await getBlogPosts()
|
||||
// posts = _.filter(posts, (p) => { return slug == p.slug })
|
||||
// post = posts.length > 0 ? posts[0] : null
|
||||
//
|
||||
// if (!post) {
|
||||
// posts = await getNotes()
|
||||
// posts = _.filter(posts, (p) => { return slug == p.slug })
|
||||
// post = posts.length > 0 ? posts[0] : null
|
||||
// }
|
||||
|
||||
if (!post) {
|
||||
posts = await getNotes()
|
||||
posts = _.filter(posts, (p) => { return slug == p.slug })
|
||||
post = posts.length > 0 ? posts[0] : null
|
||||
}
|
||||
let post = db.get('posts')
|
||||
.find({ slug: slug })
|
||||
.value()
|
||||
|
||||
return post
|
||||
}
|
||||
@ -111,7 +140,7 @@ const getWebmentions = async (url) => {
|
||||
x.time = DateTime.fromISO(x.created_at).setLocale("en").setZone('utc').toLocaleString(DateTime.TIME_24_WITH_SHORT_OFFSET)
|
||||
return x
|
||||
})
|
||||
|
||||
|
||||
return data
|
||||
}
|
||||
|
||||
@ -196,11 +225,35 @@ const getRSS = async (opts) => {
|
||||
return response
|
||||
}
|
||||
|
||||
const updateDB = async () => {
|
||||
db.read()
|
||||
|
||||
let data
|
||||
data = await getBlogPostsFromFiles({ publishedOnly: false })
|
||||
data = data.concat(await getNotesFromFiles({ publishedOnly: false }))
|
||||
|
||||
data.forEach((item, i) => {
|
||||
if (db.get('posts').find({ slug: item.slug }).size().value() == 0) {
|
||||
db.get('posts')
|
||||
.push(item)
|
||||
.write()
|
||||
} else {
|
||||
db.get('posts')
|
||||
.find({ slug: item.slug })
|
||||
.assign(item)
|
||||
.write()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
getFiles: getFiles,
|
||||
getBlogPosts: getBlogPosts,
|
||||
getBlogPostsFromFiles: getBlogPostsFromFiles,
|
||||
getNotes: getNotes,
|
||||
getNotesFromFiles: getNotesFromFiles,
|
||||
getPost: getPost,
|
||||
getWebmentions: getWebmentions,
|
||||
getRSS: getRSS
|
||||
getRSS: getRSS,
|
||||
updateDB: updateDB
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user