From 8964106c741d7f0bbde26130a142135782569d5a Mon Sep 17 00:00:00 2001
From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com>
Date: Sun, 5 Oct 2025 12:40:13 +0530
Subject: [PATCH 1/7] feat: add plugin filtering by author and keywords
Enhanced plugin filtering in the plugins page and extensions sidebar to support filtering by verified publisher, author name, and keywords. Refactored filtering logic to support multi-page results and improved UI feedback for filter actions.
---
src/lang/ar-ye.json | 4 +-
src/lang/be-by.json | 4 +-
src/lang/bn-bd.json | 4 +-
src/lang/cs-cz.json | 4 +-
src/lang/de-de.json | 4 +-
src/lang/en-us.json | 4 +-
src/lang/es-sv.json | 4 +-
src/lang/fr-fr.json | 4 +-
src/lang/he-il.json | 4 +-
src/lang/hi-in.json | 4 +-
src/lang/hu-hu.json | 4 +-
src/lang/id-id.json | 4 +-
src/lang/ir-fa.json | 4 +-
src/lang/it-it.json | 4 +-
src/lang/ja-jp.json | 4 +-
src/lang/ko-kr.json | 4 +-
src/lang/ml-in.json | 4 +-
src/lang/mm-unicode.json | 4 +-
src/lang/mm-zawgyi.json | 4 +-
src/lang/pl-pl.json | 4 +-
src/lang/pt-br.json | 4 +-
src/lang/pu-in.json | 4 +-
src/lang/ru-ru.json | 4 +-
src/lang/tl-ph.json | 4 +-
src/lang/tr-tr.json | 4 +-
src/lang/uk-ua.json | 4 +-
src/lang/uz-uz.json | 4 +-
src/lang/vi-vn.json | 4 +-
src/lang/zh-cn.json | 4 +-
src/lang/zh-hant.json | 4 +-
src/lang/zh-tw.json | 4 +-
src/pages/plugins/plugins.js | 358 ++++++++++++++++++++++------
src/sidebarApps/extensions/index.js | 266 +++++++++++++++++----
33 files changed, 602 insertions(+), 146 deletions(-)
diff --git a/src/lang/ar-ye.json b/src/lang/ar-ye.json
index 645957fed..e388517a4 100644
--- a/src/lang/ar-ye.json
+++ b/src/lang/ar-ye.json
@@ -428,5 +428,7 @@
"contributors": "المساهمون",
"quicktools:hyphen": "إدراج شرطة",
"check for app updates": "Check for app updates",
- "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?"
+ "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
+ "keywords": "Keywords",
+ "author": "Author"
}
diff --git a/src/lang/be-by.json b/src/lang/be-by.json
index dafe38400..f92b410a7 100644
--- a/src/lang/be-by.json
+++ b/src/lang/be-by.json
@@ -429,5 +429,7 @@
"contributors": "Contributors",
"quicktools:hyphen": "Insert hyphen symbol",
"check for app updates": "Check for app updates",
- "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?"
+ "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
+ "keywords": "Keywords",
+ "author": "Author"
}
diff --git a/src/lang/bn-bd.json b/src/lang/bn-bd.json
index 3dfdb3f2f..85d4e0d48 100644
--- a/src/lang/bn-bd.json
+++ b/src/lang/bn-bd.json
@@ -428,5 +428,7 @@
"contributors": "অবদানকারী",
"quicktools:hyphen": "হাইফেন যুক্ত করুন",
"check for app updates": "Check for app updates",
- "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?"
+ "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
+ "keywords": "Keywords",
+ "author": "Author"
}
diff --git a/src/lang/cs-cz.json b/src/lang/cs-cz.json
index 07e4de6ed..3304c84eb 100644
--- a/src/lang/cs-cz.json
+++ b/src/lang/cs-cz.json
@@ -428,5 +428,7 @@
"contributors": "Contributors",
"quicktools:hyphen": "Insert hyphen symbol",
"check for app updates": "Check for app updates",
- "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?"
+ "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
+ "keywords": "Keywords",
+ "author": "Author"
}
diff --git a/src/lang/de-de.json b/src/lang/de-de.json
index 7559505cd..e3cf83348 100644
--- a/src/lang/de-de.json
+++ b/src/lang/de-de.json
@@ -428,5 +428,7 @@
"contributors": "Mitwirkende",
"quicktools:hyphen": "Bindestrich-Symbol einfügen",
"check for app updates": "Check for app updates",
- "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?"
+ "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
+ "keywords": "Keywords",
+ "author": "Author"
}
diff --git a/src/lang/en-us.json b/src/lang/en-us.json
index b2aec6550..48e26c5ff 100644
--- a/src/lang/en-us.json
+++ b/src/lang/en-us.json
@@ -428,5 +428,7 @@
"contributors": "Contributors",
"quicktools:hyphen": "Insert hyphen symbol",
"check for app updates": "Check for app updates",
- "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?"
+ "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
+ "keywords": "Keywords",
+ "author": "Author"
}
diff --git a/src/lang/es-sv.json b/src/lang/es-sv.json
index f6032ceaa..bcca096b5 100644
--- a/src/lang/es-sv.json
+++ b/src/lang/es-sv.json
@@ -428,5 +428,7 @@
"contributors": "Contributors",
"quicktools:hyphen": "Insert hyphen symbol",
"check for app updates": "Check for app updates",
- "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?"
+ "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
+ "keywords": "Keywords",
+ "author": "Author"
}
diff --git a/src/lang/fr-fr.json b/src/lang/fr-fr.json
index dce7d6ba3..80a2b847b 100644
--- a/src/lang/fr-fr.json
+++ b/src/lang/fr-fr.json
@@ -428,5 +428,7 @@
"contributors": "Contributors",
"quicktools:hyphen": "Insert hyphen symbol",
"check for app updates": "Check for app updates",
- "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?"
+ "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
+ "keywords": "Keywords",
+ "author": "Author"
}
diff --git a/src/lang/he-il.json b/src/lang/he-il.json
index e0bb45c98..cd6f87701 100644
--- a/src/lang/he-il.json
+++ b/src/lang/he-il.json
@@ -429,5 +429,7 @@
"contributors": "Contributors",
"quicktools:hyphen": "Insert hyphen symbol",
"check for app updates": "Check for app updates",
- "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?"
+ "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
+ "keywords": "Keywords",
+ "author": "Author"
}
diff --git a/src/lang/hi-in.json b/src/lang/hi-in.json
index c47af4d43..4dfd89897 100644
--- a/src/lang/hi-in.json
+++ b/src/lang/hi-in.json
@@ -429,5 +429,7 @@
"contributors": "सहयोगी",
"quicktools:hyphen": "हाइफ़न प्रतीक डालें",
"check for app updates": "ऐप अपडेट की जांच करें",
- "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?"
+ "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
+ "keywords": "Keywords",
+ "author": "Author"
}
diff --git a/src/lang/hu-hu.json b/src/lang/hu-hu.json
index f8e8abc8a..a98726baa 100644
--- a/src/lang/hu-hu.json
+++ b/src/lang/hu-hu.json
@@ -428,5 +428,7 @@
"contributors": "Közreműködők",
"quicktools:hyphen": "Kötőjel beszúrása",
"check for app updates": "Check for app updates",
- "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?"
+ "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
+ "keywords": "Keywords",
+ "author": "Author"
}
diff --git a/src/lang/id-id.json b/src/lang/id-id.json
index 54e22d239..2e059170d 100644
--- a/src/lang/id-id.json
+++ b/src/lang/id-id.json
@@ -429,5 +429,7 @@
"contributors": "Kontributor",
"quicktools:hyphen": "Masukkan simbol tanda hubung",
"check for app updates": "Check for app updates",
- "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?"
+ "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
+ "keywords": "Keywords",
+ "author": "Author"
}
diff --git a/src/lang/ir-fa.json b/src/lang/ir-fa.json
index 7f1a4266a..2c91422d4 100644
--- a/src/lang/ir-fa.json
+++ b/src/lang/ir-fa.json
@@ -429,5 +429,7 @@
"contributors": "Contributors",
"quicktools:hyphen": "Insert hyphen symbol",
"check for app updates": "Check for app updates",
- "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?"
+ "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
+ "keywords": "Keywords",
+ "author": "Author"
}
diff --git a/src/lang/it-it.json b/src/lang/it-it.json
index 9cb10b9a6..d3bdc500e 100644
--- a/src/lang/it-it.json
+++ b/src/lang/it-it.json
@@ -428,5 +428,7 @@
"contributors": "Contributors",
"quicktools:hyphen": "Insert hyphen symbol",
"check for app updates": "Check for app updates",
- "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?"
+ "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
+ "keywords": "Keywords",
+ "author": "Author"
}
diff --git a/src/lang/ja-jp.json b/src/lang/ja-jp.json
index cccc8df05..2b006b74f 100644
--- a/src/lang/ja-jp.json
+++ b/src/lang/ja-jp.json
@@ -428,5 +428,7 @@
"contributors": "Contributors",
"quicktools:hyphen": "Insert hyphen symbol",
"check for app updates": "Check for app updates",
- "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?"
+ "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
+ "keywords": "Keywords",
+ "author": "Author"
}
diff --git a/src/lang/ko-kr.json b/src/lang/ko-kr.json
index be5761d93..3587c4123 100644
--- a/src/lang/ko-kr.json
+++ b/src/lang/ko-kr.json
@@ -428,5 +428,7 @@
"contributors": "Contributors",
"quicktools:hyphen": "Insert hyphen symbol",
"check for app updates": "Check for app updates",
- "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?"
+ "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
+ "keywords": "Keywords",
+ "author": "Author"
}
diff --git a/src/lang/ml-in.json b/src/lang/ml-in.json
index 79ddf4922..8839d3b1b 100644
--- a/src/lang/ml-in.json
+++ b/src/lang/ml-in.json
@@ -428,5 +428,7 @@
"contributors": "Contributors",
"quicktools:hyphen": "Insert hyphen symbol",
"check for app updates": "Check for app updates",
- "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?"
+ "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
+ "keywords": "Keywords",
+ "author": "Author"
}
diff --git a/src/lang/mm-unicode.json b/src/lang/mm-unicode.json
index 67209d3ab..924e13b35 100644
--- a/src/lang/mm-unicode.json
+++ b/src/lang/mm-unicode.json
@@ -428,5 +428,7 @@
"contributors": "Contributors",
"quicktools:hyphen": "Insert hyphen symbol",
"check for app updates": "Check for app updates",
- "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?"
+ "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
+ "keywords": "Keywords",
+ "author": "Author"
}
diff --git a/src/lang/mm-zawgyi.json b/src/lang/mm-zawgyi.json
index 6794d84dc..1141b30ca 100644
--- a/src/lang/mm-zawgyi.json
+++ b/src/lang/mm-zawgyi.json
@@ -428,5 +428,7 @@
"contributors": "Contributors",
"quicktools:hyphen": "Insert hyphen symbol",
"check for app updates": "Check for app updates",
- "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?"
+ "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
+ "keywords": "Keywords",
+ "author": "Author"
}
diff --git a/src/lang/pl-pl.json b/src/lang/pl-pl.json
index 59af10377..acd2b9949 100644
--- a/src/lang/pl-pl.json
+++ b/src/lang/pl-pl.json
@@ -428,5 +428,7 @@
"contributors": "Contributors",
"quicktools:hyphen": "Insert hyphen symbol",
"check for app updates": "Check for app updates",
- "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?"
+ "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
+ "keywords": "Keywords",
+ "author": "Author"
}
diff --git a/src/lang/pt-br.json b/src/lang/pt-br.json
index a96d723e2..ac158fd29 100644
--- a/src/lang/pt-br.json
+++ b/src/lang/pt-br.json
@@ -428,5 +428,7 @@
"contributors": "Contribuidores",
"quicktools:hyphen": "Inserir símbolo de hífen",
"check for app updates": "Check for app updates",
- "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?"
+ "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
+ "keywords": "Keywords",
+ "author": "Author"
}
diff --git a/src/lang/pu-in.json b/src/lang/pu-in.json
index b8fc37e74..23ab1fc7e 100644
--- a/src/lang/pu-in.json
+++ b/src/lang/pu-in.json
@@ -428,5 +428,7 @@
"contributors": "Contributors",
"quicktools:hyphen": "Insert hyphen symbol",
"check for app updates": "Check for app updates",
- "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?"
+ "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
+ "keywords": "Keywords",
+ "author": "Author"
}
diff --git a/src/lang/ru-ru.json b/src/lang/ru-ru.json
index 25a98ef62..259d98ee7 100644
--- a/src/lang/ru-ru.json
+++ b/src/lang/ru-ru.json
@@ -428,5 +428,7 @@
"contributors": "Авторы",
"quicktools:hyphen": "Вставить символ дефиса",
"check for app updates": "Check for app updates",
- "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?"
+ "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
+ "keywords": "Keywords",
+ "author": "Author"
}
diff --git a/src/lang/tl-ph.json b/src/lang/tl-ph.json
index ef3269a99..034d446c2 100644
--- a/src/lang/tl-ph.json
+++ b/src/lang/tl-ph.json
@@ -428,5 +428,7 @@
"contributors": "Contributors",
"quicktools:hyphen": "Insert hyphen symbol",
"check for app updates": "Check for app updates",
- "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?"
+ "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
+ "keywords": "Keywords",
+ "author": "Author"
}
diff --git a/src/lang/tr-tr.json b/src/lang/tr-tr.json
index c2fa96353..400e9d26a 100644
--- a/src/lang/tr-tr.json
+++ b/src/lang/tr-tr.json
@@ -428,5 +428,7 @@
"contributors": "Contributors",
"quicktools:hyphen": "Insert hyphen symbol",
"check for app updates": "Check for app updates",
- "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?"
+ "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
+ "keywords": "Keywords",
+ "author": "Author"
}
diff --git a/src/lang/uk-ua.json b/src/lang/uk-ua.json
index 42088a861..0ae660670 100644
--- a/src/lang/uk-ua.json
+++ b/src/lang/uk-ua.json
@@ -428,5 +428,7 @@
"contributors": "Contributors",
"quicktools:hyphen": "Insert hyphen symbol",
"check for app updates": "Check for app updates",
- "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?"
+ "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
+ "keywords": "Keywords",
+ "author": "Author"
}
diff --git a/src/lang/uz-uz.json b/src/lang/uz-uz.json
index d0b834fc8..fbf9021b5 100644
--- a/src/lang/uz-uz.json
+++ b/src/lang/uz-uz.json
@@ -428,5 +428,7 @@
"contributors": "Contributors",
"quicktools:hyphen": "Insert hyphen symbol",
"check for app updates": "Check for app updates",
- "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?"
+ "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
+ "keywords": "Keywords",
+ "author": "Author"
}
diff --git a/src/lang/vi-vn.json b/src/lang/vi-vn.json
index 2ff79fe50..5ccc96ef5 100644
--- a/src/lang/vi-vn.json
+++ b/src/lang/vi-vn.json
@@ -429,5 +429,7 @@
"contributors": "Contributors",
"quicktools:hyphen": "Insert hyphen symbol",
"check for app updates": "Check for app updates",
- "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?"
+ "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
+ "keywords": "Keywords",
+ "author": "Author"
}
diff --git a/src/lang/zh-cn.json b/src/lang/zh-cn.json
index 6800c9be3..d5a60eeef 100644
--- a/src/lang/zh-cn.json
+++ b/src/lang/zh-cn.json
@@ -428,5 +428,7 @@
"contributors": "Contributors",
"quicktools:hyphen": "Insert hyphen symbol",
"check for app updates": "Check for app updates",
- "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?"
+ "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
+ "keywords": "Keywords",
+ "author": "Author"
}
diff --git a/src/lang/zh-hant.json b/src/lang/zh-hant.json
index ad2c650d8..64dca1437 100644
--- a/src/lang/zh-hant.json
+++ b/src/lang/zh-hant.json
@@ -428,5 +428,7 @@
"contributors": "Contributors",
"quicktools:hyphen": "Insert hyphen symbol",
"check for app updates": "Check for app updates",
- "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?"
+ "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
+ "keywords": "Keywords",
+ "author": "Author"
}
diff --git a/src/lang/zh-tw.json b/src/lang/zh-tw.json
index 7f9a24980..b4d14713d 100644
--- a/src/lang/zh-tw.json
+++ b/src/lang/zh-tw.json
@@ -428,5 +428,7 @@
"contributors": "Contributors",
"quicktools:hyphen": "Insert hyphen symbol",
"check for app updates": "Check for app updates",
- "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?"
+ "prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
+ "keywords": "Keywords",
+ "author": "Author"
}
diff --git a/src/pages/plugins/plugins.js b/src/pages/plugins/plugins.js
index 735e225f6..dbcb25c8d 100644
--- a/src/pages/plugins/plugins.js
+++ b/src/pages/plugins/plugins.js
@@ -66,48 +66,108 @@ export default function PluginsInclude(updates) {
},
});
+ const verifiedLabel = strings["verified publisher"];
+ const authorLabel = strings.author || strings.name;
+ const keywordsLabel = strings.keywords;
+
+ const filterOptions = {
+ "orderBy:top_rated": { type: "orderBy", value: "top_rated", baseLabel: strings.top_rated },
+ "orderBy:newest": { type: "orderBy", value: "newest", baseLabel: strings.newly_added },
+ "orderBy:downloads": { type: "orderBy", value: "downloads", baseLabel: strings.most_downloaded },
+ "attribute:verified": { type: "verified", value: true, baseLabel: verifiedLabel },
+ "attribute:author": { type: "author", baseLabel: authorLabel },
+ "attribute:keywords": { type: "keywords", baseLabel: keywordsLabel },
+ };
+
+ async function applyFilter(filterState) {
+ if (!filterState) return;
+
+ const normalizedFilter = {
+ ...filterState,
+ displayLabel: filterState.displayLabel || filterState.baseLabel,
+ nextPage: 1,
+ buffer: [],
+ hasMoreSource: true,
+ };
+
+ currentFilter = normalizedFilter;
+ currentPage = 1;
+ hasMore = true;
+ isLoading = false;
+ plugins.all = [];
+
+ if (currSection !== "all") {
+ render("all");
+ } else {
+ $list.all.replaceChildren();
+ }
+
+ const filterMessage = (
+
+ Filtered by {normalizedFilter.displayLabel}
+
+
+ );
+
+ $list.all.append(filterMessage);
+ $list.all.setAttribute("empty-msg", strings["loading..."]);
+ await getFilteredPlugins(currentFilter, true);
+ }
+
+ function clearFilter() {
+ currentFilter = null;
+ currentPage = 1;
+ hasMore = true;
+ isLoading = false;
+ plugins.all = [];
+ $list.all.replaceChildren();
+ $list.all.setAttribute("empty-msg", strings["loading..."]);
+ getAllPlugins();
+ }
+
Contextmenu({
toggler: $filter,
top: "8px",
right: "16px",
items: [
- [strings.top_rated, "top_rated"],
- [strings.newly_added, "newest"],
- [strings.most_downloaded, "downloads"],
+ [strings.top_rated, "orderBy:top_rated"],
+ [strings.newly_added, "orderBy:newest"],
+ [strings.most_downloaded, "orderBy:downloads"],
+ [verifiedLabel, "attribute:verified"],
+ [authorLabel, "attribute:author"],
+ [keywordsLabel, "attribute:keywords"],
],
- onselect(item) {
- const filterNames = {
- top_rated: strings.top_rated,
- newest: strings.newly_added,
- downloads: strings.most_downloaded,
+ async onselect(action) {
+ const option = filterOptions[action];
+ if (!option) return;
+
+ const filterState = {
+ type: option.type,
+ value: option.value,
+ baseLabel: option.baseLabel,
+ displayLabel: option.baseLabel,
};
- const filterName = filterNames[item];
- currentFilter = item;
- currentPage = 1;
- hasMore = true;
- isLoading = false;
- plugins.all = []; // Reset the all plugins array
- render("all");
- $list.all.replaceChildren();
- $list.all.append(
-
- Filtered by {filterName}
- {
- currentFilter = null;
- currentPage = 1;
- hasMore = true;
- isLoading = false;
- plugins.all = []; // Reset the all plugins array
- $list.all.replaceChildren();
- getAllPlugins();
- }}
- >
-
,
- );
- getFilteredPlugins(item);
+
+ if (option.type === "author") {
+ const authorName = (await prompt("Enter author name", "", "text"))?.trim();
+ if (!authorName) return;
+ filterState.value = authorName.toLowerCase();
+ filterState.originalValue = authorName;
+ filterState.displayLabel = `${option.baseLabel}: ${authorName}`;
+ } else if (option.type === "keywords") {
+ const rawKeywords = (await prompt("Enter keywords", "", "text"))?.trim();
+ if (!rawKeywords) return;
+ const keywordList = rawKeywords
+ .split(",")
+ .map((item) => item.trim())
+ .filter(Boolean);
+ if (!keywordList.length) return;
+ filterState.value = keywordList.map((item) => item.toLowerCase());
+ filterState.originalValue = keywordList.join(", ");
+ filterState.displayLabel = `${option.baseLabel}: ${filterState.originalValue}`;
+ }
+
+ await applyFilter(filterState);
},
});
@@ -250,7 +310,9 @@ export default function PluginsInclude(updates) {
isLoading = false;
plugins.all = []; // Reset the all plugins array
$list.all.replaceChildren();
- getAllPlugins();
+ if (!currentFilter) {
+ getAllPlugins();
+ }
}
$page.get(".options .active").classList.remove("active");
$page.get(`#${section}_plugins`).classList.add("active");
@@ -258,6 +320,9 @@ export default function PluginsInclude(updates) {
function renderAll() {
render("all");
+ if (currentFilter) {
+ applyFilter(currentFilter);
+ }
}
function renderInstalled() {
@@ -285,32 +350,25 @@ export default function PluginsInclude(updates) {
}
}
- async function getFilteredPlugins(filterName) {
+ async function getFilteredPlugins(filterState, isInitial = false) {
+ if (!filterState) return;
if (isLoading || !hasMore) return;
-
+
try {
isLoading = true;
$list.all.setAttribute("empty-msg", strings["loading..."]);
-
- let response;
- if (filterName === "top_rated") {
- response = await fetch(`${constants.API_BASE}/plugins?explore=random&page=${currentPage}&limit=${LIMIT}`);
- } else {
- response = await fetch(
- `${constants.API_BASE}/plugin?orderBy=${filterName}&page=${currentPage}&limit=${LIMIT}`,
- );
- }
- const fetchedPlugins = await response.json();
-
- if (fetchedPlugins.length < LIMIT) {
- hasMore = false;
+
+ const { items, hasMore: hasMoreResults } = await retrieveFilteredPlugins(filterState);
+
+ if (currentFilter !== filterState) {
+ return;
}
-
+
const installed = await fsOperation(PLUGIN_DIR).lsDir();
const disabledMap = settings.value.pluginsDisabled || {};
-
+
installed.forEach(({ url }) => {
- const plugin = fetchedPlugins.find(({ id }) => id === Url.basename(url));
+ const plugin = items.find(({ id }) => id === Url.basename(url));
if (plugin) {
plugin.installed = true;
plugin.enabled = disabledMap[plugin.id] !== true;
@@ -318,28 +376,180 @@ export default function PluginsInclude(updates) {
plugin.localPlugin = getLocalRes(plugin.id, "plugin.json");
}
});
-
- // Add plugins to the all plugins array
- plugins.all.push(...fetchedPlugins);
-
+
+ if (isInitial) {
+ $list.all.querySelectorAll(".filter-empty").forEach((el) => el.remove());
+ }
+
+ plugins.all.push(...items);
+
const fragment = document.createDocumentFragment();
- fetchedPlugins.forEach((plugin) => {
+ items.forEach((plugin) => {
fragment.append( );
});
- $list.all.append(fragment);
-
- currentPage++;
- $list.all.setAttribute("empty-msg", strings["no plugins found"]);
+
+ if (fragment.childNodes.length) {
+ $list.all.append(fragment);
+ } else if (isInitial) {
+ $list.all.append(
+ {strings["no plugins found"] || "No plugins found"}
,
+ );
+ }
+
+ hasMore = hasMoreResults;
+ if (!hasMore) {
+ $list.all.setAttribute("empty-msg", strings["no plugins found"]);
+ }
} catch (error) {
$list.all.setAttribute("empty-msg", strings["error"]);
- window.log("error", "Failed to filter plugins:");
- window.log("error", error);
+ console.error("Failed to filter plugins:", error);
+ hasMore = false;
} finally {
isLoading = false;
}
}
+ async function retrieveFilteredPlugins(filterState) {
+ if (!filterState) return { items: [], hasMore: false };
+
+ if (filterState.type === "orderBy") {
+ const page = filterState.nextPage || 1;
+ try {
+ let response;
+ if (filterState.value === "top_rated") {
+ response = await fetch(
+ `${constants.API_BASE}/plugins?explore=random&page=${page}&limit=${LIMIT}`,
+ );
+ } else {
+ response = await fetch(
+ `${constants.API_BASE}/plugin?orderBy=${filterState.value}&page=${page}&limit=${LIMIT}`,
+ );
+ }
+ const items = await response.json();
+ if (!Array.isArray(items)) {
+ return { items: [], hasMore: false };
+ }
+ filterState.nextPage = page + 1;
+ const hasMoreResults = items.length === LIMIT;
+ return { items, hasMore: hasMoreResults };
+ } catch (error) {
+ console.error("Failed to fetch ordered plugins:", error);
+ return { items: [], hasMore: false };
+ }
+ }
+
+ if (!Array.isArray(filterState.buffer)) {
+ filterState.buffer = [];
+ }
+ if (filterState.hasMoreSource === undefined) {
+ filterState.hasMoreSource = true;
+ }
+ if (!filterState.nextPage) {
+ filterState.nextPage = 1;
+ }
+
+ const items = [];
+
+ while (items.length < LIMIT) {
+ if (filterState.buffer.length) {
+ items.push(filterState.buffer.shift());
+ continue;
+ }
+
+ if (filterState.hasMoreSource === false) break;
+
+ try {
+ const page = filterState.nextPage;
+ const response = await fetch(
+ `${constants.API_BASE}/plugins?page=${page}&limit=${LIMIT}`,
+ );
+ const data = await response.json();
+ filterState.nextPage = page + 1;
+
+ if (!Array.isArray(data) || !data.length) {
+ filterState.hasMoreSource = false;
+ break;
+ }
+
+ if (data.length < LIMIT) {
+ filterState.hasMoreSource = false;
+ }
+
+ const matched = data.filter((plugin) => matchesFilter(plugin, filterState));
+ filterState.buffer.push(...matched);
+ } catch (error) {
+ console.error("Failed to fetch filtered plugins:", error);
+ filterState.hasMoreSource = false;
+ break;
+ }
+ }
+
+ while (items.length < LIMIT && filterState.buffer.length) {
+ items.push(filterState.buffer.shift());
+ }
+
+ const hasMoreResults =
+ (filterState.hasMoreSource !== false && filterState.nextPage) ||
+ filterState.buffer.length > 0;
+
+ return { items, hasMore: Boolean(hasMoreResults) };
+ }
+
+ function matchesFilter(plugin, filterState) {
+ if (!plugin) return false;
+
+ switch (filterState.type) {
+ case "verified":
+ return Boolean(plugin.author_verified);
+ case "author": {
+ const authorName = normalizePluginAuthor(plugin);
+ if (!authorName) return false;
+ return authorName.toLowerCase().includes(filterState.value);
+ }
+ case "keywords": {
+ const pluginKeywords = normalizePluginKeywords(plugin)
+ .map((keyword) => keyword.toLowerCase())
+ .filter(Boolean);
+ if (!pluginKeywords.length) return false;
+ return filterState.value.some((keyword) =>
+ pluginKeywords.some((pluginKeyword) => pluginKeyword.includes(keyword)),
+ );
+ }
+ default:
+ return true;
+ }
+ }
+
+ function normalizePluginAuthor(plugin) {
+ const { author } = plugin || {};
+ if (!author) return "";
+ if (typeof author === "string") return author;
+ if (typeof author === "object") {
+ return author.name || author.username || author.github || "";
+ }
+ return "";
+ }
+
+ function normalizePluginKeywords(plugin) {
+ const { keywords } = plugin || {};
+ if (!keywords) return [];
+ if (Array.isArray(keywords)) return keywords;
+ if (typeof keywords === "string") {
+ try {
+ const parsed = JSON.parse(keywords);
+ if (Array.isArray(parsed)) return parsed;
+ } catch (error) {
+ return keywords
+ .split(",")
+ .map((item) => item.trim())
+ .filter(Boolean);
+ }
+ }
+ return [];
+ }
+
async function getAllPlugins() {
+ if (currentFilter) return;
if (isLoading || !hasMore) return;
try {
@@ -356,7 +566,7 @@ export default function PluginsInclude(updates) {
const installed = await fsOperation(PLUGIN_DIR).lsDir();
const disabledMap = settings.value.pluginsDisabled || {};
-
+
installed.forEach(({ url }) => {
const plugin = newPlugins.find(({ id }) => id === Url.basename(url));
if (plugin) {
@@ -369,7 +579,7 @@ export default function PluginsInclude(updates) {
// Add plugins to the all plugins array
plugins.all.push(...newPlugins);
-
+
const fragment = document.createDocumentFragment();
newPlugins.forEach((plugin) => {
fragment.append( );
@@ -413,19 +623,19 @@ export default function PluginsInclude(updates) {
$list.owned.setAttribute("empty-msg", strings["loading..."]);
const purchases = await helpers.promisify(iap.getPurchases);
const disabledMap = settings.value.pluginsDisabled || {};
-
+
purchases.forEach(async ({ productIds }) => {
const [sku] = productIds;
const url = Url.join(constants.API_BASE, "plugin/owned", sku);
const plugin = await fsOperation(url).readFile("json");
const isInstalled = plugins.installed.find(({ id }) => id === plugin.id);
plugin.installed = !!isInstalled;
-
+
if (plugin.installed) {
plugin.enabled = disabledMap[plugin.id] !== true;
plugin.onToggleEnabled = onToggleEnabled;
}
-
+
plugins.owned.push(plugin);
$list.owned.append( );
});
@@ -525,12 +735,12 @@ export default function PluginsInclude(updates) {
if (installedPlugin) {
installedPlugin.enabled = !enabled;
}
-
+
const allPlugin = plugins.all.find(p => p.id === id);
if (allPlugin) {
allPlugin.enabled = !enabled;
}
-
+
const ownedPlugin = plugins.owned.find(p => p.id === id);
if (ownedPlugin) {
ownedPlugin.enabled = !enabled;
@@ -542,13 +752,13 @@ export default function PluginsInclude(updates) {
const $newItem = ;
$installedItem.replaceWith($newItem);
}
-
+
const $allItem = $list.all.get(`[data-id="${id}"]`);
if ($allItem && allPlugin) {
const $newItem = ;
$allItem.replaceWith($newItem);
}
-
+
const $ownedItem = $list.owned.get(`[data-id="${id}"]`);
if ($ownedItem && ownedPlugin) {
const $newItem = ;
diff --git a/src/sidebarApps/extensions/index.js b/src/sidebarApps/extensions/index.js
index 9ba78b8cd..2d284f8d2 100644
--- a/src/sidebarApps/extensions/index.js
+++ b/src/sidebarApps/extensions/index.js
@@ -31,7 +31,6 @@ let currentPage = 1;
let hasMore = true;
let isLoading = false;
let currentFilter = null;
-let filterCurrentPage = 1;
let filterHasMore = true;
let isFilterLoading = false;
@@ -163,28 +162,35 @@ async function loadMorePlugins() {
}
}
-async function loadFilteredPlugins(filterName, isInitial = false) {
- if (isFilterLoading || !filterHasMore) return;
+async function loadFilteredPlugins(filterState, isInitial = false) {
+ if (isFilterLoading || !filterHasMore || !filterState) return;
try {
isFilterLoading = true;
- const plugins = await getFilteredPlugins(filterName, filterCurrentPage);
+ const { items, hasMore } = await getFilteredPlugins(filterState);
- if (plugins.length < LIMIT) {
- filterHasMore = false;
+ if (currentFilter !== filterState) {
+ return;
}
installedPlugins = await listInstalledPlugins();
- const pluginElements = plugins.map(ListItem);
-
- if (isInitial) {
- $searchResult.append(...pluginElements);
- } else {
+ const pluginElements = items.map(ListItem);
+ if (pluginElements.length) {
$searchResult.append(...pluginElements);
+ } else if (isInitial) {
+ $searchResult.append(
+
+ {strings["no plugins found"] || strings.empty || "No plugins found"}
+ ,
+ );
+ }
+
+ filterHasMore = hasMore;
+ if (!filterHasMore) {
+ $searchResult.onscroll = null;
}
- filterCurrentPage++;
updateHeight($searchResult);
} catch (error) {
window.log("error", "Error loading filtered plugins:");
@@ -199,7 +205,6 @@ async function searchPlugin() {
searchTimeout = setTimeout(async () => {
// Clear filter when searching
currentFilter = null;
- filterCurrentPage = 1;
filterHasMore = true;
isFilterLoading = false;
$searchResult.onscroll = null;
@@ -235,28 +240,88 @@ async function searchPlugin() {
}
async function filterPlugins() {
- const filterOptions = {
- [strings.top_rated]: "top_rated",
- [strings.newly_added]: "newest",
- [strings.most_downloaded]: "downloads",
+ const verifiedLabel = strings["verified publisher"];
+ const authorLabel = strings.author || strings.name;
+ const keywordsLabel = strings.keywords;
+
+ const filterItems = [
+ { value: "orderBy:top_rated", text: strings.top_rated },
+ { value: "orderBy:newest", text: strings.newly_added },
+ { value: "orderBy:downloads", text: strings.most_downloaded },
+ { value: "attribute:verified", text: verifiedLabel },
+ { value: "attribute:author", text: authorLabel },
+ { value: "attribute:keywords", text: keywordsLabel },
+ ];
+
+ const filterConfig = {
+ "orderBy:top_rated": {
+ type: "orderBy",
+ value: "top_rated",
+ baseLabel: strings.top_rated,
+ },
+ "orderBy:newest": {
+ type: "orderBy",
+ value: "newest",
+ baseLabel: strings.newly_added,
+ },
+ "orderBy:downloads": {
+ type: "orderBy",
+ value: "downloads",
+ baseLabel: strings.most_downloaded,
+ },
+ "attribute:verified": {
+ type: "verified",
+ baseLabel: verifiedLabel,
+ value: true,
+ },
+ "attribute:author": { type: "author", baseLabel: authorLabel },
+ "attribute:keywords": { type: "keywords", baseLabel: keywordsLabel },
};
- const filterName = await select("Filter", Object.keys(filterOptions));
- if (!filterName) return;
+ const selection = await select("Filter", filterItems);
+ if (!selection) return;
- $searchResult.content = "";
- const filterParam = filterOptions[filterName];
- currentFilter = filterParam;
- filterCurrentPage = 1;
+ const option = filterConfig[selection];
+ if (!option) return;
+
+ const filterState = {
+ ...option,
+ nextPage: 1,
+ buffer: [],
+ hasMoreSource: true,
+ displayLabel: option.baseLabel,
+ };
+
+ if (option.type === "author") {
+ const authorName = (await prompt("Enter author name", "", "text"))?.trim();
+ if (!authorName) return;
+ filterState.value = authorName.toLowerCase();
+ filterState.originalValue = authorName;
+ filterState.displayLabel = `${option.baseLabel}: ${authorName}`;
+ } else if (option.type === "keywords") {
+ const rawKeywords = (await prompt("Enter keywords", "", "text"))?.trim();
+ if (!rawKeywords) return;
+ const keywordList = rawKeywords
+ .split(",")
+ .map((item) => item.trim())
+ .filter(Boolean);
+ if (!keywordList.length) return;
+ filterState.value = keywordList.map((item) => item.toLowerCase());
+ filterState.originalValue = keywordList.join(", ");
+ filterState.displayLabel = `${option.baseLabel}: ${filterState.originalValue}`;
+ }
+
+ currentFilter = filterState;
filterHasMore = true;
isFilterLoading = false;
+ $searchResult.content = "";
try {
$searchResult.classList.add("loading");
const filterMessage = (
- Filtered by {filterName}
+ Filtered by {filterState.displayLabel}
+ doesPluginMatchFilter(plugin, filterState),
);
+ filterState.buffer.push(...matched);
+ } catch (error) {
+ window.log("error", error);
+ filterState.hasMoreSource = false;
+ break;
+ }
+ }
+
+ while (items.length < LIMIT && filterState.buffer.length) {
+ items.push(filterState.buffer.shift());
+ }
+
+ const hasMore =
+ (filterState.hasMoreSource !== false && filterState.nextPage) ||
+ filterState.buffer.length > 0;
+
+ return { items, hasMore: Boolean(hasMore) };
+}
+
+function doesPluginMatchFilter(plugin, filterState) {
+ if (!plugin) return false;
+
+ switch (filterState.type) {
+ case "verified":
+ return Boolean(plugin.author_verified);
+ case "author": {
+ const authorName = getPluginAuthorName(plugin);
+ if (!authorName) return false;
+ return authorName.toLowerCase().includes(filterState.value);
+ }
+ case "keywords": {
+ const pluginKeywords = getPluginKeywords(plugin)
+ .map((keyword) => keyword.toLowerCase())
+ .filter(Boolean);
+ if (!pluginKeywords.length) return false;
+ return filterState.value.some((keyword) =>
+ pluginKeywords.some((pluginKeyword) => pluginKeyword.includes(keyword)),
+ );
+ }
+ default:
+ return true;
+ }
+}
+
+function getPluginAuthorName(plugin) {
+ const { author } = plugin || {};
+ if (!author) return "";
+ if (typeof author === "string") return author;
+ if (typeof author === "object") {
+ return author.name || author.username || author.github || "";
+ }
+ return "";
+}
+
+function getPluginKeywords(plugin) {
+ const { keywords } = plugin || {};
+ if (!keywords) return [];
+ if (Array.isArray(keywords)) return keywords;
+ if (typeof keywords === "string") {
+ try {
+ const parsed = JSON.parse(keywords);
+ if (Array.isArray(parsed)) return parsed;
+ } catch (error) {
+ return keywords
+ .split(",")
+ .map((item) => item.trim())
+ .filter(Boolean);
}
- return await response.json();
- } catch (error) {
- window.log("error", error);
- return [];
}
+ return [];
}
function startLoading($list) {
@@ -596,7 +782,6 @@ function ListItem({ icon, name, id, version, downloads, installed, source }) {
$searchResult.content = "";
// Reset filter state when clearing search results
currentFilter = null;
- filterCurrentPage = 1;
filterHasMore = true;
isFilterLoading = false;
$searchResult.onscroll = null;
@@ -690,7 +875,6 @@ async function uninstall(id) {
$searchResult.content = "";
// Reset filter state when clearing search results
currentFilter = null;
- filterCurrentPage = 1;
filterHasMore = true;
isFilterLoading = false;
$searchResult.onscroll = null;
From e1085c95e80aadb9ec1fa465c2ba9d8b29e6add8 Mon Sep 17 00:00:00 2001
From: Emmanuel Lobo <76094069+UnschooledGamer@users.noreply.github.com>
Date: Mon, 6 Oct 2025 18:01:37 +0530
Subject: [PATCH 2/7] =?UTF-8?q?chore:=20=E2=9C=A8=20format?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/lang/hu-hu.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/lang/hu-hu.json b/src/lang/hu-hu.json
index ea9aea714..ca0ededf9 100644
--- a/src/lang/hu-hu.json
+++ b/src/lang/hu-hu.json
@@ -429,6 +429,6 @@
"quicktools:hyphen": "Kötőjel beszúrása",
"check for app updates": "Alkalmazásfrissítések ellenőrzése",
"prompt update check consent message": "Internetkapcsolat esetén az Acode ellenőrizheti az új alkalmazásfrissítéseket. Engedélyezi a frissítések ellenőrzését?"
- "keywords": "Keywords",
+ "keywords": "Keywords",
"author": "Author"
}
From 621b0daabca3e90950443cf9b6d775d9cdb12297 Mon Sep 17 00:00:00 2001
From: Emmanuel Lobo <76094069+UnschooledGamer@users.noreply.github.com>
Date: Mon, 6 Oct 2025 18:03:35 +0530
Subject: [PATCH 3/7] fix: missing `,` in hu-hu.json
---
src/lang/hu-hu.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/lang/hu-hu.json b/src/lang/hu-hu.json
index ca0ededf9..02bfacce7 100644
--- a/src/lang/hu-hu.json
+++ b/src/lang/hu-hu.json
@@ -428,7 +428,7 @@
"contributors": "Közreműködők",
"quicktools:hyphen": "Kötőjel beszúrása",
"check for app updates": "Alkalmazásfrissítések ellenőrzése",
- "prompt update check consent message": "Internetkapcsolat esetén az Acode ellenőrizheti az új alkalmazásfrissítéseket. Engedélyezi a frissítések ellenőrzését?"
+ "prompt update check consent message": "Internetkapcsolat esetén az Acode ellenőrizheti az új alkalmazásfrissítéseket. Engedélyezi a frissítések ellenőrzését?",
"keywords": "Keywords",
"author": "Author"
}
From dd8aec7e71948974efa419c44cedbda8102867c1 Mon Sep 17 00:00:00 2001
From: Emmanuel Lobo <76094069+UnschooledGamer@users.noreply.github.com>
Date: Mon, 6 Oct 2025 18:09:31 +0530
Subject: [PATCH 4/7] =?UTF-8?q?chore:=20=E2=9C=A8=20format=20(again)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/lang/hu-hu.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/lang/hu-hu.json b/src/lang/hu-hu.json
index 02bfacce7..01bd01f02 100644
--- a/src/lang/hu-hu.json
+++ b/src/lang/hu-hu.json
@@ -429,6 +429,6 @@
"quicktools:hyphen": "Kötőjel beszúrása",
"check for app updates": "Alkalmazásfrissítések ellenőrzése",
"prompt update check consent message": "Internetkapcsolat esetén az Acode ellenőrizheti az új alkalmazásfrissítéseket. Engedélyezi a frissítések ellenőrzését?",
- "keywords": "Keywords",
+ "keywords": "Keywords",
"author": "Author"
}
From c1f204b7ae68780ec4a1aea2b960392e0da8a3c7 Mon Sep 17 00:00:00 2001
From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com>
Date: Tue, 7 Oct 2025 04:49:49 +0530
Subject: [PATCH 5/7] Apply suggestions from code review
Co-authored-by: Emmanuel Lobo <76094069+UnschooledGamer@users.noreply.github.com>
---
src/sidebarApps/extensions/index.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/sidebarApps/extensions/index.js b/src/sidebarApps/extensions/index.js
index 2d284f8d2..338286427 100644
--- a/src/sidebarApps/extensions/index.js
+++ b/src/sidebarApps/extensions/index.js
@@ -469,7 +469,7 @@ async function getFilteredPlugins(filterState) {
const hasMore = items.length === LIMIT;
return { items, hasMore };
} catch (error) {
- console.error(error);
+ console.error(`Failed to get Filtered Plugins: `, error);
return { items: [], hasMore: false };
}
}
From b813eecfd4f4fe4bc1ed2001a8f74279f8996961 Mon Sep 17 00:00:00 2001
From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com>
Date: Tue, 7 Oct 2025 04:50:55 +0530
Subject: [PATCH 6/7] Update src/sidebarApps/extensions/index.js
Co-authored-by: Emmanuel Lobo <76094069+UnschooledGamer@users.noreply.github.com>
---
src/sidebarApps/extensions/index.js | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/sidebarApps/extensions/index.js b/src/sidebarApps/extensions/index.js
index 338286427..8dd37789f 100644
--- a/src/sidebarApps/extensions/index.js
+++ b/src/sidebarApps/extensions/index.js
@@ -516,7 +516,8 @@ async function getFilteredPlugins(filterState) {
);
filterState.buffer.push(...matched);
} catch (error) {
- window.log("error", error);
+ window.log("error", "Failed to fetch filtered plugins:");
+ window.log("error", error);
filterState.hasMoreSource = false;
break;
}
From d0d1bd749006b0875c593be905702a56ebc05e13 Mon Sep 17 00:00:00 2001
From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com>
Date: Tue, 7 Oct 2025 17:28:22 +0530
Subject: [PATCH 7/7] Add 'filtered by' string to all language files
---
package-lock.json | 7 ++++++-
package.json | 4 +++-
src/lang/ar-ye.json | 3 ++-
src/lang/be-by.json | 3 ++-
src/lang/bn-bd.json | 3 ++-
src/lang/cs-cz.json | 3 ++-
src/lang/de-de.json | 3 ++-
src/lang/en-us.json | 3 ++-
src/lang/es-sv.json | 3 ++-
src/lang/fr-fr.json | 3 ++-
src/lang/he-il.json | 3 ++-
src/lang/hi-in.json | 3 ++-
src/lang/hu-hu.json | 3 ++-
src/lang/id-id.json | 3 ++-
src/lang/ir-fa.json | 3 ++-
src/lang/it-it.json | 3 ++-
src/lang/ja-jp.json | 3 ++-
src/lang/ko-kr.json | 3 ++-
src/lang/ml-in.json | 3 ++-
src/lang/mm-unicode.json | 3 ++-
src/lang/mm-zawgyi.json | 3 ++-
src/lang/pl-pl.json | 3 ++-
src/lang/pt-br.json | 3 ++-
src/lang/pu-in.json | 3 ++-
src/lang/ru-ru.json | 3 ++-
src/lang/tl-ph.json | 3 ++-
src/lang/tr-tr.json | 3 ++-
src/lang/uk-ua.json | 3 ++-
src/lang/uz-uz.json | 3 ++-
src/lang/vi-vn.json | 3 ++-
src/lang/zh-cn.json | 3 ++-
src/lang/zh-hant.json | 3 ++-
src/lang/zh-tw.json | 3 ++-
src/pages/plugins/plugins.js | 2 +-
src/sidebarApps/extensions/index.js | 4 ++--
35 files changed, 74 insertions(+), 36 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index e4198e049..f2d00d40d 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -54,6 +54,7 @@
"@types/url-parse": "^1.4.11",
"autoprefixer": "^10.4.21",
"babel-loader": "^10.0.0",
+ "com.foxdebug.acode.rk.exec.proot": "file:src/plugins/proot",
"com.foxdebug.acode.rk.exec.terminal": "file:src/plugins/terminal",
"cordova-android": "^14.0.1",
"cordova-clipboard": "^1.3.0",
@@ -4334,6 +4335,10 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/com.foxdebug.acode.rk.exec.proot": {
+ "resolved": "src/plugins/proot",
+ "link": true
+ },
"node_modules/com.foxdebug.acode.rk.exec.terminal": {
"resolved": "src/plugins/terminal",
"link": true
@@ -11202,7 +11207,7 @@
"src/plugins/proot": {
"name": "com.foxdebug.acode.rk.exec.proot",
"version": "1.0.0",
- "extraneous": true,
+ "dev": true,
"license": "MIT"
},
"src/plugins/sdcard": {
diff --git a/package.json b/package.json
index d6ef79942..2ab7735fb 100644
--- a/package.json
+++ b/package.json
@@ -37,7 +37,8 @@
"cordova-plugin-browser": {},
"cordova-plugin-sftp": {},
"cordova-plugin-system": {},
- "com.foxdebug.acode.rk.exec.terminal": {}
+ "com.foxdebug.acode.rk.exec.terminal": {},
+ "com.foxdebug.acode.rk.exec.proot": {}
},
"platforms": [
"android"
@@ -62,6 +63,7 @@
"@types/url-parse": "^1.4.11",
"autoprefixer": "^10.4.21",
"babel-loader": "^10.0.0",
+ "com.foxdebug.acode.rk.exec.proot": "file:src/plugins/proot",
"com.foxdebug.acode.rk.exec.terminal": "file:src/plugins/terminal",
"cordova-android": "^14.0.1",
"cordova-clipboard": "^1.3.0",
diff --git a/src/lang/ar-ye.json b/src/lang/ar-ye.json
index e388517a4..cb8bc1414 100644
--- a/src/lang/ar-ye.json
+++ b/src/lang/ar-ye.json
@@ -430,5 +430,6 @@
"check for app updates": "Check for app updates",
"prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
"keywords": "Keywords",
- "author": "Author"
+ "author": "Author",
+ "filtered by": "Filtered by"
}
diff --git a/src/lang/be-by.json b/src/lang/be-by.json
index f92b410a7..acb0ad114 100644
--- a/src/lang/be-by.json
+++ b/src/lang/be-by.json
@@ -431,5 +431,6 @@
"check for app updates": "Check for app updates",
"prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
"keywords": "Keywords",
- "author": "Author"
+ "author": "Author",
+ "filtered by": "Filtered by"
}
diff --git a/src/lang/bn-bd.json b/src/lang/bn-bd.json
index 85d4e0d48..fbcf89681 100644
--- a/src/lang/bn-bd.json
+++ b/src/lang/bn-bd.json
@@ -430,5 +430,6 @@
"check for app updates": "Check for app updates",
"prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
"keywords": "Keywords",
- "author": "Author"
+ "author": "Author",
+ "filtered by": "Filtered by"
}
diff --git a/src/lang/cs-cz.json b/src/lang/cs-cz.json
index 3304c84eb..8ca1529c3 100644
--- a/src/lang/cs-cz.json
+++ b/src/lang/cs-cz.json
@@ -430,5 +430,6 @@
"check for app updates": "Check for app updates",
"prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
"keywords": "Keywords",
- "author": "Author"
+ "author": "Author",
+ "filtered by": "Filtered by"
}
diff --git a/src/lang/de-de.json b/src/lang/de-de.json
index e3cf83348..97774f2a0 100644
--- a/src/lang/de-de.json
+++ b/src/lang/de-de.json
@@ -430,5 +430,6 @@
"check for app updates": "Check for app updates",
"prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
"keywords": "Keywords",
- "author": "Author"
+ "author": "Author",
+ "filtered by": "Filtered by"
}
diff --git a/src/lang/en-us.json b/src/lang/en-us.json
index 48e26c5ff..73506f184 100644
--- a/src/lang/en-us.json
+++ b/src/lang/en-us.json
@@ -430,5 +430,6 @@
"check for app updates": "Check for app updates",
"prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
"keywords": "Keywords",
- "author": "Author"
+ "author": "Author",
+ "filtered by": "Filtered by"
}
diff --git a/src/lang/es-sv.json b/src/lang/es-sv.json
index bcca096b5..7ec5373e7 100644
--- a/src/lang/es-sv.json
+++ b/src/lang/es-sv.json
@@ -430,5 +430,6 @@
"check for app updates": "Check for app updates",
"prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
"keywords": "Keywords",
- "author": "Author"
+ "author": "Author",
+ "filtered by": "Filtered by"
}
diff --git a/src/lang/fr-fr.json b/src/lang/fr-fr.json
index 80a2b847b..1d8bfa695 100644
--- a/src/lang/fr-fr.json
+++ b/src/lang/fr-fr.json
@@ -430,5 +430,6 @@
"check for app updates": "Check for app updates",
"prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
"keywords": "Keywords",
- "author": "Author"
+ "author": "Author",
+ "filtered by": "Filtered by"
}
diff --git a/src/lang/he-il.json b/src/lang/he-il.json
index cd6f87701..47eeced10 100644
--- a/src/lang/he-il.json
+++ b/src/lang/he-il.json
@@ -431,5 +431,6 @@
"check for app updates": "Check for app updates",
"prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
"keywords": "Keywords",
- "author": "Author"
+ "author": "Author",
+ "filtered by": "Filtered by"
}
diff --git a/src/lang/hi-in.json b/src/lang/hi-in.json
index 4dfd89897..c82a22a4b 100644
--- a/src/lang/hi-in.json
+++ b/src/lang/hi-in.json
@@ -431,5 +431,6 @@
"check for app updates": "ऐप अपडेट की जांच करें",
"prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
"keywords": "Keywords",
- "author": "Author"
+ "author": "Author",
+ "filtered by": "Filtered by"
}
diff --git a/src/lang/hu-hu.json b/src/lang/hu-hu.json
index 01bd01f02..3902c01db 100644
--- a/src/lang/hu-hu.json
+++ b/src/lang/hu-hu.json
@@ -430,5 +430,6 @@
"check for app updates": "Alkalmazásfrissítések ellenőrzése",
"prompt update check consent message": "Internetkapcsolat esetén az Acode ellenőrizheti az új alkalmazásfrissítéseket. Engedélyezi a frissítések ellenőrzését?",
"keywords": "Keywords",
- "author": "Author"
+ "author": "Author",
+ "filtered by": "Filtered by"
}
diff --git a/src/lang/id-id.json b/src/lang/id-id.json
index 2e059170d..e23b654d4 100644
--- a/src/lang/id-id.json
+++ b/src/lang/id-id.json
@@ -431,5 +431,6 @@
"check for app updates": "Check for app updates",
"prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
"keywords": "Keywords",
- "author": "Author"
+ "author": "Author",
+ "filtered by": "Filtered by"
}
diff --git a/src/lang/ir-fa.json b/src/lang/ir-fa.json
index 2c91422d4..42eb53298 100644
--- a/src/lang/ir-fa.json
+++ b/src/lang/ir-fa.json
@@ -431,5 +431,6 @@
"check for app updates": "Check for app updates",
"prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
"keywords": "Keywords",
- "author": "Author"
+ "author": "Author",
+ "filtered by": "Filtered by"
}
diff --git a/src/lang/it-it.json b/src/lang/it-it.json
index d3bdc500e..ae0dc623a 100644
--- a/src/lang/it-it.json
+++ b/src/lang/it-it.json
@@ -430,5 +430,6 @@
"check for app updates": "Check for app updates",
"prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
"keywords": "Keywords",
- "author": "Author"
+ "author": "Author",
+ "filtered by": "Filtered by"
}
diff --git a/src/lang/ja-jp.json b/src/lang/ja-jp.json
index 2b006b74f..0cd7eec85 100644
--- a/src/lang/ja-jp.json
+++ b/src/lang/ja-jp.json
@@ -430,5 +430,6 @@
"check for app updates": "Check for app updates",
"prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
"keywords": "Keywords",
- "author": "Author"
+ "author": "Author",
+ "filtered by": "Filtered by"
}
diff --git a/src/lang/ko-kr.json b/src/lang/ko-kr.json
index 3587c4123..0a90b986f 100644
--- a/src/lang/ko-kr.json
+++ b/src/lang/ko-kr.json
@@ -430,5 +430,6 @@
"check for app updates": "Check for app updates",
"prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
"keywords": "Keywords",
- "author": "Author"
+ "author": "Author",
+ "filtered by": "Filtered by"
}
diff --git a/src/lang/ml-in.json b/src/lang/ml-in.json
index 8839d3b1b..2194c23a3 100644
--- a/src/lang/ml-in.json
+++ b/src/lang/ml-in.json
@@ -430,5 +430,6 @@
"check for app updates": "Check for app updates",
"prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
"keywords": "Keywords",
- "author": "Author"
+ "author": "Author",
+ "filtered by": "Filtered by"
}
diff --git a/src/lang/mm-unicode.json b/src/lang/mm-unicode.json
index 924e13b35..0fd284657 100644
--- a/src/lang/mm-unicode.json
+++ b/src/lang/mm-unicode.json
@@ -430,5 +430,6 @@
"check for app updates": "Check for app updates",
"prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
"keywords": "Keywords",
- "author": "Author"
+ "author": "Author",
+ "filtered by": "Filtered by"
}
diff --git a/src/lang/mm-zawgyi.json b/src/lang/mm-zawgyi.json
index 1141b30ca..592873ccc 100644
--- a/src/lang/mm-zawgyi.json
+++ b/src/lang/mm-zawgyi.json
@@ -430,5 +430,6 @@
"check for app updates": "Check for app updates",
"prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
"keywords": "Keywords",
- "author": "Author"
+ "author": "Author",
+ "filtered by": "Filtered by"
}
diff --git a/src/lang/pl-pl.json b/src/lang/pl-pl.json
index acd2b9949..f28fab450 100644
--- a/src/lang/pl-pl.json
+++ b/src/lang/pl-pl.json
@@ -430,5 +430,6 @@
"check for app updates": "Check for app updates",
"prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
"keywords": "Keywords",
- "author": "Author"
+ "author": "Author",
+ "filtered by": "Filtered by"
}
diff --git a/src/lang/pt-br.json b/src/lang/pt-br.json
index ac158fd29..a6867794c 100644
--- a/src/lang/pt-br.json
+++ b/src/lang/pt-br.json
@@ -430,5 +430,6 @@
"check for app updates": "Check for app updates",
"prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
"keywords": "Keywords",
- "author": "Author"
+ "author": "Author",
+ "filtered by": "Filtered by"
}
diff --git a/src/lang/pu-in.json b/src/lang/pu-in.json
index 23ab1fc7e..93ad13448 100644
--- a/src/lang/pu-in.json
+++ b/src/lang/pu-in.json
@@ -430,5 +430,6 @@
"check for app updates": "Check for app updates",
"prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
"keywords": "Keywords",
- "author": "Author"
+ "author": "Author",
+ "filtered by": "Filtered by"
}
diff --git a/src/lang/ru-ru.json b/src/lang/ru-ru.json
index 259d98ee7..98d088c09 100644
--- a/src/lang/ru-ru.json
+++ b/src/lang/ru-ru.json
@@ -430,5 +430,6 @@
"check for app updates": "Check for app updates",
"prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
"keywords": "Keywords",
- "author": "Author"
+ "author": "Author",
+ "filtered by": "Filtered by"
}
diff --git a/src/lang/tl-ph.json b/src/lang/tl-ph.json
index 034d446c2..874736e9f 100644
--- a/src/lang/tl-ph.json
+++ b/src/lang/tl-ph.json
@@ -430,5 +430,6 @@
"check for app updates": "Check for app updates",
"prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
"keywords": "Keywords",
- "author": "Author"
+ "author": "Author",
+ "filtered by": "Filtered by"
}
diff --git a/src/lang/tr-tr.json b/src/lang/tr-tr.json
index 400e9d26a..c33509167 100644
--- a/src/lang/tr-tr.json
+++ b/src/lang/tr-tr.json
@@ -430,5 +430,6 @@
"check for app updates": "Check for app updates",
"prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
"keywords": "Keywords",
- "author": "Author"
+ "author": "Author",
+ "filtered by": "Filtered by"
}
diff --git a/src/lang/uk-ua.json b/src/lang/uk-ua.json
index 0ae660670..c2784ea9c 100644
--- a/src/lang/uk-ua.json
+++ b/src/lang/uk-ua.json
@@ -430,5 +430,6 @@
"check for app updates": "Check for app updates",
"prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
"keywords": "Keywords",
- "author": "Author"
+ "author": "Author",
+ "filtered by": "Filtered by"
}
diff --git a/src/lang/uz-uz.json b/src/lang/uz-uz.json
index fbf9021b5..7528eec4d 100644
--- a/src/lang/uz-uz.json
+++ b/src/lang/uz-uz.json
@@ -430,5 +430,6 @@
"check for app updates": "Check for app updates",
"prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
"keywords": "Keywords",
- "author": "Author"
+ "author": "Author",
+ "filtered by": "Filtered by"
}
diff --git a/src/lang/vi-vn.json b/src/lang/vi-vn.json
index 5ccc96ef5..85df2bdbb 100644
--- a/src/lang/vi-vn.json
+++ b/src/lang/vi-vn.json
@@ -431,5 +431,6 @@
"check for app updates": "Check for app updates",
"prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
"keywords": "Keywords",
- "author": "Author"
+ "author": "Author",
+ "filtered by": "Filtered by"
}
diff --git a/src/lang/zh-cn.json b/src/lang/zh-cn.json
index d5a60eeef..b72668b1f 100644
--- a/src/lang/zh-cn.json
+++ b/src/lang/zh-cn.json
@@ -430,5 +430,6 @@
"check for app updates": "Check for app updates",
"prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
"keywords": "Keywords",
- "author": "Author"
+ "author": "Author",
+ "filtered by": "Filtered by"
}
diff --git a/src/lang/zh-hant.json b/src/lang/zh-hant.json
index 64dca1437..54202d18b 100644
--- a/src/lang/zh-hant.json
+++ b/src/lang/zh-hant.json
@@ -430,5 +430,6 @@
"check for app updates": "Check for app updates",
"prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
"keywords": "Keywords",
- "author": "Author"
+ "author": "Author",
+ "filtered by": "Filtered by"
}
diff --git a/src/lang/zh-tw.json b/src/lang/zh-tw.json
index b4d14713d..becdaef5b 100644
--- a/src/lang/zh-tw.json
+++ b/src/lang/zh-tw.json
@@ -430,5 +430,6 @@
"check for app updates": "Check for app updates",
"prompt update check consent message": "Acode can check for new app updates when you're online. Enable update checks?",
"keywords": "Keywords",
- "author": "Author"
+ "author": "Author",
+ "filtered by": "Filtered by"
}
diff --git a/src/pages/plugins/plugins.js b/src/pages/plugins/plugins.js
index dbcb25c8d..a0f0bcbe9 100644
--- a/src/pages/plugins/plugins.js
+++ b/src/pages/plugins/plugins.js
@@ -104,7 +104,7 @@ export default function PluginsInclude(updates) {
const filterMessage = (
- Filtered by {normalizedFilter.displayLabel}
+ {strings["filtered by"]} {normalizedFilter.displayLabel}
);
diff --git a/src/sidebarApps/extensions/index.js b/src/sidebarApps/extensions/index.js
index 8dd37789f..3daaf7b06 100644
--- a/src/sidebarApps/extensions/index.js
+++ b/src/sidebarApps/extensions/index.js
@@ -321,7 +321,7 @@ async function filterPlugins() {
const filterMessage = (
- Filtered by {filterState.displayLabel}
+ {strings["filtered by"]} {filterState.displayLabel}