From 9e3e37a209fafe7c7834d00954d3c650c399912b Mon Sep 17 00:00:00 2001 From: Shish Date: Sat, 30 Jun 2018 14:28:52 +0100 Subject: [PATCH] accelerate counts as well as the actual results --- core/imageboard.pack.php | 78 ++++++++++++++++++++++------------------ 1 file changed, 43 insertions(+), 35 deletions(-) diff --git a/core/imageboard.pack.php b/core/imageboard.pack.php index f2a515fa..f73e750c 100644 --- a/core/imageboard.pack.php +++ b/core/imageboard.pack.php @@ -159,52 +159,38 @@ class Image { return $images; } - public static function validate_accel(array $tags): bool { + /* + * Accelerator stuff + */ + public static function get_acceleratable(array $tags) { + $ret = array( + "yays" => array(), + "nays" => array(), + ); $yays = 0; $nays = 0; foreach($tags as $tag) { if(!preg_match("/^-?[a-zA-Z0-9_-]+$/", $tag)) { return false; } - if($tag[0] == "-") $nays++; - else $yays++; + if($tag[0] == "-") {$nays++; $ret["nays"][] = substr($tag, 1);} + else {$yays++; $ret["yays"][] = $tag;} } - return ($yays > 1 || $nays > 0); + if($yays > 1 || $nays > 0) { + return $ret; + } + return false; } public static function get_accelerated_result(array $tags, int $offset, int $limit) { global $database; - if(!Image::validate_accel($tags)) { - return null; - } + $req = Image::get_acceleratable($tags); + if(!$req) {return null;} + $req["offset"] = $offset; + $req["limit"] = $limit; - $yays = array(); - $nays = array(); - foreach($tags as $tag) { - if($tag[0] == "-") { - $nays[] = substr($tag, 1); - } - else { - $yays[] = $tag; - } - } - $req = array( - "yays" => $yays, - "nays" => $nays, - "offset" => $offset, - "limit" => $limit, - ); - - $fp = fsockopen("127.0.0.1", 21212); - if (!$fp) { - return null; - } - fwrite($fp, json_encode($req)); - $data = fgets($fp, 1024); - fclose($fp); - - $response = json_decode($data); + $response = Image::query_accelerator($req); $list = implode(",", $response); if($list) { $result = $database->execute("SELECT * FROM images WHERE id IN ($list) ORDER BY images.id DESC"); @@ -215,6 +201,25 @@ class Image { return $result; } + public static function get_accelerated_count(array $tags) { + $req = Image::get_acceleratable($tags); + if(!$req) {return null;} + $req["count"] = true; + + return Image::query_accelerator($req); + } + + public static function query_accelerator($req) { + $fp = fsockopen("127.0.0.1", 21212); + if (!$fp) { + return null; + } + fwrite($fp, json_encode($req)); + $data = fgets($fp, 1024); + fclose($fp); + return json_decode($data); + } + /* * Image-related utility functions */ @@ -242,8 +247,11 @@ class Image { array("tag"=>$tags[0])); } else { - $querylet = Image::build_search_querylet($tags); - $total = $database->get_one("SELECT COUNT(*) AS cnt FROM ($querylet->sql) AS tbl", $querylet->variables); + $total = Image::get_accelerated_count($tags); + if(is_null($total)) { + $querylet = Image::build_search_querylet($tags); + $total = $database->get_one("SELECT COUNT(*) AS cnt FROM ($querylet->sql) AS tbl", $querylet->variables); + } } if(is_null($total)) return 0; return $total;