useSearchMusare.ts 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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 = (playlistId, id, index) => {
  67. socket.dispatch(
  68. "playlists.addSongToPlaylist",
  69. false,
  70. id,
  71. playlistId,
  72. res => {
  73. new Toast(res.message);
  74. if (res.status === "success")
  75. musareSearch.value.results[index].isAddedToQueue = true;
  76. }
  77. );
  78. };
  79. return {
  80. musareSearch,
  81. resultsLeftCount,
  82. nextPageResultsCount,
  83. searchForMusareSongs,
  84. addMusareSongToPlaylist
  85. };
  86. }