execute($args); return ($row = $result->fetchRow()) ? $row : false; } /** * @brief write metadata to database * * @param array $meta metadata * @return OC_DB_StatementWrapper */ protected static function save($meta) { $sql = "INSERT INTO *PREFIX*opds_metadata (`id`, `updated`, `date`, `author`, `title`, `language`, `publisher`, `isbn`, `copyright`, `description`, `subjects`) VALUES (?,?,?,?,?,?,?,?,?,?,?)"; $args = array( $meta['id'], $meta['updated'], $meta['date'], $meta['author'], $meta['title'], $meta['language'], $meta['publisher'], $meta['isbn'], $meta['copyright'], $meta['description'], $meta['subjects'] ); $query = \OCP\DB::prepare($sql); return $query->execute($args); } /** * @brief get metadata for fileid * * Long function, to be split later * * @param int $id fileid * @return array of metadata */ public static function get($id) { if (!($meta = self::load($id))) { $meta = self::scan($id); } return $meta; } /** * @brief scan files for metadata * PLAN: use search_lucene to extract metadata? Does not seem to support PDF1.6? * solution: first ask search_lucene, if no data then scan file? * * @param int $id fileid * @return array $meta metadata */ public static function scan($id) { $meta = self::create($id); $path = \OC\Files\Filesystem::getLocalFile(\OC\Files\Filesystem::getPath($id)); switch (strtolower(substr(strrchr($path, "."), 1))) { case 'epub': self::epub($path,$meta); break; case 'pdf': self::pdf($path,$meta); break; } /* if title is not set, assume metadata was invalid or not present * use filename as title */ if (!($meta['title'])) { $info = pathinfo($path); $meta['title'] = basename($path,'.'.$info['extension']); } // self::save($meta); return $meta; } /** * @brief check epub for metadata * * @param string $path path to epub * @param arrayref $meta reference to array of metadata * @return bool $success (true if metadata found) */ public static function epub($path,&$meta) { $epub = new Epub($path); $meta['author'] = json_encode($epub->Authors()); $meta['title'] = $epub->Title(); $meta['date'] = $epub->Date(); $meta['publisher'] = $epub->Publisher(); $meta['copyright'] = $epub->Copyright(); $meta['language'] = $epub->Language(); $meta['description'] = strip_tags($epub->Description()); $meta['isbn'] = $epub->ISBN(); $meta['subjects'] = $epub->Subjects(); return true; } /** * @brief check pdf for metadata * * @param string $path path to pdf * @param arrayref $meta reference to array of metadata * @return bool $success (true if metadata found) */ public static function pdf($path,&$meta) { return false; } }