CCExtractor / CCExtractor/taskwarrior-flutter
TaskServer 3 (CCSync v3) Bugs and Improvements
- Dominant language
- Dart
- Stars
- 244
- Forks
- 179
- Avg merge
- 12h 42m
- Merged PRs (30d)
- 2
Description
## Description
Several issues were identified in the **TaskServer 3 (CCSync v3)** integration of the Flutter application.
These include bugs affecting reliability, missing parsing functionality, and UI improvements to make configuration clearer.
This issue proposes fixes and enhancements to improve stability, error handling, and usability.
---
# Problems Identified
## 1. Hardcoded Origin URL
**File:** `origin.dart`
### Problem
The origin parameter is currently hardcoded to:
http://localhost:8080
This prevents the application from connecting to remote or user-configured backend servers.
### Proposed Solution
Replace the hardcoded value with a dynamic function:
Future getOrigin()
This function retrieves the backend URL from:
CredentialsStorage.getApiUrl()
---
## 2. Invalid ScaffoldMessenger Context
**File:** `complete.dart`
### Problem
The code attempts to call:
ScaffoldMessenger.of(context as BuildContext)
This may cause runtime crashes when the `BuildContext` is invalid or disposed.
### Proposed Solution
Remove the unsafe UI call and instead:
- Throw exceptions for non-200 HTTP responses
- Allow the caller to handle UI feedback.
---
## 3. Excessive Timeout Duration
**File:** `manage_task_champion_creds_controller.dart`
### Problem
The HTTP timeout is set to:
Duration(seconds: 10000)
(~166 minutes)
This prevents the application from failing quickly when the server is unreachable.
### Proposed Solution
Reduce the timeout to:
Duration(seconds: 10)
This improves responsiveness when the TaskServer is unavailable.
---
## 4. Missing Annotation Parsing
**File:** `task.dart`
### Problem
The `TaskForC` model initializes annotations as an empty list:
annotations = []
This ignores annotation data returned by the server.
### Proposed Solution
Update the `fromJson` method to parse annotations dynamically using:
Annotation.fromJson
---
## 5. Mode Selector Visibility
**Files**
- `profiles_list.dart`
- `profile_view.dart`
### Problem
The **TW2 / TW3 / TW3C** mode selector is buried inside the profile view and lacks visibility.
Users cannot easily determine the currently active mode.
### Proposed Solution
Add a `getModeLabel` callback to display the currently selected mode as a subtitle in the **Change Mode** option.
---
# Acceptance Criteria
- Origin URL is dynamically retrieved
- ScaffoldMessenger crash is removed
- Timeout duration is reduced
- Task annotations are parsed correctly
- Current mode is visible in the profile UI
---
# Tests
Unit tests should verify:
- Annotation parsing in `TaskForC.fromJson`
- Exception handling in `completeTask`
- Timeout configuration regression
Contributor guide
Research direction
Start by reading origin.dart, complete.dart, manage_task_champion_creds_controller.dart, task.dart, profiles_list.dart, and profile_view.dart to map each requested change. Add or update the unit tests for TaskForC.fromJson, completeTask exception handling, and timeout configuration. Done means all five acceptance criteria pass and the listed regression tests cover the changes.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- dart, flutter
- Domain
- mobile
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Clearly specified
- Newbie friendliness
- 45/100