You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

163 lines
4.7 KiB

<?php
/*
* This file is part of video_metadata.
*
* video_metadata is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* video_metadata is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with video_metadata. If not, see <https://www.gnu.org/licenses/>.
*/
class cache_result
{
public $tmdb_id = 0;
public $title = "";
public $poster_path = "";
public $backdrop_path = "";
public $overview = "";
public $release_date = "";
}
class cache_results
{
public $cache_id = 0;
public $search_str = "";
public $result_count = 0;
public $results = [];
}
class local_cache
{
const DB_PATH = 'test.db';
const MISSING_IMAGE = '_no_image_available.png';
public function __construct()
{
$this->db = new SQLite3(local_cache::DB_PATH);
// NOTE: need to enable foreign keys for every connection
// https://sqlite.org/foreignkeys.html#fk_enable
$this->db->exec('pragma foreign_keys = on;');
}
public function __destruct()
{
$this->db->close();
}
public function search_movie_by_name($name)
{
$cache_id = $this->get_cache_id($name);
if ($cache_id) {
$stmt = $this->db->prepare('select * from query_results where cache_id=:c_id');
$stmt->bindValue(':c_id', $cache_id, SQLITE3_INTEGER);
$result = $stmt->execute();
$crs = new cache_results();
$crs->cache_id = $cache_id;
$crs->search_str = $name;
while ($row = $result->fetchArray(SQLITE3_ASSOC)) {
$cr = new cache_result();
$cr->tmdb_id = $row['tmdb_id'];
$cr->title = $row['title'];
$cr->poster_path = $row['poster_path'];
$cr->backdrop_path = $row['backdrop_path'];
$cr->overview = $row['overview'];
$cr->release_date = $row['release_date'];
$crs->results[$crs->result_count] = $cr;
$crs->result_count++;
}
return $crs;
}
return null;
}
public function insert_query_cache($search_str, $tmdb_results)
{
$stmt = $this->db->prepare('insert into query_cache (query) values(:q)');
$stmt->bindValue(':q', $search_str);
$stmt->execute();
$cache_id = $this->get_cache_id($search_str);
$stmt = $this->db->prepare('insert into query_results'
. '(tmdb_id, cache_id, title, poster_path, backdrop_path, overview, release_date)'
. 'values'
. '(:tmdb_id, :cache_id, :title, :poster_path, :backdrop_path, :overview, :release_date)'
);
for ($i = 0; $i < count($tmdb_results->results); $i++) {
$res = &$tmdb_results->results[$i];
if ($res->poster_path == '')
$res->poster_path = local_cache::MISSING_IMAGE;
if ($res->backdrop_path == '')
$res->backdrop_path = local_cache::MISSING_IMAGE;
$stmt->bindValue(':tmdb_id', SQLite3::escapeString($res->id), SQLITE3_INTEGER);
$stmt->bindValue(':cache_id', SQLite3::escapeString($cache_id), SQLITE3_INTEGER);
$stmt->bindValue(':title', SQLite3::escapeString($res->title));
$stmt->bindValue(':poster_path', SQLite3::escapeString(basename($res->poster_path)));
$stmt->bindValue(':backdrop_path', SQLite3::escapeString(basename($res->backdrop_path)));
$stmt->bindValue(':overview', SQLite3::escapeString($res->overview));
$stmt->bindValue(':release_date', SQLite3::escapeString($res->release_date));
$stmt->execute();
}
return $this->search_movie_by_name($search_str);
}
public function list_genres() {}
# NOTE:
# table movie_details: movie_id, title, overview, release_date, poster_path, backdrop_path
# table movie_genre: genre_id, name
# table movie_genre_mapping: genre_id, movie_id
# table custom_tags: tag_id, name
# table custom_tag_mapping: tag_id, movie_id
# table actor_details: actor_id, name, date_of_birth, poster_path
# table actor_movie_mapping: movie_id, actor_id, character_name
public function insert_movie_details() {}
# NOTE:
# table tv_genre: genre_id, name
# table tv_genre_mapping: genre_id, movie_id
# table custom_tags: tag_id, name
# table custom_tag_mapping: tag_id, movie_id
# table actor_details: actor_id, name, date_of_birth, poster_path
# table actor_tv_mapping: tv_id, actor_id, character_name
public function insert_tv_details() {}
public $errors = [];
private function get_cache_id($search_str)
{
$stmt = $this->db->prepare('select * from query_cache where query=:q limit 1');
$stmt->bindValue(':q', $search_str);
$result = $stmt->execute();
$row = $result->fetchArray(SQLITE3_ASSOC);
if ($row)
return $row['cache_id'];
return null;
}
private $db;
}
?>