useSearchYoutube.ts 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import { ref } from "vue";
  2. import { useStore } from "vuex";
  3. import Toast from "toasters";
  4. export default function useSearchYoutube() {
  5. const store = useStore();
  6. const youtubeSearch = ref({
  7. songs: {
  8. results: [],
  9. query: "",
  10. nextPageToken: ""
  11. },
  12. playlist: {
  13. query: "",
  14. isImportingOnlyMusic: true
  15. }
  16. });
  17. const { socket } = store.state.websockets;
  18. const searchForSongs = () => {
  19. let { query } = youtubeSearch.value.songs;
  20. if (query.indexOf("&index=") !== -1) {
  21. query = query.split("&index=");
  22. query.pop();
  23. query = query.join("");
  24. }
  25. if (query.indexOf("&list=") !== -1) {
  26. query = query.split("&list=");
  27. query.pop();
  28. query = query.join("");
  29. }
  30. socket.dispatch("apis.searchYoutube", query, res => {
  31. if (res.status === "success") {
  32. youtubeSearch.value.songs.nextPageToken =
  33. res.data.nextPageToken;
  34. youtubeSearch.value.songs.results = [];
  35. res.data.items.forEach(result => {
  36. youtubeSearch.value.songs.results.push({
  37. id: result.id.videoId,
  38. url: `https://www.youtube.com/watch?v=${result.id.videoId}`,
  39. title: result.snippet.title,
  40. thumbnail: result.snippet.thumbnails.default.url,
  41. channelId: result.snippet.channelId,
  42. channelTitle: result.snippet.channelTitle,
  43. isAddedToQueue: false
  44. });
  45. });
  46. } else if (res.status === "error") new Toast(res.message);
  47. });
  48. };
  49. const loadMoreSongs = () => {
  50. socket.dispatch(
  51. "apis.searchYoutubeForPage",
  52. youtubeSearch.value.songs.query,
  53. youtubeSearch.value.songs.nextPageToken,
  54. res => {
  55. if (res.status === "success") {
  56. youtubeSearch.value.songs.nextPageToken =
  57. res.data.nextPageToken;
  58. res.data.items.forEach(result => {
  59. youtubeSearch.value.songs.results.push({
  60. id: result.id.videoId,
  61. url: `https://www.youtube.com/watch?v=${result.id.videoId}`,
  62. title: result.snippet.title,
  63. thumbnail: result.snippet.thumbnails.default.url,
  64. channelId: result.snippet.channelId,
  65. channelTitle: result.snippet.channelTitle,
  66. isAddedToQueue: false
  67. });
  68. });
  69. } else if (res.status === "error") new Toast(res.message);
  70. }
  71. );
  72. };
  73. const addYouTubeSongToPlaylist = (id, index) => {
  74. socket.dispatch(
  75. "playlists.addSongToPlaylist",
  76. false,
  77. id,
  78. this.playlist._id,
  79. res => {
  80. new Toast(res.message);
  81. if (res.status === "success")
  82. youtubeSearch.value.songs.results[index].isAddedToQueue =
  83. true;
  84. }
  85. );
  86. };
  87. return {
  88. youtubeSearch,
  89. searchForSongs,
  90. loadMoreSongs,
  91. addYouTubeSongToPlaylist
  92. };
  93. }