mirror of
https://github.com/Myxelium/Bridge-Multi.git
synced 2026-07-08 19:15:09 +00:00
Advanced Search TS
This commit is contained in:
@@ -1,7 +1,8 @@
|
||||
import { IPCInvokeHandler } from '../../shared/IPCHandler'
|
||||
import { SongSearch, SearchType, SongResult } from '../../shared/interfaces/search.interface'
|
||||
import { SongSearch, SongResult } from '../../shared/interfaces/search.interface'
|
||||
import * as needle from 'needle'
|
||||
import { serverURL } from '../../shared/Paths'
|
||||
|
||||
/**
|
||||
* Handles the 'song-search' event.
|
||||
*/
|
||||
@@ -15,29 +16,20 @@ class SearchHandler implements IPCInvokeHandler<'song-search'> {
|
||||
return new Promise<SongResult[]>((resolve, reject) => {
|
||||
needle.request(
|
||||
'get',
|
||||
serverURL + `/api/search/${this.getSearchType(search)}`, {
|
||||
query: search.query,
|
||||
limit: search.length,
|
||||
offset: search.offset
|
||||
}, (err, response) => {
|
||||
serverURL + `/api/search`, search, (err, response) => {
|
||||
if (err) {
|
||||
reject(err.message)
|
||||
} else {
|
||||
resolve(response.body)
|
||||
if (response.body.errors) {
|
||||
console.log(response.body)
|
||||
resolve([])
|
||||
} else {
|
||||
resolve(response.body)
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns the search api type that corresponds with `search.type`.
|
||||
*/
|
||||
private getSearchType(search: SongSearch) {
|
||||
switch (search.type) {
|
||||
case SearchType.Any: return 'general'
|
||||
default: return '<<<ERROR>>>' // TODO: add more search types
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export const searchHandler = new SearchHandler()
|
||||
@@ -1,18 +1,76 @@
|
||||
/**
|
||||
* Represents a user's song search query.
|
||||
*/
|
||||
export interface SongSearch {
|
||||
export interface SongSearch { // TODO: make limit a setting that's not always 51
|
||||
query: string
|
||||
type: SearchType
|
||||
quantity: 'all' | 'any'
|
||||
similarity: 'similar' | 'exact'
|
||||
fields: SearchFields
|
||||
tags: SearchTags
|
||||
instruments: SearchInstruments
|
||||
difficulties: SearchDifficulties
|
||||
minDiff: number
|
||||
maxDiff: number
|
||||
limit: number
|
||||
offset: number
|
||||
length: number
|
||||
}
|
||||
|
||||
/**
|
||||
* The list of possible search categories.
|
||||
*/
|
||||
export enum SearchType {
|
||||
'Any', 'Name', 'Artist', 'Album', 'Genre', 'Year', 'Charter'
|
||||
export function getDefaultSearch(): SongSearch {
|
||||
return {
|
||||
query: '',
|
||||
quantity: 'all',
|
||||
similarity: 'similar',
|
||||
fields: { name: true, artist: true, album: true, genre: true, year: true, charter: true, tag: true },
|
||||
tags: { 'sections': false, 'star power': false, 'forcing': false, 'taps': false, 'lyrics': false,
|
||||
'video': false, 'stems': false, 'solo sections': false, 'open notes': false },
|
||||
instruments: { guitar: false, bass: false, rhythm: false, keys: false,
|
||||
drums: false, guitarghl: false, bassghl: false, vocals: false },
|
||||
difficulties: { expert: false, hard: false, medium: false, easy: false },
|
||||
minDiff: 0,
|
||||
maxDiff: 6,
|
||||
limit: 50 + 1,
|
||||
offset: 0
|
||||
}
|
||||
}
|
||||
|
||||
export interface SearchFields {
|
||||
name: boolean
|
||||
artist: boolean
|
||||
album: boolean
|
||||
genre: boolean
|
||||
year: boolean
|
||||
charter: boolean
|
||||
tag: boolean
|
||||
}
|
||||
|
||||
export interface SearchTags {
|
||||
'sections': boolean // Tag inverted
|
||||
'star power': boolean // Tag inverted
|
||||
'forcing': boolean // Tag inverted
|
||||
'taps': boolean
|
||||
'lyrics': boolean
|
||||
'video': boolean
|
||||
'stems': boolean
|
||||
'solo sections': boolean
|
||||
'open notes': boolean
|
||||
}
|
||||
|
||||
export interface SearchInstruments {
|
||||
guitar: boolean
|
||||
bass: boolean
|
||||
rhythm: boolean
|
||||
keys: boolean
|
||||
drums: boolean
|
||||
guitarghl: boolean
|
||||
bassghl: boolean
|
||||
vocals: boolean
|
||||
}
|
||||
|
||||
export interface SearchDifficulties {
|
||||
expert: boolean
|
||||
hard: boolean
|
||||
medium: boolean
|
||||
easy: boolean
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user