Pixiv第三方Android客户端
This report summarizes scanner evidence for CeuiLiSA/Pixiv-Shaft, a Kotlin project with 8,057 GitHub stars. SynthScan examined 379,878 lines of code across 2575 source files, recording 582 pattern matches distributed across 13 syntactic categories. The legacy adjusted pattern signal is 6.7 (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? 70 finding(s).
Are imports declared and package/API names verified? 120 finding(s).
Are wrappers, guards, and repeated structures necessary? 393 finding(s).
Which changes need focused human review? 582 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 582 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 | 155 | 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 | 327 | addView(duration.apply { maxLines = 1 }, com.google.android.flexbox.FlexboxLayout.LayoutParams(-2, -2).apply | CODE |
| CRITICAL | …va/ceui/pixiv/ui/novel/reader/NovelReaderV3Fragment.kt | 1256 | val charIndex = ceui.pixiv.ui.novel.reader.paginate.ContentParser.resolveJumpTarget(toks, target) | CODE |
| CRITICAL | …va/ceui/pixiv/ui/novel/reader/NovelReaderV3Fragment.kt | 1583 | return ceui.pixiv.ui.novel.local.LocalLibraryStore.novelIdFor(localKey) | CODE |
| CRITICAL | …a/ceui/pixiv/ui/novel/reader/NovelReaderV3ViewModel.kt | 209 | val text = ceui.pixiv.ui.novel.local.TextDecoder.decode(bytes) | 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 | 113 | ceui.pixiv.ui.settings.WitDialogGallery.showWit(mContext)); | CODE |
| CRITICAL | …/ceui/lisa/fragments/FragmentSettingsExperimental.java | 164 | ceui.pixiv.ui.debug.DebugMirrorBannerTrigger.show(mContext)); | 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 | 284 | 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 | 866 | if (ceui.pixiv.i18n.AppLocales.INSTANCE.isFollowingSystem()) { | CODE |
| CRITICAL⚡ | …va/ceui/lisa/fragments/FragmentSettingsAppearance.java | 869 | Locale loc = ceui.pixiv.i18n.AppLocales.INSTANCE.currentLocale(); | CODE |
| CRITICAL⚡ | …va/ceui/lisa/fragments/FragmentSettingsAppearance.java | 870 | 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 |
| CRITICAL | …ain/java/ceui/lisa/fragments/FragmentSettingsData.java | 540 | ceui.pixiv.db.bulkclean.BulkDownloadCacheCleaner.wipe(appCtx); | CODE |
| CRITICAL⚡ | …/java/ceui/lisa/fragments/FragmentSettingsViewing.java | 206 | if (ceui.pixiv.ui.interpolate.RifePrefs.isEnabled() | CODE |
| CRITICAL⚡ | …/java/ceui/lisa/fragments/FragmentSettingsViewing.java | 207 | && !ceui.pixiv.ui.interpolate.RifeInterpolator.INSTANCE.isAvailable(mContext)) { | CODE |
| CRITICAL⚡ | …/java/ceui/lisa/fragments/FragmentSettingsViewing.java | 210 | baseBind.ugoiraRifeEnable.setChecked(ceui.pixiv.ui.interpolate.RifePrefs.isEnabled()); | CODE |
| CRITICAL⚡ | …/java/ceui/lisa/fragments/FragmentSettingsViewing.java | 220 | if (isChecked && !ceui.pixiv.ui.interpolate.RifeInterpolator.INSTANCE.isAvailable(mContext)) { | CODE |
| CRITICAL⚡ | …/java/ceui/lisa/fragments/FragmentSettingsViewing.java | 226 | intent.putExtra("rife_model_name", ceui.pixiv.ui.interpolate.RifeModel.RIFE_V4_6.name()); | CODE |
| CRITICAL | …/java/ceui/lisa/fragments/FragmentSettingsViewing.java | 622 | if (ceui.pixiv.ui.interpolate.RifeInterpolator.INSTANCE.isAvailable(mContext)) { | CODE |
| CRITICAL | …/java/ceui/lisa/fragments/FragmentSettingsViewing.java | 641 | ceui.pixiv.ui.interpolate.RifePrefs.setEnabled(enabled); | CODE |
| 50 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 | 306 | // ── 4. Reconnect storm — survive 5 server-side terminations ────────────── | COMMENT |
| MEDIUM | …eui/pixiv/websocket/RobustWebSocketClientStressTest.kt | 439 | // ── 6. Concurrent close while sending — must not crash ─────────────────── | COMMENT |
| MEDIUM | …eui/pixiv/websocket/RobustWebSocketClientStressTest.kt | 473 | // ── 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 |
| 330 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 | …eui/pixiv/websocket/RobustWebSocketClientStressTest.kt | 341 | // race where producer outpaces server-side close. | 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 | …c/main/java/ceui/pixiv/ui/bulk/QueueDownloadManager.kt | 741 | // ugoira 走独立管线(getGifPackage → zip → 解压 → encodeGif → 写用户目录), | 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 | REQUEST_RESOLUTION, | COMMENT |
| LOW | …p/src/main/java/ceui/pixiv/ui/common/IllustFeedSync.kt | 161 | // is_followed=false / total_bookmarks 全是「正经值」而非空值,而 ObjectPool 的 | COMMENT |
| LOW | …ain/java/ceui/pixiv/ui/common/IllustStaggerRenderer.kt | 361 | // 而 GlideUrl.equals() 要求 headers 也相等才算「同一请求」——这里的 headers 又是个 | COMMENT |
| LOW | …rc/main/java/ceui/pixiv/ui/common/NovelFeedFragment.kt | 401 | // clickable 复位回 false,view 会继续吃掉触摸事件又什么都不做,root 的 unmuteOr | COMMENT |
| LOW | …ain/java/ceui/pixiv/ui/novel/reader/render/PageView.kt | 161 | COMMENT | |
| LOW | …ceui/pixiv/ui/novel/reader/export/MergedNovelWriter.kt | 421 | } | COMMENT |
| LOW | …in/java/ceui/pixiv/ui/download/ActiveListV3Fragment.kt | 181 | } | COMMENT |
| LOW | …in/java/ceui/pixiv/ui/download/ActiveListV3Fragment.kt | 201 | // 用户清完仍有 ugoira 正在跑、跑完还往用户图库写 GIF(违反"全清") | COMMENT |
| LOW | …va/ceui/pixiv/ui/download/DownloadManagerV3Fragment.kt | 121 | TabLayoutMediator(tabs!!, pager) { tab, pos -> | COMMENT |
| LOW | …/src/main/java/ceui/pixiv/chat/api/ShaftChatGateway.kt | 121 | * and connecting still wait for EventReporter.start and the login signal. | 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 | retryAfterMs = retryAfterMs(), | COMMENT |
| LOW | …rc/main/java/ceui/pixiv/actions/PixivActionHandlers.kt | 101 | 400, 401 -> ActionOutcome.Retry(cause = this, scope = RetryScope.ACTION) | COMMENT |
| LOW | …ain/java/ceui/pixiv/db/mirror/BookmarkMirrorService.kt | 561 | // ⚠️ 请求回来之后(**无论成败**)必须重新确认这一轮还算数。 | COMMENT |
| LOW | app/src/main/java/ceui/pixiv/api/Client.kt | 261 | .connectTimeout(6, TimeUnit.SECONDS) | 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 | 181 | } else { | COMMENT |
| LOW | app/src/main/java/ceui/lisa/fragments/HistoryFeed.kt | 361 | 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 | 241 | private int imageHostMode = 0; | 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 把全 app 几乎所有页面的预测式返回都掐死了。 | COMMENT |
| LOW | …p/src/main/java/ceui/lisa/activities/UserActivityV3.kt | 81 | private lateinit var mUserViewModel: UserViewModel | COMMENT |
| LOW | …p/src/main/java/ceui/lisa/activities/MainActivity.java | 261 | @Override | COMMENT |
| LOW | app/src/main/java/ceui/lisa/activities/Shaft.java | 281 | // 更新(走主线程 Handler 回调,正是本处重入的 Looper.loop)就在 getPosition() | COMMENT |
| LOW | app/src/main/java/ceui/lisa/activities/Shaft.java | 301 | // RecyclerView 帧,绝不会吞掉应用自己抛的 IndexOutOfBoundsException。 | COMMENT |
| LOW | app/src/main/java/ceui/lisa/activities/Shaft.java | 421 | // “这幅画下过没” 从 illustGson blob 全表 LIKE 扫描(2GB+ 卡)转成走索引。 | COMMENT |
| LOW | app/src/main/java/ceui/lisa/activities/Shaft.java | 621 | } | COMMENT |
| LOW | app/src/main/java/ceui/lisa/activities/Shaft.java | 821 | // 必须是 network interceptor,且要挂在最外层才能连进度追踪自己的 body 包装一起盖住 | COMMENT |
| LOW | app/src/main/java/ceui/lisa/repo/SearchIllustRepo.kt | 101 | // 改由 FilterMapper.setSearchR18Restriction 按真实 x_restrict 客户端过滤(见 update())。 | COMMENT |
| LOW | .claude/skills/divebug/statusline.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | feeds/src/main/java/ceui/pixiv/feeds/FeedFragment.kt | 141 | // 下拉刷新转圈 + 空态插画共用一份宿主配色(见 [FeedHost.theme])。切主题/日夜都会重建 | COMMENT |
| 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 |