Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion manager/admin.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
from django.contrib import admin
from manager.models import Playlist, Track, Artist, PlaylistEntry
from manager.models import Playlist, Track, Artist, PlaylistEntry, PlaylistSession

admin.site.register(Playlist)
admin.site.register(Track)
admin.site.register(Artist)
admin.site.register(PlaylistEntry)
admin.site.register(PlaylistSession)

# Register your models here.
40 changes: 40 additions & 0 deletions manager/fields.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
from django.db import models
from django.core.serializers.json import DjangoJSONEncoder
import json

class JSONField(models.TextField):

"""
JSONField is a generic textfield that neatly serializes/unserializes
JSON objects seamlessly.
Django snippet #1478

example:
class Page(models.Model):
data = JSONField(blank=True, null=True)


page = Page.objects.get(pk=5)
page.data = {'title': 'test', 'type': 3}
page.save()
"""

__metaclass__ = models.SubfieldBase

def to_python(self, value):
if value == "":
return None

try:
if isinstance(value, basestring):
return json.loads(value)
except ValueError:
pass
return value

def get_db_prep_save(self, value, *args, **kwargs):
if value == "":
return None
if isinstance(value, dict):
value = json.dumps(value, cls=DjangoJSONEncoder)
return super(JSONField, self).get_db_prep_save(value, *args, **kwargs)
92 changes: 79 additions & 13 deletions manager/models.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,24 @@
from django.db import models
import pprint
import sys
import os
import subprocess
# import pprint
# import sys
# import os
# import subprocess

import unicodedata
import requests
import json

def import_playlists(userid = 674215921):
user_playlists=json.loads(requests.get("https://api.deezer.com/user/" + str(userid) + "/playlists").text)['data']
from fields import JSONField


def import_playlists(userid=674215921):
user_playlists = json.loads(requests.get(
"https://api.deezer.com/user/" + str(userid) + "/playlists").text)['data']
for playlist in user_playlists:
json_result=requests.get("https://api.deezer.com/playlist/" + str(playlist['id']))
playlist_tracks=json.loads(json_result.text)['tracks']['data']
if not Playlist.objects.filter(DeezerId= int(playlist['id'])).exists():
json_result = requests.get(
"https://api.deezer.com/playlist/" + str(playlist['id']))
playlist_tracks = json.loads(json_result.text)['tracks']['data']
if not Playlist.objects.filter(DeezerId=int(playlist['id'])).exists():
pl = Playlist()
pl.title = playlist['title']
pl.DeezerId = playlist['id']
Expand All @@ -23,25 +29,27 @@ def import_playlists(userid = 674215921):
pl.save()

for track in playlist_tracks:
if not Artist.objects.filter(DeezerId= int(track['artist']['id'])).exists():
if not Artist.objects.filter(DeezerId=int(track['artist']['id'])).exists():
art = Artist()
art.name = track['artist']['name']
art.DeezerId = track['artist']['id']
art.link = track['artist']['link']
# art.picture = track['artist']['picture']
art.save()

if not Track.objects.filter(DeezerId= int(track['id'])).exists():
if not Track.objects.filter(DeezerId=int(track['id'])).exists():
tr = Track()
tr.title = track['title']
tr.DeezerId = track['id']
tr.link = track['link']
tr.duration = track['duration']
tr.ArtistId = Artist.objects.filter(DeezerId=int(track['artist']['id'])).first()
tr.ArtistId = Artist.objects.filter(
DeezerId=int(track['artist']['id'])).first()
tr.save()

tr_id = Track.objects.filter(DeezerId=int(track['id'])).first()
pl_id = Playlist.objects.filter(DeezerId=int(playlist['id'])).first()
pl_id = Playlist.objects.filter(
DeezerId=int(playlist['id'])).first()

if not PlaylistEntry.objects.filter(TrackId=tr_id, PlaylistId=pl_id).exists():
pl_ent = PlaylistEntry()
Expand All @@ -51,6 +59,8 @@ def import_playlists(userid = 674215921):
pl_ent.save()

# Create your models here.


class Playlist(models.Model):
title = models.CharField(max_length=100)
DeezerId = models.IntegerField(unique=True)
Expand All @@ -68,6 +78,16 @@ def getMinutes(self):
def __str__(self): # __unicode__ on Python 2
return self.title

def to_dict(self):
dico = {
"DeezerId": self.DeezerId,
"description": self.description,
"link": self.link,
"picture": self.picture,
"duration": self.duration
}
return dico


class Artist(models.Model):
name = models.CharField(max_length=100)
Expand All @@ -78,6 +98,17 @@ class Artist(models.Model):
def __str__(self): # __unicode__ on Python 2
return self.name

def to_dict(self):
dico = {
"name": self.name[:16],
# "name": remove_accents(self.name[:16]),
"DeezerId": self.DeezerId,
"link": self.link,
"picture": self.picture,
}
return dico


class Track(models.Model):
title = models.CharField(max_length=100)
DeezerId = models.IntegerField(unique=True)
Expand All @@ -91,9 +122,24 @@ def getMinutes(self):
else:
return 'unknown'

def getmSec(self):
return "%d " % (self.duration * 1000)

def __str__(self): # __unicode__ on Python 2
return self.title

def to_dict(self):
dico = {
"title": remove_accents(self.title[:25]),
"DeezerId": self.DeezerId,
"link": self.link,
"duration": self.duration,
"minutes": self.getMinutes(),
"artist": self.ArtistId.to_dict(),
"vote": 0
}
return dico


class PlaylistEntry(models.Model):
PlaylistId = models.ForeignKey(Playlist)
Expand All @@ -103,3 +149,23 @@ def __str__(self): # __unicode__ on Python 2
string = self.PlaylistId.title + ' - ' + str(elf.TrackId.title)
return string

def to_dict(self):
dico = {}
return dico


class PlaylistSession(models.Model):
Session = JSONField(blank=True, null=True)

def __str__(self): # __unicode__ on Python 2
# string = self.PlaylistId.title + ' - ' + str(elf.TrackId.title)
return str(self.id)


def remove_accents(input_str):
nkfd_form = unicodedata.normalize('NFKD', input_str)
only_ascii = nkfd_form.encode('ASCII', 'ignore')
return only_ascii



33 changes: 33 additions & 0 deletions manager/templates/manager/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
{% extends 'base.html' %}
{% block menu%}
{% include "player/menu.html" %}
{% endblock %}
{% block content%}
<div class="container">

<div class="row">
<div class="box">
<div class="col-lg-12">
<hr class="visible-xs">

<div class="intro-text text-center">

<hr>
<h2>Sélection d'une playlist</h2>
<hr>

</div>

<div class="intro-text text-center">


{% include "manager/select.html" %}

</div>
</div>
</div>
</div>
</div>
<!-- /.container -->

{% endblock %}
6 changes: 6 additions & 0 deletions manager/templates/manager/menu.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@

<li><a href="/">Home</a></li>
<li><a href="/player/selection/">Selection</a></li>
<li><a href="/player/update/">Update</a></li>
<li><a href="/admin/">Admin</a></li>
<li><a href="#contact">Contact</a></li>
14 changes: 14 additions & 0 deletions manager/templates/manager/select.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<!-- {% load staticfiles %} -->
<form action="{% url 'manager:newSession' %}" method="post">
{% csrf_token %}
<br>
<select class="form-control" id="plop" name='choice' >
{% for pl in playlists %}
<OPTION value="{{pl.DeezerId}}">{{pl.title}}</OPTION>
{% endfor %}
</select>
<!-- <input type="submit" value="Play" name="play" ></input><br/> -->
<br>
<button class="btn btn-default btn-lg"><span class="glyphicon glyphicon-play"></span> GO !</button>
</form>
<!-- /.container -->
42 changes: 42 additions & 0 deletions manager/templates/manager/track_list.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@

(L'id de la playlist est : {{ playlist.DeezerId }})

<!-- <br><img src="{{ playlist.picture }}"><br> -->

<form>
Liste des morceaux :

<div class="table-responsive">
<table class="table table-striped table-bordered table-hover table-condensed ">
<thead>
<tr>
<th> Title</th>
<th> Artist</th>
<th> Duration</th>
</tr>
</thead>
<tbody>
{% for tr in track_list %}
{% if tr.TrackId == current_track%}
<tr class="success">
{% else %}
<tr>
{% endif %}
<td> {{tr.TrackId.title}} </td>
<td> {{tr.TrackId.ArtistId.name}} </td>
<td> {{tr.TrackId.getMinutes}} </td>
</tr>
{% endfor %}
</tbody>
</div>

</table>
</form>








3 changes: 3 additions & 0 deletions manager/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,7 @@

urlpatterns = patterns('',
url(r'^$', views.index, name='index'),
url(r'^createSession/', views.createSession, name='newSession'),
url(r'^getSession/', views.getSession, name='getSession'),
url(r'^next/', views.nextTrack, name='next'),
)
Loading