* fix(ssh): Fixed the logic for handling font paths
Correctly handles font filenames to avoid duplicate file extensions. Also optimized the logic for copying font files to ensure path accuracy.
Add an issue participant
* fix (Settings): Fixed the font clearing feature and added cache cleanup
On the SSH settings page, we fixed an issue where the font clearing feature failed to clear the cache and added logic to clear cached font files. Additionally, we changed the clearing operation to run asynchronously to ensure the page closes only after the operation is complete.
* fix: Check if the component has been mounted before popping the context
Avoid calling `context.pop()` when the component is unmounted, which causes an exception
* feat (Connection Statistics): Restored the server connection statistics feature
* perf(store): Optimize data storage performance and implement caching mechanisms
- Implement caching mechanisms in SnippetStore and ServerStore to reduce redundant loading
- Refactor ConnectionStatsStore to use indexes and optimize query performance
- Adopt a more efficient approach when cleaning up expired records
- Add a maximum record limit to prevent data bloat
* perf(store): Optimize data storage performance and add a caching mechanism
Add a caching mechanism to PrivateKeyStore to reduce redundant loading
Make the cleanup and index rebuilding of ConnectionStatsStore asynchronous
Add database compression and size statistics
Display database size in the interface and optimize compression operations
* fix (Cache): Fixed cache invalidation and join statistics issues
- Added a cache invalidation call to the reload method
- Fixed an error in the calculation of join statistics timestamps
- Optimized the cache index rebuild logic
- Added tooltips and click effects for join statistics
* refactor(connection_stats): Convert file operations from synchronous to asynchronous and optimize record cleanup logic
Convert the database size retrieval method from synchronous to asynchronous to prevent UI blocking
Optimize server record cleanup logic by directly deleting redundant records instead of rebuilding indexes
* fix(connection_stats): Fixed an initialization issue when the index database is empty
During Stores initialization, the code now checks whether `connectionStats.indexDbKeys` is empty; if so, it calls `rebuildIndexAndCompact` to rebuild and compact the database. Additionally, the implementation of the `_pruneExcessRecords` method has been optimized to use tuples instead of temporary lists, thereby improving performance. A `mounted` check has been added at the UI layer to prevent state update issues during asynchronous operations.
* fix(server): Improved error string matching logic to more accurately identify connection issues
Error strings are now uniformly converted to lowercase for comparison, and matching criteria have been expanded to cover a wider range of error scenarios, including timeouts, authentication failures, and network errors
* fix(PrivateKeyStore): Fixed an issue where the cache state was not updated when clearing the cache
When clearing the private key store, ensure that the internal cache state is updated simultaneously to maintain consistency
* refactor(store): Add close methods and clean up subscription logic
Add close methods to PrivateKeyStore, SnippetStore, and ServerStore to unsubscribe
Unify cache cleanup logic to prevent memory leaks
* fix(store): Add a cache update suppression mechanism to prevent circular updates
Add an _suppressWatch flag to multiple Store classes to suppress cache invalidation during internal operations
Add a _putWithoutInvalidatingCache method to prevent recursive watchers from being triggered during data updates
* refactor(store): Improve caching and state management using try-finally
In PrivateKeyStore, ServerStore, and SnippetStore:
1. Remove redundant close methods
2. Use try-finally to ensure the _suppressWatch state is reset correctly
3. Optimize cache invalidation logic
4. Standardize transaction handling for update operations
* refactor(store): Optimize data storage operations and fix potential issues
- Ensure the safety and consistency of list operations in ConnectionStatsStore
- Replace direct calls to `box.put` with the `set` method in SnippetStore and ServerStore
- Extract decoding logic for PrivateKeyStore into a separate method
- Add logic to update server-hopping relationships
* fix: Fixed an issue where asynchronous operations were not being waited on and optimized storage operations
Fixed several issues where asynchronous operations were not being waited on to ensure data consistency
Added the _suppressWatch control to ServerStore and PrivateKeyStore
Optimized index management in ConnectionStatsStore to maintain record order
Added a new GitHub participant
* fix: Fixed potential state issues and memory leaks in asynchronous operations
Fixed potential state issues that could occur on the server edit page after a delete operation; added a mounted check
Changed the statistics clearing operation in connection_stats to run asynchronously
Optimized asynchronous operations in PrivateKeyStore and fixed potential memory leaks
* refactor(store): Convert asynchronous methods to synchronous ones to simplify the code
Fixed an issue where asynchronous operations were not handled correctly on the connection statistics page
* fix: Added mounted check and error handling for connection logs
Added a mounted check in _ConnectionStatsPageState to prevent the state from being updated after the component is unmounted
Added a try-catch block for connection logs in ServerNotifier to catch and log potential storage exceptions
* chore: Update submodules and dependencies
Update the fl_lib and circle_chart submodules to the latest commit
Upgrade the hive_ce_generator dependency from 1.9.2 to 1.11.0
* build: Updated dependency versions
Updated fl_chart to 1.2.0, json_serializable to 6.13.0, and test to 1.29.0
Replaced flutter_secure_storage_macos with flutter_secure_storage_darwin
Removed the animations and screenshot dependencies, which are no longer in use
* chore: Update French i18n
* refactor(server): Move the SSH import and discovery features from the server edit page to the settings page
* feat (SSH Configuration): Added a feature to automatically import SSH configurations upon first launch
Checks for and prompts the user to import SSH configurations upon the first launch on the desktop
Optimized the SSH server import logic, adding duplicate detection and name conflict handling
Fixed an issue with mount status checks that could occur during the import process
* refactor (UI): Adjust the placement of the QR code scanning and SSH configuration import features
Move the QR code scanning feature from the server editing page to the settings page, and display different access points based on the platform
Optimize the SSH configuration import logic to ensure the status is updated correctly after the configuration is read for the first time
* refactor(ssh): Refactor server import logic and extract common methods
Extract server import logic into the `ServerDeduplication` class
Use the `importServersWithNotification` method consistently to handle imports
Remove duplicate `_importServers` and `_resolveServers` methods
Add checks for existing server IDs
* refactor(SSH): Optimized server import logic and fixed permission issues
- Moved the SSH configuration import logic from `edit.dart` to `actions.dart`
- Removed redundant checks for the `mounted` parameter
- Added handling for file permission exceptions
- Improved logic for resolving server name conflicts
* fix(ssh): Fixed an issue with message display during SSH configuration import
- Modified the format of the import success message to display the number of servers successfully imported
- Added a prompt for manual selection when permissions are denied
- Optimized the server deduplication logic to display an “already exists” message based on the original count
* fix(ssh): Fixed an issue with the count display when importing SSH configurations
Adjusted the server's deduplication logic to ensure the correct original count is used when displaying the number of imports
Removed unnecessary flag settings for the first read of SSH configurations
* fix: Fixed an issue where the “first read” flag was not updated when SSH configuration access was denied
When SSH configuration access is denied, set the “first read” flag to false to prevent repeated prompts
* fix(server): Optimized the logic for checking existing servers when importing SSH configurations
Moved the logic for checking existing servers to an earlier stage to avoid unnecessary parsing of SSH configurations
* feat (Editor): Add an option to set the editor font family
Add the `editorFontFamily` property to the settings storage and implement font family selection functionality on editor-related pages. Also, update all pages that use the editor settings to support the newly added font family option.
* refactor(editor): Optimize the logic for editor font settings
Standardize the method for retrieving font settings on the editor page to avoid redundant calls to the `fetch()` method. Extract the font retrieval logic into variables or anonymous functions to improve code readability and performance.
- Remove code related to Cupertino routing that is no longer in use
- Update the list of contributors on GitHub
- Update the version of the xterm submodule
* refactor(Settings page): Simplify the click handling logic of the cancel button
* fix(backup_service): Add a cancel button in the restore backup dialog
* refactor(Settings Page): Refactor the ordered list component and optimize state management
- Extract the logic for building list items into a separate method to improve maintainability
- Add animation effects to enhance the dragging experience
- Use PageStorageKey to maintain the scroll position
- Optimize the state management logic of the checkbox
- Add new contributors in github_id.dart
* fix: Add SafeArea to the settings page to prevent content from being obscured
Add SafeArea wrapping content in multiple settings pages to prevent content from being obscured by the navigation bar on certain devices, thereby enhancing user experience
* refactor: Extract file list retrieval method and optimize asynchronous loading of iOS settings page
Extract the `_getEntities` method from an inline function to a class member method to enhance code readability
Preload watch context and push token in the iOS settings page to avoid repeatedly creating Futures
* fix: Add a `key` attribute to the ChoiceChipX component to avoid rendering issues
* refactor(Settings page): Refactor the platform-related settings logic and merge the Android settings into the main page
Migrate the Android platform settings from a standalone page to the main settings page, and remove redundant Android settings page files
Adjust the platform setting logic, retaining only the special setting entry for the iOS platform
* build: Update fl_lib dependency to v1.0.363
* feat(Settings): Add persistent disable state for cards and virtual keys
Add persistent storage functionality for server detail cards and SSH virtual key disable status
Modify the logic of relevant pages to support the saving and restoration of disabled states
* refactor(setting): Simplify save logic and optimize file sorting performance
In the settings page, remove the unnecessary `enabledList` filtering and directly save the `_order` list
Optimize the sorting logic on the local file page by first retrieving the file status before proceeding with sorting
* fix: Optimize data filtering and backup service error handling on the settings page
Fix the data filtering logic in the settings page to only process key-value pairs with specific prefixes
Add error handling to the backup service, capture and display merge failure exceptions
* fix(Settings page): Fixed the issue where disabled items were not included in the order settings and asynchronously saved preference settings
Fix the issue where disabled items in the virtual keyboard and service details order settings are not included in the order list
Change the preference setting saving method to an asynchronous operation, and add a mounted check to prevent updating the state after the component is unmounted
* refactor: Optimize the reordering logic and remove redundant sorting methods
Narrow the scope of state updates in the reordering logic to only encompass the parts where data is actually modified
Remove the unused sorting methods in `_local.dart` to simplify the code
* refactor(view): Optimize the refresh logic of the local file page
Refactor the refresh method that directly calls setState into a unified _refresh method
Use the `_entitiesFuture` to cache the list of files to obtain results and avoid redundant calculations
* Update lib/view/page/storage/local.dart
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
---------
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* fix: Add SafeArea to the page to prevent content from being obscured
Add the SafeArea component to multiple pages to ensure that content is not obscured by the device status bar or navigation bar, thereby enhancing the user experience
* fix(ssh page): Fix the issue of the virtual keyboard area being displayed within the security zone
Wrap the virtual keyboard area within the SafeArea to prevent it from being obscured by the system UI, and remove any unnecessary bottom padding
* fix: Added logging to exception handling
Added detailed error logging to exception handling across multiple files, including exception information and stack traces, to facilitate troubleshooting.
* refactor(logging): Standardize logging output methods
Replace existing debugPrint and lprint with Loggers.app.warning to enhance logging consistency and maintainability.
* refactor: Remove redundant debug log prints
Clean up unnecessary log print statements in debug code
* feat(i18n): Added internationalization support for the logging feature
* feat: win compatibility
* fix
* fix: uptime parse
* opt.: linux uptime accuracy
* fix: windows temperature fetching
* opt.
* opt.: powershell exec
* refactor: address PR review feedback and improve code quality
### Major Improvements:
- **Refactored Windows status parsing**: Broke down large `_getWindowsStatus` method into 13 smaller, focused helper methods for better maintainability and readability
- **Extracted system detection logic**: Created dedicated `SystemDetector` helper class to separate OS detection concerns from ServerProvider
- **Improved concurrency handling**: Implemented proper synchronization for server updates using Future-based locks to prevent race conditions
### Bug Fixes:
- **Fixed CPU percentage parsing**: Removed incorrect '*100' multiplication in BSD CPU parsing (values were already percentages)
- **Enhanced memory parsing**: Added validation and error handling to BSD memory fallback parsing with proper logging
- **Improved uptime parsing**: Added support for multiple Windows date formats and robust error handling with validation
- **Fixed division by zero**: Added safety checks in Swap.usedPercent getter
### Code Quality Enhancements:
- **Added comprehensive documentation**: Documented Windows CPU counter limitations and approach
- **Strengthened error handling**: Added detailed logging and validation throughout parsing methods
- **Improved robustness**: Enhanced BSD CPU parsing with percentage validation and warnings
- **Better separation of concerns**: Each parsing method now has single responsibility
### Files Changed:
- `lib/data/helper/system_detector.dart` (new): System detection helper
- `lib/data/model/server/cpu.dart`: Fixed percentage parsing and added validation
- `lib/data/model/server/memory.dart`: Enhanced fallback parsing and division-by-zero protection
- `lib/data/model/server/server_status_update_req.dart`: Refactored into 13 focused parsing methods
- `lib/data/provider/server.dart`: Improved synchronization and extracted system detection
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* refactor: parse & shell fn struct
---------
Co-authored-by: Claude <noreply@anthropic.com>