Added an optional role filter for 'appears on' section the artist views, fixes #824
This commit is contained in:
@@ -50,4 +50,32 @@
|
||||
</div>
|
||||
</message>
|
||||
|
||||
<message id="Lms.Explore.Artist.template.appears-on-container">
|
||||
<div class="mb-3">
|
||||
<h3>${tr:Lms.Explore.Artist.appears-on}${artist-type class="ms-2 d-inline-block"}</h3>
|
||||
${releases}
|
||||
</div>
|
||||
</message>
|
||||
|
||||
<message id="Lms.Explore.Artist.template.track-artist-type-selector">
|
||||
<div class="dropdown">
|
||||
<button class="btn btn-sm btn-outline-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
|
||||
${selected-item}
|
||||
</button>
|
||||
<ul class="dropdown-menu">
|
||||
<li>${artist-type-all class="dropdown-item"}</li>
|
||||
<li class="dropdown-divider"></li>
|
||||
${<if-has-track-artist>}<li>${artist-type-track-artist class="dropdown-item"}</li>${</if-has-track-artist>}
|
||||
${<if-has-composer>}<li>${artist-type-composer class="dropdown-item"}</li>${</if-has-composer>}
|
||||
${<if-has-conductor>}<li>${artist-type-conductor class="dropdown-item"}</li>${</if-has-conductor>}
|
||||
${<if-has-lyricist>}<li>${artist-type-lyricist class="dropdown-item"}</li>${</if-has-lyricist>}
|
||||
${<if-has-mixer>}<li>${artist-type-mixer class="dropdown-item"}</li>${</if-has-mixer>}
|
||||
${<if-has-performer>}<li>${artist-type-performer class="dropdown-item"}</li>${</if-has-performer>}
|
||||
${<if-has-producer>}<li>${artist-type-producer class="dropdown-item"}</li>${</if-has-producer>}
|
||||
${<if-has-remixer>}<li>${artist-type-remixer class="dropdown-item"}</li>${</if-has-remixer>}
|
||||
</ul>
|
||||
</div>
|
||||
</message>
|
||||
|
||||
|
||||
</messages>
|
||||
|
||||
+38
-39
@@ -196,9 +196,19 @@
|
||||
<!--Explore-->
|
||||
<message id="Lms.Explore.add-filter">Add filter</message>
|
||||
<message id="Lms.Explore.all">All</message>
|
||||
<message id="Lms.Explore.all-artists">All artists</message>
|
||||
<message id="Lms.Explore.all-roles">All roles</message>
|
||||
<message id="Lms.Explore.artists">Artists</message>
|
||||
<message id="Lms.Explore.bitrate">Bitrate</message>
|
||||
<message id="Lms.Explore.codec">Codec</message>
|
||||
<message id="Lms.Explore.composer">
|
||||
<plural case="0">Composer</plural>
|
||||
<plural case="1">Composers</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.conductor">
|
||||
<plural case="0">Conductor</plural>
|
||||
<plural case="1">Conductors</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.copyright">Copyright</message>
|
||||
<message id="Lms.Explore.cover-art">Cover art</message>
|
||||
<message id="Lms.Explore.download">Download</message>
|
||||
@@ -206,26 +216,54 @@
|
||||
<message id="Lms.Explore.filter-added">Filter added</message>
|
||||
<message id="Lms.Explore.filters">Filters</message>
|
||||
<message id="Lms.Explore.label">Label</message>
|
||||
<message id="Lms.Explore.lyricist">
|
||||
<plural case="0">Lyricist</plural>
|
||||
<plural case="1">Lyricists</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.media-library">Music Library</message>
|
||||
<message id="Lms.Explore.mixer">
|
||||
<plural case="0">Mixer</plural>
|
||||
<plural case="1">Mixers</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.most-played">Most played</message>
|
||||
<message id="Lms.Explore.musicbrainz-artist">MusicBrainz Artist</message>
|
||||
<message id="Lms.Explore.musicbrainz-release">MusicBrainz Release</message>
|
||||
<message id="Lms.Explore.performer">
|
||||
<plural case="0">Performer</plural>
|
||||
<plural case="1">Performers</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.play">Play</message>
|
||||
<message id="Lms.Explore.play-last">Play last</message>
|
||||
<message id="Lms.Explore.play-next">Play next</message>
|
||||
<message id="Lms.Explore.play-shuffled">Play shuffled</message>
|
||||
<message id="Lms.Explore.playcount">Play count</message>
|
||||
<message id="Lms.Explore.producer">
|
||||
<plural case="0">Producer</plural>
|
||||
<plural case="1">Producers</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.random">Random</message>
|
||||
<message id="Lms.Explore.recently-added">Recently added</message>
|
||||
<message id="Lms.Explore.recently-modified">Recently modified</message>
|
||||
<message id="Lms.Explore.recently-played">Recently played</message>
|
||||
<message id="Lms.Explore.release-artist">
|
||||
<plural case="0">Album artist</plural>
|
||||
<plural case="1">Album artists</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.release-info">Release information</message>
|
||||
<message id="Lms.Explore.release-type">Release type</message>
|
||||
<message id="Lms.Explore.releases">Albums</message>
|
||||
<message id="Lms.Explore.remixer">
|
||||
<plural case="0">Remixer</plural>
|
||||
<plural case="1">Remixers</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.search">Search</message>
|
||||
<message id="Lms.Explore.star">Star</message>
|
||||
<message id="Lms.Explore.star-item">Star {1}</message>
|
||||
<message id="Lms.Explore.starred">Starred</message>
|
||||
<message id="Lms.Explore.track-artist">
|
||||
<plural case="0">Track artist</plural>
|
||||
<plural case="1">Track artists</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.track-info">Track information</message>
|
||||
<message id="Lms.Explore.track-lyrics">Lyrics</message>
|
||||
<message id="Lms.Explore.tracklists">Playlists</message>
|
||||
@@ -241,45 +279,6 @@
|
||||
<message id="Lms.Explore.Artist.biography">Biography</message>
|
||||
<message id="Lms.Explore.Artist.similar-artists">Similar artists</message>
|
||||
|
||||
<!--Explore:Artists-->
|
||||
<message id="Lms.Explore.Artists.all">All artists</message>
|
||||
<message id="Lms.Explore.Artists.composer">
|
||||
<plural case="0">Composer</plural>
|
||||
<plural case="1">Composers</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.Artists.conductor">
|
||||
<plural case="0">Conductor</plural>
|
||||
<plural case="1">Conductors</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.Artists.lyricist">
|
||||
<plural case="0">Lyricist</plural>
|
||||
<plural case="1">Lyricists</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.Artists.mixer">
|
||||
<plural case="0">Mixer</plural>
|
||||
<plural case="1">Mixers</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.Artists.performer">
|
||||
<plural case="0">Performer</plural>
|
||||
<plural case="1">Performers</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.Artists.producer">
|
||||
<plural case="0">Producer</plural>
|
||||
<plural case="1">Producers</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.Artists.release-artist">
|
||||
<plural case="0">Album artist</plural>
|
||||
<plural case="1">Album artists</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.Artists.remixer">
|
||||
<plural case="0">Remixer</plural>
|
||||
<plural case="1">Remixers</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.Artists.track-artist">
|
||||
<plural case="0">Track artist</plural>
|
||||
<plural case="1">Track artists</plural>
|
||||
</message>
|
||||
|
||||
<!--Explore:Release-->
|
||||
<message id="Lms.Explore.Release.copyright">Copyright</message>
|
||||
<message id="Lms.Explore.Release.disc">Disc {1}</message>
|
||||
|
||||
+38
-39
@@ -196,9 +196,19 @@
|
||||
<!--Explore-->
|
||||
<message id="Lms.Explore.add-filter">Añadir filtro</message>
|
||||
<message id="Lms.Explore.all">Todos</message>
|
||||
<message id="Lms.Explore.all-artists">Todos los artistas</message>
|
||||
<message id="Lms.Explore.all-roles">Todos los roles</message>
|
||||
<message id="Lms.Explore.artists">Artistas</message>
|
||||
<message id="Lms.Explore.bitrate">Bitrate</message>
|
||||
<message id="Lms.Explore.codec">Codec</message>
|
||||
<message id="Lms.Explore.composer">
|
||||
<plural case="0">Compositor</plural>
|
||||
<plural case="1">Compositores</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.conductor">
|
||||
<plural case="0">Director de orquesta</plural>
|
||||
<plural case="1">Directores de orquesta</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.copyright">Derechos de autor</message>
|
||||
<message id="Lms.Explore.cover-art">Carátula</message>
|
||||
<message id="Lms.Explore.download">Descargar</message>
|
||||
@@ -206,26 +216,54 @@
|
||||
<message id="Lms.Explore.filter-added">Filtro añadido</message>
|
||||
<message id="Lms.Explore.filters">Filtros</message>
|
||||
<message id="Lms.Explore.label">Sello discográfico</message>
|
||||
<message id="Lms.Explore.lyricist">
|
||||
<plural case="0">Letrista</plural>
|
||||
<plural case="1">Letristas</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.media-library">Biblioteca musical</message>
|
||||
<message id="Lms.Explore.mixer">
|
||||
<plural case="0">Mezclador</plural>
|
||||
<plural case="1">Mezcladores</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.most-played">Reproducidos frecuentemente</message>
|
||||
<message id="Lms.Explore.musicbrainz-artist">Artista de MusicBrainz</message>
|
||||
<message id="Lms.Explore.musicbrainz-release">Álbum de MusicBrainz</message>
|
||||
<message id="Lms.Explore.performer">
|
||||
<plural case="0">Intérprete</plural>
|
||||
<plural case="1">Intérpretes</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.play">Reproducir</message>
|
||||
<message id="Lms.Explore.play-last">Reproducir al final</message>
|
||||
<message id="Lms.Explore.play-next">Reproducir a continuación</message>
|
||||
<message id="Lms.Explore.play-shuffled">Reproducción aleatoria</message>
|
||||
<message id="Lms.Explore.playcount">Número de reproducciones</message>
|
||||
<message id="Lms.Explore.producer">
|
||||
<plural case="0">Productor</plural>
|
||||
<plural case="1">Productores</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.random">Aleatorio</message>
|
||||
<message id="Lms.Explore.recently-added">Añadidos recientemente</message>
|
||||
<message id="Lms.Explore.recently-modified">Modificados recientemente</message>
|
||||
<message id="Lms.Explore.recently-played">Reproducidos recientemente</message>
|
||||
<message id="Lms.Explore.release-artist">
|
||||
<plural case="0">Artista del álbum</plural>
|
||||
<plural case="1">Artistas del álbum</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.release-info">Información sobre el álbum</message>
|
||||
<message id="Lms.Explore.release-type">Tipo de publicación</message>
|
||||
<message id="Lms.Explore.releases">Álbumes</message>
|
||||
<message id="Lms.Explore.remixer">
|
||||
<plural case="0">Remezclador</plural>
|
||||
<plural case="1">Remezcladores</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.search">Buscar</message>
|
||||
<message id="Lms.Explore.star">Añadir a favoritos</message>
|
||||
<message id="Lms.Explore.star-item">Agregar {1} a favoritos</message>
|
||||
<message id="Lms.Explore.starred">Favoritos</message>
|
||||
<message id="Lms.Explore.track-artist">
|
||||
<plural case="0">Artista de la pista</plural>
|
||||
<plural case="1">Artistas de la pista</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.track-info">Información sobre la pista</message>
|
||||
<message id="Lms.Explore.track-lyrics">Letras</message>
|
||||
<message id="Lms.Explore.tracklists">Listas de reproducción</message>
|
||||
@@ -241,45 +279,6 @@
|
||||
<message id="Lms.Explore.Artist.biography">Biografía</message>
|
||||
<message id="Lms.Explore.Artist.similar-artists">Artistas similares</message>
|
||||
|
||||
<!--Explore:Artists-->
|
||||
<message id="Lms.Explore.Artists.all">Todos los artistas</message>
|
||||
<message id="Lms.Explore.Artists.composer">
|
||||
<plural case="0">Compositor</plural>
|
||||
<plural case="1">Compositores</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.Artists.conductor">
|
||||
<plural case="0">Director de orquesta</plural>
|
||||
<plural case="1">Directores de orquesta</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.Artists.lyricist">
|
||||
<plural case="0">Letrista</plural>
|
||||
<plural case="1">Letristas</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.Artists.mixer">
|
||||
<plural case="0">Mezclador</plural>
|
||||
<plural case="1">Mezcladores</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.Artists.performer">
|
||||
<plural case="0">Intérprete</plural>
|
||||
<plural case="1">Intérpretes</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.Artists.producer">
|
||||
<plural case="0">Productor</plural>
|
||||
<plural case="1">Productores</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.Artists.release-artist">
|
||||
<plural case="0">Artista del álbum</plural>
|
||||
<plural case="1">Artistas del álbum</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.Artists.remixer">
|
||||
<plural case="0">Remezclador</plural>
|
||||
<plural case="1">Remezcladores</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.Artists.track-artist">
|
||||
<plural case="0">Artista de la pista</plural>
|
||||
<plural case="1">Artistas de la pista</plural>
|
||||
</message>
|
||||
|
||||
<!--Explore:Release-->
|
||||
<message id="Lms.Explore.Release.copyright">Copyright</message>
|
||||
<message id="Lms.Explore.Release.disc">Disco {1}</message>
|
||||
|
||||
+38
-39
@@ -196,9 +196,19 @@
|
||||
<!--Explore-->
|
||||
<message id="Lms.Explore.add-filter">Ajouter filtre</message>
|
||||
<message id="Lms.Explore.all">Tous</message>
|
||||
<message id="Lms.Explore.all-artists">Tous les artistes</message>
|
||||
<message id="Lms.Explore.all-roles">Tous les rôles</message>
|
||||
<message id="Lms.Explore.artists">Artistes</message>
|
||||
<message id="Lms.Explore.bitrate">Bitrate</message>
|
||||
<message id="Lms.Explore.codec">Codec</message>
|
||||
<message id="Lms.Explore.composer">
|
||||
<plural case="0">Compositeur</plural>
|
||||
<plural case="1">Compositeurs</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.conductor">
|
||||
<plural case="0">Chef d'orchestre</plural>
|
||||
<plural case="1">Chefs d'orchestre</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.copyright">Droits d'auteur</message>
|
||||
<message id="Lms.Explore.cover-art">Pochette</message>
|
||||
<message id="Lms.Explore.download">Télécharger</message>
|
||||
@@ -206,26 +216,54 @@
|
||||
<message id="Lms.Explore.filter-added">Filtre ajouté</message>
|
||||
<message id="Lms.Explore.filters">Filtres</message>
|
||||
<message id="Lms.Explore.label">Label</message>
|
||||
<message id="Lms.Explore.lyricist">
|
||||
<plural case="0">Parolier</plural>
|
||||
<plural case="1">Paroliers</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.media-library">Bibliothèque musicale</message>
|
||||
<message id="Lms.Explore.mixer">
|
||||
<plural case="0">Mixeur</plural>
|
||||
<plural case="1">Mixeurs</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.most-played">Plus joués</message>
|
||||
<message id="Lms.Explore.musicbrainz-artist">MusicBrainz Artist</message>
|
||||
<message id="Lms.Explore.musicbrainz-release">MusicBrainz Release</message>
|
||||
<message id="Lms.Explore.performer">
|
||||
<plural case="0">Interprète</plural>
|
||||
<plural case="1">Interprètes</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.play">Jouer</message>
|
||||
<message id="Lms.Explore.play-last">Jouer en dernier</message>
|
||||
<message id="Lms.Explore.play-next">Jouer ensuite</message>
|
||||
<message id="Lms.Explore.play-shuffled">Jouer aléatoirement</message>
|
||||
<message id="Lms.Explore.playcount">Nombre d'écoutes</message>
|
||||
<message id="Lms.Explore.producer">
|
||||
<plural case="0">Producteur</plural>
|
||||
<plural case="1">Producteurs</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.random">Aléatoire</message>
|
||||
<message id="Lms.Explore.recently-added">Ajoutés récemment</message>
|
||||
<message id="Lms.Explore.recently-modified">Modifiés récemment</message>
|
||||
<message id="Lms.Explore.recently-played">Joués récemment</message>
|
||||
<message id="Lms.Explore.release-artist">
|
||||
<plural case="0">Artiste d'album</plural>
|
||||
<plural case="1">Artistes d'album</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.release-info">Informations sur l'album</message>
|
||||
<message id="Lms.Explore.release-type">Type de publication</message>
|
||||
<message id="Lms.Explore.releases">Albums</message>
|
||||
<message id="Lms.Explore.remixer">
|
||||
<plural case="0">Remixeur</plural>
|
||||
<plural case="1">Remixeurs</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.search">Rechercher</message>
|
||||
<message id="Lms.Explore.star">Ajouter aux favoris</message>
|
||||
<message id="Lms.Explore.star-item">Ajouter {1} aux favoris</message>
|
||||
<message id="Lms.Explore.starred">Favoris</message>
|
||||
<message id="Lms.Explore.track-artist">
|
||||
<plural case="0">Artiste de piste</plural>
|
||||
<plural case="1">Artistes de piste</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.track-info">Informations sur la piste</message>
|
||||
<message id="Lms.Explore.track-lyrics">Paroles</message>
|
||||
<message id="Lms.Explore.tracklists">Playlists</message>
|
||||
@@ -241,45 +279,6 @@
|
||||
<message id="Lms.Explore.Artist.biography">Biographie</message>
|
||||
<message id="Lms.Explore.Artist.similar-artists">Artistes similaires</message>
|
||||
|
||||
<!--Explore:Artists-->
|
||||
<message id="Lms.Explore.Artists.all">Tous les artistes</message>
|
||||
<message id="Lms.Explore.Artists.composer">
|
||||
<plural case="0">Compositeur</plural>
|
||||
<plural case="1">Compositeurs</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.Artists.conductor">
|
||||
<plural case="0">Chef d'orchestre</plural>
|
||||
<plural case="1">Chefs d'orchestre</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.Artists.lyricist">
|
||||
<plural case="0">Parolier</plural>
|
||||
<plural case="1">Paroliers</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.Artists.mixer">
|
||||
<plural case="0">Mixeur</plural>
|
||||
<plural case="1">Mixeurs</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.Artists.performer">
|
||||
<plural case="0">Interprète</plural>
|
||||
<plural case="1">Interprètes</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.Artists.producer">
|
||||
<plural case="0">Producteur</plural>
|
||||
<plural case="1">Producteurs</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.Artists.release-artist">
|
||||
<plural case="0">Artiste d'album</plural>
|
||||
<plural case="1">Artistes d'album</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.Artists.remixer">
|
||||
<plural case="0">Remixeur</plural>
|
||||
<plural case="1">Remixeurs</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.Artists.track-artist">
|
||||
<plural case="0">Artiste de piste</plural>
|
||||
<plural case="1">Artistes de piste</plural>
|
||||
</message>
|
||||
|
||||
<!--Explore:Release-->
|
||||
<message id="Lms.Explore.Release.copyright">Copyright</message>
|
||||
<message id="Lms.Explore.Release.disc">Disque {1}</message>
|
||||
|
||||
+38
-39
@@ -196,9 +196,19 @@
|
||||
<!--Explore-->
|
||||
<message id="Lms.Explore.add-filter">Aggiungi filtro</message>
|
||||
<message id="Lms.Explore.all">Tutti</message>
|
||||
<message id="Lms.Explore.all-artists">Tutti gli artisti</message>
|
||||
<message id="Lms.Explore.all-roles">Tutti i ruoli</message>
|
||||
<message id="Lms.Explore.artists">Artisti</message>
|
||||
<message id="Lms.Explore.bitrate">Bitrate</message>
|
||||
<message id="Lms.Explore.codec">Codec</message>
|
||||
<message id="Lms.Explore.composer">
|
||||
<plural case="0">Compositore</plural>
|
||||
<plural case="1">Compositori</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.conductor">
|
||||
<plural case="0">Direttore d'orchestra</plural>
|
||||
<plural case="1">Direttori d'orchestra</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.copyright">Diritti d'autore</message>
|
||||
<message id="Lms.Explore.cover-art">Copertina</message>
|
||||
<message id="Lms.Explore.download">Download</message>
|
||||
@@ -206,26 +216,54 @@
|
||||
<message id="Lms.Explore.filter-added">Filtro aggiunto</message>
|
||||
<message id="Lms.Explore.filters">Filtri</message>
|
||||
<message id="Lms.Explore.label">Etichetta</message>
|
||||
<message id="Lms.Explore.lyricist">
|
||||
<plural case="0">Paroliere</plural>
|
||||
<plural case="1">Parolieri</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.media-library">Libreria musicale</message>
|
||||
<message id="Lms.Explore.mixer">
|
||||
<plural case="0">Tecnico del mixaggio</plural>
|
||||
<plural case="1">Tecnici del mixaggio</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.most-played">Più ascoltati</message>
|
||||
<message id="Lms.Explore.musicbrainz-artist">Artista MusicBrainz</message>
|
||||
<message id="Lms.Explore.musicbrainz-release">Album MusicBrainz</message>
|
||||
<message id="Lms.Explore.performer">
|
||||
<plural case="0">Interprete</plural>
|
||||
<plural case="1">Interpreti</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.play">Riproduci</message>
|
||||
<message id="Lms.Explore.play-last">Aggiungi alla coda di riproduzione</message>
|
||||
<message id="Lms.Explore.play-next">Riproduci successiva</message>
|
||||
<message id="Lms.Explore.play-shuffled">Riproduci mischiando</message>
|
||||
<message id="Lms.Explore.playcount">Conteggio riproduzioni</message>
|
||||
<message id="Lms.Explore.producer">
|
||||
<plural case="0">Produttore</plural>
|
||||
<plural case="1">Produttori</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.random">Casuali</message>
|
||||
<message id="Lms.Explore.recently-added">Aggiunti di recente</message>
|
||||
<message id="Lms.Explore.recently-modified">Modificati di recente</message>
|
||||
<message id="Lms.Explore.recently-played">Riprodotti di recente</message>
|
||||
<message id="Lms.Explore.release-artist">
|
||||
<plural case="0">Artista dell'album</plural>
|
||||
<plural case="1">Artisti dell'album</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.release-info">Informazioni sull'album</message>
|
||||
<message id="Lms.Explore.release-type">Tipo di pubblicazione</message>
|
||||
<message id="Lms.Explore.releases">Album</message>
|
||||
<message id="Lms.Explore.remixer">
|
||||
<plural case="0">Remixer</plural>
|
||||
<plural case="1">Remixers</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.search">Ricerca</message>
|
||||
<message id="Lms.Explore.star">Aggiungi ai preferiti</message>
|
||||
<message id="Lms.Explore.star-item">Aggiungi {1} ai preferiti</message>
|
||||
<message id="Lms.Explore.starred">Preferiti</message>
|
||||
<message id="Lms.Explore.track-artist">
|
||||
<plural case="0">Artista della traccia</plural>
|
||||
<plural case="1">Artisti della traccia</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.track-info">Informazioni sulla traccia</message>
|
||||
<message id="Lms.Explore.track-lyrics">Testo</message>
|
||||
<message id="Lms.Explore.tracklists">Playlist</message>
|
||||
@@ -241,45 +279,6 @@
|
||||
<message id="Lms.Explore.Artist.biography">Biografia</message>
|
||||
<message id="Lms.Explore.Artist.similar-artists">Artisti simili</message>
|
||||
|
||||
<!--Explore:Artists-->
|
||||
<message id="Lms.Explore.Artists.all">Tutti gli artisti</message>
|
||||
<message id="Lms.Explore.Artists.composer">
|
||||
<plural case="0">Compositore</plural>
|
||||
<plural case="1">Compositori</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.Artists.conductor">
|
||||
<plural case="0">Direttore d'orchestra</plural>
|
||||
<plural case="1">Direttori d'orchestra</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.Artists.lyricist">
|
||||
<plural case="0">Paroliere</plural>
|
||||
<plural case="1">Parolieri</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.Artists.mixer">
|
||||
<plural case="0">Tecnico del mixaggio</plural>
|
||||
<plural case="1">Tecnici del mixaggio</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.Artists.performer">
|
||||
<plural case="0">Interprete</plural>
|
||||
<plural case="1">Interpreti</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.Artists.producer">
|
||||
<plural case="0">Produttore</plural>
|
||||
<plural case="1">Produttori</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.Artists.release-artist">
|
||||
<plural case="0">Artista dell'album</plural>
|
||||
<plural case="1">Artisti dell'album</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.Artists.remixer">
|
||||
<plural case="0">Remixer</plural>
|
||||
<plural case="1">Remixers</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.Artists.track-artist">
|
||||
<plural case="0">Artista della traccia</plural>
|
||||
<plural case="1">Artisti della traccia</plural>
|
||||
</message>
|
||||
|
||||
<!--Explore:Release-->
|
||||
<message id="Lms.Explore.Release.copyright">Copyright</message>
|
||||
<message id="Lms.Explore.Release.disc">Disco {1}</message>
|
||||
|
||||
+47
-48
@@ -213,9 +213,21 @@
|
||||
<!--Explore-->
|
||||
<message id="Lms.Explore.add-filter">Dodaj filtr</message>
|
||||
<message id="Lms.Explore.all">Wszystko</message>
|
||||
<message id="Lms.Explore.all-artists">Wszyscy artyści</message>
|
||||
<message id="Lms.Explore.all-roles">Wszystkie role</message>
|
||||
<message id="Lms.Explore.artists">Artyści</message>
|
||||
<message id="Lms.Explore.bitrate">Przepływność</message>
|
||||
<message id="Lms.Explore.codec">Kodek</message>
|
||||
<message id="Lms.Explore.composer">
|
||||
<plural case="0">Kompozytor</plural>
|
||||
<plural case="1">Kompozytorzy</plural>
|
||||
<plural case="2">Kompozytorów</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.conductor">
|
||||
<plural case="0">Dyrygent</plural>
|
||||
<plural case="1">Dyrygenci</plural>
|
||||
<plural case="2">Dyrygentów</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.copyright">Prawa autorskie</message>
|
||||
<message id="Lms.Explore.cover-art">Okładka</message>
|
||||
<message id="Lms.Explore.download">Pobierz</message>
|
||||
@@ -223,26 +235,61 @@
|
||||
<message id="Lms.Explore.filter-added">Filtr dodany</message>
|
||||
<message id="Lms.Explore.filters">Filtry</message>
|
||||
<message id="Lms.Explore.label">Wytwórnia</message>
|
||||
<message id="Lms.Explore.lyricist">
|
||||
<plural case="0">Tekściarz</plural>
|
||||
<plural case="1">Tekściarze</plural>
|
||||
<plural case="2">Tekściarzy</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.media-library">Biblioteka muzyczna</message>
|
||||
<message id="Lms.Explore.mixer">
|
||||
<plural case="0">Mikser</plural>
|
||||
<plural case="1">Mikserzy</plural>
|
||||
<plural case="2">Mikserów</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.most-played">Najczęściej odtwarzane</message>
|
||||
<message id="Lms.Explore.musicbrainz-artist">Artysta w MusicBrainz</message>
|
||||
<message id="Lms.Explore.musicbrainz-release">Wydanie w MusicBrainz</message>
|
||||
<message id="Lms.Explore.performer">
|
||||
<plural case="0">Wykonawca</plural>
|
||||
<plural case="1">Wykonawcy</plural>
|
||||
<plural case="2">Wykonawców</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.play">Odtwarzaj</message>
|
||||
<message id="Lms.Explore.play-last">Odtwórz na końcu</message>
|
||||
<message id="Lms.Explore.play-next">Odtwórz po obecnym</message>
|
||||
<message id="Lms.Explore.play-shuffled">Odtwarzaj losowo</message>
|
||||
<message id="Lms.Explore.playcount">Liczba odtworzeń</message>
|
||||
<message id="Lms.Explore.producer">
|
||||
<plural case="0">Producent</plural>
|
||||
<plural case="1">Producenci</plural>
|
||||
<plural case="2">Producentów</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.random">Losowo</message>
|
||||
<message id="Lms.Explore.recently-added">Ostatnio dodane</message>
|
||||
<message id="Lms.Explore.recently-modified">Ostatnio zmienione</message>
|
||||
<message id="Lms.Explore.recently-played">Ostatnio odtwarzane</message>
|
||||
<message id="Lms.Explore.release-artist">
|
||||
<plural case="0">Artysta albumu</plural>
|
||||
<plural case="1">Artyści albumu</plural>
|
||||
<plural case="2">Artystów albumu</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.release-info">Informacje o wydaniu</message>
|
||||
<message id="Lms.Explore.release-type">Typ wydania</message>
|
||||
<message id="Lms.Explore.releases">Albumy</message>
|
||||
<message id="Lms.Explore.remixer">
|
||||
<plural case="0">Remikser</plural>
|
||||
<plural case="1">Remikserzy</plural>
|
||||
<plural case="2">Remikserów</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.search">Szukaj</message>
|
||||
<message id="Lms.Explore.star">Wyróżnij</message>
|
||||
<message id="Lms.Explore.star-item">Dodaj {1} do ulubionych</message>
|
||||
<message id="Lms.Explore.starred">Wyróżnione</message>
|
||||
<message id="Lms.Explore.track-artist">
|
||||
<plural case="0">Artysta utworu</plural>
|
||||
<plural case="1">Artyści utworu</plural>
|
||||
<plural case="2">Artystów utworu</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.track-info">Informacje o ścieżce</message>
|
||||
<message id="Lms.Explore.track-lyrics">Tekst</message>
|
||||
<message id="Lms.Explore.tracklists">Listy odtwarzania</message>
|
||||
@@ -258,54 +305,6 @@
|
||||
<message id="Lms.Explore.Artist.biography">Biografia</message>
|
||||
<message id="Lms.Explore.Artist.similar-artists">Podobni artyści</message>
|
||||
|
||||
<!--Explore:Artists-->
|
||||
<message id="Lms.Explore.Artists.all">Wszyscy artyści</message>
|
||||
<message id="Lms.Explore.Artists.composer">
|
||||
<plural case="0">Kompozytor</plural>
|
||||
<plural case="1">Kompozytorzy</plural>
|
||||
<plural case="2">Kompozytorzy</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.Artists.conductor">
|
||||
<plural case="0">Dyrygent</plural>
|
||||
<plural case="1">Dyrygenci</plural>
|
||||
<plural case="2">Dyrygenci</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.Artists.lyricist">
|
||||
<plural case="0">Tekściarz</plural>
|
||||
<plural case="1">Tekściarze</plural>
|
||||
<plural case="2">Tekściarze</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.Artists.mixer">
|
||||
<plural case="0">Realizator</plural>
|
||||
<plural case="1">Realizatorzy</plural>
|
||||
<plural case="2">Realizatorzy</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.Artists.performer">
|
||||
<plural case="0">Wykonawca</plural>
|
||||
<plural case="1">Wykonawcy</plural>
|
||||
<plural case="2">Wykonawcy</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.Artists.producer">
|
||||
<plural case="0">Producent</plural>
|
||||
<plural case="1">Producenci</plural>
|
||||
<plural case="2">Producenci</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.Artists.release-artist">
|
||||
<plural case="0">Artysta z albumu</plural>
|
||||
<plural case="1">Artyści z albumu</plural>
|
||||
<plural case="2">Artyści z albumu</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.Artists.remixer">
|
||||
<plural case="0">Remixer</plural>
|
||||
<plural case="1">Remikserzy</plural>
|
||||
<plural case="2">Remikserzy</plural>
|
||||
</message>
|
||||
<message id="Lms.Explore.Artists.track-artist">
|
||||
<plural case="0">Artysta ze ścieżki</plural>
|
||||
<plural case="1">Artyści ze ścieżki</plural>
|
||||
<plural case="2">Artyści ze ścieżki</plural>
|
||||
</message>
|
||||
|
||||
<!--Explore:Release-->
|
||||
<message id="Lms.Explore.Release.copyright">Prawa autorskie</message>
|
||||
<message id="Lms.Explore.Release.disc">Dysk {1}</message>
|
||||
|
||||
+11
-12
@@ -194,9 +194,13 @@
|
||||
<!--Explore-->
|
||||
<message id="Lms.Explore.add-filter">添加过滤器</message>
|
||||
<message id="Lms.Explore.all">全部</message>
|
||||
<message id="Lms.Explore.all-artists">所有艺术家</message>
|
||||
<message id="Lms.Explore.all-roles">所有角色</message>
|
||||
<message id="Lms.Explore.artists">歌手</message>
|
||||
<message id="Lms.Explore.bitrate">比特率</message>
|
||||
<message id="Lms.Explore.codec">编码器</message>
|
||||
<message id="Lms.Explore.composer">作曲者</message>
|
||||
<message id="Lms.Explore.conductor">指挥</message>
|
||||
<message id="Lms.Explore.copyright">版权所有</message>
|
||||
<message id="Lms.Explore.cover-art">封面</message>
|
||||
<message id="Lms.Explore.download">下载</message>
|
||||
@@ -204,26 +208,33 @@
|
||||
<message id="Lms.Explore.filter-added">过滤器已添加</message>
|
||||
<message id="Lms.Explore.filters">过滤器</message>
|
||||
<message id="Lms.Explore.label">厂牌</message>
|
||||
<message id="Lms.Explore.lyricist">作词者</message>
|
||||
<message id="Lms.Explore.media-library">音乐库</message>
|
||||
<message id="Lms.Explore.mixer">混音师</message>
|
||||
<message id="Lms.Explore.most-played">播放最多</message>
|
||||
<message id="Lms.Explore.musicbrainz-artist">MusicBrainz 歌手</message>
|
||||
<message id="Lms.Explore.musicbrainz-release">MusicBrainz 专辑</message>
|
||||
<message id="Lms.Explore.performer">表演者</message>
|
||||
<message id="Lms.Explore.play">播放</message>
|
||||
<message id="Lms.Explore.play-last">最后播放</message>
|
||||
<message id="Lms.Explore.play-next">下一首播放</message>
|
||||
<message id="Lms.Explore.play-shuffled">随机播放</message>
|
||||
<message id="Lms.Explore.playcount">播放次数</message>
|
||||
<message id="Lms.Explore.producer">制作人</message>
|
||||
<message id="Lms.Explore.random">随机</message>
|
||||
<message id="Lms.Explore.recently-added">最近添加</message>
|
||||
<message id="Lms.Explore.recently-modified">最近更改</message>
|
||||
<message id="Lms.Explore.recently-played">最近播放</message>
|
||||
<message id="Lms.Explore.release-artist">专辑艺术家</message>
|
||||
<message id="Lms.Explore.release-info">专辑信息</message>
|
||||
<message id="Lms.Explore.release-type">专辑类型</message>
|
||||
<message id="Lms.Explore.releases">专辑</message>
|
||||
<message id="Lms.Explore.remixer">混音师</message>
|
||||
<message id="Lms.Explore.search">搜索</message>
|
||||
<message id="Lms.Explore.star">收藏</message>
|
||||
<message id="Lms.Explore.star-item">将 {1} 加入收藏</message>
|
||||
<message id="Lms.Explore.starred">已收藏</message>
|
||||
<message id="Lms.Explore.track-artist">曲目艺术家</message>
|
||||
<message id="Lms.Explore.track-info">曲目信息</message>
|
||||
<message id="Lms.Explore.track-lyrics">歌词</message>
|
||||
<message id="Lms.Explore.tracklists">播放列表</message>
|
||||
@@ -239,18 +250,6 @@
|
||||
<message id="Lms.Explore.Artist.biography">简介</message>
|
||||
<message id="Lms.Explore.Artist.similar-artists">相似歌手</message>
|
||||
|
||||
<!--Explore:Artists-->
|
||||
<message id="Lms.Explore.Artists.all">所有艺术家</message>
|
||||
<message id="Lms.Explore.Artists.composer">作曲者</message>
|
||||
<message id="Lms.Explore.Artists.conductor">指挥</message>
|
||||
<message id="Lms.Explore.Artists.lyricist">作词者</message>
|
||||
<message id="Lms.Explore.Artists.mixer">混音师</message>
|
||||
<message id="Lms.Explore.Artists.performer">表演者</message>
|
||||
<message id="Lms.Explore.Artists.producer">制作人</message>
|
||||
<message id="Lms.Explore.Artists.release-artist">专辑艺术家</message>
|
||||
<message id="Lms.Explore.Artists.remixer">混音师</message>
|
||||
<message id="Lms.Explore.Artists.track-artist">曲目艺术家</message>
|
||||
|
||||
<!--Explore:Release-->
|
||||
<message id="Lms.Explore.Release.copyright">版权所有</message>
|
||||
<message id="Lms.Explore.Release.disc">唱片 {1}</message>
|
||||
|
||||
@@ -49,6 +49,7 @@ add_executable(lms
|
||||
ui/explore/ReleasesView.cpp
|
||||
ui/explore/ReleaseView.cpp
|
||||
ui/explore/ReleaseTypes.cpp
|
||||
ui/explore/TrackArtistTypeSelector.cpp
|
||||
ui/explore/TrackCollector.cpp
|
||||
ui/explore/TrackListHelpers.cpp
|
||||
ui/explore/TrackListView.cpp
|
||||
|
||||
@@ -459,13 +459,13 @@ namespace lms::ui
|
||||
_artistReleaseSortMethodModel->add(Wt::WString::tr("Lms.Settings.name"), db::ReleaseSortMethod::Name);
|
||||
|
||||
_artistRelationshipsModel = std::make_shared<ArtistRelationshipsModel>();
|
||||
_artistRelationshipsModel->add(Wt::WString::trn("Lms.Explore.Artists.composer", 2), db::TrackArtistLinkType::Composer);
|
||||
_artistRelationshipsModel->add(Wt::WString::trn("Lms.Explore.Artists.conductor", 2), db::TrackArtistLinkType::Conductor);
|
||||
_artistRelationshipsModel->add(Wt::WString::trn("Lms.Explore.Artists.lyricist", 2), db::TrackArtistLinkType::Lyricist);
|
||||
_artistRelationshipsModel->add(Wt::WString::trn("Lms.Explore.Artists.mixer", 2), db::TrackArtistLinkType::Mixer);
|
||||
_artistRelationshipsModel->add(Wt::WString::trn("Lms.Explore.Artists.performer", 2), db::TrackArtistLinkType::Performer);
|
||||
_artistRelationshipsModel->add(Wt::WString::trn("Lms.Explore.Artists.producer", 2), db::TrackArtistLinkType::Producer);
|
||||
_artistRelationshipsModel->add(Wt::WString::trn("Lms.Explore.Artists.remixer", 2), db::TrackArtistLinkType::Remixer);
|
||||
_artistRelationshipsModel->add(Wt::WString::trn("Lms.Explore.composer", 2), db::TrackArtistLinkType::Composer);
|
||||
_artistRelationshipsModel->add(Wt::WString::trn("Lms.Explore.conductor", 2), db::TrackArtistLinkType::Conductor);
|
||||
_artistRelationshipsModel->add(Wt::WString::trn("Lms.Explore.lyricist", 2), db::TrackArtistLinkType::Lyricist);
|
||||
_artistRelationshipsModel->add(Wt::WString::trn("Lms.Explore.mixer", 2), db::TrackArtistLinkType::Mixer);
|
||||
_artistRelationshipsModel->add(Wt::WString::trn("Lms.Explore.performer", 2), db::TrackArtistLinkType::Performer);
|
||||
_artistRelationshipsModel->add(Wt::WString::trn("Lms.Explore.producer", 2), db::TrackArtistLinkType::Producer);
|
||||
_artistRelationshipsModel->add(Wt::WString::trn("Lms.Explore.remixer", 2), db::TrackArtistLinkType::Remixer);
|
||||
|
||||
_transcodingModeModeModel = std::make_shared<TranscodingModeModel>();
|
||||
_transcodingModeModeModel->add(Wt::WString::tr("Lms.Settings.transcoding-mode.always"), MediaPlayer::Settings::Transcoding::Mode::Always);
|
||||
|
||||
+14
-14
@@ -407,17 +407,17 @@ namespace lms::ui::utils
|
||||
});
|
||||
};
|
||||
|
||||
addArtists(db::TrackArtistLinkType::Composer, "Lms.Explore.Artists.composer");
|
||||
addArtists(db::TrackArtistLinkType::Conductor, "Lms.Explore.Artists.conductor");
|
||||
addArtists(db::TrackArtistLinkType::Lyricist, "Lms.Explore.Artists.lyricist");
|
||||
addArtists(db::TrackArtistLinkType::Mixer, "Lms.Explore.Artists.mixer");
|
||||
addArtists(db::TrackArtistLinkType::Remixer, "Lms.Explore.Artists.remixer");
|
||||
addArtists(db::TrackArtistLinkType::Producer, "Lms.Explore.Artists.producer");
|
||||
addArtists(db::TrackArtistLinkType::Composer, "Lms.Explore.composer");
|
||||
addArtists(db::TrackArtistLinkType::Conductor, "Lms.Explore.conductor");
|
||||
addArtists(db::TrackArtistLinkType::Lyricist, "Lms.Explore.lyricist");
|
||||
addArtists(db::TrackArtistLinkType::Mixer, "Lms.Explore.mixer");
|
||||
addArtists(db::TrackArtistLinkType::Remixer, "Lms.Explore.remixer");
|
||||
addArtists(db::TrackArtistLinkType::Producer, "Lms.Explore.producer");
|
||||
addPerformerArtists();
|
||||
|
||||
if (!rolelessPerformers.empty())
|
||||
{
|
||||
Wt::WString performersStr{ Wt::WString::trn("Lms.Explore.Artists.performer", rolelessPerformers.size()) };
|
||||
Wt::WString performersStr{ Wt::WString::trn("Lms.Explore.performer", rolelessPerformers.size()) };
|
||||
artistMap[performersStr] = std::move(rolelessPerformers);
|
||||
}
|
||||
|
||||
@@ -458,17 +458,17 @@ namespace lms::ui::utils
|
||||
});
|
||||
};
|
||||
|
||||
addArtists(db::TrackArtistLinkType::Composer, "Lms.Explore.Artists.composer");
|
||||
addArtists(db::TrackArtistLinkType::Conductor, "Lms.Explore.Artists.conductor");
|
||||
addArtists(db::TrackArtistLinkType::Lyricist, "Lms.Explore.Artists.lyricist");
|
||||
addArtists(db::TrackArtistLinkType::Mixer, "Lms.Explore.Artists.mixer");
|
||||
addArtists(db::TrackArtistLinkType::Remixer, "Lms.Explore.Artists.remixer");
|
||||
addArtists(db::TrackArtistLinkType::Producer, "Lms.Explore.Artists.producer");
|
||||
addArtists(db::TrackArtistLinkType::Composer, "Lms.Explore.composer");
|
||||
addArtists(db::TrackArtistLinkType::Conductor, "Lms.Explore.conductor");
|
||||
addArtists(db::TrackArtistLinkType::Lyricist, "Lms.Explore.lyricist");
|
||||
addArtists(db::TrackArtistLinkType::Mixer, "Lms.Explore.mixer");
|
||||
addArtists(db::TrackArtistLinkType::Remixer, "Lms.Explore.remixer");
|
||||
addArtists(db::TrackArtistLinkType::Producer, "Lms.Explore.producer");
|
||||
addPerformerArtists();
|
||||
|
||||
if (!rolelessPerformers.empty())
|
||||
{
|
||||
Wt::WString performersStr{ Wt::WString::trn("Lms.Explore.Artists.performer", rolelessPerformers.size()) };
|
||||
Wt::WString performersStr{ Wt::WString::trn("Lms.Explore.performer", rolelessPerformers.size()) };
|
||||
artistMap[performersStr] = std::move(rolelessPerformers);
|
||||
}
|
||||
|
||||
|
||||
@@ -30,16 +30,16 @@ namespace lms::ui
|
||||
ArtistTypeSelector(ArtistType defaultArtistType)
|
||||
: DropDownMenuSelector{ Wt::WString::tr("Lms.Explore.Artists.template.artist-type-selector"), defaultArtistType }
|
||||
{
|
||||
bindItem("artist-type-all", Wt::WString::tr("Lms.Explore.Artists.all"), AllArtistsTag{});
|
||||
bindItem("artist-type-release-artist", Wt::WString::trn("Lms.Explore.Artists.release-artist", 2), ReleaseArtistsTag{});
|
||||
bindItem("artist-type-track-artist", Wt::WString::trn("Lms.Explore.Artists.track-artist", 2), db::TrackArtistLinkType::Artist);
|
||||
bindItem("artist-type-composer", Wt::WString::trn("Lms.Explore.Artists.composer", 2), db::TrackArtistLinkType::Composer);
|
||||
bindItem("artist-type-conductor", Wt::WString::trn("Lms.Explore.Artists.conductor", 2), db::TrackArtistLinkType::Conductor);
|
||||
bindItem("artist-type-lyricist", Wt::WString::trn("Lms.Explore.Artists.lyricist", 2), db::TrackArtistLinkType::Lyricist);
|
||||
bindItem("artist-type-mixer", Wt::WString::trn("Lms.Explore.Artists.mixer", 2), db::TrackArtistLinkType::Mixer);
|
||||
bindItem("artist-type-performer", Wt::WString::trn("Lms.Explore.Artists.performer", 2), db::TrackArtistLinkType::Performer);
|
||||
bindItem("artist-type-producer", Wt::WString::trn("Lms.Explore.Artists.producer", 2), db::TrackArtistLinkType::Producer);
|
||||
bindItem("artist-type-remixer", Wt::WString::trn("Lms.Explore.Artists.remixer", 2), db::TrackArtistLinkType::Remixer);
|
||||
bindItem("artist-type-all", Wt::WString::tr("Lms.Explore.all-artists"), AllArtistsTag{});
|
||||
bindItem("artist-type-release-artist", Wt::WString::trn("Lms.Explore.release-artist", 2), ReleaseArtistsTag{});
|
||||
bindItem("artist-type-track-artist", Wt::WString::trn("Lms.Explore.track-artist", 2), db::TrackArtistLinkType::Artist);
|
||||
bindItem("artist-type-composer", Wt::WString::trn("Lms.Explore.composer", 2), db::TrackArtistLinkType::Composer);
|
||||
bindItem("artist-type-conductor", Wt::WString::trn("Lms.Explore.conductor", 2), db::TrackArtistLinkType::Conductor);
|
||||
bindItem("artist-type-lyricist", Wt::WString::trn("Lms.Explore.lyricist", 2), db::TrackArtistLinkType::Lyricist);
|
||||
bindItem("artist-type-mixer", Wt::WString::trn("Lms.Explore.mixer", 2), db::TrackArtistLinkType::Mixer);
|
||||
bindItem("artist-type-performer", Wt::WString::trn("Lms.Explore.performer", 2), db::TrackArtistLinkType::Performer);
|
||||
bindItem("artist-type-producer", Wt::WString::trn("Lms.Explore.producer", 2), db::TrackArtistLinkType::Producer);
|
||||
bindItem("artist-type-remixer", Wt::WString::trn("Lms.Explore.remixer", 2), db::TrackArtistLinkType::Remixer);
|
||||
}
|
||||
};
|
||||
} // namespace lms::ui
|
||||
|
||||
@@ -19,7 +19,10 @@
|
||||
|
||||
#include "ArtistView.hpp"
|
||||
|
||||
#include <array>
|
||||
|
||||
#include <Wt/WPushButton.h>
|
||||
#include <Wt/WStackedWidget.h>
|
||||
|
||||
#include "core/String.hpp"
|
||||
#include "database/Session.hpp"
|
||||
@@ -30,6 +33,8 @@
|
||||
#include "database/objects/Release.hpp"
|
||||
#include "database/objects/ScanSettings.hpp"
|
||||
#include "database/objects/Track.hpp"
|
||||
#include "database/objects/TrackArtistLink.hpp"
|
||||
#include "database/objects/Types.hpp"
|
||||
#include "database/objects/User.hpp"
|
||||
#include "services/feedback/IFeedbackService.hpp"
|
||||
#include "services/recommendation/IRecommendationService.hpp"
|
||||
@@ -40,6 +45,7 @@
|
||||
#include "LmsApplicationException.hpp"
|
||||
#include "PlayQueueController.hpp"
|
||||
#include "ReleaseHelpers.hpp"
|
||||
#include "TrackArtistTypeSelector.hpp"
|
||||
#include "TrackListHelpers.hpp"
|
||||
#include "Utils.hpp"
|
||||
#include "common/InfiniteScrollingContainer.hpp"
|
||||
@@ -272,31 +278,78 @@ namespace lms::ui
|
||||
|
||||
void Artist::refreshAppearsOnReleases()
|
||||
{
|
||||
_appearsOnReleases.clear();
|
||||
_appearsOnReleaseContainer = {};
|
||||
|
||||
auto addToReleaseContainer = [&](std::optional<db::TrackArtistLinkType> linkType) -> bool {
|
||||
db::Release::FindParameters params;
|
||||
params.setTrackArtist(_artistId);
|
||||
|
||||
core::EnumSet<db::TrackArtistLinkType> linkTypes;
|
||||
if (linkType)
|
||||
linkTypes.insert(*linkType);
|
||||
|
||||
params.setTrackArtist(_artistId, linkTypes);
|
||||
params.setSortMethod(db::ReleaseSortMethod::OriginalDateDesc);
|
||||
|
||||
db::Release::find(LmsApp->getDbSession(), params, [this](const db::Release::pointer& release) {
|
||||
if (!release->hasArtist(_artistId))
|
||||
_appearsOnReleaseContainer.releases.push_back(release->getId());
|
||||
bool found{};
|
||||
db::Release::find(LmsApp->getDbSession(), params, [&](const db::Release::pointer& release) {
|
||||
if (release->hasArtist(_artistId))
|
||||
return;
|
||||
|
||||
_appearsOnReleases[linkType].push_back(release->getId());
|
||||
found = true;
|
||||
});
|
||||
|
||||
if (!_appearsOnReleaseContainer.releases.empty())
|
||||
return found;
|
||||
};
|
||||
|
||||
constexpr std::array<std::optional<db::TrackArtistLinkType>, 9> types{
|
||||
std::nullopt,
|
||||
db::TrackArtistLinkType::Artist,
|
||||
db::TrackArtistLinkType::Composer,
|
||||
db::TrackArtistLinkType::Conductor,
|
||||
db::TrackArtistLinkType::Lyricist,
|
||||
db::TrackArtistLinkType::Mixer,
|
||||
db::TrackArtistLinkType::Performer,
|
||||
db::TrackArtistLinkType::Producer,
|
||||
db::TrackArtistLinkType::Remixer,
|
||||
};
|
||||
|
||||
core::EnumSet<db::TrackArtistLinkType> foundTypes;
|
||||
for (const auto type : types)
|
||||
{
|
||||
Wt::WTemplate* releaseContainer{ bindNew<Wt::WTemplate>("appears-on-releases", Wt::WString::tr("Lms.Explore.Artist.template.release-container")) };
|
||||
releaseContainer->bindString("release-type", Wt::WString::tr("Lms.Explore.Artist.appears-on"));
|
||||
_appearsOnReleaseContainer.container = releaseContainer->bindNew<InfiniteScrollingContainer>("releases", Wt::WString::tr("Lms.Explore.Releases.template.container"));
|
||||
_appearsOnReleaseContainer.container->onRequestElements.connect(this, [this] {
|
||||
if (addToReleaseContainer(type) && type)
|
||||
foundTypes.insert(*type);
|
||||
}
|
||||
|
||||
if (!_appearsOnReleases.empty())
|
||||
{
|
||||
std::optional<db::TrackArtistLinkType> defaultType{ std::nullopt };
|
||||
if (_appearsOnReleases.size() == 2)
|
||||
{
|
||||
auto it{ std::find_if(std::cbegin(_appearsOnReleases), std::cend(_appearsOnReleases), [=](const auto& entry) { return entry.first != defaultType; }) };
|
||||
if (it != std::cend(_appearsOnReleases))
|
||||
defaultType = it->first;
|
||||
}
|
||||
|
||||
Wt::WTemplate* appearsOnContainer{ bindNew<Wt::WTemplate>("appears-on-releases", Wt::WString::tr("Lms.Explore.Artist.template.appears-on-container")) };
|
||||
appearsOnContainer->addFunction("tr", &Wt::WTemplate::Functions::tr);
|
||||
|
||||
_appearsOnReleaseContainer.container = appearsOnContainer->bindNew<InfiniteScrollingContainer>("releases", Wt::WString::tr("Lms.Explore.Releases.template.container"));
|
||||
_appearsOnReleaseContainer.releases = _appearsOnReleases[defaultType];
|
||||
_appearsOnReleaseContainer.container->onRequestElements.connect(this, [&] {
|
||||
addSomeReleases(_appearsOnReleaseContainer, { releaseListHelpers::DisplayOptions::ShowYearAndOriginalYear, releaseListHelpers::DisplayOptions::ShowArtist });
|
||||
});
|
||||
|
||||
TrackArtistTypeSelector* trackArtistTypeSelector{ appearsOnContainer->bindNew<TrackArtistTypeSelector>("artist-type", defaultType, foundTypes) };
|
||||
trackArtistTypeSelector->itemSelected.connect([this](std::optional<db::TrackArtistLinkType> newArtistLinkType) {
|
||||
_appearsOnReleaseContainer.releases = _appearsOnReleases[newArtistLinkType];
|
||||
_appearsOnReleaseContainer.container->reset();
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
bindEmpty("appears-on-releases");
|
||||
}
|
||||
}
|
||||
|
||||
void Artist::refreshNonReleaseTracks()
|
||||
{
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <map>
|
||||
#include <optional>
|
||||
|
||||
#include "core/EnumSet.hpp"
|
||||
|
||||
@@ -31,6 +32,7 @@
|
||||
#include "ReleaseHelpers.hpp"
|
||||
#include "ReleaseTypes.hpp"
|
||||
#include "common/Template.hpp"
|
||||
#include "database/objects/Types.hpp"
|
||||
|
||||
namespace lms::db
|
||||
{
|
||||
@@ -76,7 +78,8 @@ namespace lms::ui
|
||||
std::vector<db::ReleaseId> releases;
|
||||
};
|
||||
std::map<ReleaseType, ReleaseContainer> _releaseContainers;
|
||||
ReleaseContainer _appearsOnReleaseContainer{};
|
||||
std::map<std::optional<db::TrackArtistLinkType>, std::vector<db::ReleaseId>> _appearsOnReleases;
|
||||
ReleaseContainer _appearsOnReleaseContainer;
|
||||
InfiniteScrollingContainer* _trackContainer{};
|
||||
db::ArtistId _artistId{};
|
||||
std::string _artistName;
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
/*
|
||||
* Copyright (C) 2026 Emeric Poupon
|
||||
*
|
||||
* This file is part of LMS.
|
||||
*
|
||||
* LMS is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* LMS is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with LMS. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "TrackArtistTypeSelector.hpp"
|
||||
|
||||
#include <array>
|
||||
|
||||
namespace lms::ui
|
||||
{
|
||||
TrackArtistTypeSelector::TrackArtistTypeSelector(std::optional<db::TrackArtistLinkType> defaultRole, core::EnumSet<db::TrackArtistLinkType> types)
|
||||
: DropDownMenuSelector{ Wt::WString::tr("Lms.Explore.Artist.template.track-artist-type-selector"), defaultRole }
|
||||
{
|
||||
struct Entry
|
||||
{
|
||||
std::string var;
|
||||
Wt::WString title;
|
||||
std::optional<db::TrackArtistLinkType> linkType;
|
||||
core::LiteralString condition;
|
||||
};
|
||||
|
||||
auto bindItemWithCondition = [&](const std::string& var, const Wt::WString& title, std::optional<db::TrackArtistLinkType> item, core::LiteralString condition) {
|
||||
if (!condition.empty())
|
||||
setCondition(condition.c_str(), true);
|
||||
bindItem(var, title, item);
|
||||
};
|
||||
const std::array entries{
|
||||
Entry{ "artist-type-all", Wt::WString::tr("Lms.Explore.all-roles"), std::nullopt, core::LiteralString{} },
|
||||
Entry{ "artist-type-track-artist", Wt::WString::trn("Lms.Explore.track-artist", 1), db::TrackArtistLinkType::Artist, "if-has-track-artist" },
|
||||
Entry{ "artist-type-composer", Wt::WString::trn("Lms.Explore.composer", 1), db::TrackArtistLinkType::Composer, "if-has-composer" },
|
||||
Entry{ "artist-type-conductor", Wt::WString::trn("Lms.Explore.conductor", 1), db::TrackArtistLinkType::Conductor, "if-has-conductor" },
|
||||
Entry{ "artist-type-lyricist", Wt::WString::trn("Lms.Explore.lyricist", 1), db::TrackArtistLinkType::Lyricist, "if-has-lyricist" },
|
||||
Entry{ "artist-type-mixer", Wt::WString::trn("Lms.Explore.mixer", 1), db::TrackArtistLinkType::Mixer, "if-has-mixer" },
|
||||
Entry{ "artist-type-performer", Wt::WString::trn("Lms.Explore.performer", 1), db::TrackArtistLinkType::Performer, "if-has-performer" },
|
||||
Entry{ "artist-type-producer", Wt::WString::trn("Lms.Explore.producer", 1), db::TrackArtistLinkType::Producer, "if-has-producer" },
|
||||
Entry{ "artist-type-remixer", Wt::WString::trn("Lms.Explore.remixer", 1), db::TrackArtistLinkType::Remixer, "if-has-remixer" },
|
||||
};
|
||||
|
||||
for (const Entry& entry : entries)
|
||||
{
|
||||
if (!entry.linkType || types.contains(*entry.linkType))
|
||||
bindItemWithCondition(entry.var, entry.title, entry.linkType, entry.condition);
|
||||
}
|
||||
}
|
||||
} // namespace lms::ui
|
||||
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
* Copyright (C) 2026 Emeric Poupon
|
||||
*
|
||||
* This file is part of LMS.
|
||||
*
|
||||
* LMS is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* LMS is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with LMS. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "core/EnumSet.hpp"
|
||||
|
||||
#include "database/objects/Types.hpp"
|
||||
|
||||
#include "DropDownMenuSelector.hpp"
|
||||
|
||||
namespace lms::ui
|
||||
{
|
||||
class TrackArtistTypeSelector : public DropDownMenuSelector<std::optional<db::TrackArtistLinkType>>
|
||||
{
|
||||
public:
|
||||
TrackArtistTypeSelector(std::optional<db::TrackArtistLinkType> defaultRole, core::EnumSet<db::TrackArtistLinkType> types);
|
||||
};
|
||||
} // namespace lms::ui
|
||||
Reference in New Issue
Block a user