Controller
Table of Contents
Controller
Class that manages the app. Data access, state managing and music playing are its most important functions. It is divided into two other classes: Playback and StateManager.
Constructor
class Controller {
constructor(setView, setLibrary, setAlbumDetails, setSettings, setPlayback, setLoading, addLog) {
...
this.playback = new Playback(...);
this.stateManager = new StateManager(...);
...
}
}
PlaybackManager
Class that controls what is playing, what will play next, when to pause, etc., using the Howler library.
Constructor
class Playback {
constructor(setPlayback) {
...
this.playback = {
album: null, // Object that stores info about the playing album
track: null, // Object that stores info about the playing track
queue: [], // Array of tracks in queue
position: 0, // Index of the playing track in queue
progress: () => 0, // Returns a value between 0 and 1
playing: () => false // Is playback playing or paused?
};
...
}
}
Methods
start
Description: Starts the playback of a new track, according to playback.position.
Arguments: None
Return value: None
play
Description: Continues the playback.
Arguments: None
Return value: None
pause
Description: Pauses the playback.
Arguments: None
Return value: None
stop
Description: Stops the playback and sets the properties of playback to their default value.
Arguments: None
Return value: None
seekFwd
Description: Advances playback 5 seconds.
Arguments: None
Return value: None
seekBwd
Description: Retards playback 5 seconds.
Arguments: None
Return value: None
skipFwd
Description: Increments position and plays the corresponding track. If all tracks in playback.queue were played, playback is set to its default values.
Arguments: None
Return value: None
skipBwd
Description: If playing time is greater than 5 seconds, returns to beginning of the track. If this condition is not true, decrements position and plays the corresponding track.
Arguments: None
Return value: None
setProgress
Description: Sets the music progress to the percentage given in the argument.
Arguments: progress
Return value: None
playTracks
Description: Immediately stops current playback and plays the supplied list of tracks. Even when choosing the third track in a list, the user expects to be able to go back to the second one. This is why jump is used: tracks represents all the tracks and jump would be 2.
Arguments: tracks, jump
Return value: None
addNext
Description: Adds the supplied list of tracks to the queue, right next to the currently playing one.
Arguments: tracks
Return value: None
addToQueue
Description: Adds the supplied list of tracks to the end of the queue.
Arguments: tracks, jump
Return value: None
reorderQueue
Description: Changes the position of one track in the queue. If this change affects playback.position, its value should be updated.
Arguments: from, to.
Return value: None
removeFromQueue
Description: Removes the track a index position of the queue. If this change affects playback.position, its value should be updated.
Arguments: index
Return value: None
getTracks
Description: Gets tracks according to sourceType and detail and forwards them to playTracks, addNext or addToQueue according to destination.
Arguments: sourceType (albumID, track or tracks), detail (depending on the value of sourceType, an integer, a track or a list of tracks), destination, jump = 0.
Return value: None
updatePlayback
Description: Updates the state of UI elements depending so that they match playback.
Arguments: None
Return value: None
Event listeners
Since this apps tries to follow an MVC structure, most of the functions in PlaybackManager are triggered by events. PlaybackManager should set up event listeners for play, pause, stop, seekFwd, seekBwd, skipFwd, skipBwd, setProgress, reorderQueue, removeFromQueue and getTracks.
StateManager
Class that controls the state and visual appearance of various app components.
Constructor
Upon constructing, StateManager should implement the settings and store them in window.settings (for use in other components).
class StateManager {
constructor (setView, setLoading, setLibrary, setAlbumDetails, SetSettings, addLog) {
...
}
}
Methods
changeView
Description: Sets the app view to view, updating album details if needed, according to albumID. Should call the main process’s setMiniPlayer if view == miniplayer.
Arguments: view,[albumID]
Return value: None
getLibrary
Description: Gets the library according to searchParameters and updates the Library component.
Arguments: searchParameters
Return value: None
saveSettings
Description: Sets the provided settings and makes the necessary changes to the app. firstTime should always be saved as false.
Arguments: settings
Return value: None
implementSettings
Description: Adapts the app to the current settings.
Arguments: settings
Return value: None
resetSettings
Description: Restores settings to their original value.
Arguments: None
Return value: None
open
Description: Calls the main process’s open handler and refreshes the library after it.
Arguments: type = folder (folder or file)
Return value: None
addCover
Description: Calls the main process’s addCover handler and refreshes the component that called it according to caller.
Arguments: albumID, caller (albumDetails or library)
Return value: None
deleteAlbum
Description: Calls the main process’s deleteAlbum handler and refreshes the library after it.
Arguments: albumID
Return value: None
updateAlbumInfo
Description: Calls the main process’s updateAlbumInfo handler and refreshes the AlbumDetails component.
Arguments: albumID, albumInfo
Return value: None
updateTrackInfo
Description: Calls the main process’s updateTrackInfo handler and refreshes the AlbumDetails component.
Arguments: albumID, trackID, trackInfo
Return value: None
windowButton
Description: Calls the main process’s windowButton handler.
Arguments: button
Return value: None
resetLibrary
Description: Deletes the database.
Arguments: None
Return value: None
log
Description: Logs the message using the Logger component.
Arguments: message
Return value: None
Event listeners
StateManager should set up event listeners for changeView, getLibrary, saveSettings, resetSettings, open, addCover, deleteAlbum, updateAlbumInfo, updateTrackInfo, windowButton, resetLibrary, resetSettings and log. In addition, log should also be listened on ipcRenderer.