Merge pull request #40 from akhilrex/player

add podast player
pull/46/head
Akhil Gupta 4 years ago committed by GitHub
commit 8a76a55a2e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -106,10 +106,10 @@
</div> </div>
</form> </form>
<br /> <br />
<progress v-if="searching" class="u-full-width"></progress> <progress v-show="searching" class="u-full-width"></progress>
<div class="results"> <div class="results">
<div v-for="item in results" :key="item.url"> <div v-for="item in results" :key="item.url" class="row">
<div class="row">
<div class="columns two"> <div class="columns two">
<img <img
class="u-full-width" class="u-full-width"
@ -138,7 +138,7 @@
Already Added Already Added
</button> </button>
</div> </div>
</div>
<hr /> <hr />
</div> </div>
</div> </div>

@ -117,6 +117,12 @@
title="Delete Podcast Episode File" title="Delete Podcast Episode File"
><i class="fas fa-trash"></i ><i class="fas fa-trash"></i
></a> ></a>
<a
class="button button"
onclick="openPlayer('{{.ID}}')"
title="Play Episode"
><i class="fas fa-play"></i
></a>
{{else}} {{if not $setting.AutoDownload}} {{else}} {{if not $setting.AutoDownload}}
<a <a

@ -125,14 +125,14 @@
</div> </div>
<div <div
class="columns" v-bind:class="{five:layout=='list', twelve:layout=='grid'}" class="columns" v-bind:class="{four:layout=='list', twelve:layout=='grid'}"
:title="getEpisodeCountTooltip(podcast)" :title="getEpisodeCountTooltip(podcast)"
> >
<template v-if="podcast.DownloadingEpisodesCount"> <template v-if="podcast.DownloadingEpisodesCount">
(${podcast.DownloadingEpisodesCount})/</template>${podcast.DownloadedEpisodesCount}/${podcast.AllEpisodesCount} (${podcast.DownloadingEpisodesCount})/</template>${podcast.DownloadedEpisodesCount}/${podcast.AllEpisodesCount}
episodes episodes
</div> </div>
<div class="columns" v-bind:class="{three:layout=='list', twelve:layout=='grid'}"> <div class="columns" v-bind:class="{four:layout=='list', twelve:layout=='grid'}">
<button <button
class="button button-delete" class="button button-delete"
@click="deletePodcast(podcast.ID)" @click="deletePodcast(podcast.ID)"
@ -155,6 +155,15 @@
> >
<i class="fas fa-download"></i> <i class="fas fa-download"></i>
</button> </button>
<button
class="button"
title="Play all downloaded episodes"
v-if="podcast.DownloadedEpisodesCount>0"
@click="playPodcast(podcast.ID)"
>
<i class="fas fa-play"></i>
</button>
</div> </div>
</div> </div>
</div> </div>
@ -265,6 +274,7 @@
this.podcasts.splice(index,1); this.podcasts.splice(index,1);
});}, });},
deletePodcastEpisodes(id){ deletePodcastEpisodes(id)}, deletePodcastEpisodes(id){ deletePodcastEpisodes(id)},
playPodcast(id){openPlayer("",id)},
}, },
mounted(){ mounted(){
if(localStorage?.sortOrder){ if(localStorage?.sortOrder){

@ -149,6 +149,7 @@ div#overlay{
<li class="navbar-item"><a class="navbar-link" href="/">Home</a></li> <li class="navbar-item"><a class="navbar-link" href="/">Home</a></li>
<li class="navbar-item"><a class="navbar-link" href="/episodes">Episodes</a></li> <li class="navbar-item"><a class="navbar-link" href="/episodes">Episodes</a></li>
<li class="navbar-item"><a class="navbar-link" href="/add">Add Podcast</a></li> <li class="navbar-item"><a class="navbar-link" href="/add">Add Podcast</a></li>
<li class="navbar-item"><a class="navbar-link" href="/player">Player</a></li>
<li class="navbar-item"><a class="navbar-link" href="/settings">Settings</a></li> <li class="navbar-item"><a class="navbar-link" href="/settings">Settings</a></li>
</ul> </ul>
@ -160,6 +161,7 @@ div#overlay{
<li><a href="/">Home</a></li> <li><a href="/">Home</a></li>
<li><a href="/episodes">Episodes</a></li> <li><a href="/episodes">Episodes</a></li>
<li><a href="/add">Add Podcast</a></li> <li><a href="/add">Add Podcast</a></li>
<li><a href="/player">Player</a></li>
<li><a href="/settings">Settings</a></li> <li><a href="/settings">Settings</a></li>
</ul> </ul>
<div id="closeDrawer" onclick="toggleMenu()" > <div id="closeDrawer" onclick="toggleMenu()" >

@ -0,0 +1,839 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>{{.title}} - PodGrab</title>
{{template "commoncss" .}}
<style>
/*
1. Base
*/
/*
2. Components
*/
div#amplitude-player {
background: #FFFFFF;
box-shadow: 0 2px 12px 8px rgba(0, 0, 0, 0.1);
margin: auto;
margin-top: 20px;
margin-bottom: 20px;
display: flex;
max-width: 900px; }
/* Small only */
@media screen and (max-width: 39.9375em) {
div#amplitude-player {
flex-direction: column; } }
/* Medium only */
@media screen and (min-width: 40em) and (max-width: 63.9375em) {
div#amplitude-player {
max-height: 715px; } }
/* Large and up */
@media screen and (min-width: 64em) {
div#amplitude-player {
max-height: 715px; } }
div#amplitude-left {
padding: 0px;
border-right: 1px solid #CFD8DC;
width: 50%;
display: flex;
flex-direction: column; }
div#amplitude-left img.album-art {
width: 100%; }
div#amplitude-left div#player-left-bottom {
flex: 1;
background-color:inherit;
padding: 20px 10px; }
div#amplitude-left div#player-left-bottom div#volume-container:after {
content: "";
display: table;
clear: both; }
/* Small only */
@media screen and (max-width: 39.9375em) {
div#amplitude-player div#amplitude-left {
width: 100%; }
div#amplitude-player div#amplitude-left img[amplitude-song-info="cover_art_url"] {
width: auto;
height: auto; } }
div#amplitude-right {
padding: 0px;
overflow-y: scroll;
width: 50%;
display: flex;
flex-direction: column; }
div#amplitude-right div.song {
cursor: pointer;
padding: 10px; }
div#amplitude-right div.song div.song-now-playing-icon-container {
float: left;
width: 20px;
background: inherit;
height: 20px;
margin-right: 10px; }
div#amplitude-right div.song div.song-now-playing-icon-container img.now-playing {
display: none;
margin-top: 15px; }
div#amplitude-right div.song div.play-button-container {
display: none;
background: url("/webassets/list-play-light.png") no-repeat;
width: 22px;
height: 22px;
margin-top: 10px; }
div#amplitude-right div.song div.play-button-container:hover {
background: url("/webassets/list-play-hover.png") no-repeat; }
div#amplitude-right div.song.amplitude-active-song-container div.song-now-playing-icon-container img.now-playing {
display: block;background-color: inherit; }
div#amplitude-right div.song.amplitude-active-song-container:hover div.play-button-container {
display: none; }
div#amplitude-right div.song div.song-meta-data {
float: left;
background: inherit;
width: calc( 100% - 110px ); }
div#amplitude-right div.song div.song-meta-data span.song-title {
font-size: 16px;
display: block;
font-weight: 300;
white-space: nowrap;
overflow: hidden;
background: inherit;
text-overflow: ellipsis; }
div#amplitude-right div.song div.song-meta-data span.song-date {
font-size: 12px;
display: block;
font-weight: 300;
white-space: nowrap;
overflow: hidden;
background: inherit;
text-overflow: ellipsis; }
div#amplitude-right div.song div.song-meta-data span.song-artist {
font-size: 14px;
font-weight: bold;
text-transform: uppercase;
display: block;
white-space: nowrap;
overflow: hidden;
background: inherit;
text-overflow: ellipsis; }
div#amplitude-right div.song img.bandcamp-grey {
float: left;
display: block;
margin-top: 10px; }
div#amplitude-right div.song img.bandcamp-white {
float: left;
display: none;
margin-top: 10px; }
div#amplitude-right div.song span.song-duration {
float: left;
width: 55px;
text-align: center;
line-height: 45px;
color: #607D8B;
background: inherit;
font-size: 16px;
font-weight: 500; }
div#amplitude-right div.song:after {
content: "";
display: table;
clear: both; }
/* Small only */
@media screen and (max-width: 39.9375em) {
div#amplitude-player div#amplitude-right {
width: 100%; } }
div#progress-container {
width: 70%;
float: left;
position: relative;
height: 20px;
cursor: pointer;
/*
IE 11
*/ }
div#progress-container:hover input[type=range].amplitude-song-slider::-webkit-slider-thumb {
display: block; }
div#progress-container:hover input[type=range].amplitude-song-slider::-moz-range-thumb {
visibility: visible; }
div#progress-container progress#song-played-progress {
width: 100%;
position: absolute;
left: 0;
top: 8px;
right: 0;
width: 100%;
z-index: 60;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
height: 4px;
border-radius: 5px;
background: transparent;
border: none;
/* Needed for Firefox */ }
@media all and (-ms-high-contrast: none) {
div#progress-container *::-ms-backdrop, div#progress-container progress#song-played-progress {
color: #00A0FF;
border: none;
background-color: #CFD8DC; } }
@supports (-ms-ime-align: auto) {
div#progress-container progress#song-played-progress {
color: #00A0FF;
border: none; } }
div#progress-container progress#song-played-progress[value]::-webkit-progress-bar {
background: none;
border-radius: 5px; }
div#progress-container progress#song-played-progress[value]::-webkit-progress-value {
background-color: #00A0FF;
border-radius: 5px; }
div#progress-container progress#song-played-progress::-moz-progress-bar {
background: none;
border-radius: 5px;
background-color: #00A0FF;
height: 5px;
margin-top: -2px; }
div#progress-container progress#song-buffered-progress {
position: absolute;
left: 0;
top: 8px;
right: 0;
width: 100%;
z-index: 10;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
height: 4px;
border-radius: 5px;
background: transparent;
border: none;
background-color: #D7DEE3; }
div#progress-container progress#song-buffered-progress[value]::-webkit-progress-bar {
background-color: #CFD8DC;
border-radius: 5px; }
div#progress-container progress#song-buffered-progress[value]::-webkit-progress-value {
background-color: #78909C;
border-radius: 5px;
transition: width .1s ease; }
div#progress-container progress#song-buffered-progress::-moz-progress-bar {
background: none;
border-radius: 5px;
background-color: #78909C;
height: 5px;
margin-top: -2px; }
div#progress-container progress::-ms-fill {
border: none; }
@-moz-document url-prefix() {
div#progress-container progress#song-buffered-progress {
top: 9px;
border: none; } }
@media all and (-ms-high-contrast: none) {
div#progress-container *::-ms-backdrop, div#progress-container progress#song-buffered-progress {
color: #78909C;
border: none; } }
@supports (-ms-ime-align: auto) {
div#progress-container progress#song-buffered-progress {
color: #78909C;
border: none; } }
div#progress-container input[type=range] {
-webkit-appearance: none;
width: 100%;
margin: 7.5px 0;
position: absolute;
z-index: 9999;
top: -7px;
height: 20px;
cursor: pointer;
background-color: transparent; }
div#progress-container input[type=range]:focus {
outline: none; }
div#progress-container input[type=range]::-webkit-slider-runnable-track {
width: 100%;
height: 0px;
cursor: pointer;
box-shadow: 0px 0px 0px rgba(0, 0, 0, 0), 0px 0px 0px rgba(13, 13, 13, 0);
background: #0075a9;
border-radius: 0px;
border: 0px solid #010101; }
div#progress-container input[type=range]::-webkit-slider-thumb {
box-shadow: 0px 0px 0px #000000, 0px 0px 0px #0d0d0d;
border: 1px solid #00a0ff;
height: 15px;
width: 15px;
border-radius: 16px;
background: #00a0ff;
cursor: pointer;
-webkit-appearance: none;
margin-top: -7.5px; }
div#progress-container input[type=range]:focus::-webkit-slider-runnable-track {
background: #00adfb; }
div#progress-container input[type=range]::-moz-range-track {
width: 100%;
height: 0px;
cursor: pointer;
box-shadow: 0px 0px 0px rgba(0, 0, 0, 0), 0px 0px 0px rgba(13, 13, 13, 0);
background: #0075a9;
border-radius: 0px;
border: 0px solid #010101; }
div#progress-container input[type=range]::-moz-range-thumb {
box-shadow: 0px 0px 0px #000000, 0px 0px 0px #0d0d0d;
border: 1px solid #00a0ff;
height: 15px;
width: 15px;
border-radius: 16px;
background: #00a0ff;
cursor: pointer; }
div#progress-container input[type=range]::-ms-track {
width: 100%;
height: 0px;
cursor: pointer;
background: transparent;
border-color: transparent;
color: transparent; }
div#progress-container input[type=range]::-ms-fill-lower {
background: #003d57;
border: 0px solid #010101;
border-radius: 0px;
box-shadow: 0px 0px 0px rgba(0, 0, 0, 0), 0px 0px 0px rgba(13, 13, 13, 0); }
div#progress-container input[type=range]::-ms-fill-upper {
background: #0075a9;
border: 0px solid #010101;
border-radius: 0px;
box-shadow: 0px 0px 0px rgba(0, 0, 0, 0), 0px 0px 0px rgba(13, 13, 13, 0); }
div#progress-container input[type=range]::-ms-thumb {
box-shadow: 0px 0px 0px #000000, 0px 0px 0px #0d0d0d;
border: 1px solid #00a0ff;
height: 15px;
width: 15px;
border-radius: 16px;
background: #00a0ff;
cursor: pointer;
height: 0px;
display: block; }
@media all and (-ms-high-contrast: none) {
div#progress-container *::-ms-backdrop, div#progress-container input[type="range"].amplitude-song-slider {
padding: 0px; }
div#progress-container *::-ms-backdrop, div#progress-container input[type=range].amplitude-song-slider::-ms-thumb {
height: 15px;
width: 15px;
border-radius: 10px;
cursor: pointer;
margin-top: -8px; }
div#progress-container *::-ms-backdrop, div#progress-container input[type=range].amplitude-song-slider::-ms-track {
border-width: 15px 0;
border-color: transparent; }
div#progress-container *::-ms-backdrop, div#progress-container input[type=range].amplitude-song-slider::-ms-fill-lower {
background: #CFD8DC;
border-radius: 10px; }
div#progress-container *::-ms-backdrop, div#progress-container input[type=range].amplitude-song-slider::-ms-fill-upper {
background: #CFD8DC;
border-radius: 10px; } }
@supports (-ms-ime-align: auto) {
div#progress-container input[type=range].amplitude-song-slider::-ms-thumb {
height: 15px;
width: 15px;
margin-top: 3px; } }
div#progress-container input[type=range]:focus::-ms-fill-lower {
background: #0075a9; }
div#progress-container input[type=range]:focus::-ms-fill-upper {
background: #00adfb; }
div#control-container {
margin-top: 25px;
margin-top: 20px; }
div#control-container div#repeat-container {
width: 25%;
float: left;
padding-top: 20px; }
div#control-container div#repeat-container div#repeat {
width: 24px;
height: 19px;
cursor: pointer; }
div#control-container div#repeat-container div#repeat.amplitude-repeat-off {
background: url("/webassets/repeat-off.svg"); }
div#control-container div#repeat-container div#repeat.amplitude-repeat-on {
background: url("/webassets/repeat-on.svg"); }
div#control-container div#repeat-container div#shuffle {
width: 23px;
height: 19px;
cursor: pointer;
float: right; }
div#control-container div#repeat-container div#shuffle.amplitude-shuffle-off {
background: url("/webassets/shuffle-off.svg"); }
div#control-container div#repeat-container div#shuffle.amplitude-shuffle-on {
background: url("/webassets/shuffle-on.svg"); }
@media all and (-ms-high-contrast: none) {
div#control-container *::-ms-backdrop, div#control-container div#control-container {
margin-top: 40px;
float: none; } }
div#control-container div#central-control-container {
width: 50%;
float: left; }
div#control-container div#central-control-container div#central-controls {
width: 130px;
margin: auto; }
div#control-container div#central-control-container div#central-controls div#previous {
display: inline-block;
width: 40px;
height: 40px;
cursor: pointer;
background: url("/webassets/prev.svg");
background-repeat: no-repeat;
float: left;
margin-top: 10px;
margin-right: -5px; }
div#control-container div#central-control-container div#central-controls div#play-pause {
display: inline-block;
width: 60px;
height: 60px;
cursor: pointer;
float: left; }
div#control-container div#central-control-container div#central-controls div#play-pause.amplitude-paused {
background: url("/webassets/play.svg"); }
div#control-container div#central-control-container div#central-controls div#play-pause.amplitude-playing {
background: url("/webassets/pause.svg"); }
div#control-container div#central-control-container div#central-controls div#next {
display: inline-block;
width: 40px;
height: 40px;
cursor: pointer;
background: url("/webassets/next.svg");
background-repeat: no-repeat;
float: left;
margin-top: 10px;
margin-left: -5px; }
div#control-container div#volume-container {
width: 25%;
float: left;
padding-top: 20px; }
div#control-container div#volume-container div#shuffle-right {
width: 23px;
height: 19px;
cursor: pointer;
margin: auto; }
div#control-container div#volume-container div#shuffle-right.amplitude-shuffle-off {
background: url("/webassets/shuffle-off.svg"); }
div#control-container div#volume-container div#shuffle-right.amplitude-shuffle-on {
background: url("/webassets/shuffle-on.svg"); }
div#control-container div.amplitude-mute {
cursor: pointer;
width: 25px;
height: 19px;
float: left; }
div#control-container div.amplitude-mute.amplitude-not-muted {
background: url("/webassets/volume.svg");
background-repeat: no-repeat; }
div#control-container div.amplitude-mute.amplitude-muted {
background: url("/webassets/mute.svg");
background-repeat: no-repeat; }
div#control-container:after {
content: "";
display: table;
clear: both; }
/* Small only */
@media screen and (max-width: 39.9375em) {
div#amplitude-player div#repeat-container div#repeat {
margin-left: auto;
margin-right: auto;
float: none; }
div#amplitude-player div#repeat-container div#shuffle {
display: none; }
div#amplitude-player div#volume-container div.volume-controls {
display: none; }
div#amplitude-player div#volume-container div#shuffle-right {
display: block; } }
/* Medium only */
@media screen and (min-width: 40em) and (max-width: 63.9375em) {
div#amplitude-player div#repeat-container div#repeat {
margin-left: auto;
margin-right: auto;
float: none; }
div#amplitude-player div#repeat-container div#shuffle {
display: none; }
div#amplitude-player div#volume-container div.volume-controls {
display: none; }
div#amplitude-player div#volume-container div#shuffle-right {
display: block; } }
/* Large and up */
@media screen and (min-width: 64em) {
nav{
display: none;
}
div#amplitude-player div#repeat-container div#repeat {
margin-left: 10px;
margin-right: 20px;
float: left; }
div#amplitude-player div#volume-container div#shuffle-right {
display: none; } }
input[type=range].amplitude-volume-slider {
-webkit-appearance: none;
width: calc( 100% - 33px);
float: left;
margin-top: 10px;
margin-left: 5px; }
@-moz-document url-prefix() {
input[type=range].amplitude-volume-slider {
margin-top: 0px; } }
@supports (-ms-ime-align: auto) {
input[type=range].amplitude-volume-slider {
margin-top: 3px;
height: 12px;
background-color: rgba(255, 255, 255, 0) !important;
z-index: 999;
position: relative; }
div.ms-range-fix {
height: 1px;
background-color: #A9A9A9;
width: 67%;
float: right;
margin-top: -6px;
z-index: 9;
position: relative; } }
@media all and (-ms-high-contrast: none) {
*::-ms-backdrop, input[type=range].amplitude-volume-slider {
margin-top: -24px;
background-color: rgba(255, 255, 255, 0) !important; } }
input[type=range].amplitude-volume-slider:focus {
outline: none; }
input[type=range].amplitude-volume-slider::-webkit-slider-runnable-track {
width: 75%;
height: 1px;
cursor: pointer;
animate: 0.2s;
background: #CFD8DC; }
input[type=range].amplitude-volume-slider::-webkit-slider-thumb {
height: 10px;
width: 10px;
border-radius: 10px;
background: #00A0FF;
cursor: pointer;
margin-top: -4px;
-webkit-appearance: none; }
input[type=range].amplitude-volume-slider:focus::-webkit-slider-runnable-track {
background: #CFD8DC; }
input[type=range].amplitude-volume-slider::-moz-range-track {
width: 100%;
height: 1px;
cursor: pointer;
animate: 0.2s;
background: #CFD8DC; }
input[type=range].amplitude-volume-slider::-moz-range-thumb {
height: 10px;
width: 10px;
border-radius: 10px;
background: #00A0FF;
cursor: pointer;
margin-top: -4px; }
input[type=range].amplitude-volume-slider::-ms-track {
width: 100%;
height: 1px;
cursor: pointer;
animate: 0.2s;
background: transparent;
/*leave room for the larger thumb to overflow with a transparent border */
border-color: transparent;
border-width: 15px 0;
/*remove default tick marks*/
color: transparent; }
input[type=range].amplitude-volume-slider::-ms-fill-lower {
background: #CFD8DC;
border-radius: 10px; }
input[type=range].amplitude-volume-slider::-ms-fill-upper {
background: #CFD8DC;
border-radius: 10px; }
input[type=range].amplitude-volume-slider::-ms-thumb {
height: 10px;
width: 10px;
border-radius: 10px;
background: #00A0FF;
cursor: pointer;
margin-top: 2px; }
input[type=range].amplitude-volume-slider:focus::-ms-fill-lower {
background: #CFD8DC; }
input[type=range].amplitude-volume-slider:focus::-ms-fill-upper {
background: #CFD8DC; }
input[type=range].amplitude-volume-slider::-ms-tooltip {
display: none; }
div#time-container span.current-time {
color: #607D8B;
font-size: 14px;
font-weight: 700;
float: left;
width: 15%;
text-align: center; }
div#time-container span.duration {
color: #607D8B;
font-size: 14px;
font-weight: 700;
float: left;
width: 15%;
text-align: center; }
div#time-container:after {
content: "";
display: table;
clear: both; }
div#meta-container {
text-align: center;
margin-top: 5px; }
div#meta-container span.song-name {
display: block;
/* color: #272726; */
font-size: 20px;
font-family: 'Open Sans', sans-serif;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis; }
div#meta-container div.song-artist-album {
/* color: #607D8B; */
font-size: 14px;
font-weight: 700;
text-transform: uppercase;
font-family: 'Open Sans', sans-serif;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis; }
div#meta-container div.song-artist-album span {
display: block; }
/*
3. Layout
*/
div.amplitude-wave-form{
margin-top: -14px;
}
div.amplitude-wave-form svg{
stroke: #00a0ff;
height: 50px;
width: 100%;
stroke-width: .5px;
}
div.amplitude-wave-form svg g{
stroke: #00a0ff;
height: 50px;
width: 100%;
}
div.amplitude-wave-form svg g path{
stroke: #00a0ff;
height: 50px;
width: 100%;
}
div#large-visualization{
width: 100%;
background-color: black;
visibility: hidden;
}
</style>
</head>
<body>
<div class="container">
{{template "navbar" .}}
<br />{{$setting := .setting}}
<div id="blue-playlist-container">
<!-- Amplitude Player -->
<div id="amplitude-player">
<!-- Left Side Player -->
<div id="amplitude-left">
<img data-amplitude-song-info="cover_art_url" class="album-art"/>
<div class="amplitude-visualization" id="large-visualization">
</div>
<div id="player-left-bottom">
<div id="time-container">
<span class="current-time">
<span class="amplitude-current-minutes" ></span>:<span class="amplitude-current-seconds"></span>
</span>
<div id="progress-container">
<input type="range" class="amplitude-song-slider"/>
<progress id="song-played-progress" class="amplitude-song-played-progress"></progress>
<progress id="song-buffered-progress" class="amplitude-buffered-progress" value="0"></progress>
</div>
<span class="duration">
<span class="amplitude-duration-minutes"></span>:<span class="amplitude-duration-seconds"></span>
</span>
</div>
<div id="control-container">
<div id="repeat-container">
<div class="amplitude-repeat" id="repeat"></div>
<div class="amplitude-shuffle amplitude-shuffle-off" id="shuffle"></div>
</div>
<div id="central-control-container">
<div id="central-controls">
<div class="amplitude-prev" id="previous"></div>
<div class="amplitude-play-pause" id="play-pause"></div>
<div class="amplitude-next" id="next"></div>
</div>
</div>
<div id="volume-container">
<div class="volume-controls">
<div class="amplitude-mute amplitude-not-muted"></div>
<input type="range" class="amplitude-volume-slider"/>
<div class="ms-range-fix"></div>
</div>
<div class="amplitude-shuffle amplitude-shuffle-off" id="shuffle-right"></div>
</div>
</div>
<div id="meta-container">
<span data-amplitude-song-info="name" class="song-name"></span>
<div class="song-artist-album">
<span data-amplitude-song-info="artist"></span>
<span data-amplitude-song-info="album"></span>
</div>
</div>
</div>
</div>
<!-- End Left Side Player -->
<!-- Right Side Player -->
<div id="amplitude-right">
{{range $index,$item:=.podcastItems}}
<div class="song amplitude-song-container amplitude-play-pause" data-amplitude-song-index="{{ $index}}" title="{{.Title}}">
<div class="song-now-playing-icon-container">
<div class="play-button-container">
</div>
<img class="now-playing" src="/webassets//now-playing.svg"/>
</div>
<div class="song-meta-data">
<span class="song-title">{{.Title}}</span>
<span class="song-date">{{formatDate .PubDate}}</span>
<span class="song-artist">{{.Podcast.Title}}</span>
</div>
<span class="song-duration">{{ formatDuration .Duration}}</span>
</div>
{{end}}
</div>
<!-- End Right Side Player -->
</div>
<!-- End Amplitdue Player -->
</div>
</div>
</div>
{{template "scripts"}}
<script src="/webassets/amplitude.min.js"></script>
<script>
let songElements = document.getElementsByClassName('song');
for( var i = 0; i < songElements.length; i++ ){
/*
Ensure that on mouseover, CSS styles don't get messed up for active songs.
*/
songElements[i].addEventListener('mouseover', function(){
this.style.backgroundColor = '#00A0FF';
if( !this.classList.contains('amplitude-active-song-container') ){
this.querySelectorAll('.play-button-container')[0].style.display = 'block';
//this.querySelectorAll('.play-button-container')[0].style.backgroundColor = 'inherit';
}
//this.querySelectorAll('.song-duration')[0].style.color = '#FFFFFF';
});
/*
Ensure that on mouseout, CSS styles don't get messed up for active songs.
*/
songElements[i].addEventListener('mouseout', function(){
this.style.backgroundColor = 'inherit';
// this.querySelectorAll('.song-meta-data .song-title')[0].style.color = '#272726';
// this.querySelectorAll('.song-meta-data .song-artist')[0].style.color = '#607D8B';
this.querySelectorAll('.play-button-container')[0].style.display = 'none';
//this.querySelectorAll('.song-duration')[0].style.color = '#607D8B';
});
/*
Show and hide the play button container on the song when the song is clicked.
*/
songElements[i].addEventListener('click', function(){
this.querySelectorAll('.play-button-container')[0].style.display = 'none';
});
}
/*
Initializes AmplitudeJS
*/
let items= {{ .podcastItems }}
songs= items.map(x=>{
return {
name:x.Title,
url:x.DownloadPath,
cover_art_url:x.Image,
artist:x.Podcast.Title,
album: new Date(x.PubDate.substr(0,10)).toDateString()
}
});
Amplitude.init({
"songs": songs,
"start_song":0,
"autoplay": true,
"callbacks": {
'play': function(){
document.getElementById('album-art').style.visibility = 'hidden';
document.getElementById('large-visualization').style.visibility = 'visible';
},
'pause': function(){
document.getElementById('album-art').style.visibility = 'visible';
document.getElementById('large-visualization').style.visibility = 'hidden';
},
'initialized':function(){
const urlParams = new URLSearchParams(window.location.search);
const itemId = urlParams.get('itemId');
const podcastId = urlParams.get('podcastId');
if(itemId||podcastId){
Amplitude.play();
}
}
},
waveforms: {
sample_rate: 50
}
});
</script>
</body>
</html>

@ -51,5 +51,16 @@
} }
} }
checkUseMore(); checkUseMore();
function openPlayer(itemId,podcastId){
let url="/player?";
if(itemId){
url+="&itemId="+itemId
}
if(podcastId){
url+="&podcastId="+podcastId
}
const player= window.open(url,"podgrab_player");
}
</script> </script>
{{end}} {{end}}

@ -92,6 +92,45 @@ func PodcastPage(c *gin.Context) {
c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid request"}) c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid request"})
} }
}
func PlayerPage(c *gin.Context) {
itemId, hasItemId := c.GetQuery("itemId")
podcastId, hasPodcastId := c.GetQuery("podcastId")
title := "Podgrab"
var items []db.PodcastItem
var totalCount int64
if hasItemId {
toAdd := service.GetPodcastItemById(itemId)
items = append(items, *toAdd)
totalCount = 1
} else if hasPodcastId {
pod := service.GetPodcastById(podcastId)
for _, item := range pod.PodcastItems {
if item.DownloadStatus == db.Downloaded {
items = append(items, item)
}
}
title = "Playing: " + pod.Title
totalCount = int64(len(items))
} else {
title = "Playing Latest Episodes"
if err := db.GetPaginatedPodcastItems(1, 10, true, &items, &totalCount); err != nil {
fmt.Println(err.Error())
}
}
setting := c.MustGet("setting").(*db.Setting)
c.HTML(http.StatusOK, "player.html", gin.H{
"title": title,
"podcastItems": items,
"setting": setting,
"count": len(items),
"totalCount": totalCount,
"downloadedOnly": true,
})
} }
func SettingsPage(c *gin.Context) { func SettingsPage(c *gin.Context) {

@ -350,7 +350,7 @@ func cleanAttributes(a []parser.Attribute, allowed []string) []parser.Attribute
// A list of characters we consider separators in normal strings and replace with our canonical separator - rather than removing. // A list of characters we consider separators in normal strings and replace with our canonical separator - rather than removing.
var ( var (
separators = regexp.MustCompile(`[!&_=+:]`) separators = regexp.MustCompile(`[!&_=+?:]`)
dashes = regexp.MustCompile(`[\-]+`) dashes = regexp.MustCompile(`[\-]+`)
) )

@ -130,6 +130,7 @@ func main() {
router.GET("/backups", controllers.BackupsPage) router.GET("/backups", controllers.BackupsPage)
router.POST("/opml", controllers.UploadOpml) router.POST("/opml", controllers.UploadOpml)
router.GET("/opml", controllers.GetOmpl) router.GET("/opml", controllers.GetOmpl)
router.GET("/player", controllers.PlayerPage)
go assetEnv() go assetEnv()
go intiCron() go intiCron()

@ -44,6 +44,20 @@ func FetchURL(url string) (model.PodcastData, []byte, error) {
err = xml.Unmarshal(body, &response) err = xml.Unmarshal(body, &response)
return response, body, err return response, body, err
} }
func GetPodcastById(id string) *db.Podcast {
var podcast db.Podcast
db.GetPodcastById(id, &podcast)
return &podcast
}
func GetPodcastItemById(id string) *db.PodcastItem {
var podcastItem db.PodcastItem
db.GetPodcastItemById(id, &podcastItem)
return &podcastItem
}
func GetAllPodcasts(sorting string) *[]db.Podcast { func GetAllPodcasts(sorting string) *[]db.Podcast {
var podcasts []db.Podcast var podcasts []db.Podcast
db.GetAllPodcasts(&podcasts, sorting) db.GetAllPodcasts(&podcasts, sorting)
@ -401,6 +415,7 @@ func DeleteEpisodeFile(podcastItemId string) error {
err = DeleteFile(podcastItem.DownloadPath) err = DeleteFile(podcastItem.DownloadPath)
if err != nil && !os.IsNotExist(err) { if err != nil && !os.IsNotExist(err) {
fmt.Println(err.Error())
return err return err
} }

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 539 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 569 B

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="25px" height="18px" viewBox="0 0 25 18" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 46.2 (44496) - http://www.bohemiancoding.com/sketch -->
<title>volume-x</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="05.100.00-OpenSource-Amplitude" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round">
<g id="HD_05.100.00-521Website_OpenSource-Amplitude" transform="translate(-620.000000, -882.000000)" stroke-width="2" stroke="#607D8B">
<g id="Lead-in">
<g id="Player" transform="translate(368.000000, 454.000000)">
<g id="Controllers/Status/Info" transform="translate(0.000000, 352.000000)">
<g id="Volume" transform="translate(253.000000, 77.000000)">
<g id="Mute">
<g id="volume-x">
<polygon id="Shape" points="9.85714286 0 4.38095238 4.38095238 0 4.38095238 0 10.952381 4.38095238 10.952381 9.85714286 15.3333333"></polygon>
<path d="M23,4.38095238 L16.4285714,10.952381" id="Shape"></path>
<path d="M16.4285714,4.38095238 L23,10.952381" id="Shape"></path>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="39px" height="39px" viewBox="0 0 39 39" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 41.2 (35397) - http://www.bohemiancoding.com/sketch -->
<title>Next</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="05.100.00-OpenSource-Amplitude" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="HD_05.100.00-521Website_OpenSource-Amplitude" transform="translate(-568.000000, -782.000000)">
<g id="Lead-in">
<g id="Player" transform="translate(368.000000, 359.000000)">
<g id="Controllers/Status/Info" transform="translate(0.000000, 357.000000)">
<g id="Controls" transform="translate(114.000000, 56.000000)">
<g id="Next" transform="translate(86.000000, 10.000000)">
<ellipse id="Oval-1-Copy" fill="#00A0FF" cx="19.5" cy="19.5" rx="19.5" ry="19.5"></ellipse>
<path d="M27.6768636,11 L25.1308315,11 C24.4160835,11 23.8436969,11.5800341 23.8436969,12.2983117 L23.8436969,18.2421908 L12.5565622,11.250603 C11.6994529,10.6911583 11,11.1011824 11,12.1694806 L11,26.3003121 C11,27.3662571 11.6988647,27.7815757 12.5565622,27.2191897 L23.8436969,20.2293666 L23.8436969,26.1732458 C23.8436969,26.8932881 24.4196132,27.4703809 25.1308315,27.4703809 L27.6768636,27.4703809 C28.390435,27.4703809 28.9639982,26.8932881 28.9639982,26.1732458 L28.9639982,12.2983117 C28.9651747,11.5817989 28.3892585,11 27.6768636,11 L27.6768636,11 Z" id="Shape" fill="#FFFFFF"></path>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 41.2 (35397) - http://www.bohemiancoding.com/sketch -->
<title>Now Playing</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="05.100.00-OpenSource-Amplitude" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="HD_05.100.00-521Website_OpenSource-Amplitude" transform="translate(-729.000000, -384.000000)">
<g id="Lead-in">
<g id="Player" transform="translate(368.000000, 359.000000)">
<g id="Playlist" transform="translate(352.000000, 5.000000)">
<g id="Song-Item" transform="translate(1.000000, 0.000000)">
<g id="Now-Playing">
<g transform="translate(8.000000, 20.000000)">
<circle id="Oval-1" fill="#00A0FF" cx="10" cy="10" r="10"></circle>
<path d="M8.90625,12.134375 C8.80328125,12.134375 8.70875,12.1 8.63140625,12.04375 L8.630625,12.0453125 L7.03515625,10.884375 L5.46875,10.884375 C5.21,10.884375 5,10.675 5,10.415625 L5,8.853125 C5,8.5953125 5.20921875,8.3859375 5.46765625,8.384375 L5.46765625,8.3828125 L7.0215625,8.3828125 L8.60953125,7.084375 L8.61078125,7.0859375 C8.69171875,7.01875 8.79359375,6.978125 8.90625,6.978125 C9.16515625,6.978125 9.37515625,7.1875 9.37515625,7.446875 L9.37515625,11.665625 C9.37515625,11.925 9.16515625,12.134375 8.90625,12.134375 L8.90625,12.134375 Z M10.7660937,11.8328125 L10.32125,11.3890625 C10.7060937,10.9078125 10.9375,10.2984375 10.9375,9.634375 C10.9375,8.9703125 10.7060937,8.3609375 10.32125,7.8796875 L10.7660937,7.4359375 C11.263125,8.03125 11.5625,8.796875 11.5625,9.634375 C11.5625,10.4703125 11.263125,11.2375 10.7660937,11.8328125 L10.7660937,11.8328125 Z M11.9845312,13.0515625 L11.5395312,12.60625 C12.233125,11.8109375 12.65625,10.7734375 12.65625,9.634375 C12.65625,8.4953125 12.233125,7.4578125 11.5395312,6.6625 L11.9845312,6.2171875 C12.7909375,7.1265625 13.28125,8.3234375 13.28125,9.634375 C13.28125,10.9453125 12.7909375,12.1421875 11.9845312,13.0515625 L11.9845312,13.0515625 Z M13.2021875,14.26875 L12.7596875,13.8265625 C13.7634375,12.71875 14.375,11.2484375 14.375,9.634375 C14.375,8.0203125 13.7634375,6.55 12.7596875,5.4421875 L13.2021875,5 C14.31875,6.221875 15,7.8484375 15,9.634375 C15,11.4203125 14.31875,13.046875 13.2021875,14.26875 L13.2021875,14.26875 Z" id="Fill-156" fill="#FFFFFF"></path>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="60px" height="60px" viewBox="0 0 60 60" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 41.2 (35397) - http://www.bohemiancoding.com/sketch -->
<title>Oval 1</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="05.100.00-OpenSource-Amplitude" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="HD_05.100.00-521Website_OpenSource-Amplitude" transform="translate(-515.000000, -772.000000)">
<g id="Lead-in">
<g id="Player" transform="translate(368.000000, 359.000000)">
<g id="Controllers/Status/Info" transform="translate(0.000000, 357.000000)">
<g id="Controls" transform="translate(114.000000, 56.000000)">
<g id="Play/Pause" transform="translate(33.000000, 0.000000)">
<g id="Oval-1">
<circle fill="#00A0FF" cx="30" cy="30" r="30"></circle>
<path d="M40.587,16.61 L36.257,16.61 C35.048,16.61 34.069,17.59 34.069,18.811 L34.069,42.403 C34.069,43.624 35.048,44.61 36.257,44.61 L40.587,44.61 C41.8,44.61 42.775,43.624 42.775,42.403 L42.775,18.811 C42.783,17.595 41.8,16.61 40.587,16.61 L40.587,16.61 Z" id="Shape" fill="#FFFFFF"></path>
<path d="M24.2,16.61 L19.872,16.61 C18.661,16.61 17.679,17.59 17.679,18.811 L17.679,42.403 C17.679,43.624 18.661,44.61 19.872,44.61 L24.2,44.61 C25.411,44.61 26.388,43.624 26.388,42.403 L26.388,18.811 C26.388,17.595 25.411,16.61 24.2,16.61 L24.2,16.61 Z" id="Shape" fill="#FFFFFF"></path>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="60px" height="60px" viewBox="0 0 60 60" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 41.2 (35397) - http://www.bohemiancoding.com/sketch -->
<title>Oval 1</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="05.100.00-OpenSource-Amplitude" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="HD_05.100.00-521Website_OpenSource-Amplitude" transform="translate(-515.000000, -772.000000)">
<g id="Lead-in">
<g id="Player" transform="translate(368.000000, 359.000000)">
<g id="Controllers/Status/Info" transform="translate(0.000000, 357.000000)">
<g id="Controls" transform="translate(114.000000, 56.000000)">
<g id="Play/Pause" transform="translate(33.000000, 0.000000)">
<g id="Oval-1">
<circle fill="#00A0FF" cx="30" cy="30" r="30"></circle>
<path d="M43.625,29.8025209 L23.646,17.4255209 C22.189,16.4735209 21,17.1725209 21,18.9875209 L21,43.0105209 C21,44.8225209 22.188,45.5285209 23.646,44.5725209 L43.625,32.1975209 C43.625,32.1975209 44.336,31.6975209 44.336,31.0005209 C44.336,30.3015209 43.625,29.8025209 43.625,29.8025209 L43.625,29.8025209 Z" id="Play" fill="#FFFFFF"></path>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="39px" height="39px" viewBox="0 0 39 39" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 41.2 (35397) - http://www.bohemiancoding.com/sketch -->
<title>Previous</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="05.100.00-OpenSource-Amplitude" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="HD_05.100.00-521Website_OpenSource-Amplitude" transform="translate(-482.000000, -782.000000)">
<g id="Lead-in">
<g id="Player" transform="translate(368.000000, 359.000000)">
<g id="Controllers/Status/Info" transform="translate(0.000000, 357.000000)">
<g id="Controls" transform="translate(114.000000, 56.000000)">
<g id="Previous" transform="translate(0.000000, 10.000000)">
<ellipse id="Oval-1" fill="#00A0FF" cx="19.5" cy="19.5" rx="19.5" ry="19.5"></ellipse>
<path d="M16.1305538,18.2541918 L16.1305538,12.3004631 C16.1305538,11.5809953 15.5536833,11 14.8406971,11 L12.2892675,11 C11.5768706,11 11,11.5809953 11,12.3004631 L11,26.1995678 C11,26.9208033 11.5768706,27.4988524 12.2892675,27.4988524 L14.8406971,27.4988524 C15.555451,27.4988524 16.1305538,26.9208033 16.1305538,26.1995678 L16.1305538,20.245839 L27.432857,27.2478341 C28.2913865,27.8093843 28.9919985,27.3986808 28.9919985,26.3274339 L28.9919985,12.1720078 C28.993177,11.1037071 28.2913865,10.6888788 27.432857,11.2521967 L16.1305538,18.2541918 Z" id="Shape" fill="#FFFFFF"></path>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="24px" height="19px" viewBox="0 0 24 19" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 41.2 (35397) - http://www.bohemiancoding.com/sketch -->
<title>Fill 39</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="05.100.00-OpenSource-Amplitude" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="HD_05.100.00-521Website_OpenSource-Amplitude" transform="translate(-427.000000, -792.000000)" fill="#607D8B">
<g id="Lead-in">
<g id="Player" transform="translate(368.000000, 359.000000)">
<g id="Controllers/Status/Info" transform="translate(0.000000, 357.000000)">
<path d="M75.9215,83.2656 C75.717875,83.4746 75.436625,83.6 75.126125,83.6 C74.50475,83.6 74.0015,83.0908 74.0015,82.46 C74.0015,82.1446 74.127125,81.8596 74.33075,81.6544 L75.035,80.94 L65.75,80.94 C63.264875,80.94 61.25,82.9806 61.25,85.5 L61.25,88.16 C61.25,88.7908 60.746375,89.3 60.125,89.3 C59.504,89.3 59,88.7908 59,88.16 L59,85.5 C59,81.7228 62.022125,78.66 65.75,78.66 L75.033125,78.66 L74.33075,77.9456 C74.127125,77.7404 74.0015,77.4554 74.0015,77.14 C74.0015,76.5092 74.50475,76 75.126125,76 C75.436625,76 75.717875,76.1292 75.9215,76.3344 L78.54575,78.9944 C78.749375,79.1996 78.875,79.4846 78.875,79.8 C78.875,80.1154 78.749375,80.4004 78.54575,80.6056 L75.9215,83.2656 L75.9215,83.2656 Z M76.25,92.34 L66.96725,92.34 L67.669625,93.0544 C67.872875,93.2596 67.998875,93.5446 67.998875,93.86 C67.998875,94.4908 67.49525,95 66.87425,95 C66.56375,95 66.2825,94.8708 66.078875,94.6656 L63.454625,92.0056 C63.251,91.8004 63.125,91.5154 63.125,91.2 C63.125,90.8846 63.251,90.5996 63.454625,90.3944 L66.078875,87.7344 C66.2825,87.5254 66.56375,87.4 66.87425,87.4 C67.49525,87.4 67.998875,87.9092 67.998875,88.54 C67.998875,88.8554 67.872875,89.1404 67.669625,89.3456 L66.965375,90.06 L76.25,90.06 C78.7355,90.06 80.75,88.0194 80.75,85.5 L80.75,82.84 C80.75,82.2092 81.253625,81.7 81.875,81.7 C82.496375,81.7 83,82.2092 83,82.84 L83,85.5 C83,89.2772 79.97825,92.34 76.25,92.34 L76.25,92.34 Z" id="Fill-39"></path>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="24px" height="19px" viewBox="0 0 24 19" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 41.2 (35397) - http://www.bohemiancoding.com/sketch -->
<title>Fill 39</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="05.100.00-OpenSource-Amplitude" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="HD_05.100.00-521Website_OpenSource-Amplitude" transform="translate(-427.000000, -792.000000)" fill="#00A0FF">
<g id="Lead-in">
<g id="Player" transform="translate(368.000000, 359.000000)">
<g id="Controllers/Status/Info" transform="translate(0.000000, 357.000000)">
<path d="M75.9215,83.2656 C75.717875,83.4746 75.436625,83.6 75.126125,83.6 C74.50475,83.6 74.0015,83.0908 74.0015,82.46 C74.0015,82.1446 74.127125,81.8596 74.33075,81.6544 L75.035,80.94 L65.75,80.94 C63.264875,80.94 61.25,82.9806 61.25,85.5 L61.25,88.16 C61.25,88.7908 60.746375,89.3 60.125,89.3 C59.504,89.3 59,88.7908 59,88.16 L59,85.5 C59,81.7228 62.022125,78.66 65.75,78.66 L75.033125,78.66 L74.33075,77.9456 C74.127125,77.7404 74.0015,77.4554 74.0015,77.14 C74.0015,76.5092 74.50475,76 75.126125,76 C75.436625,76 75.717875,76.1292 75.9215,76.3344 L78.54575,78.9944 C78.749375,79.1996 78.875,79.4846 78.875,79.8 C78.875,80.1154 78.749375,80.4004 78.54575,80.6056 L75.9215,83.2656 L75.9215,83.2656 Z M76.25,92.34 L66.96725,92.34 L67.669625,93.0544 C67.872875,93.2596 67.998875,93.5446 67.998875,93.86 C67.998875,94.4908 67.49525,95 66.87425,95 C66.56375,95 66.2825,94.8708 66.078875,94.6656 L63.454625,92.0056 C63.251,91.8004 63.125,91.5154 63.125,91.2 C63.125,90.8846 63.251,90.5996 63.454625,90.3944 L66.078875,87.7344 C66.2825,87.5254 66.56375,87.4 66.87425,87.4 C67.49525,87.4 67.998875,87.9092 67.998875,88.54 C67.998875,88.8554 67.872875,89.1404 67.669625,89.3456 L66.965375,90.06 L76.25,90.06 C78.7355,90.06 80.75,88.0194 80.75,85.5 L80.75,82.84 C80.75,82.2092 81.253625,81.7 81.875,81.7 C82.496375,81.7 83,82.2092 83,82.84 L83,85.5 C83,89.2772 79.97825,92.34 76.25,92.34 L76.25,92.34 Z" id="Fill-39"></path>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="23px" height="20px" viewBox="0 0 23 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 41.2 (35397) - http://www.bohemiancoding.com/sketch -->
<title>Fill 83</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="05.100.00-OpenSource-Amplitude" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="HD_05.100.00-521Website_OpenSource-Amplitude" transform="translate(-637.000000, -792.000000)" fill="#607D8B">
<g id="Lead-in">
<g id="Player" transform="translate(368.000000, 359.000000)">
<g id="Controllers/Status/Info" transform="translate(0.000000, 357.000000)">
<path d="M285.614425,90.5505102 L287.682829,90.5505102 L287.682829,90.5468557 L288.319842,90.5468557 L287.645104,89.863455 C287.450012,89.6624548 287.329293,89.3883637 287.329293,89.0850361 C287.329293,88.4820355 287.811813,87.9886714 288.407148,87.9886714 C288.704636,87.9886714 288.9741,88.1129261 289.169192,88.3102717 L291.684188,90.868456 C291.87928,91.0694562 292,91.3435473 292,91.6432204 C292,91.9465479 291.87928,92.2206391 291.684188,92.4216393 L289.169192,94.9798235 C288.9741,95.1771692 288.704636,95.2977693 288.407148,95.2977693 C287.811813,95.2977693 287.329293,94.8080597 287.329293,94.2014046 C287.329293,93.9017316 287.450012,93.6276404 287.645104,93.4266402 L288.318045,92.7432396 L285.167833,92.7432396 C284.870345,92.7432396 284.600881,92.6189849 284.405789,92.4216393 L280.181673,88.1238897 L281.705761,86.574361 L285.614425,90.5505102 L285.614425,90.5505102 Z M277.132779,85.0248322 L273.224475,81.0486829 L270.077856,81.0486829 C269.482879,81.0486829 269,80.5589734 269,79.9523183 C269,79.3456631 269.482879,78.8559536 270.077856,78.8559536 L273.670707,78.8559536 C273.968555,78.8559536 274.238019,78.9802082 274.43311,79.1775539 L278.657226,83.4753034 L277.132779,85.0248322 L277.132779,85.0248322 Z M289.169192,83.2889215 C288.9741,83.4862671 288.704636,83.6068672 288.407148,83.6068672 C287.811813,83.6068672 287.329293,83.1171577 287.329293,82.5105025 C287.329293,82.2108295 287.450012,81.9367383 287.645104,81.7357381 L288.319842,81.0486829 L285.614425,81.0486829 L274.43311,92.4216393 C274.238019,92.6189849 273.968555,92.7432396 273.670707,92.7432396 L270.077856,92.7432396 C269.482879,92.7432396 269,92.25353 269,91.6468749 C269,91.0402198 269.482879,90.5505102 270.077856,90.5505102 L273.224475,90.5505102 L284.405789,79.1775539 C284.600881,78.9802082 284.870345,78.8559536 285.167833,78.8559536 L288.318045,78.8559536 L287.645104,78.1725529 C287.450012,77.9715527 287.329293,77.6974616 287.329293,77.394134 C287.329293,76.7911334 287.811813,76.2977693 288.407148,76.2977693 C288.704636,76.2977693 288.9741,76.422024 289.169192,76.6193696 L291.684188,79.1775539 C291.87928,79.3785541 292,79.6526452 292,79.9523183 C292,80.2556458 291.87928,80.529737 291.684188,80.7307372 L289.169192,83.2889215 L289.169192,83.2889215 Z" id="Fill-83"></path>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="23px" height="20px" viewBox="0 0 23 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 41.2 (35397) - http://www.bohemiancoding.com/sketch -->
<title>Fill 83</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="05.100.00-OpenSource-Amplitude" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="HD_05.100.00-521Website_OpenSource-Amplitude" transform="translate(-637.000000, -792.000000)" fill="#00A0FF">
<g id="Lead-in">
<g id="Player" transform="translate(368.000000, 359.000000)">
<g id="Controllers/Status/Info" transform="translate(0.000000, 357.000000)">
<path d="M285.614425,90.5505102 L287.682829,90.5505102 L287.682829,90.5468557 L288.319842,90.5468557 L287.645104,89.863455 C287.450012,89.6624548 287.329293,89.3883637 287.329293,89.0850361 C287.329293,88.4820355 287.811813,87.9886714 288.407148,87.9886714 C288.704636,87.9886714 288.9741,88.1129261 289.169192,88.3102717 L291.684188,90.868456 C291.87928,91.0694562 292,91.3435473 292,91.6432204 C292,91.9465479 291.87928,92.2206391 291.684188,92.4216393 L289.169192,94.9798235 C288.9741,95.1771692 288.704636,95.2977693 288.407148,95.2977693 C287.811813,95.2977693 287.329293,94.8080597 287.329293,94.2014046 C287.329293,93.9017316 287.450012,93.6276404 287.645104,93.4266402 L288.318045,92.7432396 L285.167833,92.7432396 C284.870345,92.7432396 284.600881,92.6189849 284.405789,92.4216393 L280.181673,88.1238897 L281.705761,86.574361 L285.614425,90.5505102 L285.614425,90.5505102 Z M277.132779,85.0248322 L273.224475,81.0486829 L270.077856,81.0486829 C269.482879,81.0486829 269,80.5589734 269,79.9523183 C269,79.3456631 269.482879,78.8559536 270.077856,78.8559536 L273.670707,78.8559536 C273.968555,78.8559536 274.238019,78.9802082 274.43311,79.1775539 L278.657226,83.4753034 L277.132779,85.0248322 L277.132779,85.0248322 Z M289.169192,83.2889215 C288.9741,83.4862671 288.704636,83.6068672 288.407148,83.6068672 C287.811813,83.6068672 287.329293,83.1171577 287.329293,82.5105025 C287.329293,82.2108295 287.450012,81.9367383 287.645104,81.7357381 L288.319842,81.0486829 L285.614425,81.0486829 L274.43311,92.4216393 C274.238019,92.6189849 273.968555,92.7432396 273.670707,92.7432396 L270.077856,92.7432396 C269.482879,92.7432396 269,92.25353 269,91.6468749 C269,91.0402198 269.482879,90.5505102 270.077856,90.5505102 L273.224475,90.5505102 L284.405789,79.1775539 C284.600881,78.9802082 284.870345,78.8559536 285.167833,78.8559536 L288.318045,78.8559536 L287.645104,78.1725529 C287.450012,77.9715527 287.329293,77.6974616 287.329293,77.394134 C287.329293,76.7911334 287.811813,76.2977693 288.407148,76.2977693 C288.704636,76.2977693 288.9741,76.422024 289.169192,76.6193696 L291.684188,79.1775539 C291.87928,79.3785541 292,79.6526452 292,79.9523183 C292,80.2556458 291.87928,80.529737 291.684188,80.7307372 L289.169192,83.2889215 L289.169192,83.2889215 Z" id="Fill-83"></path>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="25px" height="19px" viewBox="0 0 25 19" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 46.2 (44496) - http://www.bohemiancoding.com/sketch -->
<title>volume-2</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="05.100.00-OpenSource-Amplitude" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round">
<g id="HD_05.100.00-521Website_OpenSource-Amplitude" transform="translate(-620.000000, -882.000000)" stroke-width="2" stroke="#607D8B">
<g id="Lead-in">
<g id="Player" transform="translate(368.000000, 454.000000)">
<g id="Controllers/Status/Info" transform="translate(0.000000, 352.000000)">
<g id="Volume" transform="translate(253.000000, 77.000000)">
<g id="Active,-no-hover">
<g id="volume-2">
<polygon id="Shape" points="10.35 0.15 4.6 4.75 0 4.75 0 11.65 4.6 11.65 10.35 16.25"></polygon>
<path d="M19.6305,0.0695 C24.1198923,4.56024829 24.1198923,11.8397517 19.6305,16.3305 M15.571,4.129 C17.8156961,6.37437415 17.8156961,10.0141259 15.571,12.2595" id="Shape"></path>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

Loading…
Cancel
Save