فهرست منبع

Refresh only feeds in the current view (#9060)

* Refresh only feeds in the current view

Closes #8025. Passes the current feed or category selection to the refresh endpoint and limits the batch accordingly. 

* Fix case of Dynamic OPML, and keep feed order

---------

Co-authored-by: Gerard Alvear <gerard.alvear@logiqd.me>
Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
Gerard Alvear Porras 1 هفته پیش
والد
کامیت
46f5e13019
2فایلهای تغییر یافته به همراه19 افزوده شده و 1 حذف شده
  1. 16 0
      app/Controllers/javascriptController.php
  2. 3 1
      p/scripts/main.js

+ 16 - 0
app/Controllers/javascriptController.php

@@ -39,6 +39,22 @@ class FreshRSS_javascript_Controller extends FreshRSS_ActionController {
 
 		$feedDAO = FreshRSS_Factory::createFeedDao();
 		$this->view->feeds = $feedDAO->listFeedsOrderUpdate(FreshRSS_Context::userConf()->ttl_default);
+
+		// When the refresh button is used from a feed or category view, limit the
+		// batch to the feeds visible in that view.
+		$get = Minz_Request::paramString('get');
+		if (preg_match('/^c_(\d+)$/', $get, $matches)) {
+			$category = $this->view->categories[(int)$matches[1]] ?? null;
+			if ($category !== null) {
+				$this->view->categories = [$category->id() => $category];
+				// Filter feeds to keep only those from the selected category, preserving the order
+				$this->view->feeds = array_filter($this->view->feeds, static fn(FreshRSS_Feed $feed) => $feed->category() === $category->id());
+			}
+		} elseif (preg_match('/^f_(\d+)$/', $get, $matches)) {
+			$feed = $feedDAO->searchById((int)$matches[1]);
+			$this->view->categories = [];
+			$this->view->feeds = $feed === null ? [] : [$feed->id() => $feed];
+		}
 	}
 
 	public function nbUnreadsPerFeedAction(): void {

+ 3 - 1
p/scripts/main.js

@@ -1919,7 +1919,9 @@ function init_actualize() {
 		context.ajax_loading = true;
 
 		const req = new XMLHttpRequest();
-		req.open('POST', './?c=javascript&a=actualize', true);
+		const currentGet = new URLSearchParams(window.location.search).get('get');
+		const scope = currentGet ? '&get=' + encodeURIComponent(currentGet) : '';
+		req.open('POST', './?c=javascript&a=actualize' + scope, true);
 		req.responseType = 'json';
 		req.onload = function (e) {
 			if (this.status != 200) {