diff --git a/download.cpp b/download.cpp index c95ca233..c398f0ac 100644 --- a/download.cpp +++ b/download.cpp @@ -84,14 +84,17 @@ void Download::handleJsonDownloadFinished() " {" " \"md5sum\": \"61d48a82cb188cceb14ebb8082bfec37\"," " \"filename\": \"ggml-gpt4all-j-v1.1-breezy.bin\"" + " \"filesize\": \"3785248281\"" " }," " {" " \"md5sum\": \"879344aaa9d62fdccbda0be7a09e7976\"," " \"filename\": \"ggml-gpt4all-j-v1.2-jazzy.bin\"," + " \"filesize\": \"3785248281\"" " \"isDefault\": \"true\"" " }," " {" " \"md5sum\": \"5b5a3f9b858d33b29b52b89692415595\"," + " \"filesize\": \"3785248281\"" " \"filename\": \"ggml-gpt4all-j.bin\"" " }" "]" @@ -125,13 +128,26 @@ void Download::parseJsonFile(const QByteArray &jsonData) QJsonObject obj = value.toObject(); QString modelFilename = obj["filename"].toString(); + QString modelFilesize = obj["filesize"].toString(); QByteArray modelMd5sum = obj["md5sum"].toString().toLatin1().constData(); bool isDefault = obj.contains("isDefault") && obj["isDefault"] == QString("true"); + quint64 sz = modelFilesize.toULongLong(); + if (sz < 1024) { + modelFilesize = QString("%1 bytes").arg(sz); + } else if (sz < 1024 * 1024) { + modelFilesize = QString("%1 KB").arg(qreal(sz) / 1024, 0, 'g', 3); + } else if (sz < 1024 * 1024 * 1024) { + modelFilesize = QString("%1 MB").arg(qreal(sz) / (1024 * 1024), 0, 'g', 3); + } else { + modelFilesize = QString("%1 GB").arg(qreal(sz) / (1024 * 1024 * 1024), 0, 'g', 3); + } + QString filePath = QCoreApplication::applicationDirPath() + QDir::separator() + modelFilename; QFileInfo info(filePath); ModelInfo modelInfo; modelInfo.filename = modelFilename; + modelInfo.filesize = modelFilesize; modelInfo.md5sum = modelMd5sum; modelInfo.installed = info.exists(); modelInfo.isDefault = isDefault; diff --git a/download.h b/download.h index 6d69e4ce..63973e08 100644 --- a/download.h +++ b/download.h @@ -11,12 +11,14 @@ struct ModelInfo { Q_GADGET Q_PROPERTY(QString filename MEMBER filename) + Q_PROPERTY(QString filesize MEMBER filesize) Q_PROPERTY(QByteArray md5sum MEMBER md5sum) Q_PROPERTY(bool installed MEMBER installed) Q_PROPERTY(bool isDefault MEMBER isDefault) public: QString filename; + QString filesize; QByteArray md5sum; bool installed = false; bool isDefault = false; diff --git a/qml/ModelDownloaderDialog.qml b/qml/ModelDownloaderDialog.qml index 16aed5d0..278bea0d 100644 --- a/qml/ModelDownloaderDialog.qml +++ b/qml/ModelDownloaderDialog.qml @@ -6,7 +6,7 @@ import llm Dialog { id: modelDownloaderDialog - width: 900 + width: 1024 height: 400 title: "Model Downloader" modal: true @@ -74,24 +74,38 @@ Dialog { } Text { + id: isDefault text: qsTr("(default)") visible: modelData.isDefault anchors.verticalCenter: parent.verticalCenter anchors.left: modelName.right anchors.leftMargin: 10 - font.pixelSize: 24 + font.pixelSize: 18 color: "#d1d5db" Accessible.role: Accessible.Paragraph Accessible.name: qsTr("Default file") Accessible.description: qsTr("Whether the file is the default model") } + Text { + text: modelData.filesize + anchors.verticalCenter: parent.verticalCenter + anchors.left: isDefault.visible ? isDefault.right : modelName.right + anchors.leftMargin: 10 + font.pixelSize: 18 + color: "#d1d5db" + Accessible.role: Accessible.Paragraph + Accessible.name: qsTr("File size") + Accessible.description: qsTr("The size of the file") + } + Label { id: speedLabel anchors.verticalCenter: parent.verticalCenter anchors.right: itemProgressBar.left anchors.rightMargin: 10 objectName: "speedLabel" + font.pixelSize: 18 color: "#d1d5db" text: "" visible: downloading