Skip to content

Commit c6278da

Browse files
committed
feat(desktop): rsshub routes sorting
1 parent 4101430 commit c6278da

File tree

1 file changed

+37
-18
lines changed
  • apps/desktop/layer/renderer/src/pages/(main)/(layer)/(subview)/discover/category

1 file changed

+37
-18
lines changed

apps/desktop/layer/renderer/src/pages/(main)/(layer)/(subview)/discover/category/[category].tsx

Lines changed: 37 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -48,19 +48,35 @@ export const Component = () => {
4848
)
4949

5050
const data: RouteData = rsshubPopular.data as any
51-
const { isLoading } = rsshubPopular
51+
52+
const rsshubAnalytics = useAuthQuery(Queries.discover.rsshubAnalytics(), {
53+
staleTime: 1000 * 60 * 60 * 24, // 1 day
54+
placeholderData: keepPreviousData,
55+
})
56+
57+
const rsshubAnalyticsData: Awaited<
58+
ReturnType<(typeof apiClient)["discover"]["rsshub-analytics"]["$get"]>
59+
>["data"] = rsshubAnalytics.data as any
60+
61+
const isLoading = rsshubPopular.isLoading || rsshubAnalytics.isLoading
5262

5363
const keys = useMemo(() => {
54-
if (!data) {
64+
if (!data || !rsshubAnalyticsData) {
5565
return []
5666
}
5767
return Object.keys(data).sort((a, b) => {
58-
const aname = data[a]!.name
59-
const bname = data[b]!.name
68+
const aRoutes = Object.keys(data[a]?.routes ?? {})
69+
const aHeat = aRoutes.reduce((acc, route) => {
70+
return acc + (rsshubAnalyticsData?.[`/${a}${route}`]?.subscriptionCount ?? 0)
71+
}, 0)
72+
const bRoutes = Object.keys(data[b]?.routes ?? {})
73+
const bHeat = bRoutes.reduce((acc, route) => {
74+
return acc + (rsshubAnalyticsData?.[`/${b}${route}`]?.subscriptionCount ?? 0)
75+
}, 0)
6076

61-
return aname.toLowerCase() < bname.toLowerCase() ? -1 : 1
77+
return bHeat - aHeat
6278
})
63-
}, [data])
79+
}, [data, rsshubAnalyticsData])
6480

6581
const [search, setSearch] = useState("")
6682

@@ -113,7 +129,11 @@ export const Component = () => {
113129
(item) =>
114130
item?.data && (
115131
<div key={item.key} className="mb-4 break-inside-avoid">
116-
<RecommendationListItem data={item.data} routePrefix={item.routePrefix} />
132+
<RecommendationListItem
133+
data={item.data}
134+
routePrefix={item.routePrefix}
135+
rsshubAnalyticsData={rsshubAnalyticsData}
136+
/>
117137
</div>
118138
),
119139
)}
@@ -141,17 +161,25 @@ export const Component = () => {
141161
const RecommendationListItem = ({
142162
data,
143163
routePrefix,
164+
rsshubAnalyticsData,
144165
}: {
145166
data: RouteData[string]
146167
routePrefix: string
168+
rsshubAnalyticsData: Awaited<
169+
ReturnType<(typeof apiClient)["discover"]["rsshub-analytics"]["$get"]>
170+
>["data"]
147171
}) => {
148172
const { t } = useTranslation()
149173
const { present } = useModalStack()
150174

151175
const { maintainers, categories, routes } = useMemo(() => {
152176
const maintainers = new Set<string>()
153177
const categories = new Set<string>()
154-
const routes = Object.keys(data.routes)
178+
const routes = Object.keys(data.routes).sort((a, b) => {
179+
const aHeat = rsshubAnalyticsData?.[`/${routePrefix}${a}`]?.subscriptionCount ?? 0
180+
const bHeat = rsshubAnalyticsData?.[`/${routePrefix}${b}`]?.subscriptionCount ?? 0
181+
return bHeat - aHeat
182+
})
155183

156184
for (const route in data.routes) {
157185
const routeData = data.routes[route]!
@@ -168,16 +196,7 @@ const RecommendationListItem = ({
168196
categories: Array.from(categories) as unknown as typeof RSSHubCategories,
169197
routes,
170198
}
171-
}, [data])
172-
173-
const rsshubAnalytics = useAuthQuery(Queries.discover.rsshubAnalytics(), {
174-
staleTime: 1000 * 60 * 60 * 24, // 1 day
175-
placeholderData: keepPreviousData,
176-
})
177-
178-
const rsshubAnalyticsData: Awaited<
179-
ReturnType<(typeof apiClient)["discover"]["rsshub-analytics"]["$get"]>
180-
>["data"] = rsshubAnalytics.data as any
199+
}, [data, rsshubAnalyticsData, routePrefix])
181200

182201
const follow = useFollow()
183202

0 commit comments

Comments
 (0)