useSearchMusare.ts 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. import { ref, computed } from "vue";
  2. import { useStore } from "vuex";
  3. import Toast from "toasters";
  4. export default function useSearchMusare() {
  5. const store = useStore();
  6. const musareSearch = ref({
  7. query: "",
  8. searchedQuery: "",
  9. page: 0,
  10. count: 0,
  11. resultsLeft: 0,
  12. results: [],
  13. pageSize: 0
  14. });
  15. const resultsLeftCount = computed(
  16. () => musareSearch.value.count - musareSearch.value.results.length
  17. );
  18. const nextPageResultsCount = computed(() =>
  19. Math.min(musareSearch.value.pageSize, resultsLeftCount.value)
  20. );
  21. const { socket } = store.state.websockets;
  22. const searchForMusareSongs = (page, toast = true) => {
  23. if (
  24. musareSearch.value.page >= page ||
  25. musareSearch.value.searchedQuery !== musareSearch.value.query
  26. ) {
  27. musareSearch.value.results = [];
  28. musareSearch.value.page = 0;
  29. musareSearch.value.count = 0;
  30. musareSearch.value.resultsLeft = 0;
  31. musareSearch.value.pageSize = 0;
  32. }
  33. musareSearch.value.searchedQuery = musareSearch.value.query;
  34. socket.dispatch(
  35. "songs.searchOfficial",
  36. musareSearch.value.query,
  37. page,
  38. res => {
  39. if (res.status === "success") {
  40. const { data } = res;
  41. const { count, pageSize, songs } = data;
  42. const newSongs = songs.map(song => ({
  43. isAddedToQueue: false,
  44. ...song
  45. }));
  46. musareSearch.value.results = [
  47. ...musareSearch.value.results,
  48. ...newSongs
  49. ];
  50. musareSearch.value.page = page;
  51. musareSearch.value.count = count;
  52. musareSearch.value.resultsLeft =
  53. count - musareSearch.value.results.length;
  54. musareSearch.value.pageSize = pageSize;
  55. } else if (res.status === "error") {
  56. musareSearch.value.results = [];
  57. musareSearch.value.page = 0;
  58. musareSearch.value.count = 0;
  59. musareSearch.value.resultsLeft = 0;
  60. musareSearch.value.pageSize = 0;
  61. if (toast) new Toast(res.message);
  62. }
  63. }
  64. );
  65. };
  66. const addMusareSongToPlaylist = (id, index) => {
  67. return new Error("Not done yet.");
  68. socket.dispatch(
  69. "playlists.addSongToPlaylist",
  70. false,
  71. id,
  72. this.playlist._id,
  73. res => {
  74. new Toast(res.message);
  75. if (res.status === "success")
  76. musareSearch.value.results[index].isAddedToQueue = true;
  77. }
  78. );
  79. };
  80. return {
  81. musareSearch,
  82. resultsLeftCount,
  83. nextPageResultsCount,
  84. searchForMusareSongs,
  85. addMusareSongToPlaylist
  86. };
  87. }