mirror of
https://github.com/vannamhh/progress-tracker.git
synced 2026-07-22 12:20:25 +00:00
Compare commits
3 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ff58767175 | ||
|
|
4c0e244fc9 | ||
|
|
8e24ba3611 |
4 changed files with 18 additions and 46 deletions
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "progress-tracker",
|
||||
"name": "ProgressTracker",
|
||||
"version": "1.5.2",
|
||||
"version": "1.5.4",
|
||||
"minAppVersion": "1.1.0",
|
||||
"description": "Track task completion with a visual progress bar in your sidebar, auto update column Kanban",
|
||||
"author": "VN",
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "progress-tracker",
|
||||
"version": "1.5.2",
|
||||
"version": "1.5.4",
|
||||
"description": "Track task completion with a visual progress bar in your sidebar",
|
||||
"main": "main.js",
|
||||
"scripts": {
|
||||
|
|
|
|||
25
src/main.ts
25
src/main.ts
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -157,14 +157,6 @@ export class TaskProgressBarView extends ItemView {
|
|||
|
||||
if (!hasTasksInContent(fileContent)) {
|
||||
this.showNoTasksMessage(container);
|
||||
// CRITICAL: Still process async updates to reset status and Kanban
|
||||
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);
|
||||
|
|
@ -205,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;
|
||||
}
|
||||
|
||||
|
|
@ -388,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;
|
||||
|
|
@ -397,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
|
||||
|
|
@ -528,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