[refactoring] restore started and completed buttons

This commit is contained in:
2020-09-10 16:09:35 +03:00
parent 55a6ec2072
commit 7c97a17f43
6 changed files with 109 additions and 0 deletions

View File

@@ -8,6 +8,7 @@ import ru.m.puzzlez.render.part.IPartBuilder;
import ru.m.puzzlez.settings.Settings; import ru.m.puzzlez.settings.Settings;
import ru.m.puzzlez.source.AssetImageSource; import ru.m.puzzlez.source.AssetImageSource;
import ru.m.puzzlez.source.FileImageSource; import ru.m.puzzlez.source.FileImageSource;
import ru.m.puzzlez.source.GameImageSource;
import ru.m.puzzlez.source.PixabayImageSource; import ru.m.puzzlez.source.PixabayImageSource;
import ru.m.puzzlez.storage.GameStorage; import ru.m.puzzlez.storage.GameStorage;
import ru.m.puzzlez.view.PuzzlezAppView; import ru.m.puzzlez.view.PuzzlezAppView;
@@ -26,6 +27,7 @@ class PuzzlezApp {
sourceBundle.register(new AssetImageSource()); sourceBundle.register(new AssetImageSource());
sourceBundle.register(new FileImageSource()); sourceBundle.register(new FileImageSource());
sourceBundle.register(new PixabayImageSource()); sourceBundle.register(new PixabayImageSource());
sourceBundle.register(new GameImageSource());
L.push(new TraceLogger()); L.push(new TraceLogger());
updater = new Updater(Const.instance.VERSION, "https://shmyga.ru/repo/puzzlez/packages.json"); updater = new Updater(Const.instance.VERSION, "https://shmyga.ru/repo/puzzlez/packages.json");
var app = new App(); var app = new App();

View File

@@ -0,0 +1,24 @@
package ru.m.puzzlez.source;
import ru.m.puzzlez.proto.game.ImageId;
import promhx.Promise;
import ru.m.data.DataSource;
import ru.m.puzzlez.image.ImageSource;
import ru.m.puzzlez.storage.GameStorage;
class GameImageSource implements ImageSource {
public var id(default, never):String = "game";
@:provide private var storage:GameStorage;
public function new() {
}
public function getPage(page:Page):Promise<DataPage<ImageId>> {
return storage.getIndexPage(page);
}
public function load(id:String):Promise<ImageValue> {
throw "Unsupported";
}
}

View File

@@ -0,0 +1,48 @@
package ru.m.puzzlez.storage;
import hw.connect.PacketUtil;
import haxe.io.Bytes;
import ru.m.puzzlez.proto.game.GameState;
import ru.m.puzzlez.proto.game.ImageId;
import ru.m.storage.SharedObjectDataStorage;
class GameStorageHelper implements DataHelper<GameState, ImageId> {
public function new() {
}
public function idKey(id:ImageId):String {
return '${id.source}:${id.id}';
}
public function keyId(key:String):ImageId {
var keyArray = key.split(":");
return new ImageId().setSource(keyArray[0]).setId(keyArray[1]);
}
public function dataId(data:GameState):ImageId {
return data.preset.image;
}
public function dataBytes(data:GameState):Bytes {
return PacketUtil.toBytes(data);
}
public function bytesData(bytes:Bytes):GameState {
return PacketUtil.fromBytes(bytes, GameState);
}
public function dataMeta(data:GameState):DataMeta {
return [
"status" => data.status,
"date" => Date.now(),
];
}
}
@:provide class GameStorage extends SharedObjectDataStorage<GameState, ImageId> {
public function new() {
super("game", new GameStorageHelper());
}
}

View File

@@ -6,7 +6,9 @@ import hw.view.frame.FrameSwitcher;
import hw.view.frame.FrameView; import hw.view.frame.FrameView;
import ru.m.pixabay.PixabayApi; import ru.m.pixabay.PixabayApi;
import ru.m.puzzlez.FileUtil; import ru.m.puzzlez.FileUtil;
import ru.m.puzzlez.proto.game.GameStatus;
import ru.m.puzzlez.storage.FileStorage; import ru.m.puzzlez.storage.FileStorage;
import ru.m.puzzlez.storage.GameStorage;
import ru.m.puzzlez.view.ImageSourceFrame; import ru.m.puzzlez.view.ImageSourceFrame;
import ru.m.update.Updater; import ru.m.update.Updater;
@@ -14,13 +16,18 @@ import ru.m.update.Updater;
public static var ID = "start"; public static var ID = "start";
@:view var sources:DataView<ImageSourceConfig, ButtonView>; @:view var sources:DataView<ImageSourceConfig, ButtonView>;
@:view var startedButton:ButtonView;
@:view var completedButton:ButtonView;
@:view var updateButton:ButtonView; @:view var updateButton:ButtonView;
@:provide var switcher:FrameSwitcher; @:provide var switcher:FrameSwitcher;
@:provide static var appUpdater:Updater; @:provide static var appUpdater:Updater;
@:provide var fileStorage:FileStorage; @:provide var fileStorage:FileStorage;
@:provide var gameStorage:GameStorage;
private var fileSource:ImageSourceConfig = {title: "Files", sourceId: "file"}; private var fileSource:ImageSourceConfig = {title: "Files", sourceId: "file"};
private var startedSource:ImageSourceConfig = {title: "Started", sourceId: "game", filter: ["status" => GameStatus.STARTED]};
private var completedSource:ImageSourceConfig = {title: "Completed", sourceId: "game", filter: ["status" => GameStatus.COMPLETE]};
public function new() { public function new() {
super(ID); super(ID);
@@ -56,5 +63,15 @@ import ru.m.update.Updater;
updateButton.text = 'Update ${info.version}'; updateButton.text = 'Update ${info.version}';
} }
}).catchError(error -> L.w('Update', 'failed: ${error}')); }).catchError(error -> L.w('Update', 'failed: ${error}'));
refresh();
}
private function refresh():Void {
gameStorage.getIndexPage({index:0, count:0, filter:startedSource.filter}).then(response -> {
startedButton.text = response.total > 0 ? 'Started (${response.total})' : 'Started';
});
gameStorage.getIndexPage({index:0, count:0, filter:completedSource.filter}).then(response -> {
completedButton.text = response.total > 0 ? 'Completed (${response.total})' : 'Completed';
});
} }
} }

View File

@@ -29,9 +29,19 @@ views:
overflow.y: scroll overflow.y: scroll
- $type: hw.view.group.HGroupView - $type: hw.view.group.HGroupView
geometry.width: 100% geometry.width: 100%
layout.margin: 10
views: views:
- id: startedButton
$type: hw.view.form.ButtonView
text: Started
+onPress: ~showSource(startedSource)
- id: completedButton
$type: hw.view.form.ButtonView
text: Completed
+onPress: ~showSource(completedSource)
- $type: hw.view.form.ButtonView - $type: hw.view.form.ButtonView
text: Upload text: Upload
geometry.margin.left: 30
+onPress: ~upload() +onPress: ~upload()
- $type: hw.view.form.LabelView - $type: hw.view.form.LabelView
text: $r:text:app.version text: $r:text:app.version

View File

@@ -0,0 +1,8 @@
---
style: view
views:
- id: image
$type: hw.view.ImageView
geometry.stretch: true
stretch: false
fillType: COVER