add lots of features
This commit is contained in:
@@ -7,6 +7,11 @@
|
||||
<div class="col-12">
|
||||
${export-query-profiling-btn class="btn btn-primary"}
|
||||
</div>
|
||||
<div class="col-12">
|
||||
${musicbrainz-resync-btn class="btn btn-warning"}
|
||||
<span class="ms-2">${musicbrainz-resync-status}</span>
|
||||
<div class="form-text">${tr:Lms.Admin.DebugTools.Db.musicbrainz-resync-help}</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</message>
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<messages>
|
||||
|
||||
<message id="Lms.Admin.InternetRadio.template">
|
||||
<legend>${tr:Lms.Admin.InternetRadio.title}</legend>
|
||||
<p class="text-body-secondary">${tr:Lms.Admin.InternetRadio.help}</p>
|
||||
<div class="card mb-4"><div class="card-body">
|
||||
<div class="row g-3 align-items-end">
|
||||
<div class="col-12 col-lg-3"><label class="form-label">${tr:Lms.Admin.InternetRadio.name}</label>${name class="form-control"}</div>
|
||||
<div class="col-12 col-lg-4"><label class="form-label">${tr:Lms.Admin.InternetRadio.stream-url}</label>${stream-url class="form-control"}</div>
|
||||
<div class="col-12 col-lg-4"><label class="form-label">${tr:Lms.Admin.InternetRadio.homepage-url}</label>${homepage-url class="form-control"}</div>
|
||||
<div class="col-12 col-lg-1 d-grid">${add-btn class="btn btn-primary"}</div>
|
||||
</div>
|
||||
</div></div>
|
||||
${stations class="d-grid gap-1 mb-3 Lms-row-container"}
|
||||
</message>
|
||||
|
||||
<message id="Lms.Admin.InternetRadio.template.entry">
|
||||
<div class="d-flex align-items-center Lms-bg-dark-hover">
|
||||
<div class="row align-items-center flex-fill overflow-hidden">
|
||||
<div class="col-12 col-md-3"><div class="p-2 fw-semibold text-truncate">${name}</div></div>
|
||||
<div class="col-12 col-md-5"><div class="p-2 text-truncate">${stream-url}</div></div>
|
||||
<div class="col-12 col-md-4"><div class="p-2 text-body-secondary text-truncate">${homepage-url}</div></div>
|
||||
</div>
|
||||
<div class="p-2 d-flex gap-1">${edit-btn class="btn btn-sm btn-outline-secondary border-0"}${delete-btn class="btn btn-sm btn-outline-danger border-0"}</div>
|
||||
</div>
|
||||
</message>
|
||||
|
||||
<message id="Lms.Admin.InternetRadio.template.edit">
|
||||
<div class="modal fade" tabindex="-1"><div class="modal-dialog"><div class="modal-content">
|
||||
<div class="modal-header"><h5 class="modal-title">${tr:Lms.Admin.InternetRadio.edit}</h5></div>
|
||||
<div class="modal-body">
|
||||
<div class="mb-3"><label class="form-label">${tr:Lms.Admin.InternetRadio.name}</label>${name class="form-control"}</div>
|
||||
<div class="mb-3"><label class="form-label">${tr:Lms.Admin.InternetRadio.stream-url}</label>${stream-url class="form-control"}</div>
|
||||
<div><label class="form-label">${tr:Lms.Admin.InternetRadio.homepage-url}</label>${homepage-url class="form-control"}</div>
|
||||
</div>
|
||||
<div class="modal-footer">${save-btn class="btn btn-primary"}${cancel-btn class="btn btn-secondary"}</div>
|
||||
</div></div></div>
|
||||
</message>
|
||||
|
||||
<message id="Lms.Admin.InternetRadio.template.delete">
|
||||
<div class="modal fade" tabindex="-1"><div class="modal-dialog"><div class="modal-content">
|
||||
<div class="modal-header"><h5 class="modal-title">${tr:Lms.Admin.InternetRadio.delete-confirm}</h5></div>
|
||||
<div class="modal-body">${tr:Lms.Admin.InternetRadio.delete-help}</div>
|
||||
<div class="modal-footer">${delete-btn class="btn btn-danger"}${cancel-btn class="btn btn-secondary"}</div>
|
||||
</div></div></div>
|
||||
</message>
|
||||
|
||||
</messages>
|
||||
@@ -0,0 +1,66 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<messages>
|
||||
|
||||
<message id="Lms.Admin.Podcasts.template">
|
||||
<legend>${tr:Lms.Admin.Podcasts.podcasts}</legend>
|
||||
<p class="text-body-secondary">${tr:Lms.Admin.Podcasts.help}</p>
|
||||
<div class="input-group mb-3">
|
||||
${url class="form-control"}
|
||||
${add-btn class="btn btn-primary"}
|
||||
</div>
|
||||
<div class="d-flex justify-content-end mb-3">
|
||||
${refresh-btn class="btn btn-secondary"}
|
||||
</div>
|
||||
${podcasts class="d-grid gap-1 mb-3 Lms-row-container"}
|
||||
</message>
|
||||
|
||||
<message id="Lms.Admin.Podcasts.template.entry">
|
||||
<div class="d-flex align-items-center Lms-bg-dark-hover">
|
||||
<div class="row align-items-center flex-fill">
|
||||
<div class="col-12 col-md-4"><div class="p-2">${title class="d-block text-truncate"}</div></div>
|
||||
<div class="col-12 col-md-8"><div class="p-2 d-none d-md-block">${url class="d-block text-truncate"}</div></div>
|
||||
</div>
|
||||
<div class="p-2 d-flex">${delete-btn class="btn btn-sm btn-outline-danger border-0"}</div>
|
||||
</div>
|
||||
</message>
|
||||
|
||||
<message id="Lms.Admin.Podcasts.template.delete">
|
||||
<div class="modal fade" tabindex="-1">
|
||||
<div class="modal-dialog"><div class="modal-content">
|
||||
<div class="modal-header"><h5 class="modal-title">${tr:Lms.Admin.Podcasts.delete-confirm}</h5></div>
|
||||
<div class="modal-body">${tr:Lms.Admin.Podcasts.delete-help}</div>
|
||||
<div class="modal-footer">${delete-btn class="btn btn-danger me-1"}${cancel-btn class="btn btn-secondary"}</div>
|
||||
</div></div>
|
||||
</div>
|
||||
</message>
|
||||
|
||||
<message id="Lms.Admin.Podcasts.template.episodes">
|
||||
<div class="modal fade" tabindex="-1">
|
||||
<div class="modal-dialog modal-xl modal-dialog-scrollable"><div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">${title}</h5>
|
||||
${close-x class="btn-close" aria-label="Close"}
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
${episodes class="d-grid gap-1 Lms-row-container"}
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
${download-all-btn class="btn btn-primary"}
|
||||
${close-btn class="btn btn-secondary"}
|
||||
</div>
|
||||
</div></div>
|
||||
</div>
|
||||
</message>
|
||||
|
||||
<message id="Lms.Admin.Podcasts.template.episode">
|
||||
<div class="d-flex align-items-center Lms-bg-dark-hover p-2 gap-2">
|
||||
<div class="flex-fill overflow-hidden">
|
||||
<div class="text-truncate">${title}</div>
|
||||
<small class="text-body-secondary">${date}</small>
|
||||
</div>
|
||||
${status}
|
||||
${download-btn class="btn btn-sm btn-outline-primary"}
|
||||
</div>
|
||||
</message>
|
||||
|
||||
</messages>
|
||||
@@ -23,6 +23,15 @@
|
||||
</div>
|
||||
</div>
|
||||
${</if-has-login>}
|
||||
<div class="col-lg-6">
|
||||
<label class="form-label" for="${id:display-name}">
|
||||
${tr:Lms.Admin.User.display-name}
|
||||
</label>
|
||||
${display-name class="form-control"}
|
||||
<div class="invalid-feedback">
|
||||
${display-name-info}
|
||||
</div>
|
||||
</div>
|
||||
${<if-has-password>}
|
||||
<div class="col-lg-6">
|
||||
<label class="form-label" for="${id:password}">
|
||||
@@ -47,6 +56,10 @@
|
||||
</div>
|
||||
</div>
|
||||
${</if-demo>}
|
||||
<div class="col-12">
|
||||
<label class="form-label">${tr:Lms.Admin.User.media-libraries}</label>
|
||||
${media-libraries class="d-grid gap-1"}
|
||||
</div>
|
||||
<div class="col-12">
|
||||
${save-btn class="btn btn-primary"}
|
||||
</div>
|
||||
|
||||
@@ -23,6 +23,20 @@
|
||||
</div>
|
||||
</message>
|
||||
|
||||
<message id="Lms.Admin.Users.template.edit-user">
|
||||
<div class="modal fade" tabindex="-1">
|
||||
<div class="modal-dialog modal-lg modal-dialog-scrollable">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">${tr:Lms.Admin.Users.edit-user}</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body">${content}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</message>
|
||||
|
||||
<message id="Lms.Admin.Users.template.delete-user">
|
||||
<div class="modal fade" tabindex="-1">
|
||||
<div class="modal-dialog">
|
||||
|
||||
@@ -31,6 +31,9 @@
|
||||
<li class="nav-item">
|
||||
${tracklists class="nav-link"}
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
${podcasts class="nav-link"}
|
||||
</li>
|
||||
</ul>
|
||||
${filters class="d-flex align-items-center me-auto mb-2 mb-md-0"}
|
||||
<div class="navbar-nav align-items-md-center">
|
||||
@@ -41,6 +44,8 @@
|
||||
</a>
|
||||
<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="navbarDropdown">
|
||||
<li>${media-libraries class="dropdown-item"}</li>
|
||||
<li>${admin-podcasts class="dropdown-item"}</li>
|
||||
<li>${admin-internet-radio class="dropdown-item"}</li>
|
||||
<li>${scan-settings class="dropdown-item"}</li>
|
||||
<li>${scanner class="dropdown-item"}</li>
|
||||
<li>${users class="dropdown-item"}</li>
|
||||
|
||||
@@ -45,6 +45,7 @@
|
||||
</div>
|
||||
<div class="py-2 ps-2">
|
||||
${playqueue-btn class="btn btn-outline-primary border-0"}
|
||||
${share-btn class="btn btn-outline-primary border-0"}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -56,4 +57,8 @@
|
||||
</span>
|
||||
</message>
|
||||
|
||||
<message id="Lms.MediaPlayer.template.share-btn">
|
||||
<i class="fa fa-fw fa-share-alt" aria-hidden="true"></i>
|
||||
</message>
|
||||
|
||||
</messages>
|
||||
|
||||
@@ -170,6 +170,9 @@
|
||||
<!--Db-->
|
||||
<message id="Lms.Admin.DebugTools.Db.export-query-profiling">Export query profiling data</message>
|
||||
<message id="Lms.Admin.DebugTools.Db.db">Database</message>
|
||||
<message id="Lms.Admin.DebugTools.Db.musicbrainz-resync">Resync albums from MusicBrainz</message>
|
||||
<message id="Lms.Admin.DebugTools.Db.musicbrainz-resync-help">Updates MusicBrainz-tagged albums at one request per second. Albums without a MusicBrainz release ID are skipped.</message>
|
||||
<message id="Lms.Admin.DebugTools.Db.musicbrainz-resync-progress">{1} / {2} processed — {3} updated, {4} skipped, {5} failed</message>
|
||||
|
||||
<!--PcmDecodingStats-->
|
||||
<message id="Lms.Admin.DebugTools.PcmDecodingStats.pcm-decoding-stats">PCM decoding stats</message>
|
||||
@@ -187,12 +190,15 @@
|
||||
<message id="Lms.Admin.Users.admin">Admin</message>
|
||||
<message id="Lms.Admin.Users.del-user-confirm">Delete user?</message>
|
||||
<message id="Lms.Admin.Users.demo">Demo</message>
|
||||
<message id="Lms.Admin.Users.edit-user">Edit user</message>
|
||||
<message id="Lms.Admin.Users.users">Users</message>
|
||||
|
||||
<!--User-->
|
||||
<message id="Lms.Admin.User.demo-account">Demo account</message>
|
||||
<message id="Lms.Admin.User.demo-account-already-exists">Demo account already exists!</message>
|
||||
<message id="Lms.Admin.User.display-name">Display name</message>
|
||||
<message id="Lms.Admin.User.last-login">Last login</message>
|
||||
<message id="Lms.Admin.User.media-libraries">Visible libraries</message>
|
||||
<message id="Lms.Admin.User.user-already-exists">User already exists!</message>
|
||||
<message id="Lms.Admin.User.user-create">New user</message>
|
||||
<message id="Lms.Admin.User.user-created">New user created!</message>
|
||||
@@ -363,7 +369,59 @@
|
||||
<!--PlayHistory-->
|
||||
<message id="Lms.PlayHistory.playhistory">Play History</message>
|
||||
|
||||
<!--Podcasts-->
|
||||
<message id="Lms.Podcasts.podcasts">Podcasts</message>
|
||||
<message id="Lms.Podcasts.empty">No podcast feeds have been added yet.</message>
|
||||
<message id="Lms.Podcasts.back">← All podcasts</message>
|
||||
<message id="Lms.Podcasts.no-episodes">No episodes have been discovered yet.</message>
|
||||
<message id="Lms.Podcasts.play"><i class="fa fa-play" aria-hidden="true"></i> Play</message>
|
||||
<message id="Lms.Podcasts.download"><i class="fa fa-download" aria-hidden="true"></i> Download</message>
|
||||
<message id="Lms.Podcasts.download-requested">Episode download requested.</message>
|
||||
<message id="Lms.Podcasts.status.downloaded">Downloaded</message>
|
||||
<message id="Lms.Podcasts.status.downloading">Downloading</message>
|
||||
<message id="Lms.Podcasts.status.deleting">Deleting</message>
|
||||
<message id="Lms.Podcasts.status.not-downloaded">Not downloaded</message>
|
||||
|
||||
<!--Settings-->
|
||||
<message id="Lms.Admin.menu-podcasts"><i class="fa fa-fw fa-podcast" aria-hidden="true"></i> Podcasts</message>
|
||||
<message id="Lms.Admin.Podcasts.podcasts">Podcasts</message>
|
||||
<message id="Lms.Admin.Podcasts.help">Add an RSS feed to check it daily and automatically download new episodes. Podcast clients can manage the same feeds through the Subsonic podcast API.</message>
|
||||
<message id="Lms.Admin.Podcasts.feed-url-placeholder">https://example.com/podcast.rss</message>
|
||||
<message id="Lms.Admin.Podcasts.add-feed">Add RSS feed</message>
|
||||
<message id="Lms.Admin.Podcasts.refresh-now">Scan for new episodes</message>
|
||||
<message id="Lms.Admin.Podcasts.refresh-started">Podcast scan started.</message>
|
||||
<message id="Lms.Admin.Podcasts.invalid-url">Enter a valid HTTP or HTTPS RSS feed URL.</message>
|
||||
<message id="Lms.Admin.Podcasts.feed-added">Podcast feed added. Its episodes are being refreshed.</message>
|
||||
<message id="Lms.Admin.Podcasts.feed-deleted">Podcast feed deleted.</message>
|
||||
<message id="Lms.Admin.Podcasts.pending-title">Waiting for feed metadata…</message>
|
||||
<message id="Lms.Admin.Podcasts.episodes">Podcast episodes</message>
|
||||
<message id="Lms.Admin.Podcasts.download-all">Download all</message>
|
||||
<message id="Lms.Admin.Podcasts.download-all-requested">All available podcast episodes were queued for download.</message>
|
||||
<message id="Lms.Admin.Podcasts.close">Close</message>
|
||||
<message id="Lms.Admin.Podcasts.delete-confirm">Delete podcast feed?</message>
|
||||
<message id="Lms.Admin.Podcasts.delete-help">The feed, downloaded episodes, and cached artwork will be removed.</message>
|
||||
|
||||
<!-- Internet radio -->
|
||||
<message id="Lms.Admin.menu-internet-radio"><i class="fa fa-fw fa-broadcast-tower" aria-hidden="true"></i> Internet radio</message>
|
||||
<message id="Lms.Admin.InternetRadio.title">Internet radio</message>
|
||||
<message id="Lms.Admin.InternetRadio.help">Add live audio streams here to make them available to Subsonic-compatible players, including Supersonic.</message>
|
||||
<message id="Lms.Admin.InternetRadio.name">Station name</message>
|
||||
<message id="Lms.Admin.InternetRadio.stream-url">Stream URL</message>
|
||||
<message id="Lms.Admin.InternetRadio.homepage-url">Homepage URL (optional)</message>
|
||||
<message id="Lms.Admin.InternetRadio.name-placeholder">Station name</message>
|
||||
<message id="Lms.Admin.InternetRadio.stream-url-placeholder">https://radio.example.com/live.mp3</message>
|
||||
<message id="Lms.Admin.InternetRadio.homepage-url-placeholder">https://radio.example.com</message>
|
||||
<message id="Lms.Admin.InternetRadio.add">Add</message>
|
||||
<message id="Lms.Admin.InternetRadio.added">Radio station added.</message>
|
||||
<message id="Lms.Admin.InternetRadio.saved">Radio station saved.</message>
|
||||
<message id="Lms.Admin.InternetRadio.deleted">Radio station deleted.</message>
|
||||
<message id="Lms.Admin.InternetRadio.edit">Edit radio station</message>
|
||||
<message id="Lms.Admin.InternetRadio.empty">No internet radio stations have been added yet.</message>
|
||||
<message id="Lms.Admin.InternetRadio.no-homepage">No homepage</message>
|
||||
<message id="Lms.Admin.InternetRadio.invalid-name">Enter a station name.</message>
|
||||
<message id="Lms.Admin.InternetRadio.invalid-url">Enter valid HTTP or HTTPS URLs.</message>
|
||||
<message id="Lms.Admin.InternetRadio.delete-confirm">Delete radio station?</message>
|
||||
<message id="Lms.Admin.InternetRadio.delete-help">The station will no longer appear in connected Subsonic players.</message>
|
||||
<message id="Lms.Settings.artist-release-sort-method">Method to sort artist's albums</message>
|
||||
<message id="Lms.Settings.audio">Audio</message>
|
||||
<message id="Lms.Settings.audio-settings-are-local">These audio settings are local to your browser</message>
|
||||
|
||||
@@ -65,7 +65,8 @@
|
||||
${more-btn data-bs-toggle="dropdown" aria-expanded="false" class="btn btn-sm btn-outline-secondary border-0"}
|
||||
<ul class="dropdown-menu" aria-labelledby="${id:more-btn}">
|
||||
<li>${play class="dropdown-item"}</li>
|
||||
<li>${star class="dropdown-item"}</li>
|
||||
${<if-has-star>}<li>${star class="dropdown-item"}</li>${</if-has-star>}
|
||||
<li>${share class="dropdown-item"}</li>
|
||||
${<if-has-download>}
|
||||
<li>${download class="dropdown-item"}</li>
|
||||
${</if-has-download>}
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<messages>
|
||||
|
||||
<message id="Lms.Podcasts.template">
|
||||
<legend class="mb-3">${tr:Lms.Podcasts.podcasts}</legend>
|
||||
<div class="clearfix"></div>
|
||||
${content class="d-block w-100"}
|
||||
</message>
|
||||
|
||||
<message id="Lms.Podcasts.template.channel">
|
||||
<div class="card w-100">
|
||||
<div class="row g-0 align-items-center">
|
||||
<div class="col-auto p-2">
|
||||
<div class="Lms-cover-container" style="width: 8rem; height: 8rem;">
|
||||
${cover class="shadow-sm rounded w-100 h-100" style="object-fit: cover;"}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col min-width-0">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">${title}</h5>
|
||||
<p class="card-text text-body-secondary mb-0 text-break">${description}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-auto p-2">${share-btn class="btn btn-sm btn-outline-secondary"}</div>
|
||||
</div>
|
||||
</div>
|
||||
</message>
|
||||
|
||||
<message id="Lms.Podcasts.template.channel-header">
|
||||
<div class="mb-3 clearfix">
|
||||
${back class="btn btn-sm btn-outline-secondary mb-3"}
|
||||
<div class="d-flex gap-3 align-items-center">
|
||||
<div class="Lms-cover-container flex-shrink-0" style="width: 8rem; height: 8rem;">
|
||||
${cover class="shadow-sm rounded w-100 h-100" style="object-fit: cover;"}
|
||||
</div>
|
||||
<div class="min-width-0 flex-fill">
|
||||
<h2>${title}</h2>
|
||||
<p class="text-body-secondary mb-0">${description}</p>
|
||||
</div>
|
||||
${share-btn class="btn btn-sm btn-outline-secondary"}
|
||||
</div>
|
||||
</div>
|
||||
</message>
|
||||
|
||||
<message id="Lms.Podcasts.template.episode">
|
||||
<div class="d-flex align-items-center Lms-bg-dark-hover p-2 gap-2 ${row-class}">
|
||||
<div class="flex-fill overflow-hidden">
|
||||
<div class="text-truncate">${title}</div>
|
||||
<small class="text-body-secondary">${date}</small>
|
||||
</div>
|
||||
${action-btn class="btn btn-sm btn-outline-primary"}
|
||||
${share-btn class="btn btn-sm btn-outline-secondary"}
|
||||
</div>
|
||||
</message>
|
||||
|
||||
</messages>
|
||||
@@ -24,6 +24,7 @@
|
||||
<li>${play-last class="dropdown-item"}</li>
|
||||
<li>${play-shuffled class="dropdown-item"}</li>
|
||||
<li>${star class="dropdown-item"}</li>
|
||||
<li>${share class="dropdown-item"}</li>
|
||||
${<if-has-mbid>}
|
||||
<li><a href="${mbid-link}" target="_blank" class="dropdown-item">${tr:Lms.Explore.musicbrainz-release}</a></li>
|
||||
${</if-has-mbid>}
|
||||
@@ -118,6 +119,7 @@
|
||||
<li>${play-next class="dropdown-item"}</li>
|
||||
<li>${play-last class="dropdown-item"}</li>
|
||||
<li>${star class="dropdown-item"}</li>
|
||||
<li>${share class="dropdown-item"}</li>
|
||||
${<if-has-download>}
|
||||
<li>${download class="dropdown-item"}</li>
|
||||
${</if-has-download>}
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
<div class="p-2">
|
||||
<div class="Lms-responsive-square Lms-cover-container mb-1">
|
||||
${cover class="shadow-sm"}
|
||||
${share-btn class="btn btn-sm btn-primary position-absolute top-0 end-0 m-1"}
|
||||
</div>
|
||||
${release-name class="Lms-multiline-clamp text-decoration-none link-success"}
|
||||
${<if-has-artist>}${artist-name class="Lms-multiline-clamp"}${</if-has-artist>}
|
||||
|
||||
@@ -60,6 +60,7 @@
|
||||
<li>${play-next class="dropdown-item"}</li>
|
||||
<li>${play-last class="dropdown-item"}</li>
|
||||
<li>${star class="dropdown-item"}</li>
|
||||
<li>${share class="dropdown-item"}</li>
|
||||
${<if-has-download>}
|
||||
<li>${download class="dropdown-item"}</li>
|
||||
${</if-has-download>}
|
||||
|
||||
Reference in New Issue
Block a user