Pixiv第三方Android客户端
This report summarizes scanner evidence for CeuiLiSA/Pixiv-Shaft, a Kotlin project with 8,206 GitHub stars. SynthScan examined 404,271 lines of code across 2659 source files, recording 630 pattern matches distributed across 13 syntactic categories. The legacy adjusted pattern signal is 6.8 (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.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 80 finding(s).
Are imports declared and package/API names verified? 129 finding(s).
Are wrappers, guards, and repeated structures necessary? 422 finding(s).
Which changes need focused human review? 630 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 630 distinct pattern matches across 13 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 |
|---|---|---|---|---|
| CRITICAL | …rc/test/java/ceui/pixiv/ui/detail/AuthorTagMenuTest.kt | 191 | val palette = ceui.pixiv.witstudio.theme.V3Palette.from(host) | CODE |
| CRITICAL | …/src/test/java/ceui/pixiv/sticker/StickerPickerTest.kt | 67 | .setInsets(androidx.core.view.WindowInsetsCompat.Type.ime(), androidx.core.graphics.Insets.of(0, 0, 0, d | CODE |
| CRITICAL | …/src/test/java/ceui/pixiv/sticker/StickerPickerTest.kt | 116 | val palette = ceui.pixiv.witstudio.theme.V3Palette.from(context) | CODE |
| CRITICAL | …/src/test/java/ceui/pixiv/sticker/StickerPickerTest.kt | 164 | .setInsets(androidx.core.view.WindowInsetsCompat.Type.navigationBars(), androidx.core.graphics.I | CODE |
| CRITICAL | …/src/test/java/ceui/pixiv/sticker/StickerPickerTest.kt | 226 | val primary = ceui.pixiv.witstudio.theme.V3Palette.from(context).primary | CODE |
| CRITICAL | …rc/test/java/ceui/pixiv/feeds/FeedRefreshScrollTest.kt | 74 | assertEquals(101, fragment.model.uiState.value.items.first().feedKey) | CODE |
| CRITICAL | …/java/ceui/pixiv/ui/navigation/TemplateRouteFactory.kt | 157 | ceui.pixiv.ui.referral.ReferralPlanFragment.newInstance( | CODE |
| CRITICAL | …/java/ceui/pixiv/ui/navigation/TemplateRouteFactory.kt | 432 | ceui.pixiv.ui.library.BookmarkLibraryFragment.newInstance() | CODE |
| CRITICAL | …/java/ceui/pixiv/ui/navigation/TemplateRouteFactory.kt | 445 | ceui.pixiv.ui.library.NovelBookmarkLibraryFragment.newInstance() | CODE |
| CRITICAL⚡ | …/java/ceui/pixiv/ui/navigation/TemplateRouteFactory.kt | 458 | ceui.pixiv.db.mirror.MirrorContentType.of( | CODE |
| CRITICAL⚡ | …/java/ceui/pixiv/ui/navigation/TemplateRouteFactory.kt | 466 | ceui.pixiv.ui.library.BookmarkLibraryFragment.newInstance(starType = starType) | CODE |
| CRITICAL⚡ | …/java/ceui/pixiv/ui/navigation/TemplateRouteFactory.kt | 468 | ceui.pixiv.ui.library.NovelBookmarkLibraryFragment.newInstance( | CODE |
| CRITICAL⚡ | …/java/ceui/pixiv/ui/navigation/TemplateRouteFactory.kt | 472 | ceui.pixiv.ui.library.FollowingLibraryFragment.newInstance( | CODE |
| CRITICAL | …/java/ceui/pixiv/ui/navigation/TemplateRouteFactory.kt | 485 | ceui.pixiv.ui.library.FollowingLibraryFragment.newInstance() | CODE |
| CRITICAL | …/src/main/java/ceui/pixiv/ui/common/MediaStoreUtils.kt | 40 | val handle = ceui.pixiv.download.DownloadsRegistry.downloads.openRaw( | CODE |
| CRITICAL | …/src/main/java/ceui/pixiv/ui/common/MediaStoreUtils.kt | 42 | ceui.pixiv.download.model.RelativePath.parse("ShaftImages/$displayName"), | CODE |
| CRITICAL | …/src/main/java/ceui/pixiv/ui/common/MediaStoreUtils.kt | 136 | val handle = ceui.pixiv.download.DownloadsRegistry.downloads.openRaw( | CODE |
| CRITICAL | …c/main/java/ceui/pixiv/ui/detail/ArtworkV3ViewModel.kt | 222 | !com.blankj.utilcode.util.NetworkUtils.isWifiConnected() | CODE |
| CRITICAL | …c/main/java/ceui/pixiv/ui/detail/ArtworkV3ViewModel.kt | 449 | isWifiConnected: Boolean = com.blankj.utilcode.util.NetworkUtils.isWifiConnected(), | CODE |
| CRITICAL | …va/ceui/pixiv/ui/detail/frames/UgoiraFramesFragment.kt | 328 | addView(duration.apply { maxLines = 1 }, com.google.android.flexbox.FlexboxLayout.LayoutParams(-2, -2).apply | CODE |
| CRITICAL | …va/ceui/pixiv/ui/novel/reader/NovelReaderV3Fragment.kt | 1394 | val charIndex = ceui.pixiv.ui.novel.reader.paginate.ContentParser.resolveJumpTarget(toks, target) | CODE |
| CRITICAL | …va/ceui/pixiv/ui/novel/reader/NovelReaderV3Fragment.kt | 1719 | return ceui.pixiv.ui.novel.local.LocalLibraryStore.novelIdFor(localKey) | CODE |
| CRITICAL | …a/ceui/pixiv/ui/novel/reader/NovelReaderV3ViewModel.kt | 246 | val text = ceui.pixiv.ui.novel.local.TextDecoder.decode(bytes) | CODE |
| CRITICAL | …eui/pixiv/ui/novel/reader/export/NovelExportManager.kt | 90 | val effectivePolicy = retryPolicy ?: if (com.blankj.utilcode.util.AppUtils.isAppForeground()) { | CODE |
| CRITICAL | …ceui/pixiv/ui/novel/reader/export/MergedNovelWriter.kt | 515 | ?: com.blankj.utilcode.util.ActivityUtils.getTopActivity() | CODE |
| CRITICAL | …ceui/pixiv/ui/novel/reader/export/MergedNovelWriter.kt | 516 | if (act == null || act.isFinishing || act.isDestroyed || !com.blankj.utilcode.util.AppUtils.isAppForeground( | CODE |
| CRITICAL | …java/ceui/pixiv/ui/novel/reader/export/EpubExporter.kt | 95 | val act = retryPolicy.activity ?: com.blankj.utilcode.util.ActivityUtils.getTopActivity() | CODE |
| CRITICAL | …java/ceui/pixiv/ui/novel/reader/export/EpubExporter.kt | 96 | if (act == null || act.isFinishing || act.isDestroyed || !com.blankj.utilcode.util.AppUtils. | CODE |
| CRITICAL | …java/ceui/pixiv/ui/novel/reader/export/EpubExporter.kt | 157 | val act = retryPolicy.activity ?: com.blankj.utilcode.util.ActivityUtils.getTopActivity() | CODE |
| CRITICAL | …java/ceui/pixiv/ui/novel/reader/export/EpubExporter.kt | 158 | if (act == null || act.isFinishing || act.isDestroyed || !com.blankj.utilcode.util.AppUtils.isAppFor | CODE |
| CRITICAL | app/src/main/java/ceui/pixiv/ui/muted/MuteTagSheet.kt | 268 | val lp = com.google.android.flexbox.FlexboxLayout.LayoutParams( | CODE |
| CRITICAL | …in/java/ceui/pixiv/widget/telegram/SpoilerEffect2.java | 472 | egl = (EGL10) javax.microedition.khronos.egl.EGLContext.getEGL(); | CODE |
| CRITICAL | …ain/java/ceui/pixiv/chat/base/widget/EmptyStateView.kt | 55 | setTextColor(com.google.android.material.color.MaterialColors.getColor(this, com.google.android.material.R.a | CODE |
| CRITICAL | …ain/java/ceui/pixiv/chat/base/widget/EmptyStateView.kt | 65 | setTextColor(com.google.android.material.color.MaterialColors.getColor(this, com.google.android.material.R.a | CODE |
| CRITICAL | …c/main/java/ceui/pixiv/chat/base/widget/StateLayout.kt | 171 | val color = com.google.android.material.color.MaterialColors.getColor( | CODE |
| CRITICAL | app/src/main/java/ceui/pixiv/auth/AuthApi.kt | 93 | ceui.pixiv.shaftapi.MediaHttpTransport.apiClient.newBuilder() | CODE |
| CRITICAL | …main/java/ceui/pixiv/plaza/ui/PlazaTimelineFragment.kt | 50 | androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult() | CODE |
| CRITICAL | app/src/main/java/ceui/lisa/core/Manager.java | 1523 | .url(ceui.lisa.http.ImageHostManager.INSTANCE.rewrite(dlUrl)) | CODE |
| CRITICAL | app/src/main/java/ceui/lisa/core/Manager.java | 1661 | .url(ceui.lisa.http.ImageHostManager.INSTANCE.rewrite(dlUrl)) | CODE |
| CRITICAL | …/ceui/lisa/fragments/FragmentSettingsExperimental.java | 114 | ceui.pixiv.ui.settings.WitDialogGallery.showWit(mContext)); | CODE |
| CRITICAL | …/ceui/lisa/fragments/FragmentSettingsExperimental.java | 165 | ceui.pixiv.ui.debug.DebugMirrorBannerTrigger.show(mContext)); | CODE |
| CRITICAL | …/ceui/lisa/fragments/FragmentSettingsExperimental.java | 178 | ceui.pixiv.ui.debug.DebugUpdateSheetTrigger.show(this)); | CODE |
| CRITICAL | app/src/main/java/ceui/lisa/fragments/FragmentHolder.kt | 57 | ceui.pixiv.ui.user.UserMangaFeedFragment.newInstance(data.user?.id ?: 0L, false), | CODE |
| CRITICAL | …c/main/java/ceui/lisa/fragments/FragmentSettingsHub.kt | 31 | val palette = ceui.pixiv.witstudio.theme.V3Palette.from(mContext) | CODE |
| CRITICAL | …c/main/java/ceui/lisa/fragments/FragmentSettingsHub.kt | 78 | val palette = ceui.pixiv.witstudio.theme.V3Palette.from(mContext) | CODE |
| CRITICAL | …java/ceui/lisa/fragments/FragmentSettingsBrowsing.java | 336 | ceui.pixiv.ui.synonym.SynonymBuiltinDict.autoImportIfNeeded(appContext) | CODE |
| CRITICAL⚡ | …va/ceui/lisa/fragments/FragmentSettingsAppearance.java | 264 | for (String tag : ceui.pixiv.i18n.AppLocales.INSTANCE.getSupportedTags()) { | CODE |
| CRITICAL⚡ | …va/ceui/lisa/fragments/FragmentSettingsAppearance.java | 265 | labels.add(ceui.pixiv.i18n.AppLocales.INSTANCE.displayName(tag)); | CODE |
| CRITICAL⚡ | …va/ceui/lisa/fragments/FragmentSettingsAppearance.java | 269 | if (!ceui.pixiv.i18n.AppLocales.INSTANCE.isFollowingSystem()) { | CODE |
| CRITICAL⚡ | …va/ceui/lisa/fragments/FragmentSettingsAppearance.java | 270 | String currentTag = ceui.pixiv.i18n.AppLocales.INSTANCE.currentLocale().toLanguageTag(); | CODE |
| CRITICAL⚡ | …va/ceui/lisa/fragments/FragmentSettingsAppearance.java | 278 | ceui.pixiv.i18n.AppLocales.INSTANCE.apply(tag); | CODE |
| CRITICAL⚡ | …va/ceui/lisa/fragments/FragmentSettingsAppearance.java | 893 | if (ceui.pixiv.i18n.AppLocales.INSTANCE.isFollowingSystem()) { | CODE |
| CRITICAL⚡ | …va/ceui/lisa/fragments/FragmentSettingsAppearance.java | 896 | Locale loc = ceui.pixiv.i18n.AppLocales.INSTANCE.currentLocale(); | CODE |
| CRITICAL⚡ | …va/ceui/lisa/fragments/FragmentSettingsAppearance.java | 897 | return ceui.pixiv.i18n.AppLocales.INSTANCE.displayName(loc.toLanguageTag()); | CODE |
| CRITICAL⚡ | …/java/ceui/lisa/fragments/FragmentSettingsNetwork.java | 154 | ceui.lisa.http.ImageHostManager.Mode.CUSTOM.ordinal(); | CODE |
| CRITICAL⚡ | …/java/ceui/lisa/fragments/FragmentSettingsNetwork.java | 159 | if (mode == ceui.lisa.http.ImageHostManager.Mode.PIXIV_CAT.ordinal()) { | CODE |
| CRITICAL⚡ | …/java/ceui/lisa/fragments/FragmentSettingsNetwork.java | 161 | } else if (mode == ceui.lisa.http.ImageHostManager.Mode.PIXIV_RE.ordinal()) { | CODE |
| CRITICAL⚡ | …/java/ceui/lisa/fragments/FragmentSettingsNetwork.java | 163 | } else if (mode == ceui.lisa.http.ImageHostManager.Mode.PIXIV_NL.ordinal()) { | CODE |
| CRITICAL | app/src/main/java/ceui/lisa/fragments/FragmentSAF.java | 36 | ceui.pixiv.download.config.DownloadItems.illustPage(illustsBean, 0)); | CODE |
| CRITICAL | …ain/java/ceui/lisa/fragments/FragmentSettingsData.java | 527 | new ceui.pixiv.witstudio.dialog.WitTipDialog.Builder(getActivity()) | CODE |
| 59 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …java/ceui/pixiv/websocket/RobustWebSocketClientTest.kt | 218 | // ── 1. Happy path ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …java/ceui/pixiv/websocket/RobustWebSocketClientTest.kt | 256 | // ── 2. State sequence ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …java/ceui/pixiv/websocket/RobustWebSocketClientTest.kt | 316 | // ── 3. Idempotent connect ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | …java/ceui/pixiv/websocket/RobustWebSocketClientTest.kt | 346 | // ── 4. disconnect blocks reconnect ──────────────────────────────────────── | COMMENT |
| MEDIUM | …java/ceui/pixiv/websocket/RobustWebSocketClientTest.kt | 372 | // ── 5. Server-initiated close triggers reconnect ────────────────────────── | COMMENT |
| MEDIUM | …java/ceui/pixiv/websocket/RobustWebSocketClientTest.kt | 406 | // ── 6. Stale-socket guard (P0-1 regression test) ────────────────────────── | COMMENT |
| MEDIUM | …java/ceui/pixiv/websocket/RobustWebSocketClientTest.kt | 455 | // ── 7. Buffered messages flushed in order on (re)connect ────────────────── | COMMENT |
| MEDIUM | …java/ceui/pixiv/websocket/RobustWebSocketClientTest.kt | 488 | // ── 8. drain on disconnect ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | …java/ceui/pixiv/websocket/RobustWebSocketClientTest.kt | 529 | // ── 9. sendSuspending suspends on full buffer with Suspend strategy ─────── | COMMENT |
| MEDIUM | …java/ceui/pixiv/websocket/RobustWebSocketClientTest.kt | 560 | // ── 10. DropOldest backpressure ─────────────────────────────────────────── | COMMENT |
| MEDIUM | …java/ceui/pixiv/websocket/RobustWebSocketClientTest.kt | 652 | // ── 11. DropNewest backpressure ─────────────────────────────────────────── | COMMENT |
| MEDIUM | …java/ceui/pixiv/websocket/RobustWebSocketClientTest.kt | 681 | // ── 12. Terminate after maxAttempts ─────────────────────────────────────── | COMMENT |
| MEDIUM | …java/ceui/pixiv/websocket/RobustWebSocketClientTest.kt | 718 | // ── 13. close() makes everything no-op ──────────────────────────────────── | COMMENT |
| MEDIUM | …java/ceui/pixiv/websocket/RobustWebSocketClientTest.kt | 740 | // ── 14. send() return values across lifecycle ───────────────────────────── | COMMENT |
| MEDIUM | …java/ceui/pixiv/websocket/RobustWebSocketClientTest.kt | 769 | // ── 15. Empty / null behaviors ──────────────────────────────────────────── | COMMENT |
| MEDIUM | …java/ceui/pixiv/websocket/RobustWebSocketClientTest.kt | 789 | // ── 16. cancel() after disconnect is a no-op ────────────────────────────── | COMMENT |
| MEDIUM | …java/ceui/pixiv/websocket/RobustWebSocketClientTest.kt | 810 | // ── 17. P1 fix: disconnect → connect cycle drops queued messages ────────── | COMMENT |
| MEDIUM | …java/ceui/pixiv/websocket/RobustWebSocketClientTest.kt | 861 | // ── 18. P0-1: Auth refresh — happy path ─────────────────────────────────── | COMMENT |
| MEDIUM | …java/ceui/pixiv/websocket/RobustWebSocketClientTest.kt | 890 | // ── 19. P0-1: Auth refresh — exhausted ──────────────────────────────────── | COMMENT |
| MEDIUM | …java/ceui/pixiv/websocket/RobustWebSocketClientTest.kt | 917 | // ── 20. P0-1: Auth refresh — refresh hook returns false ─────────────────── | COMMENT |
| MEDIUM | …java/ceui/pixiv/websocket/RobustWebSocketClientTest.kt | 948 | // ── 21. P0-1: Auth refresh budget refills on successful connect ─────────── | COMMENT |
| MEDIUM | …java/ceui/pixiv/websocket/RobustWebSocketClientTest.kt | 998 | // ── 22. P0-1: maxAuthRefreshAttempts = 0 means no refresh, fail fast ────── | COMMENT |
| MEDIUM | …java/ceui/pixiv/websocket/RobustWebSocketClientTest.kt | 1022 | // ── 23. P0-1: non-auth failures still go through reconnect strategy ─────── | COMMENT |
| MEDIUM | …java/ceui/pixiv/websocket/RobustWebSocketClientTest.kt | 1047 | // ── 24. P0-1: custom isAuthFailure recognises a 4xxx close code ─────────── | COMMENT |
| MEDIUM | …java/ceui/pixiv/websocket/RobustWebSocketClientTest.kt | 1088 | // ── 25. Binary frame end-to-end ───────────────────────────────────────── | COMMENT |
| MEDIUM | …java/ceui/pixiv/websocket/RobustWebSocketClientTest.kt | 1124 | // ── 26b. disconnect from Idle is a silent no-op ──────────────────────── | COMMENT |
| MEDIUM | …java/ceui/pixiv/websocket/RobustWebSocketClientTest.kt | 1162 | // ── 27. disconnect while Reconnecting cancels the backoff ────────────── | COMMENT |
| MEDIUM | …java/ceui/pixiv/websocket/RobustWebSocketClientTest.kt | 1247 | // ── 29. connect after strategy exhaustion resets and reconnects ──────── | COMMENT |
| MEDIUM | …java/ceui/pixiv/websocket/RobustWebSocketClientTest.kt | 1294 | // ── 30. Mixed failure sequence: 500 backoff then 401 refresh ─────────── | COMMENT |
| MEDIUM | …java/ceui/pixiv/websocket/RobustWebSocketClientTest.kt | 1332 | // ── 31. Connectivity "online" edge while Connected is ignored ────────── | COMMENT |
| MEDIUM | …java/ceui/pixiv/websocket/RobustWebSocketClientTest.kt | 1372 | // ── 32. Empty binary frame end-to-end ────────────────────────────────── | COMMENT |
| MEDIUM | …java/ceui/pixiv/websocket/RobustWebSocketClientTest.kt | 1400 | // ── 33. Messages enqueued during Reconnecting flush in order ─────────── | COMMENT |
| MEDIUM | …java/ceui/pixiv/websocket/RobustWebSocketClientTest.kt | 1457 | // ── 34. Two independent events subscribers see identical sequences ───── | COMMENT |
| MEDIUM | …java/ceui/pixiv/websocket/RobustWebSocketClientTest.kt | 1549 | // ── 36. Network-aware fast retry ──────────────────────────────────────── | COMMENT |
| MEDIUM | …eui/pixiv/websocket/RobustWebSocketClientStressTest.kt | 124 | // ── 1. Single producer, 5 000 messages, strict order ───────────────────── | COMMENT |
| MEDIUM | …eui/pixiv/websocket/RobustWebSocketClientStressTest.kt | 164 | // ── 2. Concurrent producers, per-producer FIFO ─────────────────────────── | COMMENT |
| MEDIUM | …eui/pixiv/websocket/RobustWebSocketClientStressTest.kt | 233 | // ── 3. Burst exceeding buffer (DropOldest) — exactly newest survive ────── | COMMENT |
| MEDIUM | …eui/pixiv/websocket/RobustWebSocketClientStressTest.kt | 320 | // ── 4. Reconnect storm — survive 5 server-side terminations ────────────── | COMMENT |
| MEDIUM | …eui/pixiv/websocket/RobustWebSocketClientStressTest.kt | 453 | // ── 6. Concurrent close while sending — must not crash ─────────────────── | COMMENT |
| MEDIUM | …eui/pixiv/websocket/RobustWebSocketClientStressTest.kt | 487 | // ── 7. Wire-level high-water mark: small HWM + large payloads ───────── | COMMENT |
| MEDIUM | …test/java/ceui/pixiv/websocket/WebSocketManagerTest.kt | 28 | // ── Test doubles ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …test/java/ceui/pixiv/websocket/WebSocketManagerTest.kt | 130 | // ── Tests ───────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ui/pixiv/websocket/ExponentialBackoffWithJitterTest.kt | 112 | // ── shouldReconnect predicate (P0-2 fix) ────────────────────────────────── | COMMENT |
| MEDIUM | …ain/java/ceui/pixiv/websocket/RobustWebSocketClient.kt | 164 | // ── Tuned OkHttpClient ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ain/java/ceui/pixiv/websocket/RobustWebSocketClient.kt | 175 | // ── Internal scope ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ain/java/ceui/pixiv/websocket/RobustWebSocketClient.kt | 181 | // ── State / events ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ain/java/ceui/pixiv/websocket/RobustWebSocketClient.kt | 222 | // ── Outgoing buffer (Channel-based, single-consumer) ────────────────────── | COMMENT |
| MEDIUM | …ain/java/ceui/pixiv/websocket/RobustWebSocketClient.kt | 277 | // ── Internal state (mutated under `lifecycleLock`) ──────────────────────── | COMMENT |
| MEDIUM | …ain/java/ceui/pixiv/websocket/RobustWebSocketClient.kt | 335 | // ── Reconnect coordinator ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ain/java/ceui/pixiv/websocket/RobustWebSocketClient.kt | 387 | // ── Public API ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ain/java/ceui/pixiv/websocket/RobustWebSocketClient.kt | 565 | // ── Outbox consumer ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ain/java/ceui/pixiv/websocket/RobustWebSocketClient.kt | 654 | // ── Internal connect (must hold lifecycleLock) ──────────────────────────── | COMMENT |
| MEDIUM | …ain/java/ceui/pixiv/websocket/RobustWebSocketClient.kt | 707 | // ── OkHttp listener ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ain/java/ceui/pixiv/websocket/RobustWebSocketClient.kt | 803 | // ── Logging helpers ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …main/java/ceui/pixiv/websocket/ReconnectCoordinator.kt | 57 | // ── State (accessed only under the host's lifecycle lock) ──────────────── | COMMENT |
| MEDIUM | …main/java/ceui/pixiv/websocket/ReconnectCoordinator.kt | 76 | // ── Public API (all called under lock) ─────────────────────────────────── | COMMENT |
| MEDIUM | …main/java/ceui/pixiv/websocket/ReconnectCoordinator.kt | 110 | // ── Auth-failure fast path ─────────────────────────────────────── | COMMENT |
| MEDIUM | …main/java/ceui/pixiv/websocket/ReconnectCoordinator.kt | 126 | // ── Normal backoff path ────────────────────────────────────────── | COMMENT |
| MEDIUM | …main/java/ceui/pixiv/websocket/ReconnectCoordinator.kt | 182 | // ── Internal ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ceui/pixiv/ui/bulk/DownloadRepeatLoopSimulationTest.kt | 48 | // ───────────────────────────────────────────────────────────────────── | COMMENT |
| 359 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | mockup.html | 1661 | #screen-user-profile .screen, | COMMENT |
| LOW | mockup.html | 1681 | scrollbar-width: none; | COMMENT |
| LOW | …java/ceui/pixiv/websocket/RobustWebSocketClientTest.kt | 581 | jitterFactor = 0.0, | COMMENT |
| LOW | …eui/pixiv/websocket/RobustWebSocketClientStressTest.kt | 261 | // Note on pre-fetch: the consumer coroutine is launched on | COMMENT |
| LOW | …ain/java/ceui/pixiv/websocket/RobustWebSocketClient.kt | 221 | COMMENT | |
| LOW | …ain/java/ceui/pixiv/websocket/RobustWebSocketClient.kt | 441 | override fun disconnect(code: Int, reason: String) = | COMMENT |
| LOW | …ain/java/ceui/pixiv/websocket/RobustWebSocketClient.kt | 661 | COMMENT | |
| LOW | …test/java/ceui/pixiv/ui/home/RecmdR18InterleaveTest.kt | 241 | // Header must stay at index 0 | COMMENT |
| LOW | …c/main/java/ceui/pixiv/ui/bulk/QueueDownloadManager.kt | 741 | return false | COMMENT |
| LOW | …c/main/java/ceui/pixiv/ui/bulk/QueueDownloadManager.kt | 781 | // - DOWNLOADING:**冷启动 Manager.restore 带回的 stranded 状态**—— | COMMENT |
| LOW | …c/main/java/ceui/pixiv/ui/library/BookmarkLibraryUi.kt | 201 | // 列表突然被拨回顶部。代号变了才动手,追加页的代号不变,绝不会误伤。 | COMMENT |
| LOW | …src/main/java/ceui/pixiv/ui/user/UserTagSearchSheet.kt | 101 | binding.btnClose.setOnClick { dismissAllowingStateLoss() } | COMMENT |
| LOW | …a/ceui/pixiv/ui/search/v3/SearchFilterV3BottomSheet.kt | 761 | showSimplePicker( | COMMENT |
| LOW | …p/src/main/java/ceui/pixiv/ui/common/IllustFeedSync.kt | 161 | // is_followed=false / total_bookmarks 全是「正经值」而非空值,而 ObjectPool 的 | COMMENT |
| LOW | …p/src/main/java/ceui/pixiv/ui/common/IllustFeedSync.kt | 201 | val id = bean.id.toLong() | COMMENT |
| LOW | …ain/java/ceui/pixiv/ui/common/IllustStaggerRenderer.kt | 341 | // 请求尺寸必须显式 override:into(ImageView) 对 centerCrop 会在解码阶段按「请求尺寸」 | COMMENT |
| LOW | …rc/main/java/ceui/pixiv/ui/common/NovelFeedFragment.kt | 381 | b.series.isVisible = series != null && !series.title.isNullOrEmpty() | COMMENT |
| LOW | …ain/java/ceui/pixiv/ui/novel/reader/render/PageView.kt | 161 | COMMENT | |
| LOW | …ceui/pixiv/ui/novel/reader/export/MergedNovelWriter.kt | 421 | y += used | COMMENT |
| LOW | …main/java/ceui/pixiv/ui/download/DoneListV3Fragment.kt | 161 | // 后用 suspend dao.getAll(...) 拿最新行。 | COMMENT |
| LOW | …main/java/ceui/pixiv/ui/download/DoneListV3Fragment.kt | 501 | h.author.text = novel?.user?.name?.takeIf { it.isNotBlank() } | COMMENT |
| LOW | …in/java/ceui/pixiv/ui/download/ActiveListV3Fragment.kt | 201 | } | COMMENT |
| LOW | …va/ceui/pixiv/ui/download/DownloadManagerV3Fragment.kt | 121 | // toolbar 右侧 menu —— 2 个 action 按 tab 分发可见性: | COMMENT |
| LOW | app/src/main/java/ceui/pixiv/cache/ObjectPool.kt | 221 | // 池里的 `is_bookmarked` / `user.is_followed` 只有在**当前用户视角**下才成立:官方列表接口、 | COMMENT |
| LOW | …/src/main/java/ceui/pixiv/chat/api/ShaftChatGateway.kt | 121 | /** | COMMENT |
| LOW | …/src/main/java/ceui/pixiv/chat/api/ShaftChatGateway.kt | 141 | // (manager only subscribes once via its single internal collect). | COMMENT |
| LOW | app/src/main/java/ceui/pixiv/utils/BottomSheetInsets.kt | 41 | */ | COMMENT |
| LOW | …/java/ceui/pixiv/download/template/DefaultTemplates.kt | 21 | // `R18DivideSave` / `AIDivideSave` 设置时才生效;默认这两个设置都关着, | COMMENT |
| LOW | …/java/ceui/pixiv/download/backend/MediaStoreBackend.kt | 161 | } | COMMENT |
| LOW | …/java/ceui/pixiv/download/backend/MediaStoreBackend.kt | 261 | val backdateSec = SilentDownload.backdateSeconds() | COMMENT |
| LOW | …/java/ceui/pixiv/download/backend/MediaStoreBackend.kt | 441 | // RELATIVE_PATH). Hits in the steady state. | COMMENT |
| LOW | …rc/main/java/ceui/pixiv/actions/PixivActionHandlers.kt | 81 | internal fun Throwable.toActionOutcome(isOnline: Boolean): ActionOutcome = when (this) { | COMMENT |
| LOW | …rc/main/java/ceui/pixiv/actions/PixivActionHandlers.kt | 101 | // 但**只推迟这一条**:refresh token 真的死掉时(改过密码、被撤销),每一条动作 | COMMENT |
| LOW | …ain/java/ceui/pixiv/db/mirror/BookmarkMirrorService.kt | 621 | } | COMMENT |
| LOW | app/src/main/java/ceui/pixiv/api/Client.kt | 281 | .retryOnConnectionFailure(true) | COMMENT |
| LOW | app/src/main/java/ceui/lisa/core/Manager.java | 681 | + " nonius=" + item.getNonius()); | COMMENT |
| LOW | app/src/main/java/ceui/lisa/core/Manager.java | 1261 | // 完成回调保持在 IO 线程(DownloadTask 在 Body 跑完后同线程交付),Gson 序列化 + | COMMENT |
| LOW | app/src/main/java/ceui/lisa/core/Manager.java | 1301 | // 整个 illust 的下载流程卡死。 | COMMENT |
| LOW | app/src/main/java/ceui/lisa/core/DownloadItem.java | 21 | private boolean autoSave = true; | COMMENT |
| LOW | …src/main/java/ceui/lisa/fragments/FragmentWorkSpace.kt | 81 | COMMENT | |
| LOW | …src/main/java/ceui/lisa/fragments/FragmentUserRight.kt | 61 | content.add(getString(R.string.string_436)) //相关用户 | COMMENT |
| LOW | app/src/main/java/ceui/lisa/fragments/HistoryFeed.kt | 121 | // load 由 FeedViewModel 的 viewModelScope(Main)调起,这里回主线程再喂池, | COMMENT |
| LOW | app/src/main/java/ceui/lisa/fragments/HistoryFeed.kt | 181 | } | COMMENT |
| LOW | app/src/main/java/ceui/lisa/fragments/HistoryFeed.kt | 361 | // 列宽算高,对齐 recy_illust_stagger)。 | COMMENT |
| LOW | app/src/main/java/ceui/lisa/fragments/FragmentIllust.kt | 641 | // | COMMENT |
| LOW | app/src/main/java/ceui/lisa/utils/Settings.java | 161 | private boolean isFirebaseEnable = true; | COMMENT |
| LOW | app/src/main/java/ceui/lisa/utils/Settings.java | 221 | //屏蔽 AI 时的强度:0=完全不显示(默认),1=模糊粒子化 | COMMENT |
| LOW | …/src/main/java/ceui/lisa/utils/AnimatedGifEncoder.java | 1101 | int free_ent = 0; // first unused entry | COMMENT |
| LOW | …/src/main/java/ceui/lisa/utils/AnimatedGifEncoder.java | 1121 | int ClearCode; | COMMENT |
| LOW | …c/main/java/ceui/lisa/activities/TemplateActivity.java | 121 | // callback,AndroidX 就会向 WindowOnBackInvokedDispatcher 注册 OnBackInvokedCallback, | COMMENT |
| LOW | …p/src/main/java/ceui/lisa/activities/MainActivity.java | 361 | getDrawer().onTouchEvent(ev); | COMMENT |
| LOW | app/src/main/java/ceui/lisa/activities/Shaft.java | 361 | // android.widget.Magnifier.getPosition() NPE:读 selectable/editable | COMMENT |
| LOW | app/src/main/java/ceui/lisa/activities/Shaft.java | 381 | // host app 在数据层无法阻止这个框架内部 bug。它会自愈:坏的这帧布局回退后, | COMMENT |
| LOW | app/src/main/java/ceui/lisa/activities/Shaft.java | 481 | // 突然冒出来。init 自身只有 ~3ms(同步部分只是赋 context + launch)。 | COMMENT |
| LOW | app/src/main/java/ceui/lisa/activities/Shaft.java | 521 | COMMENT | |
| LOW | app/src/main/java/ceui/lisa/activities/Shaft.java | 701 | COMMENT | |
| LOW | app/src/main/java/ceui/lisa/activities/Shaft.java | 901 | // 退回 H1.1 后同款 AIOOBE 仍在线上复现(栈里已经是 Http1ExchangeCodec.writeRequest), | COMMENT |
| LOW | app/src/main/java/ceui/lisa/repo/SearchIllustRepo.kt | 101 | // 改由搜索页按真实 x_restrict 客户端打隐藏标记(ceui.pixiv.ui.search.shouldHideSearchIllust)。 | COMMENT |
| LOW | app/src/main/cpp/shaft_image_filter.cpp | 1 | // 图片滤镜内核:把 Kotlin 侧采样好的 3D LUT(+ 暗角 + 颗粒)作用到 ARGB_8888 位图上。 | COMMENT |
| LOW | app/src/main/cpp/shaft_image_filter.cpp | 21 | #include <atomic> | COMMENT |
| 2 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | app/src/google/assets/synonym_dict_builtin.json | 1 | {"version":1,"targets":[{"name":"R-18","synonyms":[{"name":"18禁","remark":null}]},{"name":"碧蓝档案","synonyms":[{"name":"ブル | CODE |
| HIGH | app/src/github/assets/synonym_dict_builtin.json | 1 | {"version":1,"targets":[{"name":"R-18","synonyms":[{"name":"18禁","remark":null}]},{"name":"碧蓝档案","synonyms":[{"name":"ブル | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | …ain/java/ceui/pixiv/ui/translate/MangaOcrRecognizer.kt | 174 | // Step 1: Preprocess image → [1, 3, H, W] float tensor | COMMENT |
| LOW⚡ | …ain/java/ceui/pixiv/ui/translate/MangaOcrRecognizer.kt | 181 | // Step 2: Run encoder | COMMENT |
| LOW⚡ | …ain/java/ceui/pixiv/ui/translate/MangaOcrRecognizer.kt | 185 | // Step 3: Autoregressive decoding + per-token log P 累计 | COMMENT |
| LOW | …ain/java/ceui/pixiv/ui/translate/MangaOcrRecognizer.kt | 257 | // Step 4: Decode tokens to text. 兼容两种 HF tokenizer: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | …ain/java/ceui/pixiv/ui/translate/MangaOcrRecognizer.kt | 174 | // Step 1: Preprocess image → [1, 3, H, W] float tensor | COMMENT |
| LOW⚡ | …ain/java/ceui/pixiv/ui/translate/MangaOcrRecognizer.kt | 181 | // Step 2: Run encoder | COMMENT |
| LOW⚡ | …ain/java/ceui/pixiv/ui/translate/MangaOcrRecognizer.kt | 185 | // Step 3: Autoregressive decoding + per-token log P 累计 | COMMENT |
| LOW | …ain/java/ceui/pixiv/ui/translate/MangaOcrRecognizer.kt | 257 | // Step 4: Decode tokens to text. 兼容两种 HF tokenizer: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | scripts/find_missing_used_strings.py | 240 | print(f"warning: used strings not found in {source.path}: {len(undefined)}") | CODE |
| HIGH | scripts/prepare_translation_model.py | 17 | mkdir -p output/model_local && cd output/model_local | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | app/src/google/assets/synonym_dict_builtin.json | 1 | {"version":1,"targets":[{"name":"R-18","synonyms":[{"name":"18禁","remark":null}]},{"name":"碧蓝档案","synonyms":[{"name":"ブル | CODE |
| MEDIUM | app/src/github/assets/synonym_dict_builtin.json | 1 | {"version":1,"targets":[{"name":"R-18","synonyms":[{"name":"18禁","remark":null}]},{"name":"碧蓝档案","synonyms":[{"name":"ブル | CODE |
| MEDIUM | …main/java/ceui/pixiv/ui/slideshow/SlideshowFragment.kt | 207 | // stays seamless (the previous image keeps playing). | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/prepare_manga_ocr_model.py | 17 | CODE | |
| LOW | scripts/prepare_manga_ocr_model.py | 20 | CODE | |
| LOW | scripts/build_readme_assets.py | 25 | CODE | |
| LOW | scripts/find_missing_used_strings.py | 25 | CODE | |
| LOW | scripts/sort_locale_strings.py | 27 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/check_plaza_i18n.py | 21 | CODE | |
| LOW | scripts/build_readme_assets.py | 95 | CODE | |
| LOW | scripts/find_missing_used_strings.py | 221 | CODE | |
| LOW | scripts/sort_locale_strings.py | 204 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | mockup.html | 1853 | <input class="input-field" placeholder="user@example.com"> | CODE |
| LOW | …test/java/ceui/loxia/UserMigrationCompatibilityTest.kt | 43 | "mail_address": "user@example.com", | CODE |
| LOW | …test/java/ceui/loxia/UserMigrationCompatibilityTest.kt | 63 | assertEquals("user@example.com", user.mail_address) | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/find_missing_used_strings.py | 266 | except Exception as exc: | CODE |
| LOW | scripts/sort_locale_strings.py | 234 | except Exception as exc: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/build_readme_assets.py | 168 | CODE |