Skip to content

Commit 29ed266

Browse files
authored
Merge pull request #13 from OpenForgeProject/no-report-files-found
fix report files functions
2 parents fd5db01 + 650397c commit 29ed266

File tree

4 files changed

+50
-11
lines changed

4 files changed

+50
-11
lines changed

CHANGELOG.md

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,21 @@
1-
# Change Log
1+
# Changelog
22

33
All notable changes to the "magento-log-viewer" extension will be documented in this file.
44

55
Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file.
66

77
## [Unreleased]
88

9+
## [1.7.1] - 2024-12-09
10+
911
### Added
12+
- Added a message when there are no report files.
1013
- Support for Node.js 18.x in GitHub Actions
1114
- Automated tests for releases using GitHub Workflows
1215

16+
### Fixed
17+
- Fixed an issue where the status bar item was being created multiple times.
18+
1319
## [1.7.0] - 2024-12-08
1420

1521
### Added

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "magento-log-viewer",
33
"displayName": "Magento Log Viewer",
44
"description": "A Visual Studio Code extension to view and manage Magento log files.",
5-
"version": "1.7.0",
5+
"version": "1.7.1",
66
"publisher": "MathiasElle",
77
"icon": "resources/logo.png",
88
"repository": {

src/helpers.ts

+31-3
Original file line numberDiff line numberDiff line change
@@ -151,9 +151,7 @@ export function updateBadge(treeView: vscode.TreeView<unknown>, logViewerProvide
151151
vscode.commands.executeCommand('setContext', 'magentoLogViewer.hasLogFiles', totalEntries > 0);
152152

153153
// Update status bar item
154-
const statusBarItem = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left, 100);
155-
statusBarItem.text = `Magento Log-Entries: ${totalEntries}`;
156-
statusBarItem.show();
154+
LogViewerProvider.statusBarItem.text = `Magento Log-Entries: ${totalEntries}`;
157155
};
158156

159157
logViewerProvider.onDidChangeTreeData(updateBadgeCount);
@@ -288,3 +286,33 @@ export function getIconForReport(filePath: string): vscode.ThemeIcon {
288286
return new vscode.ThemeIcon('file');
289287
}
290288
}
289+
290+
export function getReportItems(dir: string): LogItem[] {
291+
if (!pathExists(dir)) {
292+
return [];
293+
}
294+
295+
const items: LogItem[] = [];
296+
const files = fs.readdirSync(dir);
297+
298+
files.forEach(file => {
299+
const filePath = path.join(dir, file);
300+
if (fs.lstatSync(filePath).isDirectory()) {
301+
const subItems = getReportItems(filePath);
302+
if (subItems.length > 0) {
303+
items.push(...subItems);
304+
}
305+
} else if (fs.lstatSync(filePath).isFile()) {
306+
const title = parseReportTitle(filePath);
307+
const reportFile = new LogItem(title, vscode.TreeItemCollapsibleState.None, {
308+
command: 'magento-log-viewer.openFile',
309+
title: 'Open Report File',
310+
arguments: [filePath]
311+
});
312+
reportFile.iconPath = getIconForReport(filePath);
313+
items.push(reportFile);
314+
}
315+
});
316+
317+
return items;
318+
}

src/logViewer.ts

+11-6
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,15 @@ import { pathExists, getLineCount, getIconForLogLevel, getLogItems, parseReportT
66
export class LogViewerProvider implements vscode.TreeDataProvider<LogItem>, vscode.Disposable {
77
private _onDidChangeTreeData: vscode.EventEmitter<LogItem | undefined | void> = new vscode.EventEmitter<LogItem | undefined | void>();
88
readonly onDidChangeTreeData: vscode.Event<LogItem | undefined | void> = this._onDidChangeTreeData.event;
9-
private statusBarItem: vscode.StatusBarItem;
9+
public static statusBarItem: vscode.StatusBarItem;
1010
private groupByMessage: boolean;
1111

1212
constructor(private workspaceRoot: string) {
13-
this.statusBarItem = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left, 100);
14-
this.statusBarItem.command = 'magento-log-viewer.refreshLogFiles';
15-
this.statusBarItem.show();
13+
if (!LogViewerProvider.statusBarItem) {
14+
LogViewerProvider.statusBarItem = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left, 100);
15+
LogViewerProvider.statusBarItem.command = 'magento-log-viewer.refreshLogFiles';
16+
LogViewerProvider.statusBarItem.show();
17+
}
1618
this.groupByMessage = vscode.workspace.getConfiguration('magentoLogViewer').get<boolean>('groupByMessage', true);
1719
this.updateBadge();
1820
this.updateRefreshButtonVisibility();
@@ -191,11 +193,11 @@ export class LogViewerProvider implements vscode.TreeDataProvider<LogItem>, vsco
191193
const logPath = path.join(this.workspaceRoot, 'var', 'log');
192194
const logFiles = this.getLogFilesWithoutUpdatingBadge(logPath);
193195
const totalEntries = logFiles.reduce((count, file) => count + parseInt(file.description?.match(/\d+/)?.[0] || '0', 10), 0);
194-
this.statusBarItem.text = `Magento Log-Entries: ${totalEntries}`;
196+
LogViewerProvider.statusBarItem.text = `Magento Log-Entries: ${totalEntries}`;
195197
}
196198

197199
dispose() {
198-
this.statusBarItem.dispose();
200+
// Do not dispose the status bar item here to avoid multiple creations
199201
}
200202
}
201203

@@ -230,6 +232,9 @@ export class ReportViewerProvider implements vscode.TreeDataProvider<LogItem>, v
230232
} else {
231233
const reportPath = path.join(this.workspaceRoot, 'var', 'report');
232234
const reportItems = this.getLogItems(reportPath, 'Reports');
235+
if (reportItems.length === 0) {
236+
return Promise.resolve([new LogItem('No report files found', vscode.TreeItemCollapsibleState.None)]);
237+
}
233238
return Promise.resolve(reportItems);
234239
}
235240
}

0 commit comments

Comments
 (0)