ImportSongs: Add Google Drive support
- Adds a new page for importing custom songs, where it is possible to pick a local folder (desktop only) or a Google Drive folder (desktop and Android)
- This feature is disabled on iOS due to the lack of OGG audio support in the browser
- In order to not get rate limited, a TJA file is parsed for metadata only when the song is clicked in the song selection, rather than all at once at import time
- The instance maintainer will need to provide the API credentials in the config.py file to enable this feature
- This requires a new project to be created at console.cloud.google.com
- Drive API will have to be enabled
- API and OAuth keys should be created
- API key can be restricted to only have Google Drive and Google Picker APIs
- OAuth Client ID should have Web Application type and JavaScript origins set
- Editing the OAuth consent screen to have a name and icon is recommended
- It is semi-required to submit the consent screen for verification as the permission to download all of the Drive files will be asked.
- Note that the email of the maintainer is publicly visible on the consent screen
- The project number can be found in the IAM & Admin settings page
This commit is contained in:
@@ -246,23 +246,15 @@ class Controller{
|
||||
var songObj = assets.songs.find(song => song.id === this.selectedSong.folder)
|
||||
var promises = []
|
||||
if(songObj.chart && songObj.chart !== "blank"){
|
||||
var reader = new FileReader()
|
||||
promises.push(pageEvents.load(reader).then(event => {
|
||||
this.songData = event.target.result.replace(/\0/g, "").split("\n")
|
||||
promises.push(songObj.chart.read(this.selectedSong.type === "tja" ? "sjis" : undefined).then(data => {
|
||||
this.songData = data.replace(/\0/g, "").split("\n")
|
||||
return Promise.resolve()
|
||||
}))
|
||||
if(this.selectedSong.type === "tja"){
|
||||
reader.readAsText(songObj.chart, "sjis")
|
||||
}else{
|
||||
reader.readAsText(songObj.chart)
|
||||
}
|
||||
}
|
||||
if(songObj.lyricsFile){
|
||||
var reader = new FileReader()
|
||||
promises.push(pageEvents.load(reader).then(event => {
|
||||
promises.push(songObj.lyricsFile.read().then(event => {
|
||||
songObj.lyricsData = event.target.result
|
||||
}, () => Promise.resolve()), songObj.lyricsFile.webkitRelativePath)
|
||||
reader.readAsText(songObj.lyricsFile)
|
||||
}, () => Promise.resolve()), songObj.lyricsFile.path)
|
||||
}
|
||||
Promise.all(promises).then(resolve)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user