diff --git a/main.js b/main.js index 0bc6059..78a23c1 100644 --- a/main.js +++ b/main.js @@ -33,14 +33,16 @@ var DEFAULT_SETTINGS = { password: "", token: "", time: "2020-01-01 00:00:00", + noteTime: "2024-03-09T10:37:49", apiKey: "" }; var isWriting = false; var SyncReadPlugin = class extends import_obsidian.Plugin { async onload() { await this.loadSettings(); - const ribbonIconEl = this.addRibbonIcon("sync", "SyncRead", (evt) => { - writeAllArticles(this.app, this); + const ribbonIconEl = this.addRibbonIcon("sync", "SyncRead", async (evt) => { + await writeAllArticles(this.app, this); + writeAllNote(this.app, this); }); this.addSettingTab(new SyncReadSettingTab(this.app, this)); } @@ -61,50 +63,7 @@ var SyncReadSettingTab = class extends import_obsidian.PluginSettingTab { display() { const { containerEl } = this; containerEl.empty(); - new import_obsidian.Setting(containerEl).setName("\u7528\u6237\u540D").setDesc("\u8F93\u5165\u4F60\u5728SyncRead\u6CE8\u518C\u7684\u90AE\u7BB1").addText((text) => text.setPlaceholder("\u8BF7\u8F93\u5165\u90AE\u7BB1").setValue(this.plugin.settings.email).onChange(async (value) => { - this.plugin.settings.email = value; - await this.plugin.saveSettings(); - })); - new import_obsidian.Setting(containerEl).setName("\u5BC6\u7801").setDesc("").addText((text) => text.setPlaceholder("\u8BF7\u8F93\u5165\u5BC6\u7801").setValue(this.plugin.settings.password).onChange(async (value) => { - this.plugin.settings.password = value; - await this.plugin.saveSettings(); - })); - new import_obsidian.Setting(containerEl).addButton((button) => { - button.setButtonText("\u767B\u5F55").onClick(async () => { - button.disabled = true; - button.setButtonText("\u767B\u5F55\u4E2D..."); - const { email, password } = this.plugin.settings; - try { - const res = await (0, import_obsidian.requestUrl)({ - url: "http://43.138.149.38:5050/login/", - method: "POST", - contentType: "application/json", - body: JSON.stringify({ - "username": email, - "password": password - }) - }); - if (res.status !== 200) { - new import_obsidian.Notice("\u767B\u5F55\u5931\u8D25"); - button.disabled = false; - button.setButtonText("\u767B\u5F55"); - return; - } - const data = await res.json; - this.plugin.settings.token = data.data.token; - await this.plugin.saveSettings(); - new import_obsidian.Notice("\u767B\u5F55\u6210\u529F"); - button.setButtonText("\u767B\u5F55\u6210\u529F"); - button.disabled = false; - } catch (error) { - new import_obsidian.Notice("\u767B\u5F55\u5931\u8D25: " + error.message); - button.disabled = false; - button.setButtonText("\u767B\u5F55"); - return; - } - }); - }); - new import_obsidian.Setting(containerEl).setName("api key(\u53EF\u9009)").addText((text) => text.setPlaceholder("\u8BF7\u8F93\u5165api key").setValue(this.plugin.settings.apiKey).onChange(async (value) => { + new import_obsidian.Setting(containerEl).setName("api key").addText((text) => text.setPlaceholder("\u8BF7\u8F93\u5165api key").setValue(this.plugin.settings.apiKey).onChange(async (value) => { this.plugin.settings.apiKey = value; await this.plugin.saveSettings(); })); @@ -115,15 +74,7 @@ async function fetchArticle(settings, time, page) { const apiKey = settings.apiKey; let res; if (apiKey === "") { - res = await (0, import_obsidian.requestUrl)( - { - url: `http://43.138.149.38:5050/get_synced_articles?time=${time}&page_number=${page}&page_size=50`, - method: "GET", - headers: { - "Authorization": "Bearer " + settings.token - } - } - ); + new import_obsidian.Notice("\u8BF7\u586B\u5199api key"); } else { res = await (0, import_obsidian.requestUrl)( { @@ -134,14 +85,44 @@ async function fetchArticle(settings, time, page) { } } ); + if (res.status !== 200) { + new import_obsidian.Notice("\u540C\u6B65\u6587\u7AE0\u5931\u8D25"); + isWriting = false; + return; + } + const data = await res.json; + return data.data; } - if (res.status !== 200) { - new import_obsidian.Notice("\u540C\u6B65\u5931\u8D25"); - isWriting = false; - return; + } catch (error) { + new import_obsidian.Notice("\u540C\u6B65\u5931\u8D25: " + error.message); + isWriting = false; + return; + } +} +async function fetchNote(settings, time, page) { + try { + const apiKey = settings.apiKey; + let res; + if (apiKey === "") { + new import_obsidian.Notice("\u8BF7\u586B\u5199api key"); + } else { + res = await (0, import_obsidian.requestUrl)( + { + url: `http://43.138.149.38:5050/get_notes_by_key?time=${time}&page_number=${page}&page_size=50`, + method: "GET", + headers: { + "api_key": apiKey + } + } + ); + if (res.status !== 200) { + new import_obsidian.Notice("\u540C\u6B65\u6807\u6CE8\u5931\u8D25"); + isWriting = false; + return; + } + const data = await res.json; + return data.data; } - const data = await res.json; - return data.data; } catch (error) { new import_obsidian.Notice("\u540C\u6B65\u5931\u8D25: " + error.message); isWriting = false; @@ -152,13 +133,56 @@ async function writeArticle(vault, fileManager, article) { var folder = vault.getAbstractFileByPath("SyncRead\u540C\u6B65\u6587\u4EF6\u5939"); if (!folder) folder = await vault.createFolder("SyncRead\u540C\u6B65\u6587\u4EF6\u5939"); - new import_obsidian.Notice("url: " + article.site); let file = await vault.create(folder.path + "/" + filterIllegalChars((0, import_obsidian.normalizePath)(article.title)) + ".md", article.content); return fileManager.processFrontMatter(file, (frontMatter) => { frontMatter["created_at"] = new Date().toISOString(); frontMatter["url"] = article.site; }); } +async function writeNote(vault, fileManager, note) { + var folder = vault.getAbstractFileByPath("SyncRead\u540C\u6B65\u6587\u4EF6\u5939"); + if (!folder) + folder = await vault.createFolder("SyncRead\u540C\u6B65\u6587\u4EF6\u5939"); + var noteFolder = vault.getAbstractFileByPath(folder.path + "/\u6807\u6CE8"); + if (!noteFolder) + noteFolder = await vault.createFolder(folder.path + "/\u6807\u6CE8"); + let noteFile = vault.getAbstractFileByPath(noteFolder.path + "/[\u6807\u6CE8]" + filterIllegalChars((0, import_obsidian.normalizePath)(note.articleTitle)) + ".md"); + if (!noteFile) { + noteFile = await vault.create(noteFolder.path + "/[\u6807\u6CE8]" + filterIllegalChars((0, import_obsidian.normalizePath)(note.articleTitle)) + ".md", "\n"); + fileManager.processFrontMatter(noteFile, (frontMatter) => { + frontMatter["originArticle"] = `[[${filterIllegalChars((0, import_obsidian.normalizePath)(note.articleTitle))}]]`; + }); + } + let noteText = note.text.replace(/\n+$/, ""); + let noteTextWithQuotes = "\n\n\n>" + noteText.replace(/\n/g, "\n>"); + new import_obsidian.Notice(noteTextWithQuotes); + return vault.append(noteFile, noteTextWithQuotes + "\n\n" + (note.annotation !== null ? note.annotation : "")); +} +async function writeAllNote(app, plugin) { + let vault = app.vault; + let fileManager = app.fileManager; + if (isWriting) + return; + isWriting = true; + var time = plugin.settings.noteTime; + var page = 1; + do { + const notes = await fetchNote(plugin.settings, time, page); + if (notes.length === 0) { + isWriting = false; + new import_obsidian.Notice("\u540C\u6B65\u6807\u6CE8\u5B8C\u6210"); + break; + } + try { + await Promise.all(notes.map((note) => writeNote(vault, fileManager, note))); + } catch (error) { + } + plugin.settings.noteTime = notes[notes.length - 1].update_at; + plugin.saveSettings(); + page++; + await new Promise((resolve) => setTimeout(resolve, 1e3)); + } while (true); +} async function writeAllArticles(app, plugin) { let vault = app.vault; let fileManager = app.fileManager; @@ -172,7 +196,7 @@ async function writeAllArticles(app, plugin) { const articles = await fetchArticle(plugin.settings, time, page); if (articles.length === 0) { isWriting = false; - new import_obsidian.Notice("\u540C\u6B65\u5B8C\u6210"); + new import_obsidian.Notice("\u540C\u6B65\u6587\u7AE0\u5B8C\u6210"); break; } try { @@ -190,4 +214,4 @@ function filterIllegalChars(title) { const filteredTitle = title.replace(illegalChars, ""); return filteredTitle; } -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibWFpbi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgdGltZSB9IGZyb20gJ2NvbnNvbGUnO1xuaW1wb3J0IHsgQXBwLCBOb3RpY2UsIFBsdWdpbiwgUGx1Z2luU2V0dGluZ1RhYiwgU2V0dGluZyxWYXVsdCxURmlsZSwgbm9ybWFsaXplUGF0aCwgcmVxdWVzdFVybCwgRmlsZU1hbmFnZXIgfSBmcm9tICdvYnNpZGlhbic7XG5cbi8vIFJlbWVtYmVyIHRvIHJlbmFtZSB0aGVzZSBjbGFzc2VzIGFuZCBpbnRlcmZhY2VzIVxuXG5pbnRlcmZhY2UgU3luY1JlYWRQbHVnaW5TZXR0aW5ncyB7XG5cdGVtYWlsOiBzdHJpbmc7XG5cdHBhc3N3b3JkOiBzdHJpbmc7XG5cdHRva2VuOiBzdHJpbmc7XG5cdHRpbWU6IHN0cmluZztcblx0YXBpS2V5OiBzdHJpbmc7XG59XG5cbmNvbnN0IERFRkFVTFRfU0VUVElOR1M6IFN5bmNSZWFkUGx1Z2luU2V0dGluZ3MgPSB7XG5cdGVtYWlsOiAnJyxcblx0cGFzc3dvcmQ6ICcnLFxuXHR0b2tlbjogJycsXG5cdHRpbWU6ICcyMDIwLTAxLTAxIDAwOjAwOjAwJyxcblx0YXBpS2V5OiAnJ1xufVxuXG52YXIgaXNXcml0aW5nID0gZmFsc2U7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN5bmNSZWFkUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHtcblx0c2V0dGluZ3M6IFN5bmNSZWFkUGx1Z2luU2V0dGluZ3M7XG5cblx0YXN5bmMgb25sb2FkKCkge1xuXHRcdGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XG5cblx0XHQvLyBUaGlzIGNyZWF0ZXMgYW4gaWNvbiBpbiB0aGUgbGVmdCByaWJib24uXG5cdFx0Y29uc3QgcmliYm9uSWNvbkVsID0gdGhpcy5hZGRSaWJib25JY29uKCdzeW5jJywgJ1N5bmNSZWFkJywgKGV2dDogTW91c2VFdmVudCkgPT4ge1xuXHRcdFx0Ly8gQ2FsbGVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIHRoZSBpY29uLlxuXHRcdFx0Ly8gbmV3IE5vdGljZSgnVGhpcyBpcyBhIG5vdGljZSEnKTtcblx0XHRcdC8vIG5ldyBOb3RpY2UoYHBhdGg6ICR7dGhpcy5hcHAudmF1bHQuZ2V0Um9vdCgpLnBhdGh9YCk7XG5cdFx0XHQvLyBjcmFldGVGaWxlKHRoaXMuYXBwLnZhdWx0KTtcblx0XHRcdC8vIG5ldyBOb3RpY2UoYHRva2VuOiAke3RoaXMuc2V0dGluZ3MudG9rZW59YCk7XG5cdFx0IFx0d3JpdGVBbGxBcnRpY2xlcyh0aGlzLmFwcCx0aGlzKTtcblx0XHR9KTtcblx0XHRcblxuXHRcdC8vIFRoaXMgYWRkcyBhIHNldHRpbmdzIHRhYiBzbyB0aGUgdXNlciBjYW4gY29uZmlndXJlIHZhcmlvdXMgYXNwZWN0cyBvZiB0aGUgcGx1Z2luXG5cdFx0Ly8gaWYodGhpcy5zZXR0aW5ncy50b2tlbiAhPT0gJycpe1xuXHRcdC8vIFx0dGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBTZXR0aW5nc1RhYih0aGlzLmFwcCwgdGhpcykpO1xuXHRcdC8vIH1lbHNle1xuXHRcdC8vIH1cblx0XHR0aGlzLmFkZFNldHRpbmdUYWIobmV3IFN5bmNSZWFkU2V0dGluZ1RhYih0aGlzLmFwcCwgdGhpcykpO1xuXG5cdH1cblxuXHRvbnVubG9hZCgpIHtcblx0fVxuXG5cdGFzeW5jIGxvYWRTZXR0aW5ncygpIHtcblx0XHR0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9TRVRUSU5HUywgYXdhaXQgdGhpcy5sb2FkRGF0YSgpKTtcblx0XHQvLyB0aGlzLnNldHRpbmdzLnRpbWUgPSAnMjAyMC0wMS0wMSAwMDowMDowMCc7XG5cdH1cblxuXHRhc3luYyBzYXZlU2V0dGluZ3MoKSB7XG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcblx0fVxufVxuXG5cbmNsYXNzIFN5bmNSZWFkU2V0dGluZ1RhYiBleHRlbmRzIFBsdWdpblNldHRpbmdUYWIge1xuXHRwbHVnaW46IFN5bmNSZWFkUGx1Z2luO1xuXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IFN5bmNSZWFkUGx1Z2luKSB7XG5cdFx0c3VwZXIoYXBwLCBwbHVnaW4pO1xuXHRcdHRoaXMucGx1Z2luID0gcGx1Z2luO1xuXHRcdFxuXHR9XG5cblx0ZGlzcGxheSgpOiB2b2lkIHtcblx0XHRjb25zdCB7Y29udGFpbmVyRWx9ID0gdGhpcztcblxuXHRcdGNvbnRhaW5lckVsLmVtcHR5KCk7XG5cblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdcdTc1MjhcdTYyMzdcdTU0MEQnKVxuXHRcdFx0LnNldERlc2MoJ1x1OEY5M1x1NTE2NVx1NEY2MFx1NTcyOFN5bmNSZWFkXHU2Q0U4XHU1MThDXHU3Njg0XHU5MEFFXHU3QkIxJylcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4gdGV4dFxuXHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ1x1OEJGN1x1OEY5M1x1NTE2NVx1OTBBRVx1N0JCMScpXG5cdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbWFpbClcblx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmVtYWlsID0gdmFsdWU7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdcdTVCQzZcdTc4MDEnKVxuXHRcdFx0LnNldERlc2MoJycpXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcblx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdcdThCRjdcdThGOTNcdTUxNjVcdTVCQzZcdTc4MDEnKVxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MucGFzc3dvcmQpXG5cdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5wYXNzd29yZCA9IHZhbHVlO1xuXHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHR9KSk7XG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuYWRkQnV0dG9uKGJ1dHRvbiA9PiB7XG5cdFx0XHRcdGJ1dHRvblxuXHRcdFx0XHRcdC5zZXRCdXR0b25UZXh0KCdcdTc2N0JcdTVGNTUnKVxuXHRcdFx0XHRcdC5vbkNsaWNrKGFzeW5jICgpID0+IHtcblx0XHRcdFx0XHRcdGJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRidXR0b24uc2V0QnV0dG9uVGV4dCgnXHU3NjdCXHU1RjU1XHU0RTJELi4uJyk7XG5cdFx0XHRcdFx0XHRjb25zdCB7ZW1haWwsIHBhc3N3b3JkfSA9IHRoaXMucGx1Z2luLnNldHRpbmdzO1xuXHRcdFx0XHRcdFx0Ly8gbmV3IE5vdGljZShgZW1haWw6ICR7ZW1haWx9YCk7XG5cdFx0XHRcdFx0XHR0cnl7XG5cdFx0XHRcdFx0XHRjb25zdCByZXMgPSBhd2FpdCByZXF1ZXN0VXJsKHtcblx0XHRcdFx0XHRcdFx0dXJsOidodHRwOi8vNDMuMTM4LjE0OS4zODo1MDUwL2xvZ2luLycsXG5cdFx0XHRcdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxuXHRcdFx0XHRcdFx0XHRjb250ZW50VHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nLFxuXHRcdFx0XHRcdFx0XHRib2R5OiBKU09OLnN0cmluZ2lmeSh7XG5cdFx0XHRcdFx0XHRcdFx0XHQndXNlcm5hbWUnOmVtYWlsLFxuXHRcdFx0XHRcdFx0XHRcdFx0J3Bhc3N3b3JkJzpwYXNzd29yZFxuXHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdH0pfSk7XG5cdFx0XHRcdFx0XHRpZiAocmVzLnN0YXR1cyAhPT0gMjAwKSB7XG5cdFx0XHRcdFx0XHRcdG5ldyBOb3RpY2UoJ1x1NzY3Qlx1NUY1NVx1NTkzMVx1OEQyNScpO1xuXHRcdFx0XHRcdFx0XHRidXR0b24uZGlzYWJsZWQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0YnV0dG9uLnNldEJ1dHRvblRleHQoJ1x1NzY3Qlx1NUY1NScpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb247XG5cdFx0XHRcdFx0XHQvLyBuZXcgTm90aWNlKGByZXM6ICR7SlNPTi5zdHJpbmdpZnkoZGF0YSl9YCk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy50b2tlbiA9IGRhdGEuZGF0YS50b2tlbjtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHRcdFx0bmV3IE5vdGljZSgnXHU3NjdCXHU1RjU1XHU2MjEwXHU1MjlGJyk7XG5cdFx0XHRcdFx0XHRidXR0b24uc2V0QnV0dG9uVGV4dCgnXHU3NjdCXHU1RjU1XHU2MjEwXHU1MjlGJyk7XG5cdFx0XHRcdFx0XHRidXR0b24uZGlzYWJsZWQgPSBmYWxzZTtcblx0XHRcdFx0XHR9Y2F0Y2goZXJyb3Ipe1xuXHRcdFx0XHRcdFx0bmV3IE5vdGljZSgnXHU3NjdCXHU1RjU1XHU1OTMxXHU4RDI1OiAnICsgZXJyb3IubWVzc2FnZSk7XG5cdFx0XHRcdFx0XHRidXR0b24uZGlzYWJsZWQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdGJ1dHRvbi5zZXRCdXR0b25UZXh0KCdcdTc2N0JcdTVGNTUnKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9KVxuXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZSgnYXBpIGtleShcdTUzRUZcdTkwMDkpJylcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4gdGV4dFxuXHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ1x1OEJGN1x1OEY5M1x1NTE2NWFwaSBrZXknKVxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuYXBpS2V5KVxuXHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuYXBpS2V5ID0gdmFsdWU7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblx0fVxufVxuXG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoQXJ0aWNsZShzZXR0aW5nczogU3luY1JlYWRQbHVnaW5TZXR0aW5ncyx0aW1lOiBzdHJpbmcscGFnZTogbnVtYmVyKXtcblxuXHR0cnkge1xuXG5cdGNvbnN0IGFwaUtleSA9IHNldHRpbmdzLmFwaUtleTtcblx0bGV0IHJlcztcblx0aWYoYXBpS2V5ID09PSAnJyl7XG5cdFx0cmVzID0gYXdhaXQgcmVxdWVzdFVybChcblx0XHR7XG5cdFx0XHR1cmw6YGh0dHA6Ly80My4xMzguMTQ5LjM4OjUwNTAvZ2V0X3N5bmNlZF9hcnRpY2xlcz90aW1lPSR7dGltZX0mcGFnZV9udW1iZXI9JHtwYWdlfSZwYWdlX3NpemU9NTBgLCBcblx0XHRcdG1ldGhvZDogJ0dFVCcsXG5cdFx0XHRoZWFkZXJzOiB7XG5cdFx0XHRcdCdBdXRob3JpemF0aW9uJzogJ0JlYXJlciAnICsgc2V0dGluZ3MudG9rZW5cblx0XHRcdH0sXG5cdFx0fVxuXHRcdCk7XG5cdH1lbHNle1xuXHRcdHJlcyA9IGF3YWl0IHJlcXVlc3RVcmwoXG5cdFx0XHR7XG5cdFx0XHRcdHVybDpgaHR0cDovLzQzLjEzOC4xNDkuMzg6NTA1MC9nZXRfc3luY2VkX2FydGljbGVzX2J5X2tleT90aW1lPSR7dGltZX0mcGFnZV9udW1iZXI9JHtwYWdlfSZwYWdlX3NpemU9NTBgLCBcblx0XHRcdFx0bWV0aG9kOiAnR0VUJyxcblx0XHRcdFx0aGVhZGVyczoge1xuXHRcdFx0XHRcdCdhcGlfa2V5JzogIGFwaUtleVxuXHRcdFx0XHR9LFxuXHRcdFx0fVxuXHRcdFx0KTtcblx0fVxuXHQvLyBuZXcgTm90aWNlKGB0b2tlbjogJHtzZXR0aW5ncy50b2tlbn1gKTtcblx0aWYgKHJlcy5zdGF0dXMgIT09IDIwMCkge1xuXHRcdG5ldyBOb3RpY2UoJ1x1NTQwQ1x1NkI2NVx1NTkzMVx1OEQyNScpO1xuXHRcdGlzV3JpdGluZyA9IGZhbHNlO1xuXHRcdHJldHVybjtcblx0fVxuXHRjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb247XG5cdC8vIG5ldyBOb3RpY2UoYHJlczogJHtkYXRhLmRhdGEubGVuZ3RofWApO1xuXHRyZXR1cm4gZGF0YS5kYXRhO1xufSBjYXRjaCAoZXJyb3IpIHtcblx0bmV3IE5vdGljZSgnXHU1NDBDXHU2QjY1XHU1OTMxXHU4RDI1OiAnICsgZXJyb3IubWVzc2FnZSk7XG5cdGlzV3JpdGluZyA9IGZhbHNlO1xuXHRyZXR1cm47XG59XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdyaXRlQXJ0aWNsZSh2YXVsdDogVmF1bHQsZmlsZU1hbmFnZXI6RmlsZU1hbmFnZXIsIGFydGljbGU6IHsgdGl0bGU6IHN0cmluZywgY29udGVudDogc3RyaW5nICxzaXRlOnN0cmluZ30pOiBQcm9taXNlPHZvaWQ+IHtcblx0dmFyIGZvbGRlciA9IHZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aCgnU3luY1JlYWRcdTU0MENcdTZCNjVcdTY1ODdcdTRFRjZcdTU5MzknKTtcblx0aWYoIWZvbGRlcikgZm9sZGVyID0gYXdhaXQgdmF1bHQuY3JlYXRlRm9sZGVyKCdTeW5jUmVhZFx1NTQwQ1x1NkI2NVx1NjU4N1x1NEVGNlx1NTkzOScpO1xuXHRuZXcgTm90aWNlKCd1cmw6ICcgKyBhcnRpY2xlLnNpdGUpO1xuXHRsZXQgZmlsZSA9IGF3YWl0IHZhdWx0LmNyZWF0ZShmb2xkZXIucGF0aCsnLycrZmlsdGVySWxsZWdhbENoYXJzKG5vcm1hbGl6ZVBhdGgoYXJ0aWNsZS50aXRsZSkpICsgXCIubWRcIiwgYXJ0aWNsZS5jb250ZW50KTtcblx0cmV0dXJuIGZpbGVNYW5hZ2VyLnByb2Nlc3NGcm9udE1hdHRlcihmaWxlLChmcm9udE1hdHRlcikgPT4ge1xuXHRcdGZyb250TWF0dGVyWydjcmVhdGVkX2F0J10gPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG5cdFx0ZnJvbnRNYXR0ZXJbJ3VybCddID0gYXJ0aWNsZS5zaXRlO1xuXHR9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JpdGVBbGxBcnRpY2xlcyhhcHA6IEFwcCxwbHVnaW46IFN5bmNSZWFkUGx1Z2luKXtcblxuXHRsZXQgdmF1bHQgPSBhcHAudmF1bHQ7XG5cdGxldCBmaWxlTWFuYWdlciA9IGFwcC5maWxlTWFuYWdlcjtcblx0bmV3IE5vdGljZShpc1dyaXRpbmcgPyAnXHU2QjYzXHU1NzI4XHU1NDBDXHU2QjY1JyA6ICdcdTVGMDBcdTU5Q0JcdTU0MENcdTZCNjUnKTtcblx0aWYoaXNXcml0aW5nKSByZXR1cm47XG5cdFx0aXNXcml0aW5nID0gdHJ1ZTtcblx0dmFyIHRpbWUgPSBwbHVnaW4uc2V0dGluZ3MudGltZTtcblx0dmFyIHBhZ2UgPSAxO1xuXHQvLyBuZXcgTm90aWNlKGB0aW1lOiAke3RpbWV9YCk7XG5cdGRve1xuXHRcdFxuXHRcdGNvbnN0IGFydGljbGVzID0gYXdhaXQgZmV0Y2hBcnRpY2xlKHBsdWdpbi5zZXR0aW5ncyx0aW1lLHBhZ2UpO1xuXHRcdGlmIChhcnRpY2xlcy5sZW5ndGggPT09IDApIHtcblx0XHRcdGlzV3JpdGluZyA9IGZhbHNlO1xuXHRcdFx0bmV3IE5vdGljZSgnXHU1NDBDXHU2QjY1XHU1QjhDXHU2MjEwJyk7XG5cdFx0XHRicmVhaztcdFxuXHRcdH1cblx0XHR0cnl7XG5cdFx0XHRhd2FpdCBQcm9taXNlLmFsbChhcnRpY2xlcy5tYXAoKGFydGljbGU6IHsgdGl0bGU6IHN0cmluZzsgY29udGVudDogc3RyaW5nO3NpdGU6c3RyaW5nIH0pID0+IHdyaXRlQXJ0aWNsZSh2YXVsdCwgZmlsZU1hbmFnZXIsYXJ0aWNsZSkpKTtcblx0XHR9Y2F0Y2goZXJyb3Ipe1xuXHRcdFx0Ly8gbmV3IE5vdGljZShlcnJvci5tZXNzYWdlKTtcblx0XHRcdC8vIGlzV3JpdGluZyA9IGZhbHNlO1xuXHRcdFx0Ly8gcmV0dXJuO1xuXHRcdH1cblx0XHQvLyBuZXcgTm90aWNlKGBwYWdlOiAke3BhZ2V9YCk7XG5cdFx0cGx1Z2luLnNldHRpbmdzLnRpbWUgPSBhcnRpY2xlc1thcnRpY2xlcy5sZW5ndGgtMV0uY3JlYXRlZF9hdDtcblx0XHRwbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0cGFnZSsrO1xuXHRcdGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwMDApKTtcblx0XHQvLyBuZXcgTm90aWNlKGBwYWdlOiAke3BhZ2V9YCk7XG5cdH13aGlsZSh0cnVlKTtcblxufVxuXG5mdW5jdGlvbiBmaWx0ZXJJbGxlZ2FsQ2hhcnModGl0bGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gXHU1QjlBXHU0RTQ5XHU5NzVFXHU2Q0Q1XHU1QjU3XHU3QjI2XG4gICAgY29uc3QgaWxsZWdhbENoYXJzID0gL1tcXFxcLzoqP1wiPD58XS9nO1xuICAgIC8vIFx1NEY3Rlx1NzUyOFx1NkI2M1x1NTIxOVx1ODg2OFx1OEZCRVx1NUYwRlx1NjZGRlx1NjM2Mlx1OTc1RVx1NkNENVx1NUI1N1x1N0IyNlxuICAgIGNvbnN0IGZpbHRlcmVkVGl0bGUgPSB0aXRsZS5yZXBsYWNlKGlsbGVnYWxDaGFycywgXCJcIik7XG4gICAgcmV0dXJuIGZpbHRlcmVkVGl0bGU7XG59Il0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBLHNCQUFtSDtBQVluSCxJQUFNLG1CQUEyQztBQUFBLEVBQ2hELE9BQU87QUFBQSxFQUNQLFVBQVU7QUFBQSxFQUNWLE9BQU87QUFBQSxFQUNQLE1BQU07QUFBQSxFQUNOLFFBQVE7QUFDVDtBQUVBLElBQUksWUFBWTtBQUVoQixJQUFxQixpQkFBckIs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 +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibWFpbi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgQXBwLCBOb3RpY2UsIFBsdWdpbiwgUGx1Z2luU2V0dGluZ1RhYiwgU2V0dGluZyxWYXVsdCxURmlsZSwgbm9ybWFsaXplUGF0aCwgcmVxdWVzdFVybCwgRmlsZU1hbmFnZXIgfSBmcm9tICdvYnNpZGlhbic7XG5cbi8vIFJlbWVtYmVyIHRvIHJlbmFtZSB0aGVzZSBjbGFzc2VzIGFuZCBpbnRlcmZhY2VzIVxuXG5pbnRlcmZhY2UgU3luY1JlYWRQbHVnaW5TZXR0aW5ncyB7XG5cdGVtYWlsOiBzdHJpbmc7XG5cdHBhc3N3b3JkOiBzdHJpbmc7XG5cdHRva2VuOiBzdHJpbmc7XG5cdHRpbWU6IHN0cmluZztcblx0bm90ZVRpbWU6IHN0cmluZztcblx0YXBpS2V5OiBzdHJpbmc7XG59XG5cbmNvbnN0IERFRkFVTFRfU0VUVElOR1M6IFN5bmNSZWFkUGx1Z2luU2V0dGluZ3MgPSB7XG5cdGVtYWlsOiAnJyxcblx0cGFzc3dvcmQ6ICcnLFxuXHR0b2tlbjogJycsXG5cdHRpbWU6ICcyMDIwLTAxLTAxIDAwOjAwOjAwJyxcblx0bm90ZVRpbWU6ICcyMDI0LTAzLTA5VDEwOjM3OjQ5Jyxcblx0YXBpS2V5OiAnJ1xufVxuXG52YXIgaXNXcml0aW5nID0gZmFsc2U7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN5bmNSZWFkUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHtcblx0c2V0dGluZ3M6IFN5bmNSZWFkUGx1Z2luU2V0dGluZ3M7XG5cblx0YXN5bmMgb25sb2FkKCkge1xuXHRcdGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XG5cblx0XHQvLyBUaGlzIGNyZWF0ZXMgYW4gaWNvbiBpbiB0aGUgbGVmdCByaWJib24uXG5cdFx0Y29uc3QgcmliYm9uSWNvbkVsID0gdGhpcy5hZGRSaWJib25JY29uKCdzeW5jJywgJ1N5bmNSZWFkJyxhc3luYyAoZXZ0OiBNb3VzZUV2ZW50KSAgPT4ge1xuXHRcdFx0Ly8gQ2FsbGVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIHRoZSBpY29uLlxuXHRcdFx0Ly8gbmV3IE5vdGljZSgnVGhpcyBpcyBhIG5vdGljZSEnKTtcblx0XHRcdC8vIG5ldyBOb3RpY2UoYHBhdGg6ICR7dGhpcy5hcHAudmF1bHQuZ2V0Um9vdCgpLnBhdGh9YCk7XG5cdFx0XHQvLyBjcmFldGVGaWxlKHRoaXMuYXBwLnZhdWx0KTtcblx0XHRcdC8vIG5ldyBOb3RpY2UoYHRva2VuOiAke3RoaXMuc2V0dGluZ3MudG9rZW59YCk7XG5cdFx0IFx0YXdhaXQgd3JpdGVBbGxBcnRpY2xlcyh0aGlzLmFwcCx0aGlzKTtcblx0XHRcdHdyaXRlQWxsTm90ZSh0aGlzLmFwcCx0aGlzKTtcblx0XHR9KTsgXG5cdFx0XG5cblx0XHQvLyBUaGlzIGFkZHMgYSBzZXR0aW5ncyB0YWIgc28gdGhlIHVzZXIgY2FuIGNvbmZpZ3VyZSB2YXJpb3VzIGFzcGVjdHMgb2YgdGhlIHBsdWdpblxuXHRcdC8vIGlmKHRoaXMuc2V0dGluZ3MudG9rZW4gIT09ICcnKXtcblx0XHQvLyBcdHRoaXMuYWRkU2V0dGluZ1RhYihuZXcgU2V0dGluZ3NUYWIodGhpcy5hcHAsIHRoaXMpKTtcblx0XHQvLyB9ZWxzZXtcblx0XHQvLyB9XG5cdFx0dGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBTeW5jUmVhZFNldHRpbmdUYWIodGhpcy5hcHAsIHRoaXMpKTtcblxuXHR9XG5cblx0b251bmxvYWQoKSB7XG5cdH1cblxuXHRhc3luYyBsb2FkU2V0dGluZ3MoKSB7XG5cdFx0dGhpcy5zZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfU0VUVElOR1MsIGF3YWl0IHRoaXMubG9hZERhdGEoKSk7XG5cdFx0Ly8gdGhpcy5zZXR0aW5ncy50aW1lID0gJzIwMjAtMDEtMDEgMDA6MDA6MDAnO1xuXHR9XG5cblx0YXN5bmMgc2F2ZVNldHRpbmdzKCkge1xuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XG5cdH1cbn1cblxuXG5jbGFzcyBTeW5jUmVhZFNldHRpbmdUYWIgZXh0ZW5kcyBQbHVnaW5TZXR0aW5nVGFiIHtcblx0cGx1Z2luOiBTeW5jUmVhZFBsdWdpbjtcblxuXHRjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luOiBTeW5jUmVhZFBsdWdpbikge1xuXHRcdHN1cGVyKGFwcCwgcGx1Z2luKTtcblx0XHR0aGlzLnBsdWdpbiA9IHBsdWdpbjtcblx0XHRcblx0fVxuXG5cdGRpc3BsYXkoKTogdm9pZCB7XG5cdFx0Y29uc3Qge2NvbnRhaW5lckVsfSA9IHRoaXM7XG5cblx0XHRjb250YWluZXJFbC5lbXB0eSgpO1xuXG5cdFx0Ly8gbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0Ly8gXHQuc2V0TmFtZSgnXHU3NTI4XHU2MjM3XHU1NDBEJylcblx0XHQvLyBcdC5zZXREZXNjKCdcdThGOTNcdTUxNjVcdTRGNjBcdTU3MjhTeW5jUmVhZFx1NkNFOFx1NTE4Q1x1NzY4NFx1OTBBRVx1N0JCMScpXG5cdFx0Ly8gXHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcblx0XHQvLyBcdFx0LnNldFBsYWNlaG9sZGVyKCdcdThCRjdcdThGOTNcdTUxNjVcdTkwQUVcdTdCQjEnKVxuXHRcdC8vIFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZW1haWwpXG5cdFx0Ly8gXHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcblx0XHQvLyBcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbWFpbCA9IHZhbHVlO1xuXHRcdC8vIFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuXHRcdC8vIFx0XHR9KSk7XG5cdFx0Ly8gbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0Ly8gXHQuc2V0TmFtZSgnXHU1QkM2XHU3ODAxJylcblx0XHQvLyBcdC5zZXREZXNjKCcnKVxuXHRcdC8vIFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0Ly8gXHRcdC5zZXRQbGFjZWhvbGRlcignXHU4QkY3XHU4RjkzXHU1MTY1XHU1QkM2XHU3ODAxJylcblx0XHQvLyBcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnBhc3N3b3JkKVxuXHRcdC8vIFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0Ly8gXHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MucGFzc3dvcmQgPSB2YWx1ZTtcblx0XHQvLyBcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHQvLyBcdFx0fSkpO1xuXHRcdC8vIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdC8vIFx0LmFkZEJ1dHRvbihidXR0b24gPT4ge1xuXHRcdC8vIFx0XHRidXR0b25cblx0XHQvLyBcdFx0XHQuc2V0QnV0dG9uVGV4dCgnXHU3NjdCXHU1RjU1Jylcblx0XHQvLyBcdFx0XHQub25DbGljayhhc3luYyAoKSA9PiB7XG5cdFx0Ly8gXHRcdFx0XHRidXR0b24uZGlzYWJsZWQgPSB0cnVlO1xuXHRcdC8vIFx0XHRcdFx0YnV0dG9uLnNldEJ1dHRvblRleHQoJ1x1NzY3Qlx1NUY1NVx1NEUyRC4uLicpO1xuXHRcdC8vIFx0XHRcdFx0Y29uc3Qge2VtYWlsLCBwYXNzd29yZH0gPSB0aGlzLnBsdWdpbi5zZXR0aW5ncztcblx0XHQvLyBcdFx0XHRcdC8vIG5ldyBOb3RpY2UoYGVtYWlsOiAke2VtYWlsfWApO1xuXHRcdC8vIFx0XHRcdFx0dHJ5e1xuXHRcdC8vIFx0XHRcdFx0Y29uc3QgcmVzID0gYXdhaXQgcmVxdWVzdFVybCh7XG5cdFx0Ly8gXHRcdFx0XHRcdHVybDonaHR0cDovLzQzLjEzOC4xNDkuMzg6NTA1MC9sb2dpbi8nLFxuXHRcdC8vIFx0XHRcdFx0XHRtZXRob2Q6ICdQT1NUJyxcblx0XHQvLyBcdFx0XHRcdFx0Y29udGVudFR5cGU6ICdhcHBsaWNhdGlvbi9qc29uJyxcblx0XHQvLyBcdFx0XHRcdFx0Ym9keTogSlNPTi5zdHJpbmdpZnkoe1xuXHRcdC8vIFx0XHRcdFx0XHRcdFx0J3VzZXJuYW1lJzplbWFpbCxcblx0XHQvLyBcdFx0XHRcdFx0XHRcdCdwYXNzd29yZCc6cGFzc3dvcmRcblx0XHRcdFx0XHRcdFx0XG5cdFx0Ly8gXHRcdFx0XHR9KX0pO1xuXHRcdC8vIFx0XHRcdFx0aWYgKHJlcy5zdGF0dXMgIT09IDIwMCkge1xuXHRcdC8vIFx0XHRcdFx0XHRuZXcgTm90aWNlKCdcdTc2N0JcdTVGNTVcdTU5MzFcdThEMjUnKTtcblx0XHQvLyBcdFx0XHRcdFx0YnV0dG9uLmRpc2FibGVkID0gZmFsc2U7XG5cdFx0Ly8gXHRcdFx0XHRcdGJ1dHRvbi5zZXRCdXR0b25UZXh0KCdcdTc2N0JcdTVGNTUnKTtcblx0XHQvLyBcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdC8vIFx0XHRcdFx0fVxuXHRcdC8vIFx0XHRcdFx0Y29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uO1xuXHRcdC8vIFx0XHRcdFx0Ly8gbmV3IE5vdGljZShgcmVzOiAke0pTT04uc3RyaW5naWZ5KGRhdGEpfWApO1xuXHRcdC8vIFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MudG9rZW4gPSBkYXRhLmRhdGEudG9rZW47XG5cdFx0Ly8gXHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHQvLyBcdFx0XHRcdG5ldyBOb3RpY2UoJ1x1NzY3Qlx1NUY1NVx1NjIxMFx1NTI5RicpO1xuXHRcdC8vIFx0XHRcdFx0YnV0dG9uLnNldEJ1dHRvblRleHQoJ1x1NzY3Qlx1NUY1NVx1NjIxMFx1NTI5RicpO1xuXHRcdC8vIFx0XHRcdFx0YnV0dG9uLmRpc2FibGVkID0gZmFsc2U7XG5cdFx0Ly8gXHRcdFx0fWNhdGNoKGVycm9yKXtcblx0XHQvLyBcdFx0XHRcdG5ldyBOb3RpY2UoJ1x1NzY3Qlx1NUY1NVx1NTkzMVx1OEQyNTogJyArIGVycm9yLm1lc3NhZ2UpO1xuXHRcdC8vIFx0XHRcdFx0YnV0dG9uLmRpc2FibGVkID0gZmFsc2U7XG5cdFx0Ly8gXHRcdFx0XHRidXR0b24uc2V0QnV0dG9uVGV4dCgnXHU3NjdCXHU1RjU1Jyk7XG5cdFx0Ly8gXHRcdFx0XHRyZXR1cm47XG5cdFx0Ly8gXHRcdFx0fVxuXHRcdC8vIFx0XHRcdH0pO1xuXHRcdC8vIFx0fSlcblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ2FwaSBrZXknKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignXHU4QkY3XHU4RjkzXHU1MTY1YXBpIGtleScpXG5cdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5hcGlLZXkpXG5cdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5hcGlLZXkgPSB2YWx1ZTtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0fSkpO1xuXHR9XG59XG5cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hBcnRpY2xlKHNldHRpbmdzOiBTeW5jUmVhZFBsdWdpblNldHRpbmdzLHRpbWU6IHN0cmluZyxwYWdlOiBudW1iZXIpe1xuXG5cdHRyeSB7XG5cblx0Y29uc3QgYXBpS2V5ID0gc2V0dGluZ3MuYXBpS2V5O1xuXHRsZXQgcmVzO1xuXHRpZihhcGlLZXkgPT09ICcnKXtcblx0XHRcblx0XHRuZXcgTm90aWNlKCdcdThCRjdcdTU4NkJcdTUxOTlhcGkga2V5Jyk7XG5cdH1lbHNle1xuXHRcdHJlcyA9IGF3YWl0IHJlcXVlc3RVcmwoXG5cdFx0XHR7XG5cdFx0XHRcdHVybDpgaHR0cDovLzQzLjEzOC4xNDkuMzg6NTA1MC9nZXRfc3luY2VkX2FydGljbGVzX2J5X2tleT90aW1lPSR7dGltZX0mcGFnZV9udW1iZXI9JHtwYWdlfSZwYWdlX3NpemU9NTBgLCBcblx0XHRcdFx0bWV0aG9kOiAnR0VUJyxcblx0XHRcdFx0aGVhZGVyczoge1xuXHRcdFx0XHRcdCdhcGlfa2V5JzogIGFwaUtleVxuXHRcdFx0XHR9LFxuXHRcdFx0fVxuXHRcdFx0KTtcblx0XHRcdGlmIChyZXMuc3RhdHVzICE9PSAyMDApIHtcblx0XHRcdFx0bmV3IE5vdGljZSgnXHU1NDBDXHU2QjY1XHU2NTg3XHU3QUUwXHU1OTMxXHU4RDI1Jyk7XG5cdFx0XHRcdGlzV3JpdGluZyA9IGZhbHNlO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb247XG5cdFx0XHQvLyBuZXcgTm90aWNlKGByZXM6ICR7ZGF0YS5kYXRhLmxlbmd0aH1gKTtcblx0XHRcdHJldHVybiBkYXRhLmRhdGE7XG5cdH1cblx0Ly8gbmV3IE5vdGljZShgdG9rZW46ICR7c2V0dGluZ3MudG9rZW59YCk7XG5cdFxufSBjYXRjaCAoZXJyb3IpIHtcblx0bmV3IE5vdGljZSgnXHU1NDBDXHU2QjY1XHU1OTMxXHU4RDI1OiAnICsgZXJyb3IubWVzc2FnZSk7XG5cdGlzV3JpdGluZyA9IGZhbHNlO1xuXHRyZXR1cm47XG59XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoTm90ZShzZXR0aW5nczogU3luY1JlYWRQbHVnaW5TZXR0aW5ncyx0aW1lOiBzdHJpbmcscGFnZTogbnVtYmVyKXtcblx0XG5cdHRyeSB7XG5cblx0Y29uc3QgYXBpS2V5ID0gc2V0dGluZ3MuYXBpS2V5O1xuXHRsZXQgcmVzO1xuXHRpZihhcGlLZXkgPT09ICcnKXtcblx0XHRcblx0XHRuZXcgTm90aWNlKCdcdThCRjdcdTU4NkJcdTUxOTlhcGkga2V5Jyk7XG5cdH1lbHNle1xuXHRcdHJlcyA9IGF3YWl0IHJlcXVlc3RVcmwoXG5cdFx0XHR7XG5cdFx0XHRcdHVybDpgaHR0cDovLzQzLjEzOC4xNDkuMzg6NTA1MC9nZXRfbm90ZXNfYnlfa2V5P3RpbWU9JHt0aW1lfSZwYWdlX251bWJlcj0ke3BhZ2V9JnBhZ2Vfc2l6ZT01MGAsIFxuXHRcdFx0XHRtZXRob2Q6ICdHRVQnLFxuXHRcdFx0XHRoZWFkZXJzOiB7XG5cdFx0XHRcdFx0J2FwaV9rZXknOiAgYXBpS2V5XG5cdFx0XHRcdH0sXG5cdFx0XHR9XG5cdFx0XHQpO1xuXHRcdFx0aWYgKHJlcy5zdGF0dXMgIT09IDIwMCkge1xuXHRcdFx0XHRuZXcgTm90aWNlKCdcdTU0MENcdTZCNjVcdTY4MDdcdTZDRThcdTU5MzFcdThEMjUnKTtcblx0XHRcdFx0aXNXcml0aW5nID0gZmFsc2U7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbjtcblx0XHRcdC8vIG5ldyBOb3RpY2UoYHJlczogJHtkYXRhLmRhdGEubGVuZ3RofWApO1xuXHRcdFx0cmV0dXJuIGRhdGEuZGF0YTtcblx0fVxufSBjYXRjaCAoZXJyb3IpIHtcblx0bmV3IE5vdGljZSgnXHU1NDBDXHU2QjY1XHU1OTMxXHU4RDI1OiAnICsgZXJyb3IubWVzc2FnZSk7XG5cdGlzV3JpdGluZyA9IGZhbHNlO1xuXHRyZXR1cm47XG59XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdyaXRlQXJ0aWNsZSh2YXVsdDogVmF1bHQsZmlsZU1hbmFnZXI6RmlsZU1hbmFnZXIsIGFydGljbGU6IHsgdGl0bGU6IHN0cmluZywgY29udGVudDogc3RyaW5nICxzaXRlOnN0cmluZ30pOiBQcm9taXNlPHZvaWQ+IHtcblx0dmFyIGZvbGRlciA9IHZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aCgnU3luY1JlYWRcdTU0MENcdTZCNjVcdTY1ODdcdTRFRjZcdTU5MzknKTtcblx0aWYoIWZvbGRlcikgZm9sZGVyID0gYXdhaXQgdmF1bHQuY3JlYXRlRm9sZGVyKCdTeW5jUmVhZFx1NTQwQ1x1NkI2NVx1NjU4N1x1NEVGNlx1NTkzOScpO1xuXHQvLyBuZXcgTm90aWNlKCd1cmw6ICcgKyBhcnRpY2xlLnNpdGUpO1xuXHRsZXQgZmlsZSA9IGF3YWl0IHZhdWx0LmNyZWF0ZShmb2xkZXIucGF0aCsnLycrZmlsdGVySWxsZWdhbENoYXJzKG5vcm1hbGl6ZVBhdGgoYXJ0aWNsZS50aXRsZSkpICsgXCIubWRcIiwgYXJ0aWNsZS5jb250ZW50KTtcblx0cmV0dXJuIGZpbGVNYW5hZ2VyLnByb2Nlc3NGcm9udE1hdHRlcihmaWxlLChmcm9udE1hdHRlcikgPT4ge1xuXHRcdGZyb250TWF0dGVyWydjcmVhdGVkX2F0J10gPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG5cdFx0ZnJvbnRNYXR0ZXJbJ3VybCddID0gYXJ0aWNsZS5zaXRlO1xuXHR9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JpdGVOb3RlKHZhdWx0OiBWYXVsdCxmaWxlTWFuYWdlcjpGaWxlTWFuYWdlciwgbm90ZToge2lkOnN0cmluZzsgdGV4dDogc3RyaW5nOyBhbm5vdGF0aW9uOiBzdHJpbmc7YXJ0aWNsZVRpdGxlOnN0cmluZzt1cGRhdGVfYXQ6c3RyaW5nIH0pOiBQcm9taXNlPHZvaWQ+IHtcblx0dmFyIGZvbGRlciA9IHZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aCgnU3luY1JlYWRcdTU0MENcdTZCNjVcdTY1ODdcdTRFRjZcdTU5MzknKTtcblx0aWYoIWZvbGRlcikgZm9sZGVyID0gYXdhaXQgdmF1bHQuY3JlYXRlRm9sZGVyKCdTeW5jUmVhZFx1NTQwQ1x1NkI2NVx1NjU4N1x1NEVGNlx1NTkzOScpO1xuXHR2YXIgbm90ZUZvbGRlciA9IHZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChmb2xkZXIucGF0aCsnL1x1NjgwN1x1NkNFOCcpXG5cdGlmKCFub3RlRm9sZGVyKSBub3RlRm9sZGVyID0gYXdhaXQgdmF1bHQuY3JlYXRlRm9sZGVyKGZvbGRlci5wYXRoKycvXHU2ODA3XHU2Q0U4Jyk7XG5cdGxldCBub3RlRmlsZSA9IHZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChub3RlRm9sZGVyLnBhdGgrJy9bXHU2ODA3XHU2Q0U4XScrZmlsdGVySWxsZWdhbENoYXJzKG5vcm1hbGl6ZVBhdGgobm90ZS5hcnRpY2xlVGl0bGUpKSArIFwiLm1kXCIpO1xuXHRpZighbm90ZUZpbGUpIHtcblx0XHRub3RlRmlsZSA9IGF3YWl0IHZhdWx0LmNyZWF0ZShub3RlRm9sZGVyLnBhdGgrJy9bXHU2ODA3XHU2Q0U4XScrZmlsdGVySWxsZWdhbENoYXJzKG5vcm1hbGl6ZVBhdGgobm90ZS5hcnRpY2xlVGl0bGUpKSArIFwiLm1kXCIsIFwiXFxuXCIpO1xuXHRcdGZpbGVNYW5hZ2VyLnByb2Nlc3NGcm9udE1hdHRlcihub3RlRmlsZSBhcyBURmlsZSwoZnJvbnRNYXR0ZXIpID0+IHtcblx0XHRcdGZyb250TWF0dGVyWydvcmlnaW5BcnRpY2xlJ10gPSBgW1ske2ZpbHRlcklsbGVnYWxDaGFycyhub3JtYWxpemVQYXRoKG5vdGUuYXJ0aWNsZVRpdGxlKSl9XV1gO1xuXHRcdH0pO1xuXHR9XG5cdGxldCBub3RlVGV4dCA9IG5vdGUudGV4dC5yZXBsYWNlKC9cXG4rJC8sIFwiXCIpOyAgLy8gUmVtb3ZlIHRyYWlsaW5nIG5ld2xpbmVzXG5cblx0bGV0IG5vdGVUZXh0V2l0aFF1b3RlcyA9IFwiXFxuXFxuXFxuPlwiICsgbm90ZVRleHQucmVwbGFjZSgvXFxuL2csIFwiXFxuPlwiKTtcblx0bmV3IE5vdGljZShub3RlVGV4dFdpdGhRdW90ZXMpO1xuXHRyZXR1cm4gdmF1bHQuYXBwZW5kKG5vdGVGaWxlIGFzIFRGaWxlLG5vdGVUZXh0V2l0aFF1b3RlcytcIlxcblxcblwiKyhub3RlLmFubm90YXRpb24hPT1udWxsP25vdGUuYW5ub3RhdGlvbjpcIlwiKSk7XG5cdFxufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZUFsbE5vdGUoYXBwOiBBcHAscGx1Z2luOiBTeW5jUmVhZFBsdWdpbil7XG5cdGxldCB2YXVsdCA9IGFwcC52YXVsdDtcblx0bGV0IGZpbGVNYW5hZ2VyID0gYXBwLmZpbGVNYW5hZ2VyO1xuXHRpZihpc1dyaXRpbmcpIHJldHVybjtcblx0XHRpc1dyaXRpbmcgPSB0cnVlO1xuXHR2YXIgdGltZSA9IHBsdWdpbi5zZXR0aW5ncy5ub3RlVGltZTtcblx0dmFyIHBhZ2UgPSAxO1xuXHRkb3tcblx0XHRcblx0XHRjb25zdCBub3RlcyA9IGF3YWl0IGZldGNoTm90ZShwbHVnaW4uc2V0dGluZ3MsdGltZSxwYWdlKTtcblx0XHRpZiAobm90ZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRpc1dyaXRpbmcgPSBmYWxzZTtcblx0XHRcdG5ldyBOb3RpY2UoJ1x1NTQwQ1x1NkI2NVx1NjgwN1x1NkNFOFx1NUI4Q1x1NjIxMCcpO1xuXHRcdFx0YnJlYWs7XHRcblx0XHR9XG5cdFx0dHJ5e1xuXHRcdFx0YXdhaXQgUHJvbWlzZS5hbGwobm90ZXMubWFwKChub3RlOiB7aWQ6c3RyaW5nOyB0ZXh0OiBzdHJpbmc7IGFubm90YXRpb246IHN0cmluZzthcnRpY2xlVGl0bGU6c3RyaW5nO3VwZGF0ZV9hdDpzdHJpbmcgfSkgPT4gd3JpdGVOb3RlKHZhdWx0LCBmaWxlTWFuYWdlcixub3RlKSkpO1xuXHRcdH1jYXRjaChlcnJvcil7XG5cdFx0XHQvLyBuZXcgTm90aWNlKGVycm9yLm1lc3NhZ2UpO1xuXHRcdFx0Ly8gaXNXcml0aW5nID0gZmFsc2U7XG5cdFx0XHQvLyByZXR1cm47XG5cdFx0fVxuXHRcdC8vIG5ldyBOb3RpY2UoYHBhZ2U6ICR7cGFnZX1gKTtcblx0XHRwbHVnaW4uc2V0dGluZ3Mubm90ZVRpbWUgPSBub3Rlc1tub3Rlcy5sZW5ndGgtMV0udXBkYXRlX2F0O1xuXHRcdHBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRwYWdlKys7XG5cdFx0YXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTAwMCkpO1xuXHRcdC8vIG5ldyBOb3RpY2UoYHBhZ2U6ICR7cGFnZX1gKTtcblx0fXdoaWxlKHRydWUpO1xufVxuYXN5bmMgZnVuY3Rpb24gd3JpdGVBbGxBcnRpY2xlcyhhcHA6IEFwcCxwbHVnaW46IFN5bmNSZWFkUGx1Z2luKXtcblxuXHRsZXQgdmF1bHQgPSBhcHAudmF1bHQ7XG5cdGxldCBmaWxlTWFuYWdlciA9IGFwcC5maWxlTWFuYWdlcjtcblx0bmV3IE5vdGljZShpc1dyaXRpbmcgPyAnXHU2QjYzXHU1NzI4XHU1NDBDXHU2QjY1JyA6ICdcdTVGMDBcdTU5Q0JcdTU0MENcdTZCNjUnKTtcblx0aWYoaXNXcml0aW5nKSByZXR1cm47XG5cdFx0aXNXcml0aW5nID0gdHJ1ZTtcblx0dmFyIHRpbWUgPSBwbHVnaW4uc2V0dGluZ3MudGltZTtcblx0dmFyIHBhZ2UgPSAxO1xuXHQvLyBuZXcgTm90aWNlKGB0aW1lOiAke3RpbWV9YCk7XG5cdGRve1xuXHRcdFxuXHRcdGNvbnN0IGFydGljbGVzID0gYXdhaXQgZmV0Y2hBcnRpY2xlKHBsdWdpbi5zZXR0aW5ncyx0aW1lLHBhZ2UpO1xuXHRcdGlmIChhcnRpY2xlcy5sZW5ndGggPT09IDApIHtcblx0XHRcdGlzV3JpdGluZyA9IGZhbHNlO1xuXHRcdFx0bmV3IE5vdGljZSgnXHU1NDBDXHU2QjY1XHU2NTg3XHU3QUUwXHU1QjhDXHU2MjEwJyk7XG5cdFx0XHRicmVhaztcdFxuXHRcdH1cblx0XHR0cnl7XG5cdFx0XHRhd2FpdCBQcm9taXNlLmFsbChhcnRpY2xlcy5tYXAoKGFydGljbGU6IHsgdGl0bGU6IHN0cmluZzsgY29udGVudDogc3RyaW5nO3NpdGU6c3RyaW5nIH0pID0+IHdyaXRlQXJ0aWNsZSh2YXVsdCwgZmlsZU1hbmFnZXIsYXJ0aWNsZSkpKTtcblx0XHR9Y2F0Y2goZXJyb3Ipe1xuXHRcdFx0Ly8gbmV3IE5vdGljZShlcnJvci5tZXNzYWdlKTtcblx0XHRcdC8vIGlzV3JpdGluZyA9IGZhbHNlO1xuXHRcdFx0Ly8gcmV0dXJuO1xuXHRcdH1cblx0XHQvLyBuZXcgTm90aWNlKGBwYWdlOiAke3BhZ2V9YCk7XG5cdFx0cGx1Z2luLnNldHRpbmdzLnRpbWUgPSBhcnRpY2xlc1thcnRpY2xlcy5sZW5ndGgtMV0uY3JlYXRlZF9hdDtcblx0XHRwbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0cGFnZSsrO1xuXHRcdGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwMDApKTtcblx0XHQvLyBuZXcgTm90aWNlKGBwYWdlOiAke3BhZ2V9YCk7XG5cdH13aGlsZSh0cnVlKTtcblxufVxuXG5mdW5jdGlvbiBmaWx0ZXJJbGxlZ2FsQ2hhcnModGl0bGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gXHU1QjlBXHU0RTQ5XHU5NzVFXHU2Q0Q1XHU1QjU3XHU3QjI2XG4gICAgY29uc3QgaWxsZWdhbENoYXJzID0gL1tcXFxcLzoqP1wiPD58XS9nO1xuICAgIC8vIFx1NEY3Rlx1NzUyOFx1NkI2M1x1NTIxOVx1ODg2OFx1OEZCRVx1NUYwRlx1NjZGRlx1NjM2Mlx1OTc1RVx1NkNENVx1NUI1N1x1N0IyNlxuICAgIGNvbnN0IGZpbHRlcmVkVGl0bGUgPSB0aXRsZS5yZXBsYWNlKGlsbGVnYWxDaGFycywgXCJcIik7XG4gICAgcmV0dXJuIGZpbHRlcmVkVGl0bGU7XG59Il0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLHNCQUFtSDtBQWFuSCxJQUFNLG1CQUEyQztBQUFBLEVBQ2hELE9BQU87QUFBQSxFQUNQLFVBQVU7QUFBQSxFQUNWLE9BQU87QUFBQSxFQUNQLE1BQU07QUFBQSxFQUNOLFVBQVU7QUFBQSxFQUNWLFFBQVE7QUFDVDtBQUVBLElBQUksWUFBWTtBQUVoQixJQUFxQixpQkFBckIsY0FBNEMsdUJBQU87QUFBQSxFQUdsRCxNQUFNLFNBQVM7QUFDZCxVQUFNLEtBQUssYUFBYTtBQUd4QixVQUFNLGVBQWUsS0FBSyxjQUFjLFFBQVEsWUFBVyxPQUFPLFFBQXFCO0FBTXJGLFlBQU0saUJBQWlCLEtBQUssS0FBSSxJQUFJO0FBQ3JDLG1CQUFhLEtBQUssS0FBSSxJQUFJO0FBQUEsSUFDM0IsQ0FBQztBQVFELFNBQUssY0FBYyxJQUFJLG1CQUFtQixLQUFLLEtBQUssSUFBSSxDQUFDO0FBQUEsRUFFMUQ7QUFBQSxFQUVBLFdBQVc7QUFBQSxFQUNYO0FBQUEsRUFFQSxNQUFNLGVBQWU7QUFDcEIsU0FBSyxX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 diff --git a/main.ts b/main.ts index b045b48..4e191e6 100644 --- a/main.ts +++ b/main.ts @@ -1,4 +1,3 @@ -import { time } from 'console'; import { App, Notice, Plugin, PluginSettingTab, Setting,Vault,TFile, normalizePath, requestUrl, FileManager } from 'obsidian'; // Remember to rename these classes and interfaces! @@ -8,6 +7,7 @@ interface SyncReadPluginSettings { password: string; token: string; time: string; + noteTime: string; apiKey: string; } @@ -16,6 +16,7 @@ const DEFAULT_SETTINGS: SyncReadPluginSettings = { password: '', token: '', time: '2020-01-01 00:00:00', + noteTime: '2024-03-09T10:37:49', apiKey: '' } @@ -28,14 +29,15 @@ export default class SyncReadPlugin extends Plugin { await this.loadSettings(); // This creates an icon in the left ribbon. - const ribbonIconEl = this.addRibbonIcon('sync', 'SyncRead', (evt: MouseEvent) => { + const ribbonIconEl = this.addRibbonIcon('sync', 'SyncRead',async (evt: MouseEvent) => { // Called when the user clicks the icon. // new Notice('This is a notice!'); // new Notice(`path: ${this.app.vault.getRoot().path}`); // craeteFile(this.app.vault); // new Notice(`token: ${this.settings.token}`); - writeAllArticles(this.app,this); - }); + await writeAllArticles(this.app,this); + writeAllNote(this.app,this); + }); // This adds a settings tab so the user can configure various aspects of the plugin @@ -75,69 +77,69 @@ class SyncReadSettingTab extends PluginSettingTab { containerEl.empty(); - new Setting(containerEl) - .setName('用户名') - .setDesc('输入你在SyncRead注册的邮箱') - .addText(text => text - .setPlaceholder('请输入邮箱') - .setValue(this.plugin.settings.email) - .onChange(async (value) => { - this.plugin.settings.email = value; - await this.plugin.saveSettings(); - })); - new Setting(containerEl) - .setName('密码') - .setDesc('') - .addText(text => text - .setPlaceholder('请输入密码') - .setValue(this.plugin.settings.password) - .onChange(async (value) => { - this.plugin.settings.password = value; - await this.plugin.saveSettings(); - })); - new Setting(containerEl) - .addButton(button => { - button - .setButtonText('登录') - .onClick(async () => { - button.disabled = true; - button.setButtonText('登录中...'); - const {email, password} = this.plugin.settings; - // new Notice(`email: ${email}`); - try{ - const res = await requestUrl({ - url:'http://43.138.149.38:5050/login/', - method: 'POST', - contentType: 'application/json', - body: JSON.stringify({ - 'username':email, - 'password':password + // new Setting(containerEl) + // .setName('用户名') + // .setDesc('输入你在SyncRead注册的邮箱') + // .addText(text => text + // .setPlaceholder('请输入邮箱') + // .setValue(this.plugin.settings.email) + // .onChange(async (value) => { + // this.plugin.settings.email = value; + // await this.plugin.saveSettings(); + // })); + // new Setting(containerEl) + // .setName('密码') + // .setDesc('') + // .addText(text => text + // .setPlaceholder('请输入密码') + // .setValue(this.plugin.settings.password) + // .onChange(async (value) => { + // this.plugin.settings.password = value; + // await this.plugin.saveSettings(); + // })); + // new Setting(containerEl) + // .addButton(button => { + // button + // .setButtonText('登录') + // .onClick(async () => { + // button.disabled = true; + // button.setButtonText('登录中...'); + // const {email, password} = this.plugin.settings; + // // new Notice(`email: ${email}`); + // try{ + // const res = await requestUrl({ + // url:'http://43.138.149.38:5050/login/', + // method: 'POST', + // contentType: 'application/json', + // body: JSON.stringify({ + // 'username':email, + // 'password':password - })}); - if (res.status !== 200) { - new Notice('登录失败'); - button.disabled = false; - button.setButtonText('登录'); - return; - } - const data = await res.json; - // new Notice(`res: ${JSON.stringify(data)}`); - this.plugin.settings.token = data.data.token; - await this.plugin.saveSettings(); - new Notice('登录成功'); - button.setButtonText('登录成功'); - button.disabled = false; - }catch(error){ - new Notice('登录失败: ' + error.message); - button.disabled = false; - button.setButtonText('登录'); - return; - } - }); - }) + // })}); + // if (res.status !== 200) { + // new Notice('登录失败'); + // button.disabled = false; + // button.setButtonText('登录'); + // return; + // } + // const data = await res.json; + // // new Notice(`res: ${JSON.stringify(data)}`); + // this.plugin.settings.token = data.data.token; + // await this.plugin.saveSettings(); + // new Notice('登录成功'); + // button.setButtonText('登录成功'); + // button.disabled = false; + // }catch(error){ + // new Notice('登录失败: ' + error.message); + // button.disabled = false; + // button.setButtonText('登录'); + // return; + // } + // }); + // }) new Setting(containerEl) - .setName('api key(可选)') + .setName('api key') .addText(text => text .setPlaceholder('请输入api key') .setValue(this.plugin.settings.apiKey) @@ -156,15 +158,8 @@ async function fetchArticle(settings: SyncReadPluginSettings,time: string,page: const apiKey = settings.apiKey; let res; if(apiKey === ''){ - res = await requestUrl( - { - url:`http://43.138.149.38:5050/get_synced_articles?time=${time}&page_number=${page}&page_size=50`, - method: 'GET', - headers: { - 'Authorization': 'Bearer ' + settings.token - }, - } - ); + + new Notice('请填写api key'); }else{ res = await requestUrl( { @@ -175,16 +170,52 @@ async function fetchArticle(settings: SyncReadPluginSettings,time: string,page: }, } ); + if (res.status !== 200) { + new Notice('同步文章失败'); + isWriting = false; + return; + } + const data = await res.json; + // new Notice(`res: ${data.data.length}`); + return data.data; } // new Notice(`token: ${settings.token}`); - if (res.status !== 200) { - new Notice('同步失败'); - isWriting = false; - return; + +} catch (error) { + new Notice('同步失败: ' + error.message); + isWriting = false; + return; +} +} + +async function fetchNote(settings: SyncReadPluginSettings,time: string,page: number){ + + try { + + const apiKey = settings.apiKey; + let res; + if(apiKey === ''){ + + new Notice('请填写api key'); + }else{ + res = await requestUrl( + { + url:`http://43.138.149.38:5050/get_notes_by_key?time=${time}&page_number=${page}&page_size=50`, + method: 'GET', + headers: { + 'api_key': apiKey + }, + } + ); + if (res.status !== 200) { + new Notice('同步标注失败'); + isWriting = false; + return; + } + const data = await res.json; + // new Notice(`res: ${data.data.length}`); + return data.data; } - const data = await res.json; - // new Notice(`res: ${data.data.length}`); - return data.data; } catch (error) { new Notice('同步失败: ' + error.message); isWriting = false; @@ -195,7 +226,7 @@ async function fetchArticle(settings: SyncReadPluginSettings,time: string,page: async function writeArticle(vault: Vault,fileManager:FileManager, article: { title: string, content: string ,site:string}): Promise { var folder = vault.getAbstractFileByPath('SyncRead同步文件夹'); if(!folder) folder = await vault.createFolder('SyncRead同步文件夹'); - new Notice('url: ' + article.site); + // new Notice('url: ' + article.site); let file = await vault.create(folder.path+'/'+filterIllegalChars(normalizePath(article.title)) + ".md", article.content); return fileManager.processFrontMatter(file,(frontMatter) => { frontMatter['created_at'] = new Date().toISOString(); @@ -203,6 +234,56 @@ async function writeArticle(vault: Vault,fileManager:FileManager, article: { tit }); } +async function writeNote(vault: Vault,fileManager:FileManager, note: {id:string; text: string; annotation: string;articleTitle:string;update_at:string }): Promise { + var folder = vault.getAbstractFileByPath('SyncRead同步文件夹'); + if(!folder) folder = await vault.createFolder('SyncRead同步文件夹'); + var noteFolder = vault.getAbstractFileByPath(folder.path+'/标注') + if(!noteFolder) noteFolder = await vault.createFolder(folder.path+'/标注'); + let noteFile = vault.getAbstractFileByPath(noteFolder.path+'/[标注]'+filterIllegalChars(normalizePath(note.articleTitle)) + ".md"); + if(!noteFile) { + noteFile = await vault.create(noteFolder.path+'/[标注]'+filterIllegalChars(normalizePath(note.articleTitle)) + ".md", "\n"); + fileManager.processFrontMatter(noteFile as TFile,(frontMatter) => { + frontMatter['originArticle'] = `[[${filterIllegalChars(normalizePath(note.articleTitle))}]]`; + }); + } + let noteText = note.text.replace(/\n+$/, ""); // Remove trailing newlines + + let noteTextWithQuotes = "\n\n\n>" + noteText.replace(/\n/g, "\n>"); + new Notice(noteTextWithQuotes); + return vault.append(noteFile as TFile,noteTextWithQuotes+"\n\n"+(note.annotation!==null?note.annotation:"")); + +} + +async function writeAllNote(app: App,plugin: SyncReadPlugin){ + let vault = app.vault; + let fileManager = app.fileManager; + if(isWriting) return; + isWriting = true; + var time = plugin.settings.noteTime; + var page = 1; + do{ + + const notes = await fetchNote(plugin.settings,time,page); + if (notes.length === 0) { + isWriting = false; + new Notice('同步标注完成'); + break; + } + try{ + await Promise.all(notes.map((note: {id:string; text: string; annotation: string;articleTitle:string;update_at:string }) => writeNote(vault, fileManager,note))); + }catch(error){ + // new Notice(error.message); + // isWriting = false; + // return; + } + // new Notice(`page: ${page}`); + plugin.settings.noteTime = notes[notes.length-1].update_at; + plugin.saveSettings(); + page++; + await new Promise((resolve) => setTimeout(resolve, 1000)); + // new Notice(`page: ${page}`); + }while(true); +} async function writeAllArticles(app: App,plugin: SyncReadPlugin){ let vault = app.vault; @@ -218,7 +299,7 @@ async function writeAllArticles(app: App,plugin: SyncReadPlugin){ const articles = await fetchArticle(plugin.settings,time,page); if (articles.length === 0) { isWriting = false; - new Notice('同步完成'); + new Notice('同步文章完成'); break; } try{ diff --git a/manifest.json b/manifest.json index 7cea743..6753156 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "id": "syncread", "name": "syncread-assistant", - "version": "1.0.3", + "version": "1.1.0", "minAppVersion": "0.15.0", "description": "sync articles from syncread app", "author": "flyer1b", diff --git a/package-lock.json b/package-lock.json index 370251d..e8d38a3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,7 @@ "@typescript-eslint/parser": "5.29.0", "builtin-modules": "3.3.0", "esbuild": "0.17.3", - "obsidian": "latest", + "obsidian": "^1.5.7-1", "tslib": "2.4.0", "typescript": "4.7.4" } @@ -1811,9 +1811,9 @@ } }, "node_modules/obsidian": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/obsidian/-/obsidian-1.4.11.tgz", - "integrity": "sha512-BCVYTvaXxElJMl6MMbDdY/CGK+aq18SdtDY/7vH8v6BxCBQ6KF4kKxL0vG9UZ0o5qh139KpUoJHNm+6O5dllKA==", + "version": "1.5.7-1", + "resolved": "https://registry.npmjs.org/obsidian/-/obsidian-1.5.7-1.tgz", + "integrity": "sha512-T5ZRuQ1FnfXqEoakTTHVDYvzUEEoT8zSPnQCW31PVgYwG4D4tZCQfKHN2hTz1ifnCe8upvwa6mBTAP2WUA5Vng==", "dev": true, "dependencies": { "@types/codemirror": "5.60.8", diff --git a/package.json b/package.json index 49a8c36..891912c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "syncread-assistant", - "version": "1.0.0", + "version": "1.1.0", "description": "sync articles from syncread app", "main": "main.js", "scripts": { @@ -17,7 +17,7 @@ "@typescript-eslint/parser": "5.29.0", "builtin-modules": "3.3.0", "esbuild": "0.17.3", - "obsidian": "latest", + "obsidian": "^1.5.7-1", "tslib": "2.4.0", "typescript": "4.7.4" }, diff --git a/versions.json b/versions.json index 7598f4c..df3d877 100644 --- a/versions.json +++ b/versions.json @@ -1,3 +1,3 @@ { - "1.0.3": "0.15.0" + "1.1.0": "0.15.0" }