durationMin: number // seconds
durationMax: number // seconds
+ sort: string
+
constructor (options?: {
startDate?: string
endDate?: string
tagsAllOf?: string
durationMin?: string
durationMax?: string
+ sort?: string
}) {
if (!options) return
if (isNaN(this.durationMin)) this.durationMin = undefined
if (isNaN(this.durationMax)) this.durationMax = undefined
+
+ this.sort = options.sort || '-match'
}
containsValues () {
const obj = this.toUrlObject()
for (const k of Object.keys(obj)) {
+ if (k === 'sort') continue // Exception
+
if (obj[k] !== undefined) return true
}
this.tagsAllOf = undefined
this.durationMin = undefined
this.durationMax = undefined
+
+ this.sort = '-match'
}
toUrlObject () {
tagsOneOf: this.tagsOneOf,
tagsAllOf: this.tagsAllOf,
durationMin: this.durationMin,
- durationMax: this.durationMax
+ durationMax: this.durationMax,
+ sort: this.sort
}
}
startDate: this.startDate,
endDate: this.endDate,
nsfw: this.nsfw,
- categoryOneOf: this.categoryOneOf ? this.categoryOneOf.split(',') : undefined,
- licenceOneOf: this.licenceOneOf ? this.licenceOneOf.split(',') : undefined,
- languageOneOf: this.languageOneOf ? this.languageOneOf.split(',') : undefined,
- tagsOneOf: this.tagsOneOf ? this.tagsOneOf.split(',') : undefined,
- tagsAllOf: this.tagsAllOf ? this.tagsAllOf.split(',') : undefined,
+ categoryOneOf: this.intoArray(this.categoryOneOf),
+ licenceOneOf: this.intoArray(this.licenceOneOf),
+ languageOneOf: this.intoArray(this.languageOneOf),
+ tagsOneOf: this.intoArray(this.tagsOneOf),
+ tagsAllOf: this.intoArray(this.tagsAllOf),
durationMin: this.durationMin,
- durationMax: this.durationMax
+ durationMax: this.durationMax,
+ sort: this.sort
}
}
+
+ private intoArray (value: any) {
+ if (!value) return undefined
+
+ if (typeof value === 'string') return value.split(',')
+
+ return [ value ]
+ }
}