Skip to content

Commit

Permalink
Able to update Obsidian without duplicates.
Browse files Browse the repository at this point in the history
  • Loading branch information
Holmes555 committed Jun 23, 2023
1 parent 2930e70 commit e277dba
Show file tree
Hide file tree
Showing 6 changed files with 60 additions and 14 deletions.
3 changes: 2 additions & 1 deletion README.md
Expand Up @@ -41,7 +41,8 @@ If you are specifying your own template, you could choose from these variables:
## Changelog

**[0.1.3]** - Added ability to use custom template .md file for importing with your formatting.
**[0.1.4]** - Format default template, to make proper tags. Replace "|" in the file name.
**[0.1.4]** - Format default template, to make proper tags. Replace "|" in the file name.
**[0.2.0]** - Added ability to compare Workona JSON files and export only new resources, that way you could update Obsidian without duplicates.

## Note

Expand Down
61 changes: 53 additions & 8 deletions main.ts
Expand Up @@ -86,7 +86,7 @@ Description: {{description}}
`;
}

async generateNotes(objdata:Object, templateFile:File, destFolder:string, overwrite:boolean) {
async generateNotes(objdata:Object, objdataOld:Object, templateFile:File, destFolder:string, overwrite:boolean) {
console.log(`generateNotes('${destFolder}', ovewrite='${overwrite}')`);

// Save current settings
Expand All @@ -98,25 +98,39 @@ Description: {{description}}
const workspacesPath = destFolder + "/" + WORKONA_WORKSPACES;
await this.createFolder(workspacesPath);

for (let worspaceSection of Object.values(objdata[WORKONA_WORKSPACES as keyof Object])) {
let worspaceSectionOldBase = objdataOld[WORKONA_WORKSPACES as keyof Object] ?? {};
for (let [key, worspaceSection] of Object.entries(objdata[WORKONA_WORKSPACES as keyof Object])) {
let worspaceSectionOld = worspaceSectionOldBase[key as keyof Object] ?? {};
const workspaceSectionTitle = worspaceSection[WORKONA_TITLE as keyof Object];
const workspaceSectionPath = workspacesPath + "/" + workspaceSectionTitle;
await this.createFolder(workspaceSectionPath);

for (let worspaceSubSection of Object.values(worspaceSection[WORKONA_WORKSPACES.toLowerCase() as keyof Object])) {
let worspaceSubSectionOldBase = worspaceSectionOld[WORKONA_WORKSPACES.toLowerCase() as keyof Object] ?? {};
for (let [key, worspaceSubSection] of Object.entries(worspaceSection[WORKONA_WORKSPACES.toLowerCase() as keyof Object])) {
let worspaceSubSectionOld = worspaceSubSectionOldBase[key as keyof Object] ?? {};
const workspaceSubSectionTitle = worspaceSubSection[WORKONA_TITLE as keyof Object];
const workspaceSubSectionPath = workspaceSectionPath + "/" + workspaceSubSectionTitle;
await this.createFolder(workspaceSubSectionPath);

for (let resourcesSection of Object.values(worspaceSubSection[WORKONA_RESOURCES.toLowerCase() as keyof Object])) {
let resourcesSectionOldBase = worspaceSubSectionOld[WORKONA_RESOURCES.toLowerCase() as keyof Object] ?? {};
for (let [key, resourcesSection] of Object.entries(worspaceSubSection[WORKONA_RESOURCES.toLowerCase() as keyof Object])) {
let resourcesSectionOld = resourcesSectionOldBase[key as keyof Object] ?? {};
const resourceSectionTitle = resourcesSection[WORKONA_TITLE as keyof Object];

for (let resource of Object.values(resourcesSection[WORKONA_RESOURCES.toLowerCase() as keyof Object])) {
let resourceOldBase = resourcesSectionOld[WORKONA_RESOURCES.toLowerCase() as keyof Object] ?? {}
for (let [key, resource] of Object.entries(resourcesSection[WORKONA_RESOURCES.toLowerCase() as keyof Object])) {
let resourceOld = resourceOldBase[key as keyof Object] ?? {};
const title = resource[WORKONA_TITLE as keyof Object];
const filename = workspaceSubSectionPath + "/" + this.validFilename(title) + ".md";

const description = resource[WORKONA_DESCRIPTION as keyof Object];
const url = resource[WORKONA_URL as keyof Object];
const urlOld = resourceOld[WORKONA_URL as keyof Object] ?? null;

if (url === urlOld) {
console.log(`Url: ${url}.\n Old url: ${urlOld}`);
continue;
}

let templateText = await this.getBaseTemplateText();
if (templateFile) {
Expand All @@ -137,7 +151,7 @@ Description: {{description}}
}
await this.app.vault.delete(exist).catch(err => console.log(`app.vault.delete: ${err}`));
}
await this.app.vault.create(filename, body).catch(err => console.log(`app.vault.create: ${err}`));
await this.app.vault.create(filename, body).catch(err => console.log(`Filename: ${filename}.\n app.vault.create: ${err}`));
}
}
}
Expand Down Expand Up @@ -190,6 +204,22 @@ class WorkonaToObsidianSettingTab extends PluginSettingTab {
}
});

const jsonOldSetting = new Setting(containerEl).setName('Choose previously generated Workona JSON file').setDesc(
'Choose previously generated Workona JSON file to import, or paste text into the text box. Use it to not override or duplicate resources.');
const inputOldJsonFile = jsonOldSetting.controlEl.createEl("input", {
attr: {
type: "file",
multiple: false,
accept: ".json"
}
});
const inputOldJsonText = jsonOldSetting.controlEl.createEl("textarea", {
attr: {
rows: "5",
columns: "20"
}
});

const templateSetting = new Setting(containerEl).setName("Choose template Markdown file").setDesc("Choose template (Handlebars) Markdown file");
const inputTemplateFile = templateSetting.controlEl.createEl("input", {
attr: {
Expand Down Expand Up @@ -226,6 +256,21 @@ class WorkonaToObsidianSettingTab extends PluginSettingTab {
if (templateFiles) {
templateFile = templateFiles[0];
}

let objdataOld:Object = {};
let textOld = inputOldJsonText.value;
if (textOld.length == 0) {
const oldJsonFiles = inputOldJsonFile.files;
if (oldJsonFiles) {
let oldJsonFile = oldJsonFiles[0];
console.log(`Processing input old file ${oldJsonFile.name}`);
textOld = await oldJsonFile.text();
objdataOld = JSON.parse(textOld);
}
} else {
objdataOld = JSON.parse(textOld);
}

let text = inputJsonText.value;
if (text.length == 0) {
const jsonFiles = inputJsonFile.files;
Expand All @@ -238,11 +283,11 @@ class WorkonaToObsidianSettingTab extends PluginSettingTab {
console.log(`Processing input file ${jsonFiles[i].name}`);
text = await jsonFiles[i].text();
let objdata:Object = JSON.parse(text);
await this.handler.call(this.caller, objdata, templateFile, inputFolderName.value, inputOverwriteField.checked);
await this.handler.call(this.caller, objdata, objdataOld, templateFile, inputFolderName.value, inputOverwriteField.checked);
}
} else {
let objdata:Object = JSON.parse(text);
await this.handler.call(this.caller, objdata, templateFile, inputFolderName.value, inputOverwriteField.checked);
await this.handler.call(this.caller, objdata, objdataOld, templateFile, inputFolderName.value, inputOverwriteField.checked);
}
new Notice("Import Finished");
}));
Expand Down
2 changes: 1 addition & 1 deletion manifest.json
@@ -1,7 +1,7 @@
{
"id": "workona-to-obsidian",
"name": "Workona To Obsidian",
"version": "0.1.4",
"version": "0.2.0",
"minAppVersion": "0.15.0",
"description": "Import Workona resources through generated JSON file.",
"author": "Holmes555",
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
@@ -1,6 +1,6 @@
{
"name": "workona-to-obsidian-plugin",
"version": "0.1.4",
"version": "0.2.0",
"description": "Import Workona resources through generated JSON file. (https://github.com/Holmes555/workona-to-obsidian)",
"main": "main.js",
"scripts": {
Expand Down
2 changes: 1 addition & 1 deletion versions.json
@@ -1,3 +1,3 @@
{
"0.1.4": "0.15.0"
"0.2.0": "0.15.0"
}

0 comments on commit e277dba

Please sign in to comment.