{value.title}
@@ -143,4 +142,4 @@ const GeneralSettings = () => {
)
}
-export default GeneralSettings
\ No newline at end of file
+export default GeneralSettings
diff --git a/muzik-offline/src/interface/layouts/SearchSongs.tsx b/muzik-offline/src/interface/layouts/SearchSongs.tsx
index 7a4ed04..f272e20 100644
--- a/muzik-offline/src/interface/layouts/SearchSongs.tsx
+++ b/muzik-offline/src/interface/layouts/SearchSongs.tsx
@@ -1,4 +1,4 @@
-import { RectangleSongBox, GeneralContextMenu, AddSongToPlaylistModal, PropertiesModal, EditPropertiesModal } from "@components/index";
+import { RectangleSongBox, GeneralContextMenu, AddSongToPlaylistModal, PropertiesModal, EditPropertiesModal, DeleteSongModal } from "@components/index";
import { contextMenuEnum, contextMenuButtons } from "@muziktypes/index";
import { useRef, useEffect, useReducer } from "react";
import "@styles/layouts/SearchSongs.scss";
@@ -8,7 +8,7 @@ import { reducerType, useSearchStore } from "@store/index";
import { useNavigate } from "react-router-dom";
import { SearchSongsState, searchSongsReducer } from "@store/reducerStore";
import { addThisSongToPlayLater, addThisSongToPlayNext, playThisListNow, startPlayingNewSong } from "@utils/playerControl";
-import { closeContextMenu, closeEditPropertiesModal, closePlaylistModal, closePropertiesModal, processArrowKeysInput, selectThisSong, setSongList } from "@utils/reducerUtils";
+import { closeContextMenu, closeDeleteSongModal, closeEditPropertiesModal, closePlaylistModal, closePropertiesModal, processArrowKeysInput, selectThisSong, setSongList } from "@utils/reducerUtils";
import Skeleton, { SkeletonTheme } from "react-loading-skeleton";
import 'react-loading-skeleton/dist/skeleton.css';
@@ -29,6 +29,7 @@ const SearchSongs = () => {
if(arg === contextMenuButtons.ShowInfo){ dispatch({ type: reducerType.SET_PROPERTIES_MODAL, payload: true}); }
else if(arg === contextMenuButtons.AddToPlaylist){ dispatch({ type: reducerType.SET_PLAYLIST_MODAL, payload: true}); }
else if(arg === contextMenuButtons.EditSong){ dispatch({ type: reducerType.SET_EDIT_SONG_MODAL, payload: true}); }
+ else if(arg === contextMenuButtons.Delete){ dispatch({ type: reducerType.SET_DELETE_MODAL, payload: true}); }
else if(arg === contextMenuButtons.PlayNext && state.songMenuToOpen){
addThisSongToPlayNext([state.songMenuToOpen.id]);
closeContextMenu(dispatch);
@@ -75,7 +76,7 @@ const SearchSongs = () => {
else if(ev.target.id !== "gsearch" && state.selected >= 1 && state.selected <= state.SongList.length){
dispatch({type: reducerType.SET_SONG_MENU, payload: state.SongList[state.selected - 1]});
if(((ev.ctrlKey || ev.metaKey) && (ev.key === "p" || ev.key === "P" )) || ev.key === "Enter")chooseOption(contextMenuButtons.Play);
- else if((ev.ctrlKey || ev.metaKey) && (ev.key === "i" || ev.key === "I"))chooseOption(contextMenuButtons.ShowInfo);
+ else if((ev.ctrlKey || ev.metaKey) && !ev.shiftKey && (ev.key === "i" || ev.key === "I"))chooseOption(contextMenuButtons.ShowInfo);
else if((ev.ctrlKey || ev.metaKey) && ev.shiftKey && (ev.key === "a" || ev.key === "A"))chooseOption(contextMenuButtons.AddToPlaylist);
else if((ev.ctrlKey || ev.metaKey) && ev.shiftKey && (ev.key === "n" || ev.key === "N"))chooseOption(contextMenuButtons.PlayNext);
else if((ev.ctrlKey || ev.metaKey) && ev.shiftKey && (ev.key === "l" || ev.key === "L"))chooseOption(contextMenuButtons.PlayLater);
@@ -155,6 +156,7 @@ const SearchSongs = () => {
closePropertiesModal(dispatch)} />
closeEditPropertiesModal(dispatch)} />
closePlaylistModal(dispatch)} />
+ closeDeleteSongModal(dispatch, state.songMenuToOpen, deleteSong)} />
)
}
diff --git a/muzik-offline/src/interface/layouts/index.ts b/muzik-offline/src/interface/layouts/index.ts
index c6aa351..ecdfb83 100644
--- a/muzik-offline/src/interface/layouts/index.ts
+++ b/muzik-offline/src/interface/layouts/index.ts
@@ -9,6 +9,7 @@ import SearchPlaylists from './SearchPlaylists';
import AdvancedSettings from './AdvancedSettings';
import SecuritySettings from './SecuritySettings';
import AboutSettings from './AboutSettings';
+import AudioLabSettings from './AudioLabSettings';
import MusicFoldersSettings from './MusicFoldersSettings';
import ExportSettings from './ExportSettings';
@@ -16,5 +17,5 @@ export {
GeneralSettings, AppearanceSettings, HistoryNextFloating,
SearchSongs, SearchArtists, SearchAlbums, SearchGenres,
SearchPlaylists, AdvancedSettings, SecuritySettings, AboutSettings,
- MusicFoldersSettings, ExportSettings
+ AudioLabSettings, MusicFoldersSettings, ExportSettings
}
\ No newline at end of file
diff --git a/muzik-offline/src/interface/pages/AlbumDetails.tsx b/muzik-offline/src/interface/pages/AlbumDetails.tsx
index 75a1dfe..c7bc07f 100644
--- a/muzik-offline/src/interface/pages/AlbumDetails.tsx
+++ b/muzik-offline/src/interface/pages/AlbumDetails.tsx
@@ -1,5 +1,5 @@
import { useEffect, useReducer, useRef } from "react";
-import { AddSongToPlaylistModal, EditPropertiesModal, GeneralContextMenu, LargeResizableCover, LoaderAnimated, PropertiesModal, RectangleSongBox } from "@components/index";
+import { AddSongToPlaylistModal, DeleteSongModal, EditPropertiesModal, GeneralContextMenu, LargeResizableCover, LoaderAnimated, PropertiesModal, RectangleSongBox } from "@components/index";
import "@styles/pages/AlbumDetails.scss";
import { motion } from "framer-motion";
import { Play, Shuffle } from "@assets/icons";
@@ -10,7 +10,7 @@ import { getAlbumSongs, getCoverURL, getRandomCover, secondsToTimeFormat } from
import { ViewportList } from "react-viewport-list";
import { albumDetailsReducer, AlbumDetailsState } from "@store/reducerStore";
import { startPlayingNewSong, playThisListNow, addThisSongToPlayLater, addThisSongToPlayNext } from "@utils/playerControl";
-import { closeContextMenu, closeEditPropertiesModal, closePlaylistModal, closePropertiesModal, processArrowKeysInput, selectThisSong, setSongList } from "@utils/reducerUtils";
+import { closeContextMenu, closeDeleteSongModal, closeEditPropertiesModal, closePlaylistModal, closePropertiesModal, processArrowKeysInput, selectThisSong, setSongList } from "@utils/reducerUtils";
import { variants_list } from "@content/index";
import { reducerType } from "@store/index";
@@ -31,6 +31,7 @@ const AlbumDetails = () => {
if(arg === contextMenuButtons.ShowInfo){ dispatch({ type: reducerType.SET_PROPERTIES_MODAL, payload: true}); }
else if(arg === contextMenuButtons.AddToPlaylist){ dispatch({ type: reducerType.SET_PLAYLIST_MODAL, payload: true}); }
else if(arg === contextMenuButtons.EditSong){ dispatch({ type: reducerType.SET_EDIT_SONG_MODAL, payload: true}); }
+ else if(arg === contextMenuButtons.Delete){ dispatch({ type: reducerType.SET_DELETE_MODAL, payload: true}); }
else if(arg === contextMenuButtons.PlayNext && state.songMenuToOpen){
addThisSongToPlayNext([state.songMenuToOpen.id]);
closeContextMenu(dispatch);
@@ -96,7 +97,7 @@ const AlbumDetails = () => {
else if(ev.target.id !== "gsearch" && state.selected >= 1 && state.selected <= state.SongList.length){
dispatch({type: reducerType.SET_SONG_MENU, payload: state.SongList[state.selected - 1]});
if(((ev.ctrlKey || ev.metaKey) && (ev.key === "p" || ev.key === "P" )) || ev.key === "Enter")chooseOption(contextMenuButtons.Play);
- else if((ev.ctrlKey || ev.metaKey) && (ev.key === "i" || ev.key === "I"))chooseOption(contextMenuButtons.ShowInfo);
+ else if((ev.ctrlKey || ev.metaKey) && !ev.shiftKey && (ev.key === "i" || ev.key === "I"))chooseOption(contextMenuButtons.ShowInfo);
else if((ev.ctrlKey || ev.metaKey) && ev.shiftKey && (ev.key === "a" || ev.key === "A"))chooseOption(contextMenuButtons.AddToPlaylist);
else if((ev.ctrlKey || ev.metaKey) && ev.shiftKey && (ev.key === "n" || ev.key === "N"))chooseOption(contextMenuButtons.PlayNext);
else if((ev.ctrlKey || ev.metaKey) && ev.shiftKey && (ev.key === "l" || ev.key === "L"))chooseOption(contextMenuButtons.PlayLater);
@@ -194,6 +195,7 @@ const AlbumDetails = () => {
closePropertiesModal(dispatch)} />
closeEditPropertiesModal(dispatch)} />
closePlaylistModal(dispatch)} />
+ closeDeleteSongModal(dispatch, state.songMenuToOpen, deleteSong)} />
)
}
diff --git a/muzik-offline/src/interface/pages/AllTracks.tsx b/muzik-offline/src/interface/pages/AllTracks.tsx
index 664c5b6..818f2d5 100644
--- a/muzik-offline/src/interface/pages/AllTracks.tsx
+++ b/muzik-offline/src/interface/pages/AllTracks.tsx
@@ -2,14 +2,14 @@ import { contextMenuButtons, contextMenuEnum } from "@muziktypes/index";
import { motion } from "framer-motion";
import { useRef, useEffect, useReducer } from "react";
import { ChevronDown, FolderPlus, Shuffle } from "@assets/icons";
-import { AddSongToPlaylistModal, DropDownMenuSmall, EditPropertiesModal, GeneralContextMenu, PropertiesModal, RectangleSongBox } from "@components/index";
+import { AddSongToPlaylistModal, DeleteSongModal, DropDownMenuSmall, EditPropertiesModal, GeneralContextMenu, PropertiesModal, RectangleSongBox } from "@components/index";
import { ViewportList } from 'react-viewport-list';
import { local_albums_db, local_songs_db } from "@database/database";
import { useNavigate } from "react-router-dom";
import { AllTracksState, alltracksReducer, reducerType } from "store";
import { addThisSongToPlayLater, addThisSongToPlayNext, playThisListNow, startPlayingNewSong } from "utils/playerControl";
import "@styles/pages/AllTracks.scss";
-import { closeContextMenu, closeEditPropertiesModal, closePlaylistModal, closePropertiesModal, openFileDialogDND, processArrowKeysInput, processDragEvents, selectSortOption, selectThisSong, setOpenedDDM, setSongList } from "utils/reducerUtils";
+import { closeContextMenu, closeDeleteSongModal, closeEditPropertiesModal, closePlaylistModal, closePropertiesModal, openFileDialogDND, processArrowKeysInput, processDragEvents, selectSortOption, selectThisSong, setOpenedDDM, setSongList } from "utils/reducerUtils";
import Skeleton, { SkeletonTheme } from "react-loading-skeleton";
import 'react-loading-skeleton/dist/skeleton.css';
@@ -29,6 +29,7 @@ const AllTracks = () => {
if(arg === contextMenuButtons.ShowInfo){ dispatch({ type: reducerType.SET_PROPERTIES_MODAL, payload: true}); }
else if(arg === contextMenuButtons.AddToPlaylist){ dispatch({ type: reducerType.SET_PLAYLIST_MODAL, payload: true}); }
else if(arg === contextMenuButtons.EditSong){ dispatch({ type: reducerType.SET_EDIT_SONG_MODAL, payload: true}); }
+ else if(arg === contextMenuButtons.Delete){ dispatch({ type: reducerType.SET_DELETE_MODAL, payload: true}); }
else if(arg === contextMenuButtons.PlayNext && state.songMenuToOpen){
addThisSongToPlayNext([state.songMenuToOpen.id]);
closeContextMenu(dispatch);
@@ -82,7 +83,7 @@ const AllTracks = () => {
else if(ev.target.id !== "gsearch" && state.selected >= 1 && state.selected <= state.SongList.length){
dispatch({type: reducerType.SET_SONG_MENU, payload: state.SongList[state.selected - 1]});
if(((ev.ctrlKey || ev.metaKey) && (ev.key === "p" || ev.key === "P" )) || ev.key === "Enter")chooseOption(contextMenuButtons.Play);
- else if((ev.ctrlKey || ev.metaKey) && (ev.key === "i" || ev.key === "I"))chooseOption(contextMenuButtons.ShowInfo);
+ else if((ev.ctrlKey || ev.metaKey) && !ev.shiftKey && (ev.key === "i" || ev.key === "I"))chooseOption(contextMenuButtons.ShowInfo);
else if((ev.ctrlKey || ev.metaKey) && ev.shiftKey && (ev.key === "a" || ev.key === "A"))chooseOption(contextMenuButtons.AddToPlaylist);
else if((ev.ctrlKey || ev.metaKey) && ev.shiftKey && (ev.key === "n" || ev.key === "N"))chooseOption(contextMenuButtons.PlayNext);
else if((ev.ctrlKey || ev.metaKey) && ev.shiftKey && (ev.key === "l" || ev.key === "L"))chooseOption(contextMenuButtons.PlayLater);
@@ -204,6 +205,7 @@ const AllTracks = () => {
closePropertiesModal(dispatch)} />
closeEditPropertiesModal(dispatch)} />
closePlaylistModal(dispatch)} />
+ closeDeleteSongModal(dispatch, state.songMenuToOpen, deleteSong)} />
)
}
diff --git a/muzik-offline/src/interface/pages/GenreView.tsx b/muzik-offline/src/interface/pages/GenreView.tsx
index 037e93b..272122b 100644
--- a/muzik-offline/src/interface/pages/GenreView.tsx
+++ b/muzik-offline/src/interface/pages/GenreView.tsx
@@ -3,7 +3,7 @@ import { useEffect, useReducer, useRef } from "react";
import { useNavigate, useParams } from "react-router-dom";
import { getGenreSongs, secondsToTimeFormat } from "utils";
import { motion } from "framer-motion";
-import { AddSongToPlaylistModal, EditPropertiesModal, GeneralContextMenu, LargeResizableCover, PropertiesModal, RectangleSongBox } from "@components/index";
+import { AddSongToPlaylistModal, DeleteSongModal, EditPropertiesModal, GeneralContextMenu, LargeResizableCover, PropertiesModal, RectangleSongBox } from "@components/index";
import { Play, Shuffle } from "@assets/icons";
import { local_albums_db, local_genres_db } from "@database/database";
import "@styles/pages/GenreView.scss";
@@ -11,7 +11,7 @@ import { ViewportList } from "react-viewport-list";
import { GenreViewState, genreViewReducer } from "store/reducerStore";
import { variants_list } from "@content/index";
import { reducerType } from "store";
-import { closeContextMenu, closeEditPropertiesModal, closePlaylistModal, closePropertiesModal, processArrowKeysInput, selectThisSong, setSongList } from "utils/reducerUtils";
+import { closeContextMenu, closeDeleteSongModal, closeEditPropertiesModal, closePlaylistModal, closePropertiesModal, processArrowKeysInput, selectThisSong, setSongList } from "utils/reducerUtils";
import { addThisSongToPlayLater, addThisSongToPlayNext, playThisListNow, startPlayingNewSong } from "utils/playerControl";
const GenreView = () => {
@@ -31,6 +31,7 @@ const GenreView = () => {
if(arg === contextMenuButtons.ShowInfo){ dispatch({ type: reducerType.SET_PROPERTIES_MODAL, payload: true}); }
else if(arg === contextMenuButtons.AddToPlaylist){ dispatch({ type: reducerType.SET_PLAYLIST_MODAL, payload: true}); }
else if(arg === contextMenuButtons.EditSong){ dispatch({ type: reducerType.SET_EDIT_SONG_MODAL, payload: true}); }
+ else if(arg === contextMenuButtons.Delete){ dispatch({ type: reducerType.SET_DELETE_MODAL, payload: true}); }
else if(arg === contextMenuButtons.PlayNext && state.songMenuToOpen){
addThisSongToPlayNext([state.songMenuToOpen.id]);
closeContextMenu(dispatch);
@@ -101,7 +102,7 @@ const GenreView = () => {
else if(ev.target.id !== "gsearch" && state.selected >= 1 && state.selected <= state.SongList.length){
dispatch({type: reducerType.SET_SONG_MENU, payload: state.SongList[state.selected - 1]});
if(((ev.ctrlKey || ev.metaKey) && (ev.key === "p" || ev.key === "P" )) || ev.key === "Enter")chooseOption(contextMenuButtons.Play);
- else if((ev.ctrlKey || ev.metaKey) && (ev.key === "i" || ev.key === "I"))chooseOption(contextMenuButtons.ShowInfo);
+ else if((ev.ctrlKey || ev.metaKey) && !ev.shiftKey && (ev.key === "i" || ev.key === "I"))chooseOption(contextMenuButtons.ShowInfo);
else if((ev.ctrlKey || ev.metaKey) && ev.shiftKey && (ev.key === "a" || ev.key === "A"))chooseOption(contextMenuButtons.AddToPlaylist);
else if((ev.ctrlKey || ev.metaKey) && ev.shiftKey && (ev.key === "n" || ev.key === "N"))chooseOption(contextMenuButtons.PlayNext);
else if((ev.ctrlKey || ev.metaKey) && ev.shiftKey && (ev.key === "l" || ev.key === "L"))chooseOption(contextMenuButtons.PlayLater);
@@ -190,6 +191,7 @@ const GenreView = () => {
closePropertiesModal(dispatch)} />
closeEditPropertiesModal(dispatch)} />
closePlaylistModal(dispatch)} />
+ closeDeleteSongModal(dispatch, state.songMenuToOpen, deleteSong)} />
)
}
diff --git a/muzik-offline/src/interface/pages/PlaylistView.tsx b/muzik-offline/src/interface/pages/PlaylistView.tsx
index b5734cb..a131544 100644
--- a/muzik-offline/src/interface/pages/PlaylistView.tsx
+++ b/muzik-offline/src/interface/pages/PlaylistView.tsx
@@ -114,7 +114,7 @@ const PlaylistView = () => {
else if(ev.target.id !== "gsearch" && state.selected >= 1 && state.selected <= state.SongList.length){
dispatch({type: reducerType.SET_SONG_MENU, payload: state.SongList[state.selected - 1]});
if(((ev.ctrlKey || ev.metaKey) && (ev.key === "p" || ev.key === "P" )) || ev.key === "Enter")chooseOption(contextMenuButtons.Play);
- else if((ev.ctrlKey || ev.metaKey) && (ev.key === "i" || ev.key === "I"))chooseOption(contextMenuButtons.ShowInfo);
+ else if((ev.ctrlKey || ev.metaKey) && !ev.shiftKey && (ev.key === "i" || ev.key === "I"))chooseOption(contextMenuButtons.ShowInfo);
else if((ev.ctrlKey || ev.metaKey) && ev.shiftKey && (ev.key === "a" || ev.key === "A"))chooseOption(contextMenuButtons.AddToPlaylist);
else if((ev.ctrlKey || ev.metaKey) && ev.shiftKey && (ev.key === "n" || ev.key === "N"))chooseOption(contextMenuButtons.PlayNext);
else if((ev.ctrlKey || ev.metaKey) && ev.shiftKey && (ev.key === "l" || ev.key === "L"))chooseOption(contextMenuButtons.PlayLater);
diff --git a/muzik-offline/src/interface/pages/Settings.tsx b/muzik-offline/src/interface/pages/Settings.tsx
index 89605b5..aa2d0cb 100644
--- a/muzik-offline/src/interface/pages/Settings.tsx
+++ b/muzik-offline/src/interface/pages/Settings.tsx
@@ -1,10 +1,10 @@
import { motion } from 'framer-motion';
import { FunctionComponent, useState, useEffect } from 'react';
import "@styles/pages/Settings.scss";
-import { ChevronDown, ComponentIcon, InformationCircleContained, Layout, SettingsIcon, FolderSearch, File } from "@icons/index";
-import { DeleteDiretoryModal, ExportModal, SettingsNavigator, WallpapersSelectionModal } from '@components/index';
+import { ChevronDown, ComponentIcon, InformationCircleContained, Layout, SettingsIcon, WaveForm, FolderSearch, File } from "@icons/index";
+import { DeleteDiretoryModal, EqualizerModal, ExportModal, SettingsNavigator, WallpapersSelectionModal } from '@components/index';
import { selectedSettingENUM } from 'types';
-import { AppearanceSettings, GeneralSettings, AdvancedSettings, AboutSettings, MusicFoldersSettings, ExportSettings } from '@layouts/index';
+import { AppearanceSettings, GeneralSettings, AdvancedSettings, AboutSettings, AudioLabSettings, MusicFoldersSettings, ExportSettings } from '@layouts/index';
import { useSavedObjectStore } from 'store';
type SettingsProps = {
@@ -23,11 +23,13 @@ const Settings: FunctionComponent = (props: SettingsProps) => {
const {local_store,} = useSavedObjectStore((state) => { return { local_store: state.local_store}; });
const [currentPath, setCurrentPath] = useState(null);
const [wallpapersModal, setWallpapersModal] = useState(false);
+ const [equaliserModal, setEqualiserModal] = useState(false);
const [uuids, setUuids] = useState(null);
function convertToEnum(arg: string){
if(arg === selectedSettingENUM.General)return selectedSettingENUM.General;
else if(arg === selectedSettingENUM.Appearance)return selectedSettingENUM.Appearance;
+ else if(arg === selectedSettingENUM.AudioLab)return selectedSettingENUM.AudioLab;
else if(arg === selectedSettingENUM.MusicFolders)return selectedSettingENUM.MusicFolders;
else if(arg === selectedSettingENUM.Security)return selectedSettingENUM.Security;
else if(arg === selectedSettingENUM.ExportSongs)return selectedSettingENUM.ExportSongs;
@@ -58,6 +60,7 @@ const Settings: FunctionComponent = (props: SettingsProps) => {