From 400043b1be38cdd7bc39462fa6a545eea0bea03e Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Wed, 20 Oct 2021 15:01:17 +0200 Subject: Add ability to search by URL with query params --- server/controllers/api/search/search-video-channels.ts | 3 ++- server/controllers/api/search/search-video-playlists.ts | 3 ++- server/controllers/api/search/search-videos.ts | 3 ++- server/controllers/api/search/shared/index.ts | 1 + server/controllers/api/search/shared/utils.ts | 16 ++++++++++++++++ 5 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 server/controllers/api/search/shared/index.ts create mode 100644 server/controllers/api/search/shared/utils.ts (limited to 'server/controllers') diff --git a/server/controllers/api/search/search-video-channels.ts b/server/controllers/api/search/search-video-channels.ts index 089feed65..c9e81bffa 100644 --- a/server/controllers/api/search/search-video-channels.ts +++ b/server/controllers/api/search/search-video-channels.ts @@ -25,6 +25,7 @@ import { } from '../../../middlewares' import { VideoChannelModel } from '../../../models/video/video-channel' import { MChannelAccountDefault } from '../../../types/models' +import { searchLocalUrl } from './shared' const searchChannelsRouter = express.Router() @@ -131,7 +132,7 @@ async function searchVideoChannelURI (search: string, isWebfingerSearch: boolean logger.info('Cannot search remote video channel %s.', uri, { err }) } } else { - videoChannel = await VideoChannelModel.loadByUrlAndPopulateAccount(sanitizeLocalUrl(uri)) + videoChannel = await searchLocalUrl(sanitizeLocalUrl(uri), url => VideoChannelModel.loadByUrlAndPopulateAccount(url)) } return res.json({ diff --git a/server/controllers/api/search/search-video-playlists.ts b/server/controllers/api/search/search-video-playlists.ts index b28f11c79..61a11c74a 100644 --- a/server/controllers/api/search/search-video-playlists.ts +++ b/server/controllers/api/search/search-video-playlists.ts @@ -24,6 +24,7 @@ import { videoPlaylistsListSearchValidator, videoPlaylistsSearchSortValidator } from '../../../middlewares' +import { searchLocalUrl } from './shared' const searchPlaylistsRouter = express.Router() @@ -109,7 +110,7 @@ async function searchVideoPlaylistsURI (search: string, res: express.Response) { logger.info('Cannot search remote video playlist %s.', search, { err }) } } else { - videoPlaylist = await VideoPlaylistModel.loadByUrlWithAccountAndChannelSummary(sanitizeLocalUrl(search)) + videoPlaylist = await searchLocalUrl(sanitizeLocalUrl(search), url => VideoPlaylistModel.loadByUrlWithAccountAndChannelSummary(url)) } return res.json({ diff --git a/server/controllers/api/search/search-videos.ts b/server/controllers/api/search/search-videos.ts index eb7ce0841..90946cb74 100644 --- a/server/controllers/api/search/search-videos.ts +++ b/server/controllers/api/search/search-videos.ts @@ -25,6 +25,7 @@ import { } from '../../../middlewares' import { VideoModel } from '../../../models/video/video' import { MVideoAccountLightBlacklistAllFiles } from '../../../types/models' +import { searchLocalUrl } from './shared' const searchVideosRouter = express.Router() @@ -141,7 +142,7 @@ async function searchVideoURI (url: string, res: express.Response) { logger.info('Cannot search remote video %s.', url, { err }) } } else { - video = await VideoModel.loadByUrlAndPopulateAccount(sanitizeLocalUrl(url)) + video = await searchLocalUrl(sanitizeLocalUrl(url), url => VideoModel.loadByUrlAndPopulateAccount(url)) } return res.json({ diff --git a/server/controllers/api/search/shared/index.ts b/server/controllers/api/search/shared/index.ts new file mode 100644 index 000000000..9c56149ef --- /dev/null +++ b/server/controllers/api/search/shared/index.ts @@ -0,0 +1 @@ +export * from './utils' diff --git a/server/controllers/api/search/shared/utils.ts b/server/controllers/api/search/shared/utils.ts new file mode 100644 index 000000000..e02e84f31 --- /dev/null +++ b/server/controllers/api/search/shared/utils.ts @@ -0,0 +1,16 @@ +async function searchLocalUrl (url: string, finder: (url: string) => Promise) { + const data = await finder(url) + if (data) return data + + return finder(removeQueryParams(url)) +} + +export { + searchLocalUrl +} + +// --------------------------------------------------------------------------- + +function removeQueryParams (url: string) { + return url.split('?').shift() +} -- cgit v1.2.3