%%{
init: {
'themeVariables': {
'fontFamily': 'BlinkMacSystemFont, Segoe UI, Noto Sans, Helvetica, Arial, Apple Color Emoji, Segoe UI Emoji'
}
}
}%%
classDiagram
Player *-- PlatformPlayer
PlatformPlayer <|-- libmpv_Player
PlatformPlayer <|-- xyz_Player
PlatformPlayer *-- PlayerState
PlatformPlayer *-- PlayerStreams
PlatformPlayer o-- PlayerConfiguration
libmpv_Player <.. NativeLibrary
class Media {
+Uri uri
+dynamic extras
}
class Playlist {
+List<Media> medias
+index index
}
class PlayerConfiguration {
+ bool texture
+ bool osc
+ String vo
+ String title
... other platform-specific configurable values
}
class PlayerStreams {
+Stream<Playlist> playlist
+Stream<bool> isPlaying
+Stream<bool> isCompleted
+Stream<Duration> position
+Stream<Duration> duration
+Stream<double> volume
+Stream<double> rate
+Stream<double> pitch
+Stream<bool> isBuffering
+Stream<AudioParams> audioParams
+Stream<double> audioBitrate
+Stream<PlayerError> error
}
class PlayerState {
+Playlist playlist
+bool isPlaying
+bool isCompleted
+Duration position
+Duration duration
+double volume
+double rate
+double pitch
+bool isBuffering
+AudioParams audioParams
+double audioBitrate
+PlayerError error
}
class Player {
+PlatformPlayer? platform
+«get» PlayerState state
+«get» PlayerStreams streams
+«set» volume: double*
+«set» rate: double*
+«set» pitch: double*
+«set» shuffle: bool*
+open(playlist)
+play()
+pause()
+playOrPause()
+add(media)
+remove(index)
+next()
+previous()
+jump(index)
+move(from, to)
+seek(duration)
+setPlaylistMode(playlistMode)
+dispose()
}
class PlatformPlayer {
+PlayerState state
+PlayerStreams streams
+PlayerConfiguration configuration
+open(playlist)*
+play()*
+pause()*
+playOrPause()*
+add(media)*
+remove(index)*
+next()*
+previous()*
+jump(index)*
+move(from, to)*
+seek(duration)*
+setPlaylistMode(playlistMode)*
+dispose()*
+«set» volume: double*
+«set» rate: double*
+«set» pitch: double*
+«set» shuffle: bool*
#StreamController<Playlist> playlistController
#StreamController<bool> isPlayingController
#StreamController<bool> isCompletedController
#StreamController<Duration> positionController
#StreamController<Duration> durationController
#StreamController<double> volumeController
#StreamController<double> rateController
#StreamController<double> pitchController
#StreamController<bool> isBufferingController
#StreamController<PlayerError> errorController
#StreamController<AudioParams> audioParamsController
#StreamController<double?> audioBitrateController
}
class libmpv_Player {
+open(playlist)
+play()
+pause()
+playOrPause()
+add(media)
+remove(index)
+next()
+previous()
+jump(index)
+move(from, to)
+seek(duration)
+setPlaylistMode(playlistMode)
+«set» volume: double
+«set» rate: double
+«set» pitch: double
+«set» shuffle: bool
+dispose()
}
class NativeLibrary {
+find()$ String?
}
class xyz_Player {
+open(playlist)
+play()
+pause()
+playOrPause()
+add(media)
+remove(index)
+next()
+previous()
+jump(index)
+move(from, to)
+seek(duration)
+setPlaylistMode(playlistMode)
+«set» volume: double
+«set» rate: double
+«set» pitch: double
+«set» shuffle: bool
+dispose()
}
Tagger *-- PlatformTagger
PlatformTagger <|-- libmpv_Tagger
PlatformTagger <|-- xyz_Tagger
PlatformTagger o-- TaggerConfiguration
libmpv_Tagger <.. NativeLibrary
class TaggerMetadata {
+Uri uri
+String trackName
+String albumName
+int trackNumber
+int discNumber
+int albumLength
+String albumArtistName
+List<String> trackArtistNames
+String authorName
+String writerName
+String year
+String genre
+String lyrics
+DateTime timeAdded
+Duration duration
+int bitrate
+dynamic data
}
class Tagger {
+parse(media) Future<TaggerMetadata>
+dispose()
}
class TaggerConfiguration {
+bool verbose
+String libmpv
... other platform-specific configurable values
}
class PlatformTagger {
+TaggerConfiguration configuration
+parse(media)* Future<TaggerMetadata>
#serialize(data)* TaggerMetadata
+dispose()*
#splitArtistTag(tag) List<String>
#splitDateTag(tag) String
#parseInteger(value) int
}
class libmpv_Tagger {
+parse(media) Future<TaggerMetadata>
#serialize(data) TaggerMetadata
+dispose()
}
class xyz_Tagger {
+parse(media) Future<TaggerMetadata>
#serialize(data) TaggerMetadata
+dispose()
}
Created
December 18, 2022 12:28
-
-
Save alexmercerind/39e5d62dd73d7ff457ac7cc3144c0abd to your computer and use it in GitHub Desktop.
đŸ‘€
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment