editSong.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. /* eslint no-param-reassign: 0 */
  2. export default {
  3. namespaced: true,
  4. state: {
  5. video: {
  6. player: null,
  7. paused: true,
  8. playerReady: false,
  9. autoPlayed: false,
  10. currentTime: 0,
  11. playbackRate: 1
  12. },
  13. songId: null,
  14. song: {},
  15. originalSong: {},
  16. reports: [],
  17. tab: "discogs",
  18. newSong: false
  19. },
  20. getters: {},
  21. actions: {
  22. showTab: ({ commit }, tab) => commit("showTab", tab),
  23. editSong: ({ commit }, song) => commit("editSong", song),
  24. setSong: ({ commit }, song) => commit("setSong", song),
  25. updateOriginalSong: ({ commit }, song) =>
  26. commit("updateOriginalSong", song),
  27. resetSong: ({ commit }, songId) => commit("resetSong", songId),
  28. stopVideo: ({ commit }) => commit("stopVideo"),
  29. hardStopVideo: ({ commit }) => commit("hardStopVideo"),
  30. loadVideoById: ({ commit }, id, skipDuration) =>
  31. commit("loadVideoById", id, skipDuration),
  32. pauseVideo: ({ commit }, status) => commit("pauseVideo", status),
  33. getCurrentTime: ({ commit, state }, fixedVal) =>
  34. new Promise(resolve => {
  35. commit("getCurrentTime", fixedVal);
  36. resolve(state.video.currentTime);
  37. }),
  38. updateSongField: ({ commit }, data) => commit("updateSongField", data),
  39. selectDiscogsInfo: ({ commit }, discogsInfo) =>
  40. commit("selectDiscogsInfo", discogsInfo),
  41. updateReports: ({ commit }, reports) =>
  42. commit("updateReports", reports),
  43. resolveReport: ({ commit }, reportId) =>
  44. commit("resolveReport", reportId),
  45. updateYoutubeId: ({ commit }, youtubeId) => {
  46. commit("updateYoutubeId", youtubeId);
  47. commit("loadVideoById", youtubeId, 0);
  48. },
  49. updateTitle: ({ commit }, title) => commit("updateTitle", title),
  50. updateThumbnail: ({ commit }, thumbnail) =>
  51. commit("updateThumbnail", thumbnail),
  52. setPlaybackRate: ({ commit }, rate) => commit("setPlaybackRate", rate)
  53. },
  54. mutations: {
  55. showTab(state, tab) {
  56. state.tab = tab;
  57. },
  58. editSong(state, song) {
  59. state.newSong = !!song.newSong;
  60. state.songId = song.newSong ? null : song.songId;
  61. state.prefillData = song.prefill ? song.prefill : {};
  62. },
  63. setSong(state, song) {
  64. if (song.discogs === undefined) song.discogs = null;
  65. state.originalSong = JSON.parse(JSON.stringify(song));
  66. state.song = { ...song };
  67. },
  68. updateOriginalSong(state, song) {
  69. state.originalSong = JSON.parse(JSON.stringify(song));
  70. },
  71. resetSong(state, songId) {
  72. if (state.songId === songId) state.songId = "";
  73. if (state.song && state.song._id === songId) state.song = {};
  74. if (state.originalSong && state.originalSong._id === songId)
  75. state.originalSong = {};
  76. },
  77. stopVideo(state) {
  78. if (state.video.player && state.video.player.pauseVideo) {
  79. state.video.player.pauseVideo();
  80. state.video.player.seekTo(0);
  81. }
  82. },
  83. hardStopVideo(state) {
  84. if (state.video.player && state.video.player.stopVideo) {
  85. state.video.player.stopVideo();
  86. }
  87. },
  88. loadVideoById(state, id, skipDuration) {
  89. state.song.duration = -1;
  90. state.video.player.loadVideoById(id, skipDuration);
  91. },
  92. pauseVideo(state, status) {
  93. if (
  94. (state.video.player && state.video.player.pauseVideo) ||
  95. state.video.playVideo
  96. ) {
  97. if (status) state.video.player.pauseVideo();
  98. else state.video.player.playVideo();
  99. }
  100. state.video.paused = status;
  101. },
  102. getCurrentTime(state, fixedVal) {
  103. if (!state.playerReady) state.video.currentTime = 0;
  104. else {
  105. Promise.resolve(state.video.player.getCurrentTime()).then(
  106. time => {
  107. if (fixedVal)
  108. Promise.resolve(time.toFixed(fixedVal)).then(
  109. fixedTime => {
  110. state.video.currentTime = fixedTime;
  111. }
  112. );
  113. else state.video.currentTime = time;
  114. }
  115. );
  116. }
  117. },
  118. updateSongField(state, data) {
  119. state.song[data.field] = data.value;
  120. },
  121. selectDiscogsInfo(state, discogsInfo) {
  122. state.song.discogs = discogsInfo;
  123. },
  124. updateReports(state, reports) {
  125. state.reports = reports;
  126. },
  127. resolveReport(state, reportId) {
  128. state.reports = state.reports.filter(
  129. report => report._id !== reportId
  130. );
  131. },
  132. updateYoutubeId(state, youtubeId) {
  133. state.song.youtubeId = youtubeId;
  134. },
  135. updateTitle(state, title) {
  136. state.song.title = title;
  137. },
  138. updateThumbnail(state, thumbnail) {
  139. state.song.thumbnail = thumbnail;
  140. },
  141. setPlaybackRate(state, rate) {
  142. if (rate) {
  143. state.video.playbackRate = rate;
  144. state.video.player.setPlaybackRate(rate);
  145. } else if (
  146. state.video.player.getPlaybackRate() !== undefined &&
  147. state.video.playbackRate !==
  148. state.video.player.getPlaybackRate()
  149. ) {
  150. state.video.player.setPlaybackRate(state.video.playbackRate);
  151. state.video.playbackRate = state.video.player.getPlaybackRate();
  152. }
  153. }
  154. }
  155. };