The only downloader you need. 下载器的集大成者。
This report summarizes scanner evidence for XiaoYouChR/Ghost-Downloader-3, a Python project with 9,701 GitHub stars. SynthScan examined 115,077 lines of code across 352 source files, recording 912 pattern matches distributed across 9 syntactic categories. The legacy adjusted pattern signal is 9.4 (Moderate 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? 508 finding(s).
Are imports declared and package/API names verified? 226 finding(s).
Are wrappers, guards, and repeated structures necessary? 619 finding(s).
Which changes need focused human review? 912 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 912 distinct pattern matches across 9 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 | browser_extension/app/src/background/media-bridge.ts | 55 | function createEmptyMediaPanelState(message: string): BuiltMediaPanelState { | CODE |
| LOW | browser_extension/app/src/background/resource-bridge.ts | 158 | async function refreshActiveTabFromBrowser(): Promise<number | null> { | CODE |
| LOW | browser_extension/app/src/background/resource-bridge.ts | 250 | function shouldCaptureNetworkResource(details: chrome.webRequest.OnResponseStartedDetails, meta: NetworkResponseMeta): | CODE |
| LOW | browser_extension/app/src/background/resource-bridge.ts | 258 | function shouldCaptureRequestResource(details: chrome.webRequest.OnSendHeadersDetails): boolean { | CODE |
| LOW | browser_extension/app/src/background/resource-bridge.ts | 270 | async function downloadResourceViaBrowser(resource: Resource): Promise<void> { | CODE |
| LOW | browser_extension/app/src/background/resource-bridge.ts | 460 | async function sendHttpResourceToDesktop(resource: Resource): Promise<CommandResult> { | CODE |
| LOW | browser_extension/app/src/background/resource-cache.ts | 95 | function headerSnapshotFromStorage(snapshot: HeaderSnapshot): HeaderSnapshot { | CODE |
| LOW | …/app/src/page-media/download-button/download-button.ts | 19 | (function installGhostDownloaderMediaButton() { | CODE |
| LOW | …_extension/app/src/page-media/attribution/mse-probe.ts | 17 | (function installGhostDownloaderMseAttribution() { | CODE |
| LOW | browser_extension/app/src/shared/utils.ts | 340 | function resourcePresentationParts(resource: Resource): { | CODE |
| LOW | browser_extension/app/src/shared/utils.ts | 455 | export function canUseOnlineMergeSelection(resources: Resource[]): boolean { | CODE |
| LOW | browser_extension/app/src/shared/utils.ts | 459 | export function sortResourcesForOnlineMerge(resources: Resource[]): Resource[] { | CODE |
| LOW | browser_extension/app/src/shared/browser.ts | 27 | export function onSendHeadersExtraInfoSpec(): chrome.webRequest.OnSendHeadersOptions[] { | CODE |
| LOW | browser_extension/app/src/shared/browser.ts | 33 | export function supportsDownloadDeterminingFilename(): boolean { | CODE |
| LOW⚡ | tests/test_listen_state_view.py | 78 | def test_browser_card_shows_failure_instead_of_connection(page): | CODE |
| LOW⚡ | tests/test_listen_state_view.py | 84 | def test_browser_card_shows_connection_while_listening(page): | CODE |
| LOW⚡ | tests/test_listen_state_view.py | 90 | def test_state_known_before_page_opens_is_shown(qtbot): | CODE |
| LOW⚡ | tests/test_listen_state_view.py | 97 | def test_destroyed_page_no_longer_receives_signals(qtbot): | CODE |
| LOW | tests/test_bt_task.py | 58 | def test_speed_meter_gets_the_bytes_received_since_the_last_progress(monkeypatch, tmp_path): | CODE |
| LOW | tests/test_bt_task.py | 68 | def test_file_added_while_download_finishes_is_downloaded(monkeypatch, tmp_path): | CODE |
| LOW⚡ | tests/test_bt_task.py | 79 | def test_completed_task_that_is_not_seeding_has_no_state_text(tmp_path): | CODE |
| LOW⚡ | tests/test_bt_task.py | 87 | def test_progress_follows_the_download_only(tmp_path): | CODE |
| LOW⚡ | tests/test_bt_task.py | 95 | def test_magnet_torrent_file_is_named_after_whole_task_name(tmp_path): | CODE |
| LOW | tests/test_task_draft.py | 81 | def test_submits_parse_for_each_url(self, draft, runner): | CODE |
| LOW | tests/test_task_draft.py | 85 | def test_removes_old_urls_cancels_parse(self, draft, runner): | CODE |
| LOW | tests/test_task_draft.py | 128 | def test_success_clears_parsing_busy(self, draft, runner): | CODE |
| LOW | tests/test_task_draft.py | 136 | def test_failure_records_error_on_item(self, draft, runner): | CODE |
| LOW | tests/test_task_draft.py | 151 | def test_submit_failure_records_error_on_item(self, draft, runner): | CODE |
| LOW | tests/test_task_draft.py | 160 | def test_parsing_item_is_not_counted_as_failed(self, draft, runner): | CODE |
| LOW | tests/test_task_draft.py | 178 | def test_pending_parse_auto_confirms_on_completion(self, draft, runner): | CODE |
| LOW | tests/test_task_draft.py | 190 | def test_confirm_skips_items_without_task_or_parse(self, draft, runner): | CODE |
| LOW | tests/test_task_draft.py | 196 | def test_confirm_applies_base_options(self, draft, runner): | CODE |
| LOW | tests/test_task_draft.py | 229 | def test_confirm_applies_category_override(self, draft, runner): | CODE |
| LOW | tests/test_task_draft.py | 243 | def test_cancels_all_in_flight(self, draft, runner): | CODE |
| LOW | tests/test_task_draft.py | 256 | def test_urls_empty_after_clear(self, draft, runner): | CODE |
| LOW | tests/test_task_draft.py | 271 | def test_true_when_task_parsed(self, draft, runner): | CODE |
| LOW | tests/test_task_draft.py | 285 | def test_set_base_options_emits(self, draft, runner): | CODE |
| LOW | tests/test_task_draft.py | 292 | def test_set_url_category_emits(self, draft, runner): | CODE |
| LOW | tests/test_task_draft.py | 306 | def test_update_skips_unknown_and_unparsed_urls(self, draft, runner): | CODE |
| LOW | tests/test_task_draft.py | 325 | def test_reissues_parse_and_clears_error(self, draft, runner): | CODE |
| LOW | tests/test_task_draft.py | 331 | def test_skips_parsing_resolved_and_unknown(self, draft, runner): | CODE |
| LOW | tests/test_task_draft.py | 348 | def test_submit_failure_keeps_item_failed(self, draft, runner): | CODE |
| LOW | tests/conftest.py | 39 | def pytest_asyncio_loop_factories(config, item): | CODE |
| LOW⚡ | tests/test_http_subworker.py | 296 | def test_skips_when_below_threshold(self, monkeypatch): | CODE |
| LOW⚡ | tests/test_http_subworker.py | 306 | def test_skips_when_filesize_zero(self): | CODE |
| LOW⚡ | tests/test_http_subworker.py | 315 | async def test_reassignment_during_download(self, server, tmp_path): | CODE |
| LOW | tests/test_http_subworker.py | 94 | async def test_download_produces_correct_file(self, server, tmp_path): | CODE |
| LOW | tests/test_http_subworker.py | 105 | async def test_single_subworker_correct(self, server, tmp_path): | CODE |
| LOW | tests/test_http_subworker.py | 115 | async def test_many_subworkers_correct(self, server, tmp_path): | CODE |
| LOW | tests/test_http_subworker.py | 142 | async def test_cloudflare_mitigated_raises_permanent(self, server, tmp_path): | CODE |
| LOW | tests/test_http_subworker.py | 157 | async def test_no_range_support_downloads_full(self, server, tmp_path): | CODE |
| LOW | tests/test_http_subworker.py | 181 | async def test_effective_headers_include_user_agent(self, server, tmp_path): | CODE |
| LOW | tests/test_http_subworker.py | 217 | async def test_speed_reported_for_every_chunk(self, server, tmp_path): | CODE |
| LOW | tests/test_http_subworker.py | 253 | def test_split_subworkers_start_one_interval_apart(self, monkeypatch): | CODE |
| LOW | tests/test_http_subworker.py | 264 | def test_splits_slowest_subworker(self): | CODE |
| LOW | tests/test_http_subworker.py | 279 | def test_new_subworker_covers_second_half(self): | CODE |
| LOW | tests/test_http_subworker.py | 407 | async def test_resume_with_increased_thread_count(self, server, tmp_path): | CODE |
| LOW | tests/test_http_subworker.py | 431 | async def test_resume_decreased_thread_count_is_noop(self, server, tmp_path): | CODE |
| LOW | tests/test_http_subworker.py | 454 | async def test_corrupt_record_starts_fresh(self, server, tmp_path): | CODE |
| LOW | tests/test_http_subworker.py | 555 | async def test_enospc_raises_task_error(self, server, tmp_path, monkeypatch): | CODE |
| 381 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/update.py | 1 | CODE | |
| LOW | app/startup.py | 1 | CODE | |
| LOW | app/checksum.py | 1 | CODE | |
| LOW | app/signal.py | 1 | CODE | |
| LOW | app/client.py | 1 | CODE | |
| LOW | app/format.py | 1 | CODE | |
| LOW | app/container.py | 1 | CODE | |
| LOW | app/sources.py | 1 | CODE | |
| LOW | app/engine.py | 1 | CODE | |
| LOW | app/loader.py | 1 | CODE | |
| LOW | app/bootstrap_list.py | 1 | CODE | |
| LOW | app/install.py | 1 | CODE | |
| LOW | app/config/cfg.py | 1 | CODE | |
| LOW | app/config/paths.py | 1 | CODE | |
| LOW | app/config/__init__.py | 1 | CODE | |
| LOW | app/config/__init__.py | 1 | CODE | |
| LOW | app/config/__init__.py | 1 | CODE | |
| LOW | app/config/__init__.py | 2 | CODE | |
| LOW | app/config/__init__.py | 2 | CODE | |
| LOW | app/config/__init__.py | 3 | CODE | |
| LOW | app/config/__init__.py | 3 | CODE | |
| LOW | app/config/__init__.py | 3 | CODE | |
| LOW | app/platform/url_scheme.py | 1 | CODE | |
| LOW | app/platform/hidden_subprocess.py | 1 | CODE | |
| LOW | app/platform/filesystem.py | 1 | CODE | |
| LOW | app/platform/application.py | 1 | CODE | |
| LOW | app/platform/desktop_notification.py | 1 | CODE | |
| LOW | app/platform/android.py | 1 | CODE | |
| LOW | app/platform/file_association.py | 1 | CODE | |
| LOW | app/platform/sysio.py | 1 | CODE | |
| LOW | app/platform/sysio.py | 131 | CODE | |
| LOW | app/platform/sysio.py | 131 | CODE | |
| LOW | app/platform/windows.py | 1 | CODE | |
| LOW | app/platform/run_at_login.py | 1 | CODE | |
| LOW | app/platform/desktop_keepalive.py | 1 | CODE | |
| LOW | app/platform/desktop.py | 1 | CODE | |
| LOW | app/models/pack.py | 1 | CODE | |
| LOW | app/models/task.py | 1 | CODE | |
| LOW | app/models/serialization.py | 1 | CODE | |
| LOW | app/view/qfw_patch.py | 1 | CODE | |
| LOW | app/view/shell/tray.py | 1 | CODE | |
| LOW | app/view/shell/dock.py | 1 | CODE | |
| LOW | app/view/shell/mac_status_item.py | 1 | CODE | |
| LOW | app/view/shell/clipboard_listener.py | 1 | CODE | |
| LOW | app/view/cards/draft_cards.py | 1 | CODE | |
| LOW | app/view/cards/task_cards.py | 1 | CODE | |
| LOW | app/view/components/labels.py | 1 | CODE | |
| LOW | app/view/components/headers_editor.py | 1 | CODE | |
| LOW | app/view/components/editors.py | 1 | CODE | |
| LOW | app/view/components/install_button.py | 1 | CODE | |
| LOW | app/view/components/band_selector.py | 1 | CODE | |
| LOW | app/view/components/token_line_edit.py | 1 | CODE | |
| LOW | app/view/components/banners.py | 1 | CODE | |
| LOW | app/view/components/tree_view.py | 1 | CODE | |
| LOW | app/view/components/option_cards.py | 1 | CODE | |
| LOW | app/view/components/scroll_area.py | 1 | CODE | |
| LOW | app/view/components/scroll_area.py | 6 | CODE | |
| LOW | app/view/components/markdown_viewer.py | 1 | CODE | |
| LOW | app/view/components/setting_cards.py | 1 | CODE | |
| LOW | app/view/components/track_bar.py | 1 | CODE | |
| 163 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | app/signal.py | 69 | except ValueError: | CODE |
| HIGH | app/signal.py | 36 | except TypeError: | CODE |
| HIGH | app/signal.py | 54 | except ValueError: | CODE |
| HIGH | app/platform/hidden_subprocess.py | 93 | except (OSError, ValueError, RuntimeError): | CODE |
| HIGH | app/platform/hidden_subprocess.py | 98 | except RuntimeError: | CODE |
| HIGH | app/platform/filesystem.py | 115 | except OSError: | CODE |
| HIGH | app/platform/application.py | 90 | except Exception: | CODE |
| HIGH | app/platform/file_association.py | 88 | except FileNotFoundError: | CODE |
| HIGH | app/platform/run_at_login.py | 32 | except FileNotFoundError: | CODE |
| HIGH | app/platform/desktop.py | 263 | except Exception: | CODE |
| HIGH | app/services/websocket_stream.py | 81 | except ConnectionError: | CODE |
| HIGH | app/services/task_service.py | 363 | except OSError: | CODE |
| HIGH | app/services/port_listener.py | 139 | except asyncio.CancelledError: | CODE |
| HIGH | features/bili_pack/pack.py | 102 | except Exception: | CODE |
| HIGH | features/yt_dlp_pack/config.py | 182 | except Exception: | CODE |
| HIGH | features/bittorrent_pack/session.py | 214 | except Exception: | CODE |
| HIGH | features/bittorrent_pack/session.py | 265 | except Exception: | CODE |
| HIGH | features/bittorrent_pack/session.py | 276 | except Exception: | CODE |
| HIGH | features/bittorrent_pack/session.py | 285 | except Exception: | CODE |
| HIGH | features/bittorrent_pack/session.py | 293 | except asyncio.CancelledError: | CODE |
| HIGH | features/bittorrent_pack/session.py | 427 | except Exception: | CODE |
| HIGH | features/bittorrent_pack/session.py | 547 | except Exception: | CODE |
| HIGH | features/bittorrent_pack/session.py | 170 | except Exception: | CODE |
| HIGH | features/bittorrent_pack/session.py | 414 | except Exception: | CODE |
| HIGH | features/ftp_pack/task.py | 303 | except CancelledError: | CODE |
| HIGH | features/m3u8_pack/cards.py | 154 | except ValueError: | CODE |
| HIGH | features/http_pack/task.py | 241 | except CancelledError: | CODE |
| HIGH | tests/test_http_subworker.py | 611 | except asyncio.CancelledError: | CODE |
| HIGH | scripts/convert_to_pyqt6.py | 201 | except ValueError: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/sources.py | 116 | except Exception as e: | CODE |
| LOW | app/sources.py | 150 | except Exception as e: | CODE |
| LOW | app/sources.py | 178 | except Exception as e: | CODE |
| LOW | app/sources.py | 204 | except Exception as e: | CODE |
| LOW | app/sources.py | 249 | except Exception as e: | CODE |
| LOW | app/sources.py | 275 | except Exception as e: | CODE |
| LOW | app/loader.py | 99 | except Exception as e: | CODE |
| LOW | app/loader.py | 123 | except Exception: | CODE |
| LOW | app/loader.py | 137 | except Exception as e: | CODE |
| LOW | app/bootstrap_list.py | 110 | except Exception as e: | CODE |
| MEDIUM | app/bootstrap_list.py | 93 | def _fetchAll(self) -> None: | CODE |
| LOW | app/platform/application.py | 46 | except Exception as e: | CODE |
| LOW | app/platform/application.py | 90 | except Exception: | CODE |
| LOW | app/platform/application.py | 110 | except Exception as e: | CODE |
| LOW | app/platform/application.py | 118 | except Exception as e: | CODE |
| MEDIUM | app/platform/application.py | 54 | def exec(self) -> int: | CODE |
| LOW | app/platform/desktop_notification.py | 77 | except Exception as e: | CODE |
| LOW⚡ | app/platform/file_association.py | 28 | except Exception as e: | CODE |
| LOW⚡ | app/platform/file_association.py | 38 | except Exception as e: | CODE |
| LOW⚡ | app/platform/file_association.py | 48 | except Exception as e: | CODE |
| LOW | app/platform/desktop_keepalive.py | 17 | except Exception as e: | CODE |
| LOW | app/platform/desktop_keepalive.py | 27 | except Exception as e: | CODE |
| LOW | app/platform/desktop.py | 263 | except Exception: | CODE |
| LOW | app/platform/desktop.py | 306 | except Exception as e: | CODE |
| LOW | app/platform/desktop.py | 318 | except Exception as e: | CODE |
| LOW | app/models/pack.py | 77 | except Exception: | CODE |
| LOW | app/models/pack.py | 213 | except Exception as e: | CODE |
| LOW | app/models/task.py | 465 | except Exception as e: | CODE |
| LOW | app/view/components/setting_cards.py | 943 | except Exception as e: | CODE |
| LOW | app/services/browser_service.py | 478 | except Exception as e: | CODE |
| LOW | app/services/browser_service.py | 584 | except Exception as e: | CODE |
| LOW | app/services/coroutine_runner.py | 50 | except Exception as e: | CODE |
| LOW | app/services/coroutine_runner.py | 93 | except Exception as e: | CODE |
| MEDIUM | app/services/coroutine_runner.py | 90 | def wrapper(): | CODE |
| LOW | app/services/update_service.py | 202 | except Exception as e: | CODE |
| MEDIUM | app/services/update_service.py | 182 | def _fetchVersions(self) -> dict | None: | CODE |
| LOW | app/services/task_service.py | 186 | except Exception as e: | CODE |
| LOW | app/services/task_service.py | 195 | except Exception as e: | CODE |
| LOW | app/services/task_service.py | 216 | except Exception as e: | CODE |
| LOW | app/services/port_listener.py | 141 | except Exception as e: | CODE |
| LOW | app/services/task_draft.py | 139 | except Exception as e: | CODE |
| LOW | features/bili_pack/pack.py | 102 | except Exception: | CODE |
| LOW | features/bili_pack/task.py | 493 | except Exception as e: | CODE |
| LOW | features/bili_pack/task.py | 559 | except Exception as e: | CODE |
| LOW | features/bili_pack/task.py | 741 | except Exception as e: | CODE |
| LOW | features/bili_pack/stream.py | 65 | except Exception: | CODE |
| LOW | features/bili_pack/stream.py | 189 | except Exception: | CODE |
| LOW | features/bili_pack/stream.py | 213 | except Exception: | CODE |
| MEDIUM | features/bili_pack/stream.py | 184 | def fetchBuvid(client) -> str: | CODE |
| LOW | features/bili_pack/account.py | 383 | except Exception: | CODE |
| MEDIUM | features/bili_pack/account.py | 378 | def _fetchZone(self, client) -> int: | CODE |
| LOW | features/yt_dlp_pack/pack.py | 53 | except Exception: | CODE |
| LOW | features/yt_dlp_pack/task.py | 358 | except Exception as e: | CODE |
| LOW | features/yt_dlp_pack/task.py | 437 | except Exception as e: | CODE |
| LOW | features/yt_dlp_pack/config.py | 182 | except Exception: | CODE |
| LOW | features/bittorrent_pack/pack.py | 61 | except Exception as e: | CODE |
| LOW | features/bittorrent_pack/task.py | 201 | except Exception: | CODE |
| LOW | features/bittorrent_pack/session.py | 170 | except Exception: | CODE |
| LOW | features/bittorrent_pack/session.py | 214 | except Exception: | CODE |
| LOW | features/bittorrent_pack/session.py | 265 | except Exception: | CODE |
| 38 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | Ghost-Downloader-3.py | 52 | CODE | |
| LOW | Ghost-Downloader-3.py | 233 | CODE | |
| LOW | app/update.py | 58 | CODE | |
| LOW | app/client.py | 83 | CODE | |
| LOW | app/client.py | 97 | CODE | |
| LOW | app/client.py | 162 | CODE | |
| LOW | app/client.py | 189 | CODE | |
| LOW | app/container.py | 224 | CODE | |
| LOW | app/install.py | 28 | CODE | |
| LOW | app/install.py | 56 | CODE | |
| LOW | app/platform/filesystem.py | 71 | CODE | |
| LOW | app/platform/application.py | 82 | CODE | |
| LOW | app/platform/file_association.py | 52 | CODE | |
| LOW | app/platform/desktop.py | 15 | CODE | |
| LOW | app/platform/desktop.py | 178 | CODE | |
| LOW | app/platform/desktop.py | 267 | CODE | |
| LOW | app/platform/desktop.py | 339 | CODE | |
| LOW | app/models/pack.py | 71 | CODE | |
| LOW | app/models/task.py | 340 | CODE | |
| LOW | app/view/cards/task_cards.py | 292 | CODE | |
| LOW | app/view/components/token_line_edit.py | 236 | CODE | |
| LOW | app/view/components/setting_cards.py | 250 | CODE | |
| LOW | app/view/components/setting_cards.py | 850 | CODE | |
| LOW | app/view/dialogs/pack_info.py | 55 | CODE | |
| LOW | app/view/windows/main_window.py | 604 | CODE | |
| LOW | app/view/pages/setting_page.py | 463 | CODE | |
| LOW | app/view/pages/task_page.py | 599 | CODE | |
| LOW | app/services/browser_service.py | 519 | CODE | |
| LOW | app/services/task_service.py | 91 | CODE | |
| LOW | app/services/aria2_rpc.py | 116 | CODE | |
| LOW | features/bili_pack/pack.py | 32 | CODE | |
| LOW | features/bili_pack/task.py | 293 | CODE | |
| LOW | features/bili_pack/task.py | 606 | CODE | |
| LOW | features/bili_pack/task.py | 639 | CODE | |
| LOW | features/bili_pack/cards.py | 207 | CODE | |
| LOW | features/bili_pack/cards.py | 314 | CODE | |
| LOW | features/bili_pack/cards.py | 340 | CODE | |
| LOW | features/bili_pack/cards.py | 387 | CODE | |
| LOW | features/bili_pack/setting_cards.py | 107 | CODE | |
| LOW | features/bili_pack/account.py | 140 | CODE | |
| LOW | features/ffmpeg_pack/task.py | 53 | CODE | |
| LOW | features/yt_dlp_pack/task.py | 411 | CODE | |
| LOW | features/yt_dlp_pack/task.py | 462 | CODE | |
| LOW | features/yt_dlp_pack/task.py | 611 | CODE | |
| LOW | features/yt_dlp_pack/config.py | 168 | CODE | |
| LOW | features/yt_dlp_pack/android.py | 92 | CODE | |
| LOW | features/bittorrent_pack/cards.py | 83 | CODE | |
| LOW | features/bittorrent_pack/session.py | 140 | CODE | |
| LOW | features/bittorrent_pack/session.py | 443 | CODE | |
| LOW | features/ftp_pack/pack.py | 28 | CODE | |
| LOW | features/ftp_pack/task.py | 316 | CODE | |
| LOW | features/ftp_pack/task.py | 426 | CODE | |
| LOW | features/github_pack/probe.py | 30 | CODE | |
| LOW | features/m3u8_pack/pack.py | 40 | CODE | |
| LOW | features/m3u8_pack/pack.py | 215 | CODE | |
| LOW | features/ed2k_pack/lists.py | 15 | CODE | |
| LOW | features/huggingface_pack/pack.py | 171 | CODE | |
| LOW | features/http_pack/pack.py | 43 | CODE | |
| LOW | features/http_pack/task.py | 247 | CODE | |
| LOW | features/http_pack/task.py | 374 | CODE | |
| 5 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/platform/run_at_login.py | 19 | def _setWindows(enabled: bool) -> None: | CODE |
| LOW | app/platform/run_at_login.py | 37 | def _setMacOS(enabled: bool) -> None: | CODE |
| LOW | app/platform/run_at_login.py | 59 | def _setLinux(enabled: bool) -> None: | CODE |
| LOW | app/models/task.py | 307 | def _updateFilesFromSteps(self) -> None: | CODE |
| LOW | app/view/cards/task_cards.py | 331 | def _setStatus(self, text: str) -> None: | CODE |
| LOW | app/view/components/headers_editor.py | 307 | def _setRows(self, rows: list[tuple[str, str]]) -> None: | CODE |
| LOW | app/view/components/band_selector.py | 95 | def _updateBand(self, scrollWidgetX: int, scrollWidgetY: int) -> None: | CODE |
| LOW | app/view/components/scroll_area.py | 15 | __all__ = ["ScrollArea"] | CODE |
| LOW | app/view/components/setting_cards.py | 371 | def _setPath(self, path: str) -> None: | CODE |
| LOW | app/view/components/setting_cards.py | 796 | def _setPath(self, path: str) -> None: | CODE |
| LOW | app/view/components/setting_card_group.py | 249 | def _setCollapsed(self, collapsed: bool) -> None: | CODE |
| LOW | app/view/components/range_slider.py | 223 | def _updatePreview(self, x: float) -> None: | CODE |
| LOW | app/view/components/range_slider.py | 274 | def _updateDrag(self, x: float) -> None: | CODE |
| LOW | app/view/dialogs/file_select.py | 174 | def _setChildrenCheckState(self, item: QStandardItem, state: Qt.CheckState) -> None: | CODE |
| LOW | app/view/dialogs/file_select.py | 192 | def _updateAncestorCheckStates(self, item: QStandardItem | None) -> None: | CODE |
| LOW | app/view/dialogs/file_select.py | 203 | def _setSelectedIndexes(self, selectedIndexes: set[int]) -> None: | CODE |
| LOW | app/view/dialogs/file_select.py | 214 | def _setAll(self, checked: bool) -> None: | CODE |
| LOW | app/view/dialogs/file_select.py | 233 | def _updateSummary(self) -> None: | CODE |
| LOW | app/view/dialogs/subtitle_select.py | 71 | def _setAll(self, checked: bool) -> None: | CODE |
| LOW | app/view/dialogs/edit_task.py | 90 | def _setInteractive(self, enabled: bool) -> None: | CODE |
| LOW | app/view/windows/main_window.py | 224 | def _updateSearchTarget(self, page: QWidget) -> None: | CODE |
| LOW | app/view/windows/main_window.py | 569 | def _setTheme(self, value, deferBackgroundRefresh: bool = False) -> None: | CODE |
| LOW | app/view/windows/main_window.py | 604 | def _setBackgroundEffectWin(self, value: str, skipRemove: bool = False) -> None: | CODE |
| LOW | app/view/windows/main_window.py | 645 | def _setBackgroundEffectMac(self, value: str) -> None: | CODE |
| LOW | app/view/windows/main_window.py | 700 | def _setMacAcrylicAppearance(self) -> None: | CODE |
| LOW | app/view/windows/oobe_window.py | 493 | def _setBanner(self, icon: InfoBarIcon, title: str) -> None: | CODE |
| LOW | app/view/windows/oobe_window.py | 522 | def _setConnectedBanner(self, version: str) -> None: | CODE |
| LOW | app/services/browser_service.py | 260 | def _setPairRequest(self, request: PairRequest | None, session: BrowserClientSession | None) -> None: | CODE |
| LOW | app/services/task_service.py | 155 | def _setPlaceholders(self, task: Task) -> None: | CODE |
| LOW | app/services/port_listener.py | 93 | def _setState(self, state: ListenState) -> None: | CODE |
| LOW | features/bili_pack/task.py | 475 | async def _updateSegmentRange(self, page: BiliPage) -> None: | CODE |
| LOW | features/bili_pack/task.py | 541 | async def _updateSegmentRange(self, page: BiliPage) -> None: | CODE |
| LOW | features/bili_pack/cards.py | 255 | def _setTime(self, item: QStandardItem) -> None: | CODE |
| LOW | features/bili_pack/cards.py | 283 | def _setName(self, item: QStandardItem) -> None: | CODE |
| LOW | features/bili_pack/cards.py | 314 | def _setAll(self, checked: bool) -> None: | CODE |
| LOW | features/bili_pack/account.py | 105 | def _updateWbiKeys(self, data: dict) -> None: | CODE |
| LOW | features/yt_dlp_pack/task.py | 383 | def _updateSubtitleSteps(self, info: dict) -> None: | CODE |
| LOW | features/yt_dlp_pack/task.py | 411 | async def _updateSegmentRanges(self, file: YouTubeFile) -> None: | CODE |
| LOW | features/yt_dlp_pack/task.py | 462 | def _updateSiblingSteps(self, videoFmt: dict | None, audioFmt: dict | None, info: dict) -> None: | CODE |
| LOW | features/yt_dlp_pack/task.py | 499 | def _updateExtraAudioSteps(self, info: dict, subworkerCount: int) -> None: | CODE |
| LOW | features/yt_dlp_pack/cards.py | 192 | def _setAll(self, checked: bool) -> None: | CODE |
| LOW | features/bittorrent_pack/detail_cards.py | 80 | def _setSwarm(self, swarm: SwarmInfo | None) -> None: | CODE |
| LOW | features/bittorrent_pack/detail_cards.py | 116 | def _setTrackers(self, trackers: tuple[TrackerInfo, ...]) -> None: | CODE |
| LOW | features/bittorrent_pack/detail_cards.py | 156 | def _setPeers(self, peers: tuple[PeerInfo, ...]) -> None: | CODE |
| LOW | features/bittorrent_pack/session.py | 497 | def _updateEntry(self, entry: ActiveTorrent) -> None: | CODE |
| LOW | features/ed2k_pack/kelpie/kelpie.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | features/ed2k_pack/kelpie/kelpie.py | 48 | def _setProgress(self, progress: Progress) -> None: | CODE |
| LOW | features/ed2k_pack/kelpie/kelpie.py | 54 | def _setEnded(self, error: BaseException | None) -> None: | CODE |
| LOW | features/ed2k_pack/kelpie/__init__.py | 5 | __all__ = [ | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | app/view/components/tree_view.py | 49 | return header.length() + self.frameWidth() * 2 + self.verticalScrollBar().sizeHint().width() | CODE |
| HIGH | app/view/components/markdown_viewer.py | 121 | cursor.setPosition(last.position() + last.length() - 1, QTextCursor.MoveMode.KeepAnchor) | CODE |
| HIGH | app/view/windows/main_window.py | 507 | urls = [u.toString() for u in mime.urls()] | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | app/container.py | 61 | # ── MP4 box parsing ───────────────────────────────────────────── | COMMENT |
| MEDIUM | app/container.py | 265 | # ── WebM / EBML parsing ───────────────────────────────────────── | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/updater/updater.c | 1 | /* | COMMENT |
| LOW | tools/updater/updater.c | 21 | #else | COMMENT |