summaryrefslogtreecommitdiffstats
path: root/heimdall-frontend/source/qml
diff options
context:
space:
mode:
Diffstat (limited to 'heimdall-frontend/source/qml')
-rw-r--r--heimdall-frontend/source/qml/DropFiles.qml27
-rw-r--r--heimdall-frontend/source/qml/FileUtils.js44
-rw-r--r--heimdall-frontend/source/qml/qml.qrc5
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