useSearchMusare.ts 2.3 KB

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