Skip to content

Commit

Permalink
fix: Error message during installation
Browse files Browse the repository at this point in the history
将无权限和不在本地两种情况分开处理,走各自的业务,触发不同信号,弹出准确的警告信息

Log: 修复安装时的错误提示

Bug: https://pms.uniontech.com/bug-view-258605.html
  • Loading branch information
yoho0623 authored and rb-union committed Sep 25, 2024
1 parent b370614 commit 9078aa6
Show file tree
Hide file tree
Showing 12 changed files with 349 additions and 268 deletions.
20 changes: 17 additions & 3 deletions src/deb-installer/manager/AddPackageThread.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,24 @@ void AddPackageThread::setSamePackageMd5(const QMap<QString, QByteArray> &packag
bool AddPackageThread::dealInvalidPackage(const QString &packagePath)
{
if (!Utils::checkPackageReadable(packagePath)) {
emit signalNotLocalPackage();
return false;
QFileInfo debFileIfo(packagePath);
// 查看包是否能够打开,无法打开说明包不在本地或无权限。
QFile outfile(packagePath.toUtf8());
outfile.open(QFile::ReadOnly);

if (!outfile.isOpen()) { // 打不开,文件不在本地或无安装权限
QFile::FileError error = outfile.error();
if (error == QFile::FileError::NoError) {
// 文件不存在或路径错误
emit signalNotLocalPackage();
return false;
} else {
//无安装权限
emit signalNotInstallablePackage();
return false;
}
}
}

return true;
}

Expand Down
7 changes: 7 additions & 0 deletions src/deb-installer/manager/AddPackageThread.h
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,13 @@ class AddPackageThread : public QThread
*/
void signalNotLocalPackage();

/**
* @brief notInstallablePackage 包无安装权限的信号
*
* 包无安装权限无法安装
*/
void signalNotInstallablePackage();

/**
* @brief packageAlreadyExists 当前包已经被添加到应用中
*/
Expand Down
22 changes: 20 additions & 2 deletions src/deb-installer/manager/packagesmanager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -319,6 +319,9 @@ PackagesManager::PackagesManager(QObject *parent)
//转发不是本地包的信号
connect(m_pAddPackageThread, &AddPackageThread::signalNotLocalPackage, this, &PackagesManager::signalNotLocalPackage);

//转发无安装权限的信号
connect(m_pAddPackageThread, &AddPackageThread::signalNotInstallablePackage, this, &PackagesManager::signalNotInstallablePackage);

//转发包已经添加的信号
connect(m_pAddPackageThread, &AddPackageThread::signalPackageAlreadyExists, this, &PackagesManager::signalPackageAlreadyExists);

Expand Down Expand Up @@ -1426,8 +1429,23 @@ bool PackagesManager::dealInvalidPackage(const QString &packagePath)
{
//判断路径信息是不是本地路径
if (!Utils::checkPackageReadable(packagePath)) {
emit signalNotLocalPackage();
return false;
QFileInfo debFileIfo(packagePath);
// 查看包是否能够打开,无法打开说明包不在本地或无权限。
QFile outfile(packagePath.toUtf8());
outfile.open(QFile::ReadOnly);

if (!outfile.isOpen()) { // 打不开,文件不在本地或无安装权限
QFile::FileError error = outfile.error();
if (error == QFile::FileError::NoError) {
// 文件不存在或路径错误
emit signalNotLocalPackage();
return false;
} else {
//无安装权限
emit signalNotInstallablePackage();
return false;
}
}
}
return true;
}
Expand Down
7 changes: 7 additions & 0 deletions src/deb-installer/manager/packagesmanager.h
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,13 @@ public slots:
*/
void signalNotLocalPackage();

/**
* @brief notInstallablePackage 包无安装权限的信号
*
* 包无安装权限无法安装
*/
void signalNotInstallablePackage();

/**
* @brief packageAlreadyExists 包重复添加的信号
*/
Expand Down
3 changes: 3 additions & 0 deletions src/deb-installer/model/deblistmodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,9 @@ void DebListModel::initAppendConnection()
//添加的包不在本地
connect(m_packagesManager, &PackagesManager::signalNotLocalPackage, this, &DebListModel::signalNotLocalPackage);

//添加的包无安装权限
connect(m_packagesManager, &PackagesManager::signalNotInstallablePackage, this, &DebListModel::signalNotInstallablePackage);

//要添加的包早就已经被添加到程序中
connect(m_packagesManager, &PackagesManager::signalPackageAlreadyExists, this, &DebListModel::signalPackageAlreadyExists);

Expand Down
8 changes: 8 additions & 0 deletions src/deb-installer/model/deblistmodel.h
Original file line number Diff line number Diff line change
Expand Up @@ -383,6 +383,14 @@ class DebListModel : public QAbstractListModel
*/
void signalNotLocalPackage();

/**
* @brief notInstallablePackage 包无安装权限的信号
*
* 包无安装权限无法安装
*/
void signalNotInstallablePackage();


/**
* @brief signalPackageCannotFind 包已经被移动的信号 通知前端发送浮动消息
* @param packageName 被移动的文件名
Expand Down
19 changes: 9 additions & 10 deletions src/deb-installer/utils/utils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -293,7 +293,7 @@ QString Utils::holdTextInRect(const QFont &font, const QString &srcText, const i
/*!
@brief 检测软件包 `packagePath` 是否可读,首先判断路径指向的挂载设备信息,
若为 gvfs 或 cifs 文件系统(文管当前及V6后的远程挂载系统),抛出false。
同时判断文件是否可读/读取权限,无对应权限抛出异常
同时判断文件是否有权限安装,无权限则抛出异常
@param[in] packagePath 软件包路径
@note 只能安装本地的软件包,samba/ftp等远程目录不允许。
Expand All @@ -316,22 +316,21 @@ bool Utils::checkPackageReadable(const QString &packagePath)
QFile outfile(packagePath.toUtf8());
outfile.open(QFile::ReadOnly);

if (!outfile.isOpen()) { // 打不开,文件不在本地或无权限
if (debFileIfo.permission(QFile::Permission::ReadOwner) && debFileIfo.permission(QFile::Permission::ReadUser)) {
if (!outfile.isOpen()) { // 打不开,文件不在本地或无安装权限
QFile::FileError error = outfile.error();
if (error == QFile::FileError::NoError) {
// 文件不存在或路径错误
qWarning() << "Package has permission but cannot open!";
// 文件有权限 打不开,说明不在本地
outfile.close();
return false;
} else {
//无安装权限
qWarning() << "Package has no read permission!";
return false;
}
} else { // 文件能打开,说明文件在本地且有权限
outfile.close();
return true;
}

// 文件在本地但是因为没有权限打不开
qWarning() << "Package has no read permission!";
outfile.close();
return false;
}

DebApplicationHelper *DebApplicationHelper::instance()
Expand Down
13 changes: 12 additions & 1 deletion src/deb-installer/view/pages/debinstaller.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -130,9 +130,12 @@ void DebInstaller::initConnections()
slotShowDdimFloatingMessage(tr("Installing other packages... Please open it later."));
});

//接收到添加无效包的信号则弹出无效包的弹窗
//接收到添加非本地包的信号则弹出无效包的弹窗
connect(m_fileListModel, &DebListModel::signalNotLocalPackage, this, &DebInstaller::slotShowNotLocalPackageMessage);

//接收到添加无安装权限包的信号则弹出无效包的弹窗
connect(m_fileListModel, &DebListModel::signalNotInstallablePackage, this, &DebInstaller::slotShowNotInstallablePackageMessage);

//接收到包已经添加的信号则弹出已添加的弹窗
connect(m_fileListModel, &DebListModel::signalPackageAlreadyExists, this, &DebInstaller::slotShowPkgExistMessage);

Expand Down Expand Up @@ -644,6 +647,14 @@ void DebInstaller::slotShowNotLocalPackageMessage()
DMessageManager::instance()->sendMessage(this, floatingMsg); //如果损坏,提示
}

void DebInstaller::slotShowNotInstallablePackageMessage()
{
DFloatingMessage *floatingMsg = new DFloatingMessage;
floatingMsg->setMessage(tr("No permission to access this folder"));
floatingMsg->setIcon(QIcon::fromTheme("di_warning"));
DMessageManager::instance()->sendMessage(this, floatingMsg); //如果损坏,提示
}

void DebInstaller::slotShowPkgExistMessage()
{
if (SingleInstallerApplication::mode == SingleInstallerApplication::DdimChannel && m_ddimView == nullptr) { //如果选择界面未创建,则表示是第一次进入且只有必装包和依赖包
Expand Down
5 changes: 5 additions & 0 deletions src/deb-installer/view/pages/debinstaller.h
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,11 @@ private slots:
*/
void slotShowNotLocalPackageMessage();

/**
* @brief slotShowNotInstallablePackageMessage 弹出无安装权限的消息通知
*/
void slotShowNotInstallablePackageMessage();

/**
* @brief slotShowPkgExistMessage 弹出包已存在的消息通知
*/
Expand Down
Loading

0 comments on commit 9078aa6

Please sign in to comment.