diff options
Diffstat (limited to '')
-rw-r--r-- | heimdall-frontend/source/qml/DropFiles.qml | 27 | ||||
-rw-r--r-- | heimdall-frontend/source/qml/FileUtils.js | 44 | ||||
-rw-r--r-- | heimdall-frontend/source/qml/qml.qrc | 5 |
3 files changed, 61 insertions, 15 deletions
diff --git a/heimdall-frontend/source/qml/DropFiles.qml b/heimdall-frontend/source/qml/DropFiles.qml index ddcc90b..9187b4f 100644 --- a/heimdall-frontend/source/qml/DropFiles.qml +++ b/heimdall-frontend/source/qml/DropFiles.qml @@ -2,12 +2,11 @@ import QtQuick 2.4 import QtQuick.Controls 1.3 import QtQuick.Layouts 1.1 import QtQuick.Dialogs 1.2 +import "FileUtils.js" as FileUtils DropFilesForm { id: background - property var fileUrls: [] - signal nextPressed(var files) ListModel { @@ -30,15 +29,17 @@ DropFilesForm { var count = urls.length; if (count > 0) { for (var i = 0; i < count; i++) { - var url = urls[i].toString(); - var filename = url.slice(url.lastIndexOf('/') + 1, url.length); + if (FileUtils.isFile(urls[i])) { + var filename = FileUtils.filenameFromUrl(urls[i]); - fileModel.append({ - icon: "drop_zone.svg", - text: filename - }); + fileModel.append({ icon: "drop_zone.svg", text: filename }); - fileUrls.push(urls[i]); + if (FileUtils.isArchive(filename)) { + fileUrls.push(FileUtils.extractArchive(urls[i])); + } else { + fileUrls.push(urls[i]); + } + } } setFileGridVisible(true); @@ -90,12 +91,12 @@ DropFilesForm { } FileDialog { - id: browseDialog + id: browseDialog title: "Select firmware file(s)" selectMultiple: true selectFolder: false - onAccepted: { + onAccepted: { addFiles(browseDialog.fileUrls); - } - } + } + } } diff --git a/heimdall-frontend/source/qml/FileUtils.js b/heimdall-frontend/source/qml/FileUtils.js new file mode 100644 index 0000000..3735a37 --- /dev/null +++ b/heimdall-frontend/source/qml/FileUtils.js @@ -0,0 +1,44 @@ +function clipFileExtension(filename) { + var periodIndex = filename.lastIndexOf('.'); + + if (periodIndex > 0) { + return filename.slice(0, periodIndex - 1); + } else if (periodIndex === 0) { + return ""; + } + + return filename; +} + +function filenameFromUrl(url) { + var urlString = url.toString(); + return urlString.slice(urlString.lastIndexOf('/') + 1); +} + +function fileExtension(url) { + var filename = filenameFromUrl(url); + var periodIndex = filename.lastIndexOf('.'); + + if (periodIndex >= 0) { + return filename.slice(periodIndex + 1); + } + + return ""; +} + +// TODO: Real implemention - call out to C++ and validate with QFileInfo etc. +function isFile(url) { + var filename = filenameFromUrl(url); + return filename.length > 0; +} + +function isArchive(url) { + var filename = filenameFromUrl(url); + var extension = fileExtension(filename); + return (extension === 'tar' || extension === 'zip') + || (extension === 'gz' && fileExtension(clipFileExtension(filename)) === 'tar'); +} + +function extractArchive(url) { + +} diff --git a/heimdall-frontend/source/qml/qml.qrc b/heimdall-frontend/source/qml/qml.qrc index 25799fc..641c200 100644 --- a/heimdall-frontend/source/qml/qml.qrc +++ b/heimdall-frontend/source/qml/qml.qrc @@ -1,9 +1,10 @@ <RCC> <qresource prefix="/"> + <file>DropFiles.qml</file> + <file>DropFilesForm.qml</file> + <file>FileUtils.js</file> <file>main.qml</file> <file>Root.qml</file> <file>RootForm.qml</file> - <file>DropFiles.qml</file> - <file>DropFilesForm.qml</file> </qresource> </RCC>
\ No newline at end of file |