path.reduce((acc, part) => acc && acc[part], obj)
export enum FilterType {
+ filterOutVerticalVideos,
viewCount,
viewCountStr,
duration,
@@ -19,6 +21,11 @@ type FuncMap = { [key in FilterType]: {
type KeyPath = Array[]
export function useFilter(isFollowedKeyPath: string[], filterOpt: FilterType[], keyList: KeyPath) {
+ function filterOutVerticalVideos(item: any, keyPath: string[], _filterValue: number) {
+ const value = get(item, keyPath)
+ return !isVerticalVideo(value)
+ }
+
/**
* Compares a number value in an object with a filter value.
* Return `true` if the number value is greater than the filter value, `false` otherwise.
@@ -107,6 +114,11 @@ export function useFilter(isFollowedKeyPath: string[], filterOpt: FilterType[],
// #endregion
const funcMap: FuncMap = {
+ [FilterType.filterOutVerticalVideos]: {
+ func: filterOutVerticalVideos,
+ enabledKey: 'filterOutVerticalVideos',
+ valueKey: '',
+ },
[FilterType.viewCount]: {
func: compareNumber,
enabledKey: 'enableFilterByViewCount',
@@ -137,6 +149,7 @@ export function useFilter(isFollowedKeyPath: string[], filterOpt: FilterType[],
const filter = ref(null)
watch(() => [
+ settings.value.filterOutVerticalVideos,
settings.value.enableFilterByDuration,
settings.value.enableFilterByViewCount,
settings.value.enableFilterByTitle,
@@ -145,8 +158,8 @@ export function useFilter(isFollowedKeyPath: string[], filterOpt: FilterType[],
settings.value.filterByViewCount,
settings.value.filterByTitle,
settings.value.filterByUser,
- ], ([durationFilter, viewCountFilter, titleFilter, userFilter]) => {
- if (!durationFilter && !viewCountFilter && !titleFilter && !userFilter) {
+ ], ([filterOutVerticalVideos, durationFilter, viewCountFilter, titleFilter, userFilter]) => {
+ if (!filterOutVerticalVideos && !durationFilter && !viewCountFilter && !titleFilter && !userFilter) {
filter.value = null
return
}
diff --git a/src/contentScripts/views/Home/components/ForYou.vue b/src/contentScripts/views/Home/components/ForYou.vue
index ae07759b..62a90c82 100644
--- a/src/contentScripts/views/Home/components/ForYou.vue
+++ b/src/contentScripts/views/Home/components/ForYou.vue
@@ -33,8 +33,8 @@ const filterFunc = useFilter(
)
const appFilterFunc = useFilter(
['bottom_rcmd_reason'],
- [FilterType.duration, FilterType.viewCountStr, FilterType.title, FilterType.user, FilterType.user],
- [['player_args', 'duration'], ['cover_left_text_1'], ['title'], ['mask', 'avatar', 'text'], ['mask', 'avatar', 'up_id']],
+ [FilterType.filterOutVerticalVideos, FilterType.duration, FilterType.viewCountStr, FilterType.title, FilterType.user, FilterType.user],
+ [['uri'], ['player_args', 'duration'], ['cover_left_text_1'], ['title'], ['mask', 'avatar', 'text'], ['mask', 'avatar', 'up_id']],
)
const { t } = useI18n()
diff --git a/src/logic/storage.ts b/src/logic/storage.ts
index e9151a24..a4cae5fa 100644
--- a/src/logic/storage.ts
+++ b/src/logic/storage.ts
@@ -61,6 +61,7 @@ export interface Settings {
// filter setting
disableFilterForFollowedUser: boolean
+ filterOutVerticalVideos: boolean
enableFilterByViewCount: boolean
filterByViewCount: number
enableFilterByDuration: boolean
@@ -133,6 +134,7 @@ export const settings = useStorageLocal('settings', ref({
// filter setting
disableFilterForFollowedUser: false,
+ filterOutVerticalVideos: false,
enableFilterByViewCount: false,
filterByViewCount: 10000,
enableFilterByDuration: false,