# HG changeset patch # User Goffi # Date 1327792504 -3600 # Node ID dd0d39ae7d24ab88f47950bb647e427e7328626e # Parent 2849ec993d8901a716d436f3146c0f14bcb39707 RadioCol: song preloading + fonctionnal players diff -r 2849ec993d89 -r dd0d39ae7d24 browser_side/radiocol.py --- a/browser_side/radiocol.py Mon Jan 23 00:15:19 2012 +0100 +++ b/browser_side/radiocol.py Sun Jan 29 00:15:04 2012 +0100 @@ -23,6 +23,7 @@ from pyjamas.ui.VerticalPanel import VerticalPanel from pyjamas.ui.HorizontalPanel import HorizontalPanel from pyjamas.ui.SimplePanel import SimplePanel +from pyjamas.ui.FlexTable import FlexTable from pyjamas.ui.FormPanel import FormPanel from pyjamas.ui.NamedFrame import NamedFrame from pyjamas.ui.FileUpload import FileUpload @@ -33,27 +34,52 @@ from pyjamas.ui.Hidden import Hidden from pyjamas.ui.HTML import HTML from pyjamas import Window +from pyjamas.Timer import Timer +from __pyjamas__ import JS from jid import JID from tools import html_sanitize -class MetadataPanel(VerticalPanel): +class MetadataPanel(FlexTable): def __init__(self): - VerticalPanel.__init__(self) - self.title = Label("title:") - self.artist = Label("artist:") - self.album = Label("album:") - self.add(self.title) - self.add(self.artist) - self.add(self.album) + FlexTable.__init__(self) + title_lbl = Label("title:") + title_lbl.setStyleName('radiocol_metadata_lbl') + artist_lbl = Label("artist:") + artist_lbl.setStyleName('radiocol_metadata_lbl') + album_lbl = Label("album:") + album_lbl.setStyleName('radiocol_metadata_lbl') + self.title = Label("") + self.title.setStyleName('radiocol_metadata') + self.artist = Label("") + self.artist.setStyleName('radiocol_metadata') + self.album = Label("") + self.album.setStyleName('radiocol_metadata') + self.setWidget(0,0,title_lbl) + self.setWidget(1,0,artist_lbl) + self.setWidget(2,0,album_lbl) + self.setWidget(0,1,self.title) + self.setWidget(1,1,self.artist) + self.setWidget(2,1,self.album) + self.setStyleName("radiocol_metadata_pnl") + + def setTitle(self, title): + self.title.setText(title) + + def setArtist(self, artist): + self.artist.setText(artist) + + def setAlbum(self, album): + self.album.setText(album) class ControlPanel(FormPanel): """Panel used to show controls to add a song, or vote for the current one""" def __init__(self, referee): FormPanel.__init__(self) + self._timer = Timer(notify=self._timeCb) self.setEncoding(FormPanel.ENCODING_MULTIPART) self.setMethod(FormPanel.METHOD_POST) self.setAction("upload") # set this as appropriate @@ -67,6 +93,8 @@ hPanel.add(Button("Upload song", getattr(self, "onBtnClick"))) + self.status = Label() + vPanel.add(hPanel) #We need to know the referee @@ -75,6 +103,9 @@ self.add(vPanel) self.addFormHandler(self) + + def _timeCb(self, timer): + self.status.setText('') def onBtnClick(self): self.submit() @@ -85,12 +116,51 @@ def onSubmitComplete(self, event): result = event.getResults() if result == "OK": - Window.alert('Your song has been added to queue') + self.status.setText('Your song has been added to queue') + self.status.setStyleName('radiocol_upload_status_ok') + self._timer.schedule(5000) elif result == "KO": - Window.alert('Something went wrong during your song upload') + self.status.setText('Something went wrong during your song upload') + self.status.setStyleName('radiocol_upload_status_ko') else: Window.alert('Submit error: %s' % result) +class Player(HTML): + + def __init__(self, player_id, metadata_panel): + HTML.__init__(self) + self._id = player_id + self.metadata = metadata_panel + self.title="" + self.artist="" + self.album="" + self.filename = None + self.played = False #True when song is playing/played, become False on preload + + def preload(self, filename, title, artist, album): + """preload the song but doesn't play it""" + self.filename = filename + self.title = title + self.artist = artist + self.album = album + self.played = False + self.setHTML('