pslam: fix more issues
Signed-off-by: Varun Patil <radialapps@gmail.com>pull/877/head
parent
bd2101e7bb
commit
49848bbd16
|
@ -160,7 +160,9 @@ class PlacesBackend extends Backend
|
|||
foreach ($places as &$row) {
|
||||
$row['osm_id'] = (int) $row['osm_id'];
|
||||
$row['count'] = (int) $row['count'];
|
||||
self::choosePlaceLang($row, $lang);
|
||||
|
||||
$row['name'] = self::translateName($lang, $row['name'], $row['other_names']);
|
||||
unset($row['other_names']);
|
||||
}
|
||||
|
||||
return $places;
|
||||
|
@ -198,19 +200,24 @@ class PlacesBackend extends Backend
|
|||
/**
|
||||
* Choose the best name for the place.
|
||||
*/
|
||||
public static function choosePlaceLang(array &$place, string $lang): array
|
||||
public static function translateName(string $lang, string $name, ?string $otherNames): string
|
||||
{
|
||||
try {
|
||||
$otherNames = json_decode($place['other_names'], true);
|
||||
if (isset($otherNames[$lang])) {
|
||||
$place['name'] = $otherNames[$lang];
|
||||
}
|
||||
} catch (\Error $e) {
|
||||
// Ignore
|
||||
} finally {
|
||||
unset($place['other_names']);
|
||||
if (empty($otherNames)) {
|
||||
return $name;
|
||||
}
|
||||
|
||||
return $place;
|
||||
try {
|
||||
// Decode the other names
|
||||
$json = json_decode($otherNames, true);
|
||||
|
||||
// Check if the language is available
|
||||
if (\array_key_exists($lang, $json) && \is_string($json[$lang])) {
|
||||
return $json[$lang];
|
||||
}
|
||||
} catch (\Error) {
|
||||
// Ignore errors, just use original name
|
||||
}
|
||||
|
||||
return $name;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -134,9 +134,10 @@ class VideoController extends GenericApiController
|
|||
$liveVideoPath = null;
|
||||
|
||||
// Video is inside the file
|
||||
$path = null;
|
||||
$path = '<>';
|
||||
if (str_starts_with($liveid, 'self__')) {
|
||||
$path = $file->getStorage()->getLocalFile($file->getInternalPath());
|
||||
$path = $file->getStorage()->getLocalFile($file->getInternalPath())
|
||||
?: throw Exceptions::BadRequest('[Video] File path missing (self__*)');
|
||||
$mime = 'video/mp4';
|
||||
$name = $file->getName().'.mp4';
|
||||
}
|
||||
|
@ -145,7 +146,7 @@ class VideoController extends GenericApiController
|
|||
if ('self__trailer' === $liveid) {
|
||||
try { // Get trailer
|
||||
$blob = Exif::getBinaryExifProp($path, '-trailer');
|
||||
} catch (\Exception $e) {
|
||||
} catch (\Exception) {
|
||||
throw Exceptions::NotFound('file trailer');
|
||||
}
|
||||
} elseif (str_starts_with($liveid, 'self__exifbin=')) {
|
||||
|
@ -158,15 +159,10 @@ class VideoController extends GenericApiController
|
|||
|
||||
try { // Get embedded video file
|
||||
$blob = Exif::getBinaryExifProp($path, "-{$field}");
|
||||
} catch (\Exception $e) {
|
||||
} catch (\Exception) {
|
||||
throw Exceptions::NotFound('Could not read binary EXIF field');
|
||||
}
|
||||
} elseif (str_starts_with($liveid, 'self__traileroffset=')) {
|
||||
// Make sure we have a path
|
||||
if (!$path) {
|
||||
throw Exceptions::BadRequest('File path missing for self__traileroffset');
|
||||
}
|
||||
|
||||
// Remove prefix
|
||||
$offset = (int) substr($liveid, \strlen('self__traileroffset='));
|
||||
if ($offset <= 0) {
|
||||
|
@ -320,7 +316,7 @@ class VideoController extends GenericApiController
|
|||
*
|
||||
* @return mixed The response from upstream
|
||||
*/
|
||||
private static function postFile(string $client, mixed $blob): mixed
|
||||
private static function postFile(string $client, string $blob): mixed
|
||||
{
|
||||
try {
|
||||
return self::postFileInternal($client, $blob);
|
||||
|
|
|
@ -34,10 +34,8 @@ class IndexJob extends TimedJob
|
|||
|
||||
/**
|
||||
* Run the background indexing job.
|
||||
*
|
||||
* @param mixed $argument
|
||||
*/
|
||||
protected function run($argument)
|
||||
protected function run(mixed $argument): void
|
||||
{
|
||||
// Check if indexing is enabled
|
||||
if ('0' === Util::getSystemConfig('memories.index.mode')) {
|
||||
|
|
|
@ -69,7 +69,8 @@ class LivePhoto
|
|||
//
|
||||
// The video is then located at the end of the file, so we can get the offset.
|
||||
// Match each DirectoryItemSemantic to find MotionPhoto, then get the length.
|
||||
$path = $file->getStorage()->getLocalFile($file->getInternalPath());
|
||||
$path = $file->getStorage()->getLocalFile($file->getInternalPath())
|
||||
?: throw new \Exception('[BUG][LivePhoto] Failed to get local file path');
|
||||
$extExif = Exif::getExifWithDuplicates($path);
|
||||
|
||||
foreach ($extExif as $key => $value) {
|
||||
|
|
|
@ -6,6 +6,7 @@ namespace OCA\Memories\Db;
|
|||
|
||||
use OCA\Memories\Util;
|
||||
use OCP\DB\QueryBuilder\IQueryBuilder;
|
||||
use OCP\DB\QueryBuilder\IQueryFunction;
|
||||
use OCP\ITags;
|
||||
|
||||
trait TimelineQueryFilters
|
||||
|
@ -55,7 +56,7 @@ trait TimelineQueryFilters
|
|||
}
|
||||
}
|
||||
|
||||
private function getFavoriteVCategoryFun(IQueryBuilder &$query)
|
||||
private function getFavoriteVCategoryFun(IQueryBuilder &$query): IQueryFunction
|
||||
{
|
||||
return $query->createFunction(
|
||||
$query->getConnection()->getQueryBuilder()->select('id')->from('vcategory', 'vc')->where(
|
||||
|
|
|
@ -80,20 +80,30 @@ trait TimelineQuerySingleItem
|
|||
|
||||
// Get address from places
|
||||
if (Util::placesGISType() > 0) {
|
||||
// Get names of places for this file
|
||||
$qb = $this->connection->getQueryBuilder();
|
||||
$qb->select('e.name', 'e.other_names')
|
||||
$places = $qb->select('e.name', 'e.other_names')
|
||||
->from('memories_places', 'mp')
|
||||
->innerJoin('mp', 'memories_planet', 'e', $qb->expr()->eq('mp.osm_id', 'e.osm_id'))
|
||||
->where($qb->expr()->eq('mp.fileid', $qb->createNamedParameter($id, \PDO::PARAM_INT)))
|
||||
->andWhere($qb->expr()->gt('e.admin_level', $qb->expr()->literal(0, \PDO::PARAM_INT)))
|
||||
->orderBy('e.admin_level', 'DESC')
|
||||
->executeQuery()->fetchAll()
|
||||
;
|
||||
|
||||
$places = $qb->executeQuery()->fetchAll();
|
||||
$lang = Util::getUserLang();
|
||||
if (\count($places) > 0) {
|
||||
$places = array_map(static fn ($p) => PlacesBackend::choosePlaceLang($p, $lang)['name'], $places);
|
||||
$info['address'] = implode(', ', $places);
|
||||
if (\count($places)) {
|
||||
// Get user language
|
||||
$lang = Util::getUserLang();
|
||||
|
||||
// Get translated address
|
||||
$info['address'] = implode(', ', array_map(
|
||||
static fn ($p): string => PlacesBackend::translateName(
|
||||
$lang,
|
||||
$p['name'],
|
||||
$p['other_names'],
|
||||
),
|
||||
$places,
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -65,7 +65,7 @@ trait TimelineWriteOrphans
|
|||
}
|
||||
|
||||
// Mark all files as not orphaned.
|
||||
$fileIds = array_map(static fn ($row) => $row['fileid'], $orphans);
|
||||
$fileIds = array_map(static fn ($row): int => (int) $row['fileid'], $orphans);
|
||||
$this->orphanAll(false, $fileIds, true);
|
||||
|
||||
$this->connection->commit();
|
||||
|
|
|
@ -57,6 +57,8 @@ class PostWriteListener implements IEventListener
|
|||
// Check if a directory at a higher level contains a .nomedia file
|
||||
try {
|
||||
$parent = $node;
|
||||
|
||||
/** @psalm-suppress RedundantConditionGivenDocblockType */
|
||||
while ($parent = $parent->getParent()) {
|
||||
if ($parent->nodeExists('.nomedia') || $parent->nodeExists('.nomemories')) {
|
||||
return;
|
||||
|
|
|
@ -27,7 +27,7 @@ class Places
|
|||
/**
|
||||
* Make SQL query to detect GIS type.
|
||||
*
|
||||
* @psalm-return 0|1|2
|
||||
* @psalm-return 0|1|2|3
|
||||
*/
|
||||
public function detectGisType(): int
|
||||
{
|
||||
|
|
|
@ -44,7 +44,7 @@ trait UtilController
|
|||
parent::__construct();
|
||||
}
|
||||
|
||||
public function callback(Http\IOutput $output)
|
||||
public function callback(Http\IOutput $output): void
|
||||
{
|
||||
try {
|
||||
($this->closure)($output);
|
||||
|
|
Loading…
Reference in New Issue