-
Notifications
You must be signed in to change notification settings - Fork 0
/
remove_deleted_pages.ts
69 lines (55 loc) · 2.12 KB
/
remove_deleted_pages.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
// Copyright (c) 2022 DBotThePony
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the "Software"), to deal in the Software without
// restriction, including without limitation the rights to
// use, copy, modify, merge, publish, distribute, sublicense,
// and/or sell copies of the Software, and to permit persons
// to whom the Software is furnished to do so, subject to the
// following conditions:
// The above copyright notice and this permission notice shall be
// included in all copiesor substantial portions of the Software.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
// OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
import { loadConfig } from "./DaemonConfig"
import { WikiDot } from "./WikiDot"
import {promises} from 'fs'
(async function() {
const config = await loadConfig()
const filenameMatcher = /^(\S+)\.json$/
for (const {name, url} of config.wikis) {
const wiki = new WikiDot(
name,
url,
`${config.base_directory}/${name}`,
null,
null,
null
)
const sitemap = await wiki.readSiteMap()
if (sitemap !== null) {
process.stdout.write(`Scanning ${name}...\n`)
const fileList = await promises.readdir(`${config.base_directory}/${name}/meta/pages`)
const collected = new Array(sitemap.size)
let i = 0
for (const pagename of sitemap.keys()) {
collected[i++] = WikiDot.normalizeName(pagename)
}
for (const filename of fileList) {
const matched = filename.match(filenameMatcher)
if (matched !== null) {
if (!collected.includes(matched[1])) {
process.stdout.write(`[${name}] Deleting ${matched[1]}\n`)
await wiki.markPageRemoved(matched[1])
}
}
}
}
}
process.exit(0)
})()