feat(tv-ui): add slideshow pattern mode and improve admin readability
This commit is contained in:
@@ -8,6 +8,16 @@ class HiveBoxes {
|
||||
static const String hijriCache = 'hijri_cache';
|
||||
}
|
||||
|
||||
class SlideshowPatternMode {
|
||||
SlideshowPatternMode._();
|
||||
|
||||
static const String alternating = 'alternating';
|
||||
static const String burst = 'burst';
|
||||
|
||||
static bool isValid(String value) =>
|
||||
value == alternating || value == burst;
|
||||
}
|
||||
|
||||
/// AppSettings stored in Hive.
|
||||
@HiveType(typeId: 0)
|
||||
class AppSettings extends HiveObject {
|
||||
@@ -94,6 +104,16 @@ class AppSettings extends HiveObject {
|
||||
@HiveField(34)
|
||||
int announcementSlideDurationSec;
|
||||
|
||||
// Slideshow pattern mode:
|
||||
// - alternating: main-1-main-2-main...
|
||||
// - burst: main-1-2-main-3-4... (N slides between main phases)
|
||||
@HiveField(38)
|
||||
String slideshowPatternMode;
|
||||
|
||||
// Number of slideshow slides shown between main phases when mode=burst.
|
||||
@HiveField(39)
|
||||
int slideshowSlidesPerMain;
|
||||
|
||||
// Slideshow image paths (local)
|
||||
@HiveField(20)
|
||||
List<String> slideshowImages;
|
||||
@@ -180,6 +200,8 @@ class AppSettings extends HiveObject {
|
||||
this.lastAutoSyncAttemptDate,
|
||||
this.mainCenterSlideDurationSec = 10,
|
||||
this.announcementSlideDurationSec = 7,
|
||||
this.slideshowPatternMode = SlideshowPatternMode.alternating,
|
||||
this.slideshowSlidesPerMain = 2,
|
||||
this.slideshowImages = const [],
|
||||
this.textScaleIndex = 1,
|
||||
this.useUnsplashBackground = false,
|
||||
@@ -221,6 +243,8 @@ class AppSettings extends HiveObject {
|
||||
String? lastAutoSyncAttemptDate,
|
||||
int? mainCenterSlideDurationSec,
|
||||
int? announcementSlideDurationSec,
|
||||
String? slideshowPatternMode,
|
||||
int? slideshowSlidesPerMain,
|
||||
List<String>? slideshowImages,
|
||||
int? textScaleIndex,
|
||||
bool? useUnsplashBackground,
|
||||
@@ -265,6 +289,10 @@ class AppSettings extends HiveObject {
|
||||
mainCenterSlideDurationSec ?? this.mainCenterSlideDurationSec,
|
||||
announcementSlideDurationSec:
|
||||
announcementSlideDurationSec ?? this.announcementSlideDurationSec,
|
||||
slideshowPatternMode:
|
||||
slideshowPatternMode ?? this.slideshowPatternMode,
|
||||
slideshowSlidesPerMain:
|
||||
slideshowSlidesPerMain ?? this.slideshowSlidesPerMain,
|
||||
slideshowImages: slideshowImages ?? this.slideshowImages,
|
||||
textScaleIndex: textScaleIndex ?? this.textScaleIndex,
|
||||
useUnsplashBackground:
|
||||
@@ -299,6 +327,7 @@ class AppSettingsAdapter extends TypeAdapter<AppSettings> {
|
||||
fields[reader.readByte()] = reader.read();
|
||||
}
|
||||
final runningTexts = (fields[14] as List?)?.cast<String>() ?? const [];
|
||||
final storedPatternMode = (fields[38] as String?)?.trim() ?? '';
|
||||
return AppSettings(
|
||||
masjidName: fields[0] as String? ?? 'Masjid Al-Ikhlas',
|
||||
masjidAddress: fields[1] as String? ?? 'Jl. Kebaikan No. 1',
|
||||
@@ -325,6 +354,11 @@ class AppSettingsAdapter extends TypeAdapter<AppSettings> {
|
||||
lastAutoSyncAttemptDate: fields[32] as String?,
|
||||
mainCenterSlideDurationSec: fields[33] as int? ?? 10,
|
||||
announcementSlideDurationSec: fields[34] as int? ?? 7,
|
||||
slideshowPatternMode: SlideshowPatternMode.isValid(storedPatternMode)
|
||||
? storedPatternMode
|
||||
: SlideshowPatternMode.alternating,
|
||||
slideshowSlidesPerMain:
|
||||
((fields[39] as int?) ?? 2).clamp(1, 20).toInt(),
|
||||
slideshowImages: (fields[20] as List?)?.cast<String>() ?? const [],
|
||||
textScaleIndex: fields[21] as int? ?? 1,
|
||||
useUnsplashBackground: fields[22] as bool? ?? false,
|
||||
@@ -345,7 +379,7 @@ class AppSettingsAdapter extends TypeAdapter<AppSettings> {
|
||||
@override
|
||||
void write(BinaryWriter writer, AppSettings obj) {
|
||||
writer
|
||||
..writeByte(38)
|
||||
..writeByte(40)
|
||||
..writeByte(0)
|
||||
..write(obj.masjidName)
|
||||
..writeByte(1)
|
||||
@@ -394,6 +428,10 @@ class AppSettingsAdapter extends TypeAdapter<AppSettings> {
|
||||
..write(obj.mainCenterSlideDurationSec)
|
||||
..writeByte(34)
|
||||
..write(obj.announcementSlideDurationSec)
|
||||
..writeByte(38)
|
||||
..write(obj.slideshowPatternMode)
|
||||
..writeByte(39)
|
||||
..write(obj.slideshowSlidesPerMain)
|
||||
..writeByte(20)
|
||||
..write(obj.slideshowImages)
|
||||
..writeByte(21)
|
||||
|
||||
Reference in New Issue
Block a user