哔咔漫画, PicACG comic PC client(Windows, Linux, MacOS)
This report summarizes scanner evidence for tonquer/picacg-qt, a Python project with 5,297 GitHub stars. SynthScan examined 68,490 lines of code across 300 source files, recording 2374 pattern matches distributed across 12 syntactic categories. The legacy adjusted pattern signal is 35.4 (High pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 242 finding(s).
Are imports declared and package/API names verified? 1838 finding(s).
Are wrappers, guards, and repeated structures necessary? 368 finding(s).
Which changes need focused human review? 2374 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 2374 distinct pattern matches across 12 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/start.py | 11 | CODE | |
| LOW | src/start.py | 50 | CODE | |
| LOW | src/start.py | 54 | CODE | |
| LOW | src/qt_owner.py | 1 | CODE | |
| LOW | src/qt_owner.py | 9 | CODE | |
| LOW | src/qt_owner.py | 12 | CODE | |
| LOW | src/qt_owner.py | 13 | CODE | |
| LOW | src/qt_owner.py | 16 | CODE | |
| LOW | src/qt_owner.py | 18 | CODE | |
| LOW | src/qt_owner.py | 21 | CODE | |
| LOW | src/qt_owner.py | 24 | CODE | |
| LOW | src/qt_owner.py | 27 | CODE | |
| LOW | src/qt_owner.py | 29 | CODE | |
| LOW | src/qt_owner.py | 31 | CODE | |
| LOW | src/qt_owner.py | 41 | CODE | |
| LOW | src/qt_owner.py | 44 | CODE | |
| LOW | src/qt_owner.py | 52 | CODE | |
| LOW | src/qt_owner.py | 53 | CODE | |
| LOW | src/qt_owner.py | 54 | CODE | |
| LOW | src/qt_owner.py | 55 | CODE | |
| LOW | src/qt_error.py | 1 | CODE | |
| LOW | src/interface/ui_game_info.py | 11 | CODE | |
| LOW | src/interface/ui_game_info.py | 11 | CODE | |
| LOW | src/interface/ui_game_info.py | 11 | CODE | |
| LOW | src/interface/ui_game_info.py | 11 | CODE | |
| LOW | src/interface/ui_game_info.py | 11 | CODE | |
| LOW | src/interface/ui_game_info.py | 11 | CODE | |
| LOW | src/interface/ui_game_info.py | 11 | CODE | |
| LOW | src/interface/ui_game_info.py | 11 | CODE | |
| LOW | src/interface/ui_game_info.py | 14 | CODE | |
| LOW | src/interface/ui_game_info.py | 14 | CODE | |
| LOW | src/interface/ui_game_info.py | 14 | CODE | |
| LOW | src/interface/ui_game_info.py | 14 | CODE | |
| LOW | src/interface/ui_game_info.py | 14 | CODE | |
| LOW | src/interface/ui_game_info.py | 14 | CODE | |
| LOW | src/interface/ui_game_info.py | 14 | CODE | |
| LOW | src/interface/ui_game_info.py | 14 | CODE | |
| LOW | src/interface/ui_game_info.py | 14 | CODE | |
| LOW | src/interface/ui_game_info.py | 14 | CODE | |
| LOW | src/interface/ui_game_info.py | 14 | CODE | |
| LOW | src/interface/ui_game_info.py | 14 | CODE | |
| LOW | src/interface/ui_game_info.py | 14 | CODE | |
| LOW | src/interface/ui_game_info.py | 14 | CODE | |
| LOW | src/interface/ui_game_info.py | 18 | CODE | |
| LOW | src/interface/ui_game_info.py | 18 | CODE | |
| LOW | src/interface/ui_game_info.py | 18 | CODE | |
| LOW | src/interface/ui_game_info.py | 24 | CODE | |
| LOW | src/interface/ui_main_windows.py | 11 | CODE | |
| LOW | src/interface/ui_main_windows.py | 11 | CODE | |
| LOW | src/interface/ui_main_windows.py | 11 | CODE | |
| LOW | src/interface/ui_main_windows.py | 11 | CODE | |
| LOW | src/interface/ui_main_windows.py | 11 | CODE | |
| LOW | src/interface/ui_main_windows.py | 11 | CODE | |
| LOW | src/interface/ui_main_windows.py | 11 | CODE | |
| LOW | src/interface/ui_main_windows.py | 11 | CODE | |
| LOW | src/interface/ui_main_windows.py | 11 | CODE | |
| LOW | src/interface/ui_main_windows.py | 14 | CODE | |
| LOW | src/interface/ui_main_windows.py | 14 | CODE | |
| LOW | src/interface/ui_main_windows.py | 14 | CODE | |
| LOW | src/interface/ui_main_windows.py | 14 | CODE | |
| 1775 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/start.py | 32 | except Exception as es: | CODE |
| LOW | src/start.py | 46 | except Exception as es: | CODE |
| LOW | src/start.py | 70 | except Exception as es: | CODE |
| LOW | src/start.py | 105 | except Exception as es: | CODE |
| MEDIUM | src/qt_owner.py | 499 | def SetFont(): | CODE |
| LOW | src/qt_owner.py | 536 | except Exception as es: | CODE |
| LOW | src/tools/user.py | 133 | except Exception as es: | CODE |
| LOW | src/tools/user.py | 157 | except Exception as es: | CODE |
| LOW | src/tools/user.py | 188 | except Exception as es: | CODE |
| LOW | src/tools/user.py | 210 | except Exception as es: | CODE |
| MEDIUM | src/tools/user.py | 113 | def LoginBack(self, backData): | CODE |
| MEDIUM | src/tools/user.py | 144 | def UpdateUserInfoBack(self, backData): | CODE |
| MEDIUM | src/tools/user.py | 171 | def RegisterBack(self, backData): | CODE |
| MEDIUM | src/tools/user.py | 192 | def UpdateFavoritesBack(self, backData): | CODE |
| LOW | src/tools/log.py | 100 | except Exception: | CODE |
| LOW | src/tools/book.py | 102 | except Exception as es: | CODE |
| LOW | src/tools/book.py | 122 | except Exception as es: | CODE |
| LOW | src/tools/book.py | 214 | except Exception as es: | CODE |
| LOW | src/tools/book.py | 281 | except Exception as es: | CODE |
| MEDIUM | src/tools/tool.py | 188 | def ParseFromData(desc, src): | CODE |
| MEDIUM | src/tools/tool.py | 326 | def GetAnimationFormat(data): | CODE |
| MEDIUM | src/tools/tool.py | 379 | def GetCanUseData(data): | CODE |
| MEDIUM | src/tools/tool.py | 472 | def LoadCachePicture(filePath): | CODE |
| MEDIUM | src/tools/tool.py | 522 | def IsHaveFile(filePath): | CODE |
| LOW | src/tools/tool.py | 196 | except Exception as es: | CODE |
| LOW | src/tools/tool.py | 338 | except Exception as es: | CODE |
| LOW | src/tools/tool.py | 350 | except Exception as es: | CODE |
| LOW | src/tools/tool.py | 374 | except Exception as es: | CODE |
| LOW | src/tools/tool.py | 383 | except Exception as es: | CODE |
| LOW | src/tools/tool.py | 402 | except Exception as es: | CODE |
| LOW | src/tools/tool.py | 496 | except Exception as es: | CODE |
| LOW | src/tools/tool.py | 527 | except Exception as es: | CODE |
| LOW | src/tools/tool.py | 627 | except Exception as es: | CODE |
| LOW | src/tools/tool.py | 776 | except Exception: | CODE |
| LOW | src/config/global_config.py | 204 | except Exception as es: | CODE |
| LOW | src/config/global_config.py | 217 | except Exception as es: | CODE |
| MEDIUM | src/config/global_config.py | 190 | def LoadSetting(): | CODE |
| LOW | src/config/setting.py | 57 | except Exception as es: | CODE |
| LOW | src/component/widget/main_widget.py | 58 | except Exception as es: | CODE |
| LOW | src/component/widget/comment_widget.py | 119 | except Exception as es: | CODE |
| LOW | src/component/widget/comment_widget.py | 141 | except Exception as es: | CODE |
| LOW | src/component/widget/comment_widget.py | 188 | except Exception as es: | CODE |
| LOW | src/component/widget/comment_widget.py | 215 | except Exception as es: | CODE |
| MEDIUM | src/component/widget/comment_widget.py | 131 | def JumpPage(self): | CODE |
| MEDIUM | src/component/widget/comment_widget.py | 156 | def GetCommnetBack(self, raw): | CODE |
| MEDIUM | src/component/widget/comment_widget.py | 200 | def SendCommentBack(self, raw): | CODE |
| LOW | src/component/widget/comment_item_widget.py | 113 | except Exception as es: | CODE |
| MEDIUM | src/component/widget/comment_item_widget.py | 109 | def KillComment(self): | CODE |
| LOW | src/component/label/msg_label.py | 167 | except Exception as ex: | CODE |
| MEDIUM | src/component/label/msg_label.py | 143 | def OpenPicture(self, path="."): | CODE |
| LOW | src/component/list/base_list_widget.py | 94 | except Exception: | CODE |
| MEDIUM | src/server/server.py | 306 | def _SendAttempt(self, task, index): | CODE |
| MEDIUM | src/server/server.py | 476 | def _Download(self, task, index, session): | CODE |
| LOW | src/server/server.py | 186 | except Exception as es: | CODE |
| LOW | src/server/server.py | 200 | except Exception as es: | CODE |
| LOW | src/server/server.py | 244 | except Exception as es: | CODE |
| LOW | src/server/server.py | 296 | except Exception as es: | CODE |
| LOW | src/server/server.py | 358 | except Exception as es: | CODE |
| LOW | src/server/server.py | 514 | except Exception as es: | CODE |
| LOW | src/server/server.py | 523 | except Exception as es: | CODE |
| 171 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | src/component/widget/qframelesswindow/utils/__init__.py | 0 | resize window parameters ---------- window: qwidget window globalpos: qpoint the global point of mouse release event | STRING |
| HIGH | …component/widget/qframelesswindow/utils/win32_utils.py | 0 | resize window parameters ---------- window: qwidget window globalpos: qpoint the global point of mouse release event | STRING |
| HIGH | …c/component/widget/qframelesswindow/utils/mac_utils.py | 0 | resize window parameters ---------- window: qwidget window globalpos: qpoint the global point of mouse release event | STRING |
| HIGH | src/component/widget/qframelesswindow/utils/__init__.py | 0 | resize window parameters ---------- window: qwidget window globalpos: qpoint the global point of mouse release event edg | STRING |
| HIGH | …component/widget/qframelesswindow/utils/win32_utils.py | 0 | resize window parameters ---------- window: qwidget window globalpos: qpoint the global point of mouse release event edg | STRING |
| HIGH | …component/widget/qframelesswindow/utils/linux_utils.py | 0 | resize window parameters ---------- window: qwidget window globalpos: qpoint the global point of mouse release event edg | STRING |
| HIGH | …c/component/widget/qframelesswindow/utils/mac_utils.py | 0 | resize window parameters ---------- window: qwidget window globalpos: qpoint the global point of mouse release event edg | STRING |
| HIGH | src/component/widget/qframelesswindow/mac/__init__.py | 0 | set custom title bar parameters ---------- titlebar: titlebar title bar | STRING |
| HIGH | src/component/widget/qframelesswindow/linux/__init__.py | 0 | set custom title bar parameters ---------- titlebar: titlebar title bar | STRING |
| HIGH | …/component/widget/qframelesswindow/windows/__init__.py | 0 | set custom title bar parameters ---------- titlebar: titlebar title bar | STRING |
| HIGH | …component/widget/qframelesswindow/mac/window_effect.py | 0 | add the mica effect to the window (win11 only) parameters ---------- hwnd: int or `sip.voidptr` window handle isdarkmode | STRING |
| HIGH | …mponent/widget/qframelesswindow/linux/window_effect.py | 0 | add the mica effect to the window (win11 only) parameters ---------- hwnd: int or `sip.voidptr` window handle isdarkmode | STRING |
| HIGH | …onent/widget/qframelesswindow/windows/window_effect.py | 0 | add the mica effect to the window (win11 only) parameters ---------- hwnd: int or `sip.voidptr` window handle isdarkmode | STRING |
| HIGH | …component/widget/qframelesswindow/mac/window_effect.py | 0 | add the aero effect to the window parameters ---------- hwnd: int or `sip.voidptr` window handle | STRING |
| HIGH | …mponent/widget/qframelesswindow/linux/window_effect.py | 0 | add the aero effect to the window parameters ---------- hwnd: int or `sip.voidptr` window handle | STRING |
| HIGH | …onent/widget/qframelesswindow/windows/window_effect.py | 0 | add the aero effect to the window parameters ---------- hwnd: int or `sip.voidptr` window handle | STRING |
| HIGH | …component/widget/qframelesswindow/mac/window_effect.py | 0 | remove shadow from pop-up menu parameters ---------- hwnd: int or `sip.voidptr` window handle | STRING |
| HIGH | …mponent/widget/qframelesswindow/linux/window_effect.py | 0 | remove shadow from pop-up menu parameters ---------- hwnd: int or `sip.voidptr` window handle | STRING |
| HIGH | …onent/widget/qframelesswindow/windows/window_effect.py | 0 | remove shadow from pop-up menu parameters ---------- hwnd: int or `sip.voidptr` window handle | STRING |
| HIGH | …component/widget/qframelesswindow/mac/window_effect.py | 0 | remove dwm shadow from the window parameters ---------- hwnd: int or `sip.voidptr` window handle | STRING |
| HIGH | …mponent/widget/qframelesswindow/linux/window_effect.py | 0 | remove dwm shadow from the window parameters ---------- hwnd: int or `sip.voidptr` window handle | STRING |
| HIGH | …onent/widget/qframelesswindow/windows/window_effect.py | 0 | remove dwm shadow from the window parameters ---------- hwnd: int or `sip.voidptr` window handle | STRING |
| HIGH | …component/widget/qframelesswindow/mac/window_effect.py | 0 | enables the maximize and minimize animation of the window parameters ---------- hwnd : int or `sip.voidptr` window handl | STRING |
| HIGH | …mponent/widget/qframelesswindow/linux/window_effect.py | 0 | enables the maximize and minimize animation of the window parameters ---------- hwnd : int or `sip.voidptr` window handl | STRING |
| HIGH | …onent/widget/qframelesswindow/windows/window_effect.py | 0 | enables the maximize and minimize animation of the window parameters ---------- hwnd : int or `sip.voidptr` window handl | STRING |
| HIGH | …component/widget/qframelesswindow/mac/window_effect.py | 0 | disable the maximize button of window parameters ---------- hwnd : int or `sip.voidptr` window handle | STRING |
| HIGH | …mponent/widget/qframelesswindow/linux/window_effect.py | 0 | disable the maximize button of window parameters ---------- hwnd : int or `sip.voidptr` window handle | STRING |
| HIGH | …onent/widget/qframelesswindow/windows/window_effect.py | 0 | disable the maximize button of window parameters ---------- hwnd : int or `sip.voidptr` window handle | STRING |
| HIGH | …component/widget/qframelesswindow/mac/window_effect.py | 0 | enable the blur effect behind the whole client parameters ---------- hwnd: int or `sip.voidptr` window handle | STRING |
| HIGH | …mponent/widget/qframelesswindow/linux/window_effect.py | 0 | enable the blur effect behind the whole client parameters ---------- hwnd: int or `sip.voidptr` window handle | STRING |
| HIGH | …onent/widget/qframelesswindow/windows/window_effect.py | 0 | enable the blur effect behind the whole client parameters ---------- hwnd: int or `sip.voidptr` window handle | STRING |
| HIGH | src/view/fried/qt_fried_msg.py | 0 | # background:transparent; # border:2px solid red; # | STRING |
| HIGH | src/view/chat/chat_msg_widget.py | 0 | # background:transparent; # border:2px solid red; # | STRING |
| HIGH | src/view/chat_new/chat_new_msg_widget.py | 0 | # background:transparent; # border:2px solid red; # | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_http.py | 73 | CODE | |
| LOW | tests/test_http.py | 83 | CODE | |
| LOW | tests/test_tasks.py | 71 | CODE | |
| LOW | tests/test_settings.py | 47 | CODE | |
| LOW | tests/test_settings.py | 247 | CODE | |
| LOW | script/build_universal2.py | 13 | CODE | |
| LOW | src/qt_owner.py | 499 | CODE | |
| LOW | src/tools/user.py | 113 | CODE | |
| LOW | src/tools/user.py | 171 | CODE | |
| LOW | src/tools/langconv.py | 114 | CODE | |
| LOW | src/tools/book.py | 106 | CODE | |
| LOW | src/tools/tool.py | 200 | CODE | |
| LOW | src/tools/tool.py | 343 | CODE | |
| LOW | src/tools/tool.py | 445 | CODE | |
| LOW | src/tools/tool.py | 472 | CODE | |
| LOW | src/config/global_config.py | 190 | CODE | |
| LOW | src/component/scroll/read_scroll.py | 269 | CODE | |
| LOW | src/component/scroll/smooth_scroll.py | 95 | CODE | |
| LOW | src/component/widget/comment_widget.py | 156 | CODE | |
| LOW | src/component/widget/comment_item_widget.py | 87 | CODE | |
| LOW | src/component/widget/qframelesswindow/linux/__init__.py | 53 | CODE | |
| LOW | …/component/widget/qframelesswindow/windows/__init__.py | 75 | CODE | |
| LOW | src/component/widget/windows/frame_less_widget.py | 84 | CODE | |
| LOW | src/component/widget/windows/frame_less_widget.py | 201 | CODE | |
| LOW | src/component/widget/windows/frame_less_widget.py | 223 | CODE | |
| LOW | src/component/label/msg_label.py | 143 | CODE | |
| LOW | src/component/line_edit/search_line_edit.py | 149 | CODE | |
| LOW | src/component/line_edit/tip_line_edit.py | 58 | CODE | |
| LOW | src/component/list/comic_list_widget.py | 101 | CODE | |
| LOW | src/component/list/comic_list_widget.py | 451 | CODE | |
| LOW | src/component/list/category_list_widget.py | 32 | CODE | |
| LOW | src/server/server.py | 176 | CODE | |
| LOW | src/server/server.py | 190 | CODE | |
| LOW | src/server/server.py | 234 | CODE | |
| LOW | src/server/server.py | 257 | CODE | |
| LOW | src/server/server.py | 306 | CODE | |
| LOW | src/server/server.py | 476 | CODE | |
| LOW | src/server/sql_server.py | 94 | CODE | |
| LOW | src/server/sql_server.py | 275 | CODE | |
| LOW | src/server/user_handler.py | 236 | CODE | |
| LOW | src/server/req.py | 99 | CODE | |
| LOW | src/server/req.py | 118 | CODE | |
| LOW | src/task/task_download.py | 106 | CODE | |
| LOW | src/task/task_download.py | 185 | CODE | |
| LOW | src/task/task_cache.py | 235 | CODE | |
| LOW | src/task/task_cache.py | 382 | CODE | |
| LOW | src/task/task_upload.py | 177 | CODE | |
| LOW | src/task/upload_webdav.py | 129 | CODE | |
| LOW | src/task/qt_task.py | 201 | CODE | |
| LOW | src/task/task_local.py | 201 | CODE | |
| LOW | src/task/task_local.py | 277 | CODE | |
| LOW | src/task/task_local.py | 365 | CODE | |
| LOW | src/task/task_local.py | 404 | CODE | |
| LOW | src/task/task_local.py | 484 | CODE | |
| LOW | src/task/task_local.py | 563 | CODE | |
| LOW | src/task/upload_smbv3.py | 104 | CODE | |
| LOW | src/task/upload_smbv3.py | 144 | CODE | |
| LOW | src/task/task_waifu2x.py | 59 | CODE | |
| LOW | src/task/task_waifu2x.py | 149 | CODE | |
| LOW | src/view/fried/qt_fried_msg.py | 104 | CODE | |
| 45 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_pagination.py | 109 | def test_page_count_boundaries(self): | CODE |
| LOW | tests/test_pagination.py | 115 | def test_search_count_and_facets_share_base_conditions(self): | CODE |
| LOW | tests/test_pagination.py | 128 | def test_search_stable_pages_and_old_schema(self): | CODE |
| LOW | tests/test_pagination.py | 139 | def test_search_receives_rows_and_count_in_one_page_result(self): | CODE |
| LOW | tests/test_pagination.py | 169 | def test_search_failure_releases_page_lock_and_facets_use_full_query(self): | CODE |
| LOW | tests/test_pagination.py | 184 | def test_search_does_not_request_more_pages_while_inserting_rows(self): | CODE |
| LOW | tests/test_pagination.py | 195 | def test_both_scroll_inputs_guard_loading_last_page_and_retry(self): | CODE |
| LOW | tests/test_pagination.py | 211 | def test_favorite_filter_count_page_size_and_query_reset(self): | CODE |
| LOW | tests/test_pagination.py | 224 | def test_favorite_global_metric_sort_snapshot_and_missing_rows(self): | CODE |
| LOW | tests/test_pagination.py | 244 | def test_favorite_all_local_sorts_are_global_before_limit(self): | CODE |
| LOW | tests/test_pagination.py | 252 | def test_history_and_local_book_exact_pages_and_shrink(self): | CODE |
| LOW | tests/test_http.py | 34 | def test_retry_success_replaces_error_and_returns_response(self): | CODE |
| LOW⚡ | tests/test_http.py | 50 | def test_failure_exhausts_budget_and_notifies_once(self): | CODE |
| LOW⚡ | tests/test_http.py | 59 | def test_zero_retries_attempts_once(self): | CODE |
| LOW⚡ | tests/test_http.py | 66 | def test_first_success_does_not_retry(self): | CODE |
| LOW⚡ | tests/test_http.py | 73 | def test_http_methods_forward_request_timeout(self): | CODE |
| LOW⚡ | tests/test_http.py | 83 | def test_timeout_is_preserved_for_download_and_speed_tasks(self): | CODE |
| LOW | tests/test_http.py | 95 | def test_offline_notifies_once_without_transport(self): | CODE |
| LOW⚡ | tests/test_queries.py | 52 | def test_query_keeps_phrase_required_and_excluded_word_semantics(self): | CODE |
| LOW⚡ | tests/test_queries.py | 59 | def test_parameterized_and_legacy_queries_round_trip_quotes_and_question_marks(self): | CODE |
| LOW⚡ | tests/test_queries.py | 68 | def test_count_facets_and_rows_keep_one_base_filter(self): | CODE |
| LOW | tests/test_queries.py | 79 | def test_projection_and_named_mapping_support_old_database_and_metrics(self): | CODE |
| LOW⚡ | tests/test_queries.py | 91 | def test_mapping_retains_unknown_metrics_and_defaults_other_nulls(self): | CODE |
| LOW⚡ | tests/test_queries.py | 99 | def test_legacy_import_and_pickle_still_resolve_db_book(self): | CODE |
| LOW⚡ | tests/test_queries.py | 109 | def test_favorite_statement_preserves_folder_and_search_columns(self): | CODE |
| LOW | tests/test_queries.py | 121 | def test_page_result_preserves_local_size_and_remote_page_metadata(self): | CODE |
| LOW | tests/test_queries.py | 141 | def test_real_worker_emits_one_serializable_page_result(self): | CODE |
| LOW | tests/test_queries.py | 152 | def test_real_worker_page_error_notifies_once_and_continues(self): | CODE |
| LOW | tests/test_queries.py | 165 | def test_real_worker_page_mapping_without_share_id(self): | CODE |
| LOW | tests/test_queries.py | 181 | def test_failure_and_malformed_response_retry_same_page(self): | CODE |
| LOW | tests/test_tasks.py | 71 | def test_terminal_callbacks_are_consumed_once_even_on_callback_error(self): | CODE |
| LOW | tests/test_tasks.py | 88 | def test_absent_callbacks_and_cancelled_results_do_not_leak(self): | CODE |
| LOW | tests/test_tasks.py | 102 | def test_callback_can_register_new_task_under_same_owner(self): | CODE |
| LOW | tests/test_tasks.py | 113 | def test_concurrent_registration_and_flag_cancellation(self): | CODE |
| LOW | tests/test_tasks.py | 130 | def test_dispatch_errors_remove_new_registration(self): | CODE |
| LOW | tests/test_tasks.py | 146 | def test_invalid_pickle_does_not_keep_terminal_task(self): | CODE |
| LOW | tests/test_tasks.py | 156 | def test_sql_failure_none_and_success_payloads_keep_callback_signature(self): | CODE |
| LOW | tests/test_tasks.py | 167 | def test_local_progress_stays_registered_until_terminal(self): | CODE |
| LOW | tests/test_tasks.py | 180 | def test_local_read_and_scan_error_emit_terminal(self): | CODE |
| LOW | tests/test_tasks.py | 195 | def test_download_progress_terminal_and_metadata_handoff(self): | CODE |
| LOW | tests/test_tasks.py | 218 | def test_download_save_error_and_metadata_error_finish(self): | CODE |
| LOW | tests/test_tasks.py | 232 | def test_qimage_empty_input_keeps_worker_available(self): | CODE |
| LOW | tests/test_tasks.py | 246 | def test_upload_unexpected_error_finishes_and_queue_continues(self): | CODE |
| LOW | tests/test_tasks.py | 257 | def test_waifu_cancellation_preserves_backend_operations(self): | CODE |
| LOW | tests/test_tasks.py | 272 | def test_nas_pause_cancels_item_tasks_and_ignores_late_upload_result(self): | CODE |
| LOW | tests/test_tasks.py | 367 | def test_sql_success_payloads_and_committed_write_acknowledgements(self): | CODE |
| LOW | tests/test_tasks.py | 407 | def test_sql_errors_notify_once_and_do_not_stop_following_tasks(self): | CODE |
| LOW | tests/test_tasks.py | 424 | def test_missing_database_uses_type_appropriate_failure_payloads(self): | CODE |
| LOW | tests/test_tasks.py | 438 | def test_failed_writes_rollback_before_error_callback(self): | CODE |
| LOW | tests/test_tasks.py | 455 | def test_failed_version_query_does_not_change_update_watermark(self): | CODE |
| LOW⚡ | tests/test_release_metadata.py | 14 | def test_tag_uses_triggering_ref(self): | CODE |
| LOW⚡ | tests/test_release_metadata.py | 18 | def test_manual_build_is_development_even_on_tag(self): | CODE |
| LOW⚡ | tests/test_release_metadata.py | 24 | def test_branch_push_is_not_a_release(self): | CODE |
| LOW⚡ | tests/test_release_metadata.py | 27 | def test_writes_github_output_without_replacing_existing_values(self): | CODE |
| LOW | tests/test_settings.py | 25 | def test_false_values_are_not_replaced_by_defaults(self): | CODE |
| LOW | tests/test_settings.py | 35 | def test_qsettings_strings_and_invalid_numbers(self): | CODE |
| LOW | tests/test_settings.py | 47 | def test_real_ini_round_trip_and_restart_semantics(self): | CODE |
| LOW | tests/test_settings.py | 140 | def test_checkboxes_keep_pending_values_on_reentry(self): | CODE |
| LOW | tests/test_settings.py | 162 | def test_numeric_controls_preserve_types_and_loaded_limits(self): | CODE |
| LOW | tests/test_settings.py | 184 | def test_combo_boxes_keep_wire_values_and_pending_choices(self): | CODE |
| 7 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .github/workflows/release.yml | 181 | 7z x book.zip | COMMENT |
| LOW | src/qt_owner.py | 541 | # | COMMENT |
| LOW | src/tools/user.py | 61 | # def InitBack(self, backData): | COMMENT |
| LOW | src/tools/user.py | 81 | # Log.Info("初始化失败, info:{}".format(backData.res)) | COMMENT |
| LOW | src/tools/book.py | 201 | # nextPage = page + 1 | COMMENT |
| LOW | src/tools/book.py | 261 | ToolUtil.ParseFromData(picInfo, data['media']) | COMMENT |
| LOW | src/tools/book.py | 281 | except Exception as es: | COMMENT |
| LOW | src/tools/tool.py | 401 | return data | COMMENT |
| LOW | src/component/scroll/read_scroll.py | 141 | # self.ani.setDuration(time) | COMMENT |
| LOW | src/component/scroll/smooth_scroll.py | 21 | self.stepsLeftQueue = deque() | COMMENT |
| LOW | src/component/scroll/smooth_scroll.py | 41 | # # 计算步数 | COMMENT |
| LOW | src/component/widget/windows/frame_less_widget.py | 81 | # self.style().drawPrimitive(QStyle.PE_Widget, option, painter, self) | COMMENT |
| LOW | src/component/widget/windows/frame_less_widget.py | 101 | # | COMMENT |
| LOW | src/component/label/auto_picture_label.py | 21 | return self.pixmap().height() / max(1, self.pixmap().devicePixelRatioF()) | COMMENT |
| LOW | src/component/label/auto_picture_label.py | 81 | COMMENT | |
| LOW | src/component/dialog/base_mask_dialog.py | 81 | # opacityAni.finished.connect(self.deleteLater) | COMMENT |
| LOW | src/server/server.py | 21 | import socket | COMMENT |
| LOW | src/server/server.py | 41 | def generator(handler): | COMMENT |
| LOW | src/server/server.py | 101 | self._speedQueue = Queue() | COMMENT |
| LOW | src/server/server.py | 141 | thread = threading.Thread(target=self.RunSpeed, args=[i]) | COMMENT |
| LOW | src/server/server.py | 161 | # | COMMENT |
| LOW | src/server/server.py | 201 | Log.Error(es) | COMMENT |
| LOW | src/server/server.py | 381 | if task.req.cookies: | COMMENT |
| LOW | src/server/server.py | 441 | cookies=task.req.cookies, json=task.req.json) | COMMENT |
| LOW | src/server/req.py | 201 | url = config.Url + "auth/sign-in" | COMMENT |
| LOW | src/view/chat/chat_msg_widget.py | 41 | self.replayLabel.setTextInteractionFlags(Qt.TextSelectableByMouse) | COMMENT |
| LOW | src/view/nas/nas_view.py | 281 | # self.listWidget.clear() | COMMENT |
| LOW | src/view/read/read_graphics.py | 101 | self.initReadMode = None | COMMENT |
| LOW | src/view/read/read_graphics.py | 261 | # # self.GetScrollBar().SetChangeState(True) | COMMENT |
| LOW | src/view/read/read_graphics.py | 721 | # TODO,优化 | COMMENT |
| LOW | src/view/read/read_graphics.py | 781 | pictureHeight = self.graphicsItem1.height() // self.graphicsItem1.devicePixelRatio() * self.devicePixelRatio | COMMENT |
| LOW | src/view/read/read_graphics.py | 801 | # oldHeight, oldWidth = self.LabelToPixmap(index) | COMMENT |
| LOW | src/view/read/read_graphics.py | 841 | # if curPixcurSize <= oldValue: | COMMENT |
| LOW | src/view/read/read_graphics.py | 961 | if self.scaleCnt == 0: | COMMENT |
| LOW | src/view/read/read_graphics.py | 1001 | pass | COMMENT |
| LOW | src/view/read/read_tool.py | 561 | self.ScalePicture2(100) | COMMENT |
| LOW | src/view/read/read_tool.py | 581 | # properties = QScroller.scroller(self.readImg.scrollArea).scrollerProperties() | COMMENT |
| LOW | src/view/read/read_view.py | 541 | # p = self.pictureData.get(index) | COMMENT |
| LOW | src/view/read/read_view.py | 561 | # if p.waifuData: | COMMENT |
| LOW | src/view/read/read_qgraphics_proxy_widget.py | 101 | # return | COMMENT |
| LOW | src/view/user/login_proxy_new_widget.py | 301 | Setting.ApiTimeOut.SetValue(self.owner.apiTimeout.currentIndex()) | COMMENT |
| LOW | src/view/user/login_proxy_new_widget.py | 361 | def OpenUrl(self): | COMMENT |
| LOW | src/view/user/local_favorite_db.py | 161 | format(fid, bookId) | COMMENT |
| LOW | src/view/search/search_view.py | 421 | QtOwner().ShowError(Str.GetStr(Str.Error)) | COMMENT |
| LOW | src/view/search/search_view.py | 441 | # data.append(widget.text()) | COMMENT |
| LOW | src/view/search/search_view.py | 501 | COMMENT | |
| LOW | src/view/info/book_info_view.py | 661 | self.lastIndex = info.picIndex | COMMENT |
| LOW | src/view/download/download_item.py | 301 | return self.Converting | COMMENT |
| LOW | src/view/chat_new/chat_new_room_widget.py | 181 | # self.LoginRoom() | COMMENT |
| LOW | src/view/chat_new/chat_new_room_widget.py | 241 | # self._UpdateOnline(data[1]) | COMMENT |
| LOW | src/view/chat_new/chat_new_msg_widget.py | 41 | self.picLabel.setScaledContents(True) | COMMENT |
| LOW | src/view/chat_new/chat_new_msg_widget.py | 61 | # self.commentLabel.setFont(font) | COMMENT |
| LOW | src/view/setting/setting_view.py | 321 | # if not QtOwner().backSock: | COMMENT |
| LOW | src/view/main/main_view.py | 141 | # def event(self, ev): | COMMENT |
| LOW | src/view/main/main_view.py | 401 | QtOwner().app.setQuitOnLastWindowClosed(False) | COMMENT |
| LOW | src/view/main/main_view.py | 461 | # if sys.platform == 'darwin': | COMMENT |
| LOW | src/view/help/help_view.py | 401 | # self.maxFetchLaterPage = fetchPage | COMMENT |
| LOW | src/view/tool/waifu2x_tool_view.py | 121 | self.modelName.setEnabled(True) | COMMENT |
| LOW | src/view/tool/waifu2x_tool_view.py | 181 | self.graphicsItem.pixmap().height() // self.graphics | COMMENT |
| LOW | src/view/tool/waifu2x_tool_view.py | 201 | # if width <= 0 or height <= 0: | COMMENT |
| 1 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | src/tools/tool.py | 143 | CODE | |
| MEDIUM | src/tools/tool.py | 144 | CODE | |
| MEDIUM | src/tools/tool.py | 147 | CODE | |
| MEDIUM | src/tools/tool.py | 149 | CODE | |
| MEDIUM | src/tools/tool.py | 151 | CODE | |
| MEDIUM | src/tools/tool.py | 153 | CODE | |
| MEDIUM | src/tools/tool.py | 155 | CODE | |
| MEDIUM | src/tools/tool.py | 157 | CODE | |
| MEDIUM | src/tools/tool.py | 159 | CODE | |
| MEDIUM | src/tools/tool.py | 161 | CODE | |
| MEDIUM | src/tools/tool.py | 163 | CODE | |
| MEDIUM | src/tools/tool.py | 165 | CODE | |
| MEDIUM | src/tools/tool.py | 167 | CODE | |
| MEDIUM | src/tools/tool.py | 169 | CODE | |
| MEDIUM | src/tools/tool.py | 171 | CODE | |
| MEDIUM | src/tools/tool.py | 173 | CODE | |
| MEDIUM | src/tools/tool.py | 175 | CODE | |
| MEDIUM | src/tools/tool.py | 177 | CODE | |
| MEDIUM | src/tools/tool.py | 178 | CODE | |
| MEDIUM | src/view/read/read_graphics.py | 956 | CODE | |
| MEDIUM | src/view/read/read_graphics.py | 961 | CODE | |
| MEDIUM | src/view/read/read_graphics.py | 964 | CODE | |
| MEDIUM | src/view/read/read_graphics.py | 981 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | src/start.py | 46 | except Exception as es: | CODE |
| HIGH | src/tools/langconv.py | 9 | except: | CODE |
| HIGH | src/tools/tool.py | 776 | except Exception: | CODE |
| HIGH | src/server/user_handler.py | 457 | except Exception as es: | CODE |
| HIGH | src/server/user_handler.py | 475 | except Exception as es: | CODE |
| HIGH | src/server/user_handler.py | 493 | except Exception as es: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | src/view/main/main_view.py | 233 | # self.qtReadImg.frame.qtTool.checkBox.setEnabled(False) | COMMENT |
| CRITICAL | src/view/main/main_view.py | 262 | self.readView.frame.qtTool.checkBox.setEnabled(False) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/component/list/comic_list_widget.py | 344 | CODE | |
| LOW | src/task/task_download.py | 80 | CODE | |
| LOW | src/task/task_download.py | 156 | CODE | |
| LOW | src/task/qt_task.py | 61 | CODE | |
| LOW | src/task/qt_task.py | 78 | CODE | |
| LOW | src/view/read/read_tool.py | 280 | CODE | |
| LOW | src/view/tool/waifu2x_tool_view.py | 454 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …/widget/qframelesswindow/titlebar/title_bar_buttons.py | 222 | for i in range(pathNodes.length()): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/component/widget/qframelesswindow/demo.py | 52 | # don't forget to call the resizeEvent() of super class | STRING |
| LOW | src/component/widget/qframelesswindow/demo.py | 52 | # don't forget to call the resizeEvent() of super class | STRING |