mirror of
https://github.com/vrtmrz/obsidian-livesync.git
synced 2026-04-11 03:18:43 +00:00
for 0.25.43-patched-7, please refer to the updates.md
This commit is contained in:
3
src/serviceFeatures/onLayoutReady.ts
Normal file
3
src/serviceFeatures/onLayoutReady.ts
Normal file
@@ -0,0 +1,3 @@
|
||||
import { enableI18nFeature } from "./onLayoutReady/enablei18n";
|
||||
|
||||
export const onLayoutReadyFeatures = [enableI18nFeature];
|
||||
41
src/serviceFeatures/onLayoutReady/enablei18n.ts
Normal file
41
src/serviceFeatures/onLayoutReady/enablei18n.ts
Normal file
@@ -0,0 +1,41 @@
|
||||
import { getLanguage } from "@/deps";
|
||||
import { createServiceFeature } from "../types.ts";
|
||||
import { SUPPORTED_I18N_LANGS, type I18N_LANGS } from "@lib/common/rosetta";
|
||||
import { $msg, setLang } from "@lib/common/i18n";
|
||||
|
||||
export const enableI18nFeature = createServiceFeature(async ({ services: { setting, API } }) => {
|
||||
let isChanged = false;
|
||||
const settings = setting.currentSettings();
|
||||
if (settings.displayLanguage == "") {
|
||||
const obsidianLanguage = getLanguage();
|
||||
if (
|
||||
SUPPORTED_I18N_LANGS.indexOf(obsidianLanguage) !== -1 && // Check if the language is supported
|
||||
obsidianLanguage != settings.displayLanguage // Check if the language is different from the current setting
|
||||
) {
|
||||
// Check if the current setting is not empty (Means migrated or installed).
|
||||
// settings.displayLanguage = obsidianLanguage as I18N_LANGS;
|
||||
await setting.applyPartial({ displayLanguage: obsidianLanguage as I18N_LANGS });
|
||||
isChanged = true;
|
||||
setLang(settings.displayLanguage);
|
||||
} else if (settings.displayLanguage == "") {
|
||||
// settings.displayLanguage = "def";
|
||||
await setting.applyPartial({ displayLanguage: "def" });
|
||||
setLang(settings.displayLanguage);
|
||||
await setting.saveSettingData();
|
||||
}
|
||||
}
|
||||
if (isChanged) {
|
||||
const revert = $msg("dialog.yourLanguageAvailable.btnRevertToDefault");
|
||||
if (
|
||||
(await API.confirm.askSelectStringDialogue($msg(`dialog.yourLanguageAvailable`), ["OK", revert], {
|
||||
defaultAction: "OK",
|
||||
title: $msg(`dialog.yourLanguageAvailable.Title`),
|
||||
})) == revert
|
||||
) {
|
||||
await setting.applyPartial({ displayLanguage: "def" });
|
||||
setLang(settings.displayLanguage);
|
||||
}
|
||||
await setting.saveSettingData();
|
||||
}
|
||||
return true;
|
||||
});
|
||||
50
src/serviceFeatures/types.ts
Normal file
50
src/serviceFeatures/types.ts
Normal file
@@ -0,0 +1,50 @@
|
||||
import type { IServiceHub } from "@lib/services/base/IService";
|
||||
import type { DatabaseFileAccess } from "@lib/interfaces/DatabaseFileAccess";
|
||||
import type { Rebuilder } from "@lib/interfaces/DatabaseRebuilder";
|
||||
import type { IFileHandler } from "@lib/interfaces/FileHandler";
|
||||
import type { StorageAccess } from "@lib/interfaces/StorageAccess";
|
||||
|
||||
export interface ServiceModules {
|
||||
storageAccess: StorageAccess;
|
||||
/**
|
||||
* Database File Accessor for handling file operations related to the database, such as exporting the database, importing from a file, etc.
|
||||
*/
|
||||
databaseFileAccess: DatabaseFileAccess;
|
||||
|
||||
/**
|
||||
* File Handler for handling file operations related to replication, such as resolving conflicts, applying changes from replication, etc.
|
||||
*/
|
||||
fileHandler: IFileHandler;
|
||||
/**
|
||||
* Rebuilder for handling database rebuilding operations.
|
||||
*/
|
||||
rebuilder: Rebuilder;
|
||||
}
|
||||
export type RequiredServices<T extends keyof IServiceHub> = Pick<IServiceHub, T>;
|
||||
export type RequiredServiceModules<T extends keyof ServiceModules> = Pick<ServiceModules, T>;
|
||||
|
||||
export type NecessaryServices<T extends keyof IServiceHub, U extends keyof ServiceModules> = {
|
||||
services: RequiredServices<T>;
|
||||
serviceModules: RequiredServiceModules<U>;
|
||||
};
|
||||
|
||||
export type ServiceFeatureFunction<T extends keyof IServiceHub, U extends keyof ServiceModules, TR> = (
|
||||
host: NecessaryServices<T, U>
|
||||
) => TR;
|
||||
|
||||
/**
|
||||
* Helper function to create a service feature with proper typing.
|
||||
* @param featureFunction The feature function to be wrapped.
|
||||
* @returns The same feature function with proper typing.
|
||||
* @example
|
||||
* const myFeatureDef = createServiceFeature(({ services: { API }, serviceModules: { storageAccess } }) => {
|
||||
* // ...
|
||||
* });
|
||||
* const myFeature = myFeatureDef.bind(null, this); // <- `this` may `ObsidianLiveSyncPlugin` or a custom context object
|
||||
* appLifecycle.onLayoutReady(myFeature);
|
||||
*/
|
||||
export function createServiceFeature<T extends keyof IServiceHub, U extends keyof ServiceModules, TR>(
|
||||
featureFunction: ServiceFeatureFunction<T, U, TR>
|
||||
): ServiceFeatureFunction<T, U, TR> {
|
||||
return featureFunction;
|
||||
}
|
||||
Reference in New Issue
Block a user