Clean up old frontend code
6
Makefile
@@ -22,9 +22,3 @@ test:
|
||||
up:
|
||||
docker-compose pull
|
||||
docker-compose up -d
|
||||
|
||||
.PHONY: static
|
||||
static:
|
||||
- rm -rf dist/
|
||||
npm install
|
||||
npm run build
|
||||
|
||||
@@ -1,399 +0,0 @@
|
||||
@import url('https://fonts.googleapis.com/css?family=Ubuntu');
|
||||
|
||||
[v-cloak] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-family: 'Ubuntu', sans-serif;
|
||||
background-color: #f4eddb;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #EB8C11;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.pad10 {
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.black {
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
.background-image {
|
||||
background-image: url('/assets/img/pc_bg.png');
|
||||
-ms-background-repeat: repeat-x;
|
||||
background-repeat: repeat-x;
|
||||
-ms-background-position: center bottom;
|
||||
background-position: center bottom;
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
top: 0;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
-webkit-user-select: text;
|
||||
z-index: 0;
|
||||
}
|
||||
|
||||
/* Footer */
|
||||
|
||||
.footer {
|
||||
background-image: url('/assets/img/pc_footer.png');
|
||||
-ms-background-repeat: space;
|
||||
background-repeat: space;
|
||||
-ms-background-position: center bottom;
|
||||
background-position: center bottom;
|
||||
background-color: #aca496;
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 69px;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
-webkit-user-select: text;
|
||||
z-index: -1;
|
||||
}
|
||||
|
||||
.footer-links {
|
||||
position: absolute;
|
||||
right: 2em;
|
||||
bottom: 0;
|
||||
font-size: 3em;
|
||||
}
|
||||
|
||||
.footer-links a {
|
||||
color: rgb(62, 62, 41);
|
||||
}
|
||||
|
||||
.footer-links a:hover {
|
||||
color: rgb(33, 33, 26);
|
||||
background: none;
|
||||
}
|
||||
|
||||
/* Header */
|
||||
|
||||
.title {
|
||||
padding: 50px;
|
||||
}
|
||||
|
||||
.title h1 {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.title h2 {
|
||||
max-width: 500px;
|
||||
font-weight: normal;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
.login-block {
|
||||
color: #e18712;
|
||||
font-size: 1em;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.login-border, .login-border a {
|
||||
float: left;
|
||||
background: orange;
|
||||
color: whitesmoke;
|
||||
border: 1px orange;
|
||||
padding: 3px;
|
||||
border-radius: 2px;
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
/* Main block + input */
|
||||
|
||||
.shadow {
|
||||
box-shadow: 0 12px 8px -6px #a79d87;
|
||||
box-shadow: 0 12px 8px -6px rgba(167, 157, 135, 0.4);
|
||||
}
|
||||
|
||||
.main {
|
||||
text-align: center;
|
||||
padding: 5em 2em 10em;
|
||||
max-width: 860px;
|
||||
width: 90%;
|
||||
margin: 0 auto;
|
||||
padding: 3em 0;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.main-border {
|
||||
border: thin solid #a39c8e;
|
||||
background: #f4ecda;
|
||||
}
|
||||
|
||||
.input-border {
|
||||
background-color: #e4dac8;
|
||||
border: none;
|
||||
border-bottom: 1px solid #a39c8e;
|
||||
}
|
||||
|
||||
.main-border input {
|
||||
border: none;
|
||||
padding: 0.5em 0 0.5em 0.5em;
|
||||
width: calc(100% - 2em);
|
||||
font-size: 2em;
|
||||
line-height: 1;
|
||||
color: #616161;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
*:focus {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
/* Input button (arrow) */
|
||||
|
||||
.arrow-button {
|
||||
float: right;
|
||||
font-size: 2em;
|
||||
padding-top: 0.5em;
|
||||
padding-right: 0.3em;
|
||||
}
|
||||
|
||||
.arrow-button a {
|
||||
color: rgb(142, 134, 119);
|
||||
}
|
||||
|
||||
.arrow-button a:hover {
|
||||
background: none;
|
||||
color: rgb(105, 98, 86);
|
||||
}
|
||||
|
||||
/* Controls under input */
|
||||
|
||||
.controls {
|
||||
padding-left: 1em;
|
||||
word-spacing: 0.15em;
|
||||
margin: 12px 0 12px 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.controls-icon {
|
||||
float: left;
|
||||
padding-right: 6px;
|
||||
}
|
||||
|
||||
.switch-field {
|
||||
float: left;
|
||||
font-size: 1em;
|
||||
padding-right: 7px;
|
||||
}
|
||||
|
||||
.switch-title {
|
||||
display: inline-block;
|
||||
float: left;
|
||||
padding-right: 5px;
|
||||
}
|
||||
|
||||
.switch-field input {
|
||||
position: absolute !important;
|
||||
clip: rect(0, 0, 0, 0);
|
||||
height: 1px;
|
||||
width: 1px;
|
||||
border: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.switch-field label {
|
||||
float: left;
|
||||
display: inline-block;
|
||||
color: #EB8C11;
|
||||
padding: 0 2px;
|
||||
}
|
||||
|
||||
.switch-field label:hover {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.switch-field input:checked + label {
|
||||
background: orange;
|
||||
color: whitesmoke;
|
||||
border: 1px orange;
|
||||
-ms-border-top-right-radius: 3px;
|
||||
-ms-border-top-left-radius: 3px;
|
||||
-ms-border-bottom-right-radius: 3px;
|
||||
-ms-border-bottom-left-radius: 3px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.locked {
|
||||
-ms-opacity: 0.3;
|
||||
opacity: 0.2;
|
||||
}
|
||||
|
||||
/* Man image */
|
||||
.man {
|
||||
width: 210px;
|
||||
height: 333px;
|
||||
background-image: url('/assets/img/man.png');
|
||||
-ms-background-repeat: no-repeat;
|
||||
background-repeat: no-repeat;
|
||||
-ms-background-position: center bottom;
|
||||
background-position: center bottom;
|
||||
background-color: transparent;
|
||||
position: absolute;
|
||||
bottom: 100px;
|
||||
left: 30%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
z-index: -1;
|
||||
}
|
||||
|
||||
/* Patreon block */
|
||||
|
||||
.patreon {
|
||||
background: rgb(171, 163, 149);
|
||||
border: 1px rgb(240, 232, 214) solid;
|
||||
bottom: 6em;
|
||||
float: right;
|
||||
position: absolute;
|
||||
right: 2em;
|
||||
z-index: -1;
|
||||
}
|
||||
|
||||
/* Placeholder */
|
||||
::-webkit-input-placeholder { color: rgb(171, 163, 149); } /* Chrome/Opera/Safari */
|
||||
::-moz-placeholder { color: rgb(171, 163, 149); } /* Firefox 19+ */
|
||||
:-ms-input-placeholder { color: rgb(171, 163, 149); } /* IE 10+ */
|
||||
:-moz-placeholder { color: rgb(171, 163, 149); } /* Firefox 18- */
|
||||
|
||||
/* Tooltips */
|
||||
|
||||
.tooltip {
|
||||
display: none;
|
||||
position: absolute;
|
||||
background: rgb(171, 163, 149);
|
||||
border: 1px rgb(244, 236, 218) solid;
|
||||
padding: 10px;
|
||||
color: #4a4030;
|
||||
max-width: 350px;
|
||||
}
|
||||
|
||||
/* Modal popup */
|
||||
|
||||
.modal {
|
||||
position: fixed;
|
||||
top: 20%;
|
||||
left: 50%;
|
||||
width: 50%;
|
||||
max-width: 700px;
|
||||
-ms-transform: translate3d(-50%,-50%, 0);
|
||||
-webkit-transform: translate3d(-50%,-50%, 0);
|
||||
transform: translate3d(-50%,-50%, 0);
|
||||
height: 80px;
|
||||
background: #56524b;
|
||||
text-align: center;
|
||||
z-index: 10;
|
||||
outline: 9999px solid rgba(0,0,0,0.8);
|
||||
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.modal > input {
|
||||
width: 100%;
|
||||
font-size: 3em;
|
||||
border: none;
|
||||
background: none;
|
||||
border-bottom: 1px dotted black;
|
||||
}
|
||||
|
||||
.modal-links {
|
||||
padding-top: 5px;
|
||||
}
|
||||
|
||||
.modal-links span {
|
||||
padding-right: 15px;
|
||||
}
|
||||
|
||||
.modal-links a:hover {
|
||||
color: #EB8C11;
|
||||
background: rgb(68, 65, 60);
|
||||
}
|
||||
|
||||
@media screen and (max-width: 640px) {
|
||||
.background-image {
|
||||
background-image: url('/assets/img/mobile_bg.png')
|
||||
}
|
||||
|
||||
.footer {
|
||||
background-image: url('/assets/img/mobile_footer.png');
|
||||
height: 50px;
|
||||
}
|
||||
|
||||
.title {
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
.main {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.controls {
|
||||
word-spacing: 0;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
.patreon {
|
||||
right: 2em;
|
||||
}
|
||||
|
||||
.man {
|
||||
background-image: none;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 1024px) {
|
||||
.modal {
|
||||
width: 90%;
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (max-device-width: 1024px) {
|
||||
.modal > input {
|
||||
font-size: 1.9em;
|
||||
padding: 0;
|
||||
padding-bottom: 15px;
|
||||
}
|
||||
|
||||
.modal-links span {
|
||||
padding-right: 30px;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-height: 640px) {
|
||||
.patreon {
|
||||
width: 300px;
|
||||
bottom: 4em;
|
||||
}
|
||||
|
||||
.man {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-height: 400px) {
|
||||
.patreon {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-height: 840px) {
|
||||
.title {
|
||||
padding-top: 1em;
|
||||
padding-bottom: 1em;
|
||||
}
|
||||
|
||||
.main {
|
||||
padding-top: 0;
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 89 KiB |
|
Before Width: | Height: | Size: 3.4 KiB |
|
Before Width: | Height: | Size: 97 KiB |
|
Before Width: | Height: | Size: 2.7 KiB |
@@ -1,109 +0,0 @@
|
||||
var app = new Vue({
|
||||
el: '#app',
|
||||
|
||||
data: {
|
||||
link: '',
|
||||
format: 'video',
|
||||
quality: 'high',
|
||||
count: 50,
|
||||
|
||||
showModal: false,
|
||||
feedLink: '',
|
||||
|
||||
featureLevel: 0,
|
||||
userId: '',
|
||||
fullName: '',
|
||||
},
|
||||
|
||||
methods: {
|
||||
submit: function() {
|
||||
var vm = this;
|
||||
|
||||
if (vm.link === '') {
|
||||
return;
|
||||
}
|
||||
|
||||
axios.post('/api/create', {
|
||||
url: this.link,
|
||||
format: this.format,
|
||||
quality: this.quality,
|
||||
page_size: this.count,
|
||||
}).then(function(response) {
|
||||
vm.feedLink = vm.formatLink(response.data.id);
|
||||
vm.showModal = true;
|
||||
vm.link = '';
|
||||
}).catch(vm.httpError);
|
||||
},
|
||||
|
||||
httpError: function(error) {
|
||||
try {
|
||||
this.showError(error.response.data.error);
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
this.showError(error.message);
|
||||
}
|
||||
},
|
||||
|
||||
showError: function(msg) {
|
||||
alert(msg);
|
||||
},
|
||||
|
||||
formatLink: function(id) {
|
||||
if (location.port === '80' || location.port === '443') {
|
||||
return location.protocol + '//' + location.hostname + '/' + id;
|
||||
} else {
|
||||
return location.protocol + '//' + location.host + '/' + id;
|
||||
}
|
||||
},
|
||||
|
||||
copyLink: function() {
|
||||
if (!this.showModal || !this.canCopy) {
|
||||
return
|
||||
}
|
||||
|
||||
this.$refs.output.select();
|
||||
|
||||
if (!document.execCommand('copy')) {
|
||||
self.showError('Can\'t copy... Something went wrong...');
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
computed: {
|
||||
locked: function() {
|
||||
return this.featureLevel === 0;
|
||||
},
|
||||
|
||||
isMobile: function() {
|
||||
return /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);
|
||||
},
|
||||
|
||||
canCopy: function() {
|
||||
try {
|
||||
return document.queryCommandSupported('copy') && !this.isMobile;
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
},
|
||||
|
||||
allow600pages: function() {
|
||||
return !this.locked && this.featureLevel >= 2;
|
||||
}
|
||||
},
|
||||
|
||||
mounted: function() {
|
||||
var vm = this;
|
||||
window.addEventListener('keydown', function(event) {
|
||||
// ESC handler
|
||||
if (event.keyCode === 27 && vm.showModal) {
|
||||
vm.showModal = false;
|
||||
}
|
||||
});
|
||||
|
||||
axios.get('/api/user').then(function (response) {
|
||||
vm.userId = response.data.user_id;
|
||||
vm.featureLevel = response.data.feature_level;
|
||||
vm.fullName = response.data.full_name;
|
||||
}).catch(function() {});
|
||||
}
|
||||
});
|
||||
86
gulpfile.js
@@ -1,86 +0,0 @@
|
||||
const gulp = require('gulp'),
|
||||
del = require('del'),
|
||||
path = require('path'),
|
||||
uglify = require('gulp-uglify'),
|
||||
rev = require('gulp-rev'),
|
||||
revreplace = require('gulp-rev-replace'),
|
||||
cleancss = require('gulp-clean-css'),
|
||||
autoprefixer = require('gulp-autoprefixer'),
|
||||
size = require('gulp-size'),
|
||||
gulpif = require('gulp-if'),
|
||||
imagemin = require('gulp-imagemin'),
|
||||
nunjucks = require('gulp-nunjucks'),
|
||||
browserSync = require('browser-sync').create();
|
||||
|
||||
abs = path.join(process.cwd(), 'assets');
|
||||
|
||||
const config = {
|
||||
images: './assets/**/*.{png,ico}',
|
||||
scripts: ['./assets/js/**/*.js', './assets/css/**/*.css'],
|
||||
html: './templates/[^_]*.html',
|
||||
|
||||
dist: {
|
||||
assets: './dist/assets/',
|
||||
html: './dist/html/',
|
||||
},
|
||||
};
|
||||
|
||||
// Clean up artifacts
|
||||
const clean = function() {
|
||||
return del(['./dist/**/*'])
|
||||
};
|
||||
|
||||
// Minify images and output to ./dist folder
|
||||
const img = function() {
|
||||
return gulp.src(config.images)
|
||||
.pipe(imagemin())
|
||||
.pipe(size())
|
||||
.pipe(gulp.dest(config.dist.assets))
|
||||
};
|
||||
|
||||
// Minify scripts, build manifest.json and output to ./dist folder
|
||||
const scripts = function() {
|
||||
return gulp.src(config.scripts, {base: abs})
|
||||
.pipe(gulpif(/js$/, uglify()))
|
||||
.pipe(gulpif(/css$/, autoprefixer()))
|
||||
.pipe(gulpif(/css$/, cleancss()))
|
||||
.pipe(rev())
|
||||
.pipe(size())
|
||||
.pipe(gulp.dest(config.dist.assets))
|
||||
.pipe(rev.manifest('manifest.json', {merge: true}))
|
||||
.pipe(gulp.dest(config.dist.assets));
|
||||
};
|
||||
|
||||
// Rewrite occurrences of scripts in template files
|
||||
const html = function() {
|
||||
const manifest = gulp.src('./dist/assets/manifest.json');
|
||||
return gulp.src(config.html)
|
||||
.pipe(nunjucks.compile())
|
||||
.pipe(revreplace({manifest: manifest}))
|
||||
.pipe(gulp.dest(config.dist.html))
|
||||
};
|
||||
|
||||
const dev = function(cb) {
|
||||
browserSync.init({
|
||||
server: ['./dist/html/', './dist/'],
|
||||
port: 8080,
|
||||
watch: true,
|
||||
});
|
||||
|
||||
gulp.watch(config.images, img);
|
||||
gulp.watch(config.scripts, gulp.series(scripts, html));
|
||||
gulp.watch(config.html, html);
|
||||
|
||||
cb();
|
||||
};
|
||||
|
||||
const build = gulp.series(
|
||||
clean,
|
||||
gulp.parallel(
|
||||
img,
|
||||
gulp.series(scripts, html)
|
||||
),
|
||||
);
|
||||
|
||||
exports.default = build;
|
||||
exports.dev = gulp.series(build, dev);
|
||||
9187
package-lock.json
generated
36
package.json
@@ -1,36 +0,0 @@
|
||||
{
|
||||
"name": "podsync",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "gulpfile.js",
|
||||
"dependencies": {},
|
||||
"devDependencies": {
|
||||
"browser-sync": "^2.26.3",
|
||||
"del": "^3.0.0",
|
||||
"gulp": "^4.0.0",
|
||||
"gulp-autoprefixer": "^4.0.0",
|
||||
"gulp-clean-css": "^3.7.0",
|
||||
"gulp-if": "^2.0.2",
|
||||
"gulp-imagemin": "^3.3.0",
|
||||
"gulp-nunjucks": "^4.0.0",
|
||||
"gulp-rev": "^8.0.0",
|
||||
"gulp-rev-replace": "^0.4.3",
|
||||
"gulp-size": "^2.1.0",
|
||||
"gulp-uglify": "^3.0.0"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "gulp -v && gulp",
|
||||
"dev": "gulp dev",
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/mxpv/Podsync.git"
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"bugs": {
|
||||
"url": "https://github.com/mxpv/Podsync/issues"
|
||||
},
|
||||
"homepage": "https://github.com/mxpv/Podsync#readme"
|
||||
}
|
||||
@@ -1,66 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html;charset=UTF-8"/>
|
||||
<meta charset="utf-8"/>
|
||||
<title>Podsync - Turn YouTube channels into podcast feeds</title>
|
||||
<meta property="og:title" content="Podsync - turn YouTube channels into podcast feeds"/>
|
||||
<meta property="og:description"
|
||||
content="Simple and free service that lets you listen to any YouTube or Vimeo channels, playlists or user videos in podcast format"/>
|
||||
<meta property="og:locale" content="en_US"/>
|
||||
<meta property="og:image" content="/assets/img/og_image.png"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="description"
|
||||
content="Simple and free service that lets you listen to any YouTube or Vimeo channels, playlists or user videos in podcast format"/>
|
||||
{% block link %}
|
||||
<link rel="icon" type="image/x-icon" href="/assets/favicon.ico"/>
|
||||
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"/>
|
||||
<link rel="stylesheet" href="assets/css/site.css"/>
|
||||
{% endblock %}
|
||||
</head>
|
||||
|
||||
<body>
|
||||
{% block body %}
|
||||
{% endblock %}
|
||||
|
||||
{% block scripts %}
|
||||
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
|
||||
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
|
||||
<script src="assets/js/site.js"></script>
|
||||
{% endblock %}
|
||||
|
||||
{% block analytics %}
|
||||
<script>
|
||||
(function (i, s, o, g, r, a, m) {
|
||||
i['GoogleAnalyticsObject'] = r;
|
||||
i[r] = i[r] || function () {
|
||||
(i[r].q = i[r].q || []).push(arguments)
|
||||
}, i[r].l = 1 * new Date();
|
||||
a = s.createElement(o),
|
||||
m = s.getElementsByTagName(o)[0];
|
||||
a.async = 1;
|
||||
a.src = g;
|
||||
m.parentNode.insertBefore(a, m)
|
||||
})(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');
|
||||
|
||||
ga('create', 'UA-64237526-1', 'auto');
|
||||
ga('send', 'pageview');
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
||||
{% block support %}
|
||||
<script>
|
||||
(function (w, i, d, g, e, t, s) {
|
||||
w[d] = w[d] || [];
|
||||
t = i.createElement(g);
|
||||
t.async = 1;
|
||||
t.src = e;
|
||||
s = i.getElementsByTagName(g)[0];
|
||||
s.parentNode.insertBefore(t, s);
|
||||
})(window, document, '_gscq', 'script', '//widgets.getsitecontrol.com/23626/script.js');
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,80 +0,0 @@
|
||||
{% extends "_base.html" %}
|
||||
|
||||
{% block body %}
|
||||
<div class="background-image">
|
||||
<div class="pad10">
|
||||
<div class="pad10 main-border">
|
||||
<h1>FAQ</h1>
|
||||
|
||||
<ol>
|
||||
<li>
|
||||
<h3>
|
||||
Can I delete my feed?
|
||||
</h3>
|
||||
<p>
|
||||
Not manually. Feeds are automatically deleted if not used for more than 90 days.
|
||||
</p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<h3>
|
||||
I am trying to turn the link below into a podcast form (to listen to on my phone) and it doesn't seem to be working?
|
||||
https://www.youtube.com/watch?v=XXxxxXXxXxX
|
||||
</h3>
|
||||
<p>
|
||||
Podsync can't build a feed from just one video. You have to provide a link either to a channel, user, or playlist.
|
||||
</p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<h3>
|
||||
Audio podcast is double the length of the video, and the second half is silent
|
||||
</h3>
|
||||
<p>
|
||||
This is known issue. Unfortunately as of now I don't have any fix for this.
|
||||
</p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<h3>
|
||||
I am trying to download some files, but it is giving the following error "Download failed, error code 403 forbidden".
|
||||
Is there a solution?
|
||||
</h3>
|
||||
<p>
|
||||
That happens because you're in a different region than Podsync.
|
||||
More details on this <a href="https://www.patreon.com/posts/youtube-playlist-7874992">here</a>.
|
||||
I've been working on multi-region support, fix is coming soon.
|
||||
</p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<h3>
|
||||
Does feeds auto-update as new videos show up on YouTube?
|
||||
Or do they just represent a snapshot of whenever you generated them?
|
||||
</h3>
|
||||
<p>
|
||||
Feeds are cached for 10 minutes to reduce server loads.
|
||||
</p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<h3>
|
||||
Is it possible to get a podcast of all videos in "watch later" on YouTube?
|
||||
</h3>
|
||||
<p>
|
||||
No, that would require "login with your YouTube account" on Podsync.
|
||||
Instead you might want to create custom playlist and add there videos you want to watch.
|
||||
</p>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
<div class="footer-links">
|
||||
<a href="/"><i class="fa fa-home" aria-hidden="true"></i></a>
|
||||
<a href="https://twitter.com/pod_sync"><i class="fa fa-twitter" aria-hidden="true"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -1,143 +0,0 @@
|
||||
{% extends "_base.html" %}
|
||||
|
||||
{% block body %}
|
||||
<div class="background-image" id="app">
|
||||
<div class="title">
|
||||
<h1>Podsync</h1>
|
||||
|
||||
<h2>
|
||||
Simple and free service that lets you listen to any YouTube or
|
||||
Vimeo channels, playlists or user videos in podcast format.
|
||||
</h2>
|
||||
|
||||
<div class="login-block">
|
||||
<div class="login-border">
|
||||
|
||||
<template v-if="!userId">
|
||||
<a href="/user/login">
|
||||
<i class="fa fa-unlock" aria-hidden="true"></i>
|
||||
Login with Patreon to unlock features
|
||||
</a>
|
||||
<a href="https://www.patreon.com/bePatron?c=278915">
|
||||
<i class="fa fa-question-circle-o" aria-hidden="true"></i>
|
||||
</a>
|
||||
</template>
|
||||
<template v-else>
|
||||
<a>Hey, <i class="fa fa-user-o" aria-hidden="true"></i> {{ fullName }}</a>
|
||||
<a href="/user/logout"><i class="fa fa-power-off" aria-hidden="true"></i></a>
|
||||
</template>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="main" v-if="!showModal" v-cloak>
|
||||
<div class="main-border shadow">
|
||||
<div class="input-border">
|
||||
<input v-model="link"
|
||||
@keyup.enter="submit"
|
||||
type="text"
|
||||
placeholder="paste your link here"
|
||||
spellcheck="false"
|
||||
autofocus />
|
||||
|
||||
<div class="arrow-button">
|
||||
<a href="#" id="get-link" @click="submit">
|
||||
<i class="fa fa-arrow-right" aria-hidden="true"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="controls">
|
||||
<div class="controls-icon">
|
||||
<template v-if="locked">
|
||||
<a href="https://www.patreon.com/bePatron?c=278915" class="black">
|
||||
<i class="fa fa-question-circle master-tooltip"
|
||||
aria-hidden="true"
|
||||
title="This features are available for patrons only. You may support us and unlock this features"></i>
|
||||
</a>
|
||||
</template>
|
||||
<template v-else>
|
||||
<i class="fa fa-wrench" aria-hidden="true"></i>
|
||||
</template>
|
||||
</div>
|
||||
|
||||
<div :class="{ locked: locked }">
|
||||
|
||||
<div class="switch-field">
|
||||
<div class="switch-title">format </div>
|
||||
<input type="radio" id="type_video" value="video" name="episode_format" v-model="format" :disabled="locked" />
|
||||
<label for="type_video">video</label>
|
||||
<input type="radio" id="type_audio" value="audio" name="episode_format" v-model="format" :disabled="locked" />
|
||||
<label for="type_audio">audio</label>
|
||||
</div>
|
||||
|
||||
<div class="switch-field">
|
||||
<div class="switch-title">quality </div>
|
||||
<input type="radio" id="quality_low" value="low" name="episode_quality" v-model="quality" :disabled="locked" />
|
||||
<label for="quality_low">low</label>
|
||||
<input type="radio" id="quality_high" value="high" name="episode_quality" v-model="quality" :disabled="locked" />
|
||||
<label for="quality_high">high</label>
|
||||
</div>
|
||||
|
||||
<div class="switch-field">
|
||||
<div class="switch-title">episode count </div>
|
||||
<input type="radio" id="page_50" value="50" name="page_count" v-model.number="count" :disabled="locked" />
|
||||
<label for="page_50">50</label>
|
||||
<input type="radio" id="page_100" value="100" name="page_count" v-model.number="count" :disabled="locked" />
|
||||
<label for="page_100">100</label>
|
||||
<input type="radio" id="page_150" value="150" name="page_count" v-model.number="count" :disabled="locked" />
|
||||
<label for="page_150">150</label>
|
||||
<input type="radio" id="page_600" value="600" name="page_count" v-model.number="count" :disabled="locked || !allow600pages" />
|
||||
<label for="page_600" :class="{ locked: !locked && !allow600pages }">600</label>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="man"></div>
|
||||
|
||||
<div>
|
||||
<a href="https://www.patreon.com/podsync" target="_blank">
|
||||
<img class="patreon shadow" width="400" src="assets/img/become_patreon.png"
|
||||
alt="Become my patron on Patreon"/>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<!-- Modal dialog -->
|
||||
<div v-cloak v-if="showModal" class="modal">
|
||||
<input type="url" v-model="feedLink" ref="output" readonly />
|
||||
<div class="modal-links">
|
||||
<span v-if="canCopy">
|
||||
<a id="modal-copy" href="#" @click="copyLink">
|
||||
<i class="fa fa-clone" aria-hidden="true"></i>
|
||||
Copy
|
||||
</a>
|
||||
</span>
|
||||
|
||||
<span>
|
||||
<a id="modal-open" :href="feedLink" target="_blank">
|
||||
<i class="fa fa-external-link" aria-hidden="true"></i>
|
||||
Open
|
||||
</a>
|
||||
</span>
|
||||
|
||||
<span>
|
||||
<a id="close-modal" href="#" @click="showModal=false">
|
||||
<i class="fa fa-thumbs-up" aria-hidden="true"></i>
|
||||
Close
|
||||
</a>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
<div class="footer-links">
|
||||
<a href="./faq.html"><i class="fa fa-question-circle" aria-hidden="true"></i></a>
|
||||
<a href="https://twitter.com/pod_sync"><i class="fa fa-twitter" aria-hidden="true"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||