From 3092f83a00047fddbef3f6a104fb09dd0ecc1f8c Mon Sep 17 00:00:00 2001
From: Deluan <deluan@navidrome.org>
Date: Wed, 29 Jul 2020 14:41:18 -0400
Subject: [PATCH] Add option to select default album view

---
 resources/i18n/pt.json      |  3 ++-
 ui/src/album/AlbumList.js   |  5 +++--
 ui/src/album/albumLists.js  |  2 ++
 ui/src/i18n/en.json         |  3 ++-
 ui/src/personal/Personal.js | 25 +++++++++++++++++++++++++
 5 files changed, 34 insertions(+), 4 deletions(-)

diff --git a/resources/i18n/pt.json b/resources/i18n/pt.json
index a934b2741..b42113a8f 100644
--- a/resources/i18n/pt.json
+++ b/resources/i18n/pt.json
@@ -263,7 +263,8 @@
             "name": "Pessoal",
             "options": {
                 "theme": "Tema",
-                "language": "Língua"
+                "language": "Língua",
+                "defaultView": "Tela inicial"
             }
         }
     },
diff --git a/ui/src/album/AlbumList.js b/ui/src/album/AlbumList.js
index a816c783d..65b557e9b 100644
--- a/ui/src/album/AlbumList.js
+++ b/ui/src/album/AlbumList.js
@@ -19,7 +19,7 @@ import AlbumListView from './AlbumListView'
 import AlbumGridView from './AlbumGridView'
 import { ALBUM_MODE_LIST } from './albumState'
 import AddToPlaylistDialog from '../dialogs/AddToPlaylistDialog'
-import albumLists from './albumLists'
+import albumLists, { defaultAlbumList } from './albumLists'
 
 const AlbumFilter = (props) => {
   const translate = useTranslate()
@@ -73,7 +73,8 @@ const AlbumList = (props) => {
   // If it does not have filter/sort params (usually coming from Menu),
   // reload with correct filter/sort params
   if (!location.search) {
-    const type = albumListType || 'all'
+    const type =
+      albumListType || localStorage.getItem('defaultView') || defaultAlbumList
     const listParams = albumLists[type]
     if (listParams) {
       return <Redirect to={`/album/${type}?${listParams.params}`} />
diff --git a/ui/src/album/albumLists.js b/ui/src/album/albumLists.js
index 49ec4674d..7dc1b0ef1 100644
--- a/ui/src/album/albumLists.js
+++ b/ui/src/album/albumLists.js
@@ -23,3 +23,5 @@ export default {
     params: 'sort=play_count&order=DESC&filter={"recently_played":true}',
   },
 }
+
+export const defaultAlbumList = 'recentlyAdded'
diff --git a/ui/src/i18n/en.json b/ui/src/i18n/en.json
index cbfd26abb..c1a288c66 100644
--- a/ui/src/i18n/en.json
+++ b/ui/src/i18n/en.json
@@ -264,7 +264,8 @@
             "name": "Personal",
             "options": {
                 "theme": "Theme",
-                "language": "Language"
+                "language": "Language",
+                "defaultView": "Default View"
             }
         }
     },
diff --git a/ui/src/personal/Personal.js b/ui/src/personal/Personal.js
index 18a39b666..ab7f9bae4 100644
--- a/ui/src/personal/Personal.js
+++ b/ui/src/personal/Personal.js
@@ -15,6 +15,7 @@ import { changeTheme } from './actions'
 import themes from '../themes'
 import { docsUrl } from '../utils/docsUrl'
 import { useGetLanguageChoices } from '../i18n'
+import albumLists, { defaultAlbumList } from '../album/albumLists'
 
 const useStyles = makeStyles({
   root: { marginTop: '1em' },
@@ -95,6 +96,29 @@ const SelectTheme = (props) => {
   )
 }
 
+const SelectDefaultView = (props) => {
+  const translate = useTranslate()
+  const current = localStorage.getItem('defaultView') || defaultAlbumList
+  const choices = Object.keys(albumLists).map((type) => ({
+    id: type,
+    name: translate(`resources.album.lists.${type}`),
+  }))
+
+  return (
+    <SelectInput
+      {...props}
+      source="defaultView"
+      label={translate('menu.personal.options.defaultView')}
+      defaultValue={current}
+      choices={choices}
+      translateChoice={false}
+      onChange={(event) => {
+        localStorage.setItem('defaultView', event.target.value)
+      }}
+    />
+  )
+}
+
 const Personal = () => {
   const translate = useTranslate()
   const classes = useStyles()
@@ -105,6 +129,7 @@ const Personal = () => {
       <SimpleForm toolbar={null}>
         <SelectTheme />
         <SelectLanguage />
+        <SelectDefaultView />
       </SimpleForm>
     </Card>
   )