getFiles(['dir'=>$this->option('dir'),'file'=>$this->option('file')],'photo'); if (! count($files)) exit; // Show a progress bar $bar = $this->output->createProgressBar(count($files)); $bar->setFormat("%current%/%max% [%bar%] %percent:3s%% (%memory%) (%remaining%) "); $tags = NULL; $t = $p = array(); // Tags if ($this->option('tags')) { $tags = explode(',',$this->option('tags')); $t = Tag::whereIn('tag',$tags)->pluck('id')->toArray(); } // People if ($this->option('people')) { $tags = explode(',',$this->option('people')); $p = Person::whereIn('tag',$tags)->pluck('id')->toArray(); } $c = 0; foreach ($files as $file) { $bar->advance(); if (preg_match('/@__thumb/',$file) OR preg_match('/\/._/',$file)) { $this->warn(sprintf('Ignoring file [%s]',$file)); continue; } if (! in_array(strtolower(pathinfo($file,PATHINFO_EXTENSION)),config('photo.import.accepted'))) { $this->warn(sprintf('Ignoring [%s]',$file)); continue; } if ($this->option('verbose')) $this->info(sprintf('Processing file [%s]',$file)); $c++; $po = Photo::where('filename',$file)->first(); if (is_null($po)) { $po = new Photo; $po->filename = $file; } if (! is_readable($po->file_path())) { $this->warn(sprintf('Ignoring [%s], it is not readable',$po->file_path())); continue; } $po->date_taken = strtotime($po->property('exif:DateTime') ? $po->property('exif:DateTime') : $po->property('exif:DateTimeOriginal')); $po->subsectime = $po->property('exif:SubSecTimeOriginal'); $po->signature = $po->property('signature'); $po->make = $po->property('exif:Make'); $po->model = $po->property('exif:Model'); $po->height = $po->property('height'); $po->width = $po->property('width'); $po->orientation = $po->property('orientation'); $po->gps_lat = Photo::latlon(preg_split('/,\s?/',$po->property('exif:GPSLatitude')),$po->property('exif:GPSLatitudeRef')); $po->gps_lon = Photo::latlon(preg_split('/,\s?/',$po->property('exif:GPSLongitude')),$po->property('exif:GPSLongitudeRef')); try { $po->thumbnail = exif_thumbnail($po->file_path()); } catch (\Exception $e) { // @todo Couldnt get the thumbnail, so we should create one. } // If this is a duplicate $x = Photo::whereIN('id',$po->list_duplicate())->get(); if (count($x)) { $skip = FALSE; foreach ($x as $o) { // We'll only ignore based on the same signature. if ($po->signature != $o->signature AND ! $po->exists) continue; if ($this->option('ignoredupe')) { $skip = TRUE; $this->warn(sprintf("Ignoring file [%s], it's the same as [%s] with id %s",$po->file_path(),$o->filename,$o->id)); break; } elseif ($this->option('deletedupe') AND ($po->filename != $o->filename)) { $skip = TRUE; $this->error(sprintf("Deleting file [%s], it's the same as [%s] with id %s and signature [%s]\n",$po->file_path(),$o->filename,$o->id,$po->signature)); unlink($po->file_path()); } } if ($skip) continue; $po->duplicate = '1'; $this->warn(sprintf('Image [%s] marked as a duplicate',$file)); } if ($po->exists) $this->warn(sprintf('Image [%s] already in DB: %s',$file,$po->id)); $po->save(); if ($po->wasRecentlyCreated) $this->info(sprintf('Image [%s] stored in DB: %s',$file,$po->id)); // Record our people and tags if ($p) $po->People()->sync($p); if ($t) $po->Tags()->sync($t); } $bar->finish(); return $this->info(sprintf('Images processed: %s',$c)); } }