Skip to content

Terminal User Interface (TUI) Extension for CCF-Deadlines && Refactor for CLI Extension#1444

Merged
jacklightChen merged 8 commits intomainfrom
czc/optimize_260317
Mar 25, 2026
Merged

Terminal User Interface (TUI) Extension for CCF-Deadlines && Refactor for CLI Extension#1444
jacklightChen merged 8 commits intomainfrom
czc/optimize_260317

Conversation

@0x4f5da2
Copy link
Member

@0x4f5da2 0x4f5da2 commented Mar 20, 2026

Add Terminal User Interface (TUI) Extension for CCF-Deadlines

Summary

This PR introduces a new Terminal User Interface (TUI) extension for CCF-Deadlines, providing an interactive terminal-based interface for tracking conference deadlines with real-time countdowns, multi-rank filtering, favorites, and more.

Features

🎯 Core Features

  • Real-time Countdown: Live countdown timers that update every second with color-coded urgency indicators
  • Multi-Rank Display: Shows CCF, CORE, and THCPL rankings side-by-side
  • Favorites System:
    • Toggle favorites with f key
    • Favorites pinned to top of list
    • Persistent storage in ~/.ccfddl/favorites.json
  • Smart Filtering:
    • Category filters (10 research areas)
    • Rank filters (CCF A/B/C/N, CORE A*/A/B/C/N, THCPL A/B/N)
    • "Show Expired" toggle
    • Fuzzy search for conference titles
  • Dual Data Source:
    • Primary: Remote YAML from GitHub Pages
    • Fallback: Local YAML files when remote unavailable
  • Keyboard Navigation: Vim-style shortcuts (j/k, g/G, Enter, etc.)

⌨️ Keyboard Shortcuts

Key Action
j/↓ Navigate down
k/↑ Navigate up
g Go to top
G Go to bottom
Enter Open conference URL
f Toggle favorite
l Toggle language (EN/ZH)
r Refresh data
? Show help
q Quit

Technical Details

Architecture

  • Framework: Textual (Python TUI framework)
  • Structure:
    extensions/tui/
    ├── ccfddl_tui/
    │   ├── app.py              # Main application
    │   ├── main.py             # Entry point
    │   ├── data/
    │   │   └── data_service.py # Data loading & filtering
    │   ├── widgets/
    │   │   ├── countdown.py    # Countdown widget
    │   │   ├── conference_table.py  # Main table
    │   │   └── filters.py      # Filter sidebar
    │   └── utils/
    │       └── formatters.py   # Shared formatting utilities
    └── tests/                  # Comprehensive test suite
    

Key Components

  1. DataService: Handles loading from remote/local sources, filtering, sorting
  2. ConferenceTable: DataTable widget with real-time countdown updates
  3. FilterSidebar: Interactive filters with checkboxes and search
  4. CountdownWidget: Reusable countdown display component

Dependencies

  • textual >= 0.47.0
  • pyyaml
  • requests
  • python-dateutil

Testing

Test Coverage

  • Total Tests: 168
  • CLI Extension: 81 tests
  • TUI Extension: 168 tests
  • Python Scripts: 24 tests

Test Categories

  • Unit tests for all widgets
  • Integration tests for app workflow
  • Data service tests (loading, filtering, sorting)
  • Favorite functionality tests
  • Rank display tests

Files Added/Modified

New Files

  • extensions/tui/ - Complete TUI extension
  • .github/workflows/tests.yml - GitHub Actions for testing
  • .readme_assets/ccf_ddl_tui.png - TUI screenshot

Modified Files

  • README.md - Added TUI to Extensions section
  • .github/workflows/merge_check.yml - Added test job
  • extensions/cli/ccfddl/__main__.py - Fixed YAML parsing (control characters)

Usage

# Install
cd extensions/tui
pip install -e .

# Run
ccfddl-tui

# Or from project root
python -m ccfddl_tui.main

Screenshots

ccf_ddl_tui

Compatibility

  • Python 3.10+
  • macOS, Linux, Windows (terminal)
  • Reuses existing CLI models for data consistency

Related Issues

Fixes: None (new feature)

Checklist

  • Code follows project style guidelines
  • All tests pass (168 TUI tests, 81 CLI tests)
  • Documentation updated (README.md)
  • GitHub Actions workflow added
  • Screenshot added to readme_assets
  • No breaking changes to existing code
  • Local data fallback for offline usage
  • Keyboard shortcuts documented

Notes

The TUI reuses the existing CLI data models (ccfddl.models) to ensure consistency across all extensions. It also includes a local data fallback mechanism that loads from the conference/ directory when the remote URL is unavailable.

@mergify
Copy link
Contributor

mergify bot commented Mar 20, 2026

Welcome to ccf-deadlines!
We're delighted to have you onboard (p≧w≦q)

@mergify mergify bot added the updateconf update conference deadline label Mar 20, 2026
@mergify mergify bot requested a review from a team March 20, 2026 16:47
@jacklightChen jacklightChen marked this pull request as ready for review March 20, 2026 16:52
@jacklightChen
Copy link
Member

?

@0x4f5da2
Copy link
Member Author

?
My ai coding plan is going to get expired🤣

@jacklightChen jacklightChen changed the title [WIP] Terminal User Interface (TUI) Extension for CCF-Deadlines && Refactor for CLI Extension Terminal User Interface (TUI) Extension for CCF-Deadlines && Refactor for CLI Extension Mar 25, 2026
@jacklightChen jacklightChen merged commit d3d2eda into main Mar 25, 2026
8 checks passed
jacklightChen added a commit that referenced this pull request Mar 25, 2026
…Refactor for CLI Extension (#1444)"

This reverts commit d3d2eda.
@jacklightChen
Copy link
Member

jacklightChen commented Mar 25, 2026

@0x4f5da2 Check the deploy error #d3d2ed, and may use separate repo for this plugin = =

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

updateconf update conference deadline

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants