useSoundcloudArtist.ts 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import { ref } from "vue";
  2. import Toast from "toasters";
  3. import { useWebsocketsStore } from "@/stores/websockets";
  4. const soundcloudArtistPermalinkRegex =
  5. /^(?<userPermalink>[A-Za-z0-9]+([-_][A-Za-z0-9]+)*)$/;
  6. const soundcloudArtistURLRegex =
  7. /soundcloud\.com\/(?<userPermalink>[A-Za-z0-9]+([-_][A-Za-z0-9]+)*)/;
  8. export const useSoundcloudArtist = () => {
  9. const soundcloudArtistURLOrPermalink = ref("");
  10. const { socket } = useWebsocketsStore();
  11. const getSoundcloudArtist = async () => {
  12. const soundcloudArtistURLOrPermalinkTrimmed =
  13. soundcloudArtistURLOrPermalink.value.trim();
  14. if (soundcloudArtistURLOrPermalinkTrimmed.length === 0)
  15. return new Toast(
  16. "No Soundcloud URL or permalink found in the supplied value."
  17. );
  18. const soundcloudArtistPermalinkRegexResult =
  19. soundcloudArtistPermalinkRegex.exec(
  20. soundcloudArtistURLOrPermalinkTrimmed
  21. );
  22. const soundcloudArtistURLRegexResult = soundcloudArtistURLRegex.exec(
  23. soundcloudArtistURLOrPermalinkTrimmed
  24. );
  25. if (
  26. !soundcloudArtistPermalinkRegexResult &&
  27. !soundcloudArtistURLRegexResult
  28. )
  29. return new Toast(
  30. "No Soundcloud URL or permalink found in the supplied value."
  31. );
  32. const userPermalink = soundcloudArtistPermalinkRegexResult
  33. ? soundcloudArtistPermalinkRegexResult.groups.userPermalink
  34. : soundcloudArtistURLRegexResult.groups.userPermalink;
  35. return new Promise((resolve, reject) => {
  36. socket.dispatch("soundcloud.getArtist", userPermalink, res => {
  37. if (res.status === "success") {
  38. const { data } = res;
  39. resolve(data);
  40. soundcloudArtistURLOrPermalink.value = "";
  41. } else if (res.status === "error") {
  42. new Toast(res.message);
  43. reject();
  44. }
  45. });
  46. });
  47. };
  48. const getSoundcloudArtistTracks = artistId =>
  49. new Promise((resolve, reject) => {
  50. socket.dispatch("soundcloud.getArtistTracks", artistId, res => {
  51. if (res.status === "success") {
  52. const { data } = res;
  53. resolve(data);
  54. } else if (res.status === "error") {
  55. new Toast(res.message);
  56. reject();
  57. }
  58. });
  59. });
  60. return {
  61. soundcloudArtistURLOrPermalink,
  62. getSoundcloudArtist,
  63. getSoundcloudArtistTracks
  64. };
  65. };