diff --git a/README.md b/README.md index e5d914656d..2f01e493fc 100644 --- a/README.md +++ b/README.md @@ -9,14 +9,16 @@ Next generation information browser.

- Discord + Discord · Twitter · Releases

- RSSNext%2Ffollow | Trendshift + RSSNext%2Ffollow | Trendshift + RSSNext%2Ffollow | Trendshift + RSSNext%2Ffollow | Trendshift

@@ -73,7 +75,7 @@ The project is currently under active development. The following screenshots are ## Releases -[![Discord](https://img.shields.io/discord/1243823539426033696?logo=discord&label=Discord&style=flat-square&color=5865F2)](https://discord.gg/xHCVQZ6wmZ) [![](https://img.shields.io/badge/any_text-Follow-blue?color=2CA5E0&label=_&logo=x&cacheSeconds=3600&style=flat-square)](https://x.com/intent/follow?screen_name=follow_app_) +[![Discord](https://img.shields.io/discord/1243823539426033696?logo=discord&label=Discord&style=flat-square&color=5865F2)](https://discord.gg/followapp) [![](https://img.shields.io/badge/any_text-Follow-blue?color=2CA5E0&label=_&logo=x&cacheSeconds=3600&style=flat-square)](https://x.com/intent/follow?screen_name=follow_app_) Currently, Follow is still in the early developer preview stage (alpha) and is only available to a limited number of users through an invitation system. diff --git a/apps/renderer/src/constants/social.ts b/apps/renderer/src/constants/social.ts index 2e4d8928ff..b3fb572d3c 100644 --- a/apps/renderer/src/constants/social.ts +++ b/apps/renderer/src/constants/social.ts @@ -9,7 +9,7 @@ export const SocialMediaLinks = [ { icon: "i-mgc-discord-cute-fi", label: "Discord", - url: "https://discord.gg/xHCVQZ6wmZ", + url: "https://discord.gg/followapp", }, { icon: "i-mgc-social-x-cute-re", diff --git a/apps/renderer/src/lib/utils.ts b/apps/renderer/src/lib/utils.ts index c5094864c9..d68b00ca49 100644 --- a/apps/renderer/src/lib/utils.ts +++ b/apps/renderer/src/lib/utils.ts @@ -4,6 +4,7 @@ import { memoize } from "lodash-es" import { twMerge } from "tailwind-merge" import { parse } from "tldts" +import type { MediaModel } from "~/models" import type { RSSHubRoute } from "~/modules/discover/types" import { FEED_COLLECTION_LIST, ROUTE_FEED_PENDING } from "../constants/app" @@ -260,3 +261,9 @@ export const getUrlIcon = (url: string, fallback?: boolean | undefined) => { } export const isEmptyObject = (obj: Record) => Object.keys(obj).length === 0 + +export const filterSmallMedia = (media: MediaModel) => { + return media?.filter( + (m) => !(m.type === "photo" && m.width && m.width < 65 && m.height && m.height < 65), + ) +} diff --git a/apps/renderer/src/models/types.ts b/apps/renderer/src/models/types.ts index 099aacd628..c28a89a9bd 100644 --- a/apps/renderer/src/models/types.ts +++ b/apps/renderer/src/models/types.ts @@ -78,3 +78,8 @@ export type RecommendationItem = ExtractBizResponse< export type ActionOperation = "contains" | "not_contains" | "eq" | "not_eq" | "gt" | "lt" | "regex" export type ActionEntryField = "all" | "title" | "content" | "author" | "url" | "order" export type ActionFeedField = "view" | "title" | "site_url" | "feed_url" | "category" + +export type MediaModel = Exclude< + ExtractBizResponse["data"], + undefined +>["entries"]["media"] diff --git a/apps/renderer/src/modules/entry-column/Items/picture-item.tsx b/apps/renderer/src/modules/entry-column/Items/picture-item.tsx index f930391590..f275ef6322 100644 --- a/apps/renderer/src/modules/entry-column/Items/picture-item.tsx +++ b/apps/renderer/src/modules/entry-column/Items/picture-item.tsx @@ -8,7 +8,7 @@ import { ReactVirtuosoItemPlaceholder } from "~/components/ui/placeholder" import { Skeleton } from "~/components/ui/skeleton" import { useRouteParamsSelector } from "~/hooks/biz/useRouteParams" import { FeedViewType } from "~/lib/enum" -import { cn } from "~/lib/utils" +import { cn, filterSmallMedia } from "~/lib/utils" import { useEntry } from "~/store/entry/hooks" import { useImageDimensions } from "~/store/image" @@ -80,7 +80,7 @@ export const PictureWaterFallItem = memo(function PictureWaterFallItem({ const intersectionObserver = useContext(MasonryIntersectionContext) useEffect(() => { - if (!ref) return + if (!ref || !intersectionObserver) return intersectionObserver.observe(ref) @@ -92,6 +92,8 @@ export const PictureWaterFallItem = memo(function PictureWaterFallItem({ const [isMouseEnter, setIsMouseEnter] = useState(false) if (!entry) return null + const media = filterSmallMedia(entry.entries.media) + return (
- {entry.entries.media && entry.entries.media.length > 0 ? ( - + {media && media.length > 0 ? ( + }
- {!!entry.entries.media?.length && ( + {!!media?.length && (
- {entry.entries.media.map((media, i, mediaList) => { + {media.map((media, i, mediaList) => { const style: Partial<{ width: string height: string diff --git a/locales/app/zh-CN.json b/locales/app/zh-CN.json index 546a837ace..675f40a963 100644 --- a/locales/app/zh-CN.json +++ b/locales/app/zh-CN.json @@ -2,7 +2,7 @@ "achievement.all_done": "大功告成!", "achievement.first_claim_feed": "订阅源所有者", "achievement.first_claim_feed_description": "在 Follow 上认证订阅源", - "achievement.mint_more_power": "成为核心玩家,赚取更多 ", + "achievement.mint_more_power": "成为硬核玩家,赚取更多 ", "ai_daily.title": "热点 - {{title}}", "ai_daily.tooltip.content": "AI 根据时间线( - )提取的重点信息", "ai_daily.tooltip.update_schedule": "每天 8:00 和 20:00 定时更新",