Skip to content

Commit 652dc02

Browse files
Kakueeendeepin-bot[bot]
authored andcommitted
feat: Enhance logging
- Added debug and warning logs throughout the image loading and processing functions to improve traceability and error handling. - Updated .gitignore to exclude .cursor files. Log: Improve logging for better debugging and exclude unnecessary files from version control.
1 parent e03ec27 commit 652dc02

File tree

14 files changed

+427
-140
lines changed

14 files changed

+427
-140
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ vendor/include/*
2525
vendor/lib/*
2626

2727
.vscode/*
28+
.cursor
2829

2930
*.log
3031

libimageviewer/quickprint/printimageloader.cpp

Lines changed: 70 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,14 @@ static const int s_SingleFrame = -1;
2020
PrintImageLoader::PrintImageLoader(QObject *parent)
2121
: QObject(parent)
2222
{
23+
qInfo() << "PrintImageLoader initialized";
2324
connect(this, &PrintImageLoader::asyncLoadError, this, &PrintImageLoader::onLoadError);
2425
}
2526

2627
PrintImageLoader::~PrintImageLoader()
2728
{
2829
if (isLoading()) {
30+
qInfo() << "PrintImageLoader destroyed while still loading, cancelling...";
2931
cancel();
3032
}
3133
}
@@ -39,6 +41,7 @@ PrintImageLoader::~PrintImageLoader()
3941
bool PrintImageLoader::loadImageList(const QStringList &fileList, bool async)
4042
{
4143
if (fileList.isEmpty() || loaderState != Stopped) {
44+
qWarning() << "Failed to start loading: fileList is empty or loader is busy";
4245
return false;
4346
}
4447

@@ -47,15 +50,18 @@ bool PrintImageLoader::loadImageList(const QStringList &fileList, bool async)
4750
loaderState = Preloading;
4851

4952
if (async) {
50-
// 开始异步预加载
53+
qDebug() << "Starting async preload for" << fileList.size() << "files";
5154
asyncPreload(fileList);
5255
} else {
56+
qDebug() << "Starting sync preload for" << fileList.size() << "files";
5357
if (!syncPreload(fileList)) {
58+
qWarning() << "Sync preload failed";
5459
return false;
5560
}
5661

5762
loaderState = Loading;
5863
if (!syncLoad(loadData)) {
64+
qWarning() << "Sync load failed";
5965
return false;
6066
}
6167

@@ -117,49 +123,55 @@ PrintDataList PrintImageLoader::takeLoadData()
117123
*/
118124
PrintDataList PrintImageLoader::preloadImageData(const QString &filePath)
119125
{
126+
qDebug() << "Preloading image:" << filePath;
127+
120128
// 判断文件是否存在,是否有权限读取
121129
QFileInfo info(filePath);
122130
if (!info.exists()) {
131+
qWarning() << "File does not exist:" << filePath;
123132
PrintImageData::Ptr notExistsPtr(new PrintImageData(filePath));
124133
notExistsPtr->state = NotExists;
125-
return {notExistsPtr};
134+
return { notExistsPtr };
126135
}
127136

128137
if (!info.permission(QFile::ReadUser)) {
138+
qWarning() << "No read permission for file:" << filePath;
129139
PrintImageData::Ptr permissionPtr(new PrintImageData(filePath));
130140
permissionPtr->state = NoPermission;
131-
return {permissionPtr};
141+
return { permissionPtr };
132142
}
133143

134144
// 根据文件类型区分处理
135145
PrintDataList dataList;
136146
const imageViewerSpace::ImageType type = LibUnionImage_NameSpace::getImageType(filePath);
147+
qDebug() << "Image type:" << type << "for file:" << filePath;
148+
137149
switch (type) {
138-
case imageViewerSpace::ImageTypeSvg:
139-
Q_FALLTHROUGH();
140-
case imageViewerSpace::ImageTypeStatic: {
141-
// 单张图片处理
142-
dataList.append(PrintImageData::Ptr(new PrintImageData(filePath)));
143-
break;
144-
}
150+
case imageViewerSpace::ImageTypeSvg:
151+
Q_FALLTHROUGH();
152+
case imageViewerSpace::ImageTypeStatic: {
153+
// 单张图片处理
154+
dataList.append(PrintImageData::Ptr(new PrintImageData(filePath)));
155+
break;
156+
}
145157

146-
case imageViewerSpace::ImageTypeDynamic:
147-
Q_FALLTHROUGH();
148-
case imageViewerSpace::ImageTypeMulti: {
149-
// Note: 由于 QGifHandler 没有实现 jumpToImage() 接口,因此动图直接进行加载
150-
dataList = preloadMultiImage(filePath, bool(imageViewerSpace::ImageTypeDynamic == type));
151-
break;
152-
}
158+
case imageViewerSpace::ImageTypeDynamic:
159+
Q_FALLTHROUGH();
160+
case imageViewerSpace::ImageTypeMulti: {
161+
// Note: 由于 QGifHandler 没有实现 jumpToImage() 接口,因此动图直接进行加载
162+
dataList = preloadMultiImage(filePath, bool(imageViewerSpace::ImageTypeDynamic == type));
163+
break;
164+
}
153165

154-
case imageViewerSpace::ImageTypeDamaged: {
155-
PrintImageData::Ptr damangePtr(new PrintImageData(filePath));
156-
damangePtr->state = ContentError;
157-
dataList.append(damangePtr);
158-
break;
159-
}
166+
case imageViewerSpace::ImageTypeDamaged: {
167+
PrintImageData::Ptr damangePtr(new PrintImageData(filePath));
168+
damangePtr->state = ContentError;
169+
dataList.append(damangePtr);
170+
break;
171+
}
160172

161-
default:
162-
return {};
173+
default:
174+
return {};
163175
}
164176

165177
return dataList;
@@ -249,12 +261,16 @@ PrintDataList PrintImageLoader::preloadMultiImage(const QString &filePath, bool
249261
*/
250262
bool PrintImageLoader::loadImageData(PrintImageData::Ptr &imagePtr)
251263
{
264+
qDebug() << "Loading image data for:" << imagePtr->filePath << "frame:" << imagePtr->frame;
265+
252266
// 动图数据在预加载流程加载
253267
if (Loaded == imagePtr->state) {
268+
qDebug() << "Image already loaded, skipping";
254269
return true;
255270
}
256271

257272
if (!QFileInfo::exists(imagePtr->filePath)) {
273+
qWarning() << "File no longer exists:" << imagePtr->filePath;
258274
imagePtr->state = NotExists;
259275
return false;
260276
}
@@ -263,9 +279,10 @@ bool PrintImageLoader::loadImageData(PrintImageData::Ptr &imagePtr)
263279
QImageReader reader(imagePtr->filePath);
264280
// jumpToImage 可能返回 false, 但数据正常读取
265281
if (s_SingleFrame != imagePtr->frame) {
282+
qDebug() << "Jumping to frame:" << imagePtr->frame;
266283
reader.jumpToImage(imagePtr->frame);
267284
}
268-
285+
269286
if (!reader.canRead()) {
270287
qWarning() << QString("Load multi frame image failed(jump to image): %1").arg(reader.errorString());
271288
imagePtr->state = ContentError;
@@ -279,6 +296,9 @@ bool PrintImageLoader::loadImageData(PrintImageData::Ptr &imagePtr)
279296
return false;
280297
}
281298

299+
qDebug() << "Successfully loaded image:" << imagePtr->filePath << "frame:" << imagePtr->frame
300+
<< "size:" << imagePtr->data.size();
301+
282302
} catch (const std::exception &e) {
283303
// 图片读取,考虑未界定异常
284304
qCritical() << qPrintable("Exception: load image failed!") << qPrintable(e.what());
@@ -327,10 +347,10 @@ void PrintImageLoader::asyncPreload(const QStringList &fileList)
327347

328348
// 按*顺序*插入数据
329349
QFuture<PrintDataList> asyncData = QtConcurrent::mappedReduced<PrintDataList>(
330-
fileList,
331-
preloadMapedFunc,
332-
[](PrintDataList &result, const PrintDataList &parsed) { result.append(parsed); },
333-
(QtConcurrent::OrderedReduce | QtConcurrent::SequentialReduce));
350+
fileList,
351+
preloadMapedFunc,
352+
[](PrintDataList &result, const PrintDataList &parsed) { result.append(parsed); },
353+
(QtConcurrent::OrderedReduce | QtConcurrent::SequentialReduce));
334354

335355
// 仅在调用时绑定信号
336356
connect(&preloadWatcher, &QFutureWatcherBase::finished, this, &PrintImageLoader::onAsyncLoadFinished);
@@ -375,26 +395,26 @@ void PrintImageLoader::asyncLoad(PrintDataList &dataList)
375395
void PrintImageLoader::onAsyncLoadFinished()
376396
{
377397
switch (loaderState) {
378-
case Preloading:
379-
qInfo() << "Async print image preload finished.";
380-
// 清理缓存的数据, 继续加载数据
381-
loadData = preloadWatcher.result();
382-
disconnect(&preloadWatcher, &QFutureWatcherBase::finished, this, &PrintImageLoader::onAsyncLoadFinished);
383-
preloadWatcher.setFuture(QFuture<PrintDataList>());
384-
loaderState = Loading;
385-
asyncLoad(loadData);
386-
break;
387-
388-
case Loading:
389-
qInfo() << "Async print image load finished.";
390-
disconnect(&loadWatcher, &QFutureWatcherBase::finished, this, &PrintImageLoader::onAsyncLoadFinished);
391-
loaderState = Stopped;
392-
Q_EMIT loadFinished(false, {});
393-
break;
394-
395-
default:
396-
qWarning() << QString("Async load state error %1").arg(loaderState);
397-
break;
398+
case Preloading:
399+
qInfo() << "Async print image preload finished.";
400+
// 清理缓存的数据, 继续加载数据
401+
loadData = preloadWatcher.result();
402+
disconnect(&preloadWatcher, &QFutureWatcherBase::finished, this, &PrintImageLoader::onAsyncLoadFinished);
403+
preloadWatcher.setFuture(QFuture<PrintDataList>());
404+
loaderState = Loading;
405+
asyncLoad(loadData);
406+
break;
407+
408+
case Loading:
409+
qInfo() << "Async print image load finished.";
410+
disconnect(&loadWatcher, &QFutureWatcherBase::finished, this, &PrintImageLoader::onAsyncLoadFinished);
411+
loaderState = Stopped;
412+
Q_EMIT loadFinished(false, {});
413+
break;
414+
415+
default:
416+
qWarning() << QString("Async load state error %1").arg(loaderState);
417+
break;
398418
}
399419
}
400420

0 commit comments

Comments
 (0)