Commit Graph

31 Commits

Author SHA1 Message Date
ZacharyZcR
5b67fa748c FIX: Enhance video playback and implement smart aspect ratio window sizing
- Replace ReactPlayer with native HTML5 video for better MP4 support
- Add proper MIME type mapping for all video formats (mp4, webm, mkv, avi, mov, wmv, flv)
- Implement smart window sizing based on media dimensions
- Auto-adjust window size to match image/video aspect ratio with constraints
- Add media dimension detection for images (naturalWidth/Height) and videos (videoWidth/Height)
- Center windows automatically when resizing for media content
- Apply intelligent scaling with max viewport limits (90% width, 80% height)
- Preserve minimum window sizes and add padding for UI elements
- Enhanced error handling and debug logging for video playback

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-25 09:51:40 +08:00
ZacharyZcR
cc9ae3fcd3 FIX: Resolve keyboard shortcuts and enhance image preview with i18n support
- Fix keyboard shortcut conflicts in FileViewer.tsx (Ctrl+F, H, ?, Space, A)
- Add comprehensive i18n translations for keyboard shortcuts help panel
- Integrate react-photo-view for enhanced fullscreen image viewing
- Simplify image preview by removing complex toolbar and hover hints
- Add proper error handling and loading states for image display
- Update English and Chinese translation files with new keyboard shortcut terms

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-25 09:34:51 +08:00
ZacharyZcR
8e22e76166 FIX: Complete CodeMirror integration with native search, replace, and keyboard shortcuts
- Replace custom search/replace implementation with native CodeMirror extensions
- Add proper keyboard shortcut support: Ctrl+F, Ctrl+H, Ctrl+/, Ctrl+Space, etc.
- Fix browser shortcut conflicts by preventing defaults only when editor is focused
- Integrate autocompletion and comment toggle functionality
- Fix file name truncation in file manager grid to use text wrapping
- Add comprehensive keyboard shortcuts help panel for users
- Update i18n translations for editor buttons (Download, Replace, Replace All)
- Unify text and code file editing under single CodeMirror instance
- Add proper SSH HMAC algorithms for better compatibility

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-25 09:04:59 +08:00
ZacharyZcR
36ae41a4f1 FIX: Improve deleted file cleanup mechanism and prevent empty editor windows
Root Cause Analysis:
- Generic error handling in main-axios.ts was stripping fileNotFound data from 404 responses
- Windows were being created before error detection, showing empty editors with "File is empty"
- Error message translation was not properly detecting various file-not-found scenarios

Core Fixes:
1. **Preserve 404 Error Data:** Modified readSSHFile to preserve fileNotFound information
   - Create custom error object for 404 responses
   - Set isFileNotFound flag to bypass generic error handling
   - Maintain original response data for proper error detection

2. **Enhanced Error Detection:** Improved FileWindow error detection logic
   - Check for custom isFileNotFound flag
   - Detect multiple error message patterns: "File not found", "Resource not found"
   - Handle both backend-specific and generic error formats

3. **Prevent Empty Windows:** Auto-close window when file cleanup occurs
   - Call closeWindow(windowId) immediately after cleanup
   - Return early to prevent showing empty editor
   - Show only the cleanup notification toast

Behavior Changes:
- **Before:** Opens empty editor + shows "Server error occurred" + displays "File is empty"
- **After:** Shows "File removed from recent/pinned lists" + closes window immediately
- **Result:** Clean, user-friendly experience with automatic cleanup

Technical Details:
- Enhanced readSSHFile error handling for 404 status codes
- Improved error pattern matching for various "not found" scenarios
- Window lifecycle management during error states
- Preserved backward compatibility for other error types

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-25 07:53:41 +08:00
ZacharyZcR
fdd1218b03 FIX: Automatically cleanup deleted files from recent/pinned lists
File Cleanup Implementation:
- Detect file-not-found errors when opening files from recent/pinned lists
- Automatically remove missing files from both recent and pinned file lists
- Refresh sidebar to reflect updated lists immediately after cleanup
- Prevent error dialogs from appearing when files are successfully cleaned up

Backend Improvements:
- Enhanced SSH file manager to return proper 404 status for missing files
- Added fileNotFound flag in error responses for better error detection
- Improved error categorization for file access failures

Frontend Error Handling:
- Added onFileNotFound callback prop to FileWindow component
- Implemented handleFileNotFound function in FileManagerModern
- Enhanced error detection logic to catch various "file not found" scenarios
- Better error messages with internationalization support

Translation Additions:
- fileNotFoundAndRemoved: Notify user when file is cleaned up
- failedToLoadFile: Generic file loading error message
- serverErrorOccurred: Server error fallback message
- Chinese translations for all new error messages

Technical Details:
- Uses existing removeRecentFile and removePinnedFile API calls
- Triggers sidebar refresh via setSidebarRefreshTrigger
- Maintains backward compatibility with existing error handling
- Preserves error logging for debugging purposes

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-25 07:49:48 +08:00
ZacharyZcR
c780ad2f18 FIX: Complete internationalization for text and code editors
Missing i18n Fixes:
- Replace "Unknown size" with t("fileManager.unknownSize")
- Replace "File is empty" with t("fileManager.fileIsEmpty")
- Replace "Modified:" with t("fileManager.modified")
- Replace "Large File Warning" with t("fileManager.largeFileWarning")
- Replace file size warning message with t("fileManager.largeFileWarningDesc")

Credential Editor i18n:
- Replace "Invalid Key" with t("credentials.invalidKey")
- Replace "Detection Error" with t("credentials.detectionError")
- Replace "Unknown" with t("credentials.unknown")

Translation Additions:
- English: unknownSize, fileIsEmpty, modified, largeFileWarning, largeFileWarningDesc
- English: invalidKey, detectionError, unknown for credentials
- Chinese: corresponding translations for all new keys

Technical Improvements:
- Update formatFileSize function to accept translation function parameter
- Ensure proper translation interpolation for dynamic content

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-25 07:39:52 +08:00
ZacharyZcR
c7f86d5ac8 FIX: Enable scrollbars in CodeMirror editors and complete missing i18n
CodeMirror Scrollbar Fixes:
- Add EditorView.theme configurations with overflow: auto for .cm-scroller
- Configure scrollPastEnd: false in basicSetup for all CodeMirror instances
- Fix FileViewer, CredentialEditor, HostManagerEditor, and FileManagerFileEditor
- Ensure proper height: 100% styling for editor containers

i18n Completion:
- Add missing "movedItems" translation key for file move operations
- English: "Moved {{count}} items"
- Chinese: "已移动 {{count}} 个项目"

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-25 07:35:28 +08:00
ZacharyZcR
2006a0a089 FIX: Replace all text editors with unified CodeMirror interface
This commit enhances the user experience by standardizing all text editing
components to use CodeMirror, providing consistent functionality across the
entire application.

**Text Editor Unification**:
- Replaced all textarea elements with CodeMirror editors
- Unified syntax highlighting and line numbering across all text inputs
- Consistent oneDark theme implementation throughout the application

**Fixed Components**:
- FileViewer: Enhanced file editing with syntax highlighting for all file types
- CredentialEditor: Improved SSH key editing experience with code editor features
- HostManagerEditor: Better SSH private key input with proper formatting
- FileManagerGrid: Fixed new file/folder creation in empty directories

**Key Technical Improvements**:
- Fixed oneDark theme import path from @uiw/codemirror-themes to @codemirror/theme-one-dark
- Enhanced createIntent rendering logic to work properly in empty directories
- Added automatic createIntent cleanup when navigating between directories
- Configured consistent basicSetup options across all editors

**User Experience Enhancements**:
- Professional code editing interface for all text inputs
- Line numbers and syntax highlighting for better readability
- Consistent keyboard shortcuts and editing behavior
- Improved accessibility and user interaction patterns

Users now enjoy a unified, professional editing experience whether working with
code files, configuration files, or SSH credentials. The interface is consistent,
feature-rich, and optimized for developer workflows.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-24 07:52:29 +08:00
ZacharyZcR
ece6ec0892 FIX: Comprehensive file manager UI/UX improvements and bug fixes
- Fix missing i18n for terminal.terminalWithPath translation key
- Update keyboard shortcuts: remove Ctrl+T conflicts, change refresh to Ctrl+Y, rename shortcut to F6
- Remove click-to-rename functionality to prevent accidental renaming
- Fix drag preview z-index and positioning issues during file operations
- Remove false download trigger when dragging files to original position
- Fix 'Must be handling a user gesture' error in drag-to-desktop functionality
- Remove useless minimize button from file editor and diff viewer windows
- Improve context menu z-index hierarchy for better layering
- Add comprehensive drag state management and visual feedback

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-24 05:38:30 +08:00
ZacharyZcR
ff1f3829bc FIX: Resolve critical window resizing issues in file manager
Fixed window resizing functionality that was completely broken due to
coordinate system confusion and incorrect variable usage.

## Critical Issues Found:

### 1. Variable Type Confusion
**Problem**: windowStart was used for both positions AND dimensions
- handleResizeStart: set windowStart = {x: size.width, y: size.height} (dimensions)
- handleMouseMove: used windowStart as position coordinates (x, y)
- This caused windows to jump to incorrect positions during resize

### 2. Incorrect Delta Calculations
**Problem**: Resize deltas were applied incorrectly
- Left/top resizing used wrong baseline values
- Position updates didn't account for size changes properly
- No proper viewport boundary checking

### 3. Missing State Separation
**Problem**: Conflated drag start positions with resize start dimensions

## Technical Solution:

**Separated State Variables:**
```typescript
const [windowStart, setWindowStart] = useState({ x: 0, y: 0 });     // Position
const [sizeStart, setSizeStart] = useState({ width: 0, height: 0 }); // Dimensions
```

**Fixed Resize Logic:**
- windowStart: tracks initial position during resize
- sizeStart: tracks initial dimensions during resize
- Proper delta calculations for all resize directions
- Correct position updates for left/top edge resizing

**Improved Coordinate Handling:**
- Right/bottom: simple addition to initial size
- Left/top: size change + position compensation
- Proper viewport boundary constraints
- Consistent minimum size enforcement

## Resize Directions Now Work Correctly:
 Right edge: expands width rightward
 Left edge: expands width leftward + moves position
 Bottom edge: expands height downward
 Top edge: expands height upward + moves position
 All corner combinations work properly
 Minimum size constraints respected
 Viewport boundaries enforced

**User Experience:**
- No more window "jumping around" during resize
- Smooth, predictable resize behavior
- Proper cursor feedback during resize operations
- Windows stay within viewport bounds

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-24 04:56:18 +08:00
ZacharyZcR
aea00225d2 SECURITY: Fix authentication and file manager display issues
- Add JWT authentication middleware to file manager and metrics APIs
- Fix WebSocket authentication timing race conditions
- Resolve file manager grid view display issue by eliminating request ID complexity
- Fix FileViewer translation function undefined error
- Simplify SSH authentication flow and remove duplicate connection attempts
- Ensure consistent user authentication across all services

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-22 22:20:33 +08:00
ZacharyZcR
35145aeced Complete Chinese comment cleanup in File Manager components
- FileManagerModern.tsx: Translate all Chinese comments to English, replace hardcoded text with i18n
- TerminalWindow.tsx: Complete translation and add i18n support
- DiffWindow.tsx: Complete translation and add i18n support
- FileManagerOperations.tsx: Complete translation
- Fix missed comment in FileManagerGrid.tsx

All File Manager components now have clean English comments and proper internationalization.
Follow Linus principles: simple, direct, no unnecessary complexity.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-22 02:19:27 +08:00
ZacharyZcR
d693dc5a14 Translate Chinese comments to English in File Manager components
- Complete translation of FileWindow.tsx comments and hardcoded text
- Complete translation of DraggableWindow.tsx hardcoded text
- Complete translation of FileManagerSidebar.tsx comments
- Complete translation of FileManagerGrid.tsx comments and UI text
- Complete translation of DiffViewer.tsx hardcoded text with proper i18n
- Partial translation of FileManagerModern.tsx comments (major sections done)

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-22 02:07:08 +08:00
ZacharyZcR
1e6ab7b3a0 Fix file upload limits and UI performance issues
- Remove artificial 18MB file size restrictions across all layers
- Increase limits to industry standard: 5GB for file operations, 1GB for JSON
- Eliminate duplicate resize handlers causing UI instability
- Fix Terminal connection blank screen by removing 300ms delay
- Optimize clipboard state flow for copy/paste functionality
- Complete i18n implementation removing hardcoded strings
- Apply Linus principle: eliminate complexity, fix data structure issues

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-21 02:12:33 +08:00
LukeGus
8afd84d96d Cleanup files and improve file manager. 2025-09-18 00:32:56 -05:00
ZacharyZcR
948704055b 清理调试信息,保持代码整洁
🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-17 01:18:47 +08:00
ZacharyZcR
f70a2102db 实现可执行文件检测和运行功能:支持终端集成和右键菜单操作
主要更新:
- 后端添加可执行文件检测逻辑,支持脚本、二进制文件和权限检测
- 文件列表API返回executable字段标识可执行文件
- 右键菜单新增"打开终端"和"运行"功能
- 终端组件支持初始路径和自动执行命令
- 创建TerminalWindow组件提供完整窗口体验
- 运行功能通过终端执行,支持实时输出和交互

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-17 01:17:00 +08:00
ZacharyZcR
3f90faf1d0 重新设计diff功能:使用Monaco Editor实现专业级文件对比
新增功能:
- DiffViewer组件:基于Monaco Editor DiffEditor的专业代码对比
- DiffWindow组件:专用的diff对比窗口包装器
- 并排/内联视图切换功能
- 多语言语法高亮支持
- 智能文件类型检测
- 完整的工具栏(下载、刷新、视图切换、行号切换)

技术改进:
- 替代原来的两个独立文件窗口方案
- 使用Monaco Editor提供VS Code同级的对比体验
- 支持大文件错误处理和SSH连接自动重连
- 专业的差异高亮显示(新增/删除/修改)

依赖更新:
- 新增@monaco-editor/react依赖
2025-09-16 23:18:20 +08:00
ZacharyZcR
2ea5383ef0 Implement unified file editing for all non-media files
Major improvements:
- Remove separate view/edit modes - editing state can view content too
- Expand text editing support to ALL file types except media/binary files
- Add realistic undo functionality for copy/cut operations
- Implement moveSSHItem API for proper cross-directory file moves
- Add file existence checks to prevent copy failures
- Enhanced error logging with full command and path information

Key changes:
- FileWindow: Expand editable file types to exclude only media extensions
- FileViewer: Remove view mode toggle, direct editing interface
- Backend: Add moveItem API endpoint for cut operations
- Backend: Add file existence verification before copy operations
- Frontend: Complete undo system for copy (delete copied files) and cut (move back to original location)

File type handling:
- Media files (jpg, mp3, mp4, etc.) → Display only
- All other files → Direct text editing (js, py, txt, config files, unknown extensions)

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-16 22:53:54 +08:00
ZacharyZcR
bf166d602f 优化文件管理器视觉设计和安全性
核心改进:
- 统一图标色调:所有文件类型图标改为黑白配色,消除彩色差异
- 恢复原始主题:修复shadcn样式导致的过暗背景问题
- 增强大文件安全:后端10MB文件大小限制,防止内存溢出
- 优化警告样式:Large File Warning使用shadcn设计规范

技术细节:
- getFileIcon()全部使用text-muted-foreground统一色调
- 恢复bg-dark-bg/border-dark-border原始主题色彩
- readFile API增加stat文件大小检查和错误处理
- FileViewer警告组件使用destructive色彩体系

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-16 20:15:42 +08:00
ZacharyZcR
82f5f9afa9 Add missing SiXml import
- Add SiXml to import list to fix ReferenceError
- SiXml was being used in iconMap but not imported
- All XML files now properly display XML icon
2025-09-16 18:20:16 +08:00
ZacharyZcR
7bcc863270 Fix SiJava import error - replace with SiOracle
- Replace non-existent SiJava with SiOracle for Java files
- Oracle is the owner of Java, making it an appropriate icon choice
- All imported icons now exist and should work correctly
- Maintain red color scheme for Java files
2025-09-16 18:19:38 +08:00
ZacharyZcR
7bb09935a6 Fix icon import error and classify YAML as code files
- Replace SiCsharp with SiDotnet for C# files (correct icon name)
- Move yaml and yml extensions to codeExts array
- Remove separate yaml file type, treat as code files
- Simplify file type logic by removing yaml-specific conditions
- YAML files now get full CodeMirror editing experience with syntax highlighting
2025-09-16 18:17:50 +08:00
ZacharyZcR
560b47532c Add official programming language icons and YAML support
- Install react-icons library for official technology icons
- Create getLanguageIcon function with 25+ language-specific icons
- Add official brand colors for each programming language:
  - JavaScript/JSX (yellow), TypeScript/TSX (blue)
  - Python (blue), Java (red), Go (cyan), Rust (orange)
  - HTML5 (orange), CSS3 (blue), SCSS/Sass (pink)
  - JSON (yellow), YAML (red), SQL (blue), etc.
- Add dedicated YAML file type support with official YAML icon
- Support special files: Dockerfile, Makefile, Gemfile
- Ensure YAML files get CodeMirror syntax highlighting and editing
- Update shouldShowAsText logic to include YAML files
- Maintain consistent professional appearance across all file types
2025-09-16 18:15:14 +08:00
ZacharyZcR
5e2d463678 Add comprehensive code editing support with syntax highlighting
- Integrate CodeMirror for advanced code editing with syntax highlighting
- Support 20+ programming languages including JavaScript, TypeScript, Python, Java, Go, Rust, etc.
- Add JSON files to code file category for proper syntax highlighting
- Implement line numbers for both CodeMirror and search mode
- Add comprehensive editor features: code folding, auto-completion, bracket matching
- Maintain search functionality with line numbers in read-only mode
- Use dark theme to match project design system
- Ensure all code files are fully editable with professional IDE-like features
2025-09-16 18:10:28 +08:00
ZacharyZcR
978981dd6b Fix search highlighting scroll issue and improve color contrast
- Remove overlay-based highlighting that stayed in place during scroll
- Switch between read-only highlighted view and editable textarea based on search state
- Enhance color contrast: current match (red text + yellow bg), other matches (blue text + light blue bg)
- Use font-bold for better visibility of search results
- Ensure highlights follow text content during scrolling
2025-09-16 18:06:15 +08:00
ZacharyZcR
1d79fd721e Optimize search highlighting: change from background colors to text color changes
- Replace background highlighting with text color changes for better visibility
- Current match highlighted in orange, other matches in blue
- Add font-semibold for better distinction of search results
- Improve readability by avoiding color overlay on text
2025-09-16 18:03:31 +08:00
ZacharyZcR
f4f5e47e48 Refactor file window components to use shadcn design tokens
- Replace hardcoded colors with shadcn CSS variables in DraggableWindow
- Update FileViewer to use proper shadcn theme colors
- Switch from gray-* to muted/foreground/background tokens
- Improve dark mode compatibility and visual consistency
- Maintain all existing functionality with better theming support

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-16 17:46:34 +08:00
ZacharyZcR
0497ff139e Fix SSH connection issues and enable no-extension file editing
- Add SSH connection checking with auto-reconnection in FileWindow
- Fix missing sshHost parameter passing from FileManagerModern
- Enable editing for files without extensions (.bashrc, Dockerfile, etc.)
- Add proper error handling for SSH connection failures
- Fix onContentChange callback for real-time text editing

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-16 17:41:08 +08:00
ZacharyZcR
e364c20213 Add smart large file handling for unknown file types
Enhanced FileViewer to handle unknown file types intelligently:

⚠️ **Large File Warning System**:
- Files > 1MB show warning dialog before opening as text
- Files > 10MB are blocked for security (cannot open as text)
- User can choose: "Open as Text", "Download Instead", or "Cancel"
- Prevents browser crashes from massive files

📝 **Universal Text Fallback**:
- Unknown file types now default to text viewer for files ≤ 1MB
- Users can force-open larger files as text after warning
- Smart detection prevents opening binary files accidentally

🛡️ **Safety Features**:
- Hard 10MB limit prevents system crashes
- Clear file size display in warnings
- Performance impact warnings for 1MB+ files
- Graceful fallback to download option

🎯 **User Experience**:
- Unknown files automatically try text mode first
- Clear messaging about potential issues
- Multiple resolution options (text/download/cancel)
- Maintains safety while maximizing accessibility

This allows users to examine any file type as text when safe,
while protecting against performance issues and crashes.
2025-09-16 17:25:52 +08:00
ZacharyZcR
22ac7d8596 Implement draggable file windows - Windows Explorer style
Added comprehensive draggable window system with the following features:

🪟 **DraggableWindow Component**:
- Full drag and drop functionality with title bar dragging
- Window resizing from all edges and corners
- Maximize/minimize/close window controls
- Double-click title bar to maximize/restore
- Auto position adjustment to prevent off-screen windows
- Windows-style blue gradient title bar

📁 **FileViewer Component**:
- Multi-format file support (text, code, images, videos, audio)
- Syntax highlighting distinction for code files
- Editable text files with real-time content tracking
- File metadata display (size, modified date, permissions)
- Save and download functionality
- Unsaved changes indicator

🎯 **WindowManager System**:
- Multi-window support with proper z-index management
- Window factory pattern for dynamic component creation
- Focus management - clicking brings window to front
- Smart window positioning with auto-offset
- Memory leak prevention with proper cleanup

🔗 **FileWindow Integration**:
- SSH file loading with error handling
- Auto-detect editable file types
- Real-time file saving to remote server
- Download files as binary blobs
- Loading states and progress feedback

 **User Experience**:
- Double-click any file to open in draggable window
- Multiple files can be open simultaneously
- Windows behave like native Windows Explorer
- Smooth animations and transitions
- Responsive design that works on all screen sizes

This transforms the file manager from a basic browser into a full
desktop-class application with native OS window management behavior.
2025-09-16 17:22:21 +08:00