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:
LoveEevee
2020-10-29 08:07:56 +03:00
parent 224bf25fc0
commit 3fea149353
17 changed files with 940 additions and 406 deletions

View File

@@ -102,20 +102,6 @@ var translations = {
tw: "遊戲設定",
ko: "게임 설정"
},
browse: {
ja: "参照する…",
en: "Browse…",
cn: "浏览…",
tw: "開啟檔案…",
ko: "찾아보기…"
},
defaultSongList: {
ja: "デフォルト曲リスト",
en: "Default Song List",
cn: "默认歌曲列表",
tw: "默認歌曲列表",
ko: "기본 노래 목록"
},
songOptions: {
ja: "演奏オプション",
en: "Song Options",
@@ -1071,6 +1057,43 @@ var translations = {
cn: "带歌词",
tw: "帶歌詞",
ko: "가사가있는"
},
customSongs: {
title: {
en: "Custom Song List",
},
default: {
ja: "デフォルト曲リスト",
en: "Default Song List",
cn: "默认歌曲列表",
tw: "默認歌曲列表",
ko: "기본 노래 목록"
},
description: {
en: [
"Pick a folder with Taiko chart files in TJA format to play on a custom song list!"
]
},
localFolder: {
en: "Local Folder..."
},
gdriveFolder: {
en: "Google Drive..."
}
},
gpicker: {
myDrive: {
en: "My Drive"
},
starred: {
en: "Starred"
},
sharedWithMe: {
en: "Shared with me"
},
authError: {
en: "Auth error: %s"
}
}
}
var allStrings = {}