Files
notedeck/crates/notedeck_columns
Claude 978ee1ec96 Fix all channel management issues and improve UX
This commit addresses all identified issues in channel management:

1. **Fix timeline cleanup on channel removal** (channels.rs:97-123)
   - remove_channel() now properly unsubscribes from timeline
   - Prevents memory leaks from orphaned timeline subscriptions
   - Ensures proper cleanup when deleting channels

2. **Add bounds checking on deserialization** (storage/channels.rs:138-158)
   - Validates selected index after loading channels from disk
   - Prevents out-of-bounds panics if saved state is corrupted
   - Handles edge case of empty channel lists gracefully

3. **Implement channel deletion UI** (channel_sidebar.rs:19-25, 273-287)
   - Added DeleteChannel action to sidebar
   - Right-click context menu shows "Delete Channel" option
   - Only allows deletion if more than one channel exists
   - Properly cleans up timeline and saves state after deletion

4. **Implement channel editing UI** (channel_dialog.rs:5-44, channel_sidebar.rs:19-25)
   - Added EditChannel action and editing_index field to dialog
   - open_for_edit() method pre-fills dialog with existing data
   - Dialog title changes to "Edit Channel" in edit mode
   - Button changes from "Create" to "Save" when editing
   - Context menu shows "Edit Channel" option

5. **Add channel editing logic** (channels.rs:99-132, app.rs:476-524)
   - edit_channel() method updates channel data
   - Unsubscribes from old timeline if hashtags changed
   - Re-subscribes to new timeline with updated hashtags
   - Properly updates router with new timeline kind

6. **Auto-select newly created channels** (channels.rs:93-97)
   - add_channel() now automatically selects the new channel
   - Improves UX by immediately showing the channel user just created
   - Eliminates confusion about which channel is active

7. **Optimize storage saves** (app.rs:1290-1296)
   - Removed automatic save on every channel selection
   - Channel selection state will be saved on app close instead
   - Prevents excessive disk I/O from rapid channel switching
   - Saves only on create, edit, and delete operations

All changes tested and build succeeds without errors.
2025-11-14 06:46:28 +00:00
..
2025-07-17 13:54:43 -07:00
2025-09-30 19:54:19 -04:00
2025-04-21 13:26:02 -07:00
2025-04-21 13:26:02 -07:00

NoteDeck Columns

A TweetDeck-style multi-column interface for Nostr built with Rust and egui.

Overview

NoteDeck Columns is a specialized UI component of the NoteDeck Nostr client that provides a TweetDeck-inspired multi-column layout for browsing Nostr content. It allows users to create customizable "decks" with multiple columns, each showing different types of Nostr content (home timeline, notifications, hashtags, profiles, etc.).

Features

  • Multi-column layout: View different Nostr content types side by side
  • Customizable decks: Create and customize multiple decks for different use cases
  • Column types:
    • Universe (global feed)
    • Contact lists (follows)
    • Profiles
    • Notifications
    • Hashtags
    • Threads
    • Search results
    • Algorithmic feeds (e.g., last notes per pubkey)
  • Interactions: Post, reply, quote, and zap notes
  • Media support: View and upload images
  • Multiple accounts: Switch between multiple Nostr accounts

Getting Started

NoteDeck Columns is part of the larger NoteDeck ecosystem. To use it:

  1. Clone the NoteDeck repository
  2. Build the project with Cargo
  3. Run NoteDeck and select the Columns interface

See the DEVELOPER.md file for detailed setup instructions.

Architecture

NoteDeck Columns is built using:

  • Rust: For performance and type safety
  • egui: For the UI rendering
  • nostrdb: For Nostr data storage and retrieval
  • enostr: For Nostr protocol communication

The codebase is organized around the concept of timelines, views, and decks, with a column-based UI architecture.

Contributing

Contributions are welcome! Please see DEVELOPER.md for information on how to set up your development environment and contribute to the project.

License

NoteDeck Columns is licensed under the GPL v3.