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; }
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();