Skip to content

Commit

Permalink
feat: list changed files
Browse files Browse the repository at this point in the history
  • Loading branch information
Vinzent03 committed Mar 17, 2021
1 parent 577fe8b commit 5e28b94
Showing 1 changed file with 48 additions and 1 deletion.
49 changes: 48 additions & 1 deletion main.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { spawnSync } from "child_process";
import { FileSystemAdapter, Notice, Plugin, PluginSettingTab, Setting, SuggestModal } from "obsidian";
import { FileSystemAdapter, FuzzySuggestModal, Notice, Plugin, PluginSettingTab, Setting, SuggestModal } from "obsidian";
import simpleGit, { FileStatusResult, SimpleGit } from "simple-git";

enum PluginState {
Expand Down Expand Up @@ -68,6 +68,15 @@ export default class ObsidianGit extends Plugin {
callback: () => new CustomMessageModal(this).open()
});

this.addCommand({
id: "list-changed-files",
name: "List changed files",
callback: async () => {
const status = await this.git.status();
new ChangedFilesModal(this, status.files).open();
}
});

this.init();

// init statusBar
Expand Down Expand Up @@ -596,3 +605,41 @@ class CustomMessageModal extends SuggestModal<string> {
}

}
class ChangedFilesModal extends FuzzySuggestModal<FileStatusResult> {
plugin: ObsidianGit;
changedFiles: FileStatusResult[];

constructor(plugin: ObsidianGit, changedFiles: FileStatusResult[]) {
super(plugin.app);
this.plugin = plugin;
this.changedFiles = changedFiles;
console.log(changedFiles);
this.setPlaceholder("Only files in vault can be openend!");
}

getItems(): FileStatusResult[] {
return this.changedFiles;
}

getItemText(item: FileStatusResult): string {
if (item.index == "?" && item.working_dir == "?") {
return `Untracked | ${item.path}`;
}

let working_dir = "";
let index = "";

if (item.working_dir != " ") working_dir = `Working dir: ${item.working_dir} `;
if (item.index != " ") index = `Index: ${item.index}`;

return `${working_dir}${index} | ${item.path}`;
}

onChooseItem(item: FileStatusResult, _: MouseEvent | KeyboardEvent): void {
if (this.plugin.app.metadataCache.getFirstLinkpathDest(item.path, "") == null) {
new Notice("Can't open file in Obsidian");
} else {
this.plugin.app.workspace.openLinkText(item.path, "/");
}
}
}

0 comments on commit 5e28b94

Please sign in to comment.