From fd73c6171a1d4d52541eacb7be52cfb0fef57ea7 Mon Sep 17 00:00:00 2001 From: shmyga Date: Thu, 10 Sep 2020 16:36:01 +0300 Subject: [PATCH] [refactoring] update ImageIdView --- .../ru/m/puzzlez/view/common/ImageDataList.hx | 3 ++ .../ru/m/puzzlez/view/common/ImageIdView.hx | 48 +++++++++++++++++++ .../ru/m/puzzlez/view/common/ImageIdView.yaml | 14 ++++++ .../ru/m/storage/SharedObjectDataStorage.hx | 3 +- 4 files changed, 67 insertions(+), 1 deletion(-) diff --git a/src/app/haxe/ru/m/puzzlez/view/common/ImageDataList.hx b/src/app/haxe/ru/m/puzzlez/view/common/ImageDataList.hx index 80bd28f..4ff15e2 100644 --- a/src/app/haxe/ru/m/puzzlez/view/common/ImageDataList.hx +++ b/src/app/haxe/ru/m/puzzlez/view/common/ImageDataList.hx @@ -29,6 +29,9 @@ import ru.m.puzzlez.proto.game.ImageId; data = value; imagesView.data = data.data; paginatorView.page = data; + for (view in imagesView.dataViews) { + view.onChange.connect(_ -> refresh()); + } return data; } diff --git a/src/app/haxe/ru/m/puzzlez/view/common/ImageIdView.hx b/src/app/haxe/ru/m/puzzlez/view/common/ImageIdView.hx index 0c453d8..12d0841 100644 --- a/src/app/haxe/ru/m/puzzlez/view/common/ImageIdView.hx +++ b/src/app/haxe/ru/m/puzzlez/view/common/ImageIdView.hx @@ -1,20 +1,52 @@ package ru.m.puzzlez.view.common; +import ru.m.puzzlez.image.GameUtil; +import hw.view.popup.ConfirmView; +import hw.signal.Signal; +import hw.view.form.LabelView; +import hw.view.form.ButtonView; import hw.view.group.GroupView; import hw.view.ImageView; import ru.m.puzzlez.image.ImageData; import ru.m.puzzlez.proto.game.ImageId; +import ru.m.puzzlez.storage.FileStorage; +import ru.m.puzzlez.storage.GameStorage; @:template class ImageIdView extends GroupView { public var imageId(default, set):ImageId; private function set_imageId(value:ImageId):ImageId { imageId = value; + labelView.text = ""; + cleanButton.visible = false; + removeButton.visible = false; loading.promise = ImageData.fromImageId(imageId).resolve().then(data -> this.imageView.image = data); + gameStorage.get(imageId).then(state -> { + if (state != null) { + var progress = GameUtil.calcProgress(state); + labelView.text = '${progress.complete}/${progress.total}'; + cleanButton.visible = true; + } + }); + if (imageId.source == "file") { + fileStorage.get(imageId.id).then(value -> { + if (value != null) { + removeButton.visible = true; + } + }); + } return imageId; } @:view("image") var imageView:ImageView; private var loading:LoadingWrapper; + @:view("label") var labelView:LabelView; + @:view("remove") var removeButton:ButtonView; + @:view("clean") var cleanButton:ButtonView; + + @:provide private var fileStorage:FileStorage; + @:provide private var gameStorage:GameStorage; + + public var onChange(default, null):Signal = new Signal(); public function new(imageId:ImageId = null) { super(); @@ -24,6 +56,22 @@ import ru.m.puzzlez.proto.game.ImageId; } } + private function removeImage():Void { + ConfirmView.confirm("Remove image?").then(result -> { + if (result) { + fileStorage.delete(imageId.id).then(_ -> onChange.emit(true)); + } + }); + } + + private function cleanGame():Void { + ConfirmView.confirm("Remove game?").then(result -> { + if (result) { + gameStorage.delete(imageId).then(_ -> onChange.emit(true)); + } + }); + } + public static function factory(index:Int, value:ImageId):ImageIdView { return new ImageIdView(value); } diff --git a/src/app/haxe/ru/m/puzzlez/view/common/ImageIdView.yaml b/src/app/haxe/ru/m/puzzlez/view/common/ImageIdView.yaml index 5f08480..b161e17 100644 --- a/src/app/haxe/ru/m/puzzlez/view/common/ImageIdView.yaml +++ b/src/app/haxe/ru/m/puzzlez/view/common/ImageIdView.yaml @@ -6,3 +6,17 @@ views: geometry.stretch: true stretch: false fillType: COVER + - id: label + $type: hw.view.form.LabelView + - id: remove + $type: hw.view.form.ButtonView + visible: false + propagation: false + style: icon.control.small.close.red + +onPress: ~removeImage() + - id: clean + $type: hw.view.form.ButtonView + visible: false + propagation: false + style: icon.control.small.close.orange + +onPress: ~cleanGame() diff --git a/src/app/haxe/ru/m/storage/SharedObjectDataStorage.hx b/src/app/haxe/ru/m/storage/SharedObjectDataStorage.hx index e454966..e94b1b8 100644 --- a/src/app/haxe/ru/m/storage/SharedObjectDataStorage.hx +++ b/src/app/haxe/ru/m/storage/SharedObjectDataStorage.hx @@ -168,9 +168,10 @@ class SharedObjectDataStorage implements DataStorage { var dataObject = resolveDataObject(id); if (Reflect.hasField(dataObject.data, DATA_KEY)) { dataObject.clear(); + Reflect.deleteField(indexObject.data, helper.idKey(id)); + indexObject.flush(); return Promise.promise(true); } - Reflect.deleteField(dataObject.data, helper.idKey(id)); return Promise.promise(false); } }