diff --git a/live_share_youtube/urls.py b/live_share_youtube/urls.py
index 8ffdf92..14dbad9 100644
--- a/live_share_youtube/urls.py
+++ b/live_share_youtube/urls.py
@@ -14,8 +14,9 @@ Including another URLconf
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
-from django.urls import path
+from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
+ path('', include('player.urls')),
]
diff --git a/player/forms.py b/player/forms.py
new file mode 100644
index 0000000..9a8499e
--- /dev/null
+++ b/player/forms.py
@@ -0,0 +1,24 @@
+from urllib.parse import urlparse
+import datetime
+
+from django import forms
+
+from player.models import Playlist, Link
+
+class PlaylistForm(forms.ModelForm):
+ class Meta:
+ model = Playlist
+ fields = ['name']
+
+ def is_valid(self):
+ self.instance.date = datetime.datetime.now()
+ return super().is_valid()
+
+class LinkForm(forms.Form):
+ url = forms.URLField(label="URL de la piste à ajouter")
+
+ def get_token(self):
+ p=urlparse(self.cleaned_data['url'])
+ print(p.query)
+ return [i for i in p.query.split('&') if i and i[0]=='v'][0].split('=')[-1]
+
diff --git a/player/migrations/0002_auto_20180324_2340.py b/player/migrations/0002_auto_20180324_2340.py
new file mode 100644
index 0000000..28adda1
--- /dev/null
+++ b/player/migrations/0002_auto_20180324_2340.py
@@ -0,0 +1,29 @@
+# Generated by Django 2.0.3 on 2018-03-24 22:40
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('player', '0001_initial'),
+ ]
+
+ operations = [
+ migrations.RemoveField(
+ model_name='link',
+ name='url',
+ ),
+ migrations.AddField(
+ model_name='link',
+ name='token',
+ field=models.CharField(default='', max_length=200, verbose_name='Token'),
+ preserve_default=False,
+ ),
+ migrations.AddField(
+ model_name='playlist',
+ name='name',
+ field=models.CharField(default='Nom', max_length=255, verbose_name='Nom de la playlist'),
+ preserve_default=False,
+ ),
+ ]
diff --git a/player/models.py b/player/models.py
index de52e0f..bc6f5d7 100644
--- a/player/models.py
+++ b/player/models.py
@@ -1,9 +1,14 @@
from django.db import models
+from django.shortcuts import reverse
PK_LENGTH = 23
class Playlist(models.Model):
date = models.DateTimeField(verbose_name="date")
+ name = models.CharField(
+ max_length=255,
+ verbose_name="Nom de la playlist"
+ )
@staticmethod
def reverse_token(token):
@@ -13,14 +18,17 @@ class Playlist(models.Model):
return int(self.date.timestamp()) << PK_LENGTH | self.pk
def get_absolute_url(self):
- pass
+ return reverse('player:playlist', kwargs={'token':self.get_token()})
def __str__(self):
return "Playlist " + str(self.get_token())
class Link(models.Model):
- url = models.URLField(verbose_name="Lien")
+ token = models.CharField(
+ max_length=200,
+ verbose_name="Token",
+ )
playlist = models.ForeignKey(
Playlist,
on_delete=models.CASCADE,
diff --git a/player/templates/player/all_list.html b/player/templates/player/all_list.html
new file mode 100644
index 0000000..9c5cc80
--- /dev/null
+++ b/player/templates/player/all_list.html
@@ -0,0 +1,30 @@
+{% extends 'base.html' %}
+
+{% block content %}
+
+
+
Live Share
+
+
Bienvenue sur Live Share. Vous pouvez créer des playlist youtube anonymes, collaboratives et éphémères !
+
+
+
+ Nouvelle playlist
+
+
+
+
+
+
Diffusions en cours
+
+ {% for l in lists %}
+
+
+
+ {{l.name}}
+
+
+
+ {% endfor %}
+
+{% endblock %}
diff --git a/player/templates/player/playlist.html b/player/templates/player/playlist.html
new file mode 100644
index 0000000..b1aa993
--- /dev/null
+++ b/player/templates/player/playlist.html
@@ -0,0 +1,164 @@
+{% extends "base.html" %}
+{% load bootstrap4 %}
+
+{% block title %} - {{playlist.name}}{% endblock %}
+
+{% block content %}
+
+
+
{{playlist.name}}
+
+
+
+ Lien de partage :
+
+
+
+
+
+
Pistes à venir
+
+ {% for link in playlist.link_set.all %}
+
+
+
+
+
+ {{link.token}}
+
+
+
+
+
+
+
+
+ {% endfor %}
+
+
+
+
+
+{% endblock %}
diff --git a/player/urls.py b/player/urls.py
new file mode 100644
index 0000000..df9045a
--- /dev/null
+++ b/player/urls.py
@@ -0,0 +1,12 @@
+from django.urls import path
+from . import views
+
+app_name = "player"
+urlpatterns = [
+ path('
', views.playlist, name='playlist'),
+ path('remove/', views.remove_link, name='remove-link'),
+ path('/add', views.add_link, name='add'),
+ path('/list', views.get_list, name='list'),
+ path('new', views.new_playlist, name='new'),
+ path('', views.all_playlist, name='all'),
+]
diff --git a/player/views.py b/player/views.py
index 91ea44a..57bb59e 100644
--- a/player/views.py
+++ b/player/views.py
@@ -1,3 +1,65 @@
-from django.shortcuts import render
+import datetime
-# Create your views here.
+from django.shortcuts import render, get_object_or_404, redirect
+from django.http import HttpResponse
+from django.views.decorators.csrf import csrf_exempt
+from django.core.serializers import serialize
+
+from player.models import Playlist, Link
+from player.forms import PlaylistForm, LinkForm
+
+def new_playlist(request):
+ p = PlaylistForm(request.POST or None)
+ if p.is_valid():
+ playlist = p.save()
+ return redirect(playlist.get_absolute_url())
+ return render(request, 'form.html', {
+ 'form':p,
+ 'validate':'Créer',
+ 'title':'Nouvelle playlist'
+ })
+
+
+@csrf_exempt
+def get_list(request, token):
+ p = get_object_or_404(Playlist, pk=Playlist.reverse_token(token))
+
+ s = serialize('json', p.link_set.all(), fields=('token',))
+ return HttpResponse(s, content_type='application/json')
+
+
+@csrf_exempt
+def add_link(request, token):
+ p = get_object_or_404(Playlist, pk=Playlist.reverse_token(token))
+ l = LinkForm(request.POST or None)
+ if l.is_valid():
+ yt_token = l.get_token()
+ link = Link()
+ link.token = yt_token
+ link.playlist = p
+ link.save()
+ return HttpResponse('Ok')
+ return render(request, 'form_inline.html', {
+ 'form':l,
+ 'validate':'Ajouter'
+ })
+
+
+def remove_link(request, pk):
+ l = get_object_or_404(Link, pk=pk)
+ l.delete()
+ return HttpResponse('Ok')
+
+
+def playlist(request, token):
+ p = get_object_or_404(Playlist, pk=Playlist.reverse_token(token))
+ add_link_form = LinkForm()
+ return render(request, 'player/playlist.html', {
+ 'playlist':p,
+ 'form':add_link_form
+ })
+
+
+def all_playlist(request):
+ p = Playlist.objects.all().order_by('date')
+ return render(request, 'player/all_list.html', {'lists':p})
diff --git a/templates/base.html b/templates/base.html
index e69de29..844b53f 100644
--- a/templates/base.html
+++ b/templates/base.html
@@ -0,0 +1,27 @@
+{% load bootstrap4 %}
+
+
+
+
+ LSY{% block title %}{% endblock %}
+
+
+
+
+
+
+
+
+ {% include 'navbar.html' %}
+
+
+ {% bootstrap_messages %}
+
+ {% block content %}{% endblock %}
+
+
+
+
+
diff --git a/templates/form.html b/templates/form.html
new file mode 100644
index 0000000..7d5cd3e
--- /dev/null
+++ b/templates/form.html
@@ -0,0 +1,14 @@
+{% extends 'base.html' %}
+{% load bootstrap4 %}
+{% block title %} - {{title}}{%endblock%}
+{% block content %}
+{{title}}
+
+
+
+
+{% endblock %}
diff --git a/templates/form_inline.html b/templates/form_inline.html
new file mode 100644
index 0000000..4bd4b38
--- /dev/null
+++ b/templates/form_inline.html
@@ -0,0 +1,6 @@
+{% load bootstrap4 %}
+
diff --git a/templates/navbar.html b/templates/navbar.html
index e69de29..4aeb901 100644
--- a/templates/navbar.html
+++ b/templates/navbar.html
@@ -0,0 +1,3 @@
+