added cargo files

This commit is contained in:
2026-03-03 10:57:43 -05:00
parent 478a90e01b
commit 169df46bc2
813 changed files with 227273 additions and 9 deletions

View File

@@ -0,0 +1,112 @@
// Copyright 2020 Ben Hills and the project contributors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:pinepods_mobile/entities/episode.dart';
import 'package:pinepods_mobile/entities/sleep.dart';
import 'package:pinepods_mobile/state/queue_event_state.dart';
import 'package:pinepods_mobile/state/transcript_state_event.dart';
import 'package:rxdart/rxdart.dart';
enum AudioState {
none,
buffering,
starting,
playing,
pausing,
stopped,
error,
}
class PositionState {
Duration position;
late Duration length;
late int percentage;
Episode? episode;
final bool buffering;
PositionState({
required this.position,
required this.length,
required this.percentage,
this.episode,
this.buffering = false,
});
PositionState.emptyState()
: position = const Duration(seconds: 0),
length = const Duration(seconds: 0),
percentage = 0,
buffering = false;
}
/// This class defines the audio playback options supported by Pinepods.
///
/// The implementing classes will then handle the specifics for the platform we are running on.
abstract class AudioPlayerService {
/// Play a new episode, optionally resume at last save point.
Future<void> playEpisode({required Episode episode, bool resume = true});
/// Resume playing of current episode
Future<void> play();
/// Stop playing of current episode. Set update to false to stop
/// playback without saving any episode or positional updates.
Future<void> stop();
/// Pause the current episode.
Future<void> pause();
/// Rewind the current episode by pre-set number of seconds.
Future<void> rewind();
/// Fast forward the current episode by pre-set number of seconds.
Future<void> fastForward();
/// Seek to the specified position within the current episode.
Future<void> seek({required int position});
/// Call when the app is resumed to re-establish the audio service.
Future<Episode?> resume();
/// Add an episode to the playback queue
Future<void> addUpNextEpisode(Episode episode);
/// Remove an episode from the playback queue if it exists
Future<bool> removeUpNextEpisode(Episode episode);
/// Remove an episode from the playback queue if it exists
Future<bool> moveUpNextEpisode(Episode episode, int oldIndex, int newIndex);
/// Empty the up next queue
Future<void> clearUpNext();
/// Call when the app is about to be suspended.
Future<void> suspend();
/// Call to set the playback speed.
Future<void> setPlaybackSpeed(double speed);
/// Call to toggle trim silence.
Future<void> trimSilence(bool trim);
/// Call to toggle trim silence.
Future<void> volumeBoost(bool boost);
Future<void> searchTranscript(String search);
Future<void> clearTranscript();
void sleep(Sleep sleep);
Episode? nowPlaying;
/// Event listeners
Stream<AudioState>? playingState;
ValueStream<PositionState>? playPosition;
ValueStream<Episode?>? episodeEvent;
Stream<TranscriptState>? transcriptEvent;
Stream<int>? playbackError;
Stream<QueueListState>? queueState;
Stream<Sleep>? sleepStream;
}