From 5614ad049d57a18027bdf03636a2bb97556d71bd Mon Sep 17 00:00:00 2001 From: Pierre Gironde Date: Sun, 4 Oct 2026 13:43:50 +0200 Subject: [PATCH] clean up deprecated buttons --- vscode-appdaemon/README.md | 12 ++--- vscode-appdaemon/media/logExplorer.html | 2 +- vscode-appdaemon/media/logExplorer.js | 36 +++---------- vscode-appdaemon/package.json | 4 -- vscode-appdaemon/src/adClient.ts | 5 -- vscode-appdaemon/src/errorViewer.ts | 14 ------ vscode-appdaemon/src/extension.ts | 17 +------ vscode-appdaemon/src/logExplorer.ts | 18 +------ vscode-appdaemon/src/statusBar.ts | 50 +------------------ vscode-appdaemon/tests/logExplorer.test.js | 7 +-- vscode-appdaemon/tests/logUi.test.js | 32 ++++++------ vscode-appdaemon/vscode-appdaemon-0.2.0.vsix | Bin 58892 -> 56753 bytes 12 files changed, 36 insertions(+), 161 deletions(-) diff --git a/vscode-appdaemon/README.md b/vscode-appdaemon/README.md index d24fa76..9a2f3e3 100644 --- a/vscode-appdaemon/README.md +++ b/vscode-appdaemon/README.md @@ -17,11 +17,11 @@ By default, it reads the existing AppDaemon text logs from the workspace: - `logs/error.log` - `logs/virtualsensors.log` -The explorer groups lines by the app name in the standard AppDaemon log format. It provides INFO/WARNING/ERROR counts, expandable app histories, relative timestamps, sorting by latest activity or app name, text/time/level filters, live updates, copy/paste, raw-log navigation, and archived-log import. Duplicate error lines found in multiple files are merged. The log reader handles file rotation, truncation, multiline exceptions, UTF-8, and legacy Windows-1252 bytes. +The explorer groups lines by the app name in the standard AppDaemon log format. It provides INFO/WARNING/ERROR counts, expandable app histories, relative timestamps, sorting by latest activity or app name, text/time/level filters, live updates, and raw-log navigation. Duplicate error lines found in multiple files are merged. The log reader handles file rotation, truncation, multiline exceptions, UTF-8, and legacy Windows-1252 bytes. -**AD Logs** turns red when the loaded logs contain an ERROR or CRITICAL entry. **Clear logs** empties the configured live log files and clears the current explorer history; imported archive files are left on disk. +**AD Logs** turns red when the loaded logs contain an ERROR or CRITICAL entry. **Clear logs** empties the configured log files and clears the current explorer history. -The standard AppDaemon text logs do not contain causal links or reliable initialization boundaries. The details panel will say so for ordinary entries. Existing messages that already contain trace or initialization metadata can still be grouped or linked; the explorer does not create that metadata. **Open history** can also load archived files. No AppDaemon Python changes are needed for this raw-log view. +The standard AppDaemon text logs do not contain causal links or reliable initialization boundaries. The details panel will say so for ordinary entries. Existing messages that already contain trace or initialization metadata can still be grouped or linked; the explorer does not create that metadata. No AppDaemon Python changes are needed for this raw-log view. ## Settings @@ -61,8 +61,8 @@ settings file. - Home Assistant entity completion and hover information in Python/YAML. - Navigation to AppDaemon app and virtual-sensor definitions. - AppDaemon errors as VS Code diagnostics and an output channel. -- Status bar actions for app reload, Home Assistant restart, production mode, - error handling and apps defined in the active YAML file. +- Status bar actions for app reload, Home Assistant restart, log exploration, + and apps defined in the active YAML file. | Shortcut | Action | | --- | --- | @@ -72,7 +72,7 @@ settings file. Commands are available under **AppDaemon:** in the Command Palette: **Go to App**, **Restart Apps in Current File**, **Reload Apps**, **Restart Home Assistant**, **Toggle Production Mode**, **Show Error Log**, **Refresh Entity -List**, **Handle Errors**, **Clear Error Diagnostics**, and **Explore Logs**. +List**, **Clear Error Diagnostics**, and **Explore Logs**. ## Verification diff --git a/vscode-appdaemon/media/logExplorer.html b/vscode-appdaemon/media/logExplorer.html index f2a6816..36d78e8 100644 --- a/vscode-appdaemon/media/logExplorer.html +++ b/vscode-appdaemon/media/logExplorer.html @@ -3,7 +3,7 @@ AppDaemon · Logs -

AppDaemon Logs

Reading logs…

+

AppDaemon Logs

Reading logs…

Applications

Log details

Select a log to view its details.

The base AppDaemon log format does not include causal links.

diff --git a/vscode-appdaemon/media/logExplorer.js b/vscode-appdaemon/media/logExplorer.js index 1089fc4..34158ee 100644 --- a/vscode-appdaemon/media/logExplorer.js +++ b/vscode-appdaemon/media/logExplorer.js @@ -1,19 +1,10 @@ /* Shared UI: VS Code transport or a standalone review fixture. No log HTML is executed. */ (() => { - const inVSCode = typeof acquireVsCodeApi === 'function'; - const vscode = inVSCode ? acquireVsCodeApi() : { - async postMessage(message) { - if (message.type !== 'copy') return; - if (navigator.clipboard?.writeText) await navigator.clipboard.writeText(message.text); - else { - const area = document.createElement('textarea'); area.value = message.text; - document.body.append(area); area.select(); document.execCommand?.('copy'); area.remove(); - } - window.dispatchEvent(new MessageEvent('message', { data: { type: 'copied' } })); - }, getState() {}, setState() {} + const vscode = typeof acquireVsCodeApi === 'function' ? acquireVsCodeApi() : { + postMessage() {}, getState() {}, setState() {} }; const saved = vscode.getState() || {}; - let entries = [], latest, appliedMessage, displayZone = 'Europe/Berlin', paused = false, selected = saved.selected, mode = saved.mode || 'graph', origin = saved.origin || saved.selected; + let entries = [], latest, appliedMessage, displayZone = 'Europe/Berlin', selected = saved.selected, mode = saved.mode || 'graph', origin = saved.origin || saved.selected; const expanded = new Set(saved.expanded || []); const visibleEventGroups = new Map(); const logScrollPositions = new Map(); @@ -42,7 +33,6 @@ return new Intl.DateTimeFormat(undefined, { timeZone: displayZone, day: '2-digit', month: 'short', ...(includeYear ? { year: 'numeric' } : {}), hour: '2-digit', minute: '2-digit', second: '2-digit', hourCycle: 'h23', timeZoneName: 'shortOffset' }).format(new Date(entry.time)); } catch { return entry.timestamp; } }; - const copyText = e => `${formatTime(e, true)} ${e.level} ${e.app}: ${cleanMessage(e)}`; function timeSince(time) { const seconds = Math.max(0, Math.floor((Date.now() - Number(time)) / 1000)); if (seconds < 60) return `${seconds} second${seconds === 1 ? '' : 's'} ago`; @@ -70,7 +60,6 @@ if (days < 365) return `${months} mo ago`; return `${Math.floor(days / 365)} yr ago`; } - function copy(text) { if (text) vscode.postMessage({ type: 'copy', text }); } function logMessages(items, cls) { const container = node('div', undefined, cls); items.forEach((entry, index) => { @@ -361,7 +350,7 @@ ? `${logCount} log lines + ${traceCount} ${traceLabel} · Live updates · Up to ${message.limit || 10000} records` : `${logCount} log lines · Live updates · Up to ${message.limit || 10000} records`; $('status').title = traceCount - ? 'Showing AppDaemon logs and additional records from configured history files.' + ? 'Showing AppDaemon logs and additional records from configured log files.' : 'Reading the configured AppDaemon text logs. Causal links require additional metadata that the base log format does not contain.'; const errorCount = entries.filter(e => (e.kind === 'log' || e.kind.startsWith('initialization_')) && normalLevel(e) === 'ERROR').length; $('error-count').textContent = `${errorCount} error${errorCount === 1 ? '' : 's'}`; @@ -376,7 +365,6 @@ setInterval(refreshLastLogAges, 1000); function selectionActive() { return pointerSelecting || Boolean(window.getSelection()?.toString()); } window.addEventListener('message', event => { - if (event.data?.type === 'copied') { $('copy').textContent = 'Copied'; setTimeout(() => $('copy').textContent = 'Copy selected log', 1200); return; } if (event.data?.type === 'clear-result') { $('clear').disabled = false; $('clear').textContent = 'Clear logs'; @@ -385,25 +373,16 @@ } if (event.data?.type !== 'entries') return; latest = event.data; - if (!paused && !selectionActive()) apply(latest); - else if (!paused) $('status').textContent = 'Updates buffered while text is selected'; + if (!selectionActive()) apply(latest); + else $('status').textContent = 'Updates buffered while text is selected'; }); document.addEventListener('pointerdown', event => { pointerSelecting = Boolean(event.target.closest?.('.row, .selected-message, .node, .values')); }); document.addEventListener('pointerup', () => { pointerSelecting = false; }); - document.addEventListener('selectionchange', () => { if (!paused && !selectionActive() && latest && latest !== appliedMessage) setTimeout(() => { if (!paused && !selectionActive() && latest !== appliedMessage) apply(latest); }, 0); }); - document.addEventListener('keydown', event => { - if ((event.ctrlKey || event.metaKey) && event.key.toLowerCase() === 'c' && !event.target.closest?.('input, textarea, [contenteditable=true]')) { - const entry = entries.find(e => e.event_id === selected); - const text = window.getSelection()?.toString() || (entry ? (visibleEventGroups.get(entry.event_id) || [entry]).map(copyText).join('\n') : ''); - if (text && (inVSCode || !window.getSelection()?.toString())) { event.preventDefault(); copy(text); } - } - }); - $('copy').onclick = () => { const e = entries.find(e => e.event_id === selected); copy(window.getSelection()?.toString() || (e ? (visibleEventGroups.get(e.event_id) || [e]).map(copyText).join('\n') : '')); }; + document.addEventListener('selectionchange', () => { if (!selectionActive() && latest && latest !== appliedMessage) setTimeout(() => { if (!selectionActive() && latest !== appliedMessage) apply(latest); }, 0); }); ['search', 'period', 'level', 'sort'].forEach(id => $(id).addEventListener('input', () => { errorView = undefined; selected = undefined; origin = undefined; save(); renderApps(); renderDetail(); })); - $('pause').onclick = () => { paused = !paused; $('pause').textContent = paused ? 'Resume' : 'Pause'; if (!paused && latest) apply(latest); else if (paused) $('status').textContent = 'Display paused · New events are still being collected'; }; $('error-count').onclick = () => { const leaving = $('level').value === 'ERROR'; if (leaving) { @@ -424,7 +403,6 @@ if (first) { first.click(); first.closest('.rows').scrollTop = 0; first.focus({ preventScroll: true }); } } }; - $('import').onclick = () => vscode.postMessage({ type: 'import' }); $('clear').onclick = () => { selected = undefined; origin = undefined; save(); $('clear').disabled = true; $('clear').textContent = 'Clearing…'; vscode.postMessage({ type: 'clear' }); }; $('graph-mode').onclick = () => { mode = 'graph'; save(); renderDetail(); }; $('tree-mode').onclick = () => { mode = 'tree'; save(); renderDetail(); }; diff --git a/vscode-appdaemon/package.json b/vscode-appdaemon/package.json index e9ec0d9..f97a626 100644 --- a/vscode-appdaemon/package.json +++ b/vscode-appdaemon/package.json @@ -113,10 +113,6 @@ "title": "AppDaemon: Refresh Entity List", "icon": "$(sync)" }, - { - "command": "appdaemon.handleErrors", - "title": "AppDaemon: Handle Errors" - }, { "command": "appdaemon.clearErrors", "title": "AppDaemon: Clear Error Diagnostics" diff --git a/vscode-appdaemon/src/adClient.ts b/vscode-appdaemon/src/adClient.ts index 59e1e70..f4d056f 100644 --- a/vscode-appdaemon/src/adClient.ts +++ b/vscode-appdaemon/src/adClient.ts @@ -14,8 +14,6 @@ function normalizeUrl(raw: string): string { export class ADClient { private productionMode = false; - private _onProductionModeChanged = new vscode.EventEmitter(); - readonly onProductionModeChanged = this._onProductionModeChanged.event; private log: vscode.OutputChannel; constructor(log: vscode.OutputChannel) { @@ -120,7 +118,6 @@ export class ADClient { async setProductionMode(mode: boolean): Promise { await this.request('POST', '/api/appdaemon/service/admin/production_mode/set', { mode }); this.productionMode = mode; - this._onProductionModeChanged.fire(mode); } /** @@ -135,7 +132,6 @@ export class ADClient { if (key.includes('production_mode')) { const val = (state[key] as { state?: unknown })?.state; this.productionMode = val === true || val === 'True' || val === 'true'; - this._onProductionModeChanged.fire(this.productionMode); return this.productionMode; } } @@ -155,6 +151,5 @@ export class ADClient { } dispose() { - this._onProductionModeChanged.dispose(); } } diff --git a/vscode-appdaemon/src/errorViewer.ts b/vscode-appdaemon/src/errorViewer.ts index c2e5f96..4862153 100644 --- a/vscode-appdaemon/src/errorViewer.ts +++ b/vscode-appdaemon/src/errorViewer.ts @@ -11,10 +11,6 @@ export class ErrorViewer { private diagnosticCollection: vscode.DiagnosticCollection; private watcher: fs.FSWatcher | undefined; private lastSize = 0; - private errorCount = 0; - - private _onErrorCountChanged = new vscode.EventEmitter(); - readonly onErrorCountChanged = this._onErrorCountChanged.event; constructor() { this.outputChannel = vscode.window.createOutputChannel('AppDaemon Errors'); @@ -30,12 +26,6 @@ export class ErrorViewer { clearDiagnostics() { this.diagnosticCollection.clear(); - this.errorCount = 0; - this._onErrorCountChanged.fire(0); - } - - getErrorCount(): number { - return this.errorCount; } // ── file watching ──────────────────────────────────────────────────────── @@ -115,12 +105,9 @@ export class ErrorViewer { this.outputChannel.appendLine(trimmed); if (/\b(ERROR|CRITICAL|WARNING)\b/.test(trimmed)) { - this.errorCount++; this.parseDiagnostic(trimmed); } } - - this._onErrorCountChanged.fire(this.errorCount); } finally { fs.closeSync(fd); } @@ -183,6 +170,5 @@ export class ErrorViewer { } this.outputChannel.dispose(); this.diagnosticCollection.dispose(); - this._onErrorCountChanged.dispose(); } } diff --git a/vscode-appdaemon/src/extension.ts b/vscode-appdaemon/src/extension.ts index fd932a0..9a71d8a 100644 --- a/vscode-appdaemon/src/extension.ts +++ b/vscode-appdaemon/src/extension.ts @@ -347,12 +347,9 @@ export async function activate(context: vscode.ExtensionContext) { errorViewer = new ErrorViewer(); const logExplorer = new LogExplorer(context, count => statusBar.setLogErrorCount(count)); context.subscriptions.push(logExplorer, vscode.commands.registerCommand('appdaemon.exploreLogs', () => logExplorer.show())); - statusBar = new StatusBarManager(adClient); + statusBar = new StatusBarManager(); logExplorer.startPolling(); - // Wire error count → status bar badge - errorViewer.onErrorCountChanged((count) => statusBar.setErrorCount(count)); - // ── Contextual per-file restart button ─────────────────────────────────── updateContextualButton(vscode.window.activeTextEditor); context.subscriptions.push( @@ -544,18 +541,6 @@ export async function activate(context: vscode.ExtensionContext) { vscode.commands.registerCommand('appdaemon.showErrors', () => { errorViewer.show(); }), - vscode.commands.registerCommand('appdaemon.handleErrors', async () => { - const pick = await vscode.window.showErrorMessage( - 'AppDaemon errors detected', - 'Show log', - 'Clear' - ); - if (pick === 'Show log') { - errorViewer.show(); - } else if (pick === 'Clear') { - errorViewer.clearDiagnostics(); - } - }), vscode.commands.registerCommand('appdaemon.refreshEntities', async () => { const entities = await haClient.fetchEntities(); vscode.window.showInformationMessage(`AppDaemon: ${entities.length} entities loaded`); diff --git a/vscode-appdaemon/src/logExplorer.ts b/vscode-appdaemon/src/logExplorer.ts index 0b76d1b..a2fb5a1 100644 --- a/vscode-appdaemon/src/logExplorer.ts +++ b/vscode-appdaemon/src/logExplorer.ts @@ -14,7 +14,6 @@ export class LogExplorer implements vscode.Disposable { private timer?: ReturnType; private entries = new Map(); private cursors = new Map(); - private imported = new Set(); private warnings = new Set(); private busy = false; private sourceDocuments?: Promise; @@ -58,10 +57,6 @@ export class LogExplorer implements vscode.Disposable { .replace('{{CSS}}', media('logExplorer.css').toString()).replace('{{JS}}', media('logExplorer.js').toString()); this.messageListener?.dispose(); this.messageListener = webview.onDidReceiveMessage(async message => { - if (message.type === 'copy' && typeof message.text === 'string' && message.text.length <= 1024 * 1024) { - try { await vscode.env.clipboard.writeText(message.text); webview.postMessage({ type: 'copied' }); } - catch (error) { vscode.window.showWarningMessage(`Unable to copy: ${String(error)}`); } - } if (message.type === 'ready') { this.publish(); } if (message.type === 'open' && typeof message.id === 'string') { const entry = this.entries.get(message.id); @@ -92,11 +87,6 @@ export class LogExplorer implements vscode.Disposable { editor.revealRange(new vscode.Range(position, position)); } catch (error) { vscode.window.showWarningMessage(`Source unavailable: ${String(error)}`); } } - if (message.type === 'import') { - const files = await vscode.window.showOpenDialog({ canSelectMany: true, filters: { Logs: ['log', '1', '2', '3'] } }); - files?.forEach(uri => this.imported.add(uri.fsPath)); - this.poll(); - } if (message.type === 'clear') { this.clearLogs(); } }, undefined, this.context.subscriptions); this.activeWebview = webview; @@ -116,12 +106,9 @@ export class LogExplorer implements vscode.Disposable { const configured = config.get('logExplorerPaths', ['logs/appdaemon.log', 'logs/error.log', 'logs/virtualsensors.log']); return [...new Set(configured.map(p => path.resolve(folder, p)))]; } - private files(): string[] { - return [...new Set([...this.configuredFiles(), ...this.imported])]; - } private clearLogs() { const folder = vscode.workspace.workspaceFolders?.[0]?.uri.fsPath; - const cleared = new Set(this.imported); + const cleared = new Set(); const failures: string[] = []; if (folder) { const realRoot = fs.realpathSync(folder); @@ -138,7 +125,6 @@ export class LogExplorer implements vscode.Disposable { } } } - this.imported.clear(); for (const [id, entry] of this.entries) { if (entry.file && cleared.has(entry.file)) { this.entries.delete(id); } } failures.forEach(failure => this.warnings.add(`Unable to clear ${failure}`)); this.publish(); @@ -151,7 +137,7 @@ export class LogExplorer implements vscode.Disposable { try { const encoding = vscode.workspace.getConfiguration('appdaemon').get('logEncoding', 'auto'); const zone = vscode.workspace.getConfiguration('appdaemon').get('logTimezone', 'Europe/Berlin'); - for (const file of this.files()) { + for (const file of this.configuredFiles()) { if (!fs.existsSync(file)) { continue; } try { const stat = fs.statSync(file); diff --git a/vscode-appdaemon/src/statusBar.ts b/vscode-appdaemon/src/statusBar.ts index 21a1b97..75336e5 100644 --- a/vscode-appdaemon/src/statusBar.ts +++ b/vscode-appdaemon/src/statusBar.ts @@ -1,15 +1,12 @@ import * as vscode from 'vscode'; -import { ADClient } from './adClient'; export class StatusBarManager { private restartADItem: vscode.StatusBarItem; private restartHAItem: vscode.StatusBarItem; - private productionModeItem: vscode.StatusBarItem; - private errorItem: vscode.StatusBarItem; private contextualItem: vscode.StatusBarItem; private logsItem: vscode.StatusBarItem; - constructor(private adClient: ADClient) { + constructor() { // Reload AppDaemon apps this.restartADItem = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left, 100); this.restartADItem.command = 'appdaemon.restartAD'; @@ -24,19 +21,6 @@ export class StatusBarManager { this.restartHAItem.tooltip = 'Restart Home Assistant'; this.restartHAItem.show(); - // Production mode toggle - this.productionModeItem = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left, 98); - this.productionModeItem.command = 'appdaemon.toggleProductionMode'; - this.updateProductionModeDisplay(); - this.productionModeItem.show(); - - // Error log shortcut - this.errorItem = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left, 97); - this.errorItem.command = 'appdaemon.showErrors'; - this.errorItem.text = '$(check) AD Errors'; - this.errorItem.tooltip = 'Show AppDaemon Error Log'; - this.errorItem.show(); - // Log explorer shortcut, available even when no editor is open. this.logsItem = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left, 96); this.logsItem.command = 'appdaemon.exploreLogs'; @@ -47,9 +31,6 @@ export class StatusBarManager { // Contextual per-file restart button (hidden by default) this.contextualItem = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left, 101); this.contextualItem.command = 'appdaemon.restartCurrentFileApps'; - - // React to production mode changes - adClient.onProductionModeChanged(() => this.updateProductionModeDisplay()); } /** @@ -69,33 +50,6 @@ export class StatusBarManager { this.contextualItem.show(); } - updateProductionModeDisplay() { - const isProduction = this.adClient.isProductionMode(); - if (isProduction) { - this.productionModeItem.text = '$(eye-closed) Prod ON'; - this.productionModeItem.tooltip = 'Production Mode: ON — click to disable'; - this.productionModeItem.backgroundColor = new vscode.ThemeColor('statusBarItem.warningBackground'); - } else { - this.productionModeItem.text = '$(eye) Prod OFF'; - this.productionModeItem.tooltip = 'Production Mode: OFF — click to enable'; - this.productionModeItem.backgroundColor = undefined; - } - } - - setErrorCount(count: number) { - if (count > 0) { - this.errorItem.text = `$(warning) AD Errors (${count})`; - this.errorItem.backgroundColor = new vscode.ThemeColor('statusBarItem.errorBackground'); - this.errorItem.tooltip = `${count} error(s) — click to show or clear`; - this.errorItem.command = 'appdaemon.handleErrors'; - } else { - this.errorItem.text = '$(check) AD Errors'; - this.errorItem.backgroundColor = undefined; - this.errorItem.tooltip = 'No AppDaemon errors — click to view log'; - this.errorItem.command = 'appdaemon.showErrors'; - } - } - setLogErrorCount(count: number) { this.logsItem.backgroundColor = count > 0 ? new vscode.ThemeColor('statusBarItem.errorBackground') : undefined; this.logsItem.tooltip = count > 0 @@ -106,8 +60,6 @@ export class StatusBarManager { dispose() { this.restartADItem.dispose(); this.restartHAItem.dispose(); - this.productionModeItem.dispose(); - this.errorItem.dispose(); this.logsItem.dispose(); this.contextualItem.dispose(); } diff --git a/vscode-appdaemon/tests/logExplorer.test.js b/vscode-appdaemon/tests/logExplorer.test.js index e276b05..9b94ac7 100644 --- a/vscode-appdaemon/tests/logExplorer.test.js +++ b/vscode-appdaemon/tests/logExplorer.test.js @@ -61,20 +61,17 @@ test('groups plain app.log lines between explicit initialization markers',()=>{ assert.equal(grouped[2].group_inferred,undefined); }); -test('clears configured live files, keeps imported archives, and updates the log error count',()=>{ +test('clears configured log files and updates the log error count',()=>{ const counts=[];const e=new LogExplorer({},count=>counts.push(count)); messages=[];const webview={postMessage:m=>messages.push(m)};e.panel={webview};e.activeWebview=webview; const errorFile=path.join(root,'logs/error.log'); - const archive=path.join(root,'logs/history.log.1'); fs.writeFileSync(file,'27-09-26 10:12:13 ERROR app: failed\n'); fs.writeFileSync(errorFile,'27-09-26 10:12:13 ERROR app: failed\n'); - fs.writeFileSync(archive,'27-09-26 10:12:14 INFO app: archived\n'); - e.imported.add(archive);e.poll(); + e.poll(); assert.equal(counts.at(-1),1); e.clearLogs(); assert.equal(fs.statSync(file).size,0); assert.equal(fs.statSync(errorFile).size,0); - assert.match(fs.readFileSync(archive,'utf8'),/archived/); assert.equal(counts.at(-1),0); assert.deepEqual(messages.filter(message=>message.type==='entries').at(-1).entries,[]); fs.appendFileSync(file,'27-09-26 10:12:15 CRITICAL app: new failure\n');e.poll(); diff --git a/vscode-appdaemon/tests/logUi.test.js b/vscode-appdaemon/tests/logUi.test.js index dd1ef70..51b6fc2 100644 --- a/vscode-appdaemon/tests/logUi.test.js +++ b/vscode-appdaemon/tests/logUi.test.js @@ -20,7 +20,9 @@ function setup() { test('English interface, latest timestamps, sorting and separate initialization groups',()=>{ const {dom,d,errors}=setup(); assert.equal(d.documentElement.lang,'en'); - assert.equal(d.getElementById('copy').textContent,'Copy selected log'); + assert.equal(d.getElementById('copy'),null); + assert.equal(d.getElementById('import'),null); + assert.equal(d.getElementById('pause'),null); assert.deepEqual([...d.querySelectorAll('[data-app]')].map(e=>e.dataset.app),['beta','alpha']); assert.match(d.querySelector('[data-app="alpha"] .last-age').title,/10:00:10/); assert.match(d.querySelector('[data-app="alpha"] summary .last-log').textContent,/ : Température déjà disponible$/); @@ -38,25 +40,25 @@ test('English interface, latest timestamps, sorting and separate initialization assert.equal(d.getElementById('group-init'),null); assert.deepEqual(errors,[]);dom.window.close(); }); -test('copies selected logs and entire initialization groups through VS Code transport',()=>{ - const {dom,d,sent,errors}=setup();const alpha=d.querySelector('[data-app="alpha"]');alpha.open=true;alpha.dispatchEvent(new dom.window.Event('toggle')); - [...alpha.querySelectorAll('.row')].find(e=>e.textContent.includes('Température déjà disponible')).click();d.getElementById('copy').click(); - assert.equal(sent.at(-1).type,'copy');assert.match(sent.at(-1).text,/Température déjà disponible/); +test('selects individual logs and entire initialization groups',()=>{ + const {dom,d,errors}=setup();const alpha=d.querySelector('[data-app="alpha"]');alpha.open=true;alpha.dispatchEvent(new dom.window.Event('toggle')); + [...alpha.querySelectorAll('.row')].find(e=>e.textContent.includes('Température déjà disponible')).click(); + assert.match(d.getElementById('detail').textContent,/Température déjà disponible/); const group=alpha.querySelector('.event-log-group'); - group.click();d.getElementById('copy').click(); + group.click(); assert.match(d.getElementById('detail').textContent,/Preparing sensors\s+Ready/); - assert.match(sent.at(-1).text,/Preparing sensors/);assert.match(sent.at(-1).text,/Ready/);assert.doesNotMatch(sent.at(-1).text,/Restarting/); + assert.doesNotMatch(d.getElementById('detail').textContent,/Restarting/); const input=d.getElementById('search'),paste=new dom.window.KeyboardEvent('keydown',{key:'v',ctrlKey:true,bubbles:true,cancelable:true});input.dispatchEvent(paste);assert.equal(paste.defaultPrevented,false); assert.deepEqual(errors,[]);dom.window.close(); }); -test('retains selected text during live updates and copies it with Ctrl+C',async()=>{ - const {dom,d,entries,sent,errors,send}=setup();const alpha=d.querySelector('[data-app="alpha"]');alpha.open=true;alpha.dispatchEvent(new dom.window.Event('toggle')); +test('retains selected text during live updates and leaves Ctrl+C to the browser',async()=>{ + const {dom,d,entries,errors,send}=setup();const alpha=d.querySelector('[data-app="alpha"]');alpha.open=true;alpha.dispatchEvent(new dom.window.Event('toggle')); const text=alpha.querySelector('.row-message'),range=d.createRange();range.selectNodeContents(text);dom.window.getSelection().addRange(range); const original=text.textContent; send([...entries,{...entries[3],event_id:'new',time:30,message:'New log'}]); assert.equal(dom.window.getSelection().toString(),original);assert.match(d.getElementById('status').textContent,/buffered/); - text.dispatchEvent(new dom.window.KeyboardEvent('keydown',{key:'c',ctrlKey:true,bubbles:true,cancelable:true})); - assert.equal(sent.at(-1).text,original); + const copy=new dom.window.KeyboardEvent('keydown',{key:'c',ctrlKey:true,bubbles:true,cancelable:true}); + text.dispatchEvent(copy);assert.equal(copy.defaultPrevented,false); dom.window.getSelection().removeAllRanges();d.dispatchEvent(new dom.window.Event('selectionchange'));await new Promise(resolve=>setTimeout(resolve,15)); assert.match(d.querySelector('[data-app="alpha"]').textContent,/New log/); assert.deepEqual(errors,[]);dom.window.close(); @@ -67,7 +69,7 @@ test('log content is never interpreted as HTML',()=>{ assert.equal(d.querySelectorAll('#apps img,#apps script').length,0);assert.match(app.textContent,/{ - const {dom,d,entries,send,sent}=setup(); + const {dom,d,entries,send}=setup(); const trigger={...entries[3],event_id:'motion-callback',time:entries[3].time+1000,message:'Callback trigger by sensor.kitchen_last_motion(7 => 0)',trace_id:'motion-event'}; const evaluation={...entries[3],event_id:'motion-evaluation',time:entries[3].time+1000,message:'[kitchen_occupancy][Evaluating] Triggered by (sensor.kitchen_last_motion[0] <= 5)[True]',trace_id:'motion-event',cause_ids:['state-event']}; const newer={...entries[3],event_id:'later-log',time:entries[3].time+2000,message:'Later event'}; @@ -79,9 +81,7 @@ test('shows same-event log lines together with one causes link and keeps newer e assert.match(combined.querySelector('.row-message').textContent,/Triggered by \(sensor.kitchen_last_motion/); assert.equal(combined.querySelectorAll('.link-hint').length,1); assert.equal(rows.children[1].querySelector('.row-message').textContent,'Later event'); - combined.click();d.getElementById('copy').click(); - assert.match(sent.at(-1).text,/Callback trigger by sensor.kitchen_last_motion/); - assert.match(sent.at(-1).text,/Triggered by \(sensor.kitchen_last_motion/); + combined.click(); assert.match(d.getElementById('detail').textContent,/Callback trigger by sensor.kitchen_last_motion/); dom.window.close(); }); @@ -157,7 +157,7 @@ test('distinguishes log lines from supplemental records when configured',()=>{ const trace={...entries[3],event_id:'trace-evaluation',kind:'evaluation',message:'Condition was evaluated'}; send([...entries,trace]); assert.match(d.getElementById('status').textContent,/5 log lines \+ 1 trace event/); - assert.match(d.getElementById('status').title,/configured history files/); + assert.match(d.getElementById('status').title,/configured log files/); dom.window.close(); }); diff --git a/vscode-appdaemon/vscode-appdaemon-0.2.0.vsix b/vscode-appdaemon/vscode-appdaemon-0.2.0.vsix index dc730f698a49bca0479cf53284e92303e5fd7033..2323fa805c150824cd013d54b1e87c7c4e60688d 100644 GIT binary patch delta 38502 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 K7UT3k`u_npRdo>n delta 40722 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

*4` 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 OaOOHDy!Xbxfd2=*IkLV0