I have implemented very simple versions of this functionality (no zip 
compression, and no emscripten filesystem API, which I think doesn't help 
much for this stuff) in some of my WASM apps and demos.

This one can load and save ASM text files via the HTML5 file dialog 
interface (look under the "File" menu):

https://floooh.github.io/visual6502remix/

And here's a demo to load data via drag and drop:

https://floooh.github.io/sokol-html5/droptest-sapp.html

Unfortunately this kind of stuff isn't doable via emscripten APIs alone, 
you'll have to use a mix of C and Javascript (mostly Javascript), and move 
the data in and out of the WASM heap.

The core of the drag'n'drop code is here:

https://github.com/floooh/sokol/blob/5894182dddc2e0fd6531e5a2deb5d9cf7662ea2a/sokol_app.h#L3907-L3978

Basically the "usual" HTML5 drag'n'drop event handlers as embedded 
Javascript, listening for dropped-events, and copying the "payload" into 
the WASM heap. Due to the asynchronous nature of Javascript APIs this is a 
quite confusing mess of calling back and forth between the JS and C side 
unfortunately.

The code to load and save data via the file dialog is here:

https://github.com/floooh/v6502r/blob/d7f113e0d3e0bcb2fb283acab9a86c257c5d4ca7/src/util.c#L28-L94

...but this stuff is even more confusing and only makes sense after you 
know how the Javascript APIs work (TBH looking at this stuff after a year I 
have no idea anymore how it actually works, I only remember that I had a 
lot of trouble getting it to work across all browsers, and that I had to 
use outdated and deprecated techniques to get cross-browser compatibility 
(at least for the "download data to the user machine" stuff).

https://github.com/floooh/v6502r/blob/d7f113e0d3e0bcb2fb283acab9a86c257c5d4ca7/src/util.c#L28-L94

This is a great example of how convoluted and overall terrible web 
development is, what's a single call in a "native" operating system is 
usually a jenga tower of hacks and outdated APIs in the web world (...and 
don't get me started on clipboard support) :/

But I hope this still helps a bit!
On Saturday, 2 January 2021 at 02:03:24 UTC+1 [email protected] wrote:

> Hi all,
> My emscripten project is an entertainment app that allows the user to 
> create things in an editor.  I'm storing the data using the filesystem API, 
> and it all works fine.  But I want to provide some additional functionality.
>
> I would like to let the user click a button, zip up all their data, and 
> offer it for download (so they can make backups in case of clearing browser 
> data, etc.  Similarly, I'd like to provide a reverse process where they can 
> drop a zip onto the browser and take control of it with emscripten so that 
> I can unzip it and put it into the filesystem.
>
> Is this possible?  And if so, can anyone give me a direction to look in 
> for implementing it?  When I try to google it, there is so much noise that 
> I can't find any answers.
>
> Thanks!
>

-- 
You received this message because you are subscribed to the Google Groups 
"emscripten-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/emscripten-discuss/838c6f50-e115-463f-8688-2de901992ce6n%40googlegroups.com.

Reply via email to