mirror of
https://github.com/vannamhh/progress-tracker.git
synced 2026-07-22 05:43:38 +00:00
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:
parent
8e24ba3611
commit
4c0e244fc9
2 changed files with 16 additions and 45 deletions
|
|
@ -244,8 +244,12 @@ 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
|
||||
if (
|
||||
content.includes("- [") ||
|
||||
this.lastFileContent.includes("- [") ||
|
||||
/- \[[^\]]*\]/.test(content) ||
|
||||
/- \[[^\]]*\]/.test(this.lastFileContent)
|
||||
) {
|
||||
const hasContentChanged = this.hasTaskContentChanged(
|
||||
this.lastFileContent,
|
||||
content
|
||||
|
|
@ -259,6 +263,7 @@ export default class TaskProgressBarPlugin extends Plugin {
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}, this.settings.editorChangeDelay)
|
||||
)
|
||||
);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue