コード例 #1
0
ファイル: main.php プロジェクト: daskleinesys/slimpd
 public function searchImagesInFilesystem()
 {
     # TODO: in case an image gets replaced with same filename, the database record should get updated
     $this->jobPhase = 5;
     $this->beginJob(array('msg' => 'collecting directories to scan from table:albums'), __FUNCTION__);
     $app = \Slim\Slim::getInstance();
     $phpThumb = Bitmap::getPhpThumb();
     // make sure that a single directory will not be scanned twice
     $scannedDirectories = array();
     if ($app->config['images']['look_cover_directory'] == TRUE) {
         $this->pluralizeCommonArtworkDirectoryNames($app->config['images']['common_artwork_dir_names']);
     }
     $query = "SELECT count(id) AS itemCountTotal FROM album WHERE lastScan <= filemtime;";
     $this->itemCountTotal = (int) $app->db->query($query)->fetch_assoc()['itemCountTotal'];
     $query = "SELECT id, relativePath, relativePathHash, filemtime FROM album WHERE lastScan <= filemtime;";
     $result = $app->db->query($query);
     $insertedImages = 0;
     while ($record = $result->fetch_assoc()) {
         $this->itemCountChecked++;
         cliLog($record['id'] . ' ' . $record['relativePath'], 2);
         $this->updateJob(array('msg' => 'processed ' . $this->itemCountChecked . ' files', 'currentItem' => $record['relativePath'], 'insertedImages' => $insertedImages));
         $a = new Album();
         $a->setId($record['id']);
         $a->setLastScan(time());
         $a->setImportStatus(2);
         $foundAlbumImages = array();
         if ($app->config['images']['look_current_directory']) {
             // check if have scanned the directory already
             $images = array_key_exists($record['relativePathHash'], $scannedDirectories) === TRUE ? $scannedDirectories[$record['relativePathHash']] : getDirectoryFiles($app->config['mpd']['musicdir'] . $record['relativePath']);
             $scannedDirectories[$record['relativePathHash']] = $images;
             if (count($images) > 0) {
                 $foundAlbumImages = array_merge($foundAlbumImages, $images);
             }
         }
         if ($app->config['images']['look_cover_directory']) {
             // search for specific named subdirectories
             if (is_dir($app->config['mpd']['musicdir'] . $record['relativePath']) === TRUE) {
                 $handle = opendir($app->config['mpd']['musicdir'] . $record['relativePath']);
                 while ($dirname = readdir($handle)) {
                     if (is_dir($app->config['mpd']['musicdir'] . $record['relativePath'] . $dirname)) {
                         if (in_array(az09($dirname), $this->commonArtworkDirectoryNames)) {
                             $foundAlbumImages = array_merge($foundAlbumImages, getDirectoryFiles($app->config['mpd']['musicdir'] . $record['relativePath'] . $dirname));
                         }
                     }
                 }
                 closedir($handle);
             }
         }
         if ($app->config['images']['look_parent_directory'] && count($foundAlbumImages) === 0) {
             $parentDir = dirname($record['relativePath']) . DS;
             $parentDirHash = getFilePathHash($parentDir);
             // check if have scanned the directory already
             $images = array_key_exists($parentDirHash, $scannedDirectories) === TRUE ? $scannedDirectories[$parentDirHash] : getDirectoryFiles($app->config['mpd']['musicdir'] . $parentDir);
             $scannedDirectories[$parentDirHash] = $images;
             if (count($images) > 0) {
                 $foundAlbumImages = array_merge($foundAlbumImages, $images);
             }
         }
         foreach ($foundAlbumImages as $imagePath) {
             $relativePath = str_replace($app->config['mpd']['musicdir'], '', $imagePath);
             $relativePathHash = getFilePathHash($relativePath);
             $imageSize = GetImageSize($app->config['mpd']['musicdir'] . $relativePath);
             $bitmap = new Bitmap();
             $bitmap->setRelativePath($relativePath);
             $bitmap->setRelativePathHash($relativePathHash);
             $bitmap->setFilemtime(filemtime($imagePath));
             $bitmap->setFilesize(filesize($imagePath));
             $bitmap->setAlbumId($record['id']);
             if ($imageSize !== FALSE) {
                 $bitmap->setWidth($imageSize[0]);
                 $bitmap->setHeight($imageSize[1]);
                 $bitmap->setMimeType($imageSize['mime']);
             } else {
                 $bitmap->setError(1);
             }
             $bitmap->update();
             $insertedImages++;
         }
         $a->update();
     }
     $this->finishJob(array('msg' => 'processed ' . $this->itemCountChecked . ' directories', 'insertedImages' => $insertedImages), __FUNCTION__);
     unset($scannedDirectories);
     return;
 }
コード例 #2
0
ファイル: get.php プロジェクト: daskleinesys/slimpd
 switch ($currenttype) {
     case 'all':
     case 'track':
         $config['tracklist'] = array();
         foreach ($result['matches'] as $id => $foo) {
             $config['tracklist'][] = \Slimpd\Track::getInstanceByAttributes(array('id' => $id));
         }
         // get all relational items we need for rendering
         $config['renderitems'] = array('genres' => \Slimpd\Genre::getInstancesForRendering($config['tracklist']), 'labels' => \Slimpd\Label::getInstancesForRendering($config['tracklist']), 'artists' => \Slimpd\Artist::getInstancesForRendering($config['tracklist']), 'albums' => \Slimpd\Album::getInstancesForRendering($config['tracklist']));
         break;
     case 'album':
         $config['itemlist'] = array();
         foreach ($result['matches'] as $id => $foo) {
             $config['itemlist'][] = \Slimpd\Album::getInstanceByAttributes(array('id' => $id));
         }
         $config['renderitems'] = array('genres' => \Slimpd\Genre::getInstancesForRendering($config['itemlist']), 'labels' => \Slimpd\Label::getInstancesForRendering($config['itemlist']), 'artists' => \Slimpd\Artist::getInstancesForRendering($config['itemlist']), 'albums' => \Slimpd\Album::getInstancesForRendering($config['itemlist']));
         break;
     case 'artist':
         $config['itemlist'] = array();
         foreach ($result['matches'] as $id => $foo) {
             $config['itemlist'][] = \Slimpd\Artist::getInstanceByAttributes(array('id' => $id));
         }
         break;
     case 'genre':
         $config['itemlist'] = array();
         foreach ($result['matches'] as $id => $foo) {
             $config['itemlist'][] = \Slimpd\Genre::getInstanceByAttributes(array('id' => $id));
         }
         break;
     case 'label':
         $config['itemlist'] = array();