Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: update interface, ui and translations #264

Merged
merged 5 commits into from
Oct 11, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/deb-installer/manager/AddPackageThread.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ class AddPackageThread : public QThread
void signalAppendFinished();

// Manange package insert failed reason.
void signalAppendFailMessage(Pkg::AppendFailReason reason);
void signalAppendFailMessage(Pkg::AppendFailReason reason, Pkg::PackageType type = Pkg::Deb);

private:
// 要添加的软件包列表
Expand Down
22 changes: 2 additions & 20 deletions src/deb-installer/manager/packagesmanager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -832,7 +832,7 @@ PackageDependsStatus PackagesManager::getPackageDependsStatus(const int index)
break;
}

if (!m_dependInstallMark.contains(currentPackageMd5)) {
if (!m_dependInstallMark.contains(currentPackageMd5)) {
// replace the marker that the depends error
GlobalStatus::setWinePreDependsInstalling(true);

Expand Down Expand Up @@ -1537,25 +1537,7 @@ void PackagesManager::appendNoThread(const QStringList &packages, int allPackage
void PackagesManager::refreshPage(int validPkgCount)
{
// 获取当前已经添加到程序中的包的数量
int packageCount = m_preparedPackages.size();
// if (1 == packageCount) { //当前程序中只添加了一个包
// if (1 == validPkgCount) { //此次只有一个包将会被添加的程序中
// emit signalRefreshSinglePage(); //刷新单包安装界面

// } else if (validPkgCount > 1) { //当前程序中值添加了一个包,但是这次有不止一个包将会被添加到程序中
// emit signalSingle2MultiPage(); //刷新批量安装界面
// emit signalAppendStart(); //开始批量添加
// }
// } else if (2 == packageCount) {
// //当前程序中已经添加了两个包
// //1.第一次是添加了一个包,第二次又添加了多于一个包
// emit signalSingle2MultiPage(); //刷新批量安装界面
// emit signalAppendStart(); //发送批量添加信号
// } else {
// //此时批量安装界面已经刷新过。如果再添加,就只刷新model
// emit signalRefreshMultiPage();
// emit signalAppendStart();
// }
const int packageCount = m_preparedPackages.size();

Q_EMIT signalPackageCountChanged(packageCount);
// If current first append and only one package, will append directly.
Expand Down
2 changes: 1 addition & 1 deletion src/deb-installer/manager/packagesmanager.h
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ public slots:
////添加包相关信号
signals:
// Manange package insert failed reason.
void signalAppendFailMessage(Pkg::AppendFailReason reason);
void signalAppendFailMessage(Pkg::AppendFailReason reason, Pkg::PackageType type = Pkg::Deb);

/**
* @brief appendStart 批量安装开始添加包的信号
Expand Down
2 changes: 1 addition & 1 deletion src/deb-installer/model/abstract_package_list_model.h
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ class AbstractPackageListModel : public QAbstractListModel
void signalAppendStart();
void signalAppendFinished();
// manange package insert failed reason
void signalAppendFailMessage(Pkg::AppendFailReason reason);
void signalAppendFailMessage(Pkg::AppendFailReason reason, Pkg::PackageType type = Pkg::Deb);
// manage package appended and remove
void signalPackageCountChanged(int count);

Expand Down
4 changes: 3 additions & 1 deletion src/deb-installer/model/deblistmodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -297,6 +297,8 @@ QVariant DebListModel::data(const QModelIndex &index, int role) const
else
return Pkg::PackageOperationStatus::Prepare;
}
case PackageTypeRole:
return Pkg::Deb;
case PackageDependsDetailRole:
return QVariant::fromValue(m_packagesManager->getPackageDependsDetail(currentRow));
case Qt::SizeHintRole: // 设置当前index的大小
Expand Down Expand Up @@ -1370,7 +1372,7 @@ void DebListModel::slotUpWrongStatusRow()
installErrorPackages.append(iteratorpackageOperateStatus.key()); // 保存下标
}
// 保存安装失败的包
if (iteratorpackageOperateStatus.value() == Success) {
if (iteratorpackageOperateStatus.value() == Pkg::PackageOperationStatus::Success) {
installSuccessPackages.append(iteratorpackageOperateStatus.key());
}
}
Expand Down
21 changes: 13 additions & 8 deletions src/deb-installer/model/packagelistview.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -273,6 +273,19 @@ void PackagesListView::focusInEvent(QFocusEvent *event)
}
}

void PackagesListView::focusOutEvent(QFocusEvent *event)
{
// not change focus index when the right menu pop-up.
if (event->reason() != Qt::PopupFocusReason) {
this->clearSelection();
m_currentIndex = -1;
m_currModelIndex = this->model()->index(-1, -1);
emit signalCurrentIndexRow(-1);
}

DListView::focusOutEvent(event);
}

/**
* @brief event 事件
*/
Expand All @@ -288,13 +301,5 @@ bool PackagesListView::event(QEvent *event)
}
}

// 焦点切出事件
if (event->type() == QEvent::FocusOut) {
this->clearSelection();
m_currentIndex = -1;
m_currModelIndex = this->model()->index(-1, -1);
emit signalCurrentIndexRow(-1);
}

return DListView::event(event);
}
2 changes: 2 additions & 0 deletions src/deb-installer/model/packagelistview.h
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,8 @@ public slots:
*/
void focusInEvent(QFocusEvent *event) override;

void focusOutEvent(QFocusEvent *event) override;

/**
* @brief event 事件
*/
Expand Down
8 changes: 5 additions & 3 deletions src/deb-installer/model/packageslistdelegate.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

DWIDGET_USE_NAMESPACE

//delegate 直接传入 model 解决多次创建model packagemanager导致崩溃的问题
// delegate 直接传入 model 解决多次创建model packagemanager导致崩溃的问题
PackagesListDelegate::PackagesListDelegate(AbstractPackageListModel *m_model, QAbstractItemView *parent)
: DStyledItemDelegate(parent)
, m_fileListModel(m_model) // 从新new一个对象修改为获取传入的对象
Expand Down Expand Up @@ -137,7 +137,8 @@ void PackagesListDelegate::paint(QPainter *painter, const QStyleOptionViewItem &

QRect bg_rect = option.rect;

QIcon icon = QIcon::fromTheme("application-x-deb");
Pkg::PackageType type = index.data(AbstractPackageListModel::PackageTypeRole).value<Pkg::PackageType>();
QIcon icon = Utils::packageIcon(type);

// draw package icon
const int x = 6;
Expand Down Expand Up @@ -248,7 +249,8 @@ void PackagesListDelegate::paint(QPainter *painter, const QStyleOptionViewItem &
forground.setColor(palette.color(colorGroup, DPalette::TextWarning)); // 安装失败或依赖错误
}
if (dependsStat == Pkg::DependsStatus::DependsBreak || dependsStat == Pkg::DependsStatus::DependsAuthCancel ||
dependsStat == Pkg::DependsStatus::DependsVerifyFailed || dependsStat == Pkg::DependsStatus::ArchBreak // 添加对架构不匹配的处理
dependsStat == Pkg::DependsStatus::DependsVerifyFailed ||
dependsStat == Pkg::DependsStatus::ArchBreak // 添加对架构不匹配的处理
// || dependsStat == Pkg::DependsStatus::Prohibit //增加应用黑名单
) {
info_str = index.data(DebListModel::PackageFailReasonRole).toString();
Expand Down
4 changes: 2 additions & 2 deletions src/deb-installer/model/proxy_package_list_model.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -456,11 +456,11 @@ void ProxyPackageListModel::onSourceDataChanged(const QModelIndex &topLeft,

const int leftCount = info.rightCount - info.count;
const int proxyTopIndex = leftCount + topLeft.row();
const int proxyBottonIndex = leftCount + bottomRight.row();
const int proxyBottomIndex = leftCount + bottomRight.row();

// check index valid interal
const QModelIndex proxyTopLeft = this->index(proxyTopIndex);
const QModelIndex proxyBottomRight = this->index(proxyBottonIndex);
const QModelIndex proxyBottomRight = this->index(proxyBottomIndex);

if (proxyTopLeft.isValid() && proxyBottomRight.isValid()) {
Q_EMIT dataChanged(proxyTopLeft, proxyBottomRight, roles);
Expand Down
22 changes: 15 additions & 7 deletions src/deb-installer/uab/uab_backend.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ static const QString kUabName = "name";
static const QString kUabVersion = "version";
static const QString kUabArch = "arch";
static const QString kUabChannel = "channel";
static const QString kUabModule = "module";
static const QString kUabDescription = "description";

UabBackend::UabBackend(QObject *parent)
Expand Down Expand Up @@ -84,11 +85,11 @@ UabPkgInfo::Ptr UabBackend::packageFromMetaData(const QString &uabPath, QString
}

/**
@brief Find package named \a packageId , the return package is
the latest version of the installed packages.
@brief Find package named \a packageId , and version equal \a version
If \a version is empty, the return package is the latest version of the installed packages.
@return Uab package pointer, or null if not found.
*/
UabPkgInfo::Ptr UabBackend::findPackage(const QString &packageId)
UabPkgInfo::Ptr UabBackend::findPackage(const QString &packageId, const QString &version)
{
if (!backendInited()) {
m_lastError = QString("uab backend not init");
Expand All @@ -104,8 +105,13 @@ UabPkgInfo::Ptr UabBackend::findPackage(const QString &packageId)
packageId,
[](const QString &findPkg, const UabPkgInfo::Ptr &uabPtr) { return findPkg <= uabPtr->id; });

if ((m_packageList.end() != itr) && ((*itr)->id == packageId)) {
return *itr;
// versions with the same ID are listed in descending order
while ((m_packageList.end() != itr) && ((*itr)->id == packageId)) {
if (version.isEmpty() || ((*itr)->version == version)) {
return *itr;
}

itr++;
}

return {};
Expand Down Expand Up @@ -191,6 +197,7 @@ bool UabBackend::parsePackagesFromRawJson(const QByteArray &jsonData, QList<UabP
uabPtr->appName = item.value(kUabName).toString();
uabPtr->version = item.value(kUabVersion).toString();
uabPtr->channel = item.value(kUabChannel).toString();
uabPtr->module = item.value(kUabModule).toString();
uabPtr->description = item.value(kUabDescription).toString();

QJsonArray archArray = item.value(kUabArch).toArray();
Expand All @@ -212,7 +219,6 @@ bool UabBackend::parsePackagesFromRawOutput(const QByteArray &output, QList<UabP
stream.readLine();

QString arch;
QString deprecated;

while (!stream.atEnd()) {
auto uabPtr = UabPkgInfo::Ptr::create();
Expand All @@ -223,7 +229,7 @@ bool UabBackend::parsePackagesFromRawOutput(const QByteArray &output, QList<UabP
stream >> uabPtr->version;
stream >> arch;
stream >> uabPtr->channel;
stream >> deprecated;
stream >> uabPtr->module;

uabPtr->architecture.append(arch);
// to the end of the line
Expand Down Expand Up @@ -354,6 +360,7 @@ UabPkgInfo::Ptr UabBackend::packageFromMetaJson(const QByteArray &json, QString
uabPtr->version = info[kUabVersion].toString();
uabPtr->description = info[kUabDescription].toString();
uabPtr->channel = info[kUabChannel].toString();
uabPtr->module = info[kUabModule].toString();

const QJsonArray archArray = info[kUabArch].toArray();
for (const QJsonValue &archValue : archArray) {
Expand Down Expand Up @@ -400,6 +407,7 @@ Q_CORE_EXPORT QDebug operator<<(QDebug out, const Uab::UabPkgInfo &uabPkg)
out << Uab::kUabVersion << ":" << uabPkg.version << ";";
out << Uab::kUabArch << ":" << uabPkg.architecture << ";";
out << Uab::kUabChannel << ":" << uabPkg.channel << ";";
out << Uab::kUabModule << ":" << uabPkg.module << ";";
out << Uab::kUabDescription << ":" << uabPkg.description << ";";
out << "filePath:" << uabPkg.filePath << ";";

Expand Down
14 changes: 7 additions & 7 deletions src/deb-installer/uab/uab_backend.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,21 +20,21 @@ class UabBackend : public QObject
public:
static UabBackend *instance();

UabPkgInfo::Ptr findPackage(const QString &packageId);
[[nodiscard]] UabPkgInfo::Ptr findPackage(const QString &packageId, const QString &version = {});

void initBackend(bool async = true);
bool backendInited() const;
[[nodiscard]] bool backendInited() const;
Q_SIGNAL void backendInitFinsihed();

bool linglongExists() const;
[[nodiscard]] bool linglongExists() const;
bool recheckLinglongExists();

QString lastError() const;
[[nodiscard]] QString lastError() const;
void dumpPackageList() const;

static UabPkgInfo::Ptr packageFromMetaData(const QString &uabPath, QString *errorString = nullptr);
static UabPkgInfo::Ptr packageFromMetaJson(const QByteArray &json, QString *errorString = nullptr);
static QByteArray uabExecuteOutput(const QString &uabPath, QString *errorString = nullptr);
[[nodiscard]] static UabPkgInfo::Ptr packageFromMetaData(const QString &uabPath, QString *errorString = nullptr);
[[nodiscard]] static UabPkgInfo::Ptr packageFromMetaJson(const QByteArray &json, QString *errorString = nullptr);
[[nodiscard]] static QByteArray uabExecuteOutput(const QString &uabPath, QString *errorString = nullptr);

// internal
Q_SLOT void backendInitData(const QList<UabPkgInfo::Ptr> &packageList, const QSet<QString> &archs);
Expand Down
Loading
Loading