-
Notifications
You must be signed in to change notification settings - Fork 29
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
spx-gui: upload files when adding resource #732
Conversation
duration: 0 | ||
}) | ||
try { | ||
await saveFiles(sound.export()) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
这里需要考虑离线的情况
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
考虑离线情况指的是什么?意思是离线时跳过这里的上传,并继续下面的步骤将资源添加到 project
中,也就是像以前那样将上传延后到 saveToCloud
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
对的,离线情况跳过上传(saveFiles
)就好
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
const handleConfirm = useMessageHandle( | ||
async () => { | ||
const files = selectedCostumes | ||
.map((costume) => costume.export('')) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nit: 这里跟 Costume
(以及 Sound
、Backdrop
) export
的耦合得有点深,另外看字面逻辑容易误以为像 config 这样的信息(比如 Sound
的 config export 时是包含在 files
里的)也可能被上传,而这里的逻辑理应是针对图片、音频这样的“资源文件”的
我暂时也没想到太好的办法。把获得文件 & saveFiles
的逻辑也做到 model 上再由这里调用可能会稍好点,比如:
class Costume {
async uploadFiles() {
await saveFiles({ img: this.img })
}
}
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
另外看字面逻辑容易误以为像 config 这样的信息(比如
Sound
的 config export 时是包含在files
里的)也可能被上传,而这里的逻辑理应是针对图片、音频这样的“资源文件”的
我理解你的意思。不过如果认为它就是要去上传所有文件(包括 config),也不是不可以。换句话说,不考虑即将被上传的文件是 inlineable 的还是会被上传到 kodo 的 binary file。
其实现在就是为了把 saveToCloud
里涉及到的 saveFiles
提前到具体文件被添加时而已,这样 saveToCloud
就可以不再跟任何第三方服务打交道了(比如 kodo),只需跟 builder api 通信即可。
给 Costume
这些类引入 uploadFiles
方法的话,会不会有些奇怪呢?目前这种它们只负责提供(export)文件,由上面决定是否上传、上传哪些、以及上传到哪,感觉挺合理的?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
给
Costume
这些类引入uploadFiles
方法的话,会不会有些奇怪呢?
是的,这个会越过 Costume
等 model 目前的职责边界(如果对标 Project
的话这个不是什么大问题)
目前确实这俩做法没有哪个明显更好,可以先按你目前的实现来,我们之后有更多相关逻辑了再看
}, | ||
error(content: string) { | ||
nMessage.error(content, options) | ||
loading(content: string, options?: MessageOptions): MessageReactive { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
这里建议暴露个偏上层的 API 来满足这次的需求,比如
{
withLoading<T>(promise: Promise<T>, content: string): Promise<T> {
// 这里可以把 loading、destroy 的事儿干了
}
}
一方面现有的 case 用起来会简单一点,另外一方面我们可以先不去暴露 duration
、destroy
这样的基础能力;以 duration
为例,之前不暴露它是有意的:不同的场景 message 展示时长应当是一致的,因此不去放开由外部指定 duration
的能力
P.S. 再长远一点来看我们可能会通过类似 utils/exception.ts
的方式来暴露一个更上层的(可以把像 i18n 这样的项目逻辑做进来的)工具帮助简化 loading message 的使用;不过那个可以后边 case 多一点再说
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
好的,我来改下。
P.S. 再长远一点来看我们可能会通过类似
utils/exception.ts
的方式来暴露一个更上层的(可以把像 i18n 这样的项目逻辑做进来的)工具帮助简化 loading message 的使用;不过那个可以后边 case 多一点再说
比如给 useMessageHandle
加个 loadingMessage
?一开始我是这么做的。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
比如给
useMessageHandle
加个loadingMessage
?一开始我是这么做的。
对的,类似;不过那样 useMessageHandle
干的事情太多了,就不一定好用 🤣
- Added loading message type for global loading-feedback. - Integrated file upload process into `PreprocessModal`'s confirmation for files requiring preprocessing. - Implemented loading message display for file uploads without preprocessing. - Ensured resource addition only completes after successful file upload. - Fixed filename change issue in `PreprocessModal` caused by `RemoveBackground` application. Fixes goplus#638
The PR environment is ready, please check the PR environment [Attention]: This environment will be automatically cleaned up after a certain period of time., please make sure to test it in time. If you have any questions, please contact the builder team. |
* dropdown with tooltip (#594) * feat: UIDropdownWithTooltip * fix: missing import for UILoading * fix: logic * lint: enable vue/no-undef-components (#595) * lint: enable vue/no-undef-components * add comments * fix: delay on click to stop SoundPlayer (#596) * smoother waveform (#589) * smoothed waveform * update comments * do not reload audio on record end * adjust waveform scale to match scratch * add comments * load audio after recording (#598) * Product doc for animation support (#597) * product doc for animation * update doc for animation * refactor: sound editor & recorder (#607) * refactor: sound editor & recorder * better animation & cache * fix: export with gain * fix: not emitting stop on end * reset progress on stop * cleanup & comments * refactor: * refactor: * move to a seperate dir * uninstall wavesurfer * add comments * Fix last-select issue when project switched (#612) * fix last-select issue when project switched * avoid effectScope * Model `Animation` (#609) * model animation * prettier * typo * Costume pre-processing: split-sprite-sheet (#614) * costume preprocessing * details * typo * Remove right-click menu for backdrop (#616) fix #606 * fix normalizeAssetName (#619) * Save text files directly to the DB for performance (#617) Updates #369 * update model animation (#620) * component `AnimationSettings` (#621) * component AnimationSettings * use UIIcon instead of inline svg * fix svg icon * fix cancelled warning in console (#625) * fix(spx-gui): save to cloud after sharing project and remove login requirement for making signed web URLs (#631) Fixes #627 * refactor(spx-gui): remove "codeFile" concept and optimize project saving (#630) - Removed the "codeFile" concept from sprite and stage models introduced in #508. Since #617, lazy-loading for plain text files is no longer needed. - Avoided redundant `parseProjectData` in `@/models/common/cloud.save`. Fixes #369 * Animation Editor UI (#626) * feat: modal * feat: * modals * remove checkerboard files * feat: sound playing * image preload * refactor * hide onTouched (#632) * Update code-editor for animation (#629) * update code-editor for animation * update costume tools * fix costume add * Preload frames & audio / removal modal (#633) * feat: remove costume & preload frames * fix: use ref for muted * animation details (#634) * Update docs (#636) * update docs * add screenshot * Use center point as sprite pivot (#615) * use center point as sprite pivot * upgrade spx * refactor preload / modify translation (#635) * refactor preload / modify translation * do not update on zero duration * refactor: disposer * refactor: use single watch hook * fix: start timing / remove deep watch * disposer -> disposable * fix: use old sound on switch * `RotationStyle` support (#639) * Debug animation sound on project load (#640) * add preview for `GroupCostumesModal` (#646) * Product doc for Widget (#644) * add en docs * doc for widget * Support remove-background (#650) * support remove-background * debug details * api for aigc * details * add comment for TODO * exclude image url targeting private network * optimize details * spx-gui: implement automatic project save to cloud (#649) - Added functionality to automatically save projects to the cloud. - Implemented retry mechanism for failed save attempts with `5s` intervals. - Ensured debounce handling for save operations with a `1.5s` delay to prevent frequent saves. - Monitored changes in exported game files to trigger auto-save. - Saved to local cache if auto-save to cloud fails to prevent data loss. - Cleared local cache after successful cloud save. - Switched between saving to cloud and local cache based on connectivity. - Save to cloud when online. - Save to local cache when offline. - Replaced the `Save` button in the `TopNav` with an auto-save status icon. - Prevented the user from leaving the current project (navigating away, refreshing, or closing the page) when there are unsynced changes. Fixes #541 * Uniform item style (#641) * refactor: editor items * undo changes for library AssetItem * refactor: library item * fix type error * update project item design * refactor: use UIBlockItem * fix: ScratchItemContainer * refactor: UISpriteItem * sound & backdrop * remove editor item * refactor: * refactor & update design * update slot name * refactor: small editor sound/sprite * style cleanup * refactors * uiBlockItem default color to primary * move components to a folder * use visible instead of v-if * img loading mask * remove noLoadingMask option * Migrate to ghcr.io (#654) * dockerfile: utilize pre-built images for Go+ and Nginx (#660) - Replaced manual installation with pre-built images for Go+ and Nginx. - Modified CMD to enable log output. * dockerfile: fix nginx.conf copy path (#661) * spx-gui: avoid calling `next` within `router.beforeEach` (#664) See https://github.com/vuejs/rfcs/blob/master/active-rfcs/0037-router-return-guards.md#motivation * spx-gui: remove unnecessary `defineProps` and `defineEmits` imports (#666) * adapt animation for spx API change (#647) * pr-preview: use mirrors for Go and Node modules downloads during `docker build` (#667) - Updated `Dockerfile`: - Introduced `ARG`s for base images and custom mirror configs. - Modified the `CMD` instruction to use `exec` for proper signal handling. - Updated `scripts/pr-preview.sh`: - Refined `docker build` command to utilize the newly introduced `ARG`s. * spx-gui: implement batched object URL processing and optimize lazy loading (#668) - Extended `util.makeObjectUrls` with batching to queue and merge object URL requests. - Updated `cloud.universalUrlToWebUrl` to use batched processing. - Refactored `cloud.getFiles` and file creation process to support lazy URL resolution, addressing potential URL expiry issues. Fixes #653 * spx-gui: delay input URL processing in RemoveBackground component (#669) * fix required prop warnings (#673) * feat: add build script to support windows (#675) * spx-gui: prevent event propagation on UICornerIcon click (#674) * Fix animation sound loss during undo/redo (#718) * fix warning * fix animation sound during export & load * keep order of sprites & sounds (#720) * configurable AIGC feature (#726) * Self-host monaco instead of `cdn.jsdelivr.net` (#729) * spx-gui: upload files when adding resource (#732) - Added loading message type for global loading-feedback. - Integrated file upload process into `PreprocessModal`'s confirmation for files requiring preprocessing. - Implemented loading message display for file uploads without preprocessing. - Ensured resource addition only completes after successful file upload. - Fixed filename change issue in `PreprocessModal` caused by `RemoveBackground` application. Fixes #638 * feat: custom sprite transformer (#723) * konva flip demo * feat: sprite transformer * update button color * small refactors * update vue-konva * ui changes & flip in Transformer * fix type error * cursor behavior * fix cursor when not dragging * fix update on spriteRotationStyleChange * move & refactor * update cursor style * not allowed cursor * fix: centeredScaling * add comment for flip button * spx-gui: auto save unsaved changes on route change (#737) We block route changes when there are unsaved changes using `UIConfirmDialog`. For better UX, an automatic save is triggered when the dialog is mounted, reducing the need for users to manually click the `Save` button. If the save failes, users can simply retry by clicking `Save`. Fixes #665 * spx-gui(UIDropdown): fix `NPopover.setShow` not triggering `on-update:show` (#738) * update favicon (#747) * Automatically select the first animation on sprite switch (#749) * Automatically select the first animation on sprite switch * fix: not auto select on delete * update casdoor config (#762) * update casdoor config * update backend env * Widget Monitor (#676) * widget monitor * placeholder for empty widget list * fix detail * debug with spx --------- Co-authored-by: ComfyFluffy <24245520+ComfyFluffy@users.noreply.github.com> Co-authored-by: Aofei Sheng <aofei@aofeisheng.com> Co-authored-by: molinla <61045398+molinla@users.noreply.github.com>
PreprocessModal
's confirmation for files requiring preprocessing.PreprocessModal
caused byRemoveBackground
application.Fixes #638