123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384 |
- 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_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) => {
- setView(SONG_LIST)(dispatch, getState)
- dispatch({
- type: SET_LOADING,
- payload: true
- })
- dispatch({
- type: SET_SCROLLTOP,
- payload: 0
- })
- dispatch({
- type: SET_RESOURCE,
- payload: BEATSAVER.NEW_SONGS
- })
- RESULT_PAGE=0;
- fetch(`${BEATSAVER_BASE_URL}/api/maps/latest`)
- .then(res => res.json())
- .then(data => {
- console.log(data)
- dispatch({
- type: FETCH_NEW,
- 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 fetchTopDownloads = () => (dispatch, getState) => {
- setView(SONG_LIST)(dispatch, getState)
- dispatch({
- type: SET_SCROLLTOP,
- payload: 0
- })
- dispatch({
- type: SET_LOADING,
- payload: true
- })
- dispatch({
- type: SET_RESOURCE,
- payload: BEATSAVER.TOP_DOWNLOADED_SONGS
- })
- RESULT_PAGE=0;
- fetch(`${BEATSAVER_BASE_URL}/api/maps/downloads`)
- .then(res => res.json())
- .then(data => {
- dispatch({
- type: FETCH_TOP_DOWNLOADS,
- payload: data
- })
- dispatch({
- type: SET_LOADING,
- payload: false
- })
- 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 fetchTopFinished = () => (dispatch, getState) => {
- setView(SONG_LIST)(dispatch, getState)
- dispatch({
- type: SET_SCROLLTOP,
- payload: 0
- })
- dispatch({
- type: SET_LOADING,
- payload: true
- })
- dispatch({
- type: SET_RESOURCE,
- payload: BEATSAVER.TOP_FINISHED_SONGS
- })
- RESULT_PAGE=0;
- fetch(`${BEATSAVER_BASE_URL}/api/maps/plays`)
- .then(res => res.json())
- .then(data => {
- dispatch({
- type: FETCH_TOP_FINISHED,
- payload: data
- })
- dispatch({
- type: SET_LOADING,
- payload: false
- })
- 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 fetchLocalSongs = () => (dispatch, getState) => {
- setView(SONG_LIST)(dispatch, getState)
- dispatch({
- type: SET_SCROLLTOP,
- payload: 0
- })
- dispatch({
- type: SET_LOADING,
- payload: true
- })
- dispatch({
- type: SET_RESOURCE,
- payload: LIBRARY.SONGS
- })
- let downloadedSongs = getState().songs.downloadedSongs
- let songs = []
- for(let i = 0; i < downloadedSongs.length; i++) {
- fs.readFile(downloadedSongs[i].file, 'UTF-8', (err, data) => {
- if(err) {
- dispatch({
- type: DISPLAY_WARNING,
- payload: {
- text: `Failed to read ${ downloadedSongs[i].file }: ${ err }`
- }
- })
- return
- }
- let song
- try {
- song = JSON.parse(data)
- } catch(err) {
- dispatch({
- type: DISPLAY_WARNING,
- payload: {
- text: `Failed to parse song: ${ err }`
- }
- })
- return
- }
- song.coverUrl = `file://${ path.join(path.dirname(downloadedSongs[i].file), (song.coverImagePath || song._coverImageFilename)) }`
- song.file = downloadedSongs[i].file
- hashAndWriteToMetadata(downloadedSongs[i].file)(dispatch, getState)
- .then(hash => {
- song.hash = hash
- songs.push(song)
- if(i >= downloadedSongs.length - 1) {
- dispatch({
- type: FETCH_LOCAL_SONGS,
- payload: songs
- })
- dispatch({
- type: SET_LOADING,
- payload: false
- })
- }
- })
- })
- }
- }
- export const loadMore = () => (dispatch, getState) => {
- if(RESULT_PAGE<0) return;
- dispatch({
- type: SET_LOADING_MORE,
- payload: true
- })
- let state = getState()
- 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
- })
- dispatch({
- type: SET_LOADING_MORE,
- payload: false
- })
- 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())
- .then(bsaberData => {
- dispatch({
- type: ADD_BSABER_RATING,
- payload: { i, bsaberData }
- })
- })
- .catch((err) => {
- dispatch({
- type: ADD_BSABER_RATING,
- payload: { i, bsaberData: { overall_rating: 'Error' } }
- })
- })
- }
- })
- .catch((err) => {
- dispatch({
- type: DISPLAY_WARNING,
- payload: {
- text: 'There was error loading more songs. Check your connection to the internet and try again.'
- }
- })
- })
- }
- /*
- export const refresh = () => (dispatch, getState) => {
- switch(getState().resource) {
- case LIBRARY.SONGS:
- fetchLocalSongs()
- return
- default:
- dispatch({
- type: SET_LOADING,
- payload: true
- })
- let state = getState()
- fetch(resourceUrl[state.source.source][state.source.resource] + '/0')
- .then(res => res.json())
- .then(data => {
- dispatch({
- type: REFRESH,
- payload: data
- })
- dispatch({
- type: SET_LOADING,
- payload: false
- })
- })
- }
- }
- */
- export const setScrollTop = scrollTop => dispatch => {
- dispatch({
- type: SET_SCROLLTOP,
- payload: scrollTop
- })
- }
|