diff --git a/CHANGELOG.md b/CHANGELOG.md index 0fbdadc..2a4a6b7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -# Change Log +# Changelog All notable changes to the "magento-log-viewer" extension will be documented in this file. @@ -6,10 +6,16 @@ Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how ## [Unreleased] +## [1.7.1] - 2024-12-09 + ### Added +- Added a message when there are no report files. - Support for Node.js 18.x in GitHub Actions - Automated tests for releases using GitHub Workflows +### Fixed +- Fixed an issue where the status bar item was being created multiple times. + ## [1.7.0] - 2024-12-08 ### Added diff --git a/package.json b/package.json index 1fac397..cd694b8 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "magento-log-viewer", "displayName": "Magento Log Viewer", "description": "A Visual Studio Code extension to view and manage Magento log files.", - "version": "1.7.0", + "version": "1.7.1", "publisher": "MathiasElle", "icon": "resources/logo.png", "repository": { diff --git a/src/helpers.ts b/src/helpers.ts index 4bb6b59..7c635e2 100644 --- a/src/helpers.ts +++ b/src/helpers.ts @@ -151,9 +151,7 @@ export function updateBadge(treeView: vscode.TreeView, logViewerProvide vscode.commands.executeCommand('setContext', 'magentoLogViewer.hasLogFiles', totalEntries > 0); // Update status bar item - const statusBarItem = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left, 100); - statusBarItem.text = `Magento Log-Entries: ${totalEntries}`; - statusBarItem.show(); + LogViewerProvider.statusBarItem.text = `Magento Log-Entries: ${totalEntries}`; }; logViewerProvider.onDidChangeTreeData(updateBadgeCount); @@ -288,3 +286,33 @@ export function getIconForReport(filePath: string): vscode.ThemeIcon { return new vscode.ThemeIcon('file'); } } + +export function getReportItems(dir: string): LogItem[] { + if (!pathExists(dir)) { + return []; + } + + const items: LogItem[] = []; + const files = fs.readdirSync(dir); + + files.forEach(file => { + const filePath = path.join(dir, file); + if (fs.lstatSync(filePath).isDirectory()) { + const subItems = getReportItems(filePath); + if (subItems.length > 0) { + items.push(...subItems); + } + } else if (fs.lstatSync(filePath).isFile()) { + const title = parseReportTitle(filePath); + const reportFile = new LogItem(title, vscode.TreeItemCollapsibleState.None, { + command: 'magento-log-viewer.openFile', + title: 'Open Report File', + arguments: [filePath] + }); + reportFile.iconPath = getIconForReport(filePath); + items.push(reportFile); + } + }); + + return items; +} diff --git a/src/logViewer.ts b/src/logViewer.ts index 52d562b..30c83f8 100644 --- a/src/logViewer.ts +++ b/src/logViewer.ts @@ -6,13 +6,15 @@ import { pathExists, getLineCount, getIconForLogLevel, getLogItems, parseReportT export class LogViewerProvider implements vscode.TreeDataProvider, vscode.Disposable { private _onDidChangeTreeData: vscode.EventEmitter = new vscode.EventEmitter(); readonly onDidChangeTreeData: vscode.Event = this._onDidChangeTreeData.event; - private statusBarItem: vscode.StatusBarItem; + public static statusBarItem: vscode.StatusBarItem; private groupByMessage: boolean; constructor(private workspaceRoot: string) { - this.statusBarItem = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left, 100); - this.statusBarItem.command = 'magento-log-viewer.refreshLogFiles'; - this.statusBarItem.show(); + if (!LogViewerProvider.statusBarItem) { + LogViewerProvider.statusBarItem = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left, 100); + LogViewerProvider.statusBarItem.command = 'magento-log-viewer.refreshLogFiles'; + LogViewerProvider.statusBarItem.show(); + } this.groupByMessage = vscode.workspace.getConfiguration('magentoLogViewer').get('groupByMessage', true); this.updateBadge(); this.updateRefreshButtonVisibility(); @@ -191,11 +193,11 @@ export class LogViewerProvider implements vscode.TreeDataProvider, vsco const logPath = path.join(this.workspaceRoot, 'var', 'log'); const logFiles = this.getLogFilesWithoutUpdatingBadge(logPath); const totalEntries = logFiles.reduce((count, file) => count + parseInt(file.description?.match(/\d+/)?.[0] || '0', 10), 0); - this.statusBarItem.text = `Magento Log-Entries: ${totalEntries}`; + LogViewerProvider.statusBarItem.text = `Magento Log-Entries: ${totalEntries}`; } dispose() { - this.statusBarItem.dispose(); + // Do not dispose the status bar item here to avoid multiple creations } } @@ -230,6 +232,9 @@ export class ReportViewerProvider implements vscode.TreeDataProvider, v } else { const reportPath = path.join(this.workspaceRoot, 'var', 'report'); const reportItems = this.getLogItems(reportPath, 'Reports'); + if (reportItems.length === 0) { + return Promise.resolve([new LogItem('No report files found', vscode.TreeItemCollapsibleState.None)]); + } return Promise.resolve(reportItems); } }