search.go 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package libamuse
  2. import (
  3. "notabug.org/apiote/amuse/accounts"
  4. "notabug.org/apiote/amuse/tmdb"
  5. "notabug.org/apiote/amuse/wikidata"
  6. "notabug.org/apiote/gott"
  7. "strconv"
  8. )
  9. type QueryData struct {
  10. query string
  11. language string
  12. mimetype string
  13. page string
  14. auth accounts.Authentication
  15. username string
  16. }
  17. func (d QueryData) getLanguage() string {
  18. return d.language
  19. }
  20. func (d QueryData) getMimeType() string {
  21. return d.mimetype
  22. }
  23. func (d QueryData) getAuth() accounts.Authentication {
  24. return d.auth
  25. }
  26. func (d QueryData) getReqUsername() string {
  27. return d.username
  28. }
  29. func searchTmdb(args ...interface{}) (interface{}, error) {
  30. data := args[0].(*QueryData)
  31. result := args[1].(*Result)
  32. languages := result.languages
  33. results, err := tmdb.Search(data.query, languages[0].String(), data.page)
  34. result.result = results
  35. return gott.Tuple(args), err
  36. }
  37. func searchInventaire(args ...interface{}) (interface{}, error) {
  38. data := args[0].(*QueryData)
  39. result := args[1].(*Result)
  40. languages := result.languages
  41. page, _ := strconv.ParseInt(data.page, 10, 64)
  42. results, err := wikidata.Search(data.query, languages[0].String(), page)
  43. result.result2 = results
  44. return gott.Tuple(args), err
  45. }
  46. func renderQuery(args ...interface{}) interface{} {
  47. result := args[1].(*Result)
  48. tmdbResults := result.result.(*tmdb.SearchResults)
  49. inventaireResults := result.result2.(*wikidata.SearchResults)
  50. result.page = result.renderer.RenderSearch(tmdbResults, inventaireResults, result.languages)
  51. return gott.Tuple(args)
  52. }
  53. func PerformSearch(query, language, mimetype, page string, auth accounts.Authentication) (string, error) {
  54. auth.Necessary = false
  55. r, err := gott.
  56. NewResult(gott.Tuple{&QueryData{query: query, language: language, mimetype: mimetype, page: page, auth: auth}, &Result{}}).
  57. Bind(parseLanguage).
  58. Bind(verifyToken).
  59. Bind(searchTmdb).
  60. Bind(searchInventaire).
  61. Bind(createRenderer).
  62. Map(renderQuery).
  63. Finish()
  64. if err != nil {
  65. return "", err
  66. } else {
  67. return r.(gott.Tuple)[1].(*Result).page, nil
  68. }
  69. }