fance collection scanning wip
This commit is contained in:
parent
ad45c78b44
commit
9f981de854
|
@ -53,6 +53,7 @@ if(!isset($arguments['search'])){
|
||||||
$arguments['search']='';
|
$arguments['search']='';
|
||||||
}
|
}
|
||||||
OC_MEDIA_COLLECTION::$uid=OC_User::getUser();
|
OC_MEDIA_COLLECTION::$uid=OC_User::getUser();
|
||||||
|
unset($_SESSION['collection']);
|
||||||
if($arguments['action']){
|
if($arguments['action']){
|
||||||
switch($arguments['action']){
|
switch($arguments['action']){
|
||||||
case 'delete':
|
case 'delete':
|
||||||
|
@ -108,16 +109,18 @@ if($arguments['action']){
|
||||||
echo json_encode(OC_MEDIA_COLLECTION::getSongs($arguments['artist'],$arguments['album'],$arguments['search']));
|
echo json_encode(OC_MEDIA_COLLECTION::getSongs($arguments['artist'],$arguments['album'],$arguments['search']));
|
||||||
break;
|
break;
|
||||||
case 'get_path_info':
|
case 'get_path_info':
|
||||||
$songId=OC_MEDIA_COLLECTION::getSongByPath($arguments['path']);
|
if(OC_Filesystem::file_exists($arguments['path'])){
|
||||||
if($songId==0){
|
$songId=OC_MEDIA_COLLECTION::getSongByPath($arguments['path']);
|
||||||
unset($_SESSION['collection']);
|
if($songId==0){
|
||||||
$songId= OC_MEDIA_SCANNER::scanFile($arguments['path']);
|
unset($_SESSION['collection']);
|
||||||
}
|
$songId= OC_MEDIA_SCANNER::scanFile($arguments['path']);
|
||||||
if($songId>0){
|
}
|
||||||
$song=OC_MEDIA_COLLECTION::getSong($songId);
|
if($songId>0){
|
||||||
$song['artist']=OC_MEDIA_COLLECTION::getArtistName($song['song_artist']);
|
$song=OC_MEDIA_COLLECTION::getSong($songId);
|
||||||
$song['album']=OC_MEDIA_COLLECTION::getAlbumName($song['song_album']);
|
$song['artist']=OC_MEDIA_COLLECTION::getArtistName($song['song_artist']);
|
||||||
echo json_encode($song);
|
$song['album']=OC_MEDIA_COLLECTION::getAlbumName($song['song_album']);
|
||||||
|
echo json_encode($song);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'play':
|
case 'play':
|
||||||
|
@ -137,7 +140,30 @@ if($arguments['action']){
|
||||||
|
|
||||||
OC_Filesystem::readfile($arguments['path']);
|
OC_Filesystem::readfile($arguments['path']);
|
||||||
exit;
|
exit;
|
||||||
|
case 'find_music':
|
||||||
|
echo json_encode(findMusic());
|
||||||
|
exit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function findMusic($path='/'){
|
||||||
|
$music=array();
|
||||||
|
$dh=OC_Filesystem::opendir($path);
|
||||||
|
if($dh){
|
||||||
|
while($filename=readdir($dh)){
|
||||||
|
if($filename[0]!='.'){
|
||||||
|
$file=$path.'/'.$filename;
|
||||||
|
if(OC_Filesystem::is_dir($file)){
|
||||||
|
$music=array_merge($music,findMusic($file));
|
||||||
|
}else{
|
||||||
|
if(OC_MEDIA_SCANNER::isMusic($filename)){
|
||||||
|
$music[]=$file;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $music;
|
||||||
|
}
|
||||||
|
|
||||||
?>
|
?>
|
|
@ -37,6 +37,7 @@ OC_Util::addScript('media','player');
|
||||||
OC_Util::addScript('media','music');
|
OC_Util::addScript('media','music');
|
||||||
OC_Util::addScript('media','playlist');
|
OC_Util::addScript('media','playlist');
|
||||||
OC_Util::addScript('media','collection');
|
OC_Util::addScript('media','collection');
|
||||||
|
OC_Util::addScript('media','scanner');
|
||||||
OC_Util::addScript('media','jquery.jplayer.min');
|
OC_Util::addScript('media','jquery.jplayer.min');
|
||||||
OC_Util::addStyle('media','player');
|
OC_Util::addStyle('media','player');
|
||||||
OC_Util::addStyle('media','music');
|
OC_Util::addStyle('media','music');
|
||||||
|
|
|
@ -32,6 +32,10 @@ Collection={
|
||||||
for(var i=0;i<Collection.loadedListeners.length;i++){
|
for(var i=0;i<Collection.loadedListeners.length;i++){
|
||||||
Collection.loadedListeners[i]();
|
Collection.loadedListeners[i]();
|
||||||
}
|
}
|
||||||
|
if(collection.length==0){
|
||||||
|
$('#scan input.start').val('Scan');
|
||||||
|
$('#plugins a[href="#collection"]').trigger('click');
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -159,6 +163,35 @@ Collection={
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
addSong:function(song){
|
||||||
|
var artist=false
|
||||||
|
var album=false;
|
||||||
|
for(var i=0;i<Collection.artists.length;i++){
|
||||||
|
if(Collection.artists[i].artist_id==song.song_artist){
|
||||||
|
artist=Collection.artists[i];
|
||||||
|
for(var j=0;j<artist.albums.length;j++){
|
||||||
|
if(artist.albums[j].album_id==song.song_album){
|
||||||
|
album=artist.albums[j];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!artist){
|
||||||
|
artist={artist_id:song.song_artist,artist_name:song.artist,albums:[]};
|
||||||
|
Collection.artists.push(artist);
|
||||||
|
if(!Collection.parent || Collection.parent.is(":visible")){
|
||||||
|
Collection.display();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
if(!album){
|
||||||
|
album={album_id:song.song_album,album_name:song.album,album_artist:song.song_artist,songs:[]};
|
||||||
|
artist.albums.push(album)
|
||||||
|
}
|
||||||
|
album.songs.push(song)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -173,4 +206,13 @@ $(document).ready(function(){
|
||||||
$(this).parent().toggleClass('active');
|
$(this).parent().toggleClass('active');
|
||||||
Collection.showSongs($(this).parent());
|
Collection.showSongs($(this).parent());
|
||||||
});
|
});
|
||||||
|
Collection.parent.hide();
|
||||||
|
$('#scan input.start').click(function(){
|
||||||
|
$('#scan input.start').hide();
|
||||||
|
$('#scan input.stop').show();
|
||||||
|
$('#scan input.stop').click(function(){
|
||||||
|
Scanner.toggle();
|
||||||
|
});
|
||||||
|
Scanner.scanCollection();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -0,0 +1,72 @@
|
||||||
|
Scanner={
|
||||||
|
songsFound:0,
|
||||||
|
songsScanned:0,
|
||||||
|
startTime:null,
|
||||||
|
endTime:null,
|
||||||
|
stopScanning:false,
|
||||||
|
currentIndex:-1,
|
||||||
|
songs:[],
|
||||||
|
findSongs:function(ready){
|
||||||
|
$.getJSON(OC.linkTo('media','ajax/api.php')+'?action=find_music',function(songs){
|
||||||
|
Scanner.songsFound=songs.length;
|
||||||
|
Scanner.currentIndex=-1
|
||||||
|
if(ready){
|
||||||
|
ready(songs)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
scanFile:function(path,ready){
|
||||||
|
path=encodeURIComponent(path);
|
||||||
|
$.getJSON(OC.linkTo('media','ajax/api.php')+'?action=get_path_info&path='+path,function(song){
|
||||||
|
if(ready){
|
||||||
|
ready(song);
|
||||||
|
}
|
||||||
|
if(song){//do this after the ready call so we dont hold up the next ajax call
|
||||||
|
var artistId=song.song_artist;
|
||||||
|
Scanner.songsScanned++;
|
||||||
|
$('#scan span.songCount').text(Scanner.songsScanned);
|
||||||
|
var progress=(Scanner.songsScanned/Scanner.songsFound)*100;
|
||||||
|
$('#scanprogressbar').progressbar('value',progress)
|
||||||
|
Collection.addSong(song);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
scanCollection:function(ready){
|
||||||
|
$('#scanprogressbar').progressbar({
|
||||||
|
value:0,
|
||||||
|
});
|
||||||
|
Scanner.startTime=new Date().getTime()/1000;
|
||||||
|
Scanner.findSongs(function(songs){
|
||||||
|
Scanner.songs=songs;
|
||||||
|
Scanner.start();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
stop:function(){
|
||||||
|
Scanner.stopScanning=true;
|
||||||
|
},
|
||||||
|
start:function(ready){
|
||||||
|
Scanner.stopScanning=false;
|
||||||
|
var scanSong=function(){
|
||||||
|
Scanner.currentIndex++;
|
||||||
|
if(!Scanner.stopScanning && Scanner.currentIndex<Scanner.songs.length){
|
||||||
|
Scanner.scanFile(Scanner.songs[Scanner.currentIndex],scanSong)
|
||||||
|
}else{
|
||||||
|
Scanner.endTime=new Date().getTime()/1000;
|
||||||
|
if(ready){
|
||||||
|
ready();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
scanSong();
|
||||||
|
},
|
||||||
|
toggle:function(){
|
||||||
|
if(Scanner.stopScanning){
|
||||||
|
Scanner.start();
|
||||||
|
$('#scan input.stop').val('Pause');
|
||||||
|
}else{
|
||||||
|
Scanner.stop();
|
||||||
|
$('#scan input.stop').val('Resume');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -88,8 +88,7 @@ class OC_MEDIA_SCANNER{
|
||||||
return; //invalid mp3 file
|
return; //invalid mp3 file
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
$mimetype=OC_Filesystem::getMimeType($path);
|
if(!self::isMusic($path)){
|
||||||
if(substr($mimetype,0,4)!=='audio'){
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(!self::$getID3){
|
if(!self::$getID3){
|
||||||
|
@ -141,4 +140,14 @@ class OC_MEDIA_SCANNER{
|
||||||
$songId=OC_MEDIA_COLLECTION::addSong($title,$path,$artistId,$albumId,$length,$track,$size);
|
$songId=OC_MEDIA_COLLECTION::addSong($title,$path,$artistId,$albumId,$length,$track,$size);
|
||||||
return (!($title=='unkown' && $artist=='unkown' && $album=='unkown'))?$songId:0;
|
return (!($title=='unkown' && $artist=='unkown' && $album=='unkown'))?$songId:0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* quick check if a song is a music file by checking the extention, not as good as a proper mimetype check but way faster
|
||||||
|
* @param string $filename
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public static function isMusic($filename){
|
||||||
|
$ext=substr($filename,strrpos($filename,'.')+1);
|
||||||
|
return $ext=='mp3' || $ext=='flac' || $ext=='m4a' || $ext=='ogg' || $ext=='oga';
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -1,3 +1,9 @@
|
||||||
|
<div id='scan'>
|
||||||
|
<p><span class='songCount'>0</span> Songs scanned</p>
|
||||||
|
<div id="scanprogressbar"></div>
|
||||||
|
<input type='button' class='start' value='Recan'></input>
|
||||||
|
<input type='button' class='stop' style='display:none' value='Pause'></input>
|
||||||
|
</div>
|
||||||
<ul id='collection'>
|
<ul id='collection'>
|
||||||
<li class='artist'>
|
<li class='artist'>
|
||||||
<img src="<?php echo image_path('files','loading.gif') ?>" alt='loading'/>Loading Collection...
|
<img src="<?php echo image_path('files','loading.gif') ?>" alt='loading'/>Loading Collection...
|
||||||
|
@ -7,4 +13,5 @@
|
||||||
<button class='add'>Add</button>
|
<button class='add'>Add</button>
|
||||||
<button class='play'>Play</button>
|
<button class='play'>Play</button>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue