perf: Optimize task processing by skipping updates for non-task files and files with zero tasks, and remove verbose logging.

This commit is contained in:
Hoang Nam 2026-02-09 18:34:40 +07:00
parent 8e24ba3611
commit 4c0e244fc9
2 changed files with 16 additions and 45 deletions

View file

@ -244,18 +244,23 @@ export default class TaskProgressBarPlugin extends Plugin {
}
// Original logic for regular file changes
// Always check for changes - don't pre-filter by task existence
// This ensures updates work even when all tasks are deleted
const hasContentChanged = this.hasTaskContentChanged(
this.lastFileContent,
content
);
if (
content.includes("- [") ||
this.lastFileContent.includes("- [") ||
/- \[[^\]]*\]/.test(content) ||
/- \[[^\]]*\]/.test(this.lastFileContent)
) {
const hasContentChanged = this.hasTaskContentChanged(
this.lastFileContent,
content
);
if (hasContentChanged) {
this.lastFileContent = content;
if (hasContentChanged) {
this.lastFileContent = content;
if (currentFile) {
this.sidebarView.updateProgressBar(currentFile, content);
if (currentFile) {
this.sidebarView.updateProgressBar(currentFile, content);
}
}
}
}

View file

@ -157,15 +157,6 @@ export class TaskProgressBarView extends ItemView {
if (!hasTasksInContent(fileContent)) {
this.showNoTasksMessage(container);
// CRITICAL: Still process async updates to reset status and Kanban.
// Tính năng này giúp reset lại trạng thái của file khi không có task nào trong file. Nhưng sẽ ghi đè status: seed, sapling, evergreen.
// this.logger.log("⚠️ Calling processAsyncUpdates for zero tasks case");
// const zeroProgressData: ProgressData = {
// completedCount: 0,
// totalTasks: 0,
// percentage: 0,
// };
// this.processAsyncUpdates(file, zeroProgressData);
this.logger.log("No tasks found in file:", file.path);
} else {
await this.createProgressBarFromContent(container, fileContent, file);
@ -206,19 +197,8 @@ export class TaskProgressBarView extends ItemView {
`custom states: ${taskCounts.customStates}, total: ${taskCounts.total}`
);
// Special handling for zero tasks
if (taskCounts.total === 0) {
this.logger.log(`⚠️ ZERO TASKS detected for ${file.path}`);
this.showNoTasksMessage(container);
// Still process async updates to reset status and Kanban
const zeroProgressData: ProgressData = {
completedCount: 0,
totalTasks: 0,
percentage: 0, // Treat as 0% (Todo)
};
this.logger.log(`Calling processAsyncUpdates with ZERO data for ${file.path}`);
this.processAsyncUpdates(file, zeroProgressData);
return;
}
@ -389,7 +369,6 @@ export class TaskProgressBarView extends ItemView {
setTimeout(async () => {
try {
const { percentage, completedCount, totalTasks } = data;
this.logger.log(`📊 processAsyncUpdates: ${file.basename} - ${completedCount}/${totalTasks} (${percentage}%)`);
// Calculate target status FIRST
let targetStatus = this.settings.statusInProgress;
@ -398,37 +377,24 @@ export class TaskProgressBarView extends ItemView {
} else if (percentage === 100) {
targetStatus = this.settings.statusCompleted;
}
this.logger.log(`🎯 Target status: ${targetStatus}`);
// Update status based on progress
let statusChanged = false;
if (this.settings.autoChangeStatus) {
this.logger.log(`Updating status based on ${percentage}%...`);
statusChanged = await this.updateStatusBasedOnProgress(file, percentage);
this.logger.log(`Status changed: ${statusChanged}`);
// Wait for metadata cache to update after frontmatter change
if (statusChanged) {
await new Promise(resolve => setTimeout(resolve, 100));
}
} else {
this.logger.log(`⚠️ autoChangeStatus is DISABLED`);
}
// Update Kanban boards - PASS the calculated status directly
// instead of reading from YAML to avoid race condition
const hasInMap = this.completedFilesMap.has(file.path);
this.logger.log(`Kanban check: statusChanged=${statusChanged}, inCompletedMap=${hasInMap}`);
if (this.settings.autoUpdateKanban && this.kanbanService) {
if (statusChanged || !this.completedFilesMap.has(file.path)) {
this.logger.log(`✅ Calling updateKanbanBoards with status: ${targetStatus}`);
await this.updateKanbanBoards(file, completedCount, totalTasks, targetStatus);
} else {
this.logger.log(`❌ SKIPPING Kanban update (statusChanged=false AND file in completedMap)`);
}
} else {
this.logger.log(`⚠️ Kanban update disabled or no service`);
}
// Handle 100% completion
@ -529,7 +495,7 @@ export class TaskProgressBarView extends ItemView {
totalTasks: number,
targetStatus?: string
): Promise<void> {
if (!this.settings.autoUpdateKanban || !this.kanbanService) {
if (!this.settings.autoUpdateKanban || totalTasks === 0 || !this.kanbanService) {
return;
}