From 3fbc8973eee869c04c507f549f6388b47ea9134d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=B4me=20BERNIGAUD?= Date: Thu, 25 Aug 2011 09:04:08 +0200 Subject: [PATCH 1/4] My own version of music collection. --- apps/media/css/music.css | 11 +++- apps/media/js/collection.js | 91 +++++++++++++++++++++------------- apps/media/templates/music.php | 4 +- 3 files changed, 68 insertions(+), 38 deletions(-) diff --git a/apps/media/css/music.css b/apps/media/css/music.css index cf5cb646438..59d10f74db5 100644 --- a/apps/media/css/music.css +++ b/apps/media/css/music.css @@ -27,5 +27,14 @@ div.jp-volume-bar-value { background:#ccc; width:0; height:0.4em; } #collection li { padding-right:10px; } #searchresults input.play, #searchresults input.add { float:left; height:1em; width:1em; } #collection tr.collapsed td.album, #collection tr.collapsed td.title { color:#ddd; } -a.expander { float:right; display:block; } +a.expander { } tr.active { background-color:#eee; } +tr.artist, tr.artist td { + border-top: 1px solid lightgrey; +} +tr.album td.artist { + padding-left: 20px; +} +tr.song td.artist { + padding-left: 40px; +} diff --git a/apps/media/js/collection.js b/apps/media/js/collection.js index af26737b942..72100927a5f 100644 --- a/apps/media/js/collection.js +++ b/apps/media/js/collection.js @@ -55,7 +55,7 @@ Collection={ for(var i=0;i0){ var tr=template.clone().removeClass('template'); + tr.addClass('artist'); tr.find('td.title a').text(artist.songs.length+' '+t('media','songs')); tr.find('td.album a').text(artist.albums.length+' '+t('media','albums')); tr.find('td.artist a').text(artist.name); @@ -90,7 +91,7 @@ Collection={ Collection.parent.find('tr').removeClass('active'); $('tr[data-artist="'+artist.name+'"]').addClass('active'); }); - var expander=$('>'); + var expander=$('> '); expander.data('expanded',false); expander.click(function(event){ var tr=$(this).parent().parent(); @@ -100,7 +101,7 @@ Collection={ Collection.showArtist(tr.data('artist')); } }); - tr.children('td.artist').append(expander); + tr.find('td.album a').before(expander); tr.attr('data-artist',artist.name); Collection.parent.find('tbody').append(tr); } @@ -112,48 +113,60 @@ Collection={ var tr=Collection.parent.find('tr[data-artist="'+artist+'"]'); var nextRow=tr.next(); var artist=tr.data('artistData'); - var first=true; $.each(artist.albums,function(foo,album){ + var newRow=tr.clone(); + newRow.removeClass('artist'); + newRow.addClass('album'); + newRow.find('.expander').remove(); + var expander=$('v '); + expander.data('expanded',true); + expander.click(function(event){ + var tr=$(this).parent().parent(); + if(expander.data('expanded')) { + Collection.hideAlbum(tr.data('artist'),tr.data('album')); + } else { + Collection.showAlbum(tr.data('artist'),tr.data('album')); + } + }); + newRow.find('td.title').text(''); + newRow.find('td.artist a').text(album.name); + newRow.find('td.album a').text(album.songs.length+" songs"); + newRow.find('td.artist a').click(function(event){ + event.preventDefault(); + PlayList.add(album,true); + PlayList.play(0); + Collection.parent.find('tr').removeClass('active'); + $('tr[data-album="'+album.name+'"]').addClass('active'); + }); + newRow.find('td.album a').before(expander); + newRow.attr('data-artist',artist.name); + newRow.attr('data-album',album.name); + nextRow.before(newRow); $.each(album.songs,function(i,song){ - if(first){ - newRow=tr; - }else{ - var newRow=tr.clone(); - } - if(i==0){ - newRow.find('td.album a').text(album.name); - newRow.find('td.album a').click(function(event){ - event.preventDefault(); - PlayList.add(album,true); - PlayList.play(0); - Collection.parent.find('tr').removeClass('active'); - $('tr[data-album="'+album.name+'"]').addClass('active'); - }); - }else{ - newRow.find('.expander').remove(); - newRow.find('td.album a').text(''); - } - newRow.find('td.title a').text(song.name); - newRow.find('td.title a').click(function(event){ + var newRow=tr.clone(); + newRow.removeClass('artist'); + newRow.addClass('song'); + newRow.find('.expander').remove(); + newRow.find('td.title a').text(''); + newRow.find('td.album a').text(''); + newRow.find('td.artist a').text(song.name); + newRow.find('td.artist a').click(function(event) { event.preventDefault(); PlayList.add(song,true); PlayList.play(0); Collection.parent.find('tr').removeClass('active'); $('tr[data-title="'+song.name+'"]').addClass('active'); }); + newRow.attr('data-artist',artist.name); newRow.attr('data-album',album.name); newRow.attr('data-title',song.name); - newRow.attr('data-artist',artist.name); - if(!first){ - nextRow.before(newRow); - } - first=false; + nextRow.before(newRow); }); }); tr.removeClass('collapsed'); tr.find('a.expander').data('expanded',true); tr.find('a.expander').addClass('expanded'); - tr.find('a.expander').text('v'); + tr.find('a.expander').text('v '); }, hideArtist:function(artist){ var tr=Collection.parent.find('tr[data-artist="'+artist+'"]'); @@ -161,7 +174,7 @@ Collection={ var artist=tr.first().data('artistData'); tr.first().find('td.album a').text(artist.albums.length+' '+t('media','albums')); tr.first().find('td.title a').text(artist.songs.length+' '+t('media','songs')); - tr.first().find('td.album a').unbind('click'); + tr.first().find('td.album a').last().unbind('click'); tr.first().find('td.title a').unbind('click'); tr.each(function(i,row){ if(i>0){ @@ -170,15 +183,23 @@ Collection={ }); tr.find('a.expander').data('expanded',false); tr.find('a.expander').removeClass('expanded'); - tr.find('a.expander').text('>'); + tr.find('a.expander').text('> '); } }, showAlbum:function(artist,album){ - Collection.parent.find('tr[data-artist="'+artist+'"][data-album="'+album+'"]').show(); + var tr = Collection.parent.find('tr[data-artist="'+artist+'"][data-album="'+album+'"]'); + tr.find('a.expander').data('expanded',true); + tr.find('a.expander').addClass('expanded'); + tr.find('a.expander').text('v '); + tr.show(); }, hideAlbum:function(artist,album){ - Collection.parent.find('tr[data-artist="'+artist+'"][data-album="'+album+'"]').hide(); - Collection.parent.find('tr[data-artist="'+artist+'"][data-album="'+album+'"]').last().show(); + var tr = Collection.parent.find('tr[data-artist="'+artist+'"][data-album="'+album+'"]'); + tr.find('a.expander').data('expanded',false); + tr.find('a.expander').removeClass('expanded'); + tr.find('a.expander').text('> '); + tr.hide(); + tr.first().show(); }, parent:null, hide:function(){ diff --git a/apps/media/templates/music.php b/apps/media/templates/music.php index cbfab0dff4a..9b40faa9619 100644 --- a/apps/media/templates/music.php +++ b/apps/media/templates/music.php @@ -25,9 +25,9 @@
- -

+
From ce1d13c9b6adf351818637649ca90a757c67df96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=B4me=20BERNIGAUD?= Date: Thu, 25 Aug 2011 20:37:51 +0200 Subject: [PATCH 2/4] playlist working --- apps/media/js/player.js | 52 +++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 25 deletions(-) diff --git a/apps/media/js/player.js b/apps/media/js/player.js index b3beed8c3b9..7581c27393f 100644 --- a/apps/media/js/player.js +++ b/apps/media/js/player.js @@ -5,10 +5,8 @@ var PlayList={ player:null, volume:0.8, active:false, - tempPlaylist:[], - isTemp:true, next:function(){ - var items=(PlayList.isTemp)?PlayList.tempPlaylist:PlayList.items; + var items=PlayList.items; var next=PlayList.current+1; if(next>=items.length){ next=0; @@ -17,7 +15,7 @@ var PlayList={ PlayList.render(); }, previous:function(){ - var items=(PlayList.isTemp)?PlayList.tempPlaylist:PlayList.items; + var items=PlayList.items; var next=PlayList.current-1; if(next<0){ next=items.length-1; @@ -26,7 +24,7 @@ var PlayList={ PlayList.render(); }, play:function(index,time,ready){ - var items=(PlayList.isTemp)?PlayList.tempPlaylist:PlayList.items; + var items=PlayList.items; if(index==null){ index=PlayList.current; } @@ -34,8 +32,11 @@ var PlayList={ PlayList.current=index; if(PlayList.player){ if(PlayList.player.data('jPlayer').options.supplied!=items[index].type){//the the audio type changes we need to reinitialize jplayer + PlayList.player.jPlayer("play",time); + localStorage.setItem(oc_current_user+'oc_playlist_time',time); PlayList.player.jPlayer("destroy"); - PlayList.init(items[index].type,function(){PlayList.play(null,time,ready)}); + PlayList.save(); // so that the init don't lose the playlist + PlayList.init(items[index].type,null); // init calls load that calls play }else{ PlayList.player.jPlayer("setMedia", items[PlayList.current]); items[index].playcount++; @@ -60,7 +61,10 @@ var PlayList={ } } }else{ - PlayList.init(items[index].type,PlayList.play); + localStorage.setItem(oc_current_user+'oc_playlist_time',time); + localStorage.setItem(oc_current_user+'oc_playlist_playing','true'); + PlayList.save(); // so that the init don't lose the playlist + PlayList.init(items[index].type,null); // init calls load that calls play } } }, @@ -100,37 +104,30 @@ var PlayList={ swfPath:OC.linkTo('media','js'), }); }, - add:function(song,temp,dontReset){ + add:function(song,dontReset){ if(!dontReset){ - PlayList.tempPlaylist=[];//clear the temp playlist + PlayList.items=[];//clear the playlist } - PlayList.isTemp=temp; - PlayList.isTemp=true; if(!song){ return; } if(song.substr){//we are passed a string, asume it's a url to a song - PlayList.addFile(song,temp,true); + PlayList.addFile(song,true); } if(song.albums){//a artist object was passed, add all albums inside it $.each(song.albums,function(index,album){ - PlayList.add(album,temp,true); + PlayList.add(album,true); }); - } - if(song.songs){//a album object was passed, add all songs inside it + } else if(song.songs){//a album object was passed, add all songs inside it $.each(song.songs,function(index,song){ - PlayList.add(song,temp,true); + PlayList.add(song,true); }); } if(song.path){ var type=musicTypeFromFile(song.path); var item={name:song.name,type:type,artist:song.artist,album:song.album,length:song.length,playcount:song.playCount}; item[type]=PlayList.urlBase+encodeURIComponent(song.path); - if(PlayList.isTemp){ - PlayList.tempPlaylist.push(item); - }else{ - PlayList.items.push(item); - } + PlayList.items.push(item); } }, addFile:function(path){ @@ -145,6 +142,7 @@ var PlayList={ PlayList.items.push(item); }, remove:function(index){ + alert('remove'); PlayList.items.splice(index,1); PlayList.render(); }, @@ -160,10 +158,14 @@ var PlayList={ if(typeof localStorage !== 'undefined' && localStorage){ localStorage.setItem(oc_current_user+'oc_playlist_items',JSON.stringify(PlayList.items)); localStorage.setItem(oc_current_user+'oc_playlist_current',PlayList.current); - var time=Math.round(PlayList.player.data('jPlayer').status.currentTime); - localStorage.setItem(oc_current_user+'oc_playlist_time',time); - var volume=PlayList.player.data('jPlayer').options.volume*100; - localStorage.setItem(oc_current_user+'oc_playlist_volume',volume); + if(PlayList.player) { + if(PlayList.player.data('jPlayer')) { + var time=Math.round(PlayList.player.data('jPlayer').status.currentTime); + localStorage.setItem(oc_current_user+'oc_playlist_time',time); + var volume=PlayList.player.data('jPlayer').options.volume*100; + localStorage.setItem(oc_current_user+'oc_playlist_volume',volume); + } + } if(PlayList.active){ localStorage.setItem(oc_current_user+'oc_playlist_active','false'); } From 56399d1d7929a33af5c3d543f8281d4e6d0fe89d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=B4me=20BERNIGAUD?= Date: Thu, 25 Aug 2011 20:57:17 +0200 Subject: [PATCH 3/4] Play and add buttons in the collection. --- apps/media/js/collection.js | 124 +++++++++++++++++------------------- 1 file changed, 58 insertions(+), 66 deletions(-) diff --git a/apps/media/js/collection.js b/apps/media/js/collection.js index 5c04313d143..4b772b1756f 100644 --- a/apps/media/js/collection.js +++ b/apps/media/js/collection.js @@ -79,19 +79,18 @@ Collection={ $.each(Collection.artists,function(i,artist){ if(artist.name && artist.songs.length>0){ var tr=template.clone().removeClass('template'); - tr.addClass('artist'); tr.find('td.title a').text(artist.songs.length+' '+t('media','songs')); tr.find('td.album a').text(artist.albums.length+' '+t('media','albums')); tr.find('td.artist a').text(artist.name); tr.data('artistData',artist); tr.find('td.artist a').click(function(event){ event.preventDefault(); - PlayList.add(artist,true); + PlayList.add(artist); PlayList.play(0); Collection.parent.find('tr').removeClass('active'); $('tr[data-artist="'+artist.name+'"]').addClass('active'); }); - var expander=$('> '); + var expander=$('>'); expander.data('expanded',false); expander.click(function(event){ var tr=$(this).parent().parent(); @@ -101,7 +100,9 @@ Collection={ Collection.showArtist(tr.data('artist')); } }); - tr.find('td.album a').before(expander); + tr.find('td.artist').addClass('buttons'); + Collection.addButtons(tr,artist); + tr.children('td.artist').append(expander); tr.attr('data-artist',artist.name); Collection.parent.find('tbody').append(tr); } @@ -113,60 +114,49 @@ Collection={ var tr=Collection.parent.find('tr[data-artist="'+artist+'"]'); var nextRow=tr.next(); var artist=tr.data('artistData'); + var first=true; $.each(artist.albums,function(foo,album){ - var newRow=tr.clone(); - newRow.removeClass('artist'); - newRow.addClass('album'); - newRow.find('.expander').remove(); - var expander=$('v '); - expander.data('expanded',true); - expander.click(function(event){ - var tr=$(this).parent().parent(); - if(expander.data('expanded')) { - Collection.hideAlbum(tr.data('artist'),tr.data('album')); - } else { - Collection.showAlbum(tr.data('artist'),tr.data('album')); - } - }); - newRow.find('td.title').text(''); - newRow.find('td.artist a').text(album.name); - newRow.find('td.album a').text(album.songs.length+" songs"); - newRow.find('td.artist a').click(function(event){ - event.preventDefault(); - PlayList.add(album,true); - PlayList.play(0); - Collection.parent.find('tr').removeClass('active'); - $('tr[data-album="'+album.name+'"]').addClass('active'); - }); - newRow.find('td.album a').before(expander); - newRow.attr('data-artist',artist.name); - newRow.attr('data-album',album.name); - nextRow.before(newRow); $.each(album.songs,function(i,song){ - var newRow=tr.clone(); - newRow.removeClass('artist'); - newRow.addClass('song'); - newRow.find('.expander').remove(); - newRow.find('td.title a').text(''); - newRow.find('td.album a').text(''); - newRow.find('td.artist a').text(song.name); - newRow.find('td.artist a').click(function(event) { + if(first){ + newRow=tr; + }else{ + var newRow=tr.clone(); + } + if(i==0){ + newRow.find('td.album a').text(album.name); + newRow.find('td.album a').click(function(event){ + event.preventDefault(); + PlayList.add(album); + PlayList.play(0); + Collection.parent.find('tr').removeClass('active'); + $('tr[data-album="'+album.name+'"]').addClass('active'); + }); + }else{ + newRow.find('.expander').remove(); + newRow.find('td.album a').text(''); + } + newRow.find('td.title a').text(song.name); + Collection.addButtons(newRow,song); + newRow.find('td.title a').click(function(event){ event.preventDefault(); - PlayList.add(song,true); + PlayList.add(song); PlayList.play(0); Collection.parent.find('tr').removeClass('active'); $('tr[data-title="'+song.name+'"]').addClass('active'); }); - newRow.attr('data-artist',artist.name); newRow.attr('data-album',album.name); newRow.attr('data-title',song.name); - nextRow.before(newRow); + newRow.attr('data-artist',artist.name); + if(!first){ + nextRow.before(newRow); + } + first=false; }); }); tr.removeClass('collapsed'); tr.find('a.expander').data('expanded',true); tr.find('a.expander').addClass('expanded'); - tr.find('a.expander').text('v '); + tr.find('a.expander').text('v'); }, hideArtist:function(artist){ var tr=Collection.parent.find('tr[data-artist="'+artist+'"]'); @@ -174,7 +164,7 @@ Collection={ var artist=tr.first().data('artistData'); tr.first().find('td.album a').text(artist.albums.length+' '+t('media','albums')); tr.first().find('td.title a').text(artist.songs.length+' '+t('media','songs')); - tr.first().find('td.album a').last().unbind('click'); + tr.first().find('td.album a').unbind('click'); tr.first().find('td.title a').unbind('click'); tr.each(function(i,row){ if(i>0){ @@ -183,23 +173,15 @@ Collection={ }); tr.find('a.expander').data('expanded',false); tr.find('a.expander').removeClass('expanded'); - tr.find('a.expander').text('> '); + tr.find('a.expander').text('>'); } }, showAlbum:function(artist,album){ - var tr = Collection.parent.find('tr[data-artist="'+artist+'"][data-album="'+album+'"]'); - tr.find('a.expander').data('expanded',true); - tr.find('a.expander').addClass('expanded'); - tr.find('a.expander').text('v '); - tr.show(); + Collection.parent.find('tr[data-artist="'+artist+'"][data-album="'+album+'"]').show(); }, hideAlbum:function(artist,album){ - var tr = Collection.parent.find('tr[data-artist="'+artist+'"][data-album="'+album+'"]'); - tr.find('a.expander').data('expanded',false); - tr.find('a.expander').removeClass('expanded'); - tr.find('a.expander').text('> '); - tr.hide(); - tr.first().show(); + Collection.parent.find('tr[data-artist="'+artist+'"][data-album="'+album+'"]').hide(); + Collection.parent.find('tr[data-artist="'+artist+'"][data-album="'+album+'"]').last().show(); }, parent:null, hide:function(){ @@ -213,16 +195,26 @@ Collection={ song.song_playcount++; } }, - addButtons:function(parent){ - parent.children('button.add').click(function(){ - var type=$(this).parent().data('type'); - PlayList.add($(this).parent().data(type)); + addButtons:function(parent,data){ + buttons = parent.find('.buttons'); + if(buttons.find('.add').length<=0) { + buttons.append(''); + } + if(buttons.find('.play').length<=0) { + buttons.append(''); + } + buttons.find('.add').unbind('click'); + buttons.find('.add').click(function(event){ + event.preventDefault(); + PlayList.add(data,true); + PlayList.render(); }); - parent.children('button.play').click(function(){ - var type=$(this).parent().data('type'); - var oldSize=PlayList.items.length; - PlayList.add($(this).parent().data(type)); - PlayList.play(oldSize); + buttons.find('.play').unbind('click'); + buttons.find('.play').click(function(event){ + event.preventDefault(); + PlayList.add(data); + PlayList.play(0,0); + PlayList.render(); }); }, find:function(artistName,albumName,songName){ From ee0954b236f444ed6c0f1d39357b62db15b9c325 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Thu, 25 Aug 2011 21:51:04 +0200 Subject: [PATCH 4/4] fix issue with login being case insensitve --- lib/user.php | 22 +++++++++++++--------- lib/user/database.php | 8 ++++---- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/lib/user.php b/lib/user.php index e53ba145c9e..0630ebb9384 100644 --- a/lib/user.php +++ b/lib/user.php @@ -191,13 +191,17 @@ class OC_User { $run = true; OC_Hook::emit( "OC_User", "pre_login", array( "run" => &$run, "uid" => $uid )); - if( $run && self::checkPassword( $uid, $password )){ - $_SESSION['user_id'] = $uid; - OC_Crypt::init($uid,$password); - OC_Hook::emit( "OC_User", "post_login", array( "uid" => $uid )); - return true; - } - else{ + if( $run ){ + $uid=self::checkPassword( $uid, $password ); + if($uid){ + $_SESSION['user_id'] = $uid; + OC_Crypt::init($uid,$password); + OC_Hook::emit( "OC_User", "post_login", array( "uid" => $uid )); + return true; + }else{ + return false; + } + }else{ return false; } } @@ -292,8 +296,8 @@ class OC_User { foreach(self::$_usedBackends as $backend){ if($backend->implementsActions(OC_USER_BACKEND_CHECK_PASSWORD)){ $result=$backend->checkPassword( $uid, $password ); - if($result===true){ - return true; + if($result){ + return $result; } } } diff --git a/lib/user/database.php b/lib/user/database.php index 4992c2aa164..f29aaf00f05 100644 --- a/lib/user/database.php +++ b/lib/user/database.php @@ -103,13 +103,13 @@ class OC_User_Database extends OC_User_Backend { * Check if the password is correct without logging in the user */ public function checkPassword( $uid, $password ){ - $query = OC_DB::prepare( "SELECT uid FROM *PREFIX*users WHERE uid = ? AND password = ?" ); + $query = OC_DB::prepare( "SELECT uid FROM *PREFIX*users WHERE uid LIKE ? AND password = ?" ); $result = $query->execute( array( $uid, sha1( $password ))); if( $result->numRows() > 0 ){ - return true; - } - else{ + $row=$result->fetchRow(); + return $row['uid']; + }else{ return false; } }