Skip to content
CAI
Software that uses CAICheck a score

jiangtian616/JHenTai

58.7

Adequate · 23 September 2026

57.8k

lines of production code

Dart

primary language

5

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

JHenTai is a cross-platform Flutter application for browsing, downloading, and reading content from E-Hentai and ExHentai. It provides a unified interface across Android, iOS, Windows, macOS, and Linux, featuring a modular reader with multiple layout modes and a comprehensive download manager for galleries and archives. The system supports advanced features such as cloud synchronization, local blocking rules, AI super-resolution, and deep integration with external archiving services.

How it got here

2022 — Flutter 3 migration and multi-platform expansion

85 changes.

The project was initialized and migrated to Flutter 3.10+, enabling native support for Windows, Linux, and macOS while removing web capabilities. A comprehensive UI overhaul introduced Material 3 theming, tablet-aware split-pane layouts, and a modular reading engine with multiple layout options. The backend architecture was restructured with SQLite caching, service-oriented lifecycle management, and expanded settings for network, security, and download management.

2023–2026 — UI overhaul and database migration

28 changes.

This period focused on a comprehensive redesign of the user interface, introducing centralized settings pages for preferences, themes, and advanced configurations alongside new dashboard and gallery layouts for mobile and desktop. Concurrently, the backend was significantly modernized by migrating the database access layer to Drift DAOs with schema updates to improve concurrency and performance, while also refactoring download and search logic to support new features like multi-select operations and local blocking rules.

Features

The application now includes an About page within the Settings section, displaying the app name, version, build number, and author details. It provides clickable links to the project's GitHub repository, Telegram community, and Q&A wiki, which open in external applications.

lib/src/pages/setting/about · high confidence

The app now includes a dedicated Popular page that displays gallery items sorted by popularity. This new page is implemented as a standard BasePage with its own logic and state, reusing the existing base page infrastructure to provide a consistent user experience alongside other gallery list views.

lib/src/pages/popular · high confidence

Add Watched page with dedicated search configuration

A new Watched page has been introduced to display watched content, featuring its own state and logic classes. The page includes UI controls for jumping to pages and filtering, and it enforces a specific search configuration that resets keywords and tags upon saving, ensuring that watched content filtering is handled independently from other search contexts.

lib/src/pages/watched · high confidence

Add cloud configuration synchronization settings

A new Cloud Settings page has been added to the application, allowing users to check the status of the cloud service and access configuration synchronization features. This page serves as the entry point for managing cloud-based config backups, including uploading, downloading, importing, and deleting configuration versions via a dedicated sync interface.

lib/src/pages/setting/cloud · high confidence

Add custom theme color picker in settings

A new theme color setting page has been added, allowing users to customize the primary color for both light and dark modes. The interface includes a live preview of the selected theme and a color picker dialog that supports preset palettes and a custom color wheel, with options to reset to defaults.

_lib/src/pages/setting/style/theme\color · high confidence

Add dedicated proxy configuration page

Users can now configure network proxy settings through a new dedicated page that allows selection of proxy type (system, HTTP, SOCKS5, SOCKS4, or direct) and, when applicable, entry of the proxy address, username, and password. The interface dynamically enables or disables the address and credential fields based on the selected proxy type, and changes are saved immediately upon selection or via the save action in the app bar.

lib/src/pages/setting/network/proxy · high confidence

Add generic API response wrapper and image hash value object

The application now includes a generic JHResponse wrapper class for standardizing API responses with code, message, and data fields, along with a FetchImageHashesVO class to handle image hash lists. This enables consistent parsing of API responses and specific handling of image hash data.

_lib/src/model/jh\response · high confidence

Add local blocking rule configuration page

Users can now configure local blocking rules via a new dedicated page that allows adding, editing, and removing individual rules. Each rule consists of a target (e.g., gallery), an attribute (e.g., title), a pattern type, and a custom expression. The interface supports grouping rules and provides validation to ensure rules are complete and consistent before saving.

_lib/src/pages/setting/preference/block\_rule/add\_block\rule · high confidence

Add local blocking rule management page

A new settings page has been added for managing local blocking rules, allowing users to view, edit, and delete rules via a floating action button and context menus. The page supports two display modes—a flat list or a grouped list—controlled by a user preference that persists across sessions, and includes logic to sort and group rules by target, attribute, and pattern.

_lib/src/pages/setting/preference/block\rule · high confidence

Introduces the \LocalGalleryDownloadPageLogicMixin\ to manage the logic for the local gallery download page. This mixin handles file system navigation (root and subdirectories), manages the state for removing local galleries via a confirmation dialog, and controls the flow for opening galleries in the reader. It specifically supports resuming reading from a previously saved index record for local files and provides utilities for displaying file paths and refreshing the local gallery list.

lib/src/pages/download/mixin/local · high confidence

Add setting page for custom frame rate selection

Users can now adjust the display refresh rate via a new Advanced Settings page. The interface lists available frame rates (e.g., 60 Hz, 120 Hz) with their corresponding resolutions, displays the current active mode, and includes a warning about potential security implications when changing these system-level display settings.

_lib/src/pages/setting/advanced/frame\rate · high confidence

Add setting to customize mouse wheel scroll speed

A new settings page has been added that allows users to adjust the mouse wheel scroll speed. This feature provides a text input field where users can enter a numeric value, which is then saved to update the scrolling behavior, offering finer control over navigation on desktop platforms.

lib/src/pages/setting/mousewheel · high confidence

Added Archive Bot settings page with balance and check-in support

A new settings page for Archive Bot has been introduced, allowing users to configure their API key, view their current balance, and perform daily check-ins. The page integrates with the existing archive bot service to fetch balance data and handle check-in requests, providing visual feedback via loading indicators and snack notifications for success or failure states.

_lib/src/pages/setting/download/archive\bot · high confidence

Added Linux packaging assets for .deb and AppImage distributions

New configuration files have been added to the linux/assets directory to support building .deb packages and AppImages. This includes an AppImageBuilder manifest for x86\_64 architecture, Debian control files specifying the jhentai package and its dependency on libwebkit2gtk-4.1-0, post-installation scripts to create symlinks and update desktop databases, and a standard .desktop entry file for application integration.

linux/assets · high confidence

Added model classes for Archive Bot API responses

Introduced new data models to handle responses from the Archive Bot service, supporting both the existing 'EhArBot' and the new 'ArchiveAtHome' backends. The \ArchiveBotResponse\ class parses standard API status codes and messages, while specific Value Objects (\ArchiveResolveVO\, \BalanceVO\, \CheckInVO\) map JSON fields from both bot providers to a unified structure, enabling the app to fetch archive URLs, check GP balances, and process check-in rewards regardless of the underlying provider.

_lib/src/model/archive\_bot\response · high confidence

A new Performance Settings page has been added to the application, allowing users to configure the maximum number of galleries used for animations. This setting is exposed via a numeric input field with validation, enabling users to adjust this parameter directly within the app's settings interface.

lib/src/pages/setting/performance · high confidence

Archive download page logic and UI mixins introduced

The download page now includes dedicated logic and UI mixins for handling downloaded archives. This adds support for managing archive groups (changing, renaming, deleting), multi-select operations (select all, resume/pause, change group, delete, change parse source), and launching the reader for completed archives with proper progress tracking and super-resolution support.

lib/src/pages/download/mixin/archive · high confidence

Expanded language support with Korean, Russian, and Portuguese translations

The application now includes full localization files for Korean (ko\_KR), Russian (ru\_RU), and Brazilian Portuguese (pt\_BR), in addition to the existing Simplified Chinese (zh\_CN), Traditional Chinese (zh\_TW), and English (en\_US) support. The \locale\_text.dart\ configuration has been updated to register these new language codes, making the corresponding translation keys available to users who select these languages in their system settings.

lib/src/l18n · high confidence

Initial macOS application configuration and windowing setup

The macOS Runner target has been initialized with the standard Flutter macOS project structure. This includes the application delegate, main window controller, and menu bar interface. The app is configured with the bundle identifier 'top.jtmonster.jhentai' and name 'jhentai'. The windowing behavior is set to hide the window at launch and supports secure restorable state. Security entitlements are configured to allow sandboxed access to user-selected files, downloads, media assets, and network connections.

macos/Runner · high confidence

Initial macOS project configuration added

The macOS build configuration has been established, introducing the Xcode project structure (project.pbxproj), workspace settings, and build schemes required to compile and run the application on macOS. This change enables the macOS platform target for the Flutter application, allowing users to build and install the app on macOS systems.

macos/Runner.xcodeproj · high confidence

Introduce Mobile Layout V2 with configurable navigation and gesture controls

A new mobile layout (MobileLayoutPageV2) replaces the previous version, offering a redesigned navigation structure with a left drawer for content tabs (Home, Search, Popular, Ranklist, etc.) and a bottom navigation bar for primary sections (Home, Download, Settings). Users can now customize the drawer's gesture edge width and enable or disable the swipe gestures for opening the left menu and quick search. The layout supports hiding the bottom navigation bar and allows setting a default starting tab. Navigation behavior has been refined: selecting certain tabs like Search or Settings opens a new route page instead of switching internal views, while others switch within the current layout. The home tab supports double-tap to refresh, and the left drawer is scrollable with preserved scroll positions.

_lib/src/pages/layout/mobile\v2 · high confidence

Introduce dedicated desktop layout with resizable columns and left tab bar

A new desktop-specific layout has been added for devices with a logical width greater than 600px. This layout features a fixed left tab bar for navigation and a main content area split into two resizable columns (left and right) separated by a draggable divider. The implementation includes the \DesktopLayoutPage\ widget, a \DesktopHomePage\ for the left column, and the associated GetX logic and state classes to manage tab selection, resizing, and route navigation within this new structure.

lib/src/pages/layout/desktop · high confidence

The gallery download page now supports batch operations. Users can enter a multi-select mode to perform actions on multiple galleries at once, including resuming, pausing, re-downloading, changing groups, and deleting. This is implemented via new logic and UI mixins that handle the selection state and expose batch action buttons in the bottom app bar.

lib/src/pages/download/mixin/gallery · high confidence

Introduces new widget components and app lifecycle management

The widget layer now includes a new AppManager that handles app lifecycle events (such as background blur and security lock on resume) and platform brightness changes. Several new UI components have been added, including a CachedPageView for optimized page scrolling, a ContextMenuRegion for desktop context menus, and various dialog widgets for tag management, archive settings, and comments. Additionally, the app now supports customizing the auto-mode interval in the reading settings.

lib/src/widget · high confidence

Introduction of a reusable WebView page component

A new \WebviewPage\ widget has been added to the application, providing a standardized way to display web content within the app. This component accepts a URL, an optional title, and a set of cookies via navigation arguments, automatically injecting the cookies into the web view session. It also supports optional callbacks for page start and finish events, allowing parent screens to react to navigation state changes, and includes a loading indicator in the app bar to reflect the web view's status.

lib/src/pages/webview · high confidence

Linux build system initialized with new plugin registrations

The Linux build configuration has been established, introducing support for several desktop-specific capabilities through newly registered plugins. Users can now utilize webview windows, system pasteboard access, screen retrieval, smart authentication, URL launching, and window management on Linux, alongside SQLite support. This change adds the necessary CMake build files and generated plugin registrants to enable these features in the Linux desktop environment.

linux/flutter · high confidence

Linux desktop support with system title bar option

The application now includes native Linux desktop support via a GTK-based Flutter runner. This adds a new window component that respects the system's client-side decorations (CSD) when the GTK\_CSD environment variable is set to 1, providing a native title bar; otherwise, it falls back to a standard window title. The build system is configured to package the application as 'jhentai' with a default window size of 1280x720.

linux · high confidence

Model layer refactored with new data structures and expanded capabilities

The \lib/src/model\ directory has been significantly restructured to support new application features. The \Gallery\ model now uses a dedicated \GalleryUrl\ class and \GalleryTag\ objects instead of raw strings, and includes fields for expunged status and local blocking rules. New models have been introduced for \ComicInfo\ metadata generation, \CloudConfig\ synchronization, \GalleryStats\ rankings, \GalleryHistory\ tracking, and \TapZoneConfig\ for customizable reading page controls. The \GalleryComment\ model now supports vote status and last edit times, while \GalleryImage\ tracks download status and original image URLs. Additionally, the legacy \GalleryDetails\ model has been removed in favor of the more comprehensive \GalleryDetail\ and \DetailPageInfo\ structures.

lib/src/model · high confidence

New AI Super Resolution settings page

A new settings page has been added for configuring AI-based image super resolution. Users can now specify the directory path for super resolution models, select the model type (CUGAN, ESRGAN, or ESRGAN\_ANIME) with an option to download the model file, and choose the GPU ID (0-7) to be used for processing.

_lib/src/pages/setting/advanced/super\resolution · high confidence

A new Cookie page has been added to the account settings, allowing users to view, copy, and manage their site cookies. Users can copy individual cookies or a specific set of authentication cookies (ipb\_member\_id, ipb\_pass\_hash, and igneous) with a single tap. Additionally, the page includes a one-click refresh feature for the 'igneous' cookie, which updates the session token directly from the server.

lib/src/pages/setting/account/cookie · high confidence

New E-Hentai settings page with profile and quota management

A new E-Hentai settings page has been added, allowing users to switch between the EH and EX sites, manage multiple browser profiles via a dropdown selector, and view their image download quota and reset costs. The page also provides a direct link to the E-Hentai user configuration page and includes a toggle to redirect to the main EH site when viewing EX content.

lib/src/pages/setting/eh · high confidence

New Quick Search page with reorderable list and mouse drag support

A new QuickSearchPage has been introduced, displaying a list of saved quick search configurations that users can reorder via drag-and-drop. The page includes an action button to add new quick searches and allows tapping an entry to initiate a new search with that configuration. The implementation leverages GetBuilder for state management and enables mouse drag functionality on desktop devices, enhancing usability for users managing their search presets.

_lib/src/pages/search/quick\search · high confidence

New Ranklist page with time-based filtering

A new Ranklist page has been added, allowing users to view gallery rankings filtered by All Time, Year, Month, or Day. The page includes a dropdown menu in the app bar to switch between these time periods and integrates with the existing gallery list infrastructure to display the ranked content.

lib/src/pages/ranklist · high confidence

New Style Settings page for layout and list customization

A new Style Settings page has been added, allowing users to configure the application's visual appearance. Users can now select the theme mode (light, dark, or system), choose a theme color, and pick from various list styles including flat, flat without tags, list with tags, list without tags, and three waterfall flow variants (small, medium, big). For waterfall flow layouts, the number of columns can be manually set from 2 to 6 or left to auto. Additionally, users can customize the number of columns for grid download pages (for both groups and galleries) and detail pages, toggle moving the gallery cover to the right side, and select the overall layout mode.

lib/src/pages/setting/style · high confidence

New app lock, layout system, and sharing support

The app now includes a LockPage that supports both password and biometric authentication (including Windows Hello) to secure the application on launch or resume. A new HomePage acts as the core layout router, dynamically switching between Mobile V2, Tablet V2, and Desktop layouts based on screen width and user settings. Additionally, the app now supports opening via external sharing intents on Android and can detect gallery links in the clipboard to navigate directly to gallery details, with an option to disable this clipboard detection.

lib/src/pages · high confidence

New archive download list page with grouped view and batch controls

The download page for archives now uses a dedicated list view that organizes downloaded items into collapsible groups, displaying the count of galleries within each group. Users can switch to a grid layout, enter multi-select mode for batch operations, and resume or pause all download tasks directly from the app bar. The interface also supports searching downloaded galleries and allows long-press interactions on groups for manual sorting.

lib/src/pages/download/list/archive · high confidence

New centralized preference settings page

A new 'Preference Setting' page has been added to the application, consolidating various user configuration options into a single, organized list. This page allows users to manage language preferences, enable tag translation and search order optimization, set default tabs for app startup and downloads, configure swipe-back and drawer gestures, control the visibility of comments and gallery titles, manage default favorites and tag sets, and adjust desktop-specific options like full-screen launch. It also includes settings for hiding R18G images, displaying UTC time, and configuring local blocking rules.

lib/src/pages/setting/preference · high confidence

New centralized reading settings page

A new dedicated settings page (lib/src/pages/setting/read/setting\_read\_page.dart) has been introduced to consolidate and expose a wide range of reading configuration options. Users can now directly manage immersive mode, screen wake locks, custom brightness, thumbnail visibility, scroll bar display, status info, volume key page turning, page turn animations, double-tap and tap-drag zoom gestures, bottom menu visibility, tap zone styles, image size limits, third-party viewer paths (desktop), keyboard shortcuts, device-specific orientation read directions, webtoon auto-detection, notch optimization, image region width ratios, preload distances and page counts, first-page display in double-column mode, auto-mode styles, page turn modes, and image spacing.

lib/src/pages/setting/read · high confidence

The gallery section now includes new page implementations for both mobile and desktop views. The mobile dashboard (DashboardPage) displays a scrollable feed with ranklist and popular gallery sections, pull-to-refresh functionality, and filter options, while a simpler variant (SimpleDashboardPage) offers a basic layout with search and filter actions. Additionally, a new GalleryPage is introduced for desktop layouts, providing a base structure for gallery browsing with filter and scroll-to-top capabilities. These changes establish the UI foundation for the gallery experience across different device types.

lib/src/pages/gallery · high confidence

New dedicated comment page with full comment management capabilities

A new dedicated comment page (lib/src/pages/details/comment) has been introduced, allowing users to view all comments for a gallery in a separate view rather than just within the details page. This page supports adding new comments, updating existing ones, and voting on comments. It also includes features to block users directly from comments and displays comment scores and details. The implementation uses a new EHComment widget for rendering individual comments, supporting both in-detail-page and standalone page contexts, with options to show UTC time and handle local blocking rules.

lib/src/pages/details/comment · high confidence

New dedicated network settings page with granular control

A new \SettingNetworkPage\ has been introduced to centralize network configuration. Users can now explicitly enable domain fronting to bypass SNI blocking, configure proxy settings via a dedicated route, and adjust caching behaviors for page content (1 minute to 3 days) and images (1 to 30 days). Additionally, the page allows fine-tuning of network timeouts, with configurable connect and receive timeouts ranging from 0 to 60,000 milliseconds.

lib/src/pages/setting/network · high confidence

New dedicated thumbnails page with direct page jumping

A new ThumbnailsPage has been introduced in the details section, providing a dedicated scrollable grid view of gallery thumbnails. This change allows users to directly select and jump to specific pages to browse thumbnails via a new jump dialog, rather than relying on the previous navigation method. The implementation includes logic to retain gallery images in memory to prevent eviction during browsing and handles loading states with error retry capabilities.

lib/src/pages/details/thumbnails · high confidence

New detail page preview component for theme color customization

A new \DetailPreviewPage\ widget has been added to the theme color settings area, providing a dedicated preview interface for the gallery detail view. This component renders the full detail layout—including action buttons (read, download, favorite, rating, archive, similar, torrent, statistic), tags, comments, and thumbnails—allowing users to see how their selected theme colors apply to the detailed gallery information screen before applying them globally.

_lib/src/pages/setting/style/theme\_color/preview\page · high confidence

New download search page with tag translation and regex support

A new Download Search page has been added, allowing users to search through their locally downloaded galleries and archives. The search logic supports both simple text matching and regular expressions, and it automatically translates tags using the tag translation service for more accurate results. The UI displays search results for both galleries and archives, showing details like cover images, titles, tags, and publish times (with support for UTC/local time display based on user preferences).

_lib/src/pages/download\search · high confidence

New download settings page with customizable paths and groups

A new download settings page has been added, allowing users to configure the default download path (with a reset option on non-iOS platforms), set an extra gallery scan path, and define default groups for both gallery and archive downloads. The page also includes toggles for downloading original images by default, prioritizing recent gallery groups, and managing download concurrency and speed limits.

lib/src/pages/setting/download · high confidence

New grid layout for archive downloads with sorting and batch operations

The download page now supports a grid view for archives, introducing long-press drag-and-drop sorting for both individual galleries and groups, as well as batch selection and multi-select operations. Users can also switch between list and grid modes, resume or pause all download tasks, and search within their downloaded archives directly from this new interface.

lib/src/pages/download/grid/archive · high confidence

New grid layout for the download page with drag-and-drop sorting and batch operations

The download page now supports a grid view layout, allowing users to switch from the previous list mode via the menu. This new view introduces multi-select mode for batch operations (such as resuming, pausing, or deleting multiple tasks) and enables manual reordering of galleries and groups through long-press drag-and-drop, with the new order persisted to the database.

lib/src/pages/download/grid/gallery · high confidence

New grid-based download page with drag-and-drop reordering

The download page now features a new grid layout that supports reordering galleries and groups via drag-and-drop. Users can enter an edit mode to rearrange items, with the grid structure adapting to style settings for both group and gallery views. This change introduces a new mixin-based architecture for the grid download page logic, state, and services, enabling the new interactive sorting capabilities.

lib/src/pages/download/grid/mixin · high confidence

New horizontal continuous-scroll reading layout

The reader now includes a new horizontal list layout that displays images in a continuous, horizontally scrolling list. This layout supports customizable spacing between images, distinct preload distances for online and local reading modes, and integrates with existing settings for double-tap and tap-drag zooming. It also handles reading direction (left-to-right and right-to-left) and provides logic for page-turning, auto-scrolling, and progress synchronization within this specific horizontal view.

_lib/src/pages/read/layout/horizontal\_list, lib/src/pages/read/layout/horizontal\page · high confidence

New horizontal double-column reading layout with spread-page support

A new horizontal double-column layout has been added for the reading page, allowing users to view two images side-by-side in a horizontal scroll. This layout introduces support for 'spread pages' (images wider than they are tall), which are automatically detected and displayed as single full-width pages instead of being split. It also respects right-to-left reading directions, allows custom spacing between images, and supports separate double-tap and tap-drag zoom gestures. The layout distinguishes between online and local reading modes for image loading and caching, and persists spread-page recognition state to allow consistent re-reading.

_lib/src/pages/read/layout/horizontal\_double\column · high confidence

New keyboard shortcuts configuration page

A new settings page has been added to allow users to view and customize keyboard shortcuts for reading actions. The interface displays a list of actions with up to two configurable key bindings each, supporting capture modes for assigning new keys, clearing existing bindings, and resetting all shortcuts. Some slots are fixed (e.g., Esc for back, F11 for full-screen) and cannot be modified.

_lib/src/pages/setting/keyboard\shortcuts · high confidence

The download page now features a new list-based view (GalleryListDownloadPage) that organizes downloaded galleries into collapsible groups. Users can toggle group visibility, rename groups, and perform batch operations such as resuming or pausing all download tasks. The interface supports multi-select mode for bulk actions and includes a search function to filter downloaded galleries. Group display preferences are persisted across sessions.

lib/src/pages/download/list/gallery · high confidence

A new grid-based view for local galleries has been added to the download page, allowing users to browse their local library in a grid layout. This view supports long-press drag-and-drop to manually reorder both galleries and groups, and fixes a previous issue where local galleries could not be deleted in grid mode. The interface includes a help button for iOS/macOS users and allows switching back to the list view.

lib/src/pages/download/grid/local · high confidence

The local download section now uses a dedicated list page that lets users browse local gallery folders as a directory tree, including navigation to parent directories and subfolders. The interface supports switching to a grid layout via the app bar menu, and galleries can be managed through slide-out action panes and long-press context menus, enabling batch-style operations such as removal. A help button in the app bar provides platform-specific guidance for iOS and macOS, and the list integrates scroll-to-top behavior and loading-state indicators for a smoother browsing experience.

lib/src/pages/download/list/local · high confidence

New log list page in advanced settings

A new Log List page has been added under Advanced Settings, allowing users to view and select from available log files. The page displays a sorted list of log files found in the application's log directory, and tapping a file navigates the user to the detailed log view.

lib/src/pages/setting/advanced/loglist · high confidence

New log viewer with copy and share capabilities

A new LogPage has been added to the advanced settings section, allowing users to view individual log files. This page includes action buttons to copy the log content to the clipboard or share the log file directly, with the share action hidden on desktop platforms.

lib/src/pages/setting/advanced/loglist/log · high confidence

New mixin infrastructure for scroll, window, and animation logic

This change introduces a suite of new mixins in the \lib/src/mixin\ directory to centralize and standardize core UI behaviors. \Scroll2TopLogicMixin\ and \Scroll2TopPageMixin\ implement the 'scroll to top' floating action button, including logic to hide it when scrolling down and expose it when scrolling up, controlled by user preferences. \DoubleTapToRefreshLogicMixin\ adds support for double-tapping the bottom area of a page to trigger a pull-to-refresh action, mirroring desktop behavior. \WindowWidgetMixin\ provides a unified wrapper for desktop window management, handling title bars, maximize/minimize/close buttons, and full-screen toggling across Windows, Linux, and macOS. Additional mixins include \AnimationLogicMixin\ for managing \AnimationController\ lifecycles, \ScrollStatusListener\ for tracking scroll state, \LoginRequiredMixin\ for enforcing authentication checks, and \UpdateGlobalGalleryStatusLogicMixin\ for synchronizing gallery status across various list pages.

lib/src/mixin · high confidence

New mobile V2 search page layout

A new mobile V2 search page implementation has been introduced, providing a distinct UI and logic layer for mobile search interactions. This new page supports configurable search behavior inheritance (inherit all, inherit partially, or none) via preference settings, allows customization of the quick search drawer's gesture edge width, and integrates with the new mobile V2 layout system. It includes specific handling for search result counts, suggestion/history display, and direct navigation from gallery links.

_lib/src/pages/search/mobile\v2 · high confidence

New page list style settings page

A new settings page has been added that allows users to customize the display mode (such as flat, list, or waterfall flow) for various sections of the app, including home, search, popular, ranklist, favorite, watched, and history. The available options are dynamically shown based on the current device layout (desktop, mobile, or tablet).

_lib/src/pages/setting/style/page\_list\style · high confidence

New security settings page with app password and resume authentication

A new security settings page has been added, allowing users to configure several security options. Users can now enable an app-specific password lock, which triggers a dialog for password creation when activated. The page also supports enabling biometric authentication and requires re-authentication when resuming the app from the background (on mobile devices). Additionally, Android users can opt to automatically create a .nomedia file to hide images from the system album, and all users can toggle a blur effect for the app background.

lib/src/pages/setting/security · high confidence

New unified settings page with dedicated mouse wheel configuration

The application now features a newly created settings page that consolidates configuration options into a single, scrollable list. Users can access specific settings categories including account, style, reading, preferences, network, download, performance, security, and about. Notably, a new 'Mouse Wheel' setting entry has been added, allowing users to customize the mouse wheel scrolling speed, which aligns with the desktop layout enhancements mentioned in the commit history.

lib/src/pages/setting · high confidence

New utility extensions for error handling, UI, and data manipulation

This change introduces a suite of new Dart extension methods in the \lib/src/extension\ directory to standardize common operations across the app. For error handling, \DioExceptionExtension\ provides a consistent way to extract error messages from network exceptions. UI components gain \WidgetExtension\ methods to easily apply fade animations, center content, apply specific list tile themes for settings pages, and enable mouse drag scrolling or keyboard/mouse-button back navigation (Esc/back button). State management is improved with \GetLogicExtension\ and \StateExtension\ to safely update controllers and widget states only when they are still mounted. Finally, data manipulation is streamlined with \ListExtension\ for joining elements, partitioning lists, and safe additions, \StringExtension\ for word-breaking to prevent layout issues, and \DirectoryExtension\ for copying directory contents with logging.

lib/src/extension · high confidence

New vertical list reading layout with customizable image spacing and zoom

A new vertical list layout has been added to the reading page, allowing users to read content in a continuous vertical scroll. This layout supports customizable spacing between images, adjustable image region width ratios, and specific optimizations for mobile notches. It also introduces flexible zooming options, including double-tap to zoom and tap-and-drag to zoom, which can be enabled separately in settings, along with Ctrl+mouse wheel zoom support on desktop.

_lib/src/pages/read/layout/vertical\list · high confidence

Project initialization with build scripts and documentation

The repository has been initialized with core project files, including a CLAUDE.md guide for development, Apache 2.0 LICENSE, and localized READMEs (English, Chinese, Korean). New build automation scripts have been added for generating Android APKs, iOS IPAs, macOS DMGs and PKGs, and Windows/Linux packages. Additionally, a built-in blocked user list (built\_in\_blocked\_user.json) is now included to enforce default comment rules, and Flutter analysis options have been tightened with new linting rules.

(repo-wide) · high confidence

Support for private site access and new external service integrations

The application now supports accessing the private ExHentai site alongside the public E-Hentai, with URLs and API endpoints dynamically switching based on the user's site setting in EH settings. New constants have been added to integrate with external services: Archive Bot and Archive-at-Home for gallery archiving, and JHenTai (JH) for specific API interactions requiring authentication headers. Additionally, the locale configuration has been expanded to include Dutch and Vietnamese languages, and the language selection map has been reorganized to support these new locales.

lib/src/consts · high confidence

A new settings page allows users to manually add or remove extra directories for local gallery scanning. This feature uses a file picker to select directories and validates permissions before updating the scan configuration, enabling broader control over which local folders are indexed.

_lib/src/pages/setting/download/extra\_gallery\_scan\path · high confidence

Windows Flutter build configuration and plugin registration

The Windows build system now includes the standard Flutter CMake configuration and automatically registers a set of native plugins for the desktop build. This enables support for device hardware features (battery, screen brightness, screen retrieval), system integration (URL launching, window management, pasteboard), authentication (local auth, smart auth), and data sharing (share plus, SQLite libraries) on Windows.

windows/flutter · high confidence

Windows desktop application runner implementation

The Windows runner now includes the native C++ entry point and window management layer required to host the Flutter application on desktop. This adds the \main.cpp\ entry point, a \Win32Window\ class for high-DPI aware window creation and message handling, and a \FlutterWindow\ class to initialize the Flutter engine and register plugins. The build configuration (CMakeLists.txt) and resource files (version info, DPI manifest) are also included to produce the final executable.

windows/runner · high confidence

Removals

Removal of legacy home navigation view components

The legacy \navigation\_view\ directory has been removed, deleting the \GallerysView\ (with its \ExtendedNestedScrollView\-based tabbed gallery list and logic), the \DownloadView\, the \SettingView\, and the associated state management classes. This cleanup eliminates the previous implementation of the home page's gallery browsing and settings interfaces, which were likely superseded by a newer navigation structure elsewhere in the application.

_lib/src/pages/home/navigation\view · high confidence

Removal of legacy home page navigation structure

The \HomePage\ widget and its associated GetX state management logic (\HomePageLogic\, \HomePageState\) have been removed from the application. This change eliminates the previous implementation of the bottom navigation bar, which managed switching between the gallery, download, and setting views, as well as the specific scroll-to-top and double-tap-to-refresh behaviors tied to that navigation controller.

lib/src/pages/home · high confidence

Removal of web application entry points

The web entry point files, specifically index.html and manifest.json, have been deleted from the project. This removes the HTML shell and PWA configuration that previously allowed the application to be served and installed as a web app, effectively disabling the web platform support for this project.

web · high confidence

Removed legacy detail-page dialogs

The \favorite\_dialog.dart\ and \rating\_dialog.dart\ widgets in the details page widget directory have been deleted, along with the directory's README. This removes the previous inline implementations for selecting favorite tags and submitting gallery ratings from this location.

lib/src/pages/details/widget · high confidence

Architecture

Refactored base page architecture with new and legacy pagination logic

The base page implementation has been restructured to improve code reuse and support different pagination strategies. A new \BasePage\ widget and its associated logic/state classes now provide a unified foundation for list-based pages, handling common UI elements like app bars, pull-to-refresh, and scroll-to-top behaviors. Additionally, a legacy \OldBasePageLogic\ and \OldBasePageState\ have been introduced to maintain support for older EHentai search rules that rely on explicit page indices rather than next/previous GIDs, ensuring compatibility while the new standard pagination is adopted.

lib/src/pages/base · high confidence

Settings logic is restructured into dedicated, modular configuration files

The monolithic settings logic has been refactored into distinct, dedicated files for each configuration domain, including archive bot, download, EH site, keyboard shortcuts, mouse, my tags, network, performance, preference, reading, and security settings. This change organizes the application's configuration state and persistence logic into separate modules, improving maintainability and separation of concerns for each specific feature area.

lib/src/setting · high confidence

Behavioural changes

The Account Settings page has been refactored to improve usability and structure. Users will now see their display nickname (falling back to username) instead of just the username when logged in. The inline 'Copy Cookie' button has been removed in favor of a dedicated 'Show Cookie' list item that navigates to a new Cookie page. The logout flow has also been updated to use a custom dialog and asynchronous request handling, replacing the previous synchronous dialog and direct logout call.

lib/src/pages/setting/account · high confidence

Added ProGuard rule for DefaultLifecycleObserver

A new ProGuard configuration file (proguard-rules.pro) has been added to the Android app module. It includes a rule to preserve the androidx.lifecycle.DefaultLifecycleObserver class, ensuring that this lifecycle observer is not stripped or obfuscated during the release build process.

android/app · high confidence

Advanced settings page restructured with new logging, cache, and data management controls

The Advanced Settings page has been completely refactored from a static list into a stateful widget, introducing granular controls for logging (enable verbose logging, view/clear logs with size indicators), cache management (clear image and network/page caches with size indicators), and data portability (import/export data). New platform-specific options include Android app link verification and refresh rate settings, while desktop-specific features like super resolution are now accessible via navigation. The UI now uses a consistent list tile theme and includes loading states for asynchronous operations like cache size calculation.

lib/src/pages/setting/advanced · high confidence

Android Keystore and Firebase Configuration Setup

The Android build configuration now includes a sample keystore properties file (key.properties.sample) to guide developers in setting up signing credentials, and the .gitignore file has been updated to exclude Firebase-specific configuration files (google-services.json and firebase\_app\_id\_file.json) from version control, ensuring secure handling of sensitive build and service data.

android · high confidence

Android app now supports volume key navigation, deep linking, and adaptive icons

The Android app has been rewritten in Kotlin to intercept hardware volume keys, allowing users to turn pages in the reader using the device's volume up/down buttons. It now supports deep linking, meaning clicking an E-Hentai or ExHentai gallery/link in a browser or sharing a link from another app will open the app directly. The app also features adaptive icons with monochrome support, improved display cutout handling for notched screens, and expanded permissions for fingerprint authentication and external storage access.

android/app/src · high confidence

App initialization and startup flow restructured

The application startup process has been refactored to use a service-oriented lifecycle. Instead of a single initialization function, the app now manages a list of services (such as network requests, settings, and download engines) that are initialized in a topologically sorted order before the UI launches. The main entry point now supports desktop-specific webview windows and configures the system UI overlay styles. Additionally, the app now respects user preferences for swipe-back gestures and can redirect users to a lock screen if password or biometric authentication is enabled.

lib/src · high confidence

Customizable tap zone layout and actions

Users can now configure the reading interface's tap zone by selecting between 'Classic' and 'Vertical' presets and adjusting the relative width and height ratios of the grid columns and rows. Additionally, each of the nine tap zones can be assigned a specific action via a dialog, allowing for personalized navigation and interaction controls within the reader.

_lib/src/pages/setting/read/tap\zone · high confidence

Database schema migration to v2 tables with new fields and indexes

The local database schema has been updated to support new features and performance improvements. New 'v2' table definitions are introduced for downloaded galleries and archives (GalleryDownloaded, ArchiveDownloaded) and super-resolution info (SuperResolutionInfo), which include a new \sanitizedTitle\ column to ensure consistent file paths and additional indexes for faster tag and time-based searches. The schema also adds new tables for managing block rules, Dio request caching, and local configuration, while retaining 'Old' table definitions to facilitate data migration from the previous schema version.

lib/src/database/table · high confidence

Database schema upgraded to version 25 with new image URL tracking

The local database schema has been bumped to version 25, introducing a new \originalImageUrl\ column to the \image\ table to distinguish between regular and original image URLs. This change supports the app's ability to download original images while preserving the standard URL, with runtime fallbacks ensuring compatibility for existing records. The migration logic also handles previous schema transitions up to version 24, ensuring data integrity during upgrades.

lib/src/database · high confidence

Desktop search page rewritten with multi-tab support

The desktop search interface has been completely rewritten to support multiple concurrent search tabs, allowing users to open, switch, and delete separate search contexts within a single page. This change introduces a new tabbed UI architecture for the desktop layout, including logic for managing tab state, search configuration inheritance, and scroll-to-top behavior specific to the desktop experience.

lib/src/pages/search/desktop · high confidence

Download page now supports multi-select mode

Users can now enter a multi-select mode in the download page to select and manage multiple items at once. This change introduces the underlying logic and UI components (including a bottom app bar for actions) that enable selecting multiple download entries, toggling individual items, and clearing selections, laying the groundwork for batch operations on the download list.

lib/src/pages/download/mixin/basic · high confidence

Favorites page now supports changing sort order

The Favorites page has been refactored to allow users to change the sort order of their saved galleries. A new sort icon has been added to the app bar, which opens a dialog to select the desired sorting criteria. When a new sort order is selected, the page clears the current list, resets pagination, and reloads the galleries using the new sorting configuration.

lib/src/pages/favorite · high confidence

The gallery detail page has been refactored to allow multiple instances to exist in the navigation stack at the same time, enabling users to open details from various entry points (such as comments) without losing their current context. This change introduces a new \DetailsPageArgument\ for passing data, updates the underlying state and logic classes to manage instance lifecycles and tags, and adds a new dedicated \GalleryImagePage\ to handle image-specific navigation and redirection.

lib/src/pages/details · high confidence

The gallery download logic has been restructured into a dedicated service module, introducing a new path resolution system that intelligently restores legacy gallery metadata by matching on-disk directory names to prevent broken file links. The service now includes an upgrade migrator that copies existing image bytes and super-resolution data from old gallery versions to new ones based on image hashes, significantly speeding up re-downloads. Additionally, an exception matcher handles specific E-Hentai error pages (such as GP limits or invalid tokens) to automatically pause or re-parse downloads, and a new retainer mixin ensures image lists remain resident in memory for synchronous UI consumption.

_lib/src/service/gallery\download · high confidence

The history page has been updated to allow users to remove specific gallery entries rather than only clearing the entire history at once. Users can now long-press or secondary-tap a gallery card in the list to open a context menu with a 'Delete' option, which removes that single record from the database and updates the view immediately. A global delete button remains available in the app bar for clearing all history.

lib/src/pages/history · high confidence

Introduces tablet-aware routing and expands navigation structure

The routing system now supports a tablet layout where pages can be assigned to specific screen areas (left, right, or full-screen) via the new EHPage wrapper. This enables multi-pane navigation, such as displaying a gallery list on the left and details on the right. The route definitions have been significantly expanded to include many new pages (e.g., dashboard, popular, ranklist, history, download, various settings) and updated imports, while the router observer was adjusted to correctly report route disposal for GetX controllers.

lib/src/routes · high confidence

Introduction of centralized configuration and namespace enums

The application now uses dedicated enum classes to manage settings and data structures. A new \ConfigEnum\ centralizes all application settings (such as download, network, and UI preferences) and configuration keys, replacing scattered string literals. \CloudConfigTypeEnum\ defines the specific data types supported for cloud synchronization (e.g., search history, block rules). Additionally, \EHNamespace\ provides a structured definition for search namespaces (like artist, character, location) with their descriptions and abbreviations, improving consistency in search and filtering logic.

lib/src/enum · high confidence

Major backend service architecture overhaul and new feature services

The application's service layer has been significantly restructured, introducing a new lifecycle-based initialization pattern (JHLifeCircleBean) and several new capabilities. A new AppUpdateService manages configuration migrations across 13 versions, handling legacy data updates. Archive downloads are now handled by a dedicated ArchiveDownloadService with multi-isolate support, pause/resume functionality, and automatic ComicInfo.xml generation. Local gallery scanning is now customizable via a new LocalGalleryService that supports extra scan paths and nested folder reading. A new BuiltInBlockedUserService automatically fetches and applies a remote list of blocked users for comment filtering. Cloud synchronization is enabled via CloudConfigService for syncing history, block rules, and search settings. Additionally, a new FrameRateService allows Android users to manually select display refresh rates, and history records are now stored in a database with pagination support.

lib/src/service · high confidence

Major refactoring of the utility layer and parser logic

The \lib/src/utils\ directory has been significantly restructured, introducing a comprehensive suite of new utility classes for archive extraction, byte formatting, color conversion, cookie handling, file operations, and routing logic. Concurrently, the \eh\_spider\_parser.dart\ file has been completely rewritten to support multiple gallery list layouts (Minimal, Extended, Compact, Thumbnail) and new data models, while the legacy \log.dart\ implementation was removed in favor of a new logging service.

lib/src/utils · high confidence

Migrate database access layer to Drift DAOs with concurrency and performance improvements

The database access layer in \lib/src/database/dao\ has been rewritten to use the Drift ORM, introducing dedicated DAOs for galleries, archives, tags, history, and images. This change adds compare-and-swap (CAS) guards to gallery and image status updates to prevent race conditions during concurrent pause/resume operations, and optimizes startup performance by skipping image row counts for fully downloaded galleries. It also introduces batch operations for history and tag counts to reduce database round-trips, and adds support for local blocking rules, Dio caching, and super-resolution info management.

lib/src/database/dao · high confidence

The network layer in lib/src/network has been significantly restructured to improve reliability and performance. A new EHCacheManager now persists HTTP responses to a local SQLite database, replacing the previous in-memory or file-based approaches, with configurable expiration policies. Cookie handling has been rewritten in EHCookieManager to store cookies directly in local configuration rather than relying on the cookie\_jar package, ensuring persistence across app updates and sessions. Additionally, a RoundRobinIpProvider enables domain fronting by rotating IP addresses for specific hosts, and a new EHTimeoutTranslator provides localized, user-friendly error messages for connection and receive timeouts.

lib/src/network · high confidence

New base layout architecture for the reading page

The reading page now uses a new \BaseLayout\ and \BaseLayoutLogic\ foundation, introducing a unified context menu system for online images that provides platform-specific actions (desktop right-click menu vs. mobile bottom sheet) for reloading, copying, saving (including original/resampled), and copying the E-Hentai page URL. This refactor also integrates scroll bar visibility settings, separates double-tap and tap-drag zoom gesture listeners for independent configuration, and establishes the core image loading and parsing pipeline for online mode.

lib/src/pages/read/layout/base · high confidence

New tablet layout with resizable split-pane navigation

The tablet interface now uses a new layout (TabletLayoutPageV2) that displays a horizontal split-screen with a resizable divider between the left and right columns. Users can adjust the width of each column, and the application saves the preferred split ratio. The left column supports swipe-back gestures based on user preferences, while the right column disables swipe-back to prevent accidental navigation in the main content area.

_lib/src/pages/layout/tablet\v2 · high confidence

Read page rewritten with modular layouts and enhanced interaction controls

The read page has been completely refactored to support multiple reading layouts (vertical list, horizontal list, horizontal page, and horizontal double column) via a new modular architecture. This change introduces comprehensive interaction controls, including support for keyboard shortcuts, mouse wheel page turning, volume key page turning, and customizable tap zones for navigation. The UI now features an immersive mode, orientation-specific read directions, and a new overlay for tap zone guidance. Under the hood, the implementation switches from a legacy list view to \ScrollablePositionedList\ for smoother scrolling and integrates a \ReadPageLogic\ state manager to handle complex state for online, downloaded, archive, and local reading modes, including super resolution and battery/time status indicators.

lib/src/pages/read · high confidence

The download page has been restructured to support three distinct content categories: Downloads, Archives, and Local galleries, selectable via a segmented control. Users can now switch between list and grid display modes, with the default view mode and selected category persisting across sessions. The interface includes animated transitions for group indicators and supports mouse drag interactions on desktop platforms.

lib/src/pages/download · high confidence

Redesigned login interface with tabbed navigation and webview support

The login page has been completely rewritten to use a Material 3 design with a tabbed interface, replacing the previous toggle-based layout. Users can now switch between Password, Cookie, and Web login modes via tabs. The Cookie tab has been enhanced to support granular input for ipb\_member\_id, ipb\_pass\_hash, and igneous cookies, along with automatic clipboard detection. Additionally, a new Web login tab allows users to authenticate via an embedded webview, improving compatibility and handling for desktop platforms.

lib/src/pages/setting/account/login · high confidence

Refined exception handling for downloads and parsing errors

The application now uses specialized exception classes to provide more precise error feedback during image downloads and metadata parsing. A new EHImageException distinguishes between specific image loading issues such as blank images, server errors, and rate limits, while EHParseException and EHSiteException allow the app to handle parsing failures and site-specific errors (like Cloudflare blocks or bans) with options to pause all download tasks. This replaces the previous generic EHException, enabling better user guidance when encountering network or content restrictions.

lib/src/exception · high confidence

Search page refactored with new logic and state mixins

The search page's internal architecture has been restructured by introducing dedicated mixin files for logic, state, and arguments. This change introduces support for parsing and navigating directly to gallery detail or image pages from the search bar, enables file-based image search, and adds controls for search history translation and body type toggling (galleries vs. suggestions/history).

lib/src/pages/search/mixin · high confidence

Single image page now supports slide-out navigation

The single image page has been rewritten to use ExtendedImageSlidePage, enabling a slide-out gesture to return to the previous screen. This replaces the previous Scaffold-based layout with a BackButton, integrating the image view into a slideable page context that respects the app's background color configuration.

_lib/src/pages/single\image · high confidence

Tag Sets management now syncs with E-Hentai My Tags and supports custom colors

The Tag Sets settings page has been refactored to fetch and manage tags directly from E-Hentai's My Tags API instead of relying solely on local data. This change introduces the ability to switch between multiple tag sets, search within the current set, and customize the default background color for each tag set. The UI now reflects the current tag set's name and color, and updates to tag colors or set selections are persisted to the remote service.

lib/src/pages/setting/eh/tagsets · high confidence

UI configuration refactored to Material 3 with custom theme support

The application's UI configuration has been restructured to adopt Material 3 design principles. The previous hardcoded light and dark themes in \theme\_config.dart\ have been replaced with a dynamic \theme\ function that generates themes based on a seed color and brightness, enabling custom theme colors. This change also standardizes interactive elements (buttons, tabs, switches, etc.) to use a clickable mouse cursor on desktop platforms. Additionally, scroll behavior configurations and gallery category/tag color mappings have been consolidated into a new \ui\_config.dart\ file, while the old \global\_config.dart\ has been removed.

lib/src/config · high confidence

Updated Xcode scheme for Flutter 15.1 and Release-mode debugging

The iOS build scheme has been upgraded to target Xcode 15.1 (LastUpgradeVersion 1510). Debugging and profiling actions now default to the Release build configuration instead of Debug/Profile, and GPU validation mode is enabled during launch to assist with graphics debugging. A pre-build shell script step has been added to prepare the Flutter framework, and a custom LLDB init file is specified to improve the debugging experience for Flutter applications.

ios/Runner.xcodeproj/xcshareddata · high confidence

Updated macOS Flutter plugin registration

The macOS build now includes a regenerated plugin registry that registers a broader set of native plugins, including desktop\_webview\_window, pasteboard, screen\_brightness\_macos, and window\_manager. This ensures that features relying on these plugins, such as webview-based login, pasteboard access, screen brightness control, and window management, function correctly on macOS.

macos/Flutter · high confidence

iOS app configuration and initialization updates

The iOS app configuration has been updated to support Face ID authentication (with usage descriptions), enable file sharing and in-place document opening, and allow querying HTTP/HTTPS schemes. The app display name was changed to 'JHenTai', and the application delegate was refactored to use the modern @main entry point and implement FlutterImplicitEngineDelegate for plugin registration. Additionally, scene-based lifecycle support was added to Info.plist to align with modern iOS requirements.

ios/Runner · high confidence

iOS build configuration updated for CocoaPods and minimum OS version

The iOS build configuration has been updated to support CocoaPods integration and adjust deployment targets. The minimum supported iOS version has been removed from AppFrameworkInfo.plist, allowing the project to rely on the version specified in the Xcode project settings. Additionally, the Debug and Release xcconfig files now conditionally include the corresponding Pods configuration files, and the workspace has been updated to reference the Pods project, enabling proper dependency management for third-party libraries.

ios/Flutter · high confidence

iOS project updated to support CocoaPods and Swift Package Manager integration

The iOS build configuration has been upgraded to include CocoaPods support (adding Pods framework, xcconfig files, and build phases for embedding and copying resources) and Swift Package Manager integration (adding the FlutterGeneratedPluginSwiftPackage reference and build phase). The project file format version was also bumped from 50 to 54, and the Xcode upgrade check was updated to version 15.10.

ios/Runner.xcodeproj · high confidence

Test coverage

Added tests for download path resolution, settings, and tap zone configuration

Added new test coverage for the download path resolver to verify legacy gallery and archive title restoration logic, including 85-character and 80-character truncation rules and fallback behaviors for non-standard directories. Added tests for download settings to confirm that disabling recent gallery group prioritization correctly clears preferred groups. Added tests for tap zone configuration to ensure out-of-range width and height ratios are normalized to valid values and that JSON serialization round-trips preserve the normalized state. Removed a placeholder network request test file.

test · high confidence

Dependencies

Migrate to Flutter 3.10+ and modernize Android/iOS build configurations

The project has been upgraded to support Dart 3 and Flutter 3.10+, requiring a significant overhaul of the native build configurations. On Android, the build system has migrated to the new Gradle plugin management DSL, upgraded to Java 17 and Kotlin 2.2.20, and now targets Android SDK 36 with explicit keystore signing for release builds. On iOS and macOS, the CocoaPods setup has been standardized with new Podfiles and lock files, and the iOS minimum deployment target is set to 13.0. Additionally, the Dart dependency graph has been refreshed, updating core packages like \dio\, \extended\_image\, and \permission\_handler\ to their latest versions and switching several plugins to specific git repositories to incorporate custom fixes.

(dependencies) · high confidence

Updated Gradle wrapper to version 8.14

The Android build system now uses Gradle 8.14 instead of 6.7. This upgrade ensures compatibility with newer Android toolchains and build plugins, potentially improving build performance and stability for the application.

android/gradle · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.

Score

  • CAI 51 → 59 (+7.6)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 93 → 87 (-6.3)
  • Architecture 84 → 92 (+8.2)
  • Maturity 61 → 67 (+5.4)
  • Readiness 39 → 49 (+10.4)
  • Security 47 → 54 (+7.0)
  • Domain Modelling 100 → 100 (+0.0)

Resolved (31)

  • Boundary-crossing change coupling: en_US.dart ↔ preference_setting.dart (lib/src/l18n/en_US.dart)
  • Boundary-crossing change coupling: en_US.dart ↔ read_setting.dart (lib/src/l18n/en_US.dart)
  • Boundary-crossing change coupling: en_US.dart ↔ setting_read_page.dart (lib/src/l18n/en_US.dart)
  • Boundary-crossing change coupling: pt_BR.dart ↔ preference_setting.dart (lib/src/l18n/pt_BR.dart)
  • Boundary-crossing change coupling: zh_CN.dart ↔ archive_bot_request.dart (lib/src/l18n/zh_CN.dart)
  • Boundary-crossing change coupling: zh_CN.dart ↔ preference_setting.dart (lib/src/l18n/zh_CN.dart)
  • Boundary-crossing change coupling: zh_CN.dart ↔ read_setting.dart (lib/src/l18n/zh_CN.dart)
  • Boundary-crossing change coupling: zh_CN.dart ↔ setting_read_page.dart (lib/src/l18n/zh_CN.dart)
  • Boundary-crossing change coupling: zh_TW.dart ↔ preference_setting.dart (lib/src/l18n/zh_TW.dart)
  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • FileTooLong: service/gallery_download_service.dart (lib/src/service/gallery_download_service.dart)
  • Further sole-owners (lower concentration)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • …and 11 more

New (350)

  • AppDb.migration (cognitive 62) (lib/src/database/database.dart)
  • AppDb.migration (cyclomatic 33) (lib/src/database/database.dart)
  • ArchiveDownloadPageLogicMixin.showBottomSheet (cognitive 19) (lib/src/pages/download/mixin/archive/archive_download_page_logic_mixin.dart)
  • ArchiveDownloadPageLogicMixin.showBottomSheet (cyclomatic 17) (lib/src/pages/download/mixin/archive/archive_download_page_logic_mixin.dart)
  • ArchiveDownloadService._check410Or404Reason (cognitive 16) (lib/src/service/archive_download_service.dart)
  • ArchiveDownloadService._doDownloadArchiveViaMultiIsolate (cognitive 28) (lib/src/service/archive_download_service.dart)
  • ArchiveDownloadService._getDownloadPageUrl (cognitive 16) (lib/src/service/archive_download_service.dart)
  • ArchiveDownloadService._getDownloadUrl (cognitive 42) (lib/src/service/archive_download_service.dart)
  • ArchiveDownloadService._getDownloadUrl (cyclomatic 23) (lib/src/service/archive_download_service.dart)
  • ArchiveDownloadService.restoreTasks (cognitive 22) (lib/src/service/archive_download_service.dart)
  • BaseLayoutLogic.saveOriginalOnlineImage (cognitive 25) (lib/src/pages/read/layout/base/base_layout_logic.dart)
  • Boundary-crossing change coupling: detail_preview_page.dart ↔ eh_spider_parser.dart (lib/src/pages/setting/style/theme_color/preview_page/detail_preview_page.dart)
  • Boundary-crossing change coupling: details_page.dart ↔ eh_gallery_torrents_dialog.dart (lib/src/pages/details/details_page.dart)
  • Boundary-crossing change coupling: eh_comment.dart ↔ eh_comment_dialog.dart (lib/src/pages/details/comment/eh_comment.dart)
  • Boundary-crossing change coupling: gallery_image.dart ↔ eh_request.dart (lib/src/model/gallery_image.dart)
  • Boundary-crossing change coupling: zh_CN.dart ↔ routes.dart (lib/src/l18n/zh_CN.dart)
  • CI installs an unverified third-party binary (.github/workflows/build_publish.yml)
  • Change coupling clique: base_layout_logic.dart, horizontal_double_column_layout.dart, horizontal_list_layout.dart, vertical_list_layout.dart (lib/src/pages/read/layout/base/base_layout_logic.dart)
  • Change coupling: archive_download_page_logic_mixin.dart ↔ gallery_download_page_logic_mixin.dart (lib/src/pages/download/mixin/archive/archive_download_page_logic_mixin.dart)
  • Change coupling: archive_grid_download_page.dart ↔ gallery_grid_download_page.dart (lib/src/pages/download/grid/archive/archive_grid_download_page.dart)
  • …and 330 more

Changes since last survey

  • 82 commits — 72 feature/other, 10 fixes

By area

  • lib/src — 60 commits
  • (repo) — 8 commits
  • (root) — 8 commits
  • altsource/AltSource.json — 3 commits
  • .github/workflows — 2 commits
  • ios/Runner.xcodeproj — 1 commit

Notable commits

  • fix: Fix reparse logic for download
  • fix: Merge pull request #822 from sanxi33/fix/downloaded-gallery-detail-performance
  • fix: Merge pull request #824 from snownico0722/fix/legacy-metadata-restore-823
  • fix: fix album permission
  • fix: fix album permission
  • fix: fix album permission
  • fix: fix album permission
  • fix: fix album permission
  • fix: fix archive restore
  • fix: fix: restore and persist legacy gallery metadata
  • change: Add local title blocking to selection menu
  • change: EHImageException
  • change: GalleryDownloadService
  • change: GalleryDownloadService
  • change: GalleryDownloadService
  • change: GalleryDownloadService
  • change: GalleryDownloadService
  • change: GalleryDownloadService
  • change: GalleryDownloadService
  • change: GalleryDownloadService
  • …and 62 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

jiangtian616/JHenTai was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 23 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 6e29f27735d9f334dac6ee25eeb60b5bed5bdde2 — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-955b9cee9818.