* af_redditimgur: optionally import score

* add pluginhost->set_array() to set many plugin settings at once
This commit is contained in:
Andrew Dolgov 2021-03-07 15:21:31 +03:00
parent 72c04123d4
commit f4d0e7bb6d
2 changed files with 48 additions and 6 deletions

View File

@ -469,7 +469,7 @@ class PluginHost {
} }
} }
function set(Plugin $sender, string $name, $value, bool $sync = true) { function set(Plugin $sender, string $name, $value) {
$idx = get_class($sender); $idx = get_class($sender);
if (!isset($this->storage[$idx])) if (!isset($this->storage[$idx]))
@ -477,7 +477,19 @@ class PluginHost {
$this->storage[$idx][$name] = $value; $this->storage[$idx][$name] = $value;
if ($sync) $this->save_data(get_class($sender)); $this->save_data(get_class($sender));
}
function set_array(Plugin $sender, array $params) {
$idx = get_class($sender);
if (!isset($this->storage[$idx]))
$this->storage[$idx] = array();
foreach ($params as $name => $value)
$this->storage[$idx][$name] = $value;
$this->save_data(get_class($sender));
} }
function get(Plugin $sender, string $name, $default_value = false) { function get(Plugin $sender, string $name, $default_value = false) {

View File

@ -6,6 +6,7 @@ class Af_RedditImgur extends Plugin {
private $domain_blacklist = [ "github.com" ]; private $domain_blacklist = [ "github.com" ];
private $dump_json_data = false; private $dump_json_data = false;
private $fallback_preview_urls = []; private $fallback_preview_urls = [];
private $default_max_score = 100;
function about() { function about() {
return array(null, return array(null,
@ -35,6 +36,8 @@ class Af_RedditImgur extends Plugin {
$enable_content_dupcheck = $this->host->get($this, "enable_content_dupcheck"); $enable_content_dupcheck = $this->host->get($this, "enable_content_dupcheck");
$reddit_to_teddit = $this->host->get($this, "reddit_to_teddit"); $reddit_to_teddit = $this->host->get($this, "reddit_to_teddit");
$apply_nsfw_tags = $this->host->get_array($this, "apply_nsfw_tags"); $apply_nsfw_tags = $this->host->get_array($this, "apply_nsfw_tags");
$max_score = $this->host->get($this, "max_score", $this->default_max_score);
$import_score = $this->host->get($this, "import_score");
?> ?>
<div dojoType="dijit.layout.AccordionPane" <div dojoType="dijit.layout.AccordionPane"
@ -84,6 +87,15 @@ class Af_RedditImgur extends Plugin {
</label> </label>
</fieldset> </fieldset>
<fieldset class='narrow'>
<label class='checkbox'>
<?= \Controls\checkbox_tag("import_score", $import_score) ?>
<?= __("Import score, limit maximum to:") ?>
<input dojoType="dijit.form.TextBox" name="max_score" size="20"
placeholder="<?= $this->default_max_score ?>" value="<?= $max_score ?>">
</label>
</fieldset>
<hr/> <hr/>
<?= \Controls\submit_tag(__("Save")) ?> <?= \Controls\submit_tag(__("Save")) ?>
</form> </form>
@ -97,11 +109,17 @@ class Af_RedditImgur extends Plugin {
$enable_content_dupcheck = checkbox_to_sql_bool($_POST["enable_content_dupcheck"] ?? ""); $enable_content_dupcheck = checkbox_to_sql_bool($_POST["enable_content_dupcheck"] ?? "");
$reddit_to_teddit = checkbox_to_sql_bool($_POST["reddit_to_teddit"] ?? ""); $reddit_to_teddit = checkbox_to_sql_bool($_POST["reddit_to_teddit"] ?? "");
$apply_nsfw_tags = FeedItem_Common::normalize_categories(explode(",", $_POST["apply_nsfw_tags"] ?? "")); $apply_nsfw_tags = FeedItem_Common::normalize_categories(explode(",", $_POST["apply_nsfw_tags"] ?? ""));
$import_score = checkbox_to_sql_bool($_POST["import_score"] ?? "");
$max_score = (int) $_POST['max_score'];
$this->host->set($this, "enable_readability", $enable_readability, false); $this->host->set_array($this, [
$this->host->set($this, "reddit_to_teddit", $reddit_to_teddit, false); "enable_readability" => $enable_readability,
$this->host->set($this, "enable_content_dupcheck", $enable_content_dupcheck); "reddit_to_teddit" => $reddit_to_teddit,
$this->host->set($this, "apply_nsfw_tags", $apply_nsfw_tags); "enable_content_dupcheck" => $enable_content_dupcheck,
"apply_nsfw_tags" => $apply_nsfw_tags,
"import_score" => $import_score,
"max_score" => $max_score
]);
echo __("Configuration saved"); echo __("Configuration saved");
} }
@ -213,11 +231,19 @@ class Af_RedditImgur extends Plugin {
return $found; return $found;
} }
/* function score_convert(int $value, int $from1, int $from2, int $to1, int $to2) {
return ($value - $from1) / ($from2 - $from1) * ($to2 - $to1) + $to1;
} */
private function inline_stuff(&$article, &$doc, $xpath) { private function inline_stuff(&$article, &$doc, $xpath) {
$max_score = (int) $this->host->get($this, "max_score", $this->default_max_score);
$import_score = (bool) $this->host->get($this, "import_score", $this->default_max_score);
$found = false; $found = false;
$post_is_nsfw = false; $post_is_nsfw = false;
$num_comments = 0; $num_comments = 0;
$score = 0;
$apply_nsfw_tags = FeedItem_Common::normalize_categories($this->host->get_array($this, "apply_nsfw_tags", [])); $apply_nsfw_tags = FeedItem_Common::normalize_categories($this->host->get_array($this, "apply_nsfw_tags", []));
// embed before reddit <table> post layout // embed before reddit <table> post layout
@ -246,6 +272,7 @@ class Af_RedditImgur extends Plugin {
$data = $child["data"]; $data = $child["data"];
$over_18 = $data["over_18"] ?? 0 == 1; $over_18 = $data["over_18"] ?? 0 == 1;
$score += $data['score'] ?? 0;
$num_comments += $data["num_comments"] ?? 0; $num_comments += $data["num_comments"] ?? 0;
if ($over_18) { if ($over_18) {
@ -292,6 +319,9 @@ class Af_RedditImgur extends Plugin {
$article["num_comments"] = $num_comments; $article["num_comments"] = $num_comments;
if ($import_score && $score > 0)
$article["score_modifier"] = ($article["score_modifier"] ?? 0) + ($score > $max_score ? $max_score : $score);
if ($found) { if ($found) {
Debug::log("JSON: found media data, skipping further processing of content", Debug::$LOG_VERBOSE); Debug::log("JSON: found media data, skipping further processing of content", Debug::$LOG_VERBOSE);
$this->remove_post_thumbnail($doc, $xpath); $this->remove_post_thumbnail($doc, $xpath);