mono/packages/discourse/lib/sync/file.js

253 lines
21 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.sync = exports.syncYAML = exports.updateTopic = exports.createTopic = void 0;
const path = require("path");
const exists_1 = require("@plastichub/fs/exists");
const dir_1 = require("@plastichub/fs/dir");
const write_1 = require("@plastichub/fs/write");
const read_1 = require("@plastichub/fs/read");
const fs_1 = require("@plastichub/osr-commons");
const bluebird_1 = require("bluebird");
const download_1 = require("./download");
const YAML = require('json-to-pretty-yaml');
const cheerio = require('cheerio');
const markdown_1 = require("../markdown");
const constants_1 = require("../discourse/constants");
const cache_1 = require("../discourse/cache");
const discourse_1 = require("../discourse");
const commons_1 = require("./commons");
const index_1 = require("../../index");
const md5 = require("md5");
const createTopic = async (discourse, options, content) => {
let data;
try {
data = await discourse.createPost(options.title, content, options.cat);
}
catch (e) {
debugger;
}
if (data) {
index_1.logger.debug('created topic : ' + options.title + ' : ' + data.id);
if (data && data.id) {
try {
options.post_id = data.id;
options.topic_id = data.topic_id;
await discourse.changeOwner(options.post_id, options.topic_id, options.user_name);
}
catch (e) {
index_1.logger.error('changing owner ' + options.title + ' failed!', e);
}
}
else {
index_1.logger.debug('creating ' + options.title + ' failed!', data.errors);
if (data.errors) {
if (data.errors[0] && data.errors[0] === 'Title has already been used') {
index_1.logger.error('title already used : ' + options.title);
}
}
}
}
};
exports.createTopic = createTopic;
const updateTopic = async (discourse, options, topic_id, content) => {
let data;
try {
data = await discourse.updatePost(topic_id, content);
}
catch (e) {
}
if (data) {
index_1.logger.debug('created topic : ' + options.title + ' : ' + data.id);
if (data && data.id) {
try {
index_1.logger.debug('change user to ', options.owner);
options.post_id = data.id;
options.topic_id = data.topic_id;
await discourse.changeOwner(topic_id, topic_id, options.user_name);
}
catch (e) {
index_1.logger.debug('changing owner ' + options.title + ' failed!');
}
}
else {
index_1.logger.debug('creating ' + options.title + ' failed!', data.errors);
if (data.errors) {
if (data.errors[0] && data.errors[0] === 'Title has already been used') {
index_1.logger.error('title already used : ' + options.title);
}
}
}
}
};
exports.updateTopic = updateTopic;
const images_urls = (content) => {
const html = (0, markdown_1.toHTML)(content);
const $ = cheerio.load(html, {
xmlMode: true
});
const images = [];
const links = [];
$('img').each(function () {
images.push($(this).attr('src'));
});
return images;
};
const uploadImages = async (content, discourse, options) => {
const root = path.resolve((0, fs_1.resolve)(options.root));
if (!(0, exists_1.sync)(root)) {
return false;
}
const track_path = path.join(root, constants_1.SYNC_TRACK_FILENAME);
const track = (0, read_1.sync)(track_path, 'json') || {};
const html = (0, markdown_1.toHTML)(content);
const $ = cheerio.load(html, {
xmlMode: true
});
const images = images_urls(content);
$('img').each(function () {
images.push($(this).attr('src'));
});
for await (const image of Object.entries(images)) {
const url = image[1];
if (url.startsWith('upload:')) {
continue;
}
if (options.uploadRemote && url.startsWith('http')) {
const contentHash = md5(content).substring(0, 5);
const cache_path = path.resolve((0, fs_1.resolve)('${OSR_CACHE}/discourse-downloads/' + contentHash));
if (!(0, exists_1.sync)(cache_path)) {
(0, dir_1.sync)(cache_path);
}
const image_name = (0, download_1.imageName)(url);
const image_local = path.join(cache_path, image_name);
if (!(0, exists_1.sync)(image_local)) {
await (0, download_1.downloadFile)(url, cache_path);
}
if ((0, exists_1.sync)(image_local)) {
const upped = await discourse.uploadFile(options.owner, image_local);
const data = upped.data;
if (data && data.id) {
track[url] = data;
(0, write_1.sync)(track_path, track);
}
else {
console.error('error uploading image');
}
}
continue;
}
if (options.uploadLocal) {
const image_path = path.join(root, url);
if ((0, exists_1.sync)(image_path) && !track[url]) {
const upped = await discourse.uploadFile(options.owner, image_path);
const data = upped.data;
if (data && data.id) {
track[url] = data;
(0, write_1.sync)(track_path, track);
}
else {
console.error('error uploading image');
}
}
}
}
return track;
};
const syncFile = async (file, options) => {
const discourse = (0, discourse_1.Instance)(null, options.config);
let content = (0, read_1.sync)(file);
const fm = (0, commons_1.fromYAML)(content, options) || {};
let body = "" + fm.body;
let images_track;
if (options.uploadLocal || options.uploadRemote) {
images_track = await uploadImages(body, discourse, options);
const image_urls = images_urls(body);
image_urls.forEach((i) => {
if (images_track[i])
body = body.replace(i, images_track[i].short_url);
});
}
(0, write_1.sync)('./out/md.md', body);
let dOpts = options.yaml ? fm.attributes : {
cat: options.cat,
id: options.id,
owner: options.owner,
tags: options.tags,
title: options.title
};
options = {
...options,
...dOpts
};
const cats = await (0, cache_1.cacheCategories)(options, discourse);
const tags = await (0, cache_1.cacheTags)(options, discourse);
const users = await (0, cache_1.cacheUsers)(options, discourse);
const search = await discourse.search(dOpts.title);
let post_id, topic_id;
if (options.yaml) {
post_id = dOpts.post_id;
topic_id = dOpts.topic_id;
}
let dTopic;
let dPost;
if (search.posts && search.topics
&& search.posts[0] && search.topics[0]
&& search.topics[0].title === dOpts.title) {
dPost = search.posts[0];
dTopic = search.topics[0];
topic_id = dTopic.id;
post_id = dPost.id;
}
else if (post_id && topic_id) {
}
const user = users.find((u) => {
return u.id === dOpts.owner;
});
if (!user) {
index_1.logger.error('Invalid user : ', dOpts.owner);
return false;
}
options.user_name = user.username;
let topic = null;
if (post_id) {
topic = await (0, exports.updateTopic)(discourse, options, post_id, body);
if (topic_id) {
topic = await discourse.updateTopic(topic_id, dOpts.cat, dOpts.title, dOpts.tags ? dOpts.tags.split(',') : []);
}
}
else {
await (0, exports.createTopic)(discourse, options, body);
topic_id = options.topic_id;
post_id = options.post_id;
await discourse.updateTopic(topic_id, dOpts.cat, dOpts.title, dOpts.tags ? dOpts.tags.split(',') : []);
}
if (dTopic) {
options.topic_id = dTopic.id;
}
if (dPost) {
options.post_id = dPost.id;
}
if (options.yaml) {
let contentOut = `---\n`;
contentOut += YAML.stringify({
...fm.attributes,
topic_id: topic_id,
post_id: post_id
});
contentOut += `---\n`;
contentOut += fm.body;
(0, write_1.sync)(file, contentOut);
}
return content;
};
const syncYAML = async (options) => {
await bluebird_1.Promise.resolve(options.srcInfo.FILES).map((f) => {
return syncFile(f, options);
}, { concurrency: 1 });
};
exports.syncYAML = syncYAML;
const sync = async (options) => {
return (0, exports.syncYAML)(options);
};
exports.sync = sync;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvc3luYy9maWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZCQUE0QjtBQUM1QixrREFBc0Q7QUFFdEQsNENBQWdEO0FBQ2hELGdEQUFvRDtBQUNwRCw4Q0FBa0Q7QUFFbEQsdURBQXdEO0FBRXhELHVDQUE4QztBQUU5Qyx5Q0FBb0Q7QUFHcEQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBQUE7QUFDM0MsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBRW5DLDBDQUFvQztBQUVwQyxzREFFK0I7QUFFL0IsOENBSzJCO0FBRTNCLDRDQUdxQjtBQUVyQix1Q0FFa0I7QUFHbEIsdUNBQStEO0FBRS9ELDJCQUEwQjtBQUVuQixNQUFNLFdBQVcsR0FBRyxLQUFLLEVBQUUsU0FBcUIsRUFBRSxPQUFxQixFQUFFLE9BQU8sRUFBRSxFQUFFO0lBRXZGLElBQUksSUFBUyxDQUFBO0lBQ2IsSUFBSTtRQUNBLElBQUksR0FBRyxNQUFNLFNBQVMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQWEsQ0FBQyxDQUFBO0tBQ25GO0lBQUMsT0FBTyxDQUFDLEVBQUU7UUFDUixRQUFRLENBQUE7S0FDWDtJQUVELElBQUksSUFBSSxFQUFFO1FBQ04sY0FBTSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsR0FBRyxPQUFPLENBQUMsS0FBSyxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDbkUsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRTtZQUVqQixJQUFJO2dCQUNBLE9BQU8sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDMUIsT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFBO2dC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