From 0f77bf16a00ce1252dd919f320842f5e2f051a2d Mon Sep 17 00:00:00 2001 From: Grace Date: Fri, 23 Jan 2026 23:28:06 +0000 Subject: [PATCH 1/9] reduced nesting and created triggers --- src/user/categories.js | 162 ++++++++++++++++++++++------------------- 1 file changed, 89 insertions(+), 73 deletions(-) diff --git a/src/user/categories.js b/src/user/categories.js index 4248def8bd..c113c09d4e 100644 --- a/src/user/categories.js +++ b/src/user/categories.js @@ -9,84 +9,100 @@ const activitypub = require('../activitypub'); const plugins = require('../plugins'); const utils = require('../utils'); -module.exports = function (User) { - User.setCategoryWatchState = async function (uid, cids, state) { - if (utils.isNumber(uid) && parseInt(uid, 10) <= 0) { - return; - } - - const isStateValid = Object.values(categories.watchStates).includes(parseInt(state, 10)); - if (!isStateValid) { - throw new Error('[[error:invalid-watch-state]]'); - } - - cids = new Set(Array.isArray(cids) ? cids : [cids]); - cids.delete(-1); // cannot watch cid -1 - cids.delete('-1'); - cids = Array.from(cids); - - const exists = await categories.exists(cids); - if (exists.includes(false)) { - throw new Error('[[error:no-category]]'); - } - - const apiMethod = state >= categories.watchStates.tracking ? activitypub.out.follow : activitypub.out.undo.follow; - const follows = cids.filter(cid => !utils.isNumber(cid)).map(cid => apiMethod('uid', uid, cid)); // returns promises - - await Promise.all([ - db.sortedSetsAdd(cids.map(cid => `cid:${cid}:uid:watch:state`), state, uid), - ...follows, - ]); - }; +async function setCategoryWatchState(User, uid, cids, state) { + if (utils.isNumber(uid) && parseInt(uid, 10) <= 0) { + return; + } - User.getCategoryWatchState = async function (uid) { - if (!(parseInt(uid, 10) > 0)) { - return {}; - } + const isStateValid = Object.values(categories.watchStates).includes(parseInt(state, 10)); + if (!isStateValid) { + throw new Error('[[error:invalid-watch-state]]'); + } - const cids = await categories.getAllCidsFromSet('categories:cid'); - const states = await categories.getWatchState(cids, uid); - return _.zipObject(cids, states); - }; + cids = new Set(Array.isArray(cids) ? cids : [cids]); + cids.delete(-1); // cannot watch cid -1 + cids.delete('-1'); + cids = Array.from(cids); - User.getIgnoredCategories = async function (uid) { - if (!(parseInt(uid, 10) > 0)) { - return []; - } - const cids = await User.getCategoriesByStates(uid, [categories.watchStates.ignoring]); - const result = await plugins.hooks.fire('filter:user.getIgnoredCategories', { - uid: uid, - cids: cids, - }); - return result.cids; - }; + const exists = await categories.exists(cids); + if (exists.includes(false)) { + throw new Error('[[error:no-category]]'); + } - User.getWatchedCategories = async function (uid) { - if (!(parseInt(uid, 10) > 0)) { - return []; - } - let cids = await User.getCategoriesByStates(uid, [categories.watchStates.watching]); - const categoryData = await categories.getCategoriesFields(cids, ['disabled']); - cids = cids.filter((cid, index) => categoryData[index] && !categoryData[index].disabled); - const result = await plugins.hooks.fire('filter:user.getWatchedCategories', { - uid: uid, - cids: cids, - }); - return result.cids; - }; + const apiMethod = state >= categories.watchStates.tracking ? activitypub.out.follow : activitypub.out.undo.follow; + const follows = cids.filter(cid => !utils.isNumber(cid)).map(cid => apiMethod('uid', uid, cid)); // returns promises - User.getCategoriesByStates = async function (uid, states) { - const [localCids, remoteCids] = await Promise.all([ - categories.getAllCidsFromSet('categories:cid'), - meta.config.activitypubEnabled ? db.getObjectValues('handle:cid') : [], - ]); - const cids = localCids.concat(remoteCids); - if (!(parseInt(uid, 10) > 0)) { - return cids; - } - const userState = await categories.getWatchState(cids, uid); - return cids.filter((cid, index) => states.includes(userState[index])); - }; + await Promise.all([ + db.sortedSetsAdd(cids.map(cid => `cid:${cid}:uid:watch:state`), state, uid), + ...follows, + ]); +} + +async function getCategoryWatchState(User, uid) { + if (!(parseInt(uid, 10) > 0)) { + return {}; + } + + const cids = await categories.getAllCidsFromSet('categories:cid'); + const states = await categories.getWatchState(cids, uid); + return _.zipObject(cids, states); +}; + +async function getIgnoredCategories(User, uid) { + if (!(parseInt(uid, 10) > 0)) { + return []; + } + const cids = await User.getCategoriesByStates(uid, [categories.watchStates.ignoring]); + const result = await plugins.hooks.fire('filter:user.getIgnoredCategories', { + uid: uid, + cids: cids, + }); + return result.cids; +}; + +async function getWatchedCategories(User, uid) { + if (!(parseInt(uid, 10) > 0)) { + return []; + } + let cids = await User.getCategoriesByStates(uid, [categories.watchStates.watching]); + const categoryData = await categories.getCategoriesFields(cids, ['disabled']); + cids = cids.filter((cid, index) => categoryData[index] && !categoryData[index].disabled); + const result = await plugins.hooks.fire('filter:user.getWatchedCategories', { + uid: uid, + cids: cids, + }); + return result.cids; +}; + +async function getCategoriesByStates(User, uid, states) { + const [localCids, remoteCids] = await Promise.all([ + categories.getAllCidsFromSet('categories:cid'), + meta.config.activitypubEnabled ? db.getObjectValues('handle:cid') : [], + ]); + const cids = localCids.concat(remoteCids); + if (!(parseInt(uid, 10) > 0)) { + return cids; + } + const userState = await categories.getWatchState(cids, uid); + return cids.filter((cid, index) => states.includes(userState[index])); +}; + + +module.exports = function (User) { + User.setCategoryWatchState = (uid, cid, state) => + setCategoryWatchState(User, uid, cid, state); + + User.getCategoryWatchState = (uid) => + getCategoryWatchState(User, uid); + + User.getIgnoredCategories = (uid) => + getIgnoredCategories(User, uid); + + User.getWatchedCategories = (uid) => + getWatchedCategories(User, uid); + + User.getCategoriesByStates = (uid, state) => + getCategoriesByStates(User, uid, state); User.ignoreCategory = async function (uid, cid) { await User.setCategoryWatchState(uid, cid, categories.watchStates.ignoring); From d8d125579de496484f61a16f0a060bbe97245dc4 Mon Sep 17 00:00:00 2001 From: Grace Date: Fri, 23 Jan 2026 23:30:08 +0000 Subject: [PATCH 2/9] fixed too many parameters smell --- src/user/categories.js | 86 +++++++++++++++++++++++++++--------------- 1 file changed, 56 insertions(+), 30 deletions(-) diff --git a/src/user/categories.js b/src/user/categories.js index c113c09d4e..df62d5c63f 100644 --- a/src/user/categories.js +++ b/src/user/categories.js @@ -9,34 +9,34 @@ const activitypub = require('../activitypub'); const plugins = require('../plugins'); const utils = require('../utils'); -async function setCategoryWatchState(User, uid, cids, state) { - if (utils.isNumber(uid) && parseInt(uid, 10) <= 0) { - return; - } - - const isStateValid = Object.values(categories.watchStates).includes(parseInt(state, 10)); - if (!isStateValid) { - throw new Error('[[error:invalid-watch-state]]'); - } - - cids = new Set(Array.isArray(cids) ? cids : [cids]); - cids.delete(-1); // cannot watch cid -1 - cids.delete('-1'); - cids = Array.from(cids); - - const exists = await categories.exists(cids); - if (exists.includes(false)) { - throw new Error('[[error:no-category]]'); - } - - const apiMethod = state >= categories.watchStates.tracking ? activitypub.out.follow : activitypub.out.undo.follow; - const follows = cids.filter(cid => !utils.isNumber(cid)).map(cid => apiMethod('uid', uid, cid)); // returns promises - - await Promise.all([ - db.sortedSetsAdd(cids.map(cid => `cid:${cid}:uid:watch:state`), state, uid), - ...follows, - ]); -} +// async function setCategoryWatchState(User, uid, cids, state) { +// if (utils.isNumber(uid) && parseInt(uid, 10) <= 0) { +// return; +// } + +// const isStateValid = Object.values(categories.watchStates).includes(parseInt(state, 10)); +// if (!isStateValid) { +// throw new Error('[[error:invalid-watch-state]]'); +// } + +// cids = new Set(Array.isArray(cids) ? cids : [cids]); +// cids.delete(-1); // cannot watch cid -1 +// cids.delete('-1'); +// cids = Array.from(cids); + +// const exists = await categories.exists(cids); +// if (exists.includes(false)) { +// throw new Error('[[error:no-category]]'); +// } + +// const apiMethod = state >= categories.watchStates.tracking ? activitypub.out.follow : activitypub.out.undo.follow; +// const follows = cids.filter(cid => !utils.isNumber(cid)).map(cid => apiMethod('uid', uid, cid)); // returns promises + +// await Promise.all([ +// db.sortedSetsAdd(cids.map(cid => `cid:${cid}:uid:watch:state`), state, uid), +// ...follows, +// ]); +// } async function getCategoryWatchState(User, uid) { if (!(parseInt(uid, 10) > 0)) { @@ -89,8 +89,34 @@ async function getCategoriesByStates(User, uid, states) { module.exports = function (User) { - User.setCategoryWatchState = (uid, cid, state) => - setCategoryWatchState(User, uid, cid, state); + User.setCategoryWatchState = async function (uid, cids, state) { + if (utils.isNumber(uid) && parseInt(uid, 10) <= 0) { + return; + } + + const isStateValid = Object.values(categories.watchStates).includes(parseInt(state, 10)); + if (!isStateValid) { + throw new Error('[[error:invalid-watch-state]]'); + } + + cids = new Set(Array.isArray(cids) ? cids : [cids]); + cids.delete(-1); // cannot watch cid -1 + cids.delete('-1'); + cids = Array.from(cids); + + const exists = await categories.exists(cids); + if (exists.includes(false)) { + throw new Error('[[error:no-category]]'); + } + + const apiMethod = state >= categories.watchStates.tracking ? activitypub.out.follow : activitypub.out.undo.follow; + const follows = cids.filter(cid => !utils.isNumber(cid)).map(cid => apiMethod('uid', uid, cid)); // returns promises + + await Promise.all([ + db.sortedSetsAdd(cids.map(cid => `cid:${cid}:uid:watch:state`), state, uid), + ...follows, + ]); + }; User.getCategoryWatchState = (uid) => getCategoryWatchState(User, uid); From 096ed6590d3b93eb57fb65707a862b6f5137edd3 Mon Sep 17 00:00:00 2001 From: Grace Date: Fri, 23 Jan 2026 23:37:41 +0000 Subject: [PATCH 3/9] indentation --- src/user/categories.js | 168 ++++++++++++++++++++--------------------- 1 file changed, 84 insertions(+), 84 deletions(-) diff --git a/src/user/categories.js b/src/user/categories.js index df62d5c63f..0d8d1c6992 100644 --- a/src/user/categories.js +++ b/src/user/categories.js @@ -39,102 +39,102 @@ const utils = require('../utils'); // } async function getCategoryWatchState(User, uid) { - if (!(parseInt(uid, 10) > 0)) { - return {}; - } + if (!(parseInt(uid, 10) > 0)) { + return {}; + } - const cids = await categories.getAllCidsFromSet('categories:cid'); - const states = await categories.getWatchState(cids, uid); - return _.zipObject(cids, states); + const cids = await categories.getAllCidsFromSet('categories:cid'); + const states = await categories.getWatchState(cids, uid); + return _.zipObject(cids, states); }; async function getIgnoredCategories(User, uid) { - if (!(parseInt(uid, 10) > 0)) { - return []; - } - const cids = await User.getCategoriesByStates(uid, [categories.watchStates.ignoring]); - const result = await plugins.hooks.fire('filter:user.getIgnoredCategories', { - uid: uid, - cids: cids, - }); - return result.cids; + if (!(parseInt(uid, 10) > 0)) { + return []; + } + const cids = await User.getCategoriesByStates(uid, [categories.watchStates.ignoring]); + const result = await plugins.hooks.fire('filter:user.getIgnoredCategories', { + uid: uid, + cids: cids, + }); + return result.cids; }; async function getWatchedCategories(User, uid) { - if (!(parseInt(uid, 10) > 0)) { - return []; - } - let cids = await User.getCategoriesByStates(uid, [categories.watchStates.watching]); - const categoryData = await categories.getCategoriesFields(cids, ['disabled']); - cids = cids.filter((cid, index) => categoryData[index] && !categoryData[index].disabled); - const result = await plugins.hooks.fire('filter:user.getWatchedCategories', { - uid: uid, - cids: cids, - }); - return result.cids; + if (!(parseInt(uid, 10) > 0)) { + return []; + } + let cids = await User.getCategoriesByStates(uid, [categories.watchStates.watching]); + const categoryData = await categories.getCategoriesFields(cids, ['disabled']); + cids = cids.filter((cid, index) => categoryData[index] && !categoryData[index].disabled); + const result = await plugins.hooks.fire('filter:user.getWatchedCategories', { + uid: uid, + cids: cids, + }); + return result.cids; }; async function getCategoriesByStates(User, uid, states) { - const [localCids, remoteCids] = await Promise.all([ - categories.getAllCidsFromSet('categories:cid'), - meta.config.activitypubEnabled ? db.getObjectValues('handle:cid') : [], - ]); - const cids = localCids.concat(remoteCids); - if (!(parseInt(uid, 10) > 0)) { - return cids; - } - const userState = await categories.getWatchState(cids, uid); - return cids.filter((cid, index) => states.includes(userState[index])); + const [localCids, remoteCids] = await Promise.all([ + categories.getAllCidsFromSet('categories:cid'), + meta.config.activitypubEnabled ? db.getObjectValues('handle:cid') : [], + ]); + const cids = localCids.concat(remoteCids); + if (!(parseInt(uid, 10) > 0)) { + return cids; + } + const userState = await categories.getWatchState(cids, uid); + return cids.filter((cid, index) => states.includes(userState[index])); }; module.exports = function (User) { - User.setCategoryWatchState = async function (uid, cids, state) { - if (utils.isNumber(uid) && parseInt(uid, 10) <= 0) { - return; - } - - const isStateValid = Object.values(categories.watchStates).includes(parseInt(state, 10)); - if (!isStateValid) { - throw new Error('[[error:invalid-watch-state]]'); - } - - cids = new Set(Array.isArray(cids) ? cids : [cids]); - cids.delete(-1); // cannot watch cid -1 - cids.delete('-1'); - cids = Array.from(cids); - - const exists = await categories.exists(cids); - if (exists.includes(false)) { - throw new Error('[[error:no-category]]'); - } - - const apiMethod = state >= categories.watchStates.tracking ? activitypub.out.follow : activitypub.out.undo.follow; - const follows = cids.filter(cid => !utils.isNumber(cid)).map(cid => apiMethod('uid', uid, cid)); // returns promises - - await Promise.all([ - db.sortedSetsAdd(cids.map(cid => `cid:${cid}:uid:watch:state`), state, uid), - ...follows, - ]); - }; - - User.getCategoryWatchState = (uid) => - getCategoryWatchState(User, uid); - - User.getIgnoredCategories = (uid) => - getIgnoredCategories(User, uid); - - User.getWatchedCategories = (uid) => - getWatchedCategories(User, uid); - - User.getCategoriesByStates = (uid, state) => - getCategoriesByStates(User, uid, state); - - User.ignoreCategory = async function (uid, cid) { - await User.setCategoryWatchState(uid, cid, categories.watchStates.ignoring); - }; - - User.watchCategory = async function (uid, cid) { - await User.setCategoryWatchState(uid, cid, categories.watchStates.watching); - }; + User.setCategoryWatchState = async function (uid, cids, state) { + if (utils.isNumber(uid) && parseInt(uid, 10) <= 0) { + return; + } + + const isStateValid = Object.values(categories.watchStates).includes(parseInt(state, 10)); + if (!isStateValid) { + throw new Error('[[error:invalid-watch-state]]'); + } + + cids = new Set(Array.isArray(cids) ? cids : [cids]); + cids.delete(-1); // cannot watch cid -1 + cids.delete('-1'); + cids = Array.from(cids); + + const exists = await categories.exists(cids); + if (exists.includes(false)) { + throw new Error('[[error:no-category]]'); + } + + const apiMethod = state >= categories.watchStates.tracking ? activitypub.out.follow : activitypub.out.undo.follow; + const follows = cids.filter(cid => !utils.isNumber(cid)).map(cid => apiMethod('uid', uid, cid)); // returns promises + + await Promise.all([ + db.sortedSetsAdd(cids.map(cid => `cid:${cid}:uid:watch:state`), state, uid), + ...follows, + ]); + }; + + User.getCategoryWatchState = (uid) => + getCategoryWatchState(User, uid); + + User.getIgnoredCategories = (uid) => + getIgnoredCategories(User, uid); + + User.getWatchedCategories = (uid) => + getWatchedCategories(User, uid); + + User.getCategoriesByStates = (uid, state) => + getCategoriesByStates(User, uid, state); + + User.ignoreCategory = async function (uid, cid) { + await User.setCategoryWatchState(uid, cid, categories.watchStates.ignoring); + }; + + User.watchCategory = async function (uid, cid) { + await User.setCategoryWatchState(uid, cid, categories.watchStates.watching); + }; }; From 932a568116f7f42e1b0c05aa90590fb97b46b045 Mon Sep 17 00:00:00 2001 From: Grace Date: Fri, 23 Jan 2026 23:41:20 +0000 Subject: [PATCH 4/9] indentation --- src/user/categories.js | 168 ++++++++++++++++++++--------------------- 1 file changed, 84 insertions(+), 84 deletions(-) diff --git a/src/user/categories.js b/src/user/categories.js index 0d8d1c6992..df62d5c63f 100644 --- a/src/user/categories.js +++ b/src/user/categories.js @@ -39,102 +39,102 @@ const utils = require('../utils'); // } async function getCategoryWatchState(User, uid) { - if (!(parseInt(uid, 10) > 0)) { - return {}; - } + if (!(parseInt(uid, 10) > 0)) { + return {}; + } - const cids = await categories.getAllCidsFromSet('categories:cid'); - const states = await categories.getWatchState(cids, uid); - return _.zipObject(cids, states); + const cids = await categories.getAllCidsFromSet('categories:cid'); + const states = await categories.getWatchState(cids, uid); + return _.zipObject(cids, states); }; async function getIgnoredCategories(User, uid) { - if (!(parseInt(uid, 10) > 0)) { - return []; - } - const cids = await User.getCategoriesByStates(uid, [categories.watchStates.ignoring]); - const result = await plugins.hooks.fire('filter:user.getIgnoredCategories', { - uid: uid, - cids: cids, - }); - return result.cids; + if (!(parseInt(uid, 10) > 0)) { + return []; + } + const cids = await User.getCategoriesByStates(uid, [categories.watchStates.ignoring]); + const result = await plugins.hooks.fire('filter:user.getIgnoredCategories', { + uid: uid, + cids: cids, + }); + return result.cids; }; async function getWatchedCategories(User, uid) { - if (!(parseInt(uid, 10) > 0)) { - return []; - } - let cids = await User.getCategoriesByStates(uid, [categories.watchStates.watching]); - const categoryData = await categories.getCategoriesFields(cids, ['disabled']); - cids = cids.filter((cid, index) => categoryData[index] && !categoryData[index].disabled); - const result = await plugins.hooks.fire('filter:user.getWatchedCategories', { - uid: uid, - cids: cids, - }); - return result.cids; + if (!(parseInt(uid, 10) > 0)) { + return []; + } + let cids = await User.getCategoriesByStates(uid, [categories.watchStates.watching]); + const categoryData = await categories.getCategoriesFields(cids, ['disabled']); + cids = cids.filter((cid, index) => categoryData[index] && !categoryData[index].disabled); + const result = await plugins.hooks.fire('filter:user.getWatchedCategories', { + uid: uid, + cids: cids, + }); + return result.cids; }; async function getCategoriesByStates(User, uid, states) { - const [localCids, remoteCids] = await Promise.all([ - categories.getAllCidsFromSet('categories:cid'), - meta.config.activitypubEnabled ? db.getObjectValues('handle:cid') : [], - ]); - const cids = localCids.concat(remoteCids); - if (!(parseInt(uid, 10) > 0)) { - return cids; - } - const userState = await categories.getWatchState(cids, uid); - return cids.filter((cid, index) => states.includes(userState[index])); + const [localCids, remoteCids] = await Promise.all([ + categories.getAllCidsFromSet('categories:cid'), + meta.config.activitypubEnabled ? db.getObjectValues('handle:cid') : [], + ]); + const cids = localCids.concat(remoteCids); + if (!(parseInt(uid, 10) > 0)) { + return cids; + } + const userState = await categories.getWatchState(cids, uid); + return cids.filter((cid, index) => states.includes(userState[index])); }; module.exports = function (User) { - User.setCategoryWatchState = async function (uid, cids, state) { - if (utils.isNumber(uid) && parseInt(uid, 10) <= 0) { - return; - } - - const isStateValid = Object.values(categories.watchStates).includes(parseInt(state, 10)); - if (!isStateValid) { - throw new Error('[[error:invalid-watch-state]]'); - } - - cids = new Set(Array.isArray(cids) ? cids : [cids]); - cids.delete(-1); // cannot watch cid -1 - cids.delete('-1'); - cids = Array.from(cids); - - const exists = await categories.exists(cids); - if (exists.includes(false)) { - throw new Error('[[error:no-category]]'); - } - - const apiMethod = state >= categories.watchStates.tracking ? activitypub.out.follow : activitypub.out.undo.follow; - const follows = cids.filter(cid => !utils.isNumber(cid)).map(cid => apiMethod('uid', uid, cid)); // returns promises - - await Promise.all([ - db.sortedSetsAdd(cids.map(cid => `cid:${cid}:uid:watch:state`), state, uid), - ...follows, - ]); - }; - - User.getCategoryWatchState = (uid) => - getCategoryWatchState(User, uid); - - User.getIgnoredCategories = (uid) => - getIgnoredCategories(User, uid); - - User.getWatchedCategories = (uid) => - getWatchedCategories(User, uid); - - User.getCategoriesByStates = (uid, state) => - getCategoriesByStates(User, uid, state); - - User.ignoreCategory = async function (uid, cid) { - await User.setCategoryWatchState(uid, cid, categories.watchStates.ignoring); - }; - - User.watchCategory = async function (uid, cid) { - await User.setCategoryWatchState(uid, cid, categories.watchStates.watching); - }; + User.setCategoryWatchState = async function (uid, cids, state) { + if (utils.isNumber(uid) && parseInt(uid, 10) <= 0) { + return; + } + + const isStateValid = Object.values(categories.watchStates).includes(parseInt(state, 10)); + if (!isStateValid) { + throw new Error('[[error:invalid-watch-state]]'); + } + + cids = new Set(Array.isArray(cids) ? cids : [cids]); + cids.delete(-1); // cannot watch cid -1 + cids.delete('-1'); + cids = Array.from(cids); + + const exists = await categories.exists(cids); + if (exists.includes(false)) { + throw new Error('[[error:no-category]]'); + } + + const apiMethod = state >= categories.watchStates.tracking ? activitypub.out.follow : activitypub.out.undo.follow; + const follows = cids.filter(cid => !utils.isNumber(cid)).map(cid => apiMethod('uid', uid, cid)); // returns promises + + await Promise.all([ + db.sortedSetsAdd(cids.map(cid => `cid:${cid}:uid:watch:state`), state, uid), + ...follows, + ]); + }; + + User.getCategoryWatchState = (uid) => + getCategoryWatchState(User, uid); + + User.getIgnoredCategories = (uid) => + getIgnoredCategories(User, uid); + + User.getWatchedCategories = (uid) => + getWatchedCategories(User, uid); + + User.getCategoriesByStates = (uid, state) => + getCategoriesByStates(User, uid, state); + + User.ignoreCategory = async function (uid, cid) { + await User.setCategoryWatchState(uid, cid, categories.watchStates.ignoring); + }; + + User.watchCategory = async function (uid, cid) { + await User.setCategoryWatchState(uid, cid, categories.watchStates.watching); + }; }; From 6aa134729bc3c80b63c6e8330d8dc1d24f2a7d60 Mon Sep 17 00:00:00 2001 From: Grace Date: Fri, 23 Jan 2026 23:41:47 +0000 Subject: [PATCH 5/9] indentation --- src/user/categories.js | 168 ++++++++++++++++++++--------------------- 1 file changed, 84 insertions(+), 84 deletions(-) diff --git a/src/user/categories.js b/src/user/categories.js index df62d5c63f..f5b4d1a7b9 100644 --- a/src/user/categories.js +++ b/src/user/categories.js @@ -39,102 +39,102 @@ const utils = require('../utils'); // } async function getCategoryWatchState(User, uid) { - if (!(parseInt(uid, 10) > 0)) { - return {}; - } + if (!(parseInt(uid, 10) > 0)) { + return {}; + } - const cids = await categories.getAllCidsFromSet('categories:cid'); - const states = await categories.getWatchState(cids, uid); - return _.zipObject(cids, states); + const cids = await categories.getAllCidsFromSet('categories:cid'); + const states = await categories.getWatchState(cids, uid); + return _.zipObject(cids, states); }; async function getIgnoredCategories(User, uid) { - if (!(parseInt(uid, 10) > 0)) { - return []; - } - const cids = await User.getCategoriesByStates(uid, [categories.watchStates.ignoring]); - const result = await plugins.hooks.fire('filter:user.getIgnoredCategories', { - uid: uid, - cids: cids, - }); - return result.cids; + if (!(parseInt(uid, 10) > 0)) { + return []; + } + const cids = await User.getCategoriesByStates(uid, [categories.watchStates.ignoring]); + const result = await plugins.hooks.fire('filter:user.getIgnoredCategories', { + uid: uid, + cids: cids, + }); + return result.cids; }; async function getWatchedCategories(User, uid) { - if (!(parseInt(uid, 10) > 0)) { - return []; - } - let cids = await User.getCategoriesByStates(uid, [categories.watchStates.watching]); - const categoryData = await categories.getCategoriesFields(cids, ['disabled']); - cids = cids.filter((cid, index) => categoryData[index] && !categoryData[index].disabled); - const result = await plugins.hooks.fire('filter:user.getWatchedCategories', { - uid: uid, - cids: cids, - }); - return result.cids; + if (!(parseInt(uid, 10) > 0)) { + return []; + } + let cids = await User.getCategoriesByStates(uid, [categories.watchStates.watching]); + const categoryData = await categories.getCategoriesFields(cids, ['disabled']); + cids = cids.filter((cid, index) => categoryData[index] && !categoryData[index].disabled); + const result = await plugins.hooks.fire('filter:user.getWatchedCategories', { + uid: uid, + cids: cids, + }); + return result.cids; }; async function getCategoriesByStates(User, uid, states) { - const [localCids, remoteCids] = await Promise.all([ - categories.getAllCidsFromSet('categories:cid'), - meta.config.activitypubEnabled ? db.getObjectValues('handle:cid') : [], - ]); - const cids = localCids.concat(remoteCids); - if (!(parseInt(uid, 10) > 0)) { - return cids; - } - const userState = await categories.getWatchState(cids, uid); - return cids.filter((cid, index) => states.includes(userState[index])); + const [localCids, remoteCids] = await Promise.all([ + categories.getAllCidsFromSet('categories:cid'), + meta.config.activitypubEnabled ? db.getObjectValues('handle:cid') : [], + ]); + const cids = localCids.concat(remoteCids); + if (!(parseInt(uid, 10) > 0)) { + return cids; + } + const userState = await categories.getWatchState(cids, uid); + return cids.filter((cid, index) => states.includes(userState[index])); }; module.exports = function (User) { - User.setCategoryWatchState = async function (uid, cids, state) { - if (utils.isNumber(uid) && parseInt(uid, 10) <= 0) { - return; - } - - const isStateValid = Object.values(categories.watchStates).includes(parseInt(state, 10)); - if (!isStateValid) { - throw new Error('[[error:invalid-watch-state]]'); - } - - cids = new Set(Array.isArray(cids) ? cids : [cids]); - cids.delete(-1); // cannot watch cid -1 - cids.delete('-1'); - cids = Array.from(cids); - - const exists = await categories.exists(cids); - if (exists.includes(false)) { - throw new Error('[[error:no-category]]'); - } - - const apiMethod = state >= categories.watchStates.tracking ? activitypub.out.follow : activitypub.out.undo.follow; - const follows = cids.filter(cid => !utils.isNumber(cid)).map(cid => apiMethod('uid', uid, cid)); // returns promises - - await Promise.all([ - db.sortedSetsAdd(cids.map(cid => `cid:${cid}:uid:watch:state`), state, uid), - ...follows, - ]); - }; - - User.getCategoryWatchState = (uid) => - getCategoryWatchState(User, uid); - - User.getIgnoredCategories = (uid) => - getIgnoredCategories(User, uid); - - User.getWatchedCategories = (uid) => - getWatchedCategories(User, uid); - - User.getCategoriesByStates = (uid, state) => - getCategoriesByStates(User, uid, state); - - User.ignoreCategory = async function (uid, cid) { - await User.setCategoryWatchState(uid, cid, categories.watchStates.ignoring); - }; - - User.watchCategory = async function (uid, cid) { - await User.setCategoryWatchState(uid, cid, categories.watchStates.watching); - }; + User.setCategoryWatchState = async function (uid, cids, state) { + if (utils.isNumber(uid) && parseInt(uid, 10) <= 0) { + return; + } + + const isStateValid = Object.values(categories.watchStates).includes(parseInt(state, 10)); + if (!isStateValid) { + throw new Error('[[error:invalid-watch-state]]'); + } + + cids = new Set(Array.isArray(cids) ? cids : [cids]); + cids.delete(-1); // cannot watch cid -1 + cids.delete('-1'); + cids = Array.from(cids); + + const exists = await categories.exists(cids); + if (exists.includes(false)) { + throw new Error('[[error:no-category]]'); + } + + const apiMethod = state >= categories.watchStates.tracking ? activitypub.out.follow : activitypub.out.undo.follow; + const follows = cids.filter(cid => !utils.isNumber(cid)).map(cid => apiMethod('uid', uid, cid)); // returns promises + + await Promise.all([ + db.sortedSetsAdd(cids.map(cid => `cid:${cid}:uid:watch:state`), state, uid), + ...follows, + ]); + }; + + User.getCategoryWatchState = uid => + getCategoryWatchState(User, uid); + + User.getIgnoredCategories = uid => + getIgnoredCategories(User, uid); + + User.getWatchedCategories = uid => + getWatchedCategories(User, uid); + + User.getCategoriesByStates = (uid, state) => + getCategoriesByStates(User, uid, state); + + User.ignoreCategory = async function (uid, cid) { + await User.setCategoryWatchState(uid, cid, categories.watchStates.ignoring); + }; + + User.watchCategory = async function (uid, cid) { + await User.setCategoryWatchState(uid, cid, categories.watchStates.watching); + }; }; From 640d0f7e8addcc67f75bf4361ed00afb2683e400 Mon Sep 17 00:00:00 2001 From: Grace Date: Fri, 23 Jan 2026 23:42:29 +0000 Subject: [PATCH 6/9] indentation --- src/user/categories.js | 28 ---------------------------- 1 file changed, 28 deletions(-) diff --git a/src/user/categories.js b/src/user/categories.js index f5b4d1a7b9..d0f2a7b25d 100644 --- a/src/user/categories.js +++ b/src/user/categories.js @@ -9,34 +9,6 @@ const activitypub = require('../activitypub'); const plugins = require('../plugins'); const utils = require('../utils'); -// async function setCategoryWatchState(User, uid, cids, state) { -// if (utils.isNumber(uid) && parseInt(uid, 10) <= 0) { -// return; -// } - -// const isStateValid = Object.values(categories.watchStates).includes(parseInt(state, 10)); -// if (!isStateValid) { -// throw new Error('[[error:invalid-watch-state]]'); -// } - -// cids = new Set(Array.isArray(cids) ? cids : [cids]); -// cids.delete(-1); // cannot watch cid -1 -// cids.delete('-1'); -// cids = Array.from(cids); - -// const exists = await categories.exists(cids); -// if (exists.includes(false)) { -// throw new Error('[[error:no-category]]'); -// } - -// const apiMethod = state >= categories.watchStates.tracking ? activitypub.out.follow : activitypub.out.undo.follow; -// const follows = cids.filter(cid => !utils.isNumber(cid)).map(cid => apiMethod('uid', uid, cid)); // returns promises - -// await Promise.all([ -// db.sortedSetsAdd(cids.map(cid => `cid:${cid}:uid:watch:state`), state, uid), -// ...follows, -// ]); -// } async function getCategoryWatchState(User, uid) { if (!(parseInt(uid, 10) > 0)) { From 01ac9458ac0917b61891e14a3b4534457f61c2f6 Mon Sep 17 00:00:00 2001 From: Grace Date: Fri, 23 Jan 2026 23:43:02 +0000 Subject: [PATCH 7/9] deleted comments --- src/user/categories.js | 168 ++++++++++++++++++++--------------------- 1 file changed, 84 insertions(+), 84 deletions(-) diff --git a/src/user/categories.js b/src/user/categories.js index d0f2a7b25d..251442b422 100644 --- a/src/user/categories.js +++ b/src/user/categories.js @@ -11,102 +11,102 @@ const utils = require('../utils'); async function getCategoryWatchState(User, uid) { - if (!(parseInt(uid, 10) > 0)) { - return {}; - } + if (!(parseInt(uid, 10) > 0)) { + return {}; + } - const cids = await categories.getAllCidsFromSet('categories:cid'); - const states = await categories.getWatchState(cids, uid); - return _.zipObject(cids, states); + const cids = await categories.getAllCidsFromSet('categories:cid'); + const states = await categories.getWatchState(cids, uid); + return _.zipObject(cids, states); }; async function getIgnoredCategories(User, uid) { - if (!(parseInt(uid, 10) > 0)) { - return []; - } - const cids = await User.getCategoriesByStates(uid, [categories.watchStates.ignoring]); - const result = await plugins.hooks.fire('filter:user.getIgnoredCategories', { - uid: uid, - cids: cids, - }); - return result.cids; + if (!(parseInt(uid, 10) > 0)) { + return []; + } + const cids = await User.getCategoriesByStates(uid, [categories.watchStates.ignoring]); + const result = await plugins.hooks.fire('filter:user.getIgnoredCategories', { + uid: uid, + cids: cids, + }); + return result.cids; }; async function getWatchedCategories(User, uid) { - if (!(parseInt(uid, 10) > 0)) { - return []; - } - let cids = await User.getCategoriesByStates(uid, [categories.watchStates.watching]); - const categoryData = await categories.getCategoriesFields(cids, ['disabled']); - cids = cids.filter((cid, index) => categoryData[index] && !categoryData[index].disabled); - const result = await plugins.hooks.fire('filter:user.getWatchedCategories', { - uid: uid, - cids: cids, - }); - return result.cids; + if (!(parseInt(uid, 10) > 0)) { + return []; + } + let cids = await User.getCategoriesByStates(uid, [categories.watchStates.watching]); + const categoryData = await categories.getCategoriesFields(cids, ['disabled']); + cids = cids.filter((cid, index) => categoryData[index] && !categoryData[index].disabled); + const result = await plugins.hooks.fire('filter:user.getWatchedCategories', { + uid: uid, + cids: cids, + }); + return result.cids; }; async function getCategoriesByStates(User, uid, states) { - const [localCids, remoteCids] = await Promise.all([ - categories.getAllCidsFromSet('categories:cid'), - meta.config.activitypubEnabled ? db.getObjectValues('handle:cid') : [], - ]); - const cids = localCids.concat(remoteCids); - if (!(parseInt(uid, 10) > 0)) { - return cids; - } - const userState = await categories.getWatchState(cids, uid); - return cids.filter((cid, index) => states.includes(userState[index])); + const [localCids, remoteCids] = await Promise.all([ + categories.getAllCidsFromSet('categories:cid'), + meta.config.activitypubEnabled ? db.getObjectValues('handle:cid') : [], + ]); + const cids = localCids.concat(remoteCids); + if (!(parseInt(uid, 10) > 0)) { + return cids; + } + const userState = await categories.getWatchState(cids, uid); + return cids.filter((cid, index) => states.includes(userState[index])); }; module.exports = function (User) { - User.setCategoryWatchState = async function (uid, cids, state) { - if (utils.isNumber(uid) && parseInt(uid, 10) <= 0) { - return; - } - - const isStateValid = Object.values(categories.watchStates).includes(parseInt(state, 10)); - if (!isStateValid) { - throw new Error('[[error:invalid-watch-state]]'); - } - - cids = new Set(Array.isArray(cids) ? cids : [cids]); - cids.delete(-1); // cannot watch cid -1 - cids.delete('-1'); - cids = Array.from(cids); - - const exists = await categories.exists(cids); - if (exists.includes(false)) { - throw new Error('[[error:no-category]]'); - } - - const apiMethod = state >= categories.watchStates.tracking ? activitypub.out.follow : activitypub.out.undo.follow; - const follows = cids.filter(cid => !utils.isNumber(cid)).map(cid => apiMethod('uid', uid, cid)); // returns promises - - await Promise.all([ - db.sortedSetsAdd(cids.map(cid => `cid:${cid}:uid:watch:state`), state, uid), - ...follows, - ]); - }; - - User.getCategoryWatchState = uid => - getCategoryWatchState(User, uid); - - User.getIgnoredCategories = uid => - getIgnoredCategories(User, uid); - - User.getWatchedCategories = uid => - getWatchedCategories(User, uid); - - User.getCategoriesByStates = (uid, state) => - getCategoriesByStates(User, uid, state); - - User.ignoreCategory = async function (uid, cid) { - await User.setCategoryWatchState(uid, cid, categories.watchStates.ignoring); - }; - - User.watchCategory = async function (uid, cid) { - await User.setCategoryWatchState(uid, cid, categories.watchStates.watching); - }; + User.setCategoryWatchState = async function (uid, cids, state) { + if (utils.isNumber(uid) && parseInt(uid, 10) <= 0) { + return; + } + + const isStateValid = Object.values(categories.watchStates).includes(parseInt(state, 10)); + if (!isStateValid) { + throw new Error('[[error:invalid-watch-state]]'); + } + + cids = new Set(Array.isArray(cids) ? cids : [cids]); + cids.delete(-1); // cannot watch cid -1 + cids.delete('-1'); + cids = Array.from(cids); + + const exists = await categories.exists(cids); + if (exists.includes(false)) { + throw new Error('[[error:no-category]]'); + } + + const apiMethod = state >= categories.watchStates.tracking ? activitypub.out.follow : activitypub.out.undo.follow; + const follows = cids.filter(cid => !utils.isNumber(cid)).map(cid => apiMethod('uid', uid, cid)); // returns promises + + await Promise.all([ + db.sortedSetsAdd(cids.map(cid => `cid:${cid}:uid:watch:state`), state, uid), + ...follows, + ]); + }; + + User.getCategoryWatchState = uid => + getCategoryWatchState(User, uid); + + User.getIgnoredCategories = uid => + getIgnoredCategories(User, uid); + + User.getWatchedCategories = uid => + getWatchedCategories(User, uid); + + User.getCategoriesByStates = (uid, state) => + getCategoriesByStates(User, uid, state); + + User.ignoreCategory = async function (uid, cid) { + await User.setCategoryWatchState(uid, cid, categories.watchStates.ignoring); + }; + + User.watchCategory = async function (uid, cid) { + await User.setCategoryWatchState(uid, cid, categories.watchStates.watching); + }; }; From 4184dd9b79e89aaaddf25e228abeef1bf29d4610 Mon Sep 17 00:00:00 2001 From: Grace Date: Sat, 24 Jan 2026 00:15:08 +0000 Subject: [PATCH 8/9] added my name to console output --- src/user/categories.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/user/categories.js b/src/user/categories.js index 251442b422..0855eefe90 100644 --- a/src/user/categories.js +++ b/src/user/categories.js @@ -10,6 +10,8 @@ const plugins = require('../plugins'); const utils = require('../utils'); +console.log("Grace Tian"); + async function getCategoryWatchState(User, uid) { if (!(parseInt(uid, 10) > 0)) { return {}; @@ -59,6 +61,7 @@ async function getCategoriesByStates(User, uid, states) { return cids.filter((cid, index) => states.includes(userState[index])); }; +console.log("Grace Tian"); module.exports = function (User) { User.setCategoryWatchState = async function (uid, cids, state) { @@ -90,6 +93,8 @@ module.exports = function (User) { ]); }; + console.log("Grace Tian"); + User.getCategoryWatchState = uid => getCategoryWatchState(User, uid); @@ -102,6 +107,8 @@ module.exports = function (User) { User.getCategoriesByStates = (uid, state) => getCategoriesByStates(User, uid, state); + console.log("Grace Tian"); + User.ignoreCategory = async function (uid, cid) { await User.setCategoryWatchState(uid, cid, categories.watchStates.ignoring); }; From 3ff5ed02a0f5f02dcc67972fc4c0490d78d8948e Mon Sep 17 00:00:00 2001 From: Grace Date: Sat, 24 Jan 2026 01:04:03 +0000 Subject: [PATCH 9/9] fixed lint error --- src/user/categories.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/user/categories.js b/src/user/categories.js index 0855eefe90..20f166731b 100644 --- a/src/user/categories.js +++ b/src/user/categories.js @@ -10,7 +10,7 @@ const plugins = require('../plugins'); const utils = require('../utils'); -console.log("Grace Tian"); +console.log('Grace Tian'); async function getCategoryWatchState(User, uid) { if (!(parseInt(uid, 10) > 0)) { @@ -61,7 +61,7 @@ async function getCategoriesByStates(User, uid, states) { return cids.filter((cid, index) => states.includes(userState[index])); }; -console.log("Grace Tian"); +console.log('Grace Tian'); module.exports = function (User) { User.setCategoryWatchState = async function (uid, cids, state) { @@ -93,7 +93,7 @@ module.exports = function (User) { ]); }; - console.log("Grace Tian"); + console.log('Grace Tian'); User.getCategoryWatchState = uid => getCategoryWatchState(User, uid); @@ -107,7 +107,7 @@ module.exports = function (User) { User.getCategoriesByStates = (uid, state) => getCategoriesByStates(User, uid, state); - console.log("Grace Tian"); + console.log('Grace Tian'); User.ignoreCategory = async function (uid, cid) { await User.setCategoryWatchState(uid, cid, categories.watchStates.ignoring);