diff --git a/internal/chunks/chunk.go b/internal/chunks/chunk.go index f2b55c3..f8e8e1d 100644 --- a/internal/chunks/chunk.go +++ b/internal/chunks/chunk.go @@ -8,10 +8,7 @@ import ( "encoding/binary" "fmt" "io" - "os" "slices" - - "fyne.io/fyne/v2" ) // IFFChunk represents a chunk in an IFF file. @@ -34,24 +31,11 @@ type IFFChunk struct { } // ReadIFFFile reads an IFF file and returns the root chunk. +// fileLen is the length of the file in bytes. // In case of an error, the function returns nil and the error. -func ReadIFFFile(reader fyne.URIReadCloser) (*IFFChunk, error) { - // TODO: get rid of fyne.URIReadCloser - var chunk *IFFChunk - - file, err := os.Open(reader.URI().Path()) - if err != nil { - return nil, err - } - defer file.Close() - - fileInfo, err := file.Stat() - if err != nil { - return nil, err - } - fileLen := fileInfo.Size() +func ReadIFFFile(reader io.Reader, fileLen int64) (*IFFChunk, error) { - chunk, err = readChunk(reader, nil, fileLen, 0) + chunk, err := readChunk(reader, nil, fileLen, 0) return chunk, err } diff --git a/internal/gui/gui.go b/internal/gui/gui.go index 67851d4..38f5176 100644 --- a/internal/gui/gui.go +++ b/internal/gui/gui.go @@ -5,6 +5,9 @@ package gui import ( + "bytes" + "io" + "fyne.io/fyne/v2" "fyne.io/fyne/v2/app" "fyne.io/fyne/v2/container" @@ -58,7 +61,15 @@ func OpenGUI(version string) { appData.topContainer.Refresh() - appData.chunks, err = chunks.ReadIFFFile(reader) + // read the file to get its length + data, err := io.ReadAll(reader) + if err != nil { + dialog.ShowError(err, appData.win) + return + } + + appData.chunks, err = chunks.ReadIFFFile(bytes.NewReader(data), + int64(len(data))) if err != nil { dialog.ShowError(err, appData.win) return