Skip to content

Commit aa5ffcf

Browse files
Merge branch 'main' into pannable_field_widget
2 parents 0e2cf62 + bd9af0e commit aa5ffcf

File tree

3 files changed

+127
-16
lines changed

3 files changed

+127
-16
lines changed

lib/services/nt_widget_registry.dart

Lines changed: 68 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -398,13 +398,32 @@ class NTWidgetRegistry {
398398
defaultHeight: 2,
399399
);
400400

401-
_widgetNameBuildMap.addAll({
402-
LargeTextDisplay.widgetType: LargeTextDisplay.new,
403-
ToggleButton.widgetType: ToggleButton.new,
404-
ToggleSwitch.widgetType: ToggleSwitch.new,
405-
SingleColorView.widgetType: SingleColorView.new,
406-
MultiColorView.widgetType: MultiColorView.new,
407-
});
401+
registerWithoutModel(
402+
name: LargeTextDisplay.widgetType,
403+
widget: LargeTextDisplay.new,
404+
minHeight: _normalSize * 0.8,
405+
);
406+
407+
registerWithoutModel(
408+
name: ToggleButton.widgetType,
409+
widget: ToggleButton.new,
410+
minHeight: _normalSize * 0.8,
411+
);
412+
413+
registerWithoutModel(
414+
name: ToggleSwitch.widgetType,
415+
widget: ToggleSwitch.new,
416+
);
417+
418+
registerWithoutModel(
419+
name: SingleColorView.widgetType,
420+
widget: SingleColorView.new,
421+
);
422+
423+
registerWithoutModel(
424+
name: MultiColorView.widgetType,
425+
widget: MultiColorView.new,
426+
);
408427

409428
_initialized = true;
410429
}
@@ -616,6 +635,48 @@ class NTWidgetRegistry {
616635
defaultHeight: defaultHeight,
617636
);
618637

638+
static void registerWithoutModel<WidgetType extends NTWidget>({
639+
required String name,
640+
Set<String>? aliases,
641+
required NTWidgetProvider<WidgetType> widget,
642+
double? minWidth,
643+
double? minHeight,
644+
double? defaultWidth,
645+
double? defaultHeight,
646+
}) => registerWithAlias(
647+
names: {name, ...?aliases},
648+
model:
649+
({
650+
required NTConnection ntConnection,
651+
required SharedPreferences preferences,
652+
required String topic,
653+
double? period,
654+
NT4Type? dataType,
655+
NT4StructMeta? ntStructMeta,
656+
}) => SingleTopicNTWidgetModel.createDefault(
657+
ntConnection: ntConnection,
658+
preferences: preferences,
659+
topic: topic,
660+
period: period,
661+
type: name,
662+
dataType: dataType,
663+
ntStructMeta: ntStructMeta,
664+
),
665+
widget: widget,
666+
fromJson:
667+
({required jsonData, required ntConnection, required preferences}) =>
668+
SingleTopicNTWidgetModel.createDefaultFromJson(
669+
ntConnection: ntConnection,
670+
preferences: preferences,
671+
jsonData: jsonData,
672+
type: name,
673+
),
674+
minWidth: minWidth,
675+
minHeight: minHeight,
676+
defaultWidth: defaultWidth,
677+
defaultHeight: defaultHeight,
678+
);
679+
619680
static void
620681
register<ModelType extends NTWidgetModel, WidgetType extends NTWidget>({
621682
required String name,

lib/services/update_checker.dart

Lines changed: 42 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,21 @@ import 'package:version/version.dart';
33

44
import 'package:elastic_dashboard/services/log.dart';
55

6+
extension on Release {
7+
Version? getVersion() {
8+
if (tagName == null) return null;
9+
10+
if (!tagName!.startsWith('v')) return null;
11+
12+
String versionName = tagName!.substring(1);
13+
try {
14+
return Version.parse(versionName);
15+
} catch (_) {
16+
return null;
17+
}
18+
}
19+
}
20+
621
class UpdateChecker {
722
final GitHub _github;
823
final String currentVersion;
@@ -13,9 +28,30 @@ class UpdateChecker {
1328
logger.info('Checking for updates');
1429

1530
try {
16-
Release latestRelease = await _github.repositories.getLatestRelease(
17-
RepositorySlug('Gold872', 'elastic_dashboard'),
18-
);
31+
Version current = Version.parse(currentVersion);
32+
33+
final List<Release> releases = await _github.repositories
34+
.listReleases(
35+
RepositorySlug('Gold872', 'elastic_dashboard'),
36+
)
37+
.toList();
38+
39+
final Iterable<Release> yearReleases = releases.where((release) {
40+
Version? latest = release.getVersion();
41+
42+
if (latest == null) return false;
43+
if (latest.major != current.major) return false;
44+
45+
return true;
46+
});
47+
48+
Release? latestRelease = yearReleases.firstOrNull;
49+
if (latestRelease == null) {
50+
return UpdateCheckerResponse(
51+
updateAvailable: false,
52+
error: false,
53+
);
54+
}
1955

2056
String? tagName = latestRelease.tagName;
2157

@@ -27,7 +63,9 @@ class UpdateChecker {
2763
errorMessage: 'Release tag not found',
2864
);
2965
}
30-
if (!tagName.startsWith('v')) {
66+
Version? latest = latestRelease.getVersion();
67+
68+
if (latest == null) {
3169
logger.error('Invalid version name: $tagName');
3270
return UpdateCheckerResponse(
3371
updateAvailable: false,
@@ -36,11 +74,6 @@ class UpdateChecker {
3674
);
3775
}
3876

39-
String versionName = tagName.substring(1);
40-
41-
Version current = Version.parse(currentVersion);
42-
Version latest = Version.parse(versionName);
43-
4477
bool updateAvailable = current < latest;
4578

4679
return UpdateCheckerResponse(

lib/widgets/nt_widgets/nt_widget.dart

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,23 @@ class SingleTopicNTWidgetModel extends NTWidgetModel {
121121
init();
122122
}
123123

124+
SingleTopicNTWidgetModel.createDefaultFromJson({
125+
required super.ntConnection,
126+
required super.preferences,
127+
required Map<String, dynamic> jsonData,
128+
required String type,
129+
}) : _typeOverride = type,
130+
super.fromJson(jsonData: jsonData) {
131+
dataType = NT4Type.parseNullable(tryCast(jsonData['data_type']));
132+
133+
Map<String, dynamic>? structMetaJson = jsonData['struct_meta'];
134+
if (structMetaJson != null) {
135+
ntStructMeta = NT4StructMeta.fromJson(structMetaJson);
136+
}
137+
138+
init();
139+
}
140+
124141
SingleTopicNTWidgetModel.fromJson({
125142
required super.ntConnection,
126143
required super.preferences,

0 commit comments

Comments
 (0)