diff --git a/persistence/album_repository.go b/persistence/album_repository.go
index 692a3a68..ac3df791 100644
--- a/persistence/album_repository.go
+++ b/persistence/album_repository.go
@@ -41,6 +41,7 @@ func NewAlbumRepository(ctx context.Context, o orm.Ormer) model.AlbumRepository
"artist_id": artistFilter,
"year": yearFilter,
"recently_played": recentlyPlayedFilter,
+ "starred": booleanFilter,
}
return r
@@ -313,5 +314,22 @@ func (r *albumRepository) NewInstance() interface{} {
return &model.Album{}
}
+func (r albumRepository) Delete(id string) error {
+ return r.delete(Eq{"id": id})
+}
+
+func (r albumRepository) Save(entity interface{}) (string, error) {
+ mf := entity.(*model.Artist)
+ id, err := r.put(mf.ID, mf)
+ return id, err
+}
+
+func (r albumRepository) Update(entity interface{}, cols ...string) error {
+ mf := entity.(*model.Artist)
+ _, err := r.put(mf.ID, mf)
+ return err
+}
+
var _ model.AlbumRepository = (*albumRepository)(nil)
var _ model.ResourceRepository = (*albumRepository)(nil)
+var _ rest.Persistable = (*albumRepository)(nil)
diff --git a/persistence/artist_repository.go b/persistence/artist_repository.go
index 443cd41e..e9b626b0 100644
--- a/persistence/artist_repository.go
+++ b/persistence/artist_repository.go
@@ -203,14 +203,14 @@ func (r artistRepository) Delete(id string) error {
}
func (r artistRepository) Save(entity interface{}) (string, error) {
- mf := entity.(*model.Artist)
- err := r.Put(mf)
- return mf.ID, err
+ artist := entity.(*model.Artist)
+ err := r.Put(artist)
+ return artist.ID, err
}
func (r artistRepository) Update(entity interface{}, cols ...string) error {
- mf := entity.(*model.Artist)
- return r.Put(mf)
+ artist := entity.(*model.Artist)
+ return r.Put(artist)
}
var _ model.ArtistRepository = (*artistRepository)(nil)
diff --git a/resources/i18n/pt.json b/resources/i18n/pt.json
index a9227c66..1fc487da 100644
--- a/resources/i18n/pt.json
+++ b/resources/i18n/pt.json
@@ -53,6 +53,7 @@
"lists": {
"all": "Todos",
"random": "Aleatório",
+ "starred": "Favoritos",
"recentlyAdded": "Recém-adicionados",
"recentlyPlayed": "Recém-tocados",
"mostPlayed": "Mais tocados"
diff --git a/ui/src/album/AlbumList.js b/ui/src/album/AlbumList.js
index 65b557e9..9a9bdd79 100644
--- a/ui/src/album/AlbumList.js
+++ b/ui/src/album/AlbumList.js
@@ -12,8 +12,9 @@ import {
useTranslate,
useListParams,
} from 'react-admin'
-import { List, Title, useAlbumsPerPage } from '../common'
+import StarIcon from '@material-ui/icons/Star'
import { withWidth } from '@material-ui/core'
+import { List, QuickFilter, Title, useAlbumsPerPage } from '../common'
import AlbumListActions from './AlbumListActions'
import AlbumListView from './AlbumListView'
import AlbumGridView from './AlbumGridView'
@@ -37,6 +38,11 @@ const AlbumFilter = (props) => {
+ }
+ defaultValue={true}
+ />
)
}
diff --git a/ui/src/album/AlbumListView.js b/ui/src/album/AlbumListView.js
index 22fcb055..b3d1e720 100644
--- a/ui/src/album/AlbumListView.js
+++ b/ui/src/album/AlbumListView.js
@@ -10,14 +10,24 @@ import {
SimpleShowLayout,
TextField,
} from 'react-admin'
+import { useMediaQuery } from '@material-ui/core'
+import StarBorderIcon from '@material-ui/icons/StarBorder'
import {
ArtistLinkField,
DurationField,
RangeField,
SimpleList,
} from '../common'
-import { useMediaQuery } from '@material-ui/core'
import { AlbumContextMenu } from '../common'
+import { makeStyles } from '@material-ui/core/styles'
+
+const useStyles = makeStyles({
+ columnIcon: {
+ marginLeft: '3px',
+ marginTop: '-2px',
+ verticalAlign: 'text-top',
+ },
+})
const AlbumDetails = (props) => {
return (
@@ -64,6 +74,7 @@ const AlbumDatagrid = (props) => (
)
const AlbumListView = ({ hasShow, hasEdit, hasList, ...rest }) => {
+ const classes = useStyles()
const isDesktop = useMediaQuery((theme) => theme.breakpoints.up('md'))
const isXsmall = useMediaQuery((theme) => theme.breakpoints.down('xs'))
return isXsmall ? (
@@ -88,7 +99,11 @@ const AlbumListView = ({ hasShow, hasEdit, hasList, ...rest }) => {
{isDesktop && }
{isDesktop && }
-
+
+ }
+ />
)
}
diff --git a/ui/src/album/albumLists.js b/ui/src/album/albumLists.js
index 7dc1b0ef..e83700bc 100644
--- a/ui/src/album/albumLists.js
+++ b/ui/src/album/albumLists.js
@@ -3,6 +3,7 @@ import LibraryAddIcon from '@material-ui/icons/LibraryAdd'
import VideoLibraryIcon from '@material-ui/icons/VideoLibrary'
import RepeatIcon from '@material-ui/icons/Repeat'
import AlbumIcon from '@material-ui/icons/Album'
+import StarIcon from '@material-ui/icons/Star'
export default {
all: {
@@ -10,6 +11,10 @@ export default {
params: 'sort=name&order=ASC',
},
random: { icon: ShuffleIcon, params: 'sort=random' },
+ starred: {
+ icon: StarIcon,
+ params: 'sort=starred_at&order=DESC&filter={"starred":true}',
+ },
recentlyAdded: {
icon: LibraryAddIcon,
params: 'sort=created_at&order=DESC',
diff --git a/ui/src/common/ContextMenus.js b/ui/src/common/ContextMenus.js
index 7089ec20..710f0441 100644
--- a/ui/src/common/ContextMenus.js
+++ b/ui/src/common/ContextMenus.js
@@ -201,10 +201,12 @@ AlbumContextMenu.propTypes = {
discNumber: PropTypes.number,
visible: PropTypes.bool,
color: PropTypes.string,
+ showStar: PropTypes.bool,
}
AlbumContextMenu.defaultProps = {
visible: true,
+ showStar: true,
addLabel: true,
}
diff --git a/ui/src/i18n/en.json b/ui/src/i18n/en.json
index 9d73bce7..507b66be 100644
--- a/ui/src/i18n/en.json
+++ b/ui/src/i18n/en.json
@@ -54,6 +54,7 @@
"lists": {
"all": "All",
"random": "Random",
+ "starred": "Starred",
"recentlyAdded": "Recently Added",
"recentlyPlayed": "Recently Played",
"mostPlayed": "Most Played"