|
@@ -1,18 +1,74 @@
|
|
|
-import { FETCH_NEW, FETCH_TOP_DOWNLOADS, FETCH_TOP_FINISHED, FETCH_LOCAL_SONGS, ADD_BSABER_RATING, SET_SCROLLTOP, SET_LOADING, SET_LOADING_MORE, LOAD_MORE, SET_RESOURCE, DISPLAY_WARNING } from './types'
|
|
|
+import { FETCH_NEW, FETCH_TOP_DOWNLOADS, FETCH_TOP_FINISHED, FETCH_SEARCH, FETCH_LOCAL_SONGS, ADD_BSABER_RATING, SET_SCROLLTOP, SET_LOADING, SET_LOADING_MORE, LOAD_MORE, SET_RESOURCE, DISPLAY_WARNING } from './types'
|
|
|
import { SONG_LIST } from '../constants/views'
|
|
|
import { BEATSAVER, LIBRARY } from '../constants/resources'
|
|
|
import { BEATSAVER_BASE_URL, BSABER_BASE_URL } from '../constants/urls'
|
|
|
import { hashAndWriteToMetadata } from './queueActions'
|
|
|
import { setView } from './viewActions'
|
|
|
+import { stat } from 'original-fs'
|
|
|
|
|
|
const { remote } = window.require('electron')
|
|
|
const fs = remote.require('fs')
|
|
|
const path = remote.require('path')
|
|
|
|
|
|
+var SEARCH_KEYWORD = "tv-size";
|
|
|
+var RESULT_PAGE=0;
|
|
|
+
|
|
|
const resourceUrl = {
|
|
|
'BEATSAVER_NEW_SONGS': `${BEATSAVER_BASE_URL}/api/maps/latest`,
|
|
|
'BEATSAVER_TOP_DOWNLOADED_SONGS': `${BEATSAVER_BASE_URL}/api/maps/downloads`,
|
|
|
- 'BEATSAVER_TOP_FINISHED_SONGS': `${BEATSAVER_BASE_URL}/api/maps/plays`
|
|
|
+ 'BEATSAVER_TOP_FINISHED_SONGS': `${BEATSAVER_BASE_URL}/api/maps/plays`,
|
|
|
+ 'BEATSAVER_SEARCH_SONGS':`${BEATSAVER_BASE_URL}/api/search/text`
|
|
|
+}
|
|
|
+
|
|
|
+export const fetchSearch = () => (dispatch, getState) => {
|
|
|
+ setView(SONG_LIST)(dispatch, getState)
|
|
|
+ dispatch({
|
|
|
+ type: SET_LOADING,
|
|
|
+ payload: true
|
|
|
+ })
|
|
|
+ dispatch({
|
|
|
+ type: SET_SCROLLTOP,
|
|
|
+ payload: 0
|
|
|
+ })
|
|
|
+ dispatch({
|
|
|
+ type: SET_RESOURCE,
|
|
|
+ payload: BEATSAVER.SEARCH_SONGS
|
|
|
+ })
|
|
|
+
|
|
|
+ RESULT_PAGE=0;
|
|
|
+ SEARCH_KEYWORD = document.getElementById("SearchSongsInput").value.trim() === ""
|
|
|
+ ? "tv-size" : document.getElementById("SearchSongsInput").value.trim() ;
|
|
|
+
|
|
|
+ fetch(`${BEATSAVER_BASE_URL}/api/search/text/0?q=${SEARCH_KEYWORD}`)
|
|
|
+ .then(res => res.json())
|
|
|
+ .then(data => {
|
|
|
+ console.log(data)
|
|
|
+ dispatch({
|
|
|
+ type: FETCH_SEARCH,
|
|
|
+ payload: data
|
|
|
+ })
|
|
|
+ dispatch({
|
|
|
+ type: SET_LOADING,
|
|
|
+ payload: false
|
|
|
+ })
|
|
|
+ console.log(data);
|
|
|
+ for(let i = 0; i < data.docs.length; i++) {
|
|
|
+ fetch(`${BSABER_BASE_URL}/wp-json/bsaber-api/songs/${data.docs[i].key}/ratings`)
|
|
|
+ .then(res => res.json())
|
|
|
+ .then(bsaberData => {
|
|
|
+ dispatch({
|
|
|
+ type: ADD_BSABER_RATING,
|
|
|
+ payload: { i, bsaberData }
|
|
|
+ })
|
|
|
+ })
|
|
|
+ .catch((err) => {
|
|
|
+ dispatch({
|
|
|
+ type: ADD_BSABER_RATING,
|
|
|
+ payload: { i, bsaberData: { overall_rating: 'Error' } }
|
|
|
+ })
|
|
|
+ })
|
|
|
+ }
|
|
|
+ })
|
|
|
}
|
|
|
|
|
|
export const fetchNew = () => (dispatch, getState) => {
|
|
@@ -29,6 +85,9 @@ export const fetchNew = () => (dispatch, getState) => {
|
|
|
type: SET_RESOURCE,
|
|
|
payload: BEATSAVER.NEW_SONGS
|
|
|
})
|
|
|
+
|
|
|
+ RESULT_PAGE=0;
|
|
|
+
|
|
|
fetch(`${BEATSAVER_BASE_URL}/api/maps/latest`)
|
|
|
.then(res => res.json())
|
|
|
.then(data => {
|
|
@@ -75,6 +134,9 @@ export const fetchTopDownloads = () => (dispatch, getState) => {
|
|
|
type: SET_RESOURCE,
|
|
|
payload: BEATSAVER.TOP_DOWNLOADED_SONGS
|
|
|
})
|
|
|
+
|
|
|
+ RESULT_PAGE=0;
|
|
|
+
|
|
|
fetch(`${BEATSAVER_BASE_URL}/api/maps/downloads`)
|
|
|
.then(res => res.json())
|
|
|
.then(data => {
|
|
@@ -86,7 +148,7 @@ export const fetchTopDownloads = () => (dispatch, getState) => {
|
|
|
type: SET_LOADING,
|
|
|
payload: false
|
|
|
})
|
|
|
- for(let i = 0; i < data.songs.length; i++) {
|
|
|
+ for(let i = 0; i < data.docs.length; i++) {
|
|
|
fetch(`${BSABER_BASE_URL}/wp-json/bsaber-api/songs/${data.docs[i].key}/ratings`)
|
|
|
.then(res => res.json())
|
|
|
.then(bsaberData => {
|
|
@@ -119,6 +181,9 @@ export const fetchTopFinished = () => (dispatch, getState) => {
|
|
|
type: SET_RESOURCE,
|
|
|
payload: BEATSAVER.TOP_FINISHED_SONGS
|
|
|
})
|
|
|
+
|
|
|
+ RESULT_PAGE=0;
|
|
|
+
|
|
|
fetch(`${BEATSAVER_BASE_URL}/api/maps/plays`)
|
|
|
.then(res => res.json())
|
|
|
.then(data => {
|
|
@@ -211,16 +276,42 @@ export const fetchLocalSongs = () => (dispatch, getState) => {
|
|
|
}
|
|
|
|
|
|
export const loadMore = () => (dispatch, getState) => {
|
|
|
+
|
|
|
+ if(RESULT_PAGE<0) return;
|
|
|
+
|
|
|
dispatch({
|
|
|
type: SET_LOADING_MORE,
|
|
|
payload: true
|
|
|
})
|
|
|
let state = getState()
|
|
|
- fetch(resourceUrl[state.resource] + '/' + state.songs.songs.length)
|
|
|
+
|
|
|
+ let url = state.resource === "BEATSAVER_SEARCH_SONGS"
|
|
|
+ ? resourceUrl[state.resource] + '/' + (++RESULT_PAGE) + `?q=${SEARCH_KEYWORD}`
|
|
|
+ : resourceUrl[state.resource] + '/' + (++RESULT_PAGE);
|
|
|
+
|
|
|
+ fetch(url)
|
|
|
.then(res => {
|
|
|
return res.json()
|
|
|
})
|
|
|
.then(data => {
|
|
|
+ if(data.docs.length===0){
|
|
|
+ dispatch({
|
|
|
+ type: SET_LOADING_MORE,
|
|
|
+ payload: false
|
|
|
+ })
|
|
|
+
|
|
|
+ dispatch({
|
|
|
+ type: DISPLAY_WARNING,
|
|
|
+ payload: {
|
|
|
+ text: 'No more'
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ RESULT_PAGE=-1;
|
|
|
+
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
dispatch({
|
|
|
type: LOAD_MORE,
|
|
|
payload: data
|
|
@@ -229,7 +320,7 @@ export const loadMore = () => (dispatch, getState) => {
|
|
|
type: SET_LOADING_MORE,
|
|
|
payload: false
|
|
|
})
|
|
|
- console.log(data)
|
|
|
+
|
|
|
for(let i = state.songs.songs.length; i < state.songs.songs.length + data.docs.length; i++) {
|
|
|
fetch(`${BSABER_BASE_URL}/wp-json/bsaber-api/songs/${data.docs[i - state.songs.songs.length].key}/ratings`)
|
|
|
.then(res => res.json())
|