Skip to content

Commit d6d00ae

Browse files
committed
Start rewrite of Dictionaries
1 parent 16dedba commit d6d00ae

23 files changed

+970
-49
lines changed

addons/banana/lib/banana.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import 'dart:async';
22

3-
import 'package:dictionaries/addons.dart';
3+
import '../../../lib-old/addons.dart';
44
import 'package:flutter/material.dart';
55

66
DictionariesAddon load() {

bin/signatures.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import 'package:dictionaries/src/nodeenums.dart';
1+
import '../lib-old/src/nodeenums.dart';
22

33
void log(Object? input) {
44
// ignore: avoid_print

lib-old/addons.dart

Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
library;
2+
3+
import 'dart:async';
4+
5+
import 'addons.dart';
6+
import 'main.dart';
7+
import 'src/theme.dart';
8+
import 'package:flutter/material.dart';
9+
import 'package:styled_logger/styled_logger.dart';
10+
11+
export 'src/widgetframework.dart';
12+
export 'src/menubar.dart' show DictionariesMenuBarEntry;
13+
export 'src/nodes.dart' show RootNode;
14+
export 'src/theme.dart' show DictionariesTheme;
15+
16+
/// This class is what you base your entire addon around.
17+
/// You will make a new class that inherits this class and provides the info and permissions.
18+
abstract class DictionariesAddon {
19+
/// The name of your addon.
20+
final String name;
21+
22+
/// The ID of your addon. This should follow the Java naming procedure, and the final identifier should be lower snake case. Example:
23+
///
24+
/// `com.calebh101.oc_snapshot`
25+
final String id;
26+
27+
/// The version of your addon. This can be in any format you like.
28+
final String version;
29+
30+
/// The optional short description of your addon.
31+
final String? description;
32+
33+
/// A list of names of who made this, This can be in any format you like.
34+
final List<String> authors;
35+
36+
/// A link to your addon's optional "main page". Take this how you'd like, but [repository] is a separate property for an addon's repository.
37+
final Uri? mainpage;
38+
39+
/// An addon's open source repository.
40+
///
41+
/// Reminder: Your addon must be open-source and publicly available to be able to be used in Dictionaries!
42+
final Uri? repository;
43+
44+
/// If this addon should be completely ignored by the loader.
45+
final bool doNotShow;
46+
47+
/// This class is what you base your entire addon around.
48+
/// You will make a new class that inherits this class and provides the info and permissions.
49+
DictionariesAddon({
50+
required this.name,
51+
required this.id,
52+
required this.version,
53+
this.authors = const [],
54+
this.description,
55+
this.mainpage,
56+
this.repository,
57+
this.doNotShow = false,
58+
});
59+
60+
/// This is called to register your addon.
61+
/// **Do not call this yourself**.
62+
FutureOr<void> register(bool debug) async {
63+
injectedAddons.add(this);
64+
await onRegister(debug);
65+
}
66+
67+
/// This is called when your addon is registered. You don't call this, but you *override* this in your class.
68+
///
69+
/// You should put all injections you do and/or background services you start in here.
70+
FutureOr<void> onRegister(bool debug) {}
71+
72+
/// This is called when your addon is disengaged. You should stop all background processes when this is called.
73+
void onDisengage() {}
74+
75+
bool get doShow => !doNotShow;
76+
77+
/// Get your addon's current [AddonContext]. This is used for identification in injections.
78+
AddonContext get context => AddonContext.fromId(id);
79+
80+
/// Get your addon's current [AddonContext]. This is used for identification in injections.
81+
AddonContext get addonContext => context;
82+
}
83+
84+
abstract class DictionariesUIInjection {
85+
const DictionariesUIInjection();
86+
87+
void inject(AddonContext context) {
88+
injectedAddonUIs.add((this, context));
89+
}
90+
}
91+
92+
enum DictionariesWidgetInjectionTarget {
93+
rootNode,
94+
}
95+
96+
final class DictionariesWidgetInjection<T extends DictionariesWidget> extends DictionariesUIInjection {
97+
final DictionariesWidgetInjectionTarget target;
98+
final DictionariesWidget Function(BuildContext context, T widget) _build;
99+
100+
DictionariesWidget build(BuildContext context, DictionariesWidget widget) {
101+
if (widget is T) {
102+
return _build(context, widget);
103+
} else {
104+
Logger.warn("Detected type mismatch when building ${this.runtimeType}.");
105+
return widget;
106+
}
107+
}
108+
109+
const DictionariesWidgetInjection({required this.target, required DictionariesWidget Function(BuildContext context, T widget) build}) : _build = build;
110+
}
111+
112+
final class DictionariesMaterialAppInjection extends DictionariesUIInjection {
113+
final MaterialApp Function(BuildContext context, MaterialApp widget) build;
114+
115+
const DictionariesMaterialAppInjection({required this.build});
116+
117+
void inject(AddonContext context) {
118+
injectedAddonUIs.add((this, context));
119+
}
120+
}
121+
122+
class DictionariesMenuBarInjection {
123+
final List<String> keys;
124+
final List<DictionariesMenuBarEntry> entries;
125+
final DictionariesMenuBarPosition? rightAfter;
126+
127+
const DictionariesMenuBarInjection(this.keys, this.entries, {this.rightAfter});
128+
129+
void inject(AddonContext context) {
130+
injectedMenuEntries.add((this, context));
131+
}
132+
}
133+
134+
class DictionariesMenuBarDeletion {
135+
final List<String> keys;
136+
const DictionariesMenuBarDeletion(this.keys);
137+
138+
void inject(AddonContext context) {
139+
injectedMenuDeletions.add((this, context));
140+
}
141+
}
142+
143+
class DictionariesMenuBarPosition {
144+
final bool leading;
145+
final String? text;
146+
147+
const DictionariesMenuBarPosition.fromKey(String key) : text = key, leading = false;
148+
const DictionariesMenuBarPosition.leading() : text = null, leading = true;
149+
}
150+
151+
class AddonLogger {
152+
static void print(AddonContext context, Object? input, {List<Object?>? attachments}) {
153+
Logger.print("${context.id}: $input", attachments: attachments);
154+
}
155+
156+
static void warn(AddonContext context, Object? input, {List<Object?>? attachments}) {
157+
Logger.warn("Addon: $input", attachments: attachments);
158+
}
159+
160+
static void error(AddonContext context, Object? input, {List<Object?>? attachments}) {
161+
Logger.error("Addon: $input", attachments: attachments);
162+
}
163+
}
164+
165+
class AddonContext {
166+
final String id;
167+
const AddonContext.fromId(this.id);
168+
}
169+
170+
extension DictionariesThemeInjection on DictionariesTheme {
171+
void inject(AddonContext context, String id) {
172+
addInjectedTheme("${context.id}.$id", context.id, this);
173+
}
174+
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import 'dart:io';
22
import 'dart:typed_data';
33

4-
import 'package:dictionaries/src/editor.dart';
4+
import '../src/editor.dart';
55
import 'package:file_picker/file_picker.dart';
66

77
Future<bool> saveFile({

lib-old/files/files.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export 'desktop.dart' if (dart.library.js_interop) 'package:dictionaries/files/web.dart';
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import 'dart:js_interop';
22
import 'dart:typed_data';
33

4-
import 'package:dictionaries/src/editor.dart';
4+
import '../src/editor.dart';
55
import 'package:web/web.dart' as web;
66

77
Future<bool> saveFile({

lib/main.dart renamed to lib-old/main.dart

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@ import 'dart:convert';
33
import 'dart:io';
44

55
import 'package:collection/collection.dart';
6-
import 'package:dictionaries/addons.dart';
7-
import 'package:dictionaries/src/addonloader.dart';
8-
import 'package:dictionaries/src/editor.dart';
9-
import 'package:dictionaries/src/main.dart';
10-
import 'package:dictionaries/src/nodes.dart';
11-
import 'package:dictionaries/src/theme.dart';
6+
import 'addons.dart';
7+
import 'src/addonloader.dart';
8+
import 'src/editor.dart';
9+
import 'src/main.dart';
10+
import 'src/nodes.dart';
11+
import 'src/theme.dart';
1212
import 'package:file_picker/file_picker.dart';
1313
import 'package:flutter/foundation.dart';
1414
import 'package:flutter/material.dart';
@@ -18,7 +18,7 @@ import 'package:path_provider/path_provider.dart';
1818
import 'package:quick_listener/quick_listener.dart';
1919
import 'package:shared_preferences/shared_preferences.dart';
2020
import 'package:styled_logger/styled_logger.dart';
21-
import 'package:dictionaries/files/files.dart';
21+
import 'files/files.dart';
2222

2323
final Version version = Version.parse("0.0.0A");
2424
final Version binaryVersion = Version.parse("1.0.0A");
@@ -69,7 +69,7 @@ void disengageAddons([String? id]) {
6969
Future<void> main() async {
7070
Logger.print("Starting Dictionaries...");
7171
WidgetsFlutterBinding.ensureInitialized();
72-
72+
7373
if (kDebugMode) Logger.enable();
7474
if (kDebugMode) Logger.setVerbose(true);
7575

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import 'package:dictionaries/addons.dart';
2-
import 'package:dictionaries/src/debugaddonloader.dart';
1+
import '../addons.dart';
2+
import 'debugaddonloader.dart';
33
import 'package:flutter/foundation.dart';
44
import 'package:shared_preferences/shared_preferences.dart';
55
import 'package:styled_logger/styled_logger.dart';
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import 'package:dictionaries/addons.dart';
1+
import '../addons.dart';
22

33
import 'package:banana/banana.dart' as banana;
44
import 'package:dictionaries_oc_snapshot/dictionaries_oc_snapshot.dart' as oc_snapshot;
Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@ import 'dart:async';
22

33
import 'package:any_date/any_date.dart';
44
import 'package:collection/collection.dart';
5-
import 'package:dictionaries/addons.dart';
6-
import 'package:dictionaries/files/files.dart';
7-
import 'package:dictionaries/main.dart';
8-
import 'package:dictionaries/src/addonloader.dart';
9-
import 'package:dictionaries/src/menubar.dart';
10-
import 'package:dictionaries/src/nodeenums.dart';
11-
import 'package:dictionaries/src/nodes.dart';
12-
import 'package:dictionaries/src/theme.dart';
5+
import '../addons.dart';
6+
import '../files/files.dart';
7+
import '../main.dart';
8+
import 'addonloader.dart';
9+
import 'menubar.dart';
10+
import 'nodeenums.dart';
11+
import 'nodes.dart';
12+
import 'theme.dart';
1313
import 'package:flutter/foundation.dart';
1414
import 'package:flutter/material.dart';
1515
import 'package:flutter/services.dart';

0 commit comments

Comments
 (0)