]> git.parisson.com Git - telemeta.git/commitdiff
fix jsonrpc methods for PlaylistResource
authoryomguy <yomguy@parisson.com>
Tue, 15 Mar 2011 12:48:52 +0000 (13:48 +0100)
committeryomguy <yomguy@parisson.com>
Tue, 15 Mar 2011 12:48:52 +0000 (13:48 +0100)
telemeta/models/media.py
telemeta/web/base.py

index 4737d336ab963d505bb9fb149dbdc11188d5f9c7..6b47d57784f7a6bbfb5cb17ba0a712367309549d 100644 (file)
@@ -347,8 +347,10 @@ class MediaPart(MediaResource):
 class Playlist(ModelCore):
     "Item or collection playlist"
     element_type = 'playlist'
-    owner_username = ForeignKey(User, related_name="playlists", db_column="owner_username")
+    public_id      = CharField(_('public_id'), required=True)
+    author         = ForeignKey(User, related_name="playlists", db_column="author")
     name           = CharField(_('name'), required=True)
+    description    = TextField(_('description'))
     is_current     = BooleanField(_('current_user_playlist'))
 
     class Meta(MetaCore):
@@ -365,9 +367,10 @@ class PlaylistResource(ModelCore):
     "Playlist components"
     RESOURCE_TYPE_CHOICES = (('item', 'item'), ('collection', 'collection'))
     element_type = 'playlist_resource'
-    playlist              = ForeignKey('Playlist', related_name="resources", verbose_name=_('playlist'))
-    resource_type         = CharField(_('resource type'), choices=RESOURCE_TYPE_CHOICES, required=True)
-    resource              = IntegerField(_('resource'), required=True)
+    public_id          = CharField(_('public_id'), required=True)
+    playlist           = ForeignKey('Playlist', related_name="resources", verbose_name=_('playlist'))
+    resource_type      = CharField(_('resource type'), choices=RESOURCE_TYPE_CHOICES, required=True)
+    resource_id        = CharField(_('resource'), required=True)
 
     class Meta(MetaCore):
         db_table = 'playlist_resources'
index c8d6451036ae946c5091ba49601ad3321379ef46..fd19d9ba077bed567174025ace3983c1ba701b22 100644 (file)
@@ -113,43 +113,32 @@ class WebView(object):
             return HttpResponse(template.render(context))
         else:
             template='telemeta/home.html'
-            
-            user_playlists = Playlist.objects.filter(owner_username=request.user)
-            playlists = []
-            for playlist in user_playlists:
-                playlist_resources = PlaylistResource.objects.filter(playlist=playlist)
-                resources = []
-                for resource in playlist_resources:
-                    if resource.resource_type == 'item':
-                        element = MediaItem.objects.get(pk=resource.resource)
-                    if resource.resource_type == 'collection':
-                        element = MediaCollection.objects.get(pk=resource.resource)
-                    resources.append({'element': element, 'type': resource.resource_type})
-                playlists.append({'name': playlist.name, 'resources': resources})
-            
-            last_revisions = Revision.objects.all().order_by('-time')[0:10]
-            revisions = []
-            for revision in last_revisions:
-                if revision.element_type == 'item':
-                    try:
-                        element = MediaItem.objects.get(pk=revision.element_id)
-                    except:
-                        element = None
-                if revision.element_type == 'collection':
-                    try:
-                        element = MediaCollection.objects.get(pk=revision.element_id)
-                    except:
-                        element = None
-                if revision.element_type == 'marker':
-                    try:
-                        element = MediaItemMarker.objects.get(pk=revision.element_id)
-                    except:
-                        element = None
-                revisions.append({'revision': revision, 'element': element})
-            
+            playlists = self.get_playlists(request)
+            revisions = self.get_revisions(request)
             searches = Search.objects.filter(username=request.user)
-            
             return render(request, template, {'playlists': playlists, 'searches': searches, 'revisions': revisions})
+  
+    def get_revisions(selfself, request):
+        last_revisions = Revision.objects.all().order_by('-time')[0:10]
+        revisions = []
+        for revision in last_revisions:
+            if revision.element_type == 'item':
+                try:
+                    element = MediaItem.objects.get(pk=revision.element_id)
+                except:
+                    element = None
+            if revision.element_type == 'collection':
+                try:
+                    element = MediaCollection.objects.get(pk=revision.element_id)
+                except:
+                    element = None
+            if revision.element_type == 'marker':
+                try:
+                    element = MediaItemMarker.objects.get(pk=revision.element_id)
+                except:
+                    element = None
+            revisions.append({'revision': revision, 'element': element})
+        return revisions
         
     def collection_detail(self, request, public_id, template='telemeta/collection_detail.html'):
         collection = MediaCollection.objects.get(public_id=public_id)
@@ -734,6 +723,8 @@ class WebView(object):
         auth.logout(request)
         return redirect('telemeta-home')
 
+    #MARKERS
+    
     @jsonrpc_method('telemeta.add_marker')
     def add_marker(request, marker):
         # marker must be a dict
@@ -783,3 +774,66 @@ class WebView(object):
         else:
             raise 'Error : Bad marker dictionnary'
  
+    # PLAYLISTS
+    
+    @jsonrpc_method('telemeta.add_playlist')
+    def add_playlist(request, playlist):
+        # playlist must be a dict
+        if isinstance(playlist, dict):
+            m = Playlist()
+            m.public_id = playlist['public_id']
+            m.name = playlist['name']
+            m.description = playlist['description']
+            m.author = request.user
+            m.save()
+        else:
+            raise 'Error : Bad playlist dictionnary'
+
+    @jsonrpc_method('telemeta.del_playlist')
+    def del_playlist(request, public_id):
+        m = Playlist.objects.get(public_id=public_id)
+        m.delete()
+        
+    def get_playlists(self, request):
+        user_playlists = Playlist.objects.filter(author=request.user)
+        playlists = []
+        for playlist in user_playlists:
+            playlist_resources = PlaylistResource.objects.filter(playlist=playlist)
+            resources = []
+            for resource in playlist_resources:
+                if resource.resource_type == 'item':
+                    element = MediaItem.objects.get(public_id=resource.resource_id)
+                if resource.resource_type == 'collection':
+                    element = MediaCollection.objects.get(public_id=resource.resource_id)
+                resources.append({'element': element, 'type': resource.resource_type})
+            playlists.append({'name': playlist.name, 'resources': resources})
+        return playlists
+        
+    @jsonrpc_method('telemeta.update_playlist')
+    def update_playlist(request, playlist):
+        if isinstance(playlist, dict):
+            m = Playlist.objects.get(public_id=playlist['public_id'])
+            m.name = float(playlist['name'])
+            m.description = playlist['description']
+            m.save()
+        else:
+            raise 'Error : Bad playlist dictionnary'
+    @jsonrpc_method('telemeta.add_playlist_resource')
+    def add_playlist_resource(request, playlist_resource):
+        # playlist_resource must be a dict
+        if isinstance(playlist_resource, dict):
+            m = PlaylistResource()
+            m.public_id = playlist_resource['public_id']
+            m.playlist = Playlist.objects.get(public_id=playlist_resource['playlist_id'])
+            m.resource_type = playlist_resource['resource_type']
+            m.resource_id = playlist_resource['resource_id']
+            m.save()
+        else:
+            raise 'Error : Bad playlist_resource dictionnary'
+
+    @jsonrpc_method('telemeta.del_playlist_resource')
+    def del_playlist_resource(request, public_id):
+        m = PlaylistResource.objects.get(public_id=public_id)
+        m.delete()
+