|
@@ -0,0 +1,91 @@
|
|
|
+import { ref, computed } from "vue";
|
|
|
+import { useStore } from "vuex";
|
|
|
+
|
|
|
+import Toast from "toasters";
|
|
|
+
|
|
|
+export function useSearchMusare() {
|
|
|
+ const store = useStore();
|
|
|
+
|
|
|
+ const musareSearch = ref({
|
|
|
+ query: "",
|
|
|
+ searchedQuery: "",
|
|
|
+ page: 0,
|
|
|
+ count: 0,
|
|
|
+ resultsLeft: 0,
|
|
|
+ results: [],
|
|
|
+ pageSize: 0
|
|
|
+ });
|
|
|
+
|
|
|
+ const resultsLeftCount = computed(() =>
|
|
|
+ musareSearch.value.count - musareSearch.value.results.length);
|
|
|
+
|
|
|
+ const nextPageResultsCount = computed(() =>
|
|
|
+ Math.min(musareSearch.value.pageSize, resultsLeftCount.value));
|
|
|
+
|
|
|
+ const { socket } = store.state.websockets;
|
|
|
+
|
|
|
+ const searchForMusareSongs = (page, toast = true) => {
|
|
|
+ if (
|
|
|
+ musareSearch.value.page >= page ||
|
|
|
+ musareSearch.value.searchedQuery !== musareSearch.value.query
|
|
|
+ ) {
|
|
|
+ musareSearch.value.results = [];
|
|
|
+ musareSearch.value.page = 0;
|
|
|
+ musareSearch.value.count = 0;
|
|
|
+ musareSearch.value.resultsLeft = 0;
|
|
|
+ musareSearch.value.pageSize = 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ musareSearch.value.searchedQuery = musareSearch.value.query;
|
|
|
+ socket.dispatch(
|
|
|
+ "songs.searchOfficial",
|
|
|
+ musareSearch.value.query,
|
|
|
+ page,
|
|
|
+ res => {
|
|
|
+ if (res.status === "success") {
|
|
|
+ const { data } = res;
|
|
|
+ const { count, pageSize, songs } = data;
|
|
|
+
|
|
|
+ const newSongs = songs.map(song => ({
|
|
|
+ isAddedToQueue: false,
|
|
|
+ ...song
|
|
|
+ }));
|
|
|
+
|
|
|
+ musareSearch.value.results = [
|
|
|
+ ...musareSearch.value.results,
|
|
|
+ ...newSongs
|
|
|
+ ];
|
|
|
+ musareSearch.value.page = page;
|
|
|
+ musareSearch.value.count = count;
|
|
|
+ musareSearch.value.resultsLeft =
|
|
|
+ count - musareSearch.value.results.length;
|
|
|
+ musareSearch.value.pageSize = pageSize;
|
|
|
+ } else if (res.status === "error") {
|
|
|
+ musareSearch.value.results = [];
|
|
|
+ musareSearch.value.page = 0;
|
|
|
+ musareSearch.value.count = 0;
|
|
|
+ musareSearch.value.resultsLeft = 0;
|
|
|
+ musareSearch.value.pageSize = 0;
|
|
|
+ if (toast) new Toast(res.message);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ const addMusareSongToPlaylist = (id, index) => {
|
|
|
+ return new Error("Not done yet.");
|
|
|
+ socket.dispatch(
|
|
|
+ "playlists.addSongToPlaylist",
|
|
|
+ false,
|
|
|
+ id,
|
|
|
+ this.playlist._id,
|
|
|
+ res => {
|
|
|
+ new Toast(res.message);
|
|
|
+ if (res.status === "success")
|
|
|
+ musareSearch.value.results[index].isAddedToQueue = true;
|
|
|
+ }
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ return { musareSearch, resultsLeftCount, nextPageResultsCount, searchForMusareSongs, addMusareSongToPlaylist };
|
|
|
+}
|