diff --git a/.gitignore b/.gitignore index 7c158e3d2..7fac7afc8 100644 --- a/.gitignore +++ b/.gitignore @@ -103,3 +103,6 @@ so(cmake).sh tests/test_output translations/*.qm build + +# vscode +.vscode/ \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 899b464d9..0982cc5b4 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -57,7 +57,10 @@ void showWatermark(const QString &sJson, MainWindow *w) if(mapdata.contains("wndWatermark")) { mapwaterMark = mapdata.value("wndWatermark").toMap(); } - if(mapwaterMark.isEmpty()) return; + if(mapwaterMark.isEmpty()) { + qDebug() << "no watermark data"; + return; + } #ifdef DTKWIDGET_CLASS_DWaterMarkHelper auto ins = DWaterMarkHelper::instance(); @@ -117,8 +120,11 @@ void showWatermark(const QString &sJson, MainWindow *w) int main(int argc, char *argv[]) { + qDebug() << "Application starting with arguments:" << QCoreApplication::arguments(); + //for qt5platform-plugins load DPlatformIntegration or DPlatformIntegrationParent if (!QString(qgetenv("XDG_CURRENT_DESKTOP")).toLower().startsWith("deepin")) { + qDebug() << "Setting XDG_CURRENT_DESKTOP to Deepin"; setenv("XDG_CURRENT_DESKTOP", "Deepin", 1); } bool orderObject = false; @@ -127,10 +133,11 @@ int main(int argc, char *argv[]) QGuiApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); // 使用高分屏 - // 初始化DTK应用程序属性 + qDebug() << "Initializing DTK application properties"; CompressorApplication app(argc, argv); app.setOrganizationName("deepin"); app.setApplicationName("deepin-compressor"); + qDebug() << "Loading application translations"; app.loadTranslator(); app.setApplicationVersion(DApplication::buildVersion(QDate::currentDate().toString("yyyyMMdd"))); app.setApplicationAcknowledgementPage("https://www.deepin.org/original/deepin-compressor/"); @@ -140,8 +147,10 @@ int main(int argc, char *argv[]) app.setApplicationDisplayName(DApplication::translate("Main", "Archive Manager")); app.setApplicationDescription(DApplication::translate("Main", "Archive Manager is a fast and lightweight application for creating and extracting archives.")); #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + qDebug() << "Initializing application settings for Qt5"; DApplicationSettings settings(&app); #endif + qDebug() << "Setting up logging system"; DLogManager::registerConsoleAppender(); DLogManager::registerFileAppender(); @@ -155,7 +164,7 @@ int main(int argc, char *argv[]) app.setProductIcon(appIcon); app.setWindowIcon(appIcon); - // 命令行参数的解析 + qDebug() << "Initializing command line parser"; QCommandLineParser parser; parser.setApplicationDescription("Deepin Compressor."); parser.addHelpOption(); //添加帮助信息(-h,--help),这个方法由QCommandLineParser自动处理 @@ -170,67 +179,83 @@ int main(int argc, char *argv[]) QStringList newfilelist; if(argc == 3 && QString(argv[2]).startsWith("--param=")) { + qDebug() << "Processing WPS order parameters"; orderObject = true; QString slast = QString(argv[2]).remove(0,strlen("--param=")); //接收时需要转换为可用数据 - qInfo() << "last:" << slast; + qInfo() << "Base64 encoded parameter:" << slast; sJsonStr = QByteArray::fromBase64(slast.toLatin1().data()).data(); -// sJsonStr = sList.last(); - qInfo() << "json:" << sJsonStr; + qInfo() << "Decoded JSON parameter:" << sJsonStr; QString file = argv[1]; if (file.contains("file://")) { + qDebug() << "Removing file:// prefix"; file.remove("file://"); } newfilelist.append(file); newfilelist.append(QString(argv[2])); } else { + qDebug() << "Processing standard command line arguments"; parser.process(app); foreach (QString file, parser.positionalArguments()) { if (file.contains("file://")) { + qDebug() << "Removing file:// prefix from:" << file; file.remove("file://"); } newfilelist.append(file); } } - qInfo() << "传入参数:" << newfilelist; + qInfo() << "Final file list to process:" << newfilelist; if (orderObject) { - //启动由wps控制,本地不做控制 + qDebug() << "Removing WPS parameter from file list"; newfilelist.removeLast(); + qDebug() << "WPS order object flag:" << orderObject; } // 创建主界面 MainWindow w; showWatermark(sJsonStr, &w); - // 默认居中显示(使用dbus判断是否为第一个进程,第一个进程居中显示) + qDebug() << "Creating DBus adaptor and connecting to session bus"; ApplicationAdaptor adaptor(&app); QDBusConnection dbus = QDBusConnection::sessionBus(); + if(!orderObject){ + qDebug() << "Registering standard DBus service"; if (dbus.registerService("com.deepin.compressor")) { + qDebug() << "DBus service registered successfully, moving window to center"; Dtk::Widget::moveToCenter(&w); + } else { + qWarning() << "Failed to register standard DBus service"; } } else { - if (dbus.registerService("com.deepin.compressor"+QString::number(QGuiApplication::applicationPid()))) { - dbus.registerObject("/"+QString::number(QGuiApplication::applicationPid()), &app); - adaptor.setCompressFile(newfilelist.first()); - Dtk::Widget::moveToCenter(&w); - w.setProperty(ORDER_JSON, sJsonStr); + qDebug() << "Registering WPS-specific DBus service"; + QString serviceName = "com.deepin.compressor"+QString::number(QGuiApplication::applicationPid()); + if (dbus.registerService(serviceName)) { + qDebug() << "WPS DBus service registered successfully"; + QString objectPath = "/"+QString::number(QGuiApplication::applicationPid()); + dbus.registerObject(objectPath, &app); + adaptor.setCompressFile(newfilelist.first()); + Dtk::Widget::moveToCenter(&w); + w.setProperty(ORDER_JSON, sJsonStr); + qDebug() << "Window properties set for WPS mode"; + } else { + qWarning() << "Failed to register WPS DBus service"; } - QDBusConnection dbusConnection = QDBusConnection::sessionBus(); - if (dbusConnection.connect("com.wps.cryptfs" - , "/com/wps/cryptfs" - , "cryptfs.method.Type" - , "activateProcess" - , &adaptor - , SLOT(onActiveWindow(qint64)) - )) + qDebug() << "Connecting to WPS cryptfs DBus interface"; + QDBusConnection dbusConnection = QDBusConnection::sessionBus(); + if (dbusConnection.connect("com.wps.cryptfs", + "/com/wps/cryptfs", + "cryptfs.method.Type", + "activateProcess", + &adaptor, + SLOT(onActiveWindow(qint64)))) { - qInfo() << "DBus connect success!"; + qInfo() << "DBus connection to WPS cryptfs established successfully"; } else { - qInfo() << "DBus connect failed!"; - }; + qCritical() << "Failed to connect to WPS cryptfs DBus interface"; + } } diff --git a/src/source/DebugTimeManager.cpp b/src/source/DebugTimeManager.cpp index 0c0e1b2f3..67ea68143 100644 --- a/src/source/DebugTimeManager.cpp +++ b/src/source/DebugTimeManager.cpp @@ -13,32 +13,42 @@ DebugTimeManager *DebugTimeManager::s_Instance = nullptr; DebugTimeManager::DebugTimeManager() { - + qDebug() << "DebugTimeManager instance created"; } void DebugTimeManager::clear() { + qDebug() << "Clearing all debug points"; m_MapPoint.clear(); + qDebug() << "Debug points cleared"; } void DebugTimeManager::beginPointQt(const QString &point, const QString &status) { + qDebug() << "Begin Qt debug point:" << point << "status:" << status; PointInfo info; info.desc = status; info.time = QDateTime::currentMSecsSinceEpoch(); m_MapPoint.insert(point, info); + qDebug() << "Qt debug point started"; } + void DebugTimeManager::endPointQt(const QString &point) { + qDebug() << "End Qt debug point:" << point; if (m_MapPoint.find(point) != m_MapPoint.end()) { m_MapPoint[point].time = QDateTime::currentMSecsSinceEpoch() - m_MapPoint[point].time; qInfo() << QString("[GRABPOINT] %1 %2 time=%3ms").arg(point).arg(m_MapPoint[point].desc).arg(m_MapPoint[point].time); m_MapPoint.remove(point); + qDebug() << "Qt debug point ended successfully"; + } else { + qWarning() << "Qt debug point not found:" << point; } } void DebugTimeManager::beginPointLinux(const QString &point, const QString &status) { + qDebug() << "Begin Linux debug point:" << point << "status:" << status; struct timeval tv; gettimeofday(&tv, nullptr); @@ -46,14 +56,20 @@ void DebugTimeManager::beginPointLinux(const QString &point, const QString &stat info.desc = status; info.time = tv.tv_sec * 1000 + tv.tv_usec / 1000; m_MapPoint.insert(point, info); + qDebug() << "Linux debug point started"; } + void DebugTimeManager::endPointLinux(const QString &point) { + qDebug() << "End Linux debug point:" << point; if (m_MapPoint.find(point) != m_MapPoint.end()) { struct timeval tv; gettimeofday(&tv, nullptr); m_MapPoint[point].time = tv.tv_sec * 1000 + tv.tv_usec / 1000 - m_MapPoint[point].time; qInfo() << QString("[GRABPOINT] %1 %2 time=%3ms").arg(point).arg(m_MapPoint[point].desc).arg(m_MapPoint[point].time); m_MapPoint.remove(point); + qDebug() << "Linux debug point ended successfully"; + } else { + qWarning() << "Linux debug point not found:" << point; } } diff --git a/src/source/archivemanager/archivejob.cpp b/src/source/archivemanager/archivejob.cpp index e9449270d..09ee8d8c7 100644 --- a/src/source/archivemanager/archivejob.cpp +++ b/src/source/archivemanager/archivejob.cpp @@ -4,16 +4,17 @@ // SPDX-License-Identifier: GPL-3.0-or-later #include "archivejob.h" +#include ArchiveJob::ArchiveJob(QObject *parent) : QObject(parent) { - + qDebug() << "ArchiveJob object created"; } ArchiveJob::~ArchiveJob() { - + qDebug() << "ArchiveJob object destroyed"; } void ArchiveJob::kill() @@ -22,6 +23,7 @@ void ArchiveJob::kill() // 设置结束标志 m_eFinishedType = PFT_Cancel; m_eErrorType = ET_UserCancelOpertion; + qWarning() << "Archive job cancelled by user"; finishJob(); } } @@ -33,6 +35,7 @@ bool ArchiveJob::status() void ArchiveJob::finishJob() { + qDebug() << "Archive job finished with status:" << m_eFinishedType; emit signalJobFinshed(); deleteLater(); } diff --git a/src/source/archivemanager/archivemanager.cpp b/src/source/archivemanager/archivemanager.cpp index 075933c6e..ee4c52fc9 100644 --- a/src/source/archivemanager/archivemanager.cpp +++ b/src/source/archivemanager/archivemanager.cpp @@ -24,11 +24,12 @@ QAtomicPointer ArchiveManager::m_instance = nullptr;//原子指 ArchiveManager::ArchiveManager(QObject *parent) : QObject(parent) { - + qDebug() << "ArchiveManager instance created"; } ArchiveManager::~ArchiveManager() { + qDebug() << "ArchiveManager instance destroyed"; SAFE_DELETE_ELE(m_pArchiveJob); SAFE_DELETE_ELE(m_pInterface); SAFE_DELETE_ELE(m_pTempInterface); @@ -62,12 +63,15 @@ void ArchiveManager::destory_instance() bool ArchiveManager::createArchive(const QList &files, const QString &strDestination, const CompressOptions &stOptions, UiTools::AssignPluginType eType) { + qDebug() << "Starting createArchive operation for destination:" << strDestination; // 重新创建压缩包首先释放之前的interface if (m_pInterface != nullptr) { + qDebug() << "Clearing previous archive interface"; delete m_pInterface; m_pInterface = nullptr; } if(DFMStandardPaths::pathControl(strDestination)) { + qWarning() << "Path control check failed for destination:" << strDestination; return false; } m_pTempInterface = UiTools::createInterface(strDestination, true, eType); @@ -83,14 +87,17 @@ bool ArchiveManager::createArchive(const QList &files, const QString m_pArchiveJob = pCreateJob; pCreateJob->start(); + qInfo() << "CreateArchive operation started successfully"; return true; } + qWarning() << "Failed to create archive interface"; return false; } bool ArchiveManager::loadArchive(const QString &strArchiveFullPath, UiTools::AssignPluginType eType) { + qDebug() << "Starting loadArchive operation for file:" << strArchiveFullPath; QJsonObject obj{ {"tid", EventLogUtils::LoadCompressFile}, {"operate", "LoadCompressFile"}, @@ -99,6 +106,7 @@ bool ArchiveManager::loadArchive(const QString &strArchiveFullPath, UiTools::Ass EventLogUtils::get().writeLogs(obj); // 重新加载首先释放之前的interface if (m_pInterface != nullptr) { + qDebug() << "Clearing previous archive interface"; delete m_pInterface; m_pInterface = nullptr; } @@ -115,9 +123,11 @@ bool ArchiveManager::loadArchive(const QString &strArchiveFullPath, UiTools::Ass m_pArchiveJob = pLoadJob; pLoadJob->start(); + qInfo() << "LoadArchive operation started successfully"; return true; } + qWarning() << "Failed to load archive interface"; return false; } @@ -456,6 +466,10 @@ void ArchiveManager::slotJobFinished() PluginFinishType eFinishType = m_pArchiveJob->m_eFinishedType; ErrorType eErrorType = m_pArchiveJob->m_eErrorType; + qInfo() << "Job finished - Type:" << eJobType + << "FinishType:" << eFinishType + << "ErrorType:" << eErrorType; + // 释放job m_pArchiveJob->deleteLater(); m_pArchiveJob = nullptr; @@ -466,4 +480,5 @@ void ArchiveManager::slotJobFinished() // 释放临时记录的interface SAFE_DELETE_ELE(m_pTempInterface); + qDebug() << "Temporary interface cleared"; } diff --git a/src/source/archivemanager/batchjob.cpp b/src/source/archivemanager/batchjob.cpp index e6ade1b74..12de83852 100644 --- a/src/source/archivemanager/batchjob.cpp +++ b/src/source/archivemanager/batchjob.cpp @@ -13,11 +13,12 @@ BatchJob::BatchJob(QObject *parent) : ArchiveJob(parent) { - + qDebug() << "BatchJob instance created"; } BatchJob::~BatchJob() { + qDebug() << "BatchJob instance destroyed"; clearSubjobs(); } @@ -92,6 +93,7 @@ bool BatchJob::status() BatchExtractJob::BatchExtractJob(QObject *parent) : BatchJob(parent) { + qDebug() << "BatchExtractJob instance created"; m_eJobType = JT_BatchExtract; } @@ -102,23 +104,28 @@ BatchExtractJob::~BatchExtractJob() void BatchExtractJob::start() { + qDebug() << "Starting batch extraction with" << subjobs().count() << "jobs"; if (subjobs().count() == 0) { + qWarning() << "No subjobs to start"; return; } m_iCurArchiveIndex = 0; m_pCurJob = subjobs().at(0); + qDebug() << "Starting first subjob"; m_pCurJob->start(); } void BatchExtractJob::setExtractPath(const QString &strPath/*, bool bAutoCreatDir*/) { + qDebug() << "Setting extract path to:" << strPath; m_strExtractPath = strPath; // m_bAutoCreatDir = bAutoCreatDir; } bool BatchExtractJob::setArchiveFiles(const QStringList &listFile) { + qDebug() << "Setting archive files list, count:" << listFile.count(); m_listFiles = listFile; m_qBatchTotalSize = 0; m_iArchiveCount = m_listFiles.count(); @@ -127,13 +134,18 @@ bool BatchExtractJob::setArchiveFiles(const QStringList &listFile) // 创建解压元素 foreach (QString strFileName, listFile) { QFileInfo fileInfo(strFileName); + qDebug() << "Processing archive file:" << fileInfo.fileName(); if (addExtractItem(fileInfo)) { bResult = true; // 计算压缩包总大小 m_qBatchTotalSize += fileInfo.size(); + qDebug() << "Added extract item for:" << fileInfo.fileName(); + } else { + qWarning() << "Failed to add extract item for:" << fileInfo.fileName(); } } + qDebug() << "Total batch size:" << m_qBatchTotalSize << "bytes"; return bResult; } @@ -217,12 +229,16 @@ void BatchExtractJob::slotHandleSingleJobCurFileName(const QString &strName) void BatchExtractJob::slotHandleSingleJobFinished() { if (m_pCurJob != nullptr) { + qDebug() << "Single job finished - Type:" << m_pCurJob->m_eJobType + << "Result:" << m_pCurJob->m_eFinishedType; + if (PFT_Error == m_pCurJob->m_eFinishedType || PFT_Cancel == m_pCurJob->m_eFinishedType) { // 获取结束结果 m_eJobType = m_pCurJob->m_eJobType; m_eFinishedType = m_pCurJob->m_eFinishedType; m_eErrorType = m_pCurJob->m_eErrorType; + qWarning() << "Job failed or cancelled - ErrorType:" << m_eErrorType; // 子job错误或取消,发送结束信号 emit signalJobFinshed(); return; @@ -232,12 +248,14 @@ void BatchExtractJob::slotHandleSingleJobFinished() removeSubjob(m_pCurJob); if (!hasSubjobs()) { + qDebug() << "All subjobs completed"; // 若没有子job,发送结束信号 emit signalJobFinshed(); } else { ++m_iCurArchiveIndex; QFileInfo curFileInfo(m_listFiles[m_iCurArchiveIndex]); + qDebug() << "Starting next subjob for:" << curFileInfo.fileName(); // 还存在子job,执行子job操作 m_dLastPercentage += double(curFileInfo.size()) / m_qBatchTotalSize * 100; diff --git a/src/source/archivemanager/singlejob.cpp b/src/source/archivemanager/singlejob.cpp index c6f5da0e2..375bd0ac8 100644 --- a/src/source/archivemanager/singlejob.cpp +++ b/src/source/archivemanager/singlejob.cpp @@ -27,12 +27,14 @@ SingleJob::SingleJob(ReadOnlyArchiveInterface *pInterface, QObject *parent) , m_pInterface(pInterface) , d(new SingleJobThread(this)) { - + qDebug() << "SingleJob instance created, interface:" << pInterface; } SingleJob::~SingleJob() { + qDebug() << "SingleJob instance destroyed"; if (d->isRunning()) { + qDebug() << "Stopping worker thread"; d->quit(); // 线程安全退出,不能使用terminate强行退出 d->wait(); } @@ -42,61 +44,81 @@ SingleJob::~SingleJob() void SingleJob::start() { + qDebug() << "Starting job, type:" << m_eJobType; jobTimer.start(); // 若插件指针为空,立即异常退出 if (nullptr == m_pInterface) { + qWarning() << "Interface is null, aborting job"; slotFinished(PFT_Error); return; } // 判断是否通过线程的方式调用 if (m_pInterface->waitForFinished()) { + qDebug() << "Executing work directly"; doWork(); // 直接执行操作 } else { + qDebug() << "Starting worker thread"; d->start(); // 开启线程,执行操作 } } void SingleJob::doPause() { + qDebug() << "Pausing job"; // 调用插件暂停接口 if (m_pInterface) { + qDebug() << "Calling interface pause operation"; m_pInterface->pauseOperation(); + } else { + qWarning() << "Interface is null, cannot pause"; } } void SingleJob::doContinue() { + qDebug() << "Resuming job"; // 调用插件继续接口 if (m_pInterface) { + qDebug() << "Calling interface continue operation"; m_pInterface->continueOperation(); + } else { + qWarning() << "Interface is null, cannot continue"; } } bool SingleJob::status() { + qDebug() << "Checking job status"; // 调用插件继续接口 if (m_pInterface) { - return m_pInterface->status(); + bool status = m_pInterface->status(); + qDebug() << "Job status:" << status; + return status; } + qWarning() << "Interface is null, returning false status"; return false; } SingleJobThread *SingleJob::getdptr() { + qDebug() << "Getting worker thread pointer"; return d; } bool SingleJob::doKill() { + qDebug() << "Killing job, type:" << m_eJobType; if (nullptr == m_pInterface) { + qWarning() << "Interface is null, cannot kill job"; return false; } const bool killed = m_pInterface->doKill(); if (killed) { + qDebug() << "Job killed successfully"; return true; } @@ -106,25 +128,32 @@ bool SingleJob::doKill() d->wait(1000); //阻塞1s或阻塞到线程结束(取小) } + qDebug() << "Job kill completed"; return true; } void SingleJob::initConnections() { + qDebug() << "Initializing signal connections"; connect(m_pInterface, &ReadOnlyArchiveInterface::signalFinished, this, &SingleJob::slotFinished, Qt::ConnectionType::UniqueConnection); connect(m_pInterface, &ReadOnlyArchiveInterface::signalprogress, this, &SingleJob::signalprogress, Qt::ConnectionType::UniqueConnection); connect(m_pInterface, &ReadOnlyArchiveInterface::signalCurFileName, this, &SingleJob::signalCurFileName, Qt::ConnectionType::UniqueConnection); connect(m_pInterface, &ReadOnlyArchiveInterface::signalFileWriteErrorName, this, &SingleJob::signalFileWriteErrorName, Qt::ConnectionType::UniqueConnection); connect(m_pInterface, &ReadOnlyArchiveInterface::signalQuery, this, &SingleJob::signalQuery, Qt::ConnectionType::AutoConnection); + qDebug() << "Signal connections initialized"; } void SingleJob::slotFinished(PluginFinishType eType) { - qInfo() << "Job finished, result:" << eType << ", time:" << jobTimer.elapsed() << "ms"; + qInfo() << "Job finished, type:" << m_eJobType + << ", result:" << eType + << ", time:" << jobTimer.elapsed() << "ms"; m_eFinishedType = eType; - if (m_pInterface) + if (m_pInterface) { m_eErrorType = m_pInterface->errorType(); + qDebug() << "Error type:" << m_eErrorType; + } emit signalJobFinshed(); } @@ -133,23 +162,29 @@ void SingleJob::slotFinished(PluginFinishType eType) LoadJob::LoadJob(ReadOnlyArchiveInterface *pInterface, QObject *parent) : SingleJob(pInterface, parent) { + qDebug() << "LoadJob instance created"; m_eJobType = JT_Load; initConnections(); } LoadJob::~LoadJob() { - + qDebug() << "LoadJob instance destroyed"; } void LoadJob::doWork() { + qDebug() << "LoadJob starting work"; if (m_pInterface) { PluginFinishType eType = m_pInterface->list(); + qDebug() << "List operation completed, result:" << eType; if (!(m_pInterface->waitForFinished())) { + qDebug() << "Emitting finished signal"; slotFinished(eType); } + } else { + qWarning() << "Interface is null in LoadJob"; } } @@ -170,18 +205,21 @@ AddJob::~AddJob() void AddJob::doWork() { + qDebug() << "AddJob starting work, files count:" << m_vecFiles.size(); ReadWriteArchiveInterface *pWriteInterface = dynamic_cast(m_pInterface); if (nullptr == pWriteInterface) { + qWarning() << "Failed to cast to ReadWriteArchiveInterface"; return; } PluginFinishType eType = pWriteInterface->addFiles(m_vecFiles, m_stCompressOptions); + qDebug() << "Add files operation completed, result:" << eType; if (!(pWriteInterface->waitForFinished())) { + qDebug() << "Emitting finished signal"; slotFinished(eType); } - } // 创建压缩包操作 @@ -201,19 +239,22 @@ CreateJob::~CreateJob() void CreateJob::doWork() { + qDebug() << "CreateJob starting work, files count:" << m_vecFiles.size(); ReadWriteArchiveInterface *pWriteInterface = dynamic_cast(m_pInterface); if (pWriteInterface == nullptr) { + qWarning() << "Failed to cast to ReadWriteArchiveInterface"; return; } // 调用压缩接口 PluginFinishType eType = pWriteInterface->addFiles(m_vecFiles, m_stCompressOptions); + qDebug() << "Create archive operation completed, result:" << eType; if (!(pWriteInterface->waitForFinished())) { + qDebug() << "Emitting finished signal"; slotFinished(eType); } - } bool CreateJob::doKill() @@ -280,16 +321,22 @@ ExtractJob::~ExtractJob() void ExtractJob::doWork() { + qDebug() << "ExtractJob starting work, files count:" << m_vecFiles.size(); if (m_pInterface) { PluginFinishType eType = m_pInterface->extractFiles(m_vecFiles, m_stExtractionOptions); + qDebug() << "Extract operation completed, result:" << eType; if (!(m_pInterface->waitForFinished())) { + qDebug() << "Emitting finished signal"; slotFinished(eType); } else { if (PFT_Error == eType) { + qWarning() << "Extract operation failed"; errorcode = false; } } + } else { + qWarning() << "Interface is null in ExtractJob"; } } diff --git a/src/source/common/calculatesizethread.cpp b/src/source/common/calculatesizethread.cpp index 81bc4085a..d4f01a7e4 100644 --- a/src/source/common/calculatesizethread.cpp +++ b/src/source/common/calculatesizethread.cpp @@ -4,6 +4,7 @@ // SPDX-License-Identifier: GPL-3.0-or-later #include "calculatesizethread.h" +#include #include #include @@ -20,6 +21,7 @@ CalculateSizeThread::CalculateSizeThread(const QStringList &listfiles, const QSt , m_listAddEntry(listAddEntry) , m_stOptions(stOptions) { + qDebug() << "CalculateSizeThread initialized with" << listfiles.size() << "files to process"; qRegisterMetaType>("QList"); qRegisterMetaType("CompressOptions"); } @@ -31,10 +33,12 @@ void CalculateSizeThread::set_thread_stop(bool thread_stop) void CalculateSizeThread::run() { + qDebug() << "CalculateSizeThread::run() started"; QElapsedTimer time1; time1.start(); foreach (QString file, m_files) { if (m_thread_stop) { + qDebug() << "CalculateSizeThread stopped by request"; return; } @@ -53,6 +57,7 @@ void CalculateSizeThread::run() // 待压缩文件已经不存在 if (!fileInfo.exists()) { + qWarning() << "File not exists:" << fileInfo.absoluteFilePath(); if (fileInfo.isSymLink()) { emit signalError(tr("The original file of %1 does not exist, please check and try again").arg(fileInfo.absoluteFilePath()), fileInfo.absoluteFilePath()); } else { @@ -65,6 +70,7 @@ void CalculateSizeThread::run() // 待压缩文件不可读 if (!fileInfo.isReadable()) { + qWarning() << "File not readable:" << fileInfo.absoluteFilePath(); emit signalError(tr("You do not have permission to compress %1").arg(fileInfo.absoluteFilePath()), fileInfo.absoluteFilePath()); set_thread_stop(true); @@ -94,6 +100,7 @@ void CalculateSizeThread::run() // 等待线程池结束 QThreadPool::globalInstance()->waitForDone(); if (m_thread_stop) { + qDebug() << "CalculateSizeThread stopped before completion"; return; } @@ -104,9 +111,12 @@ void CalculateSizeThread::run() void CalculateSizeThread::ConstructAddOptionsByThread(const QString &path) { + qDebug() << "Processing directory:" << path; QDir dir(path); - if (!dir.exists()) + if (!dir.exists()) { + qWarning() << "Directory not exists:" << path; return; + } // 获得文件夹中的文件列表 QFileInfoList list = dir.entryInfoList(QDir::AllEntries | QDir::System | QDir::NoDotAndDotDot | QDir::Hidden); @@ -131,6 +141,7 @@ void CalculateSizeThread::ConstructAddOptionsByThread(const QString &path) // 待压缩文件已经不存在 if (!fileInfo.exists()) { + qWarning() << "File not exists in directory:" << fileInfo.absoluteFilePath(); if (fileInfo.isSymLink()) { qInfo() << "*********" << fileInfo.filePath(); emit signalError(tr("The original file of %1 does not exist, please check and try again").arg(fileInfo.absoluteFilePath()), fileInfo.absoluteFilePath()); @@ -144,6 +155,7 @@ void CalculateSizeThread::ConstructAddOptionsByThread(const QString &path) // 待压缩文件不可读 if (!fileInfo.isReadable()) { + qWarning() << "File not readable in directory:" << fileInfo.absoluteFilePath(); emit signalError(tr("You do not have permission to compress %1").arg(fileInfo.absoluteFilePath()), fileInfo.absoluteFilePath()); set_thread_stop(true); diff --git a/src/source/common/customwidget.cpp b/src/source/common/customwidget.cpp index 022fad2d0..a1454cab0 100644 --- a/src/source/common/customwidget.cpp +++ b/src/source/common/customwidget.cpp @@ -17,17 +17,20 @@ CustomSuggestButton::CustomSuggestButton(QWidget *parent) : DSuggestButton(parent) { + qDebug() << "CustomSuggestButton initialized"; setFocusPolicy(Qt::TabFocus); } CustomSuggestButton::CustomSuggestButton(const QString &text, QWidget *parent) : DSuggestButton(text, parent) { + qDebug() << "CustomSuggestButton initialized with text:" << text; setFocusPolicy(Qt::TabFocus); } void CustomSuggestButton::keyPressEvent(QKeyEvent *event) { + qDebug() << "Key press event, key:" << event->key(); if (Qt::Key_Enter == event->key() || Qt::Key_Return == event->key()) { //“回车键” 执行按下按钮 // 模拟空格键按下事件 QKeyEvent pressSpace(QEvent::KeyPress, Qt::Key_Space, Qt::NoModifier, " "); @@ -39,6 +42,7 @@ void CustomSuggestButton::keyPressEvent(QKeyEvent *event) void CustomSuggestButton::keyReleaseEvent(QKeyEvent *event) { + qDebug() << "Key release event, key:" << event->key(); if (Qt::Key_Enter == event->key() || Qt::Key_Return == event->key()) { //“回车键” 执行弹起按钮 // 模拟空格键松开事件 QKeyEvent releaseSpace(QEvent::KeyRelease, Qt::Key_Space, Qt::NoModifier, " "); @@ -50,11 +54,13 @@ void CustomSuggestButton::keyReleaseEvent(QKeyEvent *event) CustomCombobox::CustomCombobox(QWidget *parent): DComboBox(parent) { + qDebug() << "CustomCombobox initialized"; setFocusPolicy(Qt::TabFocus); } void CustomCombobox::keyPressEvent(QKeyEvent *event) { + qDebug() << "ComboBox key press event, key:" << event->key(); if (Qt::Key_Enter == event->key() || Qt::Key_Return == event->key()) { //“回车键” 执行打开下拉列表功能 // 模拟空格键按下事件 QKeyEvent pressSpace(QEvent::KeyPress, Qt::Key_Space, Qt::NoModifier, " "); @@ -66,6 +72,7 @@ void CustomCombobox::keyPressEvent(QKeyEvent *event) void CustomCombobox::keyReleaseEvent(QKeyEvent *event) { + qDebug() << "ComboBox key release event, key:" << event->key(); if (Qt::Key_Enter == event->key() || Qt::Key_Return == event->key()) { //“回车键” 执行打开下拉列表功能 // 模拟空格键松开事件 QKeyEvent releaseSpace(QEvent::KeyRelease, Qt::Key_Space, Qt::NoModifier, " "); @@ -115,6 +122,7 @@ void CustomCombobox::paintEvent(QPaintEvent *event) void CustomCombobox::focusInEvent(QFocusEvent *event) { + qDebug() << "ComboBox focus in, reason:" << event->reason(); m_reson = event->reason(); DComboBox::focusInEvent(event); } @@ -122,22 +130,26 @@ void CustomCombobox::focusInEvent(QFocusEvent *event) CustomPushButton::CustomPushButton(QWidget *parent) : QPushButton(parent) { + qDebug() << "CustomPushButton initialized"; setFocusPolicy(Qt::TabFocus); } CustomPushButton::CustomPushButton(const QString &text, QWidget *parent) : QPushButton(text, parent) { + qDebug() << "CustomPushButton initialized with text:" << text; setFocusPolicy(Qt::TabFocus); } CustomPushButton::CustomPushButton(const QIcon &icon, const QString &text, QWidget *parent): QPushButton(icon, text, parent) { + qDebug() << "CustomPushButton initialized with icon and text:" << text; setFocusPolicy(Qt::TabFocus); } void CustomPushButton::keyPressEvent(QKeyEvent *event) { + qDebug() << "PushButton key press event, key:" << event->key(); if (Qt::Key_Enter == event->key() || Qt::Key_Return == event->key()) { //“回车键” 执行按下按钮 // 模拟空格键按下事件 QKeyEvent pressSpace(QEvent::KeyPress, Qt::Key_Space, Qt::NoModifier, " "); @@ -149,6 +161,7 @@ void CustomPushButton::keyPressEvent(QKeyEvent *event) void CustomPushButton::keyReleaseEvent(QKeyEvent *event) { + qDebug() << "PushButton key release event, key:" << event->key(); if (Qt::Key_Enter == event->key() || Qt::Key_Return == event->key()) { //“回车键” 执行弹起按钮 // 模拟空格键松开事件 QKeyEvent releaseSpace(QEvent::KeyRelease, Qt::Key_Space, Qt::NoModifier, " "); diff --git a/src/source/common/dbusadpator.cpp b/src/source/common/dbusadpator.cpp index 815f2ec8f..472cec559 100644 --- a/src/source/common/dbusadpator.cpp +++ b/src/source/common/dbusadpator.cpp @@ -15,6 +15,7 @@ const QString SOPENLIST = "openfiles"; ApplicationAdaptor::ApplicationAdaptor(QApplication *application) : QDBusAbstractAdaptor(application), app(application) { + qDebug() << "ApplicationAdaptor initialized"; connect(application, SIGNAL(aboutToQuit()), SIGNAL(aboutToQuit())); connect(application, SIGNAL(focusChanged(QWidget*, QWidget*)), SLOT(focusChangedSlot(QWidget*, QWidget*))); @@ -27,25 +28,34 @@ ApplicationAdaptor::ApplicationAdaptor(QApplication *application) */ void ApplicationAdaptor::setCompressFile(const QString &sFile) { + qInfo() << "Set compress file:" << sFile; m_sFile = sFile; } void ApplicationAdaptor::raise(const QString &sFile) { - qInfo() << "raise window from dbus"; - if(m_sFile.isEmpty() || m_sFile.isNull()) + qDebug() << "Raise window request for file:" << sFile; + if(m_sFile.isEmpty() || m_sFile.isNull()) { + qWarning() << "No compress file set, cannot raise window"; return; + } if(m_curShowWidget && (m_sFile == sFile)) m_curShowWidget->activateWindow(); } void ApplicationAdaptor::onActiveWindow(qint64 pid) { - qInfo() << "onActiveWindow from dbus: " << "pid is " << pid << ", current pid is " << QGuiApplication::applicationPid(); + qDebug() << "Active window request from pid:" << pid << ", current pid:" << QGuiApplication::applicationPid(); m_curShowWidget = nullptr; - if(pid != QGuiApplication::applicationPid()) return; - if(!app) return; + if(pid != QGuiApplication::applicationPid()) { + qDebug() << "Pid mismatch, ignoring request"; + return; + } + if(!app) { + qWarning() << "Application instance is null"; + return; + } for(QWidget *w : app->topLevelWidgets()) { if(QMainWindow *mainWnd = dynamic_cast(w)) { m_curShowWidget = mainWnd; @@ -57,8 +67,8 @@ void ApplicationAdaptor::onActiveWindow(qint64 pid) m_curShowWidget->raise(); m_curShowWidget->activateWindow(); } - if(m_curShowWidget && !m_curShowWidget->isActiveWindow()) - { + if(m_curShowWidget && !m_curShowWidget->isActiveWindow()) { + qDebug() << "Window not active, trying to activate via Dock DBus"; qInfo() << "activateWindow by Dock dbus"; QDBusInterface dockDbusInterfaceV20( "com.deepin.dde.daemon.Dock", "/com/deepin/dde/daemon/Dock", "com.deepin.dde.daemon.Dock"); diff --git a/src/source/common/ddesktopservicesthread.cpp b/src/source/common/ddesktopservicesthread.cpp index 3cd4c77a4..676d1436d 100644 --- a/src/source/common/ddesktopservicesthread.cpp +++ b/src/source/common/ddesktopservicesthread.cpp @@ -4,6 +4,7 @@ // SPDX-License-Identifier: GPL-3.0-or-later #include "ddesktopservicesthread.h" +#include #include #include @@ -14,11 +15,12 @@ DGUI_USE_NAMESPACE DDesktopServicesThread::DDesktopServicesThread(QObject *parent) : QThread(parent) { - + qDebug() << "DDesktopServicesThread initialized"; } void DDesktopServicesThread::setOpenFiles(const QStringList &listFiles) { + qInfo() << "Set open files list, count:" << listFiles.size(); m_listFiles = listFiles; } @@ -29,14 +31,16 @@ bool DDesktopServicesThread::hasFiles() void DDesktopServicesThread::run() { + qDebug() << "Start opening" << m_listFiles.size() << "files/folders"; for (int i = 0; i < m_listFiles.count(); ++i) { QFileInfo info(m_listFiles[i]); if (info.isDir()) { - // 如果是文件夹 + qDebug() << "Opening folder:" << m_listFiles[i]; DDesktopServices::showFolder(m_listFiles[i]); } else { - // 如果是文件 + qDebug() << "Opening file:" << m_listFiles[i]; DDesktopServices::showFileItem(m_listFiles[i]); } } + qDebug() << "Finished opening all files/folders"; } diff --git a/src/source/common/eventlogutils.cpp b/src/source/common/eventlogutils.cpp index 9e5bc5d67..fcade970b 100644 --- a/src/source/common/eventlogutils.cpp +++ b/src/source/common/eventlogutils.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include "eventlogutils.h" @@ -15,28 +16,37 @@ EventLogUtils *EventLogUtils::mInstance(nullptr); EventLogUtils &EventLogUtils::get() { if (mInstance == nullptr) { + qDebug() << "Creating new EventLogUtils instance"; mInstance = new EventLogUtils; + } else { + qDebug() << "Returning existing EventLogUtils instance"; } return *mInstance; } EventLogUtils::EventLogUtils() { + qDebug() << "Initializing EventLogUtils"; QLibrary library("libdeepin-event-log.so"); init =reinterpret_cast(library.resolve("Initialize")); writeEventLog = reinterpret_cast(library.resolve("SendEventLog")); - if (init == nullptr) + if (init == nullptr) { + qWarning() << "Failed to resolve Initialize function"; return; + } init("deepin-compressor", true); } void EventLogUtils::writeLogs(QJsonObject &data) { - if (writeEventLog == nullptr) + qDebug() << "Writing event log"; + if (writeEventLog == nullptr) { + qWarning() << "writeEventLog function not initialized"; return; + } QJsonObject eventObj; QJsonObject policyObj; diff --git a/src/source/common/mimetypedisplaymanager.cpp b/src/source/common/mimetypedisplaymanager.cpp index 51f038dbb..7b955c9bc 100644 --- a/src/source/common/mimetypedisplaymanager.cpp +++ b/src/source/common/mimetypedisplaymanager.cpp @@ -20,12 +20,15 @@ QStringList MimeTypeDisplayManager::BackupMimeTypes; MimeTypeDisplayManager::MimeTypeDisplayManager(QObject *parent) : QObject(parent) { + qDebug() << "Initializing MimeTypeDisplayManager"; initData(); initConnect(); + qDebug() << "MimeTypeDisplayManager initialized"; } void MimeTypeDisplayManager::initData() { + qDebug() << "Initializing MIME type display data"; m_displayNames[FileType::Directory] = tr("Directory"); m_displayNames[FileType::DesktopApplication] = tr("Application"); m_displayNames[FileType::Videos] = tr("Video"); @@ -63,6 +66,7 @@ QString MimeTypeDisplayManager::displayName(const QString &mimeType) FileType MimeTypeDisplayManager::displayNameToEnum(const QString &mimeType) { + qDebug() << "Converting MIME type to enum:" << mimeType; if (mimeType == "application/x-desktop") { return FileType::DesktopApplication; } else if (mimeType == "inode/directory") { @@ -101,8 +105,10 @@ QStringList MimeTypeDisplayManager::readlines(const QString &path) QStringList result; QFile file(path); if (!file.open(QIODevice::ReadOnly)) { + qWarning() << "Failed to open file:" << path; return result; } + qDebug() << "Reading MIME types from:" << path; QTextStream in(&file); while (!in.atEnd()) { @@ -118,10 +124,19 @@ QStringList MimeTypeDisplayManager::readlines(const QString &path) file.close(); return result; + qDebug() << "Supported MIME types loaded:" + << "Archive:" << ArchiveMimeTypes.size() + << "Text:" << TextMimeTypes.size() + << "Video:" << VideoMimeTypes.size() + << "Audio:" << AudioMimeTypes.size() + << "Image:" << ImageMimeTypes.size() + << "Executable:" << ExecutableMimeTypes.size() + << "Backup:" << BackupMimeTypes.size(); } void MimeTypeDisplayManager::loadSupportMimeTypes() { + qDebug() << "Loading supported MIME types"; QString textPath = QString("%1/%2").arg(MIMETYPE_PATH, "text.mimetype"); QString archivePath = QString("%1/%2").arg(MIMETYPE_PATH, "archive.mimetype"); QString videoPath = QString("%1/%2").arg(MIMETYPE_PATH, "video.mimetype"); diff --git a/src/source/common/mimetypes.cpp b/src/source/common/mimetypes.cpp index 1499574d0..40440da3d 100644 --- a/src/source/common/mimetypes.cpp +++ b/src/source/common/mimetypes.cpp @@ -13,6 +13,7 @@ CustomMimeType determineMimeType(const QString &filename) { + qDebug() << "Determining MIME type for:" << filename; QMimeDatabase db; CustomMimeType stMimeType; @@ -80,6 +81,7 @@ CustomMimeType determineMimeType(const QString &filename) // mimeFromContent will be "application/octet-stream" when file is // unreadable, so use extension. if (!fileinfo.isReadable()) { + qWarning() << "File is not readable, using extension-based MIME type:" << filename; stMimeType.m_mimeType = mimeFromExtension; return stMimeType; } @@ -117,7 +119,7 @@ CustomMimeType determineMimeType(const QString &filename) * iso:内容检测为"application/octet-stream",后缀检测为"application/x-cd-image",file命令探测为"application/x-iso9660-image" */ if (mimeFromContent.isDefault()) { - + qDebug() << "Using file command to detect MIME type for:" << filename; QProcess process; QStringList args; args << "--mime-type" << filename; @@ -129,18 +131,23 @@ CustomMimeType determineMimeType(const QString &filename) stMimeType.m_bUnKnown = true; if (output.contains("application/octet-stream")) { + qDebug() << "File command detected octet-stream, using extension type"; stMimeType.m_strTypeName = mimeFromExtension.name(); return stMimeType; } else if (output.contains("application/x-chrome-extension")) { + qDebug() << "Detected Chrome extension"; stMimeType.m_strTypeName = "application/x-chrome-extension"; return stMimeType; } else if (output.contains("application/zip")) { + qDebug() << "Detected ZIP archive"; stMimeType.m_strTypeName = "application/zip"; return stMimeType; } else if (output.contains("application/x-iso9660-image")) { + qDebug() << "Detected ISO image"; stMimeType.m_strTypeName = "application/x-iso9660-image"; return stMimeType; } else { // 对于其余情况,使用已识别出的后缀识别即可 + qDebug() << "Using extension-based MIME type as fallback"; stMimeType.m_bUnKnown = false; stMimeType.m_mimeType = mimeFromExtension; return stMimeType; @@ -159,5 +166,6 @@ CustomMimeType determineMimeType(const QString &filename) } stMimeType.m_mimeType = mimeFromContent; + qDebug() << "Determined MIME type:" << stMimeType.m_mimeType.name(); return stMimeType; } diff --git a/src/source/common/openFileWatcher.cpp b/src/source/common/openFileWatcher.cpp index 83fd91c6f..09e84443d 100644 --- a/src/source/common/openFileWatcher.cpp +++ b/src/source/common/openFileWatcher.cpp @@ -4,6 +4,7 @@ // SPDX-License-Identifier: GPL-3.0-or-later #include "openFileWatcher.h" +#include #include @@ -11,6 +12,7 @@ OpenFileWatcher::OpenFileWatcher(QObject *parent) : QObject(parent) { + qDebug() << "Initializing OpenFileWatcher"; m_pOpenFileWatcher = new QFileSystemWatcher(this); connect(m_pOpenFileWatcher, &QFileSystemWatcher::fileChanged, this, &OpenFileWatcher::fileChanged); } @@ -22,10 +24,12 @@ OpenFileWatcher::~OpenFileWatcher() void OpenFileWatcher::reset() { + qDebug() << "Resetting OpenFileWatcher, removing" << m_pOpenFileWatcher->files().size() << "watched files"; m_pOpenFileWatcher->removePaths(m_pOpenFileWatcher->files()); // 清空所有监控的文件 m_strOpenFile.clear(); m_mapFileHasModified.clear(); m_mapFilePassword.clear(); + qDebug() << "OpenFileWatcher reset completed"; } void OpenFileWatcher::setCurOpenFile(const QString &strCurOpenFile) @@ -35,16 +39,19 @@ void OpenFileWatcher::setCurOpenFile(const QString &strCurOpenFile) void OpenFileWatcher::addCurOpenWatchFile() { + qDebug() << "Adding file to watch:" << m_strOpenFile; m_pOpenFileWatcher->addPath(m_strOpenFile); // 添加监控 m_mapFileHasModified[m_strOpenFile] = false; // 初始监控状态 } void OpenFileWatcher::addWatchFile(const QString &strFile) { + qDebug() << "Adding watch file:" << strFile; m_pOpenFileWatcher->addPath(strFile); // 第一次默认文件未修改 if (m_mapFileHasModified.find(strFile) != m_mapFileHasModified.end()) { + qDebug() << "File already in watch list, resetting modified flag"; m_mapFileHasModified[m_strOpenFile] = false; } } @@ -56,6 +63,7 @@ QMap &OpenFileWatcher::getFileHasModified() void OpenFileWatcher::setCurFilePassword(const QString &strPassword) { + qDebug() << "Setting password for file:" << m_strOpenFile; m_mapFilePassword[m_strOpenFile] = strPassword; } diff --git a/src/source/common/plugin.cpp b/src/source/common/plugin.cpp index 8e745c1ce..1136d84ed 100644 --- a/src/source/common/plugin.cpp +++ b/src/source/common/plugin.cpp @@ -4,6 +4,7 @@ // SPDX-License-Identifier: GPL-3.0-or-later #include "plugin.h" +#include #include #include @@ -13,6 +14,7 @@ Plugin::Plugin(QObject *parent, const KPluginMetaData &metaData) , m_enabled(true) , m_metaData(metaData) { + qDebug() << "Initializing plugin:" << metaData.pluginId(); } int Plugin::priority() const @@ -74,20 +76,27 @@ bool Plugin::hasRequiredExecutables() const bool Plugin::isValid() const { - return isEnabled() && m_metaData.isValid() && hasRequiredExecutables(); + bool valid = isEnabled() && m_metaData.isValid() && hasRequiredExecutables(); + qDebug() << "Plugin validation:" << m_metaData.pluginId() << "is" << (valid ? "valid" : "invalid"); + return valid; } bool Plugin::findExecutables(const QStringList &executables) { + qDebug() << "Searching for required executables:" << executables; for (const QString &executable : executables) { if (executable.isEmpty()) { continue; } - if (QStandardPaths::findExecutable(executable).isEmpty()) { + const QString path = QStandardPaths::findExecutable(executable); + if (path.isEmpty()) { + qWarning() << "Executable not found:" << executable; return false; } + qDebug() << "Found executable:" << executable << "at" << path; } + qDebug() << "All required executables found"; return true; } diff --git a/src/source/common/pluginmanager.cpp b/src/source/common/pluginmanager.cpp index 25df20efe..587d76a0b 100644 --- a/src/source/common/pluginmanager.cpp +++ b/src/source/common/pluginmanager.cpp @@ -25,7 +25,9 @@ QAtomicPointer PluginManager::m_instance = nullptr;//原子指针 PluginManager::PluginManager(QObject *parent) : QObject(parent) { + qDebug() << "Initializing PluginManager"; loadPlugins(); + qDebug() << "PluginManager initialized with" << m_plugins.size() << "plugins"; } PluginManager &PluginManager::get_instance() @@ -200,6 +202,7 @@ QStringList PluginManager::supportedWriteMimeTypes(MimeSortingMode mode) const QVector PluginManager::filterBy(const QVector &plugins, const CustomMimeType &mimeType) const { + qDebug() << "Filtering plugins for mime type:" << mimeType.name(); const bool supportedMime = supportedMimeTypes().contains(mimeType.name()); QVector filteredPlugins; for (Plugin *plugin : plugins) { @@ -208,15 +211,15 @@ QVector PluginManager::filterBy(const QVector &plugins, cons const QStringList mimeTypes = plugin->metaData().mimeTypes(); for (const QString &mime : mimeTypes) { if (mimeType.inherits(mime)/* && (mime != "application/octet-stream")*/) { + qDebug() << "Found plugin" << plugin->metaData().pluginId() << "supporting parent mime type:" << mime; filteredPlugins << plugin; } } } else if (plugin->metaData().mimeTypes().contains(mimeType.name())) { - qInfo() << plugin->metaData().pluginId() << m_filesize << mimeType.name(); - // if (mimeType.name() == QString("application/x-iso9660-image") && plugin->metaData().pluginId() == QString("kerfuffle_cli7z") && m_filesize < 4294967296) { //4294967296(4GB) - // continue;//when iso is more than 4G,it is udf,use 7z to extract - // } + qDebug() << "Found plugin" << plugin->metaData().pluginId() << "directly supporting mime type:" << mimeType.name(); + if (mimeType.name() == QString("application/x-tzo") && plugin->metaData().pluginId() == QString("kerfuffle_cli7z")) { + qDebug() << "Adding special case for x-tzo mime type"; filteredPlugins << plugin; continue; } @@ -225,7 +228,7 @@ QVector PluginManager::filterBy(const QVector &plugins, cons } } - qInfo() << filteredPlugins.count(); + qDebug() << "Found" << filteredPlugins.count() << "matching plugins"; return filteredPlugins; } @@ -236,13 +239,17 @@ void PluginManager::setFileSize(qint64 size) void PluginManager::loadPlugins() { + qDebug() << "Loading plugins from /usr/lib/"; QCoreApplication::addLibraryPath("/usr/lib/"); const QVector plugins = KPluginLoader::findPlugins(QStringLiteral("deepin-compressor/plugins")); + qDebug() << "Found" << plugins.size() << "potential plugins"; + QSet addedPlugins; for (const KPluginMetaData &metaData : plugins) { const auto pluginId = metaData.pluginId(); // Filter out duplicate plugins. if (addedPlugins.contains(pluginId)) { + qDebug() << "Skipping duplicate plugin:" << pluginId; continue; } @@ -250,7 +257,9 @@ void PluginManager::loadPlugins() plugin->setEnabled(true); addedPlugins << pluginId; m_plugins << plugin; + qDebug() << "Loaded plugin:" << pluginId; } + qDebug() << "Successfully loaded" << addedPlugins.size() << "unique plugins"; } QVector PluginManager::preferredPluginsFor(const CustomMimeType &mimeType, bool readWrite) const @@ -311,16 +320,18 @@ QStringList PluginManager::sortByComment(const QSet &mimeTypes) bool PluginManager::libarchiveHasLzo() { + qDebug() << "Checking if libarchive has LZO support"; // Step 1: look for the libarchive plugin, which is built against libarchive. const QString strPluginPath = []() { const QStringList paths = QCoreApplication::libraryPaths(); for (const QString &path : paths) { const QString pluginPath = QStringLiteral("%1/kerfuffle/kerfuffle_libarchive.so").arg(path); if (QFileInfo::exists(pluginPath)) { + qDebug() << "Found libarchive plugin at:" << pluginPath; return pluginPath; } } - + qWarning() << "Libarchive plugin not found"; return QString(); }(); @@ -337,13 +348,17 @@ bool PluginManager::libarchiveHasLzo() const QString output = QString::fromUtf8(dependencyTool.readAllStandardOutput()); QRegularExpression regex(QStringLiteral("/.*/libarchive.so|/.*/libarchive.*.dylib")); if (!regex.match(output).hasMatch()) { + qWarning() << "libarchive.so not found in dependencies"; return false; } // Step 3: check whether libarchive links against liblzo. const QStringList libarchivePath(regex.match(output).captured(0)); + qDebug() << "Found libarchive at:" << libarchivePath; dependencyTool.setArguments(args + libarchivePath); dependencyTool.start(); dependencyTool.waitForFinished(); - return dependencyTool.readAllStandardOutput().contains(QByteArrayLiteral("lzo")); + const bool hasLzo = dependencyTool.readAllStandardOutput().contains(QByteArrayLiteral("lzo")); + qDebug() << "Libarchive LZO support:" << hasLzo; + return hasLzo; } diff --git a/src/source/common/processopenthread.cpp b/src/source/common/processopenthread.cpp index fcb6bf50f..92127d0c2 100644 --- a/src/source/common/processopenthread.cpp +++ b/src/source/common/processopenthread.cpp @@ -5,6 +5,7 @@ #include "processopenthread.h" #include "kprocess.h" +#include ProcessOpenThread::ProcessOpenThread(QObject *parent) : QThread(parent) @@ -14,16 +15,19 @@ ProcessOpenThread::ProcessOpenThread(QObject *parent) void ProcessOpenThread::setProgramPath(const QString &strProgramPath) { + qDebug() << "Setting program path:" << strProgramPath; m_strProgramPath = strProgramPath; } void ProcessOpenThread::setArguments(const QStringList &listArguments) { + qDebug() << "Setting arguments, count:" << listArguments.size(); m_listArguments = listArguments; } void ProcessOpenThread::run() { + qDebug() << "Starting external process:" << m_strProgramPath; // 启动外部进程 KProcess *cmdprocess = new KProcess; cmdprocess->setOutputChannelMode(KProcess::MergedChannels); @@ -31,5 +35,6 @@ void ProcessOpenThread::run() cmdprocess->setProgram(m_strProgramPath, m_listArguments); cmdprocess->start(); cmdprocess->waitForFinished(-1); - delete cmdprocess; + qDebug() << "Process finished with exit code:" << cmdprocess->exitCode(); + delete cmdprocess; } diff --git a/src/source/common/uitools.cpp b/src/source/common/uitools.cpp index 286d81404..50b3cec37 100644 --- a/src/source/common/uitools.cpp +++ b/src/source/common/uitools.cpp @@ -125,6 +125,7 @@ QString UiTools::humanReadableSize(const qint64 &size, int precision) bool UiTools::isArchiveFile(const QString &strFileName) { + qDebug() << "Checking if file is archive:" << strFileName; QString strTransFileName = strFileName; UnCompressParameter::SplitType type; UiTools::transSplitFileName(strTransFileName, type); @@ -139,18 +140,23 @@ bool UiTools::isArchiveFile(const QString &strFileName) if (mime.size() > 0) { bool bArchive = false; ret = isExistMimeType(mime, bArchive); // 判断是否是归档管理器支持的压缩文件格式 + qDebug() << "MIME type check result:" << mime << "is" << (ret ? "supported" : "not supported"); } else { + qDebug() << "No valid MIME type found"; ret = false; } if (strTransFileName.endsWith(".deb")) { // 对deb文件识别为普通文件 + qDebug() << "DEB file detected, treating as non-archive"; ret = false; } if (strTransFileName.endsWith(".crx") || strTransFileName.endsWith(".apk")) { // 对crx、apk文件识别为压缩包 + qDebug() << "CRX/APK file detected, treating as archive"; ret = true; } + qDebug() << "Final archive check result:" << ret; return ret; } @@ -220,32 +226,21 @@ QString UiTools::toShortString(QString strSrc, int limitCounts, int left) ReadOnlyArchiveInterface *UiTools::createInterface(const QString &fileName, bool bWrite, AssignPluginType eType/*, bool bUseLibArchive*/) { -// QFileInfo fileinfo(fileName); // 未使用该变量 - + qDebug() << "Creating interface for file:" << fileName << "write mode:" << bWrite << "plugin type:" << eType; const CustomMimeType mimeType = determineMimeType(fileName); + qDebug() << "Determined MIME type:" << mimeType.name(); QVector offers; if (bWrite) { offers = PluginManager::get_instance().preferredWritePluginsFor(mimeType); - -// if (bUseLibArchive == true && mimeType.name() == "application/zip") { -// std::sort(offers.begin(), offers.end(), [](Plugin * p1, Plugin * p2) { -// if (p1->metaData().name().contains("Libarchive")) { -// return true; -// } -// if (p2->metaData().name().contains("Libarchive")) { -// return false; -// } - -// return p1->priority() > p2->priority(); -// }); -// } + qDebug() << "Found" << offers.size() << "write plugins for MIME type"; } else { offers = PluginManager::get_instance().preferredPluginsFor(mimeType); + qDebug() << "Found" << offers.size() << "read plugins for MIME type"; } if (offers.isEmpty()) { - qInfo() << "Could not find a plugin to handle" << fileName; + qWarning() << "Could not find a plugin to handle" << fileName; return nullptr; } diff --git a/src/source/compressorapplication.cpp b/src/source/compressorapplication.cpp index a82af0ab5..fa0f33031 100644 --- a/src/source/compressorapplication.cpp +++ b/src/source/compressorapplication.cpp @@ -15,24 +15,28 @@ CompressorApplication::CompressorApplication(int &argc, char **argv) : DApplication(argc, argv) { - + qDebug() << "CompressorApplication constructor"; } CompressorApplication::~CompressorApplication() { - + qDebug() << "CompressorApplication destructor"; } bool CompressorApplication::notify(QObject *watched, QEvent *event) { + qDebug() << "Processing application event notification"; + if (QEvent::KeyPress == event->type()) { QKeyEvent *keyEvent = dynamic_cast(event); int keyOfEvent = keyEvent->key(); + if (Qt::Key_Enter == keyOfEvent || Qt::Key_Return == keyOfEvent) { - //checkbox响应"回车键" - + qDebug() << "Handling Enter/Return key press"; + const QMetaObject *pObj = watched->metaObject(); if (pObj && pObj->className() == QStringLiteral("QCheckBox")) { + qDebug() << "Converting Enter key to Space for checkbox"; DCheckBox *checkBox = qobject_cast(watched); // 模拟空格键按下事件 QKeyEvent pressSpace(QEvent::KeyPress, Qt::Key_Space, Qt::NoModifier, " "); @@ -48,27 +52,35 @@ bool CompressorApplication::notify(QObject *watched, QEvent *event) } } else if (Qt::Key_Tab == keyOfEvent || Qt::Key_Backtab == keyOfEvent || Qt::Key_Left == keyOfEvent || Qt::Key_Up == keyOfEvent) { + qDebug() << "Handling navigation key press"; QWidget *pWgt = activeWindow(); MainWindow *pWindow = qobject_cast(pWgt); //在对应的MainWindow操作 if (pWindow) { + qDebug() << "Forwarding navigation event to MainWindow"; bool rs = pWindow->handleApplicationTabEventNotify(watched, keyEvent); if (rs) { + qDebug() << "MainWindow handled navigation event"; return rs; } } } } + qDebug() << "Default event notification handling"; return DApplication::notify(watched, event); - } void CompressorApplication::handleQuitAction() { + qDebug() << "Handling application quit action"; QWidget *pWgt = activeWindow(); MainWindow *pWindow = qobject_cast(pWgt); //在对应的MainWindow操作 // 处理点击退出事件 - if (pWindow) + if (pWindow) { + qInfo() << "Forwarding quit action to MainWindow"; pWindow->handleQuit(); + } else { + qWarning() << "No active MainWindow found for quit action"; + } } diff --git a/src/source/dialog/openwithdialog/desktopfile.cpp b/src/source/dialog/openwithdialog/desktopfile.cpp index 35c7942c8..51e5e8eaf 100644 --- a/src/source/dialog/openwithdialog/desktopfile.cpp +++ b/src/source/dialog/openwithdialog/desktopfile.cpp @@ -17,6 +17,7 @@ DesktopFile::DesktopFile(const QString &fileName) : m_fileName(fileName) { + qDebug() << "DesktopFile constructor started, file:" << fileName; // File validity if (m_fileName.isEmpty() || !QFile::exists(fileName)) { return; @@ -29,10 +30,12 @@ DesktopFile::DesktopFile(const QString &fileName) if (desktop.contains("X-Deepin-AppID")) { m_deepinId = desktop.value("X-Deepin-AppID", settings.value("X-Deepin-AppID")).toString(); + qInfo() << "Loaded X-Deepin-AppID:" << m_deepinId; } if (desktop.contains("X-Deepin-Vendor")) { m_deepinVendor = desktop.value("X-Deepin-Vendor", settings.value("X-Deepin-Vendor")).toString(); + qInfo() << "Loaded X-Deepin-Vendor:" << m_deepinVendor; } if (desktop.contains("NoDisplay")) { @@ -68,6 +71,7 @@ DesktopFile::DesktopFile(const QString &fileName) }; m_localName = getNameByType("Name"); m_genericName = getNameByType("GenericName"); + qDebug() << "Localized name:" << m_localName << "Generic name:" << m_genericName; m_exec = desktop.value("Exec", settings.value("Exec")).toString(); m_icon = desktop.value("Icon", settings.value("Icon")).toString(); @@ -81,19 +85,24 @@ DesktopFile::DesktopFile(const QString &fileName) // Fix categories if (m_categories.first().compare("") == 0) { m_categories.removeFirst(); + qDebug() << "Removed empty category"; } + qDebug() << "DesktopFile constructor finished, loaded" << m_mimeType.size() << "MIME types"; } //--------------------------------------------------------------------------- QString DesktopFile::getFileName() const { + qDebug() << "Getting desktop file name:" << m_fileName; return m_fileName; } //--------------------------------------------------------------------------- QString DesktopFile::getPureFileName() const { - return m_fileName.split("/").last().remove(".desktop"); + QString pureName = m_fileName.split("/").last().remove(".desktop"); + qDebug() << "Getting pure desktop file name:" << pureName; + return pureName; } //--------------------------------------------------------------------------- @@ -118,12 +127,14 @@ QString DesktopFile::getDisplayName() const QString DesktopFile::getExec() const { + qDebug() << "Getting desktop file exec command:" << m_exec; return m_exec; } //--------------------------------------------------------------------------- QString DesktopFile::getIcon() const { + qDebug() << "Getting desktop file icon:" << m_icon; return m_icon; } //--------------------------------------------------------------------------- @@ -152,12 +163,14 @@ bool DesktopFile::getNoShow() const QStringList DesktopFile::getCategories() const { + qDebug() << "Getting desktop file categories:" << m_categories; return m_categories; } //--------------------------------------------------------------------------- QStringList DesktopFile::getMimeType() const { + qDebug() << "Getting desktop file MIME types:" << m_mimeType; return m_mimeType; } //--------------------------------------------------------------------------- diff --git a/src/source/dialog/openwithdialog/dfmstandardpaths.cpp b/src/source/dialog/openwithdialog/dfmstandardpaths.cpp index 9e94e06b5..874e69c16 100644 --- a/src/source/dialog/openwithdialog/dfmstandardpaths.cpp +++ b/src/source/dialog/openwithdialog/dfmstandardpaths.cpp @@ -12,9 +12,11 @@ #include #include #include +#include QString DFMStandardPaths::location(DFMStandardPaths::StandardLocation type) { + qDebug() << "Getting standard path for type:" << type; switch (type) { case TrashPath: return QDir::homePath() + "/.local/share/Trash"; @@ -112,24 +114,40 @@ QString DFMStandardPaths::location(DFMStandardPaths::StandardLocation type) } bool DFMStandardPaths::pathControl(const QString &sPath) { + qDebug() << "Checking path control for:" << sPath; QString docPath = DFMStandardPaths::location(DFMStandardPaths::DocumentsPath); QString picPath = DFMStandardPaths::location(DFMStandardPaths::PicturesPath); + qDebug() << "Documents path:" << docPath << "Pictures path:" << picPath; + QDBusMessage reply; QDBusInterface iface("com.deepin.FileArmor1", "/com/deepin/FileArmor1", "com.deepin.FileArmor1",QDBusConnection::systemBus()); + if (iface.isValid()) { + qDebug() << "DBus interface is valid"; if(sPath.startsWith(docPath)) { + qDebug() << "Checking document path control"; reply = iface.call("GetApps", docPath); } else if(sPath.startsWith(picPath)) { + qDebug() << "Checking picture path control"; reply = iface.call("GetApps", picPath); } + } else { + qWarning() << "DBus interface is invalid"; } + if(reply.type() == QDBusMessage::ReplyMessage) { + qDebug() << "Got valid DBus reply"; QList lValue = reply.arguments().takeFirst().toStringList(); QString strApp = QStandardPaths::findExecutable("deepin-compressor"); + qDebug() << "Found executable:" << strApp; + if(lValue.contains(strApp)) { + qInfo() << "Path control check passed"; return true; } } + + qDebug() << "Path control final result false!"; return false; } //QString DFMStandardPaths::fromStandardUrl(const DUrl &standardUrl) @@ -197,23 +215,37 @@ bool DFMStandardPaths::pathControl(const QString &sPath) #ifdef QMAKE_TARGET QString DFMStandardPaths::getConfigPath() { + qDebug() << "Getting config path"; QString projectName = QMAKE_TARGET; - QDir::home().mkpath(".config"); - QDir::home().mkpath(QString("%1/deepin/%2/").arg(".config", projectName)); + qDebug() << "Project name:" << projectName; + + bool mkdirSuccess = QDir::home().mkpath(".config"); + qDebug() << "Created .config directory:" << mkdirSuccess; + + QString deepinPath = QString("%1/deepin/%2/").arg(".config", projectName); + mkdirSuccess = QDir::home().mkpath(deepinPath); + qDebug() << "Created deepin config directory:" << mkdirSuccess; + QString defaultPath = QString("%1/%2/deepin/%3").arg(QDir::homePath(), ".config", projectName); + qDebug() << "Config path:" << defaultPath; + return defaultPath; } #endif QString DFMStandardPaths::getCachePath() { + qDebug() << "Getting cache path"; QString projectName = qApp->applicationName(); QDir::home().mkpath(".cache"); QDir::home().mkpath(QString("%1/deepin/%2/").arg(".cache", projectName)); QString defaultPath = QString("%1/%2/deepin/%3").arg(QDir::homePath(), ".cache", projectName); + qDebug() << "Cache path:" << defaultPath; + return defaultPath; } DFMStandardPaths::DFMStandardPaths() { + qDebug() << "DFMStandardPaths constructor"; } diff --git a/src/source/dialog/openwithdialog/dmimedatabase.cpp b/src/source/dialog/openwithdialog/dmimedatabase.cpp index ee9f8ed80..227e00623 100644 --- a/src/source/dialog/openwithdialog/dmimedatabase.cpp +++ b/src/source/dialog/openwithdialog/dmimedatabase.cpp @@ -8,20 +8,24 @@ #include #include +#include DMimeDatabase::DMimeDatabase() { - + qDebug() << "DMimeDatabase constructor"; } QMimeType DMimeDatabase::mimeTypeForFile(const QString &fileName, QMimeDatabase::MatchMode mode) const { + qDebug() << "Getting MIME type for file:" << fileName; return mimeTypeForFile(QFileInfo(fileName), mode); } QMimeType DMimeDatabase::mimeTypeForFile(const QFileInfo &fileInfo, QMimeDatabase::MatchMode mode) const { + qDebug() << "Getting MIME type for file info:" << fileInfo.fileName() << "with mode:" << mode; QMimeType result = QMimeDatabase::mimeTypeForFile(fileInfo, mode); + qDebug() << "Initial MIME type:" << result.name(); // temporary dirty fix, once WPS get installed, the whole mimetype database thing get fscked up. // we used to patch our Qt to fix this issue but the patch no longer works, we don't have time to @@ -40,10 +44,14 @@ QMimeType DMimeDatabase::mimeTypeForFile(const QFileInfo &fileInfo, QMimeDatabas if (officeSuffixList.contains(fileInfo.suffix()) && wrongMimeTypeNames.contains(result.name())) { QList results = QMimeDatabase::mimeTypesForFileName(fileInfo.fileName()); if (!results.isEmpty()) { + qInfo() << "Corrected MIME type from" << result.name() << "to" << results.first().name(); return results.first(); + } else { + qWarning() << "No valid MIME types found for office file"; } } + qDebug() << "Final MIME type:" << result.name() << "for file:" << fileInfo.fileName(); return result; } diff --git a/src/source/dialog/openwithdialog/durl.cpp b/src/source/dialog/openwithdialog/durl.cpp index 7e3c905e7..0ed79aa58 100644 --- a/src/source/dialog/openwithdialog/durl.cpp +++ b/src/source/dialog/openwithdialog/durl.cpp @@ -13,6 +13,7 @@ #include #include +#include /* QRegularExpression DUrl::burn_rxp = QRegularExpression("^(.*?)/(" BURN_SEG_ONDISC "|" BURN_SEG_STAGING ")(.*)$"); @@ -41,13 +42,16 @@ QSet schemeList = QSet() << QString(TRASH_SCHEME) DUrl::DUrl() : QUrl() { - + qDebug() << "Creating empty DUrl"; + qDebug() << "DUrl default constructor"; } DUrl::DUrl(const QUrl ©) : QUrl(copy) { + qDebug() << "Creating DUrl from QUrl:" << copy.toString(); updateVirtualPath(); + qDebug() << "DUrl constructed from QUrl"; } DUrl::DUrl(const DUrl &other) @@ -104,7 +108,9 @@ QDataStream &DUrl::operator>>(QDataStream &in) DUrl::DUrl(const QString &url, QUrl::ParsingMode mode) : QUrl(url, mode) { + qDebug() << "Creating DUrl from string:" << url << "with mode:" << mode; updateVirtualPath(); + qDebug() << "DUrl constructed from string"; } void DUrl::setPath(const QString &path, QUrl::ParsingMode mode, bool makeAbsolute) @@ -142,7 +148,12 @@ void DUrl::setUrl(const QString &url, QUrl::ParsingMode parsingMode, bool makeAb bool DUrl::isTrashFile() const { - return scheme() == TRASH_SCHEME; + bool result = scheme() == TRASH_SCHEME; + qDebug() << "Checking if is trash file:" << result; + if (result) { + qDebug() << "Trash file path:" << path(); + } + return result; } bool DUrl::isRecentFile() const @@ -400,11 +411,13 @@ void DUrl::setBookmarkName(const QString &name) DUrl DUrl::fromLocalFile(const QString &filePath) { + qDebug() << "Creating DUrl from local file:" << filePath; return QUrl::fromLocalFile(filePath); } DUrl DUrl::fromTrashFile(const QString &filePath) { + qDebug() << "Creating DUrl from trash file:" << filePath; DUrl url; url.setScheme(TRASH_SCHEME, false); @@ -752,28 +765,40 @@ DUrl DUrl::toAbsolutePathUrl() const QString DUrl::toLocalFile() const { + qDebug() << "Converting DUrl to local file path"; if (isTrashFile()) { - return DFMStandardPaths::location(DFMStandardPaths::TrashFilesPath) + path(); + QString path = DFMStandardPaths::location(DFMStandardPaths::TrashFilesPath) + path(); + qDebug() << "Trash file path:" << path; + return path; } else if (isSearchFile()) { + qDebug() << "Handling search file URL"; return searchedFileUrl().toLocalFile(); } else if (isAVFSFile()) { + qDebug() << "Handling AVFS file URL"; return path(); } else if (isTaggedFile()) { + qDebug() << "Handling tagged file URL"; return taggedLocalFilePath(); } else if (isUserShareFile()) { + qDebug() << "Handling user share file URL"; return QString(path()).remove(USERSHARE_ROOT); } else { + qDebug() << "Handling regular file URL"; return QUrl::toLocalFile(); } } void DUrl::updateVirtualPath() { + qDebug() << "Updating virtual path"; m_virtualPath = toAbsolutePathUrl().path(); + qDebug() << "Initial virtual path:" << m_virtualPath; if (m_virtualPath.endsWith('/') && m_virtualPath.count() != 1) { + qDebug() << "Removing trailing slash"; m_virtualPath.remove(m_virtualPath.count() - 1, 1); } + qDebug() << "Final virtual path:" << m_virtualPath; } QT_BEGIN_NAMESPACE diff --git a/src/source/dialog/openwithdialog/mimesappsmanager.cpp b/src/source/dialog/openwithdialog/mimesappsmanager.cpp index 09eb931c8..5d208d977 100644 --- a/src/source/dialog/openwithdialog/mimesappsmanager.cpp +++ b/src/source/dialog/openwithdialog/mimesappsmanager.cpp @@ -44,12 +44,14 @@ QMap MimesAppsManager::DesktopObjs = {}; MimeAppsWorker::MimeAppsWorker(QObject *parent): QObject(parent) { + qDebug() << "Initializing MimeAppsWorker"; m_fileSystemWatcher = new QFileSystemWatcher(this); m_updateCacheTimer = new QTimer(this); m_updateCacheTimer->setInterval(2000); m_updateCacheTimer->setSingleShot(true); startWatch(); initConnect(); + qDebug() << "MimeAppsWorker initialized"; } MimeAppsWorker::~MimeAppsWorker() @@ -187,7 +189,9 @@ void MimeAppsWorker::handleFileChanged(const QString &filePath) void MimeAppsWorker::updateCache() { + qDebug() << "Updating MIME type apps cache"; MimesAppsManager::initMimeTypeApps(); + qDebug() << "MIME type apps cache updated"; } bool MimeAppsWorker::writeData(const QString &path, const QByteArray &content) @@ -218,22 +222,26 @@ QByteArray MimeAppsWorker::readData(const QString &path) MimesAppsManager::MimesAppsManager(QObject *parent): QObject(parent) { + qDebug() << "Creating MimesAppsManager"; m_mimeAppsWorker = new MimeAppsWorker(this); connect(this, &MimesAppsManager::requestUpdateCache, m_mimeAppsWorker, &MimeAppsWorker::updateCache); QThread *mimeAppsThread = new QThread; m_mimeAppsWorker->moveToThread(mimeAppsThread); mimeAppsThread->start(); + qDebug() << "MimesAppsManager initialized with worker thread"; } MimesAppsManager::~MimesAppsManager() { - + qDebug() << "Destroying MimesAppsManager"; } QMimeType MimesAppsManager::getMimeType(const QString &fileName) { + qDebug() << "Getting MIME type for file:" << fileName; DMimeDatabase db; QMimeType mimeType = db.mimeTypeForFile(fileName); + qDebug() << "MIME type:" << mimeType.name(); return mimeType; } @@ -258,10 +266,14 @@ QString MimesAppsManager::getDefaultAppByMimeType(const QMimeType &mimeType) QString MimesAppsManager::getDefaultAppByMimeType(const QString &mimeType) { + qDebug() << "Getting default app for MIME type:" << mimeType; GAppInfo *defaultApp = g_app_info_get_default_for_type(mimeType.toLocal8Bit().constData(), FALSE); QString url = ""; if (defaultApp) { url = g_app_info_get_id(defaultApp); + qDebug() << "Default app:" << url; + } else { + qWarning() << "No default app found for MIME type:" << mimeType; } return url; @@ -314,20 +326,28 @@ QString MimesAppsManager::getDefaultAppDesktopFileByMimeType(const QString &mime bool MimesAppsManager::setDefautlAppForTypeByGio(const QString &mimeType, const QString &appPath) { + qDebug() << "Setting default app for MIME type:" << mimeType << "app:" << appPath; GAppInfo *app = NULL; GList *apps = NULL; apps = g_app_info_get_all(); + qDebug() << "Found" << g_list_length(apps) << "available apps"; GList *iterator = apps; + int checkedApps = 0; while (iterator) { + checkedApps++; const char *desktop_id = g_app_info_get_id((GAppInfo *)iterator->data); GDesktopAppInfo *desktopAppInfo = g_desktop_app_info_new(desktop_id); if (desktopAppInfo) { - if (appPath == g_desktop_app_info_get_filename(desktopAppInfo)) { + QString filename = g_desktop_app_info_get_filename(desktopAppInfo); + qDebug() << "Checking app" << checkedApps << ":" << filename; + + if (appPath == filename) { app = (GAppInfo *)iterator->data; g_object_unref(desktopAppInfo); + qDebug() << "Found matching app:" << filename; break; } @@ -336,6 +356,7 @@ bool MimesAppsManager::setDefautlAppForTypeByGio(const QString &mimeType, const if (appPath.endsWith("/" + QString::fromLocal8Bit(desktop_id))) { app = (GAppInfo *)iterator->data; + qDebug() << "Found matching app by ID:" << desktop_id; break; } @@ -345,25 +366,28 @@ bool MimesAppsManager::setDefautlAppForTypeByGio(const QString &mimeType, const g_list_free(apps); if (!app) { - qWarning() << "no app found name as:" << appPath; + qWarning() << "No app found matching:" << appPath; return false; } GError *error = NULL; + qDebug() << "Setting default app for MIME type"; g_app_info_set_as_default_for_type(app, mimeType.toLocal8Bit().constData(), &error); if (error) { - qInfo() << "fail to set default app for type:" << error->message; + qCritical() << "Failed to set default app:" << error->message; g_free(error); return false; } + qInfo() << "Successfully set default app for" << mimeType; return true; } QStringList MimesAppsManager::getRecommendedAppsByQio(const QMimeType &mimeType) { + qDebug() << "Getting recommended apps for MIME type:" << mimeType.name(); QStringList recommendApps; QList mimeTypeList; QMimeDatabase mimeDatabase; @@ -518,7 +542,7 @@ QMap MimesAppsManager::getDesktopObjs() void MimesAppsManager::initMimeTypeApps() { - //qInfo() << "getMimeTypeApps in" << QThread::currentThread() << qApp->thread(); + qDebug() << "Initializing MIME type apps"; DesktopFiles.clear(); DesktopObjs.clear(); DDE_MimeTypes.clear(); @@ -656,11 +680,12 @@ void MimesAppsManager::initMimeTypeApps() void MimesAppsManager::loadDDEMimeTypes() { + qDebug() << "Loading DDE MIME types from:" << getDDEMimeTypeFile(); QSettings settings(getDDEMimeTypeFile(), QSettings::IniFormat); - //qInfo() << settings.childGroups(); QFile file(getDDEMimeTypeFile()); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { + qWarning() << "Failed to open DDE MIME types file:" << file.errorString(); return; } @@ -683,6 +708,7 @@ void MimesAppsManager::loadDDEMimeTypes() if (line.trimmed().startsWith("[") && line.trimmed().endsWith("]")) { QString tmp = line.trimmed().replace("[", "").replace("]", ""); desktopKey = tmp; + qDebug() << "Found desktop key:" << desktopKey; continue; } @@ -702,9 +728,13 @@ void MimesAppsManager::loadDDEMimeTypes() bool MimesAppsManager::lessByDateTime(const QFileInfo &f1, const QFileInfo &f2) { #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - return f1.created() < f2.created(); + bool result = f1.created() < f2.created(); + qDebug() << "Comparing files by creation time:" << f1.fileName() << f1.created() << "<" << f2.fileName() << f2.created() << "=" << result; + return result; #else - return f1.birthTime() < f2.birthTime(); + bool result = f1.birthTime() < f2.birthTime(); + qDebug() << "Comparing files by birth time:" << f1.fileName() << f1.birthTime() << "<" << f2.fileName() << f2.birthTime() << "=" << result; + return result; #endif } diff --git a/src/source/dialog/openwithdialog/openwithdialog.cpp b/src/source/dialog/openwithdialog/openwithdialog.cpp index fb9e6453b..2402dd485 100644 --- a/src/source/dialog/openwithdialog/openwithdialog.cpp +++ b/src/source/dialog/openwithdialog/openwithdialog.cpp @@ -138,6 +138,7 @@ OpenWithDialog::OpenWithDialog(const QString &strFileName, QWidget *parent) : DAbstractDialog(parent) , m_strFileName(strFileName) { + qDebug() << "Creating OpenWithDialog for file:" << strFileName; m_showType = OpenType; setWindowFlags(windowFlags() & ~ Qt::WindowMaximizeButtonHint @@ -146,11 +147,12 @@ OpenWithDialog::OpenWithDialog(const QString &strFileName, QWidget *parent) init(); initConnections(); initData(); + qDebug() << "OpenWithDialog initialized"; } OpenWithDialog::~OpenWithDialog() { - + qDebug() << "Destroying OpenWithDialog"; } QList OpenWithDialog::getOpenStyle(const QString &strFileName) @@ -207,33 +209,39 @@ bool OpenWithDialog::eventFilter(QObject *obj, QEvent *event) void OpenWithDialog::openWithProgram(const QString &strFileName, const QString &strExec) { + qDebug() << "Opening file:" << strFileName << "with program:" << strExec; // 在线程中执行外部应用打开的命令 ProcessOpenThread *p = new ProcessOpenThread; p->setProgramPath(getProgramPathByExec(strExec)); p->setArguments(QStringList() << strFileName); p->start(); + qDebug() << "Started process thread for opening file"; } QString OpenWithDialog::showOpenWithDialog(OpenWithDialog::ShowType eType) { + qDebug() << "Showing OpenWithDialog with type:" << eType; exec(); // 若未点击确定,不操作 if (!m_bOk) { + qDebug() << "Dialog cancelled, no action taken"; return ""; } const QString &app = m_pCheckedItem->property("app").toString(); if (m_pSetToDefaultCheckBox->isChecked()) { + qDebug() << "Setting default app for MIME type:" << m_mimeType.name() << "to:" << app; mimeAppsManager->setDefautlAppForTypeByGio(m_mimeType.name(), app); } if (eType == OpenType) { + qDebug() << "Opening file with selected app"; openWithProgram(m_strFileName, m_strAppExecName); } + qDebug() << "Returning app exec name:" << m_strAppExecName; return m_strAppExecName; - } QString OpenWithDialog::getProgramPathByExec(const QString &strExec) @@ -258,11 +266,13 @@ QString OpenWithDialog::getProgramPathByExec(const QString &strExec) void OpenWithDialog::init() { + qDebug() << "Initializing OpenWithDialog UI"; m_titlebar = new DTitlebar(this); m_titlebar->setBackgroundTransparent(true); setFixedSize(710, 450); m_titlebar->setTitle(tr("Open with")); + qDebug() << "Dialog size set to 710x450"; m_pScrollArea = new QScrollArea(this); m_pScrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); @@ -273,20 +283,20 @@ void OpenWithDialog::init() m_pScrollArea->viewport()->setStyleSheet("background-color:transparent;"); //设置滚动区域与主窗体颜色一致 QWidget *content_widget = new QWidget; - content_widget->setObjectName("contentWidget"); content_widget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - m_pScrollArea->setWidget(content_widget); m_pRecommandLayout = new DFlowLayout; m_pOtherLayout = new DFlowLayout; + qDebug() << "Created recommended and other apps layouts"; m_pOpenFileChooseButton = new QCommandLinkButton(tr("Add other programs")); m_pSetToDefaultCheckBox = new QCheckBox(tr("Set as default")); m_pSetToDefaultCheckBox->setChecked(true); m_pCancelButton = new QPushButton(tr("Cancel", "button")); m_pChooseButton = new QPushButton(tr("Confirm", "button")); + qDebug() << "Created all buttons and controls"; QVBoxLayout *content_layout = new QVBoxLayout; content_layout->setContentsMargins(10, 0, 10, 0); @@ -295,7 +305,6 @@ void OpenWithDialog::init() content_layout->addWidget(new OpenWithDialogListSparerItem(tr("Other Applications"), this)); content_layout->addLayout(m_pOtherLayout); content_layout->addStretch(); - content_widget->setLayout(content_layout); QHBoxLayout *buttonLayout = new QHBoxLayout; @@ -309,7 +318,6 @@ void OpenWithDialog::init() QVBoxLayout *main_layout = new QVBoxLayout(this); QVBoxLayout *bottom_layout = new QVBoxLayout; - bottom_layout->addWidget(new DHorizontalLine(this)); bottom_layout->addSpacing(5); bottom_layout->addLayout(buttonLayout); @@ -318,6 +326,7 @@ void OpenWithDialog::init() main_layout->addWidget(m_pScrollArea); main_layout->addLayout(bottom_layout); main_layout->setContentsMargins(0, 35, 0, 10); + qDebug() << "OpenWithDialog UI initialization completed"; } void OpenWithDialog::initConnections() @@ -329,47 +338,50 @@ void OpenWithDialog::initConnections() void OpenWithDialog::initData() { - // const DAbstractFileInfoPointer &file_info = DFileService::instance()->createFileInfo(this, m_url); + qDebug() << "Initializing OpenWithDialog data for file:" << m_strFileName; QString mineTypeStr(m_strFileName); - // if (!file_info) - // return; - - // m_mimeType = file_info->mimeType(); - - // if (file_info->isDesktopFile()) - // m_setToDefaultCheckBox->hide(); - DMimeDatabase db; m_mimeType = db.mimeTypeForFile(mineTypeStr); - mimeAppsManager->initMimeTypeApps(); + qDebug() << "Detected MIME type:" << m_mimeType.name(); + mimeAppsManager->initMimeTypeApps(); const QString &default_app = mimeAppsManager->getDefaultAppByMimeType(m_mimeType); const QStringList &recommendApps = mimeAppsManager->getRecommendedAppsByQio(m_mimeType); + qDebug() << "Found" << recommendApps.size() << "recommended apps"; + qDebug() << "Default app:" << (default_app.isEmpty() ? "None" : default_app); + for (int i = 0; i < recommendApps.count(); ++i) { const DesktopFile &desktop_info = mimeAppsManager->DesktopObjs.value(recommendApps.at(i)); + qDebug() << "Adding recommended app:" << desktop_info.getDisplayName(); OpenWithDialogListItem *item = createItem(QIcon::fromTheme(desktop_info.getIcon()), desktop_info.getDisplayName(), recommendApps.at(i), desktop_info.getExec()); m_pRecommandLayout->addWidget(item); - if (!default_app.isEmpty() && recommendApps.at(i).endsWith(default_app)) + if (!default_app.isEmpty() && recommendApps.at(i).endsWith(default_app)) { + qDebug() << "Setting default app as checked:" << desktop_info.getDisplayName(); checkItem(item); + } } QList other_app_list; + qDebug() << "Processing other available applications"; foreach (const QString &f, mimeAppsManager->DesktopObjs.keys()) { - // //filter recommend apps , no show apps and no mime support apps const DesktopFile &app = mimeAppsManager->DesktopObjs.value(f); if (recommendApps.contains(f)) continue; - if (mimeAppsManager->DesktopObjs.value(f).getNoShow()) + if (mimeAppsManager->DesktopObjs.value(f).getNoShow()) { + qDebug() << "Skipping hidden app:" << f; continue; + } - if (mimeAppsManager->DesktopObjs.value(f).getMimeType().isEmpty()) + if (mimeAppsManager->DesktopObjs.value(f).getMimeType().isEmpty()) { + qDebug() << "Skipping app with no MIME types:" << f; continue; + } bool isSameDesktop = false; foreach (const DesktopFile &otherApp, other_app_list) { @@ -378,33 +390,42 @@ void OpenWithDialog::initData() } Properties desktop_info(f, "Desktop Entry"); - const QString &custom_open_desktop = desktop_info.value("X-DDE-File-Manager-Custom-Open").toString(); - // // Filter self own desktop files for opening other types of files - if (!custom_open_desktop.isEmpty() && custom_open_desktop != m_mimeType.name()) + if (!custom_open_desktop.isEmpty() && custom_open_desktop != m_mimeType.name()) { + qDebug() << "Skipping app with custom open for different MIME type:" << f; continue; + } - if (isSameDesktop) + if (isSameDesktop) { + qDebug() << "Skipping duplicate app:" << f; continue; + } other_app_list << mimeAppsManager->DesktopObjs.value(f); QString iconName = other_app_list.last().getIcon(); OpenWithDialogListItem *item = createItem(QIcon::fromTheme(iconName), other_app_list.last().getDisplayName(), f, app.getExec()); m_pOtherLayout->addWidget(item); + qDebug() << "Added other app:" << other_app_list.last().getDisplayName(); - if (!default_app.isEmpty() && f.endsWith(default_app)) + if (!default_app.isEmpty() && f.endsWith(default_app)) { + qDebug() << "Setting default app as checked:" << other_app_list.last().getDisplayName(); checkItem(item); + } } + qDebug() << "OpenWithDialog data initialization completed"; } void OpenWithDialog::checkItem(OpenWithDialogListItem *item) { - if (m_pCheckedItem) + if (m_pCheckedItem) { + qDebug() << "Unchecking previous item:" << m_pCheckedItem->text(); m_pCheckedItem->setChecked(false); + } item->setChecked(true); m_pCheckedItem = item; + qDebug() << "Checked item:" << item->text() << "app:" << item->property("app").toString(); } OpenWithDialogListItem *OpenWithDialog::createItem(const QIcon &icon, const QString &name, const QString &filePath, const QString &strExec) @@ -421,10 +442,13 @@ OpenWithDialogListItem *OpenWithDialog::createItem(const QIcon &icon, const QStr void OpenWithDialog::slotUseOtherApplication() { + qDebug() << "User clicked 'Add other programs'"; const QString &file_path = QFileDialog::getOpenFileName(this); - if (file_path.isEmpty()) + if (file_path.isEmpty()) { + qDebug() << "No file selected in file dialog"; return; + } QFileInfo info(file_path); QString target_desktop_file_name("%1/%2-custom-open-%3.desktop"); @@ -485,9 +509,12 @@ void OpenWithDialog::slotUseOtherApplication() void OpenWithDialog::slotOpenFileByApp() { - if (!m_pCheckedItem) + if (!m_pCheckedItem) { + qWarning() << "No item selected for opening file"; return; + } + qDebug() << "User confirmed opening with app:" << m_pCheckedItem->property("exec").toString(); m_bOk = true; m_strAppExecName = m_pCheckedItem->property("exec").toString(); close(); diff --git a/src/source/dialog/openwithdialog/properties.cpp b/src/source/dialog/openwithdialog/properties.cpp index faf32ea10..b3b1e0cf0 100644 --- a/src/source/dialog/openwithdialog/properties.cpp +++ b/src/source/dialog/openwithdialog/properties.cpp @@ -17,9 +17,11 @@ */ Properties::Properties(const QString &fileName, const QString &group) { + qDebug() << "Creating Properties object for file:" << fileName << "group:" << group; if (!fileName.isEmpty()) { load(fileName, group); } + qDebug() << "Properties object created with" << data.size() << "items"; } /** @@ -28,7 +30,9 @@ Properties::Properties(const QString &fileName, const QString &group) */ Properties::Properties(const Properties &other) { + qDebug() << "Creating Properties copy"; this->data = other.data; + qDebug() << "Copied" << data.size() << "properties"; } /** @@ -39,6 +43,7 @@ Properties::Properties(const Properties &other) */ bool Properties::load(const QString &fileName, const QString &group) { + qDebug() << "Loading properties from file:" << fileName << "group:" << group; // NOTE: This class is used for reading of property files instead of QSettings // class, which considers separator ';' as comment @@ -46,16 +51,21 @@ bool Properties::load(const QString &fileName, const QString &group) // Try open file QFile file(fileName); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { + qWarning() << "Failed to open properties file:" << fileName; return false; } + qDebug() << "File opened successfully"; // Clear old data data.clear(); + qDebug() << "Cleared existing properties"; // Indicator whether group was found or not, if name of group was not // specified, groupFound is always true bool groupFound = group.isEmpty(); + qDebug() << "Group search:" << (groupFound ? "disabled" : "enabled"); + int loadedProperties = 0; // Read propeties QTextStream in(&file); while (!in.atEnd()) { @@ -73,17 +83,23 @@ bool Properties::load(const QString &fileName, const QString &group) if (!group.isEmpty() && line.trimmed().startsWith("[")) { QString tmp = line.trimmed().replace("[", "").replace("]", ""); groupFound = group.trimmed().compare(tmp) == 0; + qDebug() << "Found group:" << tmp << "match:" << groupFound; } // If we are in correct group and line contains assignment then read data int first_equal = line.indexOf('='); if (groupFound && first_equal >= 0) { - data.insert(line.left(first_equal).trimmed(), line.mid(first_equal + 1).trimmed()); + QString key = line.left(first_equal).trimmed(); + QString value = line.mid(first_equal + 1).trimmed(); + data.insert(key, value); + loadedProperties++; + qDebug() << "Loaded property:" << key << "=" << value; } } file.close(); + qInfo() << "Loaded" << loadedProperties << "properties from file"; return true; } @@ -96,25 +112,36 @@ bool Properties::load(const QString &fileName, const QString &group) */ bool Properties::save(const QString &fileName, const QString &group) { + qDebug() << "Saving properties to file:" << fileName << "group:" << group; + // Try open file QFile file(fileName); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { + qWarning() << "Failed to open properties file for writing:" << fileName; return false; } + qDebug() << "File opened for writing"; // Write group QTextStream out(&file); if (!group.isEmpty()) { out << "[" + group + "]\n"; + qDebug() << "Wrote group header:" << group; } // Write data + int savedProperties = 0; foreach (QString key, data.keys()) { - out << key << "=" << data.value(key).toString() << "\n"; + QString value = data.value(key).toString(); + out << key << "=" << value << "\n"; + savedProperties++; + qDebug() << "Saved property:" << key << "=" << value; } // Exit file.close(); + qInfo() << "Saved" << savedProperties << "properties to file"; + return true; } @@ -136,6 +163,10 @@ bool Properties::contains(const QString &key) const */ QVariant Properties::value(const QString &key, const QVariant &defaultValue) { + qDebug() << "Getting property value for key:" << key; + if (!data.contains(key)) { + qDebug() << "Key not found, using default value"; + } return data.value(key, defaultValue); } @@ -146,11 +177,14 @@ QVariant Properties::value(const QString &key, const QVariant &defaultValue) */ void Properties::set(const QString &key, const QVariant &value) { + qDebug() << "Setting property value for key:" << key; if (data.contains(key)) { + qDebug() << "Key already exists, replacing value"; data.take(key); } data.insert(key, value); + qDebug() << "Property set successfully"; } /** @@ -160,5 +194,6 @@ void Properties::set(const QString &key, const QVariant &value) */ QStringList Properties::getKeys() const { + qDebug() << "Getting all property keys, count:" << data.size(); return data.keys(); } diff --git a/src/source/dialog/popupdialog.cpp b/src/source/dialog/popupdialog.cpp index ef77a76b2..449426827 100644 --- a/src/source/dialog/popupdialog.cpp +++ b/src/source/dialog/popupdialog.cpp @@ -26,19 +26,22 @@ const int g_nLineEditHeight = 36; TipDialog::TipDialog(QWidget *parent) : DDialog(parent) { + qDebug() << "TipDialog constructor"; setFixedWidth(380); // 设置对话框图标 QPixmap pixmap = UiTools::renderSVG(":assets/icons/deepin/builtin/icons/compress_warning_32px.svg", QSize(32, 32)); setIcon(pixmap); + qDebug() << "TipDialog initialized with icon"; } TipDialog::~TipDialog() { - + qDebug() << "TipDialog destroyed"; } int TipDialog::showDialog(const QString &strDesText, const QString btnMsg, ButtonType btnType, const QString &strToolTip) { + qDebug() << "Showing TipDialog with message:" << strDesText; m_strDesText = strDesText; // 描述内容 DLabel *pDesLbl = new DLabel(this); @@ -90,20 +93,23 @@ void TipDialog::changeEvent(QEvent *event) SimpleQueryDialog::SimpleQueryDialog(QWidget *parent) : DDialog(parent) { + qDebug() << "SimpleQueryDialog constructor"; setFixedWidth(380); // 设置对话框图标 QPixmap pixmap = UiTools::renderSVG(":assets/icons/deepin/builtin/icons/compress_warning_32px.svg", QSize(32, 32)); setIcon(pixmap); + qDebug() << "SimpleQueryDialog initialized with icon"; } SimpleQueryDialog::~SimpleQueryDialog() { - + qDebug() << "SimpleQueryDialog destroyed"; } int SimpleQueryDialog::showDialog(const QString &strDesText, const QString btnMsg1, DDialog::ButtonType btnType1, const QString btnMsg2, DDialog::ButtonType btnType2, const QString btnMsg3, DDialog::ButtonType btnType3) { + qDebug() << "Showing SimpleQueryDialog with message:" << strDesText; m_strDesText = strDesText; // 描述内容 DLabel *pDesLbl = new DLabel(this); @@ -158,19 +164,22 @@ void SimpleQueryDialog::changeEvent(QEvent *event) OverwriteQueryDialog::OverwriteQueryDialog(QWidget *parent) : DDialog(parent) { + qDebug() << "OverwriteQueryDialog constructor"; setFixedWidth(380); // 设置对话框图标 QPixmap pixmap = UiTools::renderSVG(":assets/icons/deepin/builtin/icons/compress_warning_32px.svg", QSize(64, 64)); setIcon(pixmap); + qDebug() << "OverwriteQueryDialog initialized with icon"; } OverwriteQueryDialog::~OverwriteQueryDialog() { - + qDebug() << "OverwriteQueryDialog destroyed"; } void OverwriteQueryDialog::showDialog(QString file, bool bDir) { + qDebug() << "Showing OverwriteQueryDialog for file:" << file << "isDir:" << bDir; m_strFilesname = file; DLabel *strlabel = new DLabel; strlabel->setObjectName("NameLabel"); @@ -215,13 +224,17 @@ void OverwriteQueryDialog::showDialog(QString file, bool bDir) const int mode = exec(); m_applyAll = checkbox->isChecked(); // 是否应用到全部文件 + qInfo() << "Overwrite dialog result:" << mode << "applyAll:" << m_applyAll; if (0 == mode) { m_retType = OR_Skip; // 跳过 + qDebug() << "User selected Skip"; } else if (1 == mode) { m_retType = OR_Overwrite; // 替换 + qDebug() << "User selected Overwrite"; } else { m_retType = OR_Cancel; // 取消 + qDebug() << "User selected Cancel"; } } @@ -290,6 +303,7 @@ ConvertDialog::~ConvertDialog() QStringList ConvertDialog::showDialog() { + qDebug() << "Showing ConvertDialog for archive format conversion"; DLabel *strlabel = new DLabel; strlabel->setObjectName("ContentLabel"); strlabel->setFixedWidth(340); // 宽度固定 @@ -352,16 +366,20 @@ QStringList ConvertDialog::showDialog() autoFeed(strlabel); const int mode = exec(); + qInfo() << "Convert dialog result:" << mode << "zip:" << isZipConvert << "7z:" << is7zConvert; QStringList typeList; if (QDialog::Accepted == mode) { if (isZipConvert) { typeList << "true" << "zip"; + qDebug() << "Convert to ZIP format"; } else if (is7zConvert) { typeList << "true" << "7z"; + qDebug() << "Convert to 7Z format"; } } else { typeList << "false" << "none"; + qDebug() << "Convert dialog cancelled"; } return typeList; @@ -412,6 +430,7 @@ AppendDialog::~AppendDialog() int AppendDialog::showDialog(bool bMultiplePassword) { + qDebug() << "Showing AppendDialog, multiplePassword:" << bMultiplePassword; // 标题 DLabel *pTitleLbl = new DLabel(this); pTitleLbl->setObjectName("ContentLabel"); @@ -470,11 +489,13 @@ int AppendDialog::showDialog(bool bMultiplePassword) autoFeed(pTitleLbl); int iMode = exec(); + qInfo() << "Append dialog result:" << iMode << "passwordVisible:" << m_bPasswordVisible; // 接收加密 m_strPassword.clear(); if (DDialog::Accepted == iMode) { m_strPassword = pPasswordEdit->text(); + qDebug() << "Append with password:" << (!m_strPassword.isEmpty()); } return iMode; @@ -533,6 +554,7 @@ RenameDialog::~RenameDialog() int RenameDialog::showDialog(const QString &strReName, const QString &strAlias, bool isDirectory, bool isRepeat) { + qDebug() << "Showing RenameDialog for:" << strReName << "isDirectory:" << isDirectory << "isRepeat:" << isRepeat; if(m_lineEdit == NULL) {//创建DLineEdit,设定显示规则。 m_lineEdit = new DLineEdit(this); //输入字符格式与文管保持一致 diff --git a/src/source/dialog/progressdialog.cpp b/src/source/dialog/progressdialog.cpp index 088233764..32813c4ff 100644 --- a/src/source/dialog/progressdialog.cpp +++ b/src/source/dialog/progressdialog.cpp @@ -17,15 +17,20 @@ ProgressDialog::ProgressDialog(QWidget *parent): DAbstractDialog(parent) { + qDebug() << "Creating ProgressDialog"; initUI(); initConnect(); + qDebug() << "ProgressDialog initialized with default size:" + << m_defaultWidth << "x" << m_defaultHeight; } void ProgressDialog::initUI() { + qDebug() << "Initializing ProgressDialog UI"; setWindowFlags((windowFlags() & ~ Qt::WindowSystemMenuHint /*& ~Qt::Dialog*/) | Qt::Window); setFixedWidth(m_defaultWidth); setMinimumHeight(m_defaultHeight); + qDebug() << "Window flags and size set"; // 标题栏显示有几个任务正在进行 m_titlebar = new DTitlebar(this); @@ -83,8 +88,10 @@ void ProgressDialog::initConnect() */ void ProgressDialog::setCurrentTask(const QString &file) { + qDebug() << "Setting current task to:" << file; QFileInfo fileinfo(file); m_tasklable->setText(tr("Task") + ":" + fileinfo.fileName()); + qDebug() << "Task label updated"; } /** @@ -93,9 +100,12 @@ void ProgressDialog::setCurrentTask(const QString &file) */ void ProgressDialog::setCurrentFile(const QString &file) { + qDebug() << "Setting current file to:" << file; // 对字符串长度进行...划分 QFontMetrics elideFont(m_filelable->font()); - m_filelable->setText(elideFont.elidedText(tr("Extracting") + ":" + file, Qt::ElideMiddle, 330)); + QString displayText = elideFont.elidedText(tr("Extracting") + ":" + file, Qt::ElideMiddle, 330); + m_filelable->setText(displayText); + qDebug() << "File label updated to:" << displayText; } /** @@ -104,9 +114,10 @@ void ProgressDialog::setCurrentFile(const QString &file) */ void ProgressDialog::setProcess(double value) { -// m_dPerent = value; + qDebug() << "Setting progress to:" << value; if ((m_dPerent - value) == 0.0 || (m_dPerent > value)) { + qDebug() << "Progress not changed or decreased, skipping update"; return; } @@ -114,6 +125,7 @@ void ProgressDialog::setProcess(double value) if (100 != m_circleprogress->value()) { m_circleprogress->setValue(qRound(value)); + qDebug() << "Progress updated to:" << qRound(value); } } @@ -123,18 +135,11 @@ void ProgressDialog::setProcess(double value) */ void ProgressDialog::setFinished() { -// if (100 != m_circleprogress->value()) { -// setWindowTitle(""); + qDebug() << "Task finished, resetting progress"; m_circleprogress->setValue(0); m_dPerent = 0.0; -// m_filelable->setText(tr("Extraction successful") + ":" + tr("Extract to") + path); -// m_extractdialog->reject(); - //reject(); hide(); -//// m_filelable->setText(tr("Extracting") + ":"); -//// emit extractSuccess(tr("Extraction successful", "progressdialog")); -// emit sigResetPercentAndTime(); -// } + qDebug() << "ProgressDialog hidden"; } /** @@ -148,6 +153,7 @@ void ProgressDialog::clearprocess() void ProgressDialog::showDialog() { + qDebug() << "Showing ProgressDialog"; //获取ddialog的标题栏 DTitlebar *titlebar = findChild(); @@ -157,19 +163,20 @@ void ProgressDialog::showDialog() if (closeBtn != nullptr) { //如果存在则将标题栏的焦点代理设置为关闭按钮 closeBtn->clearFocus(); -// titlebar->setFocusProxy(closeBtn); } //设置ddialog的焦点代理为标题栏 this->setFocusProxy(titlebar); } open(); // 使用open来进行模态对话框显示,不阻塞事件循环,可以一直接收进度 + qDebug() << "ProgressDialog shown"; } void ProgressDialog::closeEvent(QCloseEvent *) { - qInfo() << m_circleprogress->value(); + qDebug() << "Close event received, current progress:" << m_circleprogress->value(); if (m_dPerent < 100 && m_dPerent > 0) { + qDebug() << "Task in progress, pausing operation"; // 先暂停 emit signalPause(); @@ -178,9 +185,11 @@ void ProgressDialog::closeEvent(QCloseEvent *) SimpleQueryDialog dialog(this); int iResult = dialog.showDialog(strDesText, tr("Cancel", "button"), DDialog::ButtonNormal, tr("Confirm", "button"), DDialog::ButtonRecommend); if (1 == iResult) { + qDebug() << "User confirmed cancellation"; // 取消操作 emit signalCancel(); } else { + qDebug() << "User chose to continue"; // 继续操作 emit signalContinue(); } @@ -205,13 +214,17 @@ void ProgressDialog::slotextractpress(int index) CommentProgressDialog::CommentProgressDialog(QWidget *parent): DAbstractDialog(parent) { + qDebug() << "Creating CommentProgressDialog"; initUI(); + qDebug() << "CommentProgressDialog initialized with size 400x79"; } void CommentProgressDialog::initUI() { + qDebug() << "Initializing CommentProgressDialog UI"; setFixedSize(400, 79); setWindowFlags((windowFlags() & ~ Qt::CustomizeWindowHint) | Qt::Window); + qDebug() << "Window flags and size set"; // 布局 DLabel *label = new DLabel(this); @@ -230,16 +243,20 @@ void CommentProgressDialog::initUI() void CommentProgressDialog::showdialog() { + qDebug() << "Showing CommentProgressDialog"; exec(); + qDebug() << "CommentProgressDialog shown"; } void CommentProgressDialog::setProgress(double value) { + qDebug() << "Setting comment progress to:" << value; m_progressBar->setValue(static_cast(value)); } void CommentProgressDialog::setFinished() { + qDebug() << "Comment update finished"; m_progressBar->setValue(100); QTimer::singleShot(100, this, [ = ] {hide();}); // 手动延时100ms再关闭 } diff --git a/src/source/dialog/settingdialog.cpp b/src/source/dialog/settingdialog.cpp index c4666faa4..104200a86 100644 --- a/src/source/dialog/settingdialog.cpp +++ b/src/source/dialog/settingdialog.cpp @@ -24,71 +24,92 @@ DGUI_USE_NAMESPACE SettingDialog::SettingDialog(QWidget *parent): DSettingsDialog(parent) { + qDebug() << "Creating SettingDialog"; initUI(); initConnections(); + qDebug() << "SettingDialog initialized"; } SettingDialog::~SettingDialog() { + qDebug() << "Destroying SettingDialog"; SAFE_DELETE_ELE(m_settings); + qDebug() << "SettingDialog destroyed"; } QString SettingDialog::getDefaultExtractPath() { + qDebug() << "Getting default extract path:" << m_curpath; return m_curpath; } bool SettingDialog::isAutoCreatDir() { // 读取配置文件信息 是否自动创建文件夹 - return m_settings->value("base.decompress.create_folder").toBool(); + bool autoCreate = m_settings->value("base.decompress.create_folder").toBool(); + qDebug() << "Auto create folder setting:" << autoCreate; + return autoCreate; } bool SettingDialog::isAutoOpen() { // 读取配置文件信息 是否自动打开文件夹 - return m_settings->value("base.decompress.open_folder").toBool(); + bool autoOpen = m_settings->value("base.decompress.open_folder").toBool(); + qDebug() << "Auto open folder setting:" << autoOpen; + return autoOpen; } bool SettingDialog::isAutoDeleteFile() { // 读取配置文件信息 压缩后是否删除源文件 - return m_settings->value("base.file_management.delete_file").toBool(); + bool autoDelete = m_settings->value("base.file_management.delete_file").toBool(); + qDebug() << "Auto delete file after compression:" << autoDelete; + return autoDelete; } QString SettingDialog::isAutoDeleteArchive() { // 读取配置文件信息 解压后是否删除压缩文件 - return m_deleteArchiveOption->value().toString(); + QString deleteOption = m_deleteArchiveOption->value().toString(); + qDebug() << "Delete archive after extraction option:" << deleteOption; + return deleteOption; } bool SettingDialog::isAssociatedType(QString mime) // 暂时未被调用 { // 读取配置文件信息 是否是解压缩关联文件类型 - return m_settings->option("file_association.file_association_type." + mime.remove("application/"))->value().toBool(); + QString key = "file_association.file_association_type." + mime.remove("application/"); + bool isAssociated = m_settings->option(key)->value().toBool(); + qDebug() << "File association for" << mime << ":" << isAssociated; + return isAssociated; } void SettingDialog::initUI() { + qDebug() << "Initializing SettingDialog UI"; createSettingButton(); // 创建选择按钮 createPathBox(); // 创建默认解压路径 createDeleteBox(); // 创建删除选项 // 通过json文件创建DSettings对象 m_settings = DSettings::fromJsonFile(":assets/data/deepin-compressor.json"); + qDebug() << "Settings loaded from JSON file"; const QString confDir = DStandardPaths::writableLocation(QStandardPaths::AppConfigLocation); // 换了枚举值,待验证 - const QString confPath = confDir + QDir::separator() + "deepin-compressor.conf"; + qDebug() << "Config path:" << confPath; // 创建设置项存储后端 auto backend = new QSettingBackend(confPath, this); m_settings->setBackend(backend); + qDebug() << "Settings backend initialized"; // 通过DSettings对象构建设置界面 updateSettings(m_settings); + qDebug() << "Settings UI updated"; writeConfbf(); // 在应用被打开的时候,写新的config文件 具体功能待验证 + qDebug() << "Initial config file written"; } void SettingDialog::initConnections() @@ -318,10 +339,12 @@ void SettingDialog::writeConfbf() file.open(QIODevice::WriteOnly | QIODevice::Text); // 写配置 + qDebug() << "Writing configuration to file:" << confPath; foreach (QString key, UiTools::m_associtionlist) { QString bValue = m_settings->option(key)->value().toString(); QString content = key + ":" + bValue + "\n"; file.write(content.toUtf8()); + qDebug() << "Config entry:" << key << "=" << bValue; } file.close(); @@ -329,34 +352,44 @@ void SettingDialog::writeConfbf() void SettingDialog::slotSettingsChanged(const QString &key, const QVariant &value) { + qDebug() << "Setting changed - Key:" << key << "Value:" << value; // 设置界面点击恢复默认选项 具体功能待确认、完善 qInfo() << "slotSettingsChanged: " << key << value; writeConfbf(); + qDebug() << "Config file updated after setting change"; } void SettingDialog::slotClickSelectAllButton() { + qDebug() << "Select All button clicked"; foreach (QString key, UiTools::m_associtionlist) { m_settings->setOption(key, true); } + qDebug() << "All file associations selected"; } void SettingDialog::slotClickCancelSelectAllButton() { + qDebug() << "Cancel Select All button clicked"; foreach (QString key, UiTools::m_associtionlist) { m_settings->setOption(key, false); } + qDebug() << "All file associations deselected"; } void SettingDialog::slotClickRecommendedButton() { + qDebug() << "Recommended button clicked"; foreach (QString key, UiTools::m_associtionlist) { if ("file_association.file_association_type.x-iso9660-image" == key || "file_association.file_association_type.x-iso9660-appimage" == key || "file_association.file_association_type.x-source-rpm" == key) { m_settings->setOption(key, false); + qDebug() << "Excluded association:" << key; } else { m_settings->setOption(key, true); + qDebug() << "Included association:" << key; } } + qDebug() << "Recommended file associations set"; } diff --git a/src/source/mainwindow.cpp b/src/source/mainwindow.cpp index a25587950..55bb6835d 100644 --- a/src/source/mainwindow.cpp +++ b/src/source/mainwindow.cpp @@ -62,44 +62,58 @@ MainWindow::MainWindow(QWidget *parent) : DMainWindow(parent) , m_strProcessID(QString::number(QCoreApplication::applicationPid())) // 获取应用进程号 { + qDebug() << "MainWindow constructor started"; setWindowTitle(tr("Archive Manager")); // 先构建初始界面 + qDebug() << "Creating main UI components"; m_pMainWidget = new QStackedWidget(this); // 中心面板 m_pHomePage = new HomePage(this); // 首页 m_pMainWidget->addWidget(m_pHomePage); setCentralWidget(m_pMainWidget); // 设置中心面板 m_pMainWidget->setCurrentIndex(0); + qDebug() << "Main UI components created"; #if QT_VERSION < QT_VERSION_CHECK(6 ,0, 0) + qDebug() << "Creating shortcut for Qt5"; m_openkey = new QShortcut(QKeySequence(Qt::Key_Slash + Qt::CTRL + Qt::SHIFT), this); // Ctrl+Shift+/ #else + qDebug() << "Creating shortcut for Qt6"; m_openkey = new QShortcut(QKeyCombination(Qt::CTRL | Qt::SHIFT, Qt::Key_Slash), this); // Ctrl+Shift+/ #endif m_openkey->setContext(Qt::ApplicationShortcut); // 初始化标题栏 + qDebug() << "Initializing title bar"; initTitleBar(); + qDebug() << "Initializing application data"; initData(); // 开启定时器刷新界面 m_iInitUITimer = startTimer(500); + qDebug() << "UI refresh timer started with ID:" << m_iInitUITimer; + qDebug() << "Writing startup event log"; QJsonObject obj{ {"tid", EventLogUtils::Start}, {"version", QCoreApplication::applicationVersion()}, {"mode", 1} }; EventLogUtils::get().writeLogs(obj); + qDebug() << "MainWindow constructor completed"; } MainWindow::~MainWindow() { + qDebug() << "MainWindow destructor started"; // 保存窗口大小状态 + qDebug() << "Saving window size configuration"; saveConfigWinSize(width(), height()); + qDebug() << "Destroying ArchiveManager instance"; ArchiveManager::get_instance()->destory_instance(); // 清除缓存数据 + qDebug() << "Cleaning up temporary files"; QProcess p; QString command = "rm"; QStringList args; @@ -109,21 +123,26 @@ MainWindow::~MainWindow() p.waitForFinished(); if (nullptr != m_mywork && m_mywork->isRunning()) { + qDebug() << "Stopping calculate size thread"; m_mywork->set_thread_stop(true); // 结束计算大小线程 m_mywork->wait(); //必须等待线程结束 } if (nullptr != m_mywork) { + qDebug() << "Deleting calculate size thread object"; m_mywork->deleteLater(); m_mywork = nullptr; } - qInfo() << "应用正常退出"; + qInfo() << "Application exited normally"; + qDebug() << "MainWindow destructor completed"; } bool MainWindow::checkHerePath(const QString &strPath) { + qDebug() << "Checking path permissions:" << strPath; QFileInfo info(strPath); if (!(info.isWritable() && info.isExecutable())) { // 检查一选择保存路径是否有权限 + qWarning() << "Path permission denied:" << strPath; TipDialog dialog(this); // 屏幕居中显示 moveDialogToCenter(&dialog); @@ -131,6 +150,7 @@ bool MainWindow::checkHerePath(const QString &strPath) return false; } + qDebug() << "Path permission granted:" << strPath; return true; } @@ -195,19 +215,26 @@ void MainWindow::initTitleBar() void MainWindow::initData() { + qDebug() << "Initializing application data"; // 初始化数据配置 m_pSettings = new QSettings(QDir(UiTools::getConfigPath()).filePath("config.conf"), QSettings::IniFormat, this); if (m_pSettings->value("dir").toString().isEmpty()) { + qDebug() << "Setting default directory path in config"; m_pSettings->setValue("dir", ""); } + qDebug() << "Setting window size and minimum size"; resize(getConfigWinSize()); // 设置窗口尺寸 setMinimumSize(620, 300); // task 16309调整最小大小 + qDebug() << "Application data initialized"; } void MainWindow::initConnections() { + qDebug() << "Initializing signal-slot connections"; + + qDebug() << "Connecting UI signals"; connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, this, &MainWindow::slotThemeChanged); connect(m_pTitleWidget, &TitleWidget::sigTitleClicked, this, &MainWindow::slotTitleBtnClicked); @@ -237,6 +264,7 @@ void MainWindow::initConnections() connect(m_pFailurePage, &FailurePage::sigFailRetry, this, &MainWindow::slotFailureRetry); connect(m_pFailurePage, &FailurePage::sigBackButtonClickedOnFail, this, &MainWindow::slotFailureReturn); + qDebug() << "Connecting ArchiveManager signals"; connect(ArchiveManager::get_instance(), &ArchiveManager::signalJobFinished, this, &MainWindow::slotJobFinished); connect(ArchiveManager::get_instance(), &ArchiveManager::signalprogress, this, &MainWindow::slotReceiveProgress); connect(ArchiveManager::get_instance(), &ArchiveManager::signalCurFileName, this, &MainWindow::slotReceiveCurFileName); @@ -244,18 +272,24 @@ void MainWindow::initConnections() connect(ArchiveManager::get_instance(), &ArchiveManager::signalCurArchiveName, this, &MainWindow::slotReceiveCurArchiveName); connect(ArchiveManager::get_instance(), &ArchiveManager::signalQuery, this, &MainWindow::slotQuery); + qDebug() << "Connecting file watcher signals"; connect(m_pOpenFileWatcher, &OpenFileWatcher::fileChanged, this, &MainWindow::slotOpenFileChanged); + //定制需求不显示ctrl+shift+?快捷键菜单 if(!property(ORDER_JSON).isValid()) { + qDebug() << "Connecting shortcut signals"; connect(m_openkey, &QShortcut::activated, this, &MainWindow::slotShowShortcutTip); } + + qDebug() << "All signal-slot connections initialized"; } void MainWindow::refreshPage() { - qInfo() << "refreshPage()"; + qInfo() << "Refreshing page, current page ID:" << m_ePageID; switch (m_ePageID) { case PI_Home: { + qDebug() << "Switching to Home page"; resetMainwindow(); m_pMainWidget->setCurrentIndex(0); setTitleButtonStyle(false, false); @@ -263,9 +297,11 @@ void MainWindow::refreshPage() } break; case PI_Compress: { + qDebug() << "Switching to Compress page"; m_pMainWidget->setCurrentIndex(1); setTitleButtonStyle(true, false, DStyle::StandardPixmap::SP_IncreaseElement); if (0 == m_iCompressedWatchTimerID) { + qDebug() << "Starting compressed watch timer"; m_iCompressedWatchTimerID = startTimer(1); } @@ -273,9 +309,11 @@ void MainWindow::refreshPage() } break; case PI_CompressSetting: { + qDebug() << "Switching to Compress Setting page"; m_pMainWidget->setCurrentIndex(2); setTitleButtonStyle(true, false, DStyle::StandardPixmap::SP_ArrowLeave); if (0 == m_iCompressedWatchTimerID) { + qDebug() << "Starting compressed watch timer"; m_iCompressedWatchTimerID = startTimer(1); } @@ -283,6 +321,7 @@ void MainWindow::refreshPage() } break; case PI_UnCompress: { + qDebug() << "Switching to Uncompress page"; m_pMainWidget->setCurrentIndex(3); bool bShowAddBtn = true; if(property(ORDER_JSON).isValid()) { @@ -299,6 +338,7 @@ void MainWindow::refreshPage() } break; case PI_AddCompressProgress: { + qDebug() << "Switching to Add Compress Progress page"; m_pMainWidget->setCurrentIndex(4); setTitleButtonStyle(false, false); m_pProgressPage->resetProgress(); @@ -306,6 +346,7 @@ void MainWindow::refreshPage() } break; case PI_CompressProgress: { + qDebug() << "Switching to Compress Progress page"; m_pMainWidget->setCurrentIndex(4); setTitleButtonStyle(false, false); m_pProgressPage->resetProgress(); @@ -313,6 +354,7 @@ void MainWindow::refreshPage() } break; case PI_UnCompressProgress: { + qDebug() << "Switching to Uncompress Progress page"; m_pMainWidget->setCurrentIndex(4); setTitleButtonStyle(false, false); m_pProgressPage->resetProgress(); @@ -320,6 +362,7 @@ void MainWindow::refreshPage() } break; case PI_DeleteProgress: { + qDebug() << "Switching to Delete Progress page"; m_pMainWidget->setCurrentIndex(4); setTitleButtonStyle(false, false); m_pProgressPage->resetProgress(); @@ -327,6 +370,7 @@ void MainWindow::refreshPage() } break; case PI_RenameProgress: { + qDebug() << "Switching to Rename Progress page"; m_pMainWidget->setCurrentIndex(4); setTitleButtonStyle(false, false); m_pProgressPage->resetProgress(); @@ -376,8 +420,10 @@ void MainWindow::refreshPage() qint64 MainWindow::calSelectedTotalFileSize(const QStringList &files) { + qDebug() << "Calculating total size of selected files, count:" << files.size(); QElapsedTimer time1; time1.start(); + qDebug() << "File size calculation started"; m_stCompressParameter.qSize = 0; @@ -412,17 +458,22 @@ qint64 MainWindow::calSelectedTotalFileSize(const QStringList &files) void MainWindow::calFileSizeByThread(const QString &path) { + qDebug() << "Calculating folder size:" << path; QDir dir(path); - if (!dir.exists()) + if (!dir.exists()) { + qWarning() << "Directory does not exist:" << path; return; + } // 获得文件夹中的文件列表 QFileInfoList list = dir.entryInfoList(QDir::AllEntries | QDir::System | QDir::NoDotAndDotDot | QDir::Hidden); + qDebug() << "Found" << list.count() << "items in directory:" << path; for (int i = 0; i < list.count(); ++i) { QFileInfo fileInfo = list.at(i); if (fileInfo.isDir()) { + qDebug() << "Processing subdirectory:" << fileInfo.filePath(); // 如果是文件夹 则将此文件夹放入线程池中进行计算 #if QT_VERSION < QT_VERSION_CHECK(6 ,0, 0) QtConcurrent::run(this, &MainWindow::calFileSizeByThread, fileInfo.filePath()); @@ -437,13 +488,16 @@ void MainWindow::calFileSizeByThread(const QString &path) qint64 curFileSize = fileInfo.size(); #ifdef __aarch64__ if (maxFileSize_ < curFileSize) { + qDebug() << "Updating max file size to:" << curFileSize; maxFileSize_ = curFileSize; } #endif m_stCompressParameter.qSize += curFileSize; mutex.unlock(); + qDebug() << "Processed file:" << fileInfo.filePath() << "size:" << curFileSize; } } + qDebug() << "Finished calculating size for directory:" << path; } void MainWindow::setTitleButtonStyle(bool bVisible, bool bVisible2, DStyle::StandardPixmap pixmap) @@ -454,7 +508,9 @@ void MainWindow::setTitleButtonStyle(bool bVisible, bool bVisible2, DStyle::Stan void MainWindow::loadArchive(const QString &strArchiveFullPath) { + qDebug() << "Loading archive:" << strArchiveFullPath; if (!QFileInfo(strArchiveFullPath).isReadable()) { + qWarning() << "No permission to load archive:" << strArchiveFullPath; TipDialog dialog(this); dialog.showDialog(tr("You do not have permission to load %1").arg(strArchiveFullPath), tr("OK", "button"), DDialog::ButtonNormal); return; @@ -462,11 +518,14 @@ void MainWindow::loadArchive(const QString &strArchiveFullPath) PERF_PRINT_BEGIN("POINT-05", "加载时间"); m_operationtype = Operation_Load; + qDebug() << "Archive load operation started"; //处理分卷包名称 QString transFile = strArchiveFullPath; + qDebug() << "Processing split archive name"; QStringList listSupportedMimeTypes = PluginManager::get_instance().supportedWriteMimeTypes(PluginManager::SortByComment); // 获取支持的压缩格式 CustomMimeType mimeType = determineMimeType(transFile); + qDebug() << "Archive mime type:" << mimeType.name(); // 构建压缩包加载之后的数据 m_stUnCompressParameter.strFullPath = strArchiveFullPath; @@ -474,7 +533,7 @@ void MainWindow::loadArchive(const QString &strArchiveFullPath) QFileInfo fileinfo(transFile); if (!fileinfo.exists()) { // 分卷不完整(损坏) - // 比如打开1.7z.002时,1.7z.001不存在 + qCritical() << "Split archive volume missing:" << transFile; m_ePageID = PI_Failure; showErrorMessage(FI_Load, EI_ArchiveMissingVolume); return; @@ -484,37 +543,47 @@ void MainWindow::loadArchive(const QString &strArchiveFullPath) m_stUnCompressParameter.bMultiplePassword = (mimeType.name() == "application/zip") ? true : false; m_stUnCompressParameter.bModifiable = (listSupportedMimeTypes.contains(mimeType.name()) && fileinfo.isWritable() && m_stUnCompressParameter.eSplitVolume == UnCompressParameter::ST_No); // 支持压缩且文件可写的非分卷格式才能修改数据 + qDebug() << "Archive properties - modifiable:" << m_stUnCompressParameter.bModifiable + << ", commentModifiable:" << m_stUnCompressParameter.bCommentModifiable + << ", multiplePassword:" << m_stUnCompressParameter.bMultiplePassword; // 监听压缩包 + qDebug() << "Setting up archive file watcher"; watcherArchiveFile(transFile); if(property(ORDER_JSON).isValid()) { if(m_pUnCompressPage) m_pUnCompressPage->setProperty(ORDER_JSON, property(ORDER_JSON)); } m_pUnCompressPage->setArchiveFullPath(transFile, m_stUnCompressParameter); // 设置压缩包全路径和是否分卷 + qDebug() << "Archive path set to:" << transFile; // 根据是否可修改压缩包标志位设置打开文件选项是否可用 m_pTitleWidget->setTitleButtonEnable(m_stUnCompressParameter.bModifiable); m_pOpenAction->setEnabled(m_stUnCompressParameter.bModifiable); + qDebug() << "UI controls enabled state set based on archive properties"; // 设置默认解压路径 if (m_pSettingDlg->getDefaultExtractPath().isEmpty()) { - // 若默认为空,即设置默认解压路径为压缩包所在位置 + qDebug() << "Setting default extract path to archive location:" << fileinfo.absolutePath(); m_pUnCompressPage->setDefaultUncompressPath(fileinfo.absolutePath()); // 设置默认解压路径 } else { - // 否则,使用设置选项中路径 + qDebug() << "Setting default extract path from settings:" << m_pSettingDlg->getDefaultExtractPath(); m_pUnCompressPage->setDefaultUncompressPath(m_pSettingDlg->getDefaultExtractPath()); // 设置默认解压路径 } // zip分卷指定使用cli7zplugin UiTools::AssignPluginType eType = (UnCompressParameter::ST_Zip == m_stUnCompressParameter.eSplitVolume) ? (UiTools::AssignPluginType::APT_Cli7z) : (UiTools::AssignPluginType::APT_Auto); + qDebug() << "Using plugin type:" << static_cast(eType); + // 加载操作 if (ArchiveManager::get_instance()->loadArchive(transFile, eType)) { + qDebug() << "Archive load started, showing loading page"; m_pLoadingPage->setDes(tr("Loading, please wait...")); m_pLoadingPage->startLoading(); // 开始加载 m_ePageID = PI_Loading; } else { + qCritical() << "No available plugin for archive type:" << mimeType.name(); // 无可用插件,回到首页 m_ePageID = PI_Home; refreshPage(); @@ -523,6 +592,7 @@ void MainWindow::loadArchive(const QString &strArchiveFullPath) TipDialog dialog(this); dialog.showDialog(tr("Plugin error"), tr("OK", "button"), DDialog::ButtonNormal); } + qDebug() << "Archive load operation completed"; } void MainWindow::timerEvent(QTimerEvent *event) @@ -530,7 +600,7 @@ void MainWindow::timerEvent(QTimerEvent *event) if (m_iInitUITimer == event->timerId()) { if (!m_initFlag) { // 初始化界面 - qInfo() << "初始化界面"; + qInfo() << "Initializing UI components"; initUI(); initConnections(); m_initFlag = true; @@ -538,17 +608,21 @@ void MainWindow::timerEvent(QTimerEvent *event) killTimer(m_iInitUITimer); m_iInitUITimer = 0; + qDebug() << "UI initialization timer stopped"; } else if (m_iCompressedWatchTimerID == event->timerId()) { + qDebug() << "Checking compressed files status"; // 对压缩文件的监控 QStringList listFiles = m_pCompressPage->compressFiles(); + qDebug() << "Monitoring" << listFiles.count() << "compressed files"; for (int i = 0; i < listFiles.count(); i++) { QFileInfo info(listFiles[i]); if (!info.exists()) { - + qWarning() << "Compressed file missing:" << listFiles[i]; // 先暂停操作 ArchiveManager::get_instance()->pauseOperation(); + qDebug() << "Paused current operation due to file change"; QString displayName = UiTools::toShortString(info.fileName()); QString strTips = tr("%1 was changed on the disk, please import it again.").arg(displayName); @@ -557,18 +631,21 @@ void MainWindow::timerEvent(QTimerEvent *event) dialog.showDialog(strTips, tr("OK", "button"), DDialog::ButtonNormal); m_pCompressPage->refreshCompressedFiles(true, listFiles[i]); + qDebug() << "Refreshed compressed files list"; ArchiveManager::get_instance()->cancelOperation(); + qDebug() << "Canceled current operation"; // 返回到列表界面 if (m_ePageID != PI_Compress) { + qDebug() << "Switching to compress page"; m_ePageID = PI_Compress; refreshPage(); } - // 如果待压缩文件列表数目为空,回到首页 if (m_pCompressPage->compressFiles().count() == 0) { + qDebug() << "No more files to compress, switching to home page"; m_ePageID = PI_Home; refreshPage(); } @@ -580,77 +657,86 @@ void MainWindow::timerEvent(QTimerEvent *event) void MainWindow::closeEvent(QCloseEvent *event) { if (m_operationtype != Operation_NULL) { + qDebug() << "Application close requested with ongoing operation"; // 保存当前操作的状态以便还原操作 bool isPause = m_pProgressPage->isPause(); - qInfo() << "点击x按钮之前的操作" << isPause; + qInfo() << "Current operation status before close - paused:" << isPause; // 当前还有操作正在进行 slotPause(); // 先暂停当前操作 + qDebug() << "Operation paused for close confirmation"; + // 创建询问关闭对话框 SimpleQueryDialog dialog(this); int iResult = dialog.showDialog(tr("Are you sure you want to stop the ongoing task?"), tr("Cancel", "button"), DDialog::ButtonNormal, tr("Confirm", "button"), DDialog::ButtonRecommend); + // 点击确认时,停止当前操作,关闭应用 if (QDialog::Accepted == iResult) { + qDebug() << "User confirmed close, canceling operation"; slotCancel(); // 执行取消操作 event->accept(); } else { + qDebug() << "User canceled close request"; if (!isPause) { // 之前未暂停 + qDebug() << "Resuming operation"; slotContinue(); // 继续之前的操作 } - event->ignore(); // 忽略退出 } } else { + qDebug() << "Application closed with no ongoing operations"; event->accept(); // 忽略退出 } } bool MainWindow::checkSettings(const QString &file) { -// QString strTransFileName = file; -// UnCompressParameter::SplitType type; -// UiTools::transSplitFileName(strTransFileName, type); - + qDebug() << "Checking file settings for:" << file; QFileInfo info(file); if (!info.exists()) { + qWarning() << "File does not exist:" << file; // 文件不存在 TipDialog dialog(this); moveDialogToCenter(&dialog); dialog.showDialog(tr("No such file or directory"), tr("OK", "button"), DDialog::ButtonNormal); return false; } else { - if (!info.isReadable()) { + qWarning() << "No read permission for file:" << file; TipDialog dialog(this); dialog.showDialog(tr("You do not have permission to load %1").arg(file), tr("OK", "button"), DDialog::ButtonNormal); return false; } if (info.isDir()) { + qDebug() << "Selected item is a directory:" << file; // 选择打开的是文件夹 TipDialog dialog(this); moveDialogToCenter(&dialog); - dialog.showDialog(tr("The file format is not supported by Archive Manager"), tr("OK", "button"), DDialog::ButtonNormal); return false; } else { + qDebug() << "Checking file mime type"; // 文件判断 QString fileMime; - bool existMime = false; // 在设置界面是否被勾选 bool bArchive = false; // 是否是应用支持解压的格式 bool mimeIsChecked = true; // 默认该格式被勾选 // 判断内容 if (file.isEmpty()) { + qDebug() << "Empty file path"; existMime = true; } else { fileMime = determineMimeType(file).name(); + qDebug() << "Detected mime type:" << fileMime; if (fileMime.contains("application/")) fileMime = fileMime.remove("application/"); if (fileMime.size() > 0) { existMime = UiTools::isExistMimeType(fileMime, bArchive); + qDebug() << "Mime type exists in settings:" << existMime << ", is archive:" << bArchive; } else { + qDebug() << "Unknown mime type"; existMime = false; } } @@ -659,9 +745,11 @@ bool MainWindow::checkSettings(const QString &file) if (!existMime) { QString str; if (bArchive) { + qDebug() << "Archive format not enabled in settings"; // 如果是压缩包,提示勾选关联类型 str = tr("Please check the file association type in the settings of Archive Manager"); } else { + qDebug() << "Unsupported file format"; // 如果不是压缩包,提示非支持的压缩格式 str = tr("The file format is not supported by Archive Manager"); } @@ -673,9 +761,11 @@ bool MainWindow::checkSettings(const QString &file) int re = dialog.showDialog(str, tr("OK", "button"), DDialog::ButtonNormal); if (re != 1) { // ? mimeIsChecked = false; + qDebug() << "User chose not to proceed with unsupported format"; } } + qDebug() << "File check completed, result:" << mimeIsChecked; return mimeIsChecked; } } @@ -683,8 +773,10 @@ bool MainWindow::checkSettings(const QString &file) bool MainWindow::handleApplicationTabEventNotify(QObject *obj, QKeyEvent *evt) { + qDebug() << "Handling tab event for object:" << obj->objectName() << "key:" << evt->key(); #if 0 if (!m_pUnCompressPage || !m_pCompressPage /*|| !m_pCompressSetting*/) { + qDebug() << "Required pages not initialized"; return false; } @@ -833,6 +925,7 @@ bool MainWindow::handleApplicationTabEventNotify(QObject *obj, QKeyEvent *evt) void MainWindow::handleQuit() { + qDebug() << "Handling application quit request"; // 关闭处理 close(); } @@ -886,10 +979,13 @@ void MainWindow::slotHandleArguments(const QStringList &listParam, MainWindow::A void MainWindow::slotTitleBtnClicked() { + qDebug() << "Title button clicked, current page:" << m_ePageID; if (PI_Home == m_ePageID || PI_Compress == m_ePageID || PI_UnCompress == m_ePageID) { + qDebug() << "Opening file selection dialog"; // 通过文件选择对话框选择文件进行操作 slotChoosefiles(); } else if (PI_CompressSetting == m_ePageID) { + qDebug() << "Returning from compress settings page"; // 压缩设置界面点击 返回 m_ePageID = PI_Compress; refreshPage(); @@ -898,15 +994,21 @@ void MainWindow::slotTitleBtnClicked() void MainWindow::slotChoosefiles() { + qDebug() << "Preparing file selection dialog"; if(property(ORDER_JSON).isValid()) { + qDebug() << "Checking order JSON restrictions"; if(m_pUnCompressPage) { QVariantMap mapdata = m_pUnCompressPage->mapOrderJson(); if(mapdata.contains(ORDER_EDIT)) { - if(!mapdata.value(ORDER_EDIT).toBool()) return; + if(!mapdata.value(ORDER_EDIT).toBool()) { + qDebug() << "Operation restricted by order JSON"; + return; + } } } } // 创建文件选择对话框 + qDebug() << "Creating file dialog"; DFileDialog dialog(this); dialog.setAcceptMode(DFileDialog::AcceptOpen); dialog.setFileMode(DFileDialog::ExistingFiles); @@ -970,8 +1072,10 @@ void MainWindow::slotChoosefiles() void MainWindow::slotDragSelectedFiles(const QStringList &listFiles) { + qDebug() << "Processing drag selected files, count:" << listFiles.count(); // 未选择任何文件 if (listFiles.count() == 0) { + qDebug() << "No files selected"; return; } @@ -1002,25 +1106,38 @@ void MainWindow::slotCompressLevelChanged(bool bRootIndex) void MainWindow::slotCompressNext() { + qDebug() << "Preparing for compression"; QStringList listCompressFiles = m_pCompressPage->compressFiles(); // 获取待压缩的文件 - m_pCompressSettingPage->setFileSize(listCompressFiles, calSelectedTotalFileSize(listCompressFiles)); - //m_pCompressSettingPage->refreshMenu(); + qDebug() << "Compressing" << listCompressFiles.count() << "files"; + + qint64 totalSize = calSelectedTotalFileSize(listCompressFiles); + qDebug() << "Total size of files to compress:" << totalSize << "bytes"; + + m_pCompressSettingPage->setFileSize(listCompressFiles, totalSize); // 刷新界面 切换到压缩设置界面 m_ePageID = PI_CompressSetting; refreshPage(); + qDebug() << "Switched to compress settings page"; } void MainWindow::slotCompress(const QVariant &val) { - qInfo() << "点击了压缩按钮"; + qInfo() << "Compression started"; m_operationtype = Operation_Create; m_stCompressParameter = val.value(); // 获取压缩参数 + qDebug() << "Compression parameters:" + << "Type:" << m_stCompressParameter.strMimeType + << "Encryption:" << m_stCompressParameter.bEncryption + << "Split:" << m_stCompressParameter.bSplit + << "Threads:" << m_stCompressParameter.iCPUTheadNum; + QStringList listFiles = m_pCompressPage->compressFiles(); // 获取待压缩文件 + qDebug() << "Files to compress:" << listFiles; if (listFiles.count() == 0) { - qInfo() << "没有需要压缩的文件"; + qWarning() << "No files to compress"; return; } @@ -1140,6 +1257,7 @@ void MainWindow::slotJobFinished(ArchiveJob::JobType eJobType, PluginFinishType void MainWindow::slotUncompressClicked(const QString &strUncompressPath) { + qDebug() << "Starting extraction to path:" << strUncompressPath; QJsonObject obj{ {"tid", EventLogUtils::ExtractCompressFile}, {"operate", "ExtractCompressFile"}, @@ -1198,7 +1316,9 @@ void MainWindow::slotUncompressClicked(const QString &strUncompressPath) void MainWindow::slotReceiveProgress(double dPercentage) { + qDebug() << "Progress update:" << dPercentage << "%"; if (Operation_SingleExtract == m_operationtype) { //提取删除操作使用小弹窗进度 + qDebug() << "Single extract operation progress"; //需要添加dPercentage < 100判断,否则会出现小文件提取进度对话框不会自动关闭 if (!m_pProgressdialog->isVisible() && dPercentage < 100 && dPercentage > 0) { m_pProgressdialog->showDialog(); @@ -1206,12 +1326,14 @@ void MainWindow::slotReceiveProgress(double dPercentage) m_pProgressdialog->setProcess(dPercentage); } else if (Operation_Update_Comment == m_operationtype) { // 更新压缩包注释的进度 + qDebug() << "Comment update operation progress"; if (!m_commentProgressDialog->isVisible()) { m_commentProgressDialog->exec(); } m_commentProgressDialog->setProgress(dPercentage); } else { + qDebug() << "Main operation progress"; m_pProgressPage->setProgress(dPercentage); } } @@ -1241,6 +1363,7 @@ void MainWindow::slotQuery(Query *query) void MainWindow::Extract2PathFinish(const QString &msg) { + qInfo() << "Extraction completed with message:" << msg; QIcon icon = UiTools::renderSVG(":assets/icons/deepin/builtin/icons/compress_success_30px.svg", QSize(30, 30)); sendMessage(new CustomFloatingMessage(icon, msg, 1000, this)); @@ -1259,20 +1382,24 @@ void MainWindow::Extract2PathFinish(const QString &msg) QString MainWindow::createTempPath() { + qDebug() << "Creating temporary path"; // 创建临时路径 QTemporaryDir dir; QString strTempPath = dir.path(); strTempPath = strTempPath.remove(TEMPPATH); // 移除/tmp + qDebug() << "Temporary path created:" << strTempPath; return strTempPath; } QString MainWindow::getExtractPath(const QString &strArchiveFullPath) { + qDebug() << "Getting extract path for:" << strArchiveFullPath; QString strpath = ""; // 根据是否自动创建文件夹获取解压最后一层路径 if (m_pSettingDlg->isAutoCreatDir()) { QFileInfo info(strArchiveFullPath); strpath = UiTools::handleFileName(info.filePath()); + qDebug() << "Auto-created extract path:" << strpath; } return strpath; @@ -1280,56 +1407,69 @@ QString MainWindow::getExtractPath(const QString &strArchiveFullPath) void MainWindow::handleJobNormalFinished(ArchiveJob::JobType eType, ErrorType eErrorType) { + qDebug() << "Job finished, type:" << eType << ", error:" << eErrorType; switch (eType) { // 创建压缩包 case ArchiveJob::JT_Create: { + qInfo() << "Compression job completed successfully"; m_ePageID = PI_Success; showSuccessInfo(SI_Compress); // 显示压缩成功 + // 删除文件监听定时器 if (0 != m_iCompressedWatchTimerID) { + qDebug() << "Stopping file watch timer"; killTimer(m_iCompressedWatchTimerID); m_iCompressedWatchTimerID = 0; } + // 设置了压缩完成自动删除原文件 if (m_pSettingDlg->isAutoDeleteFile()) { + qDebug() << "Auto-deleting original files after compression"; deleteWhenJobFinish(ArchiveJob::JT_Create); } // 初始化文件服务 if (nullptr == m_pDDesktopServicesThread) { + qDebug() << "Initializing desktop services thread"; m_pDDesktopServicesThread = new DDesktopServicesThread(this); } // 设置需要查看的文件为压缩包 - QString name = m_stCompressParameter.bSplit ? m_stCompressParameter.strArchiveName + ".001" : m_stCompressParameter.strArchiveName; - m_pDDesktopServicesThread->setOpenFiles(QStringList() << m_stCompressParameter.strTargetPath + QDir::separator() + name); + QString name = m_stCompressParameter.bSplit ? + m_stCompressParameter.strArchiveName + ".001" : + m_stCompressParameter.strArchiveName; + QString fullPath = m_stCompressParameter.strTargetPath + QDir::separator() + name; + qDebug() << "Setting archive file to open:" << fullPath; + m_pDDesktopServicesThread->setOpenFiles(QStringList() << fullPath); // zip压缩包添加注释 + qDebug() << "Adding archive comment"; addArchiveComment(); } break; // 添加文件至压缩包 case ArchiveJob::JT_Add: { - qInfo() << "添加结束"; - + qInfo() << "File addition job completed"; //拖拽追加成功后不需要刷新 if (StartupType::ST_DragDropAdd != m_eStartupType) { - // 追加成功tip提示 + qDebug() << "Showing add success notification"; QIcon icon = UiTools::renderSVG(":assets/icons/deepin/builtin/icons/compress_success_30px.svg", QSize(30, 30)); sendMessage(new CustomFloatingMessage(icon, tr("Adding successful"), 1000, this)); // 追加完成更新压缩包数据 m_operationtype = Operation_UpdateData; + qDebug() << "Updating archive cache data"; if (ArchiveManager::get_instance()->updateArchiveCacheData(m_stUpdateOptions)) { - // 开始更新 + qDebug() << "Starting loading animation"; m_pLoadingPage->setDes(tr("Updating, please wait...")); m_pLoadingPage->startLoading(); // 开始加载 m_ePageID = PI_Loading; } else { - // 无可用插件 + qWarning() << "No available plugin for update"; showErrorMessage(FI_Add, EI_NoPlugin); } } else { + qDebug() << "Drag drop add completed, showing success"; m_ePageID = PI_Success; showSuccessInfo(SI_Compress); // 显示压缩成功 } @@ -1923,6 +2063,7 @@ void MainWindow::addFiles2Archive(const QStringList &listFiles, const QString &s void MainWindow::resetMainwindow() { + qDebug() << "Resetting main window state"; #ifdef __aarch64__ maxFileSize_ = 0; #endif @@ -1930,10 +2071,12 @@ void MainWindow::resetMainwindow() m_ePageID = PI_Home; m_operationtype = Operation_NULL; // 重置操作类型 m_iCompressedWatchTimerID = 0; // 初始化定时器返回值 + qDebug() << "Resetting progress page"; m_pProgressPage->resetProgress(); // 重置进度 m_pOpenFileWatcher->reset(); // 重置数据 + qDebug() << "Resetting all data structures"; m_stUpdateOptions = UpdateOptions(); m_stCompressParameter = CompressParameter(); m_stUnCompressParameter = UnCompressParameter(); @@ -1943,28 +2086,30 @@ void MainWindow::resetMainwindow() m_eStartupType = StartupType::ST_Normal; // 清空压缩包监听数据 + qDebug() << "Clearing file watcher"; SAFE_DELETE_ELE(m_pFileWatcher); } void MainWindow::deleteWhenJobFinish(ArchiveJob::JobType eType) { + qDebug() << "Processing post-job cleanup for job type:" << eType; switch (eType) { // 压缩完成删除原文件 case ArchiveJob::JT_Create: { + qInfo() << "Deleting original files after compression"; QStringList listCompressFiles = (m_eStartupType == StartupType::ST_Compresstozip7z) ? m_stCompressParameter.listCompressFiles : m_pCompressPage->compressFiles(); // 获取所有压缩文件 for (int i = 0; i < listCompressFiles.count(); ++i) { QFileInfo file(listCompressFiles[i]); if (file.exists()) { - // 文件/文件夹若存在,将之移动到回收站中(Qt5.15完美支持) -// QString strFileName = QFileInfo(listCompressFiles[i]).fileName(); -// file.rename(QStandardPaths::writableLocation(QStandardPaths::HomeLocation) + QLatin1String("/.local/share/Trash/files/") + strFileName); - + qDebug() << "Deleting file:" << listCompressFiles[i]; // 删除文件 if (file.isDir()) { + qDebug() << "Recursively removing directory:" << listCompressFiles[i]; QDir dir(listCompressFiles[i]); dir.removeRecursively(); } else { + qDebug() << "Removing file:" << listCompressFiles[i]; QFile fi(listCompressFiles[i]); fi.remove(); } @@ -1974,35 +2119,35 @@ void MainWindow::deleteWhenJobFinish(ArchiveJob::JobType eType) break; // 压缩完成删除原压缩包 case ArchiveJob::JT_Extract: { + qInfo() << "Deleting original archive after extraction"; QStringList listArchivePath; if (StartupType::ST_ExtractHere == m_eStartupType || StartupType::ST_Extractto == m_eStartupType) { // 右键快捷解压 if (m_stUnCompressParameter.bBatch) { // 批量删除 + qDebug() << "Batch deleting archives"; listArchivePath = m_stUnCompressParameter.listBatchFiles; } else { // 单个压缩包 + qDebug() << "Deleting single archive"; listArchivePath << m_stUnCompressParameter.strFullPath; } } else { // 打开解压 + qDebug() << "Deleting opened archive"; listArchivePath << m_pUnCompressPage->archiveFullPath(); } for (int i = 0; i < listArchivePath.count(); ++i) { // 获取压缩包全路径 QFile file(listArchivePath[i]); - // 若压缩包存在,将之移动到回收站中(Qt5.15完美支持) + // 若压缩包存在,删除文件 if (file.exists()) { - //QString strFileName = QFileInfo(strArchivePath).fileName(); - //file.rename(QStandardPaths::writableLocation(QStandardPaths::HomeLocation) + QLatin1String("/.local/share/Trash/files/") + strFileName); - - // 删除文件 + qDebug() << "Removing archive file:" << listArchivePath[i]; file.remove(); } } - - } break; default: + qDebug() << "No cleanup required for job type:" << eType; break; } } diff --git a/src/source/page/compresspage.cpp b/src/source/page/compresspage.cpp index 17369eb11..3cfd9050c 100644 --- a/src/source/page/compresspage.cpp +++ b/src/source/page/compresspage.cpp @@ -24,23 +24,30 @@ DGUI_USE_NAMESPACE CompressPage::CompressPage(QWidget *parent) : DWidget(parent) { + qDebug() << "CompressPage constructor called"; initUI(); initConnections(); + qDebug() << "CompressPage initialization completed"; } CompressPage::~CompressPage() { - + qDebug() << "CompressPage destructor called"; } void CompressPage::addCompressFiles(const QStringList &listFiles) { + qDebug() << "Adding compress files, count:" << listFiles.size(); m_pCompressView->addCompressFiles(listFiles); + qDebug() << "Compress files added successfully"; } QStringList CompressPage::compressFiles() { - return m_pCompressView->getCompressFiles(); + qDebug() << "Getting compress files list"; + QStringList files = m_pCompressView->getCompressFiles(); + qDebug() << "Current compress files count:" << files.size(); + return files; } QList CompressPage::getEntrys() @@ -50,12 +57,16 @@ QList CompressPage::getEntrys() void CompressPage::refreshCompressedFiles(bool bChanged, const QString &strFileName) { + qInfo() << "Refreshing compressed files, changed:" << bChanged << "file:" << strFileName; m_pCompressView->refreshCompressedFiles(bChanged, strFileName); + qInfo() << "Compressed files refreshed"; } void CompressPage::clear() { + qDebug() << "Clearing compress page"; m_pCompressView->clear(); + qDebug() << "Compress page cleared"; } void CompressPage::initUI() @@ -111,16 +122,20 @@ void CompressPage::slotCompressNextClicked() void CompressPage::slotCompressLevelChanged(bool bRootIndex) { + qInfo() << "Compress level changed, root index:" << bRootIndex; m_bRootIndex = bRootIndex; emit signalLevelChanged(bRootIndex); - setAcceptDrops(bRootIndex); + qInfo() << "Compress level change processed"; } void CompressPage::slotFileChoose() { - if (m_bRootIndex) + qDebug() << "File choose requested, root index:" << m_bRootIndex; + if (m_bRootIndex) { + qDebug() << "Emitting file choose signal"; emit signalFileChoose(); + } } CustomPushButton *CompressPage::getNextBtn() const diff --git a/src/source/page/compresssettingpage.cpp b/src/source/page/compresssettingpage.cpp index 9956ec609..11ef06f69 100644 --- a/src/source/page/compresssettingpage.cpp +++ b/src/source/page/compresssettingpage.cpp @@ -88,20 +88,24 @@ void TypeLabel::focusOutEvent(QFocusEvent *event) CompressSettingPage::CompressSettingPage(QWidget *parent) : DWidget(parent) { + qDebug() << "CompressSettingPage constructor called"; initConfig(); initUI(); initConnections(); slotAdvancedEnabled(m_pAdvancedBtn->isChecked()); + qDebug() << "CompressSettingPage initialization completed"; } CompressSettingPage::~CompressSettingPage() { - + qDebug() << "CompressSettingPage destructor called"; } void CompressSettingPage::setFileSize(const QStringList &listFiles, qint64 qSize) { + qDebug() << "Setting file size, file count:" << listFiles.count() << "total size:" << qSize; if (listFiles.count() == 0) { + qWarning() << "Empty file list provided"; return; } @@ -140,8 +144,10 @@ void CompressSettingPage::setFileSize(const QStringList &listFiles, qint64 qSize void CompressSettingPage::refreshMenu() { + qDebug() << "Refreshing compression type menu"; m_pTypeMenu->clear(); if (m_listSupportedMimeTypes.empty()) { + qInfo() << "Loading supported mime types from plugin manager"; m_listSupportedMimeTypes = PluginManager::get_instance().supportedWriteMimeTypes(PluginManager::SortByComment); // 获取支持的压缩格式 } @@ -716,10 +722,13 @@ void CompressSettingPage::slotShowRightMenu(QMouseEvent *e) void CompressSettingPage::slotTypeChanged(QAction *action) { - if (nullptr == action) + if (nullptr == action) { + qWarning() << "Null action in slotTypeChanged"; return; + } m_strMimeType = action->data().toString(); + qInfo() << "Compression type changed to:" << action->text() << "mime type:" << m_strMimeType; QString selectType = action->text(); setTypeImage(selectType); @@ -848,10 +857,11 @@ void CompressSettingPage::slotCompressClicked() QString strTmpCompresstype = m_pCompressTypeLbl->text(); // 压缩格式 QString strName = m_pFileNameEdt->text() + "." + strTmpCompresstype; // 压缩包名称 PERF_PRINT_BEGIN("POINT-03", "压缩包名:" + strName + " 大小:" + QString::number(m_qFileSize)); - qInfo() << "点击了压缩按钮"; + qInfo() << "Compress button clicked, archive:" << strName << "size:" << m_qFileSize << "type:" << strTmpCompresstype; // 检查源文件中是否包含即将生成的压缩包 if (m_listFiles.contains(m_pSavePathEdt->text() + QDir::separator() + strName)) { + qWarning() << "Archive name conflicts with source file:" << strName; showWarningDialog(tr("The name is the same as that of the compressed archive, please use another one")); return; } @@ -861,7 +871,9 @@ void CompressSettingPage::slotCompressClicked() QString strPassword = m_pPasswordEdt->lineEdit()->text(); QRegularExpression chineseRegex("[\\x{4e00}-\\x{9fa5}]+"); if (!strPassword.isEmpty() && chineseRegex.match(strPassword).hasMatch()) { + qWarning() << "Chinese password not allowed for ZIP volumes"; m_pPasswordEdt->showAlertMessage(tr("The password for ZIP volumes cannot be in Chinese")); + qWarning() << "Compress options validation failed"; return; } } @@ -925,12 +937,15 @@ void CompressSettingPage::slotCompressClicked() // 检测此压缩包名称是否存在 QFileInfo fileInfo(compressInfo.strTargetPath + QDir::separator() + compressInfo.strArchiveName); if (fileInfo.exists()) { + qInfo() << "Archive file already exists:" << fileInfo.filePath(); SimpleQueryDialog dialog(this); int iResult = dialog.showDialog(tr("Another file with the same name already exists, replace it?"), tr("Cancel", "button"), DDialog::ButtonNormal, tr("Replace", "button"), DDialog::ButtonWarning); if (1 == iResult) { // 如果点击替换,先移除本地压缩包 + qInfo() << "Replacing existing archive file"; QFile file(fileInfo.filePath()); file.remove(); } else { // 点击关闭或者取消,不操作 + qInfo() << "User canceled replacing existing file"; return; } } diff --git a/src/source/page/failurepage.cpp b/src/source/page/failurepage.cpp index f545aec9d..4342ffa0c 100644 --- a/src/source/page/failurepage.cpp +++ b/src/source/page/failurepage.cpp @@ -14,25 +14,31 @@ FailurePage::FailurePage(QWidget *parent) : DWidget(parent) { + qDebug() << "FailurePage constructor called"; initUI(); initConnections(); + qDebug() << "FailurePage initialization completed"; } FailurePage::~FailurePage() { - + qDebug() << "FailurePage destructor called"; } void FailurePage::setFailuerDes(const QString &strDes) { + qDebug() << "Setting failure description:" << strDes; m_pFailureLbl->setText(strDes); } void FailurePage::setFailureDetail(const QString &strDetail, const QString &strFileName) { + qDebug() << "Setting failure details, file:" << strFileName << "detail:" << strDetail; if (strFileName.isEmpty()) { + qDebug() << "No file name provided, hiding file name label"; m_pFileNameLbl->setVisible(false); } else { + qDebug() << "Setting file name:" << strFileName; m_pFileNameLbl->setVisible(true); m_pFileNameLbl->setToolTip(strFileName); QFont font = m_pFileNameLbl->font(); @@ -46,11 +52,13 @@ void FailurePage::setFailureDetail(const QString &strDetail, const QString &strF void FailurePage::setRetryEnable(bool bEnable) { + qDebug() << "Setting retry button enabled:" << bEnable; m_pRetrybutton->setEnabled(bEnable); } void FailurePage::setFailureInfo(const FailureInfo &failureInfo) { + qDebug() << "Setting failure info"; m_failureInfo = failureInfo; } @@ -117,6 +125,12 @@ void FailurePage::initUI() void FailurePage::initConnections() { - connect(m_pRetrybutton, &DPushButton::clicked, this, &FailurePage::sigFailRetry); - connect(commandLinkBackButton, &DCommandLinkButton::clicked, this, &FailurePage::sigBackButtonClickedOnFail); + connect(m_pRetrybutton, &DPushButton::clicked, this, [this]() { + qDebug() << "Retry button clicked"; + emit sigFailRetry(); + }); + connect(commandLinkBackButton, &DCommandLinkButton::clicked, this, [this]() { + qDebug() << "Back button clicked on failure page"; + emit sigBackButtonClickedOnFail(); + }); } diff --git a/src/source/page/homepage.cpp b/src/source/page/homepage.cpp index 6adaff793..2755779b1 100644 --- a/src/source/page/homepage.cpp +++ b/src/source/page/homepage.cpp @@ -24,17 +24,20 @@ DGUI_USE_NAMESPACE HomePage::HomePage(QWidget *parent) : DWidget(parent) { + qDebug() << "HomePage constructor called"; initUI(); // 初始化界面配置 initConnections(); // 初始化信号槽链接 + qDebug() << "HomePage initialization completed"; } HomePage::~HomePage() { - + qDebug() << "HomePage destructor called"; } void HomePage::initUI() { + qDebug() << "Initializing HomePage UI"; // 初始化相关变量 m_pIconLbl = new DLabel(this); m_pTipLbl = new DLabel(tr("Drag file or folder here"), this); @@ -82,28 +85,39 @@ void HomePage::initUI() void HomePage::initConnections() { - connect(m_pChooseBtn, &DCommandLinkButton::clicked, this, &HomePage::signalFileChoose); + qDebug() << "Setting up HomePage connections"; + connect(m_pChooseBtn, &DCommandLinkButton::clicked, this, [this]() { + qInfo() << "File choose button clicked"; + emit signalFileChoose(); + }); QObject::connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, this, &HomePage::slotThemeChanged); + qDebug() << "HomePage connections initialized"; } void HomePage::dragEnterEvent(QDragEnterEvent *e) { const auto *mime = e->mimeData(); + qDebug() << "Drag enter event detected, has URLs:" << mime->hasUrls(); // 判断是否有url if (!mime->hasUrls()) { + qDebug() << "No URLs in drag data, ignoring"; e->ignore(); + return; } // 判断是否是本地设备文件,过滤 手机 网络 ftp smb 等 for (const auto &url : mime->urls()) { - if (!UiTools::isLocalDeviceFile(url.toLocalFile())) { + QString localFile = url.toLocalFile(); + qDebug() << "Checking drag file:" << localFile; + if (!UiTools::isLocalDeviceFile(localFile)) { + qDebug() << "Non-local file detected:" << localFile << "ignoring"; e->ignore(); return; } - } + qDebug() << "Drag accepted"; e->accept(); } @@ -115,9 +129,12 @@ void HomePage::dragMoveEvent(QDragMoveEvent *e) void HomePage::dropEvent(QDropEvent *e) { auto *const mime = e->mimeData(); + qDebug() << "Drop event detected"; if (false == mime->hasUrls()) { + qDebug() << "No URLs in drop data, ignoring"; e->ignore(); + return; } e->accept(); @@ -126,28 +143,37 @@ void HomePage::dropEvent(QDropEvent *e) QStringList fileList; for (const auto &url : mime->urls()) { if (!url.isLocalFile()) { + qDebug() << "Non-local URL dropped:" << url.toString(); continue; } - fileList << url.toLocalFile(); + QString localFile = url.toLocalFile(); + qDebug() << "Adding dropped file:" << localFile; + fileList << localFile; } if (fileList.size() == 0) { + qDebug() << "No valid local files dropped"; return; } + qDebug() << "Emitting signal for dropped files, count:" << fileList.size(); emit signalDragFiles(fileList); } void HomePage::slotThemeChanged() { DGuiApplicationHelper::ColorType themeType = DGuiApplicationHelper::instance()->themeType(); + qDebug() << "Theme changed, new type:" << themeType; if (DGuiApplicationHelper::LightType == themeType) { // 浅色 + qDebug() << "Setting light theme split line"; m_pSplitLbl->setPixmap(QPixmap(":assets/icons/deepin/builtin/light/icons/split_line.svg")); } else if (DGuiApplicationHelper::DarkType == themeType) { // 深色 + qDebug() << "Setting dark theme split line"; m_pSplitLbl->setPixmap(QPixmap(":assets/icons/deepin/builtin/dark/icons/split_line_dark.svg")); } else { // 其它默认 + qDebug() << "Setting default theme split line"; m_pSplitLbl->setPixmap(QPixmap(":assets/icons/deepin/builtin/light/icons/split_line.svg")); } } diff --git a/src/source/page/loadingpage.cpp b/src/source/page/loadingpage.cpp index 004a7f6df..bdd5b1bf9 100644 --- a/src/source/page/loadingpage.cpp +++ b/src/source/page/loadingpage.cpp @@ -14,31 +14,37 @@ LoadingPage::LoadingPage(QWidget *parent) : DWidget(parent) { + qDebug() << "LoadingPage constructor called"; initUI(); + qDebug() << "LoadingPage initialization completed"; } LoadingPage::~LoadingPage() { - + qDebug() << "LoadingPage destructor called"; } void LoadingPage::startLoading() { + qInfo() << "Starting loading animation"; m_pSpinner->start(); } void LoadingPage::stopLoading() { + qInfo() << "Stopping loading animation"; m_pSpinner->stop(); } void LoadingPage::setDes(const QString &strDes) { + qInfo() << "Setting loading description:" << strDes; m_pTextLbl->setText(strDes); } void LoadingPage::initUI() { + qDebug() << "Initializing loading page UI"; // 初始化加载动画 m_pSpinner = new DSpinner(this); m_pSpinner->setMinimumSize(32, 32); diff --git a/src/source/page/progresspage.cpp b/src/source/page/progresspage.cpp index 8d21a7311..390d9e989 100644 --- a/src/source/page/progresspage.cpp +++ b/src/source/page/progresspage.cpp @@ -19,17 +19,20 @@ ProgressPage::ProgressPage(QWidget *parent) : DWidget(parent) { + qDebug() << "ProgressPage constructor called"; initUI(); initConnections(); + qDebug() << "ProgressPage initialization completed"; } ProgressPage::~ProgressPage() { - + qDebug() << "ProgressPage destructor called"; } void ProgressPage::setProgressType(Progress_Type eType) { + qInfo() << "Setting progress type:" << eType; m_eType = eType; if(PT_Rename == m_eType) { m_pPauseContinueButton->setVisible(false); @@ -58,11 +61,13 @@ void ProgressPage::setProgressType(Progress_Type eType) void ProgressPage::setTotalSize(qint64 qTotalSize) { + qDebug() << "Setting total size:" << qTotalSize; m_qTotalSize = qTotalSize; } void ProgressPage::setArchiveName(const QString &strArchiveName) { + qInfo() << "Setting archive name:" << strArchiveName; m_strArchiveName = strArchiveName; QFileInfo fileinfo(strArchiveName); @@ -85,14 +90,17 @@ void ProgressPage::setProgress(double dPercent) { // 添加对异常进度的判断处理 if (dPercent > 100) { + qWarning() << "Invalid progress percentage:" << dPercent; return; } int iPercent = qRound(dPercent); if (m_iPerent >= iPercent) { + qDebug() << "Progress not increased, current:" << m_iPerent << "new:" << iPercent; return ; } + qInfo() << "Updating progress:" << iPercent << "%"; m_iPerent = iPercent; m_pProgressBar->setValue(m_iPerent); // 进度条刷新值 m_pProgressBar->update(); @@ -246,8 +254,10 @@ void ProgressPage::initUI() void ProgressPage::initConnections() { + qDebug() << "Initializing progress page connections"; connect(m_pPauseContinueButton, &DSuggestButton::clicked, this, &ProgressPage::slotPauseClicked); connect(m_pCancelBtn, &DPushButton::clicked, this, &ProgressPage::slotCancelClicked); + qDebug() << "Progress page connections initialized"; } void ProgressPage::calSpeedAndRemainingTime(double &dSpeed, qint64 &qRemainingTime) @@ -357,10 +367,12 @@ void ProgressPage::slotPauseClicked(bool bChecked) { if (bChecked) { // 暂停操作 + qInfo() << "Pause operation requested"; m_pPauseContinueButton->setText(tr("Continue", "button")); emit signalPause(); } else { // 继续操作 + qInfo() << "Continue operation requested"; m_pPauseContinueButton->setText(tr("Pause", "button")); emit signalContinue(); } @@ -368,9 +380,11 @@ void ProgressPage::slotPauseClicked(bool bChecked) void ProgressPage::slotCancelClicked() { + qInfo() << "Cancel button clicked, operation type:" << m_eType; // 若不是暂停状态,先暂停 bool CheckedFlag = m_pPauseContinueButton->isChecked(); if (!CheckedFlag) { // 原来是运行状态 + qDebug() << "Pausing operation before cancel"; emit m_pPauseContinueButton->clicked(true); } @@ -393,9 +407,11 @@ void ProgressPage::slotCancelClicked() int iResult = dialog.showDialog(strDesText, tr("Cancel", "button"), DDialog::ButtonNormal, tr("Confirm", "button"), DDialog::ButtonRecommend); if (1 == iResult) { // 取消操作 + qInfo() << "User confirmed cancel operation"; emit signalCancel(); } else { // 恢复原来状态 + qInfo() << "User canceled the cancel operation"; if (!CheckedFlag) { // 原来是运行状态 emit m_pPauseContinueButton->clicked(false); } diff --git a/src/source/page/successpage.cpp b/src/source/page/successpage.cpp index 839845ede..28166f6d8 100644 --- a/src/source/page/successpage.cpp +++ b/src/source/page/successpage.cpp @@ -15,27 +15,32 @@ SuccessPage::SuccessPage(QWidget *parent) : DWidget(parent) { + qDebug() << "SuccessPage constructor called"; initUI(); initConnections(); + qDebug() << "SuccessPage initialization completed"; } SuccessPage::~SuccessPage() { - + qDebug() << "SuccessPage destructor called"; } void SuccessPage::setCompressFullPath(const QString &strFullPath) { + qInfo() << "Setting compress full path:" << strFullPath; m_strFullPath = strFullPath; } void SuccessPage::setSuccessDes(const QString &strDes) { + qInfo() << "Setting success description:" << strDes; m_pSuccessLbl->setText(strDes); } void SuccessPage::setSuccessType(const SuccessInfo &successInfo) { + qInfo() << "Setting success type:" << successInfo; m_successInfoType = successInfo; } @@ -46,11 +51,13 @@ SuccessInfo SuccessPage::getSuccessType() void SuccessPage::setDetail(const QString &strDetail) { + qInfo() << "Setting success detail:" << strDetail; m_pDetailLbl->setText(strDetail); } void SuccessPage::initUI() { + qDebug() << "Initializing success page UI"; //成功图标 m_pSuccessPixmapLbl = new DLabel(this); QPixmap m_pSuccessPixmap = UiTools::renderSVG(":assets/icons/deepin/builtin/icons/compress_success_128px.svg", QSize(128, 128)); @@ -103,7 +110,15 @@ void SuccessPage::initUI() void SuccessPage::initConnections() { - connect(m_pShowFileBtn, &DPushButton::clicked, this, &SuccessPage::signalViewFile); - connect(m_pReturnBtn, &DCommandLinkButton::clicked, this, &SuccessPage::sigBackButtonClicked); + qDebug() << "Setting up success page connections"; + connect(m_pShowFileBtn, &DPushButton::clicked, this, [this]() { + qInfo() << "View file button clicked"; + emit signalViewFile(); + }); + connect(m_pReturnBtn, &DCommandLinkButton::clicked, this, [this]() { + qInfo() << "Back button clicked on success page"; + emit sigBackButtonClicked(); + }); + qDebug() << "Success page connections initialized"; } diff --git a/src/source/page/uncompresspage.cpp b/src/source/page/uncompresspage.cpp index af6b30bc7..27174458f 100644 --- a/src/source/page/uncompresspage.cpp +++ b/src/source/page/uncompresspage.cpp @@ -23,23 +23,26 @@ UnCompressPage::UnCompressPage(QWidget *parent) : DWidget(parent) { + qDebug() << "UnCompressPage constructor called"; initUI(); initConnections(); + qDebug() << "UnCompressPage initialization completed"; } UnCompressPage::~UnCompressPage() { - + qDebug() << "UnCompressPage destructor called"; } void UnCompressPage::setArchiveFullPath(const QString &strArchiveFullPath, UnCompressParameter &unCompressPar) { + qInfo() << "Setting archive full path:" << strArchiveFullPath; if(property(ORDER_JSON).isValid()) { + qDebug() << "Processing order JSON property"; if(m_pUnCompressView) { m_pUnCompressView->setMapOrderJson(property(ORDER_JSON).toString()); } } - qInfo() << "加载压缩包:" << strArchiveFullPath; m_strArchiveFullPath = strArchiveFullPath; m_pUnCompressView->setArchivePath(m_strArchiveFullPath/*QFileInfo(m_strArchiveFullPath).path()*/); // 设置压缩包路径 @@ -59,6 +62,7 @@ QString UnCompressPage::archiveFullPath() void UnCompressPage::setDefaultUncompressPath(const QString &strPath) { + qInfo() << "Setting default uncompress path:" << strPath; m_strUnCompressPath = strPath; m_pUncompressPathBtn->setToolTip(m_strUnCompressPath); // 设置解压路径提示信息 m_pUncompressPathBtn->setText(elidedExtractPath(tr("Extract to:") + m_strUnCompressPath)); // 截取解压路径显示 @@ -145,6 +149,7 @@ void UnCompressPage::initUI() void UnCompressPage::initConnections() { + qDebug() << "Initializing uncompress page connections"; connect(m_pUncompressPathBtn, &DPushButton::clicked, this, &UnCompressPage::slotUnCompressPathClicked); connect(m_pUnCompressBtn, &DPushButton::clicked, this, &UnCompressPage::slotUncompressClicked); connect(m_pUnCompressView, &UnCompressView::signalExtract2Path, this, &UnCompressPage::signalExtract2Path); @@ -153,6 +158,7 @@ void UnCompressPage::initConnections() connect(m_pUnCompressView, &UnCompressView::signalOpenFile, this, &UnCompressPage::signalOpenFile); connect(m_pUnCompressView, &UnCompressView::signalAddFiles2Archive, this, &UnCompressPage::signalAddFiles2Archive); connect(this, &UnCompressPage::sigRenameFile, m_pUnCompressView, &UnCompressView::sigRenameFile); + qDebug() << "Uncompress page connections initialized"; } QString UnCompressPage::elidedExtractPath(const QString &strPath) @@ -173,6 +179,7 @@ QString UnCompressPage::elidedExtractPath(const QString &strPath) void UnCompressPage::slotUncompressClicked() { + qInfo() << "Uncompress button clicked"; QFileInfo file(m_strArchiveFullPath); PERF_PRINT_BEGIN("POINT-04", "压缩包名:" + file.fileName() + " 大小:" + QString::number(file.size())); @@ -183,8 +190,10 @@ void UnCompressPage::slotUncompressClicked() if (!m_permission) { // 无法解压到已选中路径 QString strDes; if (!m_fileDestinationPath.exists()) { // 路径不存在 + qWarning() << "Extraction path does not exist:" << m_strUnCompressPath; strDes = tr("The default extraction path does not exist, please retry"); } else { // 路径无权限 + qWarning() << "No permission to extract to path:" << m_strUnCompressPath; strDes = tr("You do not have permission to save files here, please change and retry"); } @@ -193,12 +202,14 @@ void UnCompressPage::slotUncompressClicked() return; } else { // 发送解压信号 + qInfo() << "Emitting uncompress signal for path:" << m_strUnCompressPath; emit signalUncompress(m_strUnCompressPath); } } void UnCompressPage::slotUnCompressPathClicked() { + qInfo() << "Uncompress path button clicked, current path:" << m_strUnCompressPath; // 创建文件选择对话框 DFileDialog dialog(this); dialog.setAcceptMode(DFileDialog::AcceptOpen); @@ -209,13 +220,16 @@ void UnCompressPage::slotUnCompressPathClicked() const int mode = dialog.exec(); if (mode != QDialog::Accepted) { + qDebug() << "User canceled directory selection"; return; } // 设置默认解压路径为选中的目录 QList listUrl = dialog.selectedUrls(); if (listUrl.count() > 0) { - setDefaultUncompressPath(listUrl.at(0).toLocalFile()); + QString newPath = listUrl.at(0).toLocalFile(); + qInfo() << "User selected new uncompress path:" << newPath; + setDefaultUncompressPath(newPath); } } diff --git a/src/source/tree/compressview.cpp b/src/source/tree/compressview.cpp index 93444fc88..da427d1dc 100644 --- a/src/source/tree/compressview.cpp +++ b/src/source/tree/compressview.cpp @@ -27,17 +27,21 @@ CompressView::CompressView(QWidget *parent) : DataTreeView(parent) { + qDebug() << "CompressView constructor called"; initUI(); // 初始化参数等 initConnections(); // 初始化信号槽 + qDebug() << "CompressView initialized"; } CompressView::~CompressView() { + qDebug() << "CompressView destructor called"; } void CompressView::addCompressFiles(const QStringList &listFiles) { + qDebug() << "Adding compress files:" << listFiles; Overwrite_Result mode = OR_Cancel; bool applyAll = false; @@ -74,6 +78,7 @@ void CompressView::addCompressFiles(const QStringList &listFiles) QStringList CompressView::getCompressFiles() { + qDebug() << "Getting compress files, count:" << m_listCompressFiles.size(); return m_listCompressFiles; } @@ -84,6 +89,7 @@ QList CompressView::getEntrys() void CompressView::refreshCompressedFiles(bool bChanged, const QString &strFileName) { + qDebug() << "Refreshing compressed files, changed:" << bChanged << "file:" << strFileName; m_listEntry.clear(); // 对变化的文件进行监控 @@ -123,6 +129,7 @@ void CompressView::refreshCompressedFiles(bool bChanged, const QString &strFileN void CompressView::clear() { + qDebug() << "Clearing compress view data"; // 重置数据 m_pFileWatcher->removePath(m_strCurrentPath); // 删除目录监听 m_listCompressFiles.clear(); @@ -328,6 +335,7 @@ void CompressView::slotShowRightMenu(const QPoint &pos) void CompressView::slotDeleteFile() { + qDebug() << "Deleting selected files"; QModelIndexList selectedIndex = selectionModel()->selectedRows(0); // 获取所有待删除的第一行index if (0 == m_iLevel) { // 如果是根目录,删除缓存文件名 @@ -372,6 +380,7 @@ void CompressView::slotDeleteFile() void CompressView::slotRenameFile() { + qDebug() << "Renaming selected file"; QList listSelEntry; QModelIndexList listModelIndex = selectionModel()->selectedRows(); @@ -455,12 +464,14 @@ void CompressView::slotRenameFile() void CompressView::slotDirChanged() { + qDebug() << "Directory changed, refreshing view"; // 刷新显示数据 m_pModel->refreshFileEntry(getCurrentDirFiles()); } void CompressView::slotDragFiles(const QStringList &listFiles) { + qDebug() << "Handling drag files:" << listFiles; // 在压缩列表添加一个压缩文件 if (listFiles.count() == 1 && UiTools::isArchiveFile(listFiles.at(0)) && m_listCompressFiles.count() > 0) { SimpleQueryDialog dialog; // 询问添加压缩文件到压缩目录或者在新窗口打开压缩文件 diff --git a/src/source/tree/datamodel.cpp b/src/source/tree/datamodel.cpp index 2872bb311..0cf42c1b8 100644 --- a/src/source/tree/datamodel.cpp +++ b/src/source/tree/datamodel.cpp @@ -23,16 +23,20 @@ DGUI_USE_NAMESPACE DataModel::DataModel(QObject *parent) : QAbstractTableModel(parent) { + qDebug() << "DataModel constructor called"; m_pMimetype = new MimeTypeDisplayManager(this); + qDebug() << "DataModel initialized with MimeTypeDisplayManager"; } DataModel::~DataModel() { + qDebug() << "DataModel destructor called"; } QVariant DataModel::headerData(int section, Qt::Orientation orientation, int role) const { + qDebug() << "Getting header data for section:" << section << "role:" << role; Q_UNUSED(orientation) if (Qt::DisplayRole == role) { @@ -46,6 +50,7 @@ QVariant DataModel::headerData(int section, Qt::Orientation orientation, int rol QVariant DataModel::data(const QModelIndex &index, int role) const { + qDebug() << "Getting data for index:" << index << "role:" << role; int iRow = index.row(); int iColumn = index.column(); @@ -138,13 +143,16 @@ int DataModel::columnCount(const QModelIndex &parent) const void DataModel::refreshFileEntry(const QList &listEntry) { - beginResetModel();//在开始添加此函数 + qDebug() << "Refreshing file entries, count:" << listEntry.size(); + beginResetModel(); m_listEntry = listEntry; - endResetModel(); //在结束前添加此函数 + endResetModel(); + qDebug() << "File entries refreshed successfully"; } QItemSelection DataModel::getSelectItem(const QStringList &listName) { + qDebug() << "Getting selection for items:" << listName; QItemSelection selection; for (int i = 0; i < m_listEntry.size(); ++i) { @@ -163,6 +171,7 @@ QItemSelection DataModel::getSelectItem(const QStringList &listName) QModelIndex DataModel::getListEntryIndex(const QString &listName) { + qDebug() << "Getting index for entry:" << listName; for (int i = 0; i < m_listEntry.size(); ++i) { QModelIndex index = this->index(i, DC_Name); // 处理是否需要选中的文件 @@ -176,6 +185,7 @@ QModelIndex DataModel::getListEntryIndex(const QString &listName) void DataModel::sort(int column, Qt::SortOrder order) { + qDebug() << "Sorting by column:" << column << "order:" << order; if (0 > column || 3 < column) { return; } diff --git a/src/source/tree/datatreeview.cpp b/src/source/tree/datatreeview.cpp index 0b6ed58c0..7929649fc 100644 --- a/src/source/tree/datatreeview.cpp +++ b/src/source/tree/datatreeview.cpp @@ -147,12 +147,15 @@ void StyleTreeViewDelegate::paint(QPainter *painter, const QStyleOptionViewItem DataTreeView::DataTreeView(QWidget *parent) : DTreeView(parent) { + qDebug() << "DataTreeView constructor called"; initUI(); initConnections(); + qDebug() << "DataTreeView initialized"; } DataTreeView::~DataTreeView() { + qDebug() << "DataTreeView destructor called"; } @@ -165,6 +168,7 @@ void DataTreeView::resetLevel() void DataTreeView::initUI() { + qDebug() << "Initializing DataTreeView UI"; setAttribute(Qt::WA_AcceptTouchEvents); // 设置接收触摸屏事件 setObjectName("TableViewFile"); setEditTriggers(QAbstractItemView::NoEditTriggers); @@ -201,6 +205,7 @@ void DataTreeView::initConnections() void DataTreeView::resizeColumnWidth() { + qDebug() << "Resizing columns to width:" << width(); setColumnWidth(0, width() * 25 / 58); setColumnWidth(1, width() * 17 / 58); setColumnWidth(2, width() * 8 / 58); @@ -323,6 +328,7 @@ void DataTreeView::focusInEvent(QFocusEvent *event) void DataTreeView::dragEnterEvent(QDragEnterEvent *e) { + qDebug() << "Drag enter event with mime data:" << e->mimeData()->formats(); const auto *mime = e->mimeData(); // 判断是否有url @@ -398,6 +404,8 @@ void DataTreeView::dropEvent(QDropEvent *e) void DataTreeView::resizeEvent(QResizeEvent *event) { + qDebug() << "Resize event, old size:" << event->oldSize() + << "new size:" << event->size(); Q_UNUSED(event) resizeColumnWidth(); } @@ -447,6 +455,7 @@ void DataTreeView::mouseReleaseEvent(QMouseEvent *event) void DataTreeView::mouseMoveEvent(QMouseEvent *event) { + qDebug() << "Mouse move at position:" << event->pos(); if (m_isPressed) { //最小距离为防误触和双向滑动时,只触发横向或者纵向的 int touchmindistance = 2; @@ -478,6 +487,7 @@ void DataTreeView::mouseMoveEvent(QMouseEvent *event) void DataTreeView::keyPressEvent(QKeyEvent *event) { + qDebug() << "Key pressed:" << event->key() << "modifiers:" << event->modifiers(); // 当前选中表格第一行,再点击Key_Up,选中返回上一层目录 if (Qt::Key_Up == event->key()) { // 当前行为0或为空文件夹时,焦点放在返回上一层目录上 diff --git a/src/source/tree/treeheaderview.cpp b/src/source/tree/treeheaderview.cpp index 9e109ad56..a9f48287d 100644 --- a/src/source/tree/treeheaderview.cpp +++ b/src/source/tree/treeheaderview.cpp @@ -132,6 +132,7 @@ void PreviousLabel::keyPressEvent(QKeyEvent *event) TreeHeaderView::TreeHeaderView(Qt::Orientation orientation, QWidget *parent) : DHeaderView(orientation, parent) { + qDebug() << "TreeHeaderView constructor called with orientation:" << orientation; viewport()->setAutoFillBackground(false); setSectionsClickable(true); setHighlightSections(true); @@ -175,6 +176,7 @@ TreeHeaderView::TreeHeaderView(Qt::Orientation orientation, QWidget *parent) TreeHeaderView::~TreeHeaderView() { + qDebug() << "TreeHeaderView destructor called"; } @@ -212,6 +214,7 @@ PreviousLabel *TreeHeaderView::getpreLbl() void TreeHeaderView::setPreLblVisible(bool bVisible) { + qDebug() << "Setting previous label visibility:" << bVisible; m_pPreLbl->setVisible(bVisible); #ifdef DTKWIDGET_CLASS_DSizeMode if (DGuiApplicationHelper::instance()->sizeMode() == DGuiApplicationHelper::NormalMode) { @@ -239,6 +242,7 @@ void TreeHeaderView::setPreLblVisible(bool bVisible) void TreeHeaderView::setLabelFocus(bool focus) { + qDebug() << "Setting label focus:" << focus; if (focus) { m_pPreLbl->setFocus(); @@ -294,6 +298,7 @@ painter.restore(); */ void TreeHeaderView::paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const { + qDebug() << "Painting section:" << logicalIndex << "with rect:" << rect; painter->save(); painter->setRenderHint(QPainter::Antialiasing); painter->setOpacity(1); @@ -386,6 +391,7 @@ void TreeHeaderView::paintSection(QPainter *painter, const QRect &rect, int logi void TreeHeaderView::resizeEvent(QResizeEvent *event) { + qDebug() << "Resize event, new size:" << event->size(); m_pPreLbl->setFixedWidth(event->size().width() - 2 * SCROLLMARGIN); DHeaderView::resizeEvent(event); } diff --git a/src/source/tree/uncompressview.cpp b/src/source/tree/uncompressview.cpp index 4886a0a81..31ebb1a1d 100644 --- a/src/source/tree/uncompressview.cpp +++ b/src/source/tree/uncompressview.cpp @@ -32,17 +32,22 @@ UnCompressView::UnCompressView(QWidget *parent) : DataTreeView(parent) { + qDebug() << "UnCompressView constructor called"; initUI(); initConnections(); + qDebug() << "UnCompressView initialized"; } UnCompressView::~UnCompressView() { + qDebug() << "UnCompressView destructor called"; clearDragData(); + qDebug() << "UnCompressView destroyed"; } void UnCompressView::refreshArchiveData() { + qDebug() << "Refreshing archive data"; ArchiveData &stArchiveData = DataManager::get_instance().archiveData(); // 刷新第一层级文件夹子项的数目 @@ -56,6 +61,7 @@ void UnCompressView::refreshArchiveData() m_pModel->refreshFileEntry(stArchiveData.listRootEntry); m_mapShowEntry["/"] = stArchiveData.listRootEntry; + qInfo() << "Archive data refreshed successfully"; // 重置排序 m_pHeaderView->setSortIndicator(-1, Qt::SortOrder::AscendingOrder); sortByColumn(DC_Name, Qt::AscendingOrder); @@ -75,6 +81,7 @@ void UnCompressView::setDefaultUncompressPath(const QString &strPath) void UnCompressView::mousePressEvent(QMouseEvent *event) { + qDebug() << "Mouse press event at position:" << event->pos(); if (event->button() == Qt::MouseButton::LeftButton) { m_dragPos = event->pos(); } @@ -200,6 +207,7 @@ void UnCompressView::clearDragData() void UnCompressView::mouseDoubleClickEvent(QMouseEvent *event) { + qDebug() << "Mouse double click event at position:" << event->pos(); if (event->button() == Qt::MouseButton::LeftButton) { handleDoubleClick(indexAt(event->pos())); // 双击处理 } @@ -555,6 +563,7 @@ QList UnCompressView::getSelEntry() void UnCompressView::extract2Path(const QString &strPath) { + qDebug() << "Extracting files to path:" << strPath; QList listSelEntry = getSelEntry(); // 待提取的文件数据 ExtractionOptions stOptions; // 提取参数 stOptions.strTargetPath = strPath; @@ -570,6 +579,8 @@ void UnCompressView::extract2Path(const QString &strPath) } } + qInfo() << "Extraction prepared, files count:" << listSelEntry.size() + << ", total size:" << stOptions.qSize << "bytes"; // 发送提取信号 emit signalExtract2Path(listSelEntry, stOptions); } @@ -683,6 +694,7 @@ void UnCompressView::slotExtract2Here() void UnCompressView::slotDeleteFile() { + qDebug() << "Delete file operation initiated"; QVariantMap mapdata = mapOrderJson(); if(mapdata.contains(ORDER_DELETE)) { if(!mapdata.value(ORDER_DELETE).toBool()) return; @@ -707,6 +719,7 @@ void UnCompressView::slotDeleteFile() } } + qInfo() << "Deleting" << listSelEntry.size() << "files, total size:" << qSize << "bytes"; // 发送删除信号 m_eChangeType = CT_Delete; emit signalDelFiles(listSelEntry, qSize);