[refactoring] restore started and completed buttons
This commit is contained in:
@@ -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();
|
||||||
|
|||||||
24
src/app/haxe/ru/m/puzzlez/source/GameImageSource.hx
Normal file
24
src/app/haxe/ru/m/puzzlez/source/GameImageSource.hx
Normal 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";
|
||||||
|
}
|
||||||
|
}
|
||||||
48
src/app/haxe/ru/m/puzzlez/storage/GameStorage.hx
Normal file
48
src/app/haxe/ru/m/puzzlez/storage/GameStorage.hx
Normal 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());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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';
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
8
src/app/haxe/ru/m/puzzlez/view/common/ImageIdView.yaml
Normal file
8
src/app/haxe/ru/m/puzzlez/view/common/ImageIdView.yaml
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
style: view
|
||||||
|
views:
|
||||||
|
- id: image
|
||||||
|
$type: hw.view.ImageView
|
||||||
|
geometry.stretch: true
|
||||||
|
stretch: false
|
||||||
|
fillType: COVER
|
||||||
Reference in New Issue
Block a user