Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
a1479f2
remove heat reduction
m-anyone Jun 30, 2026
d4328a5
hover not on mobile
m-anyone Jun 30, 2026
0a7bf8b
remove slider thumb
m-anyone Jun 30, 2026
6dc2a13
Merge pull request #192 from m-anyone/beta.v3
mebtte Jun 30, 2026
ba5806c
fix pagination
mebtte Jun 30, 2026
c595f1a
fix artist drawer
mebtte Jun 30, 2026
c174ea4
improve select
m-anyone Jul 1, 2026
4adc821
redesign spinner
m-anyone Jul 1, 2026
61caa9e
improve tab styles
m-anyone Jul 1, 2026
d4f8c9a
fix exploration on safari
m-anyone Jul 1, 2026
ac1fbbd
fix tab style
m-anyone Jul 1, 2026
0ff9a12
remove background
m-anyone Jul 1, 2026
8a15628
remove languageselect from storybook
m-anyone Jul 1, 2026
36e5cac
add storybook to cli
m-anyone Jul 1, 2026
16d5dc1
improve version display
m-anyone Jul 1, 2026
be609c0
reduce same components
m-anyone Jul 1, 2026
31a2a3f
improve list view
m-anyone Jul 1, 2026
d3be924
improve search words
m-anyone Jul 1, 2026
a5777db
improve search
m-anyone Jul 1, 2026
68c7598
improve admin sidebar
m-anyone Jul 1, 2026
82e247b
improve avatar
m-anyone Jul 1, 2026
e9b70f3
Merge pull request #193 from m-anyone/beta.v3
mebtte Jul 1, 2026
2840e92
improve musicbill-music drawer
m-anyone Jul 2, 2026
2415205
remove repeated instance
m-anyone Jul 2, 2026
1726206
fix sidebar style
m-anyone Jul 2, 2026
caff99a
improve words
m-anyone Jul 2, 2026
faf27c8
improve words
m-anyone Jul 2, 2026
01a809e
remove default cover
m-anyone Jul 2, 2026
8dfc383
upgrade typescript
m-anyone Jul 2, 2026
c023e5b
improve artist search
m-anyone Jul 3, 2026
e983fb8
remove repeated default cover
m-anyone Jul 3, 2026
bfc2e3d
improve lyric panel
m-anyone Jul 3, 2026
0e2db41
use favicon as logo
m-anyone Jul 3, 2026
f7b39a3
Merge pull request #194 from m-anyone/beta.v3
mebtte Jul 3, 2026
21f247d
improve apple
mebtte Jul 5, 2026
71f9b5b
fix select on mobile drawer
m-anyone Jul 3, 2026
9fc558a
apple test
m-anyone Jul 7, 2026
58483e8
fix apple test
m-anyone Jul 7, 2026
7f8f511
fix apple test
m-anyone Jul 7, 2026
3b2dc59
fix apple test
m-anyone Jul 7, 2026
39f96d5
Merge pull request #195 from m-anyone/beta.v3
mebtte Jul 7, 2026
894080a
thumbnail for musicbill cover
mebtte Jul 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions .github/workflows/pull_request_checks.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -53,3 +53,28 @@ jobs:

- name: Run PWA tests
run: npm run test

apple-test:
name: Apple Test
runs-on: macos-15
defaults:
run:
working-directory: apps/apple
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Install XcodeGen
run: brew install xcodegen

- name: Generate Xcode project
run: xcodegen generate

- name: Run Apple tests
run: >
xcodebuild test
-project Cicada.xcodeproj
-scheme Cicada
-destination 'platform=macOS'
CODE_SIGNING_ALLOWED=NO
21 changes: 15 additions & 6 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -15,16 +15,25 @@ define stage_ffmpeg_bundle
node scripts/prepare_ffmpeg_bundle.mjs --target $(1) --version "$(FFMPEG_VERSION)" $(if $($(2)),--archive "$($(2))") $(if $($(3)),--sha256 "$($(3))")
endef

.PHONY: pwa release docker clean ffmpeg-bundles ffmpeg-bundle-darwin-arm64 ffmpeg-bundle-windows-amd64 ffmpeg-bundle-windows-arm64 ffmpeg-bundle-linux-amd64 ffmpeg-bundle-linux-arm64
.PHONY: pwa storybook release docker clean ffmpeg-bundles ffmpeg-bundle-darwin-arm64 ffmpeg-bundle-windows-amd64 ffmpeg-bundle-windows-arm64 ffmpeg-bundle-linux-amd64 ffmpeg-bundle-linux-arm64

## 安装前端依赖 (供 pwa 与 storybook 构建复用, 依赖 lockfile 变更时才重装)
apps/pwa/node_modules/.package-lock.json: apps/pwa/package-lock.json
npm ci --prefix apps/pwa

## 构建 PWA 并嵌入 CLI
pwa:
pwa: apps/pwa/node_modules/.package-lock.json
node scripts/build_version.mjs validate "$(VERSION)"
npm ci --prefix apps/pwa
CICADA_VERSION=$(VERSION) npm run build --prefix apps/pwa
rm -rf $(CLI_DIR)/pwa/dist
cp -R apps/pwa/dist $(CLI_DIR)/pwa/dist

## 构建 Storybook 并嵌入 CLI (托管于 /storybook)
storybook: apps/pwa/node_modules/.package-lock.json
npm run build-storybook --prefix apps/pwa
rm -rf $(CLI_DIR)/storybook/static
cp -R apps/pwa/storybook-static $(CLI_DIR)/storybook/static

ffmpeg-bundle-darwin-arm64:
$(call stage_ffmpeg_bundle,darwin-arm64,FFMPEG_ARCHIVE_DARWIN_ARM64,FFMPEG_SHA256_DARWIN_ARM64)

Expand All @@ -48,7 +57,7 @@ ffmpeg-bundles: \
ffmpeg-bundle-linux-arm64

## 全平台构建发布包 (默认目标)
release: pwa ffmpeg-bundles
release: pwa storybook ffmpeg-bundles
rm -rf $(BUILD_DIR)
mkdir -p $(BUILD_DIR)
mkdir -p $(BUILD_DIR)/darwin-arm64
Expand All @@ -74,7 +83,7 @@ release: pwa ffmpeg-bundles
$(BUILD_DIR)/linux-arm64

## 构建 Linux 多架构二进制 (供 Docker buildx 使用, 不压缩)
docker: pwa ffmpeg-bundle-linux-amd64 ffmpeg-bundle-linux-arm64
docker: pwa storybook ffmpeg-bundle-linux-amd64 ffmpeg-bundle-linux-arm64
rm -rf $(BUILD_DIR)
mkdir -p $(BUILD_DIR)/linux-amd64
$(call build_cli,linux,amd64,$(BUILD_DIR)/linux-amd64/cicada)
Expand All @@ -84,4 +93,4 @@ docker: pwa ffmpeg-bundle-linux-amd64 ffmpeg-bundle-linux-arm64

## 清理构建产物
clean:
rm -rf $(BUILD_DIR) apps/cli/pwa/dist apps/pwa/dist apps/cli/internal/ffmpeg/generated apps/cli/internal/ffmpeg/zz_bundle_*.go
rm -rf $(BUILD_DIR) apps/cli/pwa/dist apps/pwa/dist apps/cli/storybook/static apps/pwa/storybook-static apps/cli/internal/ffmpeg/generated apps/cli/internal/ffmpeg/zz_bundle_*.go
160 changes: 160 additions & 0 deletions apps/apple/Cicada.xcodeproj/project.pbxproj

Large diffs are not rendered by default.

27 changes: 27 additions & 0 deletions apps/apple/Cicada.xcodeproj/xcshareddata/xcschemes/Cicada.xcscheme
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,20 @@
ReferencedContainer = "container:Cicada.xcodeproj">
</BuildableReference>
</BuildActionEntry>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "NO"
buildForProfiling = "NO"
buildForArchiving = "NO"
buildForAnalyzing = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "2873F1B452FA6D23CE8135B7"
BuildableName = "CicadaTests.xctest"
BlueprintName = "CicadaTests"
ReferencedContainer = "container:Cicada.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
Expand All @@ -39,7 +53,20 @@
</BuildableReference>
</MacroExpansion>
<Testables>
<TestableReference
skipped = "NO"
parallelizable = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "2873F1B452FA6D23CE8135B7"
BuildableName = "CicadaTests.xctest"
BlueprintName = "CicadaTests"
ReferencedContainer = "container:Cicada.xcodeproj">
</BuildableReference>
</TestableReference>
</Testables>
<CommandLineArguments>
</CommandLineArguments>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
Expand Down
19 changes: 19 additions & 0 deletions apps/apple/Cicada/App/AppNavigationStore.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import Foundation

struct PlayerContentRequest: Identifiable, Equatable {
let id = UUID()
let selection: PlayerContentSelection
}

final class AppNavigationStore: ObservableObject {
@Published private(set) var playerContentRequest: PlayerContentRequest?

func showSettings() {
playerContentRequest = PlayerContentRequest(selection: .settings)
}

func consume(_ request: PlayerContentRequest) {
guard playerContentRequest?.id == request.id else { return }
playerContentRequest = nil
}
}
34 changes: 30 additions & 4 deletions apps/apple/Cicada/App/CicadaApp.swift
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
import SwiftUI

#if os(macOS)
import AppKit
#endif

#if os(macOS)
private enum WindowMetrics {
static let minimumWidth: CGFloat = 360
Expand All @@ -9,23 +13,45 @@ private enum WindowMetrics {

@main
struct CicadaApp: App {
@StateObject private var navigationStore = AppNavigationStore()

#if os(macOS)
init() {
NSWindow.allowsAutomaticWindowTabbing = false
}
#endif

var body: some Scene {
WindowGroup {
#if os(macOS)
Window("Cicada", id: "main") {
ContentView()
#if os(macOS)
.environmentObject(navigationStore)
.frame(
minWidth: WindowMetrics.minimumWidth,
minHeight: WindowMetrics.minimumHeight
)
#endif
}
#if os(macOS)
.defaultSize(
width: WindowMetrics.minimumWidth,
height: WindowMetrics.minimumHeight
)
.windowStyle(.hiddenTitleBar)
.windowResizability(.contentMinSize)
.commands {
CommandGroup(replacing: .appSettings) {
Button("Settings...") {
navigationStore.showSettings()
}
.keyboardShortcut(",", modifiers: .command)
}

CommandGroup(replacing: .newItem) {}
}
#else
WindowGroup {
ContentView()
.environmentObject(navigationStore)
}
#endif
}
}
Loading
Loading