Skip to content

Commit

Permalink
🐛 fix: re-play current song
Browse files Browse the repository at this point in the history
Signed-off-by: SimonShiki <[email protected]>
  • Loading branch information
SimonShiki committed Aug 11, 2024
1 parent e861c23 commit e1f50be
Show file tree
Hide file tree
Showing 6 changed files with 146 additions and 8 deletions.
60 changes: 60 additions & 0 deletions .github/workflows/nightly.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
name: 'nightly'

on:
push:
branches:
- main

jobs:
publish-tauri:
permissions:
contents: write
strategy:
fail-fast: false
matrix:
include:
- platform: 'macos-latest' # for Arm based macs (M1 and above).
args: '--target aarch64-apple-darwin'
- platform: 'macos-latest' # for Intel based macs.
args: '--target x86_64-apple-darwin'
- platform: 'ubuntu-22.04' # for Tauri v1 you could replace this with ubuntu-20.04.
args: ''
- platform: 'windows-latest'
args: ''

runs-on: ${{ matrix.platform }}
steps:
- uses: actions/checkout@v4

- name: setup node
uses: actions/setup-node@v4
with:
node-version: lts/*

- name: install Rust stable
uses: dtolnay/rust-toolchain@stable
with:
# Those targets are only used on macos runners so it's in an `if` to slightly speed up windows and linux builds.
targets: ${{ matrix.platform == 'macos-latest' && 'aarch64-apple-darwin,x86_64-apple-darwin' || '' }}

- name: install dependencies (ubuntu only)
if: matrix.platform == 'ubuntu-22.04' # This must match the platform value defined above.
run: |
sudo apt-get update
sudo apt-get install -y libwebkit2gtk-4.0-dev libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf
# webkitgtk 4.0 is for Tauri v1 - webkitgtk 4.1 is for Tauri v2.
# You can remove the one that doesn't apply to your app to speed up the workflow a bit.

- name: install frontend dependencies
run: yarn install # change this to npm, pnpm or bun depending on which one you use.

- uses: tauri-apps/tauri-action@v0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tagName: nightly # the action automatically replaces \_\_VERSION\_\_ with the app version.
releaseName: 'Nightly'
releaseBody: ''
releaseDraft: false
prerelease: true
args: ${{ matrix.args }}
62 changes: 62 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
name: 'release'

on:
push:
branches:
- release

# This workflow will trigger on each push to the `release` branch to create or update a GitHub release, build your app, and upload the artifacts to the release.

jobs:
publish-tauri:
permissions:
contents: write
strategy:
fail-fast: false
matrix:
include:
- platform: 'macos-latest' # for Arm based macs (M1 and above).
args: '--target aarch64-apple-darwin'
- platform: 'macos-latest' # for Intel based macs.
args: '--target x86_64-apple-darwin'
- platform: 'ubuntu-22.04' # for Tauri v1 you could replace this with ubuntu-20.04.
args: ''
- platform: 'windows-latest'
args: ''

runs-on: ${{ matrix.platform }}
steps:
- uses: actions/checkout@v4

- name: setup node
uses: actions/setup-node@v4
with:
node-version: lts/*

- name: install Rust stable
uses: dtolnay/rust-toolchain@stable
with:
# Those targets are only used on macos runners so it's in an `if` to slightly speed up windows and linux builds.
targets: ${{ matrix.platform == 'macos-latest' && 'aarch64-apple-darwin,x86_64-apple-darwin' || '' }}

- name: install dependencies (ubuntu only)
if: matrix.platform == 'ubuntu-22.04' # This must match the platform value defined above.
run: |
sudo apt-get update
sudo apt-get install -y libwebkit2gtk-4.0-dev libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf
# webkitgtk 4.0 is for Tauri v1 - webkitgtk 4.1 is for Tauri v2.
# You can remove the one that doesn't apply to your app to speed up the workflow a bit.

- name: install frontend dependencies
run: yarn install # change this to npm, pnpm or bun depending on which one you use.

- uses: tauri-apps/tauri-action@v0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tagName: cicadas-v__VERSION__ # the action automatically replaces \_\_VERSION\_\_ with the app version.
releaseName: 'Cicadas v__VERSION__'
releaseBody: 'See the assets to download this version and install.'
releaseDraft: true
prerelease: false
args: ${{ matrix.args }}
3 changes: 3 additions & 0 deletions src-tauri/src/audio.rs
Original file line number Diff line number Diff line change
Expand Up @@ -271,6 +271,9 @@ pub async fn play_local_file(app: tauri::AppHandle, audio_state: State<'_, Audio
let sink = Sink::try_new(&audio_state.stream_handle)
.map_err(|e| AppError::SinkCreationError(e.to_string()))?;

// Report the actual duration
let _ = app.emit("update_duration", source.total_duration().unwrap().as_millis());

sink.append(source);

*sink_guard = Some(sink);
Expand Down
2 changes: 1 addition & 1 deletion src/components/artist-item.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ interface ArtistItemProps {
onClick (artist: Artist): void;
}

export default function ArtistItem({ artist, onClick }: ArtistItemProps) {
export default function ArtistItem ({ artist, onClick }: ArtistItemProps) {
return (
<div className='flex flex-col gap-2 w-36 h-48 active:scale-95 border-(1 solid transparent) hover:border-outline-sec bg-black bg-op-0 hover:bg-op-5 rounded-lg p-1.5 transition-all' onClick={() => {
onClick(artist);
Expand Down
2 changes: 1 addition & 1 deletion src/pages/settings.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ export default function Settings () {
<span className='grow-1'>
<FormattedMessage defaultMessage='Use streaming (Experimental)' />
</span>
<Tooltip content={intl.formatMessage({ defaultMessage: 'Streaming does not currently support adjusting playback progress'})} placement='left' tooltipClassName='w-60'>
<Tooltip content={intl.formatMessage({ defaultMessage: 'Streaming does not currently support adjusting playback progress'})} placement='left' tooltipClassName='min-w-50'>
<Switch checked={streaming} onChange={setStreaming} />
</Tooltip>
</div>
Expand Down
25 changes: 19 additions & 6 deletions src/utils/player.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { invoke } from '@tauri-apps/api/core';
import { settingsJotai } from '../jotais/settings';
import { transformChunk } from './chunk-transformer';
import { focusAtom } from 'jotai-optics';
import { WritableAtom } from 'jotai';
import { atom, WritableAtom } from 'jotai';
import { SetStateAction } from 'react';

type MediaControlPayload = 'play' | 'pause' | 'toggle' | 'next' | 'previous';
Expand Down Expand Up @@ -153,12 +153,19 @@ function setupEventListeners () {
sharedStore.set(durationJotai, e.payload);
});

let prevsongId: string | number = -1;
let prevSongId: string | number = -1;
sharedStore.sub(currentSongJotai, () => {
const currentSong = sharedStore.get(currentSongJotai);
if (currentSong && prevsongId !== currentSong.id) {
const replayCurrentSong = sharedStore.get(replayCurrentSongAtom);

if (!currentSong) return;

if (prevSongId !== currentSong.id || replayCurrentSong) {
playCurrentSong();
prevsongId = currentSong.id;
prevSongId = currentSong.id;
if (replayCurrentSong) {
sharedStore.set(replayCurrentSongAtom, false);
}
}
});

Expand Down Expand Up @@ -210,6 +217,8 @@ function factorToVolume (amplitude: number) {

}

const replayCurrentSongAtom = atom(false);

async function updateProgress () {
try {
const progress = await invoke<number>('get_playback_progress');
Expand All @@ -228,7 +237,7 @@ async function checkSongProgress () {
sharedStore.set(backendPlayingJotai, false);
switch (playmode) {
case 'single-recycle':
await playCurrentSong();
sharedStore.set(replayCurrentSongAtom, true);
break;
case 'single':
sharedStore.set(playingJotai, false);
Expand Down Expand Up @@ -259,6 +268,10 @@ export function shuffleNewSongs (playlist: Song<string>[], newSongsCount: number
}

export function setCurrentSong (song: Song<string>) {
const currentSong = sharedStore.get(currentSongJotai);
if (currentSong && currentSong.id === song.id) {
sharedStore.set(replayCurrentSongAtom, true);
}
sharedStore.set(currentSongJotai, song);
}

Expand Down Expand Up @@ -300,7 +313,7 @@ export function next () {
const nextIndex = getNextIndex(currentIndex, playlist.length);

if (nextIndex !== -1) {
sharedStore.set(currentSongJotai, playlist[nextIndex]);
setCurrentSong(playlist[nextIndex]);
if (playMode !== 'single') {
sharedStore.set(playingJotai, true);
}
Expand Down

0 comments on commit e1f50be

Please sign in to comment.