mirror of
https://github.com/captbaritone/webamp.git
synced 2026-07-23 01:57:29 +00:00
103 lines
2.3 KiB
TypeScript
103 lines
2.3 KiB
TypeScript
import { PlaylistTrack, Action } from "../types";
|
|
import {
|
|
SET_MEDIA,
|
|
SET_MEDIA_TAGS,
|
|
SET_MEDIA_DURATION,
|
|
MEDIA_TAG_REQUEST_INITIALIZED,
|
|
MEDIA_TAG_REQUEST_FAILED,
|
|
ADD_TRACK_FROM_URL
|
|
} from "../actionTypes";
|
|
import { MEDIA_TAG_REQUEST_STATUS } from "../constants";
|
|
import * as TrackUtils from "../trackUtils";
|
|
|
|
export interface TracksState {
|
|
[id: string]: PlaylistTrack;
|
|
}
|
|
|
|
const defaultPlaylistState: TracksState = {};
|
|
|
|
const tracks = (
|
|
state: TracksState = defaultPlaylistState,
|
|
action: Action
|
|
): TracksState => {
|
|
switch (action.type) {
|
|
case ADD_TRACK_FROM_URL:
|
|
return {
|
|
...state,
|
|
[action.id]: {
|
|
id: action.id,
|
|
defaultName: action.defaultName || null,
|
|
duration: action.duration == null ? null : action.duration,
|
|
url: action.url,
|
|
mediaTagsRequestStatus: MEDIA_TAG_REQUEST_STATUS.INITIALIZED
|
|
}
|
|
};
|
|
case SET_MEDIA: {
|
|
const newTrack = {
|
|
...state[action.id],
|
|
duration: action.length
|
|
};
|
|
return {
|
|
...state,
|
|
[action.id]: newTrack
|
|
};
|
|
}
|
|
case SET_MEDIA_TAGS: {
|
|
return {
|
|
...state,
|
|
[action.id]: {
|
|
...state[action.id],
|
|
mediaTagsRequestStatus: MEDIA_TAG_REQUEST_STATUS.COMPLETE,
|
|
title: action.title,
|
|
artist: action.artist,
|
|
album: action.album,
|
|
albumArtUrl: action.albumArtUrl
|
|
}
|
|
};
|
|
}
|
|
case MEDIA_TAG_REQUEST_INITIALIZED:
|
|
return {
|
|
...state,
|
|
[action.id]: {
|
|
...state[action.id],
|
|
mediaTagsRequestStatus: MEDIA_TAG_REQUEST_STATUS.INITIALIZED
|
|
}
|
|
};
|
|
case MEDIA_TAG_REQUEST_FAILED:
|
|
return {
|
|
...state,
|
|
[action.id]: {
|
|
...state[action.id],
|
|
mediaTagsRequestStatus: MEDIA_TAG_REQUEST_STATUS.FAILED
|
|
}
|
|
};
|
|
case SET_MEDIA_DURATION: {
|
|
return {
|
|
...state,
|
|
[action.id]: {
|
|
...state[action.id],
|
|
duration: action.duration
|
|
}
|
|
};
|
|
}
|
|
default:
|
|
return state;
|
|
}
|
|
};
|
|
|
|
export default tracks;
|
|
|
|
export const getTrackDisplayName = (
|
|
state: TracksState,
|
|
id: number | null = null
|
|
): string | null => {
|
|
if (id == null) {
|
|
return null;
|
|
}
|
|
const track = state[id];
|
|
if (track == null) {
|
|
return null;
|
|
}
|
|
|
|
return TrackUtils.trackName(track);
|
|
};
|