Borked the gpg signing :(
This commit is contained in:
399
.obsidian/plugins/breadcrumbs/main.js
vendored
399
.obsidian/plugins/breadcrumbs/main.js
vendored
File diff suppressed because one or more lines are too long
2
.obsidian/plugins/breadcrumbs/manifest.json
vendored
2
.obsidian/plugins/breadcrumbs/manifest.json
vendored
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"id": "breadcrumbs",
|
||||
"name": "Breadcrumbs",
|
||||
"version": "3.6.3",
|
||||
"version": "3.6.4",
|
||||
"minAppVersion": "0.15.2",
|
||||
"description": "Visualise & navigate your vault's structure",
|
||||
"author": "SkepticMystic",
|
||||
|
||||
6
.obsidian/plugins/emoji-shortcodes/main.js
vendored
6
.obsidian/plugins/emoji-shortcodes/main.js
vendored
File diff suppressed because one or more lines are too long
@@ -1,10 +1,10 @@
|
||||
{
|
||||
"id": "emoji-shortcodes",
|
||||
"name": "Emoji Shortcodes",
|
||||
"version": "2.1.2",
|
||||
"version": "2.1.3",
|
||||
"minAppVersion": "0.12.17",
|
||||
"description": "This Plugin enables the use of Markdown Emoji Shortcodes :smile:",
|
||||
"author": "phibr0",
|
||||
"authorUrl": "https://github.com/phibr0",
|
||||
"isDesktopOnly": false
|
||||
}
|
||||
}
|
||||
|
||||
5
.obsidian/plugins/obsidian-completr/main.js
vendored
5
.obsidian/plugins/obsidian-completr/main.js
vendored
@@ -2253,7 +2253,7 @@ var CompletrPlugin = class extends import_obsidian5.Plugin {
|
||||
constructor() {
|
||||
super(...arguments);
|
||||
this.onFileOpened = (file) => {
|
||||
if (!this.settings.fileScannerScanCurrent || !file)
|
||||
if (!this.settings.fileScannerProviderEnabled || !this.settings.fileScannerScanCurrent || !file)
|
||||
return;
|
||||
FileScanner.scanFile(this.settings, file, true);
|
||||
};
|
||||
@@ -2327,7 +2327,8 @@ var CompletrPlugin = class extends import_obsidian5.Plugin {
|
||||
],
|
||||
editorCallback: (editor) => {
|
||||
this._suggestionPopup.trigger(editor, this.app.workspace.getActiveFile(), true);
|
||||
}
|
||||
},
|
||||
isVisible: () => !this._suggestionPopup.isVisible()
|
||||
});
|
||||
this.addCommand({
|
||||
id: "completr-select-next-suggestion",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"id": "obsidian-completr",
|
||||
"name": "Completr",
|
||||
"version": "3.0.0",
|
||||
"version": "3.0.1",
|
||||
"minAppVersion": "1.0.0",
|
||||
"description": "This plugin provides advanced auto-completion functionality for LaTeX, Frontmatter and standard writing.",
|
||||
"author": "tth05",
|
||||
|
||||
24396
.obsidian/plugins/obsidian-completr/scanned_words.txt
vendored
24396
.obsidian/plugins/obsidian-completr/scanned_words.txt
vendored
File diff suppressed because it is too large
Load Diff
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"folder": "Excalidraw",
|
||||
"folder": "!Załączniki/Excalidraw",
|
||||
"embedUseExcalidrawFolder": false,
|
||||
"templateFilePath": "Excalidraw/Template.excalidraw",
|
||||
"scriptFolderPath": "Excalidraw/Scripts",
|
||||
"compress": false,
|
||||
"templateFilePath": "!Załączniki/Excalidraw/Template.excalidraw",
|
||||
"scriptFolderPath": "!Załączniki/Excalidraw/Scripts",
|
||||
"compress": true,
|
||||
"autosave": true,
|
||||
"autosaveInterval": 15000,
|
||||
"drawingFilenamePrefix": "Drawing ",
|
||||
@@ -16,8 +16,8 @@
|
||||
"previewMatchObsidianTheme": false,
|
||||
"width": "400",
|
||||
"isLeftHanded": false,
|
||||
"matchTheme": false,
|
||||
"matchThemeAlways": false,
|
||||
"matchTheme": true,
|
||||
"matchThemeAlways": true,
|
||||
"matchThemeTrigger": false,
|
||||
"defaultMode": "normal",
|
||||
"defaultPenMode": "never",
|
||||
@@ -75,7 +75,7 @@
|
||||
"mdCSS": "",
|
||||
"scriptEngineSettings": {},
|
||||
"defaultTrayMode": false,
|
||||
"previousRelease": "1.7.25",
|
||||
"previousRelease": "1.7.29",
|
||||
"showReleaseNotes": true,
|
||||
"showNewVersionNotification": true,
|
||||
"mathjaxSourceURL": "https://cdn.jsdelivr.net/npm/mathjax@3.2.1/es5/tex-svg.js"
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"id": "obsidian-excalidraw-plugin",
|
||||
"name": "Excalidraw",
|
||||
"version": "1.7.25",
|
||||
"version": "1.7.29",
|
||||
"minAppVersion": "0.15.6",
|
||||
"description": "An Obsidian plugin to edit and view Excalidraw drawings",
|
||||
"author": "Zsolt Viczian",
|
||||
|
||||
@@ -96,8 +96,7 @@ li[data-testid] {
|
||||
|
||||
.ex-coffee-div {
|
||||
text-align: center;
|
||||
margin-bottom: 20px;
|
||||
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.excalidraw-scriptengine-install td>img {
|
||||
@@ -184,9 +183,8 @@ li[data-testid] {
|
||||
}
|
||||
|
||||
.excalidraw-release .modal {
|
||||
max-height: 90%;
|
||||
width: auto;
|
||||
max-width: 130ch;
|
||||
max-height: 80%;
|
||||
max-width: 100ch;
|
||||
}
|
||||
|
||||
.excalidraw .Island .scrollbar {
|
||||
@@ -225,6 +223,65 @@ textarea.excalidraw-wysiwyg {
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
.is-tablet .excalidraw button {
|
||||
.is-tablet .excalidraw button,
|
||||
.is-mobile .excalidraw button {
|
||||
padding: initial;
|
||||
height: 1.8rem;
|
||||
}
|
||||
|
||||
.excalidraw button,
|
||||
.ToolIcon button {
|
||||
box-shadow: none;
|
||||
justify-content: initial;
|
||||
}
|
||||
|
||||
.excalidraw {
|
||||
--default-button-size: 2rem !important;
|
||||
--default-icon-size: 1rem !important;
|
||||
--lg-button-size: 1.8rem !important;
|
||||
--lg-icon-size: 1rem !important;
|
||||
}
|
||||
|
||||
.excalidraw .tray-zoom {
|
||||
pointer-events: initial;
|
||||
padding-bottom: 0.05rem;
|
||||
padding-top: 0.05rem;
|
||||
}
|
||||
|
||||
.excalidraw-container.theme--dark {
|
||||
background-color: #121212;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
/* https://discordapp.com/channels/686053708261228577/989603365606531104/1041266507256184863 */
|
||||
/*.workspace-leaf {
|
||||
contain: none !important;
|
||||
}*/
|
||||
|
||||
.color-picker-content {
|
||||
overflow-y: auto;
|
||||
max-height: 10rem;
|
||||
}
|
||||
|
||||
.excalidraw .FixedSideContainer_side_top {
|
||||
top: 0.3rem;
|
||||
}
|
||||
|
||||
.excalidraw .ToolIcon__keybinding {
|
||||
font-size: 0.5rem;
|
||||
}
|
||||
|
||||
.Island > .Stack > .Stack {
|
||||
padding:0.2rem;
|
||||
}
|
||||
|
||||
label.color-input-container > input {
|
||||
max-width: 8rem;
|
||||
}
|
||||
|
||||
.excalidraw .FixedSideContainer_side_top {
|
||||
left: 10px !important;
|
||||
top: 10px !important;
|
||||
right: 10px !important;
|
||||
bottom: 10px !important;
|
||||
}
|
||||
7
.obsidian/plugins/obsidian-git/data.json
vendored
7
.obsidian/plugins/obsidian-git/data.json
vendored
@@ -2,9 +2,9 @@
|
||||
"commitMessage": "vault backup: {{date}}",
|
||||
"autoCommitMessage": "vault backup: {{date}}",
|
||||
"commitDateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||
"autoSaveInterval": 0,
|
||||
"autoSaveInterval": 5,
|
||||
"autoPushInterval": 0,
|
||||
"autoPullInterval": 0,
|
||||
"autoPullInterval": 60,
|
||||
"autoPullOnBoot": false,
|
||||
"disablePush": false,
|
||||
"pullBeforePush": true,
|
||||
@@ -14,13 +14,12 @@
|
||||
"updateSubmodules": false,
|
||||
"syncMethod": "merge",
|
||||
"customMessageOnAutoBackup": false,
|
||||
"autoBackupAfterFileChange": false,
|
||||
"autoBackupAfterFileChange": true,
|
||||
"treeStructure": false,
|
||||
"refreshSourceControl": true,
|
||||
"basePath": "",
|
||||
"differentIntervalCommitAndPush": false,
|
||||
"changedFilesInStatusBar": false,
|
||||
"username": "",
|
||||
"showedMobileNotice": true,
|
||||
"refreshSourceControlTimer": 7000,
|
||||
"showBranchStatusBar": true
|
||||
|
||||
263
.obsidian/plugins/obsidian-git/main.js
vendored
263
.obsidian/plugins/obsidian-git/main.js
vendored
@@ -1886,6 +1886,7 @@ var require_lib = __commonJS({
|
||||
}
|
||||
this.timeout = opts.timeout || AsyncLock2.DEFAULT_TIMEOUT;
|
||||
this.maxOccupationTime = opts.maxOccupationTime || AsyncLock2.DEFAULT_MAX_OCCUPATION_TIME;
|
||||
this.maxExecutionTime = opts.maxExecutionTime || AsyncLock2.DEFAULT_MAX_EXECUTION_TIME;
|
||||
if (opts.maxPending === Infinity || Number.isInteger(opts.maxPending) && opts.maxPending >= 0) {
|
||||
this.maxPending = opts.maxPending;
|
||||
} else {
|
||||
@@ -1894,6 +1895,7 @@ var require_lib = __commonJS({
|
||||
};
|
||||
AsyncLock2.DEFAULT_TIMEOUT = 0;
|
||||
AsyncLock2.DEFAULT_MAX_OCCUPATION_TIME = 0;
|
||||
AsyncLock2.DEFAULT_MAX_EXECUTION_TIME = 0;
|
||||
AsyncLock2.DEFAULT_MAX_PENDING = 1e3;
|
||||
AsyncLock2.prototype.acquire = function(key2, fn, cb, opts) {
|
||||
if (Array.isArray(key2)) {
|
||||
@@ -1917,12 +1919,17 @@ var require_lib = __commonJS({
|
||||
var resolved = false;
|
||||
var timer = null;
|
||||
var occupationTimer = null;
|
||||
var executionTimer = null;
|
||||
var self3 = this;
|
||||
var done = function(locked, err, ret) {
|
||||
if (occupationTimer) {
|
||||
clearTimeout(occupationTimer);
|
||||
occupationTimer = null;
|
||||
}
|
||||
if (executionTimer) {
|
||||
clearTimeout(executionTimer);
|
||||
executionTimer = null;
|
||||
}
|
||||
if (locked) {
|
||||
if (!!self3.queues[key2] && self3.queues[key2].length === 0) {
|
||||
delete self3.queues[key2];
|
||||
@@ -1962,6 +1969,14 @@ var require_lib = __commonJS({
|
||||
if (self3.domainReentrant && locked) {
|
||||
self3.domains[key2] = process.domain;
|
||||
}
|
||||
var maxExecutionTime = opts.maxExecutionTime || self3.maxExecutionTime;
|
||||
if (maxExecutionTime) {
|
||||
executionTimer = setTimeout(function() {
|
||||
if (!!self3.queues[key2]) {
|
||||
done(locked, new Error("Maximum execution time is exceeded " + key2));
|
||||
}
|
||||
}, maxExecutionTime);
|
||||
}
|
||||
if (fn.length === 1) {
|
||||
var called = false;
|
||||
try {
|
||||
@@ -19625,10 +19640,10 @@ var IsomorphicGit = class extends GitManager {
|
||||
fs: this.fs,
|
||||
dir: this.plugin.settings.basePath,
|
||||
onAuth: () => {
|
||||
var _a2;
|
||||
var _a2, _b;
|
||||
return {
|
||||
username: this.plugin.settings.username,
|
||||
password: (_a2 = this.plugin.localStorage.getPassword()) != null ? _a2 : void 0
|
||||
username: (_a2 = this.plugin.localStorage.getUsername()) != null ? _a2 : void 0,
|
||||
password: (_b = this.plugin.localStorage.getPassword()) != null ? _b : void 0
|
||||
};
|
||||
},
|
||||
onAuthFailure: async () => {
|
||||
@@ -19637,8 +19652,7 @@ var IsomorphicGit = class extends GitManager {
|
||||
if (username) {
|
||||
const password = await new GeneralModal({ placeholder: "Specify your password/personal access token" }).open();
|
||||
if (password) {
|
||||
this.plugin.settings.username = username;
|
||||
await this.plugin.saveSettings();
|
||||
this.plugin.localStorage.setUsername(username);
|
||||
this.plugin.localStorage.setPassword(password);
|
||||
return {
|
||||
username,
|
||||
@@ -19683,17 +19697,22 @@ var IsomorphicGit = class extends GitManager {
|
||||
}
|
||||
}
|
||||
async status() {
|
||||
const notice = new import_obsidian5.Notice("Getting status...", this.noticeLength);
|
||||
let notice;
|
||||
const timeout = window.setTimeout(function() {
|
||||
notice = new import_obsidian5.Notice("This takes longer: Getting status", this.noticeLength);
|
||||
}, 2e4);
|
||||
try {
|
||||
this.plugin.setState(PluginState.status);
|
||||
const status2 = (await this.wrapFS(isomorphic_git_default.statusMatrix({ ...this.getRepo() }))).map((row) => this.getFileStatusResult(row));
|
||||
const changed = status2.filter((fileStatus) => fileStatus.working_dir !== " ");
|
||||
const staged = status2.filter((fileStatus) => fileStatus.index !== " " && fileStatus.index !== "U");
|
||||
const conflicted = [];
|
||||
notice.hide();
|
||||
window.clearTimeout(timeout);
|
||||
notice == null ? void 0 : notice.hide();
|
||||
return { changed, staged, conflicted };
|
||||
} catch (error) {
|
||||
notice.hide();
|
||||
window.clearTimeout(timeout);
|
||||
notice == null ? void 0 : notice.hide();
|
||||
this.plugin.displayError(error);
|
||||
throw error;
|
||||
}
|
||||
@@ -19831,7 +19850,7 @@ var IsomorphicGit = class extends GitManager {
|
||||
return this.wrapFS(isomorphic_git_default.resolveRef({ ...this.getRepo(), ref }));
|
||||
}
|
||||
async pull() {
|
||||
const progressNotice = new import_obsidian5.Notice("Initializing pull", this.noticeLength);
|
||||
const progressNotice = this.showNotice("Initializing pull");
|
||||
try {
|
||||
this.plugin.setState(PluginState.pull);
|
||||
const localCommit = await this.resolveRef("HEAD");
|
||||
@@ -19847,11 +19866,13 @@ var IsomorphicGit = class extends GitManager {
|
||||
...this.getRepo(),
|
||||
ref: branchInfo.current,
|
||||
onProgress: (progress) => {
|
||||
progressNotice.noticeEl.innerText = this.getProgressText("Checkout", progress);
|
||||
if (progressNotice !== void 0) {
|
||||
progressNotice.noticeEl.innerText = this.getProgressText("Checkout", progress);
|
||||
}
|
||||
},
|
||||
remote: branchInfo.remote
|
||||
}));
|
||||
progressNotice.hide();
|
||||
progressNotice == null ? void 0 : progressNotice.hide();
|
||||
const upstreamCommit = await this.resolveRef("HEAD");
|
||||
this.plugin.lastUpdate = Date.now();
|
||||
const changedFiles = await this.getFileChangesCount(localCommit, upstreamCommit);
|
||||
@@ -19863,7 +19884,7 @@ var IsomorphicGit = class extends GitManager {
|
||||
vault_path: this.getVaultPath(file.path)
|
||||
}));
|
||||
} catch (error) {
|
||||
progressNotice.hide();
|
||||
progressNotice == null ? void 0 : progressNotice.hide();
|
||||
if (error instanceof Errors.MergeConflictError) {
|
||||
this.plugin.handleConflict(error.data.filepaths.map((file) => this.getVaultPath(file)));
|
||||
}
|
||||
@@ -19875,7 +19896,7 @@ var IsomorphicGit = class extends GitManager {
|
||||
if (!await this.canPush()) {
|
||||
return 0;
|
||||
}
|
||||
const progressNotice = new import_obsidian5.Notice("Initializing push", this.noticeLength);
|
||||
const progressNotice = this.showNotice("Initializing push");
|
||||
try {
|
||||
this.plugin.setState(PluginState.status);
|
||||
const status2 = await this.branchInfo();
|
||||
@@ -19886,13 +19907,15 @@ var IsomorphicGit = class extends GitManager {
|
||||
await this.wrapFS(isomorphic_git_default.push({
|
||||
...this.getRepo(),
|
||||
onProgress: (progress) => {
|
||||
progressNotice.noticeEl.innerText = this.getProgressText("Pushing", progress);
|
||||
if (progressNotice !== void 0) {
|
||||
progressNotice.noticeEl.innerText = this.getProgressText("Pushing", progress);
|
||||
}
|
||||
}
|
||||
}));
|
||||
progressNotice.hide();
|
||||
progressNotice == null ? void 0 : progressNotice.hide();
|
||||
return numChangedFiles;
|
||||
} catch (error) {
|
||||
progressNotice.hide();
|
||||
progressNotice == null ? void 0 : progressNotice.hide();
|
||||
this.plugin.displayError(error);
|
||||
throw error;
|
||||
}
|
||||
@@ -19973,19 +19996,21 @@ var IsomorphicGit = class extends GitManager {
|
||||
}
|
||||
}
|
||||
async clone(url, dir) {
|
||||
const progressNotice = new import_obsidian5.Notice("Initializing clone", this.noticeLength);
|
||||
const progressNotice = this.showNotice("Initializing clone");
|
||||
try {
|
||||
await this.wrapFS(isomorphic_git_default.clone({
|
||||
...this.getRepo(),
|
||||
dir,
|
||||
url,
|
||||
onProgress: (progress) => {
|
||||
progressNotice.noticeEl.innerText = this.getProgressText("Cloning", progress);
|
||||
if (progressNotice !== void 0) {
|
||||
progressNotice.noticeEl.innerText = this.getProgressText("Cloning", progress);
|
||||
}
|
||||
}
|
||||
}));
|
||||
progressNotice.hide();
|
||||
progressNotice == null ? void 0 : progressNotice.hide();
|
||||
} catch (error) {
|
||||
progressNotice.hide();
|
||||
progressNotice == null ? void 0 : progressNotice.hide();
|
||||
this.plugin.displayError(error);
|
||||
throw error;
|
||||
}
|
||||
@@ -20014,26 +20039,28 @@ var IsomorphicGit = class extends GitManager {
|
||||
}
|
||||
}
|
||||
async fetch(remote) {
|
||||
const progressNotice = new import_obsidian5.Notice("Initializing fetch", this.noticeLength);
|
||||
const progressNotice = this.showNotice("Initializing fetch");
|
||||
try {
|
||||
const args = {
|
||||
...this.getRepo(),
|
||||
onProgress: (progress) => {
|
||||
progressNotice.noticeEl.innerText = this.getProgressText("Fetching", progress);
|
||||
if (progressNotice !== void 0) {
|
||||
progressNotice.noticeEl.innerText = this.getProgressText("Fetching", progress);
|
||||
}
|
||||
},
|
||||
remote: remote != null ? remote : await this.getCurrentRemote()
|
||||
};
|
||||
await this.wrapFS(isomorphic_git_default.fetch(args));
|
||||
progressNotice.hide();
|
||||
progressNotice == null ? void 0 : progressNotice.hide();
|
||||
} catch (error) {
|
||||
this.plugin.displayError(error);
|
||||
progressNotice.hide();
|
||||
progressNotice == null ? void 0 : progressNotice.hide();
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
async setRemote(name, url) {
|
||||
try {
|
||||
await this.wrapFS(isomorphic_git_default.addRemote({ ...this.getRepo(), remote: name, url }));
|
||||
await this.wrapFS(isomorphic_git_default.addRemote({ ...this.getRepo(), remote: name, url, force: true }));
|
||||
} catch (error) {
|
||||
this.plugin.displayError(error);
|
||||
throw error;
|
||||
@@ -20053,7 +20080,8 @@ var IsomorphicGit = class extends GitManager {
|
||||
await this.wrapFS(isomorphic_git_default.deleteRemote({ ...this.getRepo(), remote: remoteName }));
|
||||
}
|
||||
async getRemoteUrl(remote) {
|
||||
return (await this.wrapFS(isomorphic_git_default.listRemotes({ ...this.getRepo() }))).filter((item) => item.remote == remote)[0].url;
|
||||
var _a2;
|
||||
return (_a2 = (await this.wrapFS(isomorphic_git_default.listRemotes({ ...this.getRepo() }))).filter((item) => item.remote == remote)[0]) == null ? void 0 : _a2.url;
|
||||
}
|
||||
updateBasePath(basePath) {
|
||||
this.getRepo().dir = basePath;
|
||||
@@ -20122,7 +20150,10 @@ var IsomorphicGit = class extends GitManager {
|
||||
});
|
||||
}
|
||||
async getUnstagedFiles(base = ".") {
|
||||
const notice = new import_obsidian5.Notice("Getting status...", this.noticeLength);
|
||||
let notice;
|
||||
const timeout = window.setTimeout(function() {
|
||||
notice = new import_obsidian5.Notice("This takes longer: Getting status", this.noticeLength);
|
||||
}, 2e4);
|
||||
try {
|
||||
const repo = this.getRepo();
|
||||
const res = await this.wrapFS(isomorphic_git_default.walk({
|
||||
@@ -20174,10 +20205,12 @@ var IsomorphicGit = class extends GitManager {
|
||||
return null;
|
||||
}
|
||||
}));
|
||||
notice.hide();
|
||||
window.clearTimeout(timeout);
|
||||
notice == null ? void 0 : notice.hide();
|
||||
return res;
|
||||
} catch (error) {
|
||||
notice.hide();
|
||||
window.clearTimeout(timeout);
|
||||
notice == null ? void 0 : notice.hide();
|
||||
this.plugin.displayError(error);
|
||||
throw error;
|
||||
}
|
||||
@@ -20221,6 +20254,11 @@ var IsomorphicGit = class extends GitManager {
|
||||
vault_path: this.getVaultPath(row[this.FILE])
|
||||
};
|
||||
}
|
||||
showNotice(message) {
|
||||
if (!this.plugin.settings.disablePopups) {
|
||||
return new import_obsidian5.Notice(message, this.noticeLength);
|
||||
}
|
||||
}
|
||||
};
|
||||
function fromValue2(value) {
|
||||
let queue = [value];
|
||||
@@ -23795,6 +23833,32 @@ function abortPlugin(signal) {
|
||||
};
|
||||
return [onSpawnBefore, onSpawnAfter];
|
||||
}
|
||||
function isConfigSwitch(arg) {
|
||||
return arg.trim().toLowerCase() === "-c";
|
||||
}
|
||||
function preventProtocolOverride(arg, next) {
|
||||
if (!isConfigSwitch(arg)) {
|
||||
return;
|
||||
}
|
||||
if (!/^\s*protocol(.[a-z]+)?.allow/.test(next)) {
|
||||
return;
|
||||
}
|
||||
throw new GitPluginError(void 0, "unsafe", "Configuring protocol.allow is not permitted without enabling allowUnsafeExtProtocol");
|
||||
}
|
||||
function blockUnsafeOperationsPlugin({
|
||||
allowUnsafeProtocolOverride = false
|
||||
} = {}) {
|
||||
return {
|
||||
type: "spawn.args",
|
||||
action(args, _context) {
|
||||
args.forEach((current, index2) => {
|
||||
const next = index2 < args.length ? args[index2 + 1] : "";
|
||||
allowUnsafeProtocolOverride || preventProtocolOverride(current, next);
|
||||
});
|
||||
return args;
|
||||
}
|
||||
};
|
||||
}
|
||||
init_utils();
|
||||
function commandConfigPrefixingPlugin(configuration) {
|
||||
const prefix = prefixedArray(configuration, "-c");
|
||||
@@ -24023,6 +24087,7 @@ function gitInstanceFactory(baseDir, options) {
|
||||
if (Array.isArray(config.config)) {
|
||||
plugins.add(commandConfigPrefixingPlugin(config.config));
|
||||
}
|
||||
plugins.add(blockUnsafeOperationsPlugin(config.unsafe));
|
||||
plugins.add(completionDetectionPlugin(config.completion));
|
||||
config.abort && plugins.add(abortPlugin(config.abort));
|
||||
config.progress && plugins.add(progressMonitorPlugin(config.progress));
|
||||
@@ -24058,7 +24123,14 @@ var SimpleGit = class extends GitManager {
|
||||
binary: this.plugin.localStorage.getGitPath() || void 0,
|
||||
config: ["core.quotepath=off"]
|
||||
});
|
||||
this.git.cwd(await this.git.revparse("--show-toplevel"));
|
||||
const env = this.plugin.localStorage.getPATHPaths();
|
||||
if (env.length > 0) {
|
||||
const path3 = process.env["PATH"] + ":" + env.join(":");
|
||||
process.env["PATH"] = path3;
|
||||
}
|
||||
const debug2 = require_browser();
|
||||
debug2.enable("simple-git");
|
||||
await this.git.cwd(await this.git.revparse("--show-toplevel"));
|
||||
}
|
||||
}
|
||||
async status() {
|
||||
@@ -24300,10 +24372,14 @@ var SimpleGit = class extends GitManager {
|
||||
await this.git.clone(url, path.join(this.app.vault.adapter.getBasePath(), dir), [], (err) => this.onError(err));
|
||||
}
|
||||
async setConfig(path2, value) {
|
||||
await this.git.addConfig(path2, value, (err) => this.onError(err));
|
||||
if (value == void 0) {
|
||||
await this.git.raw(["config", "--local", "--unset", path2]);
|
||||
} else {
|
||||
await this.git.addConfig(path2, value, (err) => this.onError(err));
|
||||
}
|
||||
}
|
||||
async getConfig(path2) {
|
||||
const config = await this.git.listConfig((err) => this.onError(err));
|
||||
const config = await this.git.listConfig("local", (err) => this.onError(err));
|
||||
return config.all[path2];
|
||||
}
|
||||
async fetch(remote) {
|
||||
@@ -24377,7 +24453,7 @@ var SimpleGit = class extends GitManager {
|
||||
}
|
||||
onError(error) {
|
||||
if (error) {
|
||||
const networkFailure = error.message.contains("Could not resolve host") || error.message.match(/ssh: connect to host .*? port .*?: Operation timed out/);
|
||||
const networkFailure = error.message.contains("Could not resolve host") || error.message.match(/ssh: connect to host .*? port .*?: Operation timed out/) || error.message.match(/ssh: connect to host .*? port .*?: Network is unreachable/);
|
||||
if (!networkFailure) {
|
||||
this.plugin.displayError(error.message);
|
||||
this.plugin.setState(PluginState.idle);
|
||||
@@ -24435,7 +24511,7 @@ var ObsidianGitSettingsTab = class extends import_obsidian7.PluginSettingTab {
|
||||
new import_obsidian7.Notice("Please specify a valid number.");
|
||||
}
|
||||
}));
|
||||
new import_obsidian7.Setting(containerEl).setName(`If turned on, do auto ${commitOrBackup} every X minutes after last change. Prevents auto ${commitOrBackup} while editing a file. If turned off, do auto ${commitOrBackup} every X minutes. It's independent from last change.`).addToggle((toggle) => toggle.setValue(plugin.settings.autoBackupAfterFileChange).onChange((value) => {
|
||||
new import_obsidian7.Setting(containerEl).setName(`Auto Backup after Filechange`).setDesc(`If turned on, do auto ${commitOrBackup} every ${plugin.settings.autoSaveInterval} minutes after last change. This also prevents auto ${commitOrBackup} while editing a file. If turned off, it's independent from last the change.`).addToggle((toggle) => toggle.setValue(plugin.settings.autoBackupAfterFileChange).onChange((value) => {
|
||||
plugin.settings.autoBackupAfterFileChange = value;
|
||||
plugin.saveSettings();
|
||||
plugin.clearAutoBackup();
|
||||
@@ -24564,6 +24640,43 @@ var ObsidianGitSettingsTab = class extends import_obsidian7.PluginSettingTab {
|
||||
plugin.saveSettings();
|
||||
}));
|
||||
containerEl.createEl("br");
|
||||
if (plugin.gitManager instanceof IsomorphicGit) {
|
||||
containerEl.createEl("h3", { text: "Authentication/Commit Author" });
|
||||
} else {
|
||||
containerEl.createEl("h3", { text: "Commit Author" });
|
||||
}
|
||||
if (plugin.gitManager instanceof IsomorphicGit)
|
||||
new import_obsidian7.Setting(containerEl).setName("Username on your git server. E.g. your username on GitHub").addText((cb) => {
|
||||
var _a2;
|
||||
cb.setValue((_a2 = plugin.localStorage.getUsername()) != null ? _a2 : "");
|
||||
cb.onChange((value) => {
|
||||
plugin.localStorage.setUsername(value);
|
||||
});
|
||||
});
|
||||
if (plugin.gitManager instanceof IsomorphicGit)
|
||||
new import_obsidian7.Setting(containerEl).setName("Password/Personal access token").setDesc("Type in your password. You won't be able to see it again.").addText((cb) => {
|
||||
cb.inputEl.autocapitalize = "off";
|
||||
cb.inputEl.autocomplete = "off";
|
||||
cb.inputEl.spellcheck = false;
|
||||
cb.onChange((value) => {
|
||||
plugin.localStorage.setPassword(value);
|
||||
});
|
||||
});
|
||||
if (gitReady)
|
||||
new import_obsidian7.Setting(containerEl).setName("Author name for commit").addText(async (cb) => {
|
||||
cb.setValue(await plugin.gitManager.getConfig("user.name"));
|
||||
cb.onChange((value) => {
|
||||
plugin.gitManager.setConfig("user.name", value == "" ? void 0 : value);
|
||||
});
|
||||
});
|
||||
if (gitReady)
|
||||
new import_obsidian7.Setting(containerEl).setName("Author email for commit").addText(async (cb) => {
|
||||
cb.setValue(await plugin.gitManager.getConfig("user.email"));
|
||||
cb.onChange((value) => {
|
||||
plugin.gitManager.setConfig("user.email", value == "" ? void 0 : value);
|
||||
});
|
||||
});
|
||||
containerEl.createEl("br");
|
||||
containerEl.createEl("h3", { text: "Advanced" });
|
||||
if (plugin.gitManager instanceof SimpleGit)
|
||||
new import_obsidian7.Setting(containerEl).setName("Update submodules").setDesc('"Create backup" and "pull" takes care of submodules. Missing features: Conflicted files, count of pulled/pushed/committed files. Tracking branch needs to be set for each submodule').addToggle((toggle) => toggle.setValue(plugin.settings.updateSubmodules).onChange((value) => {
|
||||
@@ -24580,35 +24693,19 @@ var ObsidianGitSettingsTab = class extends import_obsidian7.PluginSettingTab {
|
||||
plugin.gitManager.updateGitPath(value || "git");
|
||||
});
|
||||
});
|
||||
if (plugin.gitManager instanceof IsomorphicGit)
|
||||
new import_obsidian7.Setting(containerEl).setName("Username on your git server. E.g. your username on GitHub").addText((cb) => {
|
||||
cb.setValue(plugin.settings.username);
|
||||
if (plugin.gitManager instanceof SimpleGit)
|
||||
new import_obsidian7.Setting(containerEl).setName("Additional PATH environment variable paths").setDesc("Use each line for one path").addTextArea((cb) => {
|
||||
cb.setValue(plugin.localStorage.getPATHPaths().join("\n"));
|
||||
cb.onChange((value) => {
|
||||
plugin.settings.username = value;
|
||||
plugin.saveSettings();
|
||||
plugin.localStorage.setPATHPaths(value.split("\n"));
|
||||
});
|
||||
});
|
||||
if (plugin.gitManager instanceof IsomorphicGit)
|
||||
new import_obsidian7.Setting(containerEl).setName("Password/Personal access token").setDesc("Type in your password. You won't be able to see it again.").addText((cb) => {
|
||||
cb.inputEl.autocapitalize = "off";
|
||||
cb.inputEl.autocomplete = "off";
|
||||
cb.inputEl.spellcheck = false;
|
||||
cb.onChange((value) => {
|
||||
plugin.localStorage.setPassword(value);
|
||||
});
|
||||
});
|
||||
if (gitReady)
|
||||
new import_obsidian7.Setting(containerEl).setName("Author name for commit").addText(async (cb) => {
|
||||
cb.setValue(await plugin.gitManager.getConfig("user.name"));
|
||||
cb.onChange((value) => {
|
||||
plugin.gitManager.setConfig("user.name", value);
|
||||
});
|
||||
});
|
||||
if (gitReady)
|
||||
new import_obsidian7.Setting(containerEl).setName("Author email for commit").addText(async (cb) => {
|
||||
cb.setValue(await plugin.gitManager.getConfig("user.email"));
|
||||
cb.onChange((value) => {
|
||||
plugin.gitManager.setConfig("user.email", value);
|
||||
if (plugin.gitManager instanceof SimpleGit)
|
||||
new import_obsidian7.Setting(containerEl).setName("Reload with new PATH environment variable").addButton((cb) => {
|
||||
cb.setButtonText("Reload");
|
||||
cb.setCta();
|
||||
cb.onClick(() => {
|
||||
plugin.gitManager.setGitInstance();
|
||||
});
|
||||
});
|
||||
new import_obsidian7.Setting(containerEl).setName("Custom base path (Git repository path)").setDesc(`
|
||||
@@ -24852,7 +24949,6 @@ var DEFAULT_SETTINGS = {
|
||||
basePath: "",
|
||||
differentIntervalCommitAndPush: false,
|
||||
changedFilesInStatusBar: false,
|
||||
username: "",
|
||||
showedMobileNotice: false,
|
||||
refreshSourceControlTimer: 7e3,
|
||||
showBranchStatusBar: true
|
||||
@@ -24893,6 +24989,12 @@ var LocalStorageSettings = class {
|
||||
setPassword(value) {
|
||||
return app.saveLocalStorage(this.prefix + "password", value);
|
||||
}
|
||||
getUsername() {
|
||||
return app.loadLocalStorage(this.prefix + "username");
|
||||
}
|
||||
setUsername(value) {
|
||||
return app.saveLocalStorage(this.prefix + "username", value);
|
||||
}
|
||||
getHostname() {
|
||||
return app.loadLocalStorage(this.prefix + "hostname");
|
||||
}
|
||||
@@ -24929,6 +25031,13 @@ var LocalStorageSettings = class {
|
||||
setGitPath(value) {
|
||||
return app.saveLocalStorage(this.prefix + "gitPath", value);
|
||||
}
|
||||
getPATHPaths() {
|
||||
var _a2, _b;
|
||||
return (_b = (_a2 = app.loadLocalStorage(this.prefix + "PATHPaths")) == null ? void 0 : _a2.split(":")) != null ? _b : [];
|
||||
}
|
||||
setPATHPaths(value) {
|
||||
return app.saveLocalStorage(this.prefix + "PATHPaths", value.join(":"));
|
||||
}
|
||||
getPluginDisabled() {
|
||||
return app.loadLocalStorage(this.prefix + "pluginDisabled") == "true";
|
||||
}
|
||||
@@ -26757,7 +26866,9 @@ function insert(target, node, anchor) {
|
||||
target.insertBefore(node, anchor || null);
|
||||
}
|
||||
function detach(node) {
|
||||
node.parentNode.removeChild(node);
|
||||
if (node.parentNode) {
|
||||
node.parentNode.removeChild(node);
|
||||
}
|
||||
}
|
||||
function destroy_each(iterations, detaching) {
|
||||
for (let i = 0; i < iterations.length; i += 1) {
|
||||
@@ -30581,7 +30692,14 @@ var ObsidianGit = class extends import_obsidian23.Plugin {
|
||||
if (checking) {
|
||||
return file !== null;
|
||||
} else {
|
||||
(_a2 = getNewLeaf()) == null ? void 0 : _a2.setViewState({ type: DIFF_VIEW_CONFIG.type, state: { staged: false, file: file.path } });
|
||||
(_a2 = getNewLeaf()) == null ? void 0 : _a2.setViewState({
|
||||
type: DIFF_VIEW_CONFIG.type,
|
||||
active: true,
|
||||
state: {
|
||||
staged: false,
|
||||
file: file.path
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -30846,6 +30964,11 @@ var ObsidianGit = class extends import_obsidian23.Plugin {
|
||||
this.settings.gitPath = void 0;
|
||||
await this.saveSettings();
|
||||
}
|
||||
if (this.settings.username != void 0) {
|
||||
this.localStorage.setPassword(this.settings.username);
|
||||
this.settings.username = void 0;
|
||||
await this.saveSettings();
|
||||
}
|
||||
}
|
||||
unloadPlugin() {
|
||||
this.gitReady = false;
|
||||
@@ -31465,20 +31588,6 @@ var ObsidianGit = class extends import_obsidian23.Plugin {
|
||||
* @author Feross Aboukhadijeh <https://feross.org>
|
||||
* @license MIT
|
||||
*/
|
||||
/*! *****************************************************************************
|
||||
Copyright (c) Microsoft Corporation.
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any
|
||||
purpose with or without fee is hereby granted.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
***************************************************************************** */
|
||||
/*! crc32.js (C) 2014-present SheetJS -- http://sheetjs.com */
|
||||
/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */
|
||||
/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */
|
||||
|
||||
2
.obsidian/plugins/obsidian-git/manifest.json
vendored
2
.obsidian/plugins/obsidian-git/manifest.json
vendored
@@ -4,5 +4,5 @@
|
||||
"description": "Backup your vault with Git.",
|
||||
"isDesktopOnly": false,
|
||||
"js": "main.js",
|
||||
"version": "2.8.0"
|
||||
"version": "2.10.2"
|
||||
}
|
||||
|
||||
2022
.obsidian/plugins/obsidian-icon-folder/main.js
vendored
2022
.obsidian/plugins/obsidian-icon-folder/main.js
vendored
File diff suppressed because one or more lines are too long
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"id": "obsidian-icon-folder",
|
||||
"name": "Icon Folder",
|
||||
"version": "1.3.5",
|
||||
"version": "1.4.1",
|
||||
"minAppVersion": "0.9.12",
|
||||
"description": "This plugin allows to add an emoji or an icon to a folder or file.",
|
||||
"author": "Florian Woelki",
|
||||
|
||||
78
.obsidian/plugins/obsidian-linter/data.json
vendored
78
.obsidian/plugins/obsidian-linter/data.json
vendored
@@ -2,18 +2,14 @@
|
||||
"ruleConfigs": {
|
||||
"Escape YAML Special Characters": {
|
||||
"Escapes colons with a space after them (: ), single quotes ('), and double quotes (\") in YAML.": false,
|
||||
"Default Escape Character": "\"",
|
||||
"Try to Escape Single Line Arrays": false,
|
||||
"Force Yaml Escape on Keys": ""
|
||||
"Try to Escape Single Line Arrays": false
|
||||
},
|
||||
"Format Tags in YAML": {
|
||||
"Remove Hashtags from tags in the YAML frontmatter, as they make the tags there invalid.": false
|
||||
},
|
||||
"Format Yaml Array": {
|
||||
"Allows for the formatting of regular yaml arrays as either multi-line or single-line and `tags` and `aliases` are allowed to have some Obsidian specific yaml formats. Note that single string to single-line goes from a single string entry to a single-line array if more than 1 entry is present. The same is true for single string to multi-line except it becomes a multi-line array.": false,
|
||||
"Yaml aliases section style": "single-line",
|
||||
"Format yaml aliases section": true,
|
||||
"Yaml tags section style": "single-line",
|
||||
"Format yaml tags section": true,
|
||||
"Default yaml array section style": "single-line",
|
||||
"Format yaml array sections": true,
|
||||
@@ -26,9 +22,8 @@
|
||||
},
|
||||
"Move Tags to Yaml": {
|
||||
"Move all tags to Yaml frontmatter of the document.": false,
|
||||
"Yaml tags section style": "single-line",
|
||||
"Remove the hashtag from tags in content body": false,
|
||||
"Tags to ignore": ""
|
||||
"Tags to ignore": "",
|
||||
"Body tag operation": "Nothing"
|
||||
},
|
||||
"Remove YAML Keys": {
|
||||
"Removes the YAML keys specified": false,
|
||||
@@ -54,13 +49,12 @@
|
||||
},
|
||||
"YAML Title Alias": {
|
||||
"Inserts the title of the file into the YAML frontmatter's aliases section. Gets the title from the first H1 or filename.": false,
|
||||
"YAML aliases section style": "Multi-line array",
|
||||
"Preserve existing aliases section style": true,
|
||||
"Keep alias that matches the filename": false,
|
||||
"Use the YAML key `linter-yaml-title-alias` to help with filename and heading changes": true
|
||||
},
|
||||
"Capitalize Headings": {
|
||||
"Headings should be formatted with capitalization": false,
|
||||
"Headings should be formatted with capitalization": true,
|
||||
"Style": "Title Case",
|
||||
"Ignore Cased Words": true,
|
||||
"Ignore Words": "macOS, iOS, iPhone, iPad, JavaScript, TypeScript, AppleScript",
|
||||
@@ -82,31 +76,31 @@
|
||||
"Re-indexes footnote keys and footnote, based on the order of occurrence (NOTE: This rule deliberately does *not* preserve the relation between key and footnote, to be able to re-index duplicate keys.)": false
|
||||
},
|
||||
"Convert Bullet List Markers": {
|
||||
"Converts common bullet list marker symbols to markdown list markers.": false
|
||||
"Converts common bullet list marker symbols to markdown list markers.": true
|
||||
},
|
||||
"Emphasis Style": {
|
||||
"Makes sure the emphasis style is consistent.": false,
|
||||
"Makes sure the emphasis style is consistent.": true,
|
||||
"Style": "consistent"
|
||||
},
|
||||
"No Bare URLs": {
|
||||
"Encloses bare URLs with angle brackets except when enclosed in back ticks, square braces, or single or double quotes.": false
|
||||
"Encloses bare URLs with angle brackets except when enclosed in back ticks, square braces, or single or double quotes.": true
|
||||
},
|
||||
"Ordered List Style": {
|
||||
"Makes sure that ordered lists follow the style specified. Note that 2 spaces or 1 tab is considered to be an indentation level.": false,
|
||||
"Makes sure that ordered lists follow the style specified. Note that 2 spaces or 1 tab is considered to be an indentation level.": true,
|
||||
"Number Style": "ascending",
|
||||
"Ordered List Indicator End Style": "."
|
||||
},
|
||||
"Proper Ellipsis": {
|
||||
"Replaces three consecutive dots with an ellipsis.": false
|
||||
"Replaces three consecutive dots with an ellipsis.": true
|
||||
},
|
||||
"Remove Consecutive List Markers": {
|
||||
"Removes consecutive list markers. Useful when copy-pasting list items.": false
|
||||
"Removes consecutive list markers. Useful when copy-pasting list items.": true
|
||||
},
|
||||
"Remove Empty List Markers": {
|
||||
"Removes empty list markers, i.e. list items without content.": false
|
||||
"Removes empty list markers, i.e. list items without content.": true
|
||||
},
|
||||
"Remove Hyphenated Line Breaks": {
|
||||
"Removes hyphenated line breaks. Useful when pasting text from textbooks.": false
|
||||
"Removes hyphenated line breaks. Useful when pasting text from textbooks.": true
|
||||
},
|
||||
"Remove Multiple Spaces": {
|
||||
"Removes two or more consecutive spaces. Ignores spaces at the beginning and ending of the line. ": false
|
||||
@@ -119,8 +113,8 @@
|
||||
"Makes sure that two spaces are added to the ends of lines with content continued on the next line for paragraphs, blockquotes, and list items": false
|
||||
},
|
||||
"Unordered List Style": {
|
||||
"Makes sure that unordered lists follow the style specified.": false,
|
||||
"List item style": "consistent"
|
||||
"Makes sure that unordered lists follow the style specified.": true,
|
||||
"List item style": "-"
|
||||
},
|
||||
"Compact YAML": {
|
||||
"Removes leading and trailing blank lines in the YAML front matter.": false,
|
||||
@@ -140,7 +134,7 @@
|
||||
"Ensures that there is an empty line around code fences unless they start or end a document.": false
|
||||
},
|
||||
"Empty Line Around Tables": {
|
||||
"Ensures that there is an empty line around github flavored tables unless they start or end a document.": false
|
||||
"Ensures that there is an empty line around github flavored tables unless they start or end a document.": true
|
||||
},
|
||||
"Heading blank lines": {
|
||||
"All headings have a blank line both before and after (except where the heading is at the beginning or end of the document).": false,
|
||||
@@ -171,6 +165,40 @@
|
||||
"Trailing spaces": {
|
||||
"Removes extra spaces after every line.": false,
|
||||
"Two Space Linebreak": false
|
||||
},
|
||||
"Force YAML Escape": {
|
||||
"Escapes the values for the specified YAML keys.": false,
|
||||
"Force YAML Escape on Keys": ""
|
||||
},
|
||||
"Empty Line Around Math Blocks": {
|
||||
"Ensures that there is an empty line around math blocks using `Number of Dollar Signs to Indicate a Math Block` to determine how many dollar signs indicates a math block for single-line math.": true
|
||||
},
|
||||
"Move Math Block Indicators to Their Own Line": {
|
||||
"Move all starting and ending math block indicators to their own lines using `Number of Dollar Signs to Indicate a Math Block` to determine how many dollar signs indicates a math block for single-line math.": false
|
||||
},
|
||||
"Add Blockquote Indentation on Paste": {
|
||||
"Adds blockquotes to all but the first line, when the cursor is in a blockquote/callout line during pasting": false
|
||||
},
|
||||
"Prevent Double Checklist Indicator on Paste": {
|
||||
"Removes starting checklist indicator from the text to paste if the line the cursor is on in the file has a checklist indicator": false
|
||||
},
|
||||
"Prevent Double List Item Indicator on Paste": {
|
||||
"Removes starting list indicator from the text to paste if the line the cursor is on in the file has a list indicator": false
|
||||
},
|
||||
"Proper Ellipsis on Paste": {
|
||||
"Replaces three consecutive dots with an ellipsis even if they have a space between them in the text to paste": false
|
||||
},
|
||||
"Remove Hyphens on Paste": {
|
||||
"Removes hyphens from the text to paste": false
|
||||
},
|
||||
"Remove Leading or Trailing Whitespace on Paste": {
|
||||
"Removes any leading non-tab whitespace and all trailing whitespace for the text to paste": false
|
||||
},
|
||||
"Remove Leftover Footnotes from Quote on Paste": {
|
||||
"Removes any leftover footnote references for the text to paste": false
|
||||
},
|
||||
"Remove Multiple Blank Lines on Paste": {
|
||||
"Condenses multiple blank lines down into one blank line for the text to paste": false
|
||||
}
|
||||
},
|
||||
"lintOnSave": false,
|
||||
@@ -178,5 +206,11 @@
|
||||
"foldersToIgnore": [],
|
||||
"linterLocale": "system-default",
|
||||
"logLevel": 4,
|
||||
"lintCommands": []
|
||||
"lintCommands": [],
|
||||
"commonStyles": {
|
||||
"aliasArrayStyle": "single-line",
|
||||
"tagArrayStyle": "single-line",
|
||||
"minimumNumberOfDollarSignsToBeAMathBlock": 2,
|
||||
"escapeCharacter": "\""
|
||||
}
|
||||
}
|
||||
1084
.obsidian/plugins/obsidian-linter/main.js
vendored
1084
.obsidian/plugins/obsidian-linter/main.js
vendored
File diff suppressed because one or more lines are too long
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"id": "obsidian-linter",
|
||||
"name": "Linter",
|
||||
"version": "1.6.0",
|
||||
"version": "1.7.1",
|
||||
"minAppVersion": "0.15.6",
|
||||
"description": "Enforces consistent markdown styling.",
|
||||
"description": "Formats and styles your notes. It can be used to format YAML tags, aliases, arrays, and metadata; footnotes; headings; spacing; math blocks; regular markdown contents like list, italics, and bold styles; and more with the use of custom rule options as well.",
|
||||
"author": "Victor Tao",
|
||||
"authorUrl": "https://github.com/platers",
|
||||
"isDesktopOnly": false
|
||||
|
||||
2
.obsidian/plugins/obsidian-linter/styles.css
vendored
2
.obsidian/plugins/obsidian-linter/styles.css
vendored
@@ -128,6 +128,8 @@
|
||||
/** Hide linter element css
|
||||
* Based on https://zellwk.com/blog/hide-content-accessibly/
|
||||
*/
|
||||
|
||||
.linter-navigation-item:not(.linter-navigation-item-selected) > span:nth-child(2),
|
||||
.linter-visually-hidden {
|
||||
border: 0;
|
||||
clip: rect(0 0 0 0);
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"couchDB_URI": "http://couchdb.patalong.pl:88",
|
||||
"couchDB_URI": "http://couchdb.patalong.pl:44404",
|
||||
"couchDB_USER": "peter",
|
||||
"couchDB_PASSWORD": "ZAQ!2wsx",
|
||||
"couchDB_DBNAME": "polsl-obsidian-teleinf",
|
||||
"liveSync": true,
|
||||
"liveSync": false,
|
||||
"syncOnSave": false,
|
||||
"syncOnStart": false,
|
||||
"savingDelay": 200,
|
||||
@@ -15,8 +15,8 @@
|
||||
"showVerboseLog": false,
|
||||
"suspendFileWatching": false,
|
||||
"trashInsteadDelete": true,
|
||||
"periodicReplication": false,
|
||||
"periodicReplicationInterval": 60,
|
||||
"periodicReplication": true,
|
||||
"periodicReplicationInterval": 30,
|
||||
"syncOnFileOpen": false,
|
||||
"encrypt": false,
|
||||
"passphrase": "",
|
||||
|
||||
190
.obsidian/plugins/obsidian-livesync/main.js
vendored
190
.obsidian/plugins/obsidian-livesync/main.js
vendored
@@ -1483,7 +1483,8 @@ var DEFAULT_SETTINGS = {
|
||||
syncOnlyRegEx: "",
|
||||
customChunkSize: 0,
|
||||
readChunksOnline: true,
|
||||
watchInternalFileChanges: true
|
||||
watchInternalFileChanges: true,
|
||||
automaticallyDeleteMetadataOfDeletedFiles: 0
|
||||
};
|
||||
var FLAGMD_REDFLAG = "redflag.md";
|
||||
var SYNCINFO_ID = "syncinfo";
|
||||
@@ -3059,13 +3060,11 @@ var LocalPouchDBBase = class {
|
||||
let plainSplit = false;
|
||||
let cacheUsed = 0;
|
||||
const userPasswordHash = this.h32Raw(new TextEncoder().encode(this.settings.passphrase));
|
||||
const minimumChunkSize = this.settings.minimumChunkSize;
|
||||
if (!saveAsBigChunk && shouldSplitAsPlainText(note._id)) {
|
||||
pieceSize = MAX_DOC_SIZE;
|
||||
plainSplit = true;
|
||||
}
|
||||
const minimumChunkSize = Math.min(Math.max(40, ~~(note.data.length / 100)), maxChunkSize);
|
||||
if (pieceSize < minimumChunkSize)
|
||||
pieceSize = minimumChunkSize;
|
||||
const newLeafs = [];
|
||||
const pieces = splitPieces2(note.data, pieceSize, plainSplit, minimumChunkSize, 0);
|
||||
for (const piece of pieces()) {
|
||||
@@ -3421,6 +3420,13 @@ var LocalPouchDBBase = class {
|
||||
this.replicationErrored(e3);
|
||||
Logger("Replication stopped.", showResult ? LOG_LEVEL.NOTICE : LOG_LEVEL.INFO, "sync");
|
||||
if (this.getLastPostFailedBySize()) {
|
||||
if ("status" in e3 && e3.status == 413) {
|
||||
Logger(`Self-hosted LiveSync has detected some remote-database-incompatible chunks that exist in the local database. It means synchronization with the server had been no longer possible.
|
||||
|
||||
The problem may be caused by chunks that were created with the faulty version or by switching platforms of the database.
|
||||
To solve the circumstance, configure the remote database correctly or we have to rebuild both local and remote databases.`, LOG_LEVEL.NOTICE);
|
||||
return;
|
||||
}
|
||||
const tempSetting = JSON.parse(JSON.stringify(setting));
|
||||
tempSetting.batch_size = Math.ceil(tempSetting.batch_size / 2) + 2;
|
||||
tempSetting.batches_limit = Math.ceil(tempSetting.batches_limit / 2) + 2;
|
||||
@@ -10121,7 +10127,7 @@ var LocalPouchDB = class extends LocalPouchDBBase {
|
||||
await this.kvDB.destroy();
|
||||
}
|
||||
getLastPostFailedBySize() {
|
||||
return this.last_successful_post;
|
||||
return !this.last_successful_post;
|
||||
}
|
||||
async fetchByAPI(request) {
|
||||
var _a, _b;
|
||||
@@ -10162,7 +10168,7 @@ var LocalPouchDB = class extends LocalPouchDBBase {
|
||||
const method = (_a = opts.method) != null ? _a : "GET";
|
||||
if (opts.body) {
|
||||
const opts_length = opts.body.toString().length;
|
||||
if (opts_length > 1024 * 1024 * 10) {
|
||||
if (opts_length > 1e3 * 1e3 * 10) {
|
||||
if (isCloudantURI(uri)) {
|
||||
this.last_successful_post = false;
|
||||
Logger("This request should fail on IBM Cloudant.", LOG_LEVEL.VERBOSE);
|
||||
@@ -10309,8 +10315,8 @@ var ConflictResolveModal = class extends import_obsidian4.Modal {
|
||||
diff = diff.replace(/\n/g, "<br>");
|
||||
div.innerHTML = diff;
|
||||
const div2 = contentEl.createDiv("");
|
||||
const date1 = new Date(this.result.left.mtime).toLocaleString();
|
||||
const date2 = new Date(this.result.right.mtime).toLocaleString();
|
||||
const date1 = new Date(this.result.left.mtime).toLocaleString() + (this.result.left.deleted ? " (Deleted)" : "");
|
||||
const date2 = new Date(this.result.right.mtime).toLocaleString() + (this.result.right.deleted ? " (Deleted)" : "");
|
||||
div2.innerHTML = `
|
||||
<span class='deleted'>A:${date1}</span><br /><span class='added'>B:${date2}</span><br>
|
||||
`;
|
||||
@@ -10440,8 +10446,8 @@ var ObsidianLiveSyncSettingTab = class extends import_obsidian5.PluginSettingTab
|
||||
const containerInformationEl = containerEl.createDiv();
|
||||
const h3El = containerInformationEl.createEl("h3", { text: "Updates" });
|
||||
const informationDivEl = containerInformationEl.createEl("div", { text: "" });
|
||||
const manifestVersion = "0.16.4";
|
||||
const updateInformation = "### 0.16.0\n- Now hidden files need not be scanned. Changes will be detected automatically.\n - If you want it to back to its previous behaviour, please disable `Monitor changes to internal files`.\n - Due to using an internal API, this feature may become unusable with a major update. If this happens, please disable this once.\n\n#### Minors\n\n- 0.16.1 Added missing log updates.\n- 0.16.2 Fixed many problems caused by combinations of `Sync On Save` and the tracking logic that changed at 0.15.6.\n- 0.16.3\n - Fixed detection of IBM Cloudant (And if there are some issues, be fixed automatically).\n - A configuration information reporting tool has been implemented.\n- 0.16.4 Fixed detection failure. Please set the `Chunk size` again when using a self-hosted database.\n\n### 0.15.0\n- Outdated configuration items have been removed.\n- Setup wizard has been implemented!\n\nI appreciate for reviewing and giving me advice @Pouhon158!\n\n#### Minors\n- 0.15.1 Missed the stylesheet.\n- 0.15.2 The wizard has been improved and documented!\n- 0.15.3 Fixed the issue about locking/unlocking remote database while rebuilding in the wizard.\n- 0.15.4 Fixed issues about asynchronous processing (e.g., Conflict check or hidden file detection)\n- 0.15.5 Add new features for setting Self-hosted LiveSync up more easier.\n- 0.15.6 File tracking logic has been refined.\n- 0.15.7 Fixed bug about renaming file.\n- 0.15.8 Fixed bug about deleting empty directory, weird behaviour on boot-sequence on mobile devices.\n- 0.15.9 Improved chunk retrieving, now chunks are retrieved in batch on continuous requests.\n- 0.15.10 Fixed:\n - The boot sequence has been corrected and now boots smoothly.\n - Auto applying of batch save will be processed earlier than before.\n\n... To continue on to `updates_old.md`.";
|
||||
const manifestVersion = "0.16.6";
|
||||
const updateInformation = "### 0.16.0\n- Now hidden files need not be scanned. Changes will be detected automatically.\n - If you want it to back to its previous behaviour, please disable `Monitor changes to internal files`.\n - Due to using an internal API, this feature may become unusable with a major update. If this happens, please disable this once.\n\n#### Minors\n\n- 0.16.1 Added missing log updates.\n- 0.16.2 Fixed many problems caused by combinations of `Sync On Save` and the tracking logic that changed at 0.15.6.\n- 0.16.3\n - Fixed detection of IBM Cloudant (And if there are some issues, be fixed automatically).\n - A configuration information reporting tool has been implemented.\n- 0.16.4 Fixed detection failure. Please set the `Chunk size` again when using a self-hosted database.\n- 0.16.5\n - Fixed\n - Conflict detection and merging now be able to treat deleted files.\n - Logs while the boot-up sequence has been tidied up.\n - Fixed incorrect log entries.\n - New Feature\n - The feature of automatically deleting old expired metadata has been implemented.\n We can configure it in `Delete old metadata of deleted files on start-up` in the `General Settings` pane.\n- 0.16.6\n - Fixed\n - Automatic (temporary) batch size adjustment has been restored to work correctly.\n - Chunk splitting has been backed to the previous behaviour for saving them correctly.\n - Improved\n - Corrupted chunks will be detected automatically.\n - Now on the case-insensitive system, `aaa.md` and `AAA.md` will be treated as the same file or path at applying changesets.\n\nNote:\nBefore 0.16.5, LiveSync had some issues making chunks. In this case, synchronisation had became been always failing after a corrupted one should be made. After 0.16.6, the corrupted chunk is automatically detected. Sorry for troubling you but please do `rebuild everything` when this plug-in notified so.\n\n### 0.15.0\n- Outdated configuration items have been removed.\n- Setup wizard has been implemented!\n\nI appreciate for reviewing and giving me advice @Pouhon158!\n\n#### Minors\n- 0.15.1 Missed the stylesheet.\n- 0.15.2 The wizard has been improved and documented!\n- 0.15.3 Fixed the issue about locking/unlocking remote database while rebuilding in the wizard.\n- 0.15.4 Fixed issues about asynchronous processing (e.g., Conflict check or hidden file detection)\n- 0.15.5 Add new features for setting Self-hosted LiveSync up more easier.\n- 0.15.6 File tracking logic has been refined.\n- 0.15.7 Fixed bug about renaming file.\n- 0.15.8 Fixed bug about deleting empty directory, weird behaviour on boot-sequence on mobile devices.\n- 0.15.9 Improved chunk retrieving, now chunks are retrieved in batch on continuous requests.\n- 0.15.10 Fixed:\n - The boot sequence has been corrected and now boots smoothly.\n - Auto applying of batch save will be processed earlier than before.\n\n... To continue on to `updates_old.md`.";
|
||||
const lastVersion = ~~(versionNumberString2Number(manifestVersion) / 1e3);
|
||||
const tmpDiv = createSpan();
|
||||
tmpDiv.addClass("sls-header-button");
|
||||
@@ -10915,6 +10921,17 @@ var ObsidianLiveSyncSettingTab = class extends import_obsidian5.PluginSettingTab
|
||||
await this.plugin.saveSettings();
|
||||
});
|
||||
});
|
||||
new import_obsidian5.Setting(containerGeneralSettingsEl).setName("Delete old metadata of deleted files on start-up").setClass("wizardHidden").setDesc("(Days passed, 0 to disable automatic-deletion)").addText((text2) => {
|
||||
text2.setPlaceholder("").setValue(this.plugin.settings.automaticallyDeleteMetadataOfDeletedFiles + "").onChange(async (value) => {
|
||||
let v = Number(value);
|
||||
if (isNaN(v)) {
|
||||
v = 0;
|
||||
}
|
||||
this.plugin.settings.automaticallyDeleteMetadataOfDeletedFiles = v;
|
||||
await this.plugin.saveSettings();
|
||||
});
|
||||
text2.inputEl.setAttribute("type", "number");
|
||||
});
|
||||
addScreenElement("20", containerGeneralSettingsEl);
|
||||
const containerSyncSettingEl = containerEl.createDiv();
|
||||
containerSyncSettingEl.createEl("h3", { text: "Sync Settings" });
|
||||
@@ -12825,6 +12842,14 @@ var ICHeader = "i:";
|
||||
var ICHeaderEnd = "i;";
|
||||
var ICHeaderLength = ICHeader.length;
|
||||
var FileWatchEventQueueMax = 10;
|
||||
function getAbstractFileByPath(path) {
|
||||
var _a, _b;
|
||||
if ("getAbstractFileByPathInsensitive" in app.vault && ((_b = (_a = app.vault.adapter) == null ? void 0 : _a.insensitive) != null ? _b : false)) {
|
||||
return app.vault.getAbstractFileByPathInsensitive(path);
|
||||
} else {
|
||||
return app.vault.getAbstractFileByPath(path);
|
||||
}
|
||||
}
|
||||
function isInternalChunk(str) {
|
||||
return str.startsWith(ICHeader);
|
||||
}
|
||||
@@ -12865,7 +12890,7 @@ var askString = (app2, title, key, placeholder) => {
|
||||
};
|
||||
var touchedFiles = [];
|
||||
function touch(file) {
|
||||
const f = file instanceof import_obsidian8.TFile ? file : app.vault.getAbstractFileByPath(file);
|
||||
const f = file instanceof import_obsidian8.TFile ? file : getAbstractFileByPath(file);
|
||||
const key = `${f.path}-${f.stat.mtime}-${f.stat.size}`;
|
||||
touchedFiles.unshift(key);
|
||||
touchedFiles = touchedFiles.slice(0, 100);
|
||||
@@ -12914,7 +12939,7 @@ var ObsidianLiveSyncPlugin = class extends import_obsidian8.Plugin {
|
||||
return timer;
|
||||
}
|
||||
isRedFlagRaised() {
|
||||
const redflag = this.app.vault.getAbstractFileByPath((0, import_obsidian8.normalizePath)(FLAGMD_REDFLAG));
|
||||
const redflag = getAbstractFileByPath((0, import_obsidian8.normalizePath)(FLAGMD_REDFLAG));
|
||||
if (redflag != null) {
|
||||
return true;
|
||||
}
|
||||
@@ -12968,10 +12993,6 @@ var ObsidianLiveSyncPlugin = class extends import_obsidian8.Plugin {
|
||||
continue;
|
||||
if (isInternalChunk(row.id))
|
||||
continue;
|
||||
if (doc._deleted)
|
||||
continue;
|
||||
if ("deleted" in doc && doc.deleted)
|
||||
continue;
|
||||
if (doc.type == "newnote" || doc.type == "plain") {
|
||||
notes.push({ path: id2path(doc._id), mtime: doc.mtime });
|
||||
}
|
||||
@@ -12990,15 +13011,53 @@ var ObsidianLiveSyncPlugin = class extends import_obsidian8.Plugin {
|
||||
if (target) {
|
||||
if (isInternalChunk(target)) {
|
||||
} else {
|
||||
await this.showIfConflicted(this.app.vault.getAbstractFileByPath(target));
|
||||
await this.showIfConflicted(target);
|
||||
}
|
||||
}
|
||||
}
|
||||
async collectDeletedFiles() {
|
||||
const pageLimit = 1e3;
|
||||
let nextKey = "";
|
||||
const limitDays = this.settings.automaticallyDeleteMetadataOfDeletedFiles;
|
||||
if (limitDays <= 0)
|
||||
return;
|
||||
Logger(`Checking expired file history`);
|
||||
const limit = Date.now() - 86400 * 1e3 * limitDays;
|
||||
const notes = [];
|
||||
do {
|
||||
const docs = await this.localDatabase.localDatabase.allDocs({ limit: pageLimit, startkey: nextKey, conflicts: true, include_docs: true });
|
||||
nextKey = "";
|
||||
for (const row of docs.rows) {
|
||||
const doc = row.doc;
|
||||
nextKey = `${row.id}\u{10FFFF}`;
|
||||
if (doc.type == "newnote" || doc.type == "plain") {
|
||||
if (doc.deleted && doc.mtime - limit < 0) {
|
||||
notes.push({ path: id2path(doc._id), mtime: doc.mtime, ttl: (doc.mtime - limit) / 1e3 / 86400, doc });
|
||||
}
|
||||
}
|
||||
if (isChunk(nextKey)) {
|
||||
nextKey = CHeaderEnd;
|
||||
}
|
||||
}
|
||||
} while (nextKey != "");
|
||||
if (notes.length == 0) {
|
||||
Logger("There are no old documents");
|
||||
Logger(`Checking expired file history done`);
|
||||
return;
|
||||
}
|
||||
for (const v of notes) {
|
||||
Logger(`Deletion history expired: ${v.path}`);
|
||||
const delDoc = v.doc;
|
||||
delDoc._deleted = true;
|
||||
await this.localDatabase.localDatabase.put(delDoc);
|
||||
}
|
||||
Logger(`Checking expired file history done`);
|
||||
}
|
||||
async onload() {
|
||||
setLogger(this.addLog.bind(this));
|
||||
Logger("loading plugin");
|
||||
const manifestVersion = "0.16.4";
|
||||
const packageVersion = "0.16.4";
|
||||
const manifestVersion = "0.16.6";
|
||||
const packageVersion = "0.16.6";
|
||||
Logger(`Self-hosted LiveSync v${manifestVersion} ${packageVersion} `);
|
||||
const lsKey = "obsidian-live-sync-ver" + this.getVaultName();
|
||||
const last_version = localStorage.getItem(lsKey);
|
||||
@@ -13270,7 +13329,7 @@ var ObsidianLiveSyncPlugin = class extends import_obsidian8.Plugin {
|
||||
id: "livesync-checkdoc-conflicted",
|
||||
name: "Resolve if conflicted.",
|
||||
editorCallback: async (editor, view) => {
|
||||
await this.showIfConflicted(view.file);
|
||||
await this.showIfConflicted(view.file.path);
|
||||
}
|
||||
});
|
||||
this.addCommand({
|
||||
@@ -13620,7 +13679,7 @@ var ObsidianLiveSyncPlugin = class extends import_obsidian8.Plugin {
|
||||
if (this.settings.syncOnFileOpen && !this.suspended) {
|
||||
await this.replicate();
|
||||
}
|
||||
await this.showIfConflicted(file);
|
||||
await this.showIfConflicted(file.path);
|
||||
}
|
||||
async applyBatchChange() {
|
||||
if (this.settings.batchSave) {
|
||||
@@ -13693,7 +13752,7 @@ var ObsidianLiveSyncPlugin = class extends import_obsidian8.Plugin {
|
||||
for (const i2 of newFiles) {
|
||||
try {
|
||||
const newFilePath = (0, import_obsidian8.normalizePath)(this.getFilePath(i2));
|
||||
const newFile = this.app.vault.getAbstractFileByPath(newFilePath);
|
||||
const newFile = getAbstractFileByPath(newFilePath);
|
||||
if (newFile instanceof import_obsidian8.TFile) {
|
||||
Logger(`save ${newFile.path} into db`);
|
||||
await this.updateIntoDB(newFile);
|
||||
@@ -13837,7 +13896,7 @@ var ObsidianLiveSyncPlugin = class extends import_obsidian8.Plugin {
|
||||
touch(newFile);
|
||||
this.app.vault.trigger("create", newFile);
|
||||
} catch (ex) {
|
||||
Logger(msg + "ERROR, Could not parse: " + path + "(" + doc.datatype + ")", LOG_LEVEL.NOTICE);
|
||||
Logger(msg + "ERROR, Could not create: " + path + "(" + doc.datatype + ")", LOG_LEVEL.NOTICE);
|
||||
Logger(ex, LOG_LEVEL.VERBOSE);
|
||||
}
|
||||
} else {
|
||||
@@ -13900,7 +13959,7 @@ var ObsidianLiveSyncPlugin = class extends import_obsidian8.Plugin {
|
||||
try {
|
||||
await this.app.vault.modifyBinary(file, bin, { ctime: doc.ctime, mtime: doc.mtime });
|
||||
Logger(msg + path);
|
||||
const xf = this.app.vault.getAbstractFileByPath(file.path);
|
||||
const xf = getAbstractFileByPath(file.path);
|
||||
touch(xf);
|
||||
this.app.vault.trigger("modify", xf);
|
||||
} catch (ex) {
|
||||
@@ -13916,7 +13975,7 @@ var ObsidianLiveSyncPlugin = class extends import_obsidian8.Plugin {
|
||||
try {
|
||||
await this.app.vault.modify(file, doc.data, { ctime: doc.ctime, mtime: doc.mtime });
|
||||
Logger(msg + path);
|
||||
const xf = this.app.vault.getAbstractFileByPath(file.path);
|
||||
const xf = getAbstractFileByPath(file.path);
|
||||
touch(xf);
|
||||
this.app.vault.trigger("modify", xf);
|
||||
} catch (ex) {
|
||||
@@ -13956,7 +14015,7 @@ var ObsidianLiveSyncPlugin = class extends import_obsidian8.Plugin {
|
||||
this.refreshStatusText();
|
||||
}
|
||||
async handleDBChangedAsync(change) {
|
||||
const targetFile = this.app.vault.getAbstractFileByPath(id2path(change._id));
|
||||
const targetFile = getAbstractFileByPath(id2path(change._id));
|
||||
if (targetFile == null) {
|
||||
if (change._deleted || change.deleted) {
|
||||
return;
|
||||
@@ -14062,7 +14121,7 @@ var ObsidianLiveSyncPlugin = class extends import_obsidian8.Plugin {
|
||||
return;
|
||||
const skipOldFile = this.settings.skipOlderFilesOnSync && false;
|
||||
if (!isInternalChunk(doc._id) && skipOldFile) {
|
||||
const info = this.app.vault.getAbstractFileByPath(id2path(doc._id));
|
||||
const info = getAbstractFileByPath(id2path(doc._id));
|
||||
if (info && info instanceof import_obsidian8.TFile) {
|
||||
const localMtime = ~~(info.stat.mtime / 1e3);
|
||||
const docMtime = ~~(doc.mtime / 1e3);
|
||||
@@ -14336,10 +14395,11 @@ var ObsidianLiveSyncPlugin = class extends import_obsidian8.Plugin {
|
||||
if (showingNotice) {
|
||||
Logger("Initializing", LOG_LEVEL.NOTICE, "syncAll");
|
||||
}
|
||||
await this.collectDeletedFiles();
|
||||
const filesStorage = this.app.vault.getFiles().filter((e3) => this.isTargetFile(e3));
|
||||
const filesStorageName = filesStorage.map((e3) => e3.path);
|
||||
const wf = await this.localDatabase.localDatabase.allDocs();
|
||||
const filesDatabase = wf.rows.filter((e3) => !isChunk(e3.id) && !isPluginChunk(e3.id) && e3.id != "obsydian_livesync_version").filter((e3) => isValidPath(e3.id)).map((e3) => id2path(e3.id)).filter((e3) => this.isTargetFile(e3));
|
||||
const filesDatabase = wf.rows.filter((e3) => !isChunk(e3.id) && !isPluginChunk(e3.id) && e3.id != "obsydian_livesync_version" && e3.id != "_design/replicate").filter((e3) => isValidPath(e3.id)).map((e3) => id2path(e3.id)).filter((e3) => this.isTargetFile(e3));
|
||||
const isInitialized = await this.localDatabase.kvDB.get("initialized") || false;
|
||||
if (filesDatabase.length == 0 && !isInitialized) {
|
||||
initialScan = true;
|
||||
@@ -14353,27 +14413,14 @@ var ObsidianLiveSyncPlugin = class extends import_obsidian8.Plugin {
|
||||
Logger("Updating database by new files");
|
||||
this.setStatusBarText(`UPDATE DATABASE`);
|
||||
const runAll = async (procedureName, objects, callback) => {
|
||||
const count = objects.length;
|
||||
Logger(procedureName);
|
||||
let i2 = 0;
|
||||
const semaphore = Semaphore(10);
|
||||
Logger(`${procedureName} exec.`);
|
||||
if (!this.localDatabase.isReady)
|
||||
throw Error("Database is not ready!");
|
||||
const processes = objects.map((e3) => (async (v) => {
|
||||
const releaser = await semaphore.acquire(1, procedureName);
|
||||
try {
|
||||
await callback(v);
|
||||
i2++;
|
||||
if (i2 % 50 == 0) {
|
||||
const notify = `${procedureName} : ${i2}/${count}`;
|
||||
if (showingNotice) {
|
||||
Logger(notify, LOG_LEVEL.NOTICE, "syncAll");
|
||||
} else {
|
||||
Logger(notify);
|
||||
}
|
||||
this.setStatusBarText(notify);
|
||||
}
|
||||
} catch (ex) {
|
||||
Logger(`Error while ${procedureName}`, LOG_LEVEL.NOTICE);
|
||||
Logger(ex);
|
||||
@@ -14390,13 +14437,15 @@ var ObsidianLiveSyncPlugin = class extends import_obsidian8.Plugin {
|
||||
});
|
||||
if (!initialScan) {
|
||||
await runAll("UPDATE STORAGE", onlyInDatabase, async (e3) => {
|
||||
const w = await this.localDatabase.getDBEntryMeta(e3);
|
||||
if (w) {
|
||||
const w = await this.localDatabase.getDBEntryMeta(e3, {}, true);
|
||||
if (w && !(w.deleted || w._deleted)) {
|
||||
Logger(`Check or pull from db:${e3}`);
|
||||
await this.pullFile(e3, filesStorage, false, null, false);
|
||||
Logger(`Check or pull from db:${e3} OK`);
|
||||
} else if (w) {
|
||||
Logger(`Deletion history skipped: ${e3}`, LOG_LEVEL.VERBOSE);
|
||||
} else {
|
||||
Logger(`entry not found, maybe deleted (it is normal behavior):${e3}`);
|
||||
Logger(`entry not found: ${e3}`);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -14466,7 +14515,7 @@ var ObsidianLiveSyncPlugin = class extends import_obsidian8.Plugin {
|
||||
}
|
||||
async getConflictedDoc(path, rev) {
|
||||
try {
|
||||
const doc = await this.localDatabase.getDBEntry(path, { rev }, false, false);
|
||||
const doc = await this.localDatabase.getDBEntry(path, { rev }, false, false, true);
|
||||
if (doc === false)
|
||||
return false;
|
||||
let data = doc.data;
|
||||
@@ -14476,6 +14525,7 @@ var ObsidianLiveSyncPlugin = class extends import_obsidian8.Plugin {
|
||||
data = doc.data;
|
||||
}
|
||||
return {
|
||||
deleted: doc.deleted || doc._deleted,
|
||||
ctime: doc.ctime,
|
||||
mtime: doc.mtime,
|
||||
rev,
|
||||
@@ -14489,7 +14539,7 @@ var ObsidianLiveSyncPlugin = class extends import_obsidian8.Plugin {
|
||||
return false;
|
||||
}
|
||||
async getConflictedStatus(path) {
|
||||
const test = await this.localDatabase.getDBEntry(path, { conflicts: true }, false, false);
|
||||
const test = await this.localDatabase.getDBEntry(path, { conflicts: true }, false, false, true);
|
||||
if (test === false)
|
||||
return false;
|
||||
if (test == null)
|
||||
@@ -14510,7 +14560,7 @@ var ObsidianLiveSyncPlugin = class extends import_obsidian8.Plugin {
|
||||
Logger(`could not get old revisions, automatically used newer one:${path}`, LOG_LEVEL.NOTICE);
|
||||
return true;
|
||||
}
|
||||
if (leftLeaf.data == rightLeaf.data) {
|
||||
if (leftLeaf.data == rightLeaf.data && leftLeaf.deleted == rightLeaf.deleted) {
|
||||
let leaf = leftLeaf;
|
||||
if (leftLeaf.mtime > rightLeaf.mtime) {
|
||||
leaf = rightLeaf;
|
||||
@@ -14542,11 +14592,11 @@ var ObsidianLiveSyncPlugin = class extends import_obsidian8.Plugin {
|
||||
diff
|
||||
};
|
||||
}
|
||||
showMergeDialog(file, conflictCheckResult) {
|
||||
showMergeDialog(filename, conflictCheckResult) {
|
||||
return new Promise((res, rej) => {
|
||||
Logger("open conflict dialog", LOG_LEVEL.VERBOSE);
|
||||
new ConflictResolveModal(this.app, conflictCheckResult, async (selected) => {
|
||||
const testDoc = await this.localDatabase.getDBEntry(file.path, { conflicts: true });
|
||||
const testDoc = await this.localDatabase.getDBEntry(filename, { conflicts: true }, false, false, true);
|
||||
if (testDoc === false) {
|
||||
Logger("Missing file..", LOG_LEVEL.VERBOSE);
|
||||
return res(true);
|
||||
@@ -14559,23 +14609,29 @@ var ObsidianLiveSyncPlugin = class extends import_obsidian8.Plugin {
|
||||
const toKeep = conflictCheckResult.left.rev != toDelete ? conflictCheckResult.left.rev : conflictCheckResult.right.rev;
|
||||
if (toDelete == "") {
|
||||
const p = conflictCheckResult.diff.map((e3) => e3[1]).join("");
|
||||
await this.localDatabase.deleteDBEntry(file.path, { rev: conflictCheckResult.left.rev });
|
||||
await this.localDatabase.deleteDBEntry(file.path, { rev: conflictCheckResult.right.rev });
|
||||
await this.app.vault.modify(file, p);
|
||||
await this.updateIntoDB(file);
|
||||
await this.pullFile(file.path);
|
||||
await this.localDatabase.deleteDBEntry(filename, { rev: conflictCheckResult.left.rev });
|
||||
await this.localDatabase.deleteDBEntry(filename, { rev: conflictCheckResult.right.rev });
|
||||
const file = getAbstractFileByPath(filename);
|
||||
if (file) {
|
||||
await this.app.vault.modify(file, p);
|
||||
await this.updateIntoDB(file);
|
||||
} else {
|
||||
const newFile = await this.app.vault.create(filename, p);
|
||||
await this.updateIntoDB(newFile);
|
||||
}
|
||||
await this.pullFile(filename);
|
||||
Logger("concat both file");
|
||||
setTimeout(() => {
|
||||
this.showIfConflicted(file);
|
||||
this.showIfConflicted(filename);
|
||||
}, 500);
|
||||
} else if (toDelete == null) {
|
||||
Logger("Leave it still conflicted");
|
||||
} else {
|
||||
Logger(`Conflict resolved:${file.path}`);
|
||||
await this.localDatabase.deleteDBEntry(file.path, { rev: toDelete });
|
||||
await this.pullFile(file.path, null, true, toKeep);
|
||||
Logger(`Conflict resolved:${filename}`);
|
||||
await this.localDatabase.deleteDBEntry(filename, { rev: toDelete });
|
||||
await this.pullFile(filename, null, true, toKeep);
|
||||
setTimeout(() => {
|
||||
this.showIfConflicted(file);
|
||||
this.showIfConflicted(filename);
|
||||
}, 500);
|
||||
}
|
||||
return res(true);
|
||||
@@ -14593,9 +14649,9 @@ var ObsidianLiveSyncPlugin = class extends import_obsidian8.Plugin {
|
||||
const checkFiles = JSON.parse(JSON.stringify(this.conflictedCheckFiles));
|
||||
for (const filename of checkFiles) {
|
||||
try {
|
||||
const file2 = this.app.vault.getAbstractFileByPath(filename);
|
||||
const file2 = getAbstractFileByPath(filename);
|
||||
if (file2 != null && file2 instanceof import_obsidian8.TFile) {
|
||||
await this.showIfConflicted(file2);
|
||||
await this.showIfConflicted(file2.path);
|
||||
}
|
||||
} catch (ex) {
|
||||
Logger(ex);
|
||||
@@ -14603,24 +14659,24 @@ var ObsidianLiveSyncPlugin = class extends import_obsidian8.Plugin {
|
||||
}
|
||||
}, 1e3);
|
||||
}
|
||||
async showIfConflicted(file) {
|
||||
async showIfConflicted(filename) {
|
||||
await runWithLock("conflicted", false, async () => {
|
||||
const conflictCheckResult = await this.getConflictedStatus(file.path);
|
||||
const conflictCheckResult = await this.getConflictedStatus(filename);
|
||||
if (conflictCheckResult === false) {
|
||||
return;
|
||||
}
|
||||
if (conflictCheckResult === true) {
|
||||
Logger("conflict:Automatically merged, but we have to check it again");
|
||||
setTimeout(() => {
|
||||
this.showIfConflicted(file);
|
||||
this.showIfConflicted(filename);
|
||||
}, 500);
|
||||
return;
|
||||
}
|
||||
await this.showMergeDialog(file, conflictCheckResult);
|
||||
await this.showMergeDialog(filename, conflictCheckResult);
|
||||
});
|
||||
}
|
||||
async pullFile(filename, fileList, force, rev, waitForReady = true) {
|
||||
const targetFile = this.app.vault.getAbstractFileByPath(id2path(filename));
|
||||
const targetFile = getAbstractFileByPath(id2path(filename));
|
||||
if (!this.isTargetFile(id2path(filename)))
|
||||
return;
|
||||
if (targetFile == null) {
|
||||
@@ -14647,7 +14703,7 @@ var ObsidianLiveSyncPlugin = class extends import_obsidian8.Plugin {
|
||||
throw new Error(`Missing doc:${file.path}`);
|
||||
}
|
||||
if (!(file instanceof import_obsidian8.TFile) && "path" in file) {
|
||||
const w = this.app.vault.getAbstractFileByPath(file.path);
|
||||
const w = getAbstractFileByPath(file.path);
|
||||
if (w instanceof import_obsidian8.TFile) {
|
||||
file = w;
|
||||
} else {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"id": "obsidian-livesync",
|
||||
"name": "Self-hosted LiveSync",
|
||||
"version": "0.16.4",
|
||||
"version": "0.16.6",
|
||||
"minAppVersion": "0.9.12",
|
||||
"description": "Community implementation of self-hosted livesync. Reflect your vault changes to some other devices immediately. Please make sure to disable other synchronize solutions to avoid content corruption or duplication.",
|
||||
"author": "vorotamoroz",
|
||||
|
||||
56
.obsidian/plugins/obsidian-outliner/main.js
vendored
56
.obsidian/plugins/obsidian-outliner/main.js
vendored
File diff suppressed because one or more lines are too long
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"id": "obsidian-outliner",
|
||||
"name": "Outliner",
|
||||
"version": "4.1.0",
|
||||
"version": "4.1.1",
|
||||
"minAppVersion": "1.0.0",
|
||||
"description": "Work with your lists like in Workflowy or RoamResearch.",
|
||||
"author": "Viacheslav Slinko",
|
||||
|
||||
@@ -65,6 +65,7 @@
|
||||
|
||||
.outliner-plugin-vertical-lines
|
||||
.markdown-source-view.mod-cm6
|
||||
.cm-hmd-list-indent
|
||||
.cm-indent::before {
|
||||
content: none;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,10 @@
|
||||
{
|
||||
"catppuccin-theme-settings@@catppuccin-theme-dark": "ctp-macchiato",
|
||||
"catppuccin-theme-settings@@catppuccin-theme-accents": "ctp-accent-red"
|
||||
"catppuccin-theme-settings@@catppuccin-theme-accents": "ctp-accent-red",
|
||||
"catppuccin-interface-styles@@ctp-bold-folder-title": true,
|
||||
"catppuccin-font-styles@@ctp-h2": "var(--ctp-maroon)",
|
||||
"catppuccin-font-styles@@ctp-h6": "var(--ctp-lavender)",
|
||||
"catppuccin-font-styles@@ctp-h5": "var(--ctp-teal)",
|
||||
"catppuccin-font-styles@@ctp-h4": "var(--ctp-flamingo)",
|
||||
"catppuccin-font-styles@@ctp-h3": "var(--ctp-peach)"
|
||||
}
|
||||
65
.obsidian/plugins/quick-latex/main.js
vendored
65
.obsidian/plugins/quick-latex/main.js
vendored
File diff suppressed because one or more lines are too long
2
.obsidian/plugins/quick-latex/manifest.json
vendored
2
.obsidian/plugins/quick-latex/manifest.json
vendored
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"id": "quick-latex",
|
||||
"name": "Quick Latex for Obsidian",
|
||||
"version": "2.5.0",
|
||||
"version": "2.5.1",
|
||||
"minAppVersion": "0.9.12",
|
||||
"description": "Speedup latex math typing with auto fraction, align block shortcut, matrix shortcut...etc",
|
||||
"author": "joeyuping",
|
||||
|
||||
10
.obsidian/themes/Catppuccin/manifest.json
vendored
10
.obsidian/themes/Catppuccin/manifest.json
vendored
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "Catppuccin",
|
||||
"version": "0.2.0",
|
||||
"minAppVersion": "1.0.0",
|
||||
"author": "Marshall Beckrich",
|
||||
"authorUrl": "https://github.com/catppuccin/obsidian"
|
||||
"name": "Catppuccin",
|
||||
"version": "0.2.13",
|
||||
"minAppVersion": "1.0.0",
|
||||
"author": "Marshall Beckrich",
|
||||
"authorUrl": "https://github.com/catppuccin/obsidian"
|
||||
}
|
||||
|
||||
2198
.obsidian/themes/Catppuccin/theme.css
vendored
2198
.obsidian/themes/Catppuccin/theme.css
vendored
File diff suppressed because one or more lines are too long
2
.obsidian/themes/Obsidian Nord/manifest.json
vendored
2
.obsidian/themes/Obsidian Nord/manifest.json
vendored
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "Obsidian Nord",
|
||||
"version": "0.1.6",
|
||||
"version": "0.1.7",
|
||||
"minAppVersion": "0.16.0",
|
||||
"author": "insanum",
|
||||
"authorUrl": "https://insanum.com"
|
||||
|
||||
11
.obsidian/themes/Obsidian Nord/theme.css
vendored
11
.obsidian/themes/Obsidian Nord/theme.css
vendored
@@ -163,6 +163,9 @@ body
|
||||
--dataview-key-background: rgba(var(--frost2_x), 0.3);
|
||||
--dataview-value: var(--text-faint);
|
||||
--dataview-value-background: rgba(var(--red_x), 0.3);
|
||||
|
||||
--tab-text-color-focused-active: var(--frost2);
|
||||
--tab-text-color-focused-active-current: var(--red);
|
||||
}
|
||||
|
||||
.theme-light
|
||||
@@ -261,6 +264,9 @@ body
|
||||
--dataview-key-background: rgba(var(--frost2_x), 0.3);
|
||||
--dataview-value: var(--text-faint);
|
||||
--dataview-value-background: rgba(var(--red_x), 0.3);
|
||||
|
||||
--tab-text-color-focused-active: var(--frost2);
|
||||
--tab-text-color-focused-active-current: var(--red);
|
||||
}
|
||||
|
||||
table
|
||||
@@ -468,3 +474,8 @@ pre[class*="language-"]
|
||||
background-color: var(--dataview-value-background) !important;
|
||||
}
|
||||
|
||||
.suggestion-highlight
|
||||
{
|
||||
color: var(--red);
|
||||
}
|
||||
|
||||
|
||||
81
.obsidian/workspace.json
vendored
81
.obsidian/workspace.json
vendored
@@ -4,42 +4,32 @@
|
||||
"type": "split",
|
||||
"children": [
|
||||
{
|
||||
"id": "3f5dc457994bbd99",
|
||||
"id": "da7b72acdd5782c1",
|
||||
"type": "tabs",
|
||||
"children": [
|
||||
{
|
||||
"id": "531c313e44ad2003",
|
||||
"id": "5c31f65df875fed7",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "markdown",
|
||||
"state": {
|
||||
"file": "AMiAL/Ćwiczenia/1 SEM/20221028120723.md",
|
||||
"file": "AMiAL/Wykłady/Wykłady.md",
|
||||
"mode": "source",
|
||||
"source": false
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "4f5bedb3e6d1067b",
|
||||
"id": "3bc0e42c65536104",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "markdown",
|
||||
"state": {
|
||||
"file": "AMiAL/Ćwiczenia/Zadania/funkcje/Zadanie 1.md",
|
||||
"file": "AMiAL/Wykłady/1 SEM/20221125083233.md",
|
||||
"mode": "source",
|
||||
"source": false
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "a6018bec66c4363d",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "pdf",
|
||||
"state": {
|
||||
"file": "AMiAL/!Materiały/funkcje.pdf"
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"currentTab": 1
|
||||
@@ -108,7 +98,7 @@
|
||||
"state": {
|
||||
"type": "backlink",
|
||||
"state": {
|
||||
"file": "AMiAL/Ćwiczenia/Zadania/funkcje/Zadanie 1.md",
|
||||
"file": "AMiAL/Wykłady/1 SEM/20221125083233.md",
|
||||
"collapseAll": false,
|
||||
"extraContext": false,
|
||||
"sortOrder": "alphabetical",
|
||||
@@ -125,7 +115,7 @@
|
||||
"state": {
|
||||
"type": "outgoing-link",
|
||||
"state": {
|
||||
"file": "AMiAL/Ćwiczenia/Zadania/funkcje/Zadanie 1.md",
|
||||
"file": "AMiAL/Wykłady/1 SEM/20221125083233.md",
|
||||
"linksCollapsed": false,
|
||||
"unlinkedCollapsed": true
|
||||
}
|
||||
@@ -148,26 +138,10 @@
|
||||
"state": {
|
||||
"type": "outline",
|
||||
"state": {
|
||||
"file": "AMiAL/Ćwiczenia/Zadania/funkcje/Zadanie 1.md"
|
||||
"file": "AMiAL/Wykłady/1 SEM/20221125083233.md"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "23b819a2dc2500c7",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "BC-matrix",
|
||||
"state": {}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "5f7d6c81bffeeaaf",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "BC-tree",
|
||||
"state": {}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "8f0923324d861591",
|
||||
"type": "leaf",
|
||||
@@ -175,25 +149,42 @@
|
||||
"type": "calendar",
|
||||
"state": {}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "3a7bd8a3ae5a1a09",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "BC-matrix",
|
||||
"state": {}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "b0803323a2aa4ad9",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "BC-tree",
|
||||
"state": {}
|
||||
}
|
||||
}
|
||||
]
|
||||
],
|
||||
"currentTab": 6
|
||||
}
|
||||
],
|
||||
"direction": "horizontal",
|
||||
"width": 300,
|
||||
"collapsed": true
|
||||
},
|
||||
"active": "4f5bedb3e6d1067b",
|
||||
"active": "3bc0e42c65536104",
|
||||
"lastOpenFiles": [
|
||||
"AMiAL/!Materiały/funkcje.pdf",
|
||||
"AMiAL/Ćwiczenia/1 SEM/20221028120723.md",
|
||||
"AMiAL/Ćwiczenia/Zadania/funkcje/Zadanie 1.md",
|
||||
"AMiAL/Ćwiczenia/1 SEM/20221021120444.md",
|
||||
"AMiAL/Ćwiczenia/1 SEM/Liczby Zespolone/Liczby Zespolone.md",
|
||||
"AMiAL/!Materiały/w5_granica_funkcji.pdf",
|
||||
"AMiAL/Wykłady/1 SEM/20221125083233.md",
|
||||
"AMiAL/Wykłady/1 SEM/20221123083519.md",
|
||||
"AMiAL/Wykłady/1 SEM/20221104082939.md",
|
||||
"AMiAL/Wykłady/1 SEM/20221021083844.md",
|
||||
"Excalidraw/Drawing 2022-10-28 11.47.05.excalidraw.md",
|
||||
"Elektrotechnika/Ćwiczenia/20221028102800.md",
|
||||
"AMiAL/!Materiały/w1_liczby_zesp.pdf",
|
||||
"!Załączniki/20221021120444 2022-10-28 11.01.18.excalidraw.md"
|
||||
"AMiAL/Wykłady/1 SEM/20221014083923.md",
|
||||
"AMiAL/Wykłady/Wykłady.md",
|
||||
"AMiAL/Ćwiczenia/1 SEM/20221123123903.md",
|
||||
"PI/Wykłady/1 SEM/20221014134528.md",
|
||||
"PI/Ćwiczenia/20221010123607.md"
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user