diff --git a/src/appmanagermodel.cpp b/src/appmanagermodel.cpp index 37cb576be039bdaf8e02daf12a861164289b6a30..0389854de1359e59bd44a0ffe9fe5c7c0db08cf5 100644 --- a/src/appmanagermodel.cpp +++ b/src/appmanagermodel.cpp @@ -41,18 +41,18 @@ QList AppManagerModel::getAppInfosList() QString AppManagerModel::formatePkgInfo(const PkgInfo &info) { - QString text = QString("应用名:%1\n包名:%2\n安装后占用:%3KB\n更新时间:%4\n维护者:%5\n" - "架构:%6\n版本:%7\n下载地址:%8\n安装包大小:%9B\n主页:%10\n" + QString text = QString("应用名:%1\n包名:%2\n安装后占用:%3\n更新时间:%4\n维护者:%5\n" + "架构:%6\n版本:%7\n下载地址:%8\n安装包大小:%9\n主页:%10\n" "桌面文件:%11\n执行命令:%12\n执行路径:%13\n依赖:%14\n描述:%15\n\n") .arg("") .arg(info.pkgName) - .arg(info.installedSize) + .arg(info.installedSize ? formatBytes(info.installedSize * 1024, 2) : "0 B") .arg(info.updatedTime) .arg(info.maintainer) .arg(info.arch) .arg(info.version) .arg(info.downloadUrl) - .arg(info.pkgSize) + .arg(info.pkgSize ? formatBytes(info.pkgSize, 1) : "0 B") .arg(info.homepage) .arg("") .arg("") diff --git a/src/appmanagerwidget.cpp b/src/appmanagerwidget.cpp index ab8bbb3bcf1b25032760f37a1943fcd6eb5ebc0e..90006c1b863bb372034d13c1ff715a12255cb772 100644 --- a/src/appmanagerwidget.cpp +++ b/src/appmanagerwidget.cpp @@ -754,18 +754,18 @@ QString AppManagerWidget::formateAppInfo(const AppInfo &info) text += "本地安装信息\n" "-----------------------------\n"; if (info.isInstalled) { - text += QString("应用名:%1\n包名:%2\n安装后占用:%3KB\n更新时间:%4\n维护者:%5\n" - "架构:%6\n版本:%7\n下载地址:%8\n安装包大小:%9B\n主页:%10\n" + text += QString("应用名:%1\n包名:%2\n安装后占用:%3\n更新时间:%4\n维护者:%5\n" + "架构:%6\n版本:%7\n下载地址:%8\n安装包大小:%9\n主页:%10\n" "桌面文件:%11\n执行命令:%12\n执行路径:%13\n依赖:%14\n描述:%15\n\n") .arg(info.desktopInfo.appName) .arg(info.installedPkgInfo.pkgName) - .arg(info.installedPkgInfo.installedSize) + .arg(info.installedPkgInfo.installedSize ? formatBytes(info.installedPkgInfo.installedSize * 1024, 2) : "0 B") .arg(info.installedPkgInfo.updatedTime) .arg(info.installedPkgInfo.maintainer) .arg(info.installedPkgInfo.arch) .arg(info.installedPkgInfo.version) .arg(info.installedPkgInfo.downloadUrl) - .arg(info.installedPkgInfo.pkgSize) + .arg(info.installedPkgInfo.pkgSize ? formatBytes(info.installedPkgInfo.pkgSize, 1) : "0 B") .arg(info.installedPkgInfo.homepage) .arg(info.desktopInfo.desktopPath) .arg(info.desktopInfo.exec) diff --git a/src/common/appmanagercommon.cpp b/src/common/appmanagercommon.cpp index 01cca1f0760d6dfb6acefe255058f1ea9311c61c..9175bca1fdbf1360284088698e407d5e02a04367 100644 --- a/src/common/appmanagercommon.cpp +++ b/src/common/appmanagercommon.cpp @@ -51,3 +51,22 @@ void AM::popupNormalSysNotify(const QString &summary, const QString &body) QProcess proc; proc.startDetached("notify-send", {"-a", "com.github.ccc-app-manager", summary, body}); } + +// 格式化容量 +QString AM::formatBytes(qint64 input, int prec) +{ + QString flowValueStr; + if (KB_COUNT > input) { + flowValueStr = QString::number(input / 1, 'd', prec) + " B"; + } else if (MB_COUNT > input) { + flowValueStr = QString::number(input / KB_COUNT + double(input % KB_COUNT) / KB_COUNT, 'd', prec) + " KB"; + } else if (GB_COUNT > input) { + flowValueStr = QString::number(input / MB_COUNT + double(input % MB_COUNT) / MB_COUNT, 'd', prec) + " MB"; + } else if (TB_COUNT > input) { + flowValueStr = QString::number(input / GB_COUNT + double(input % GB_COUNT) / GB_COUNT, 'd', prec) + " GB"; + } else { + // 大于TB单位 + flowValueStr = QString::number(input / TB_COUNT + double(input % TB_COUNT) / TB_COUNT, 'd', prec) + " TB"; + } + return flowValueStr; +} diff --git a/src/common/appmanagercommon.h b/src/common/appmanagercommon.h index c0dabc623f13073925a36bbbb634c678d287826e..fa4086e95376519ed57a688243c906ef8432ceec 100644 --- a/src/common/appmanagercommon.h +++ b/src/common/appmanagercommon.h @@ -10,6 +10,12 @@ // 列表数据角色定义 #define AM_LIST_VIEW_ITEM_DATA_ROLE_PKG_NAME Dtk::ItemDataRole::UserRole + 1 +// 文件大小单位,以b为基本单位 +#define KB_COUNT (1 << 10) +#define MB_COUNT (1 << 20) +#define GB_COUNT (1 << 30) +#define TB_COUNT (long(1) << 40) + namespace AM { // 运行状态 enum RunningStatus { @@ -88,4 +94,6 @@ bool isChineseChar(const QChar &character); PinyinInfo getPinYinInfoFromStr(const QString &words); void popupNormalSysNotify(const QString &summary, const QString &body); +// 格式化容量 +QString formatBytes(qint64 input, int prec); } // namespace AM