You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This project uses **C++23** and follows KISS (Keep It Simple, Stupid) and DRY (Don't Repeat Yourself) principles.
30
+
31
+
**Avoid magic numbers** - use named constants instead.
32
+
33
+
## Architecture Overview
34
+
35
+
This project implements Observer plugin modules for FAR Manager that handle exotic archive formats. The codebase follows a plugin architecture where each module implements the Observer API to support different archive formats.
36
+
37
+
### Core Components
38
+
39
+
-**API Layer** (`src/api.h`, `src/dll.cpp`): Implements the Observer plugin API with standard functions like `OpenStorage`, `CloseStorage`, `GetItem`, `ExtractItem`
40
+
-**Archive Wrapper** (`src/archive.h`, `src/archive.cpp`): Provides a unified interface that wraps format-specific extractors
41
+
-**Extractor Interface** (`src/modules/extractor.h`): Defines the abstract interface that all format extractors must implement
42
+
43
+
### Module Structure
44
+
45
+
Each supported format has its own module under `src/modules/`:
46
+
-`renpy/`: RenPy visual novel archives (.rpa files) with pickle support
1. FAR Manager loads the module DLL via `LoadSubModule()`
58
+
2.`OpenStorage()` creates an archive wrapper with format-specific extractor
59
+
3.`PrepareFiles()` scans and indexes archive contents
60
+
4.`GetItem()` provides file metadata for FAR's file browser
61
+
5.`ExtractItem()` handles actual file extraction with progress callbacks
62
+
63
+
### Testing Framework
64
+
65
+
Located in `src/tests/` with a custom framework (`framework/observer.h`) that simulates the Observer API for testing archive operations without requiring FAR Manager.
0 commit comments