Files
obsidian-livesync/src/modules/modules.md
2024-10-16 12:44:07 +01:00

2.4 KiB

Dynamic Load Modules

Introduction

Self-hosted LiveSync has gradually but steadily become very feature-rich and they have created a very heavy Main class. This is very difficult to understand and maintain especially new contributors or futures contributors. And some of the features are not used by all users, we should limit the inter-dependencies between modules. And also inter-effects between modules. Hence, to make the code more readable and maintainable, I decided to split the code into multiple modules.

I also got a little greedy here, but I have an another objective now, which is to reduce the difficulty when porting to other platforms.

Therefore, almost all feature of the plug-in can be implemented as a module. And the Main class will be responsible for loading these modules.

Modules

Sorts

Modules can be sorted into two categories in some sorts:

  • CoreModule and ObsidianModule
  • Core, Essential, and Feature ...

How it works

After instancing Core and Modules, you should call injectModules. Then, the specific function will be injected into the stub of it of Core class by following rules:

Function prefix Description
$$ Completely overridden functions.
$all Process all modules and return all results.
$every Process all modules until the first failure.
$any Process all modules until the first success.
$ Other interceptive points. You should manually assign the module.

Note1: Core class should implement the same function as the module. If not, the module will be ignored.

And, basically, the Module has a Core class as core property. You should call any of inject functions by this.core.$xxxxxx. This rule is also applied to the function which implemented itself. Because some other modules possibly injects the function again, for the specific purpose.

CoreModule

This Module is independent from Obsidian, and can be used in any platform. However, it can be call (or use) functions which has implemented in ObsidianModule. To porting, you should implement shim functions for ObsidianModule.

ObsidianModule

(TBW)