CCExtractor / CCExtractor/taskwarrior-flutter

TaskServer 3 (CCSync v3) Bugs and Improvements

オープン
#617 コメント 2 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
Dart
スター
244
フォーク
179
平均マージ
12時間 42分
マージ済み PR(30日)
2

説明

## 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

コントリビューションガイド

コントリビューションガイドを開く

調査の方向性

まず origin.dart、complete.dart、manage_task_champion_creds_controller.dart、task.dart、profiles_list.dart、profile_view.dart を読んで、要求された各変更を把握してください。TaskForC.fromJson、completeTask の例外処理、タイムアウト設定に関する単体テストを追加または更新してください。5 つすべての受け入れ基準を満たし、記載された回帰テストで変更が網羅されれば完了です。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
dart, flutter
領域
mobile
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
停滞
明瞭さ
明確に書かれている
初心者へのやさしさ
45/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。