Generate Atom feed
This commit is contained in:
@ -92,84 +92,97 @@ function getMigrations(): Migration[] {
|
||||
}];
|
||||
}
|
||||
|
||||
export function savePost(post: Post): void {
|
||||
console.debug(`Saving post ${post.url}`);
|
||||
const account = post.account;
|
||||
db.run(`
|
||||
INSERT INTO accounts (id, acct, username, display_name, url, avatar, avatar_static)
|
||||
VALUES(?, ?, ?, ?, ?, ?, ?)
|
||||
ON CONFLICT(id)
|
||||
DO UPDATE SET
|
||||
acct=excluded.acct,
|
||||
username=excluded.username,
|
||||
display_name=excluded.display_name,
|
||||
url=excluded.url,
|
||||
avatar=excluded.avatar,
|
||||
avatar_static=excluded.avatar_static;`,
|
||||
[
|
||||
account.id,
|
||||
account.acct,
|
||||
account.username,
|
||||
account.display_name,
|
||||
account.url,
|
||||
account.avatar,
|
||||
account.avatar_static
|
||||
],
|
||||
(err) => {
|
||||
if (err !== null) {
|
||||
console.error(`Could not insert/update account ${account.id}`, err);
|
||||
return;
|
||||
}
|
||||
db.run(`
|
||||
INSERT INTO posts (id, content, created_at, url, account_id)
|
||||
VALUES (?, ?, ?, ?, ?) ON CONFLICT(id) DO UPDATE SET
|
||||
content=excluded.content,
|
||||
created_at=excluded.created_at,
|
||||
url=excluded.url,
|
||||
account_id=excluded.account_id;`,
|
||||
[
|
||||
post.id,
|
||||
post.content,
|
||||
post.created_at,
|
||||
post.url,
|
||||
post.account.id
|
||||
],
|
||||
(postErr) => {
|
||||
if (postErr !== null) {
|
||||
console.error(`Could not insert post ${post.url}`, postErr);
|
||||
return;
|
||||
}
|
||||
|
||||
db.parallelize(() => {
|
||||
for (let tag of post.tags) {
|
||||
db.run(`
|
||||
INSERT INTO tags (url, tag) VALUES (?, ?)
|
||||
ON CONFLICT(url) DO UPDATE SET
|
||||
tag=excluded.tag;`,
|
||||
[
|
||||
tag.url,
|
||||
tag.name
|
||||
],
|
||||
(tagErr) => {
|
||||
if (tagErr !== null) {
|
||||
console.error(`Could not insert/update tag ${tag.url}`, tagErr);
|
||||
return;
|
||||
}
|
||||
db.run('INSERT INTO poststags (post_id, tag_url) VALUES (?, ?)',
|
||||
[post.id, tag.url],
|
||||
(posttagserr) => {
|
||||
if (posttagserr !== null) {
|
||||
console.error(`Could not insert poststags ${tag.url}, ${post.url}`, posttagserr);
|
||||
return;
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
);
|
||||
export async function savePost(post: Post): Promise<undefined> {
|
||||
return new Promise((resolve, reject) => {
|
||||
console.debug(`Saving post ${post.url}`);
|
||||
const account = post.account;
|
||||
db.run(`
|
||||
INSERT INTO accounts (id, acct, username, display_name, url, avatar, avatar_static)
|
||||
VALUES(?, ?, ?, ?, ?, ?, ?)
|
||||
ON CONFLICT(id)
|
||||
DO UPDATE SET
|
||||
acct=excluded.acct,
|
||||
username=excluded.username,
|
||||
display_name=excluded.display_name,
|
||||
url=excluded.url,
|
||||
avatar=excluded.avatar,
|
||||
avatar_static=excluded.avatar_static;`,
|
||||
[
|
||||
account.id,
|
||||
account.acct,
|
||||
account.username,
|
||||
account.display_name,
|
||||
account.url,
|
||||
account.avatar,
|
||||
account.avatar_static
|
||||
],
|
||||
(err) => {
|
||||
if (err !== null) {
|
||||
console.error(`Could not insert/update account ${account.id}`, err);
|
||||
reject(err);
|
||||
return;
|
||||
}
|
||||
db.run(`
|
||||
INSERT INTO posts (id, content, created_at, url, account_id)
|
||||
VALUES (?, ?, ?, ?, ?) ON CONFLICT(id) DO UPDATE SET
|
||||
content=excluded.content,
|
||||
created_at=excluded.created_at,
|
||||
url=excluded.url,
|
||||
account_id=excluded.account_id;`,
|
||||
[
|
||||
post.id,
|
||||
post.content,
|
||||
post.created_at,
|
||||
post.url,
|
||||
post.account.id
|
||||
],
|
||||
(postErr) => {
|
||||
if (postErr !== null) {
|
||||
console.error(`Could not insert post ${post.url}`, postErr);
|
||||
reject(postErr);
|
||||
return;
|
||||
}
|
||||
|
||||
db.parallelize(() => {
|
||||
let remaining = post.tags.length;
|
||||
for (let tag of post.tags) {
|
||||
db.run(`
|
||||
INSERT INTO tags (url, tag) VALUES (?, ?)
|
||||
ON CONFLICT(url) DO UPDATE SET
|
||||
tag=excluded.tag;`,
|
||||
[
|
||||
tag.url,
|
||||
tag.name
|
||||
],
|
||||
(tagErr) => {
|
||||
if (tagErr !== null) {
|
||||
console.error(`Could not insert/update tag ${tag.url}`, tagErr);
|
||||
reject(tagErr);
|
||||
return;
|
||||
}
|
||||
db.run('INSERT INTO poststags (post_id, tag_url) VALUES (?, ?)',
|
||||
[post.id, tag.url],
|
||||
(posttagserr) => {
|
||||
if (posttagserr !== null) {
|
||||
console.error(`Could not insert poststags ${tag.url}, ${post.url}`, posttagserr);
|
||||
reject(posttagserr);
|
||||
return;
|
||||
}
|
||||
// Don't decrease on fail
|
||||
remaining--;
|
||||
// Only resolve after all have been inserted
|
||||
if (remaining === 0) {
|
||||
resolve(undefined);
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
export async function getPosts(since: string | null, before: string | null, limit: number) {
|
||||
|
Reference in New Issue
Block a user