mirror of
https://github.com/MadeBaruna/paimon-moe.git
synced 2024-12-22 06:25:10 +01:00
Add data sync starting point
This commit is contained in:
parent
3a396169f4
commit
d850e0b921
11 changed files with 168 additions and 8 deletions
2
.env.example
Normal file
2
.env.example
Normal file
|
@ -0,0 +1,2 @@
|
|||
GOOGLE_DRIVE_CLIENT_ID=
|
||||
GOOGLE_DRIVE_API_KEY=
|
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -3,3 +3,4 @@
|
|||
/src/node_modules/@sapper/
|
||||
yarn-error.log
|
||||
/__sapper__/
|
||||
.env
|
|
@ -24,9 +24,10 @@
|
|||
"@rollup/plugin-commonjs": "^14.0.0",
|
||||
"@rollup/plugin-dynamic-import-vars": "^1.1.0",
|
||||
"@rollup/plugin-node-resolve": "^8.0.0",
|
||||
"@rollup/plugin-replace": "^2.2.0",
|
||||
"@rollup/plugin-replace": "^2.3.4",
|
||||
"@rollup/plugin-url": "^5.0.0",
|
||||
"autoprefixer": "^10.0.1",
|
||||
"dotenv": "^8.2.0",
|
||||
"postcss": "^8.1.2",
|
||||
"postcss-load-config": "^3.0.0",
|
||||
"postcss-nested": "^5.0.1",
|
||||
|
|
|
@ -7,6 +7,8 @@ import svelte from 'rollup-plugin-svelte';
|
|||
import babel from '@rollup/plugin-babel';
|
||||
import { terser } from 'rollup-plugin-terser';
|
||||
import config from 'sapper/config/rollup.js';
|
||||
import { config as envConfig } from 'dotenv';
|
||||
|
||||
import pkg from './package.json';
|
||||
|
||||
const mode = process.env.NODE_ENV;
|
||||
|
@ -27,6 +29,9 @@ export default {
|
|||
replace({
|
||||
'process.browser': true,
|
||||
'process.env.NODE_ENV': JSON.stringify(mode),
|
||||
__paimon: JSON.stringify({
|
||||
env: envConfig().parsed,
|
||||
}),
|
||||
}),
|
||||
svelte({
|
||||
dev,
|
||||
|
@ -85,6 +90,9 @@ export default {
|
|||
replace({
|
||||
'process.browser': false,
|
||||
'process.env.NODE_ENV': JSON.stringify(mode),
|
||||
__paimon: JSON.stringify({
|
||||
env: envConfig().parsed,
|
||||
}),
|
||||
}),
|
||||
svelte({
|
||||
generate: 'ssr',
|
||||
|
|
96
src/components/DataSync.svelte
Normal file
96
src/components/DataSync.svelte
Normal file
|
@ -0,0 +1,96 @@
|
|||
<script>
|
||||
import { onMount } from 'svelte';
|
||||
import { driveSignedIn, driveLoading } from '../stores/dataSync';
|
||||
|
||||
const CLIENT_ID = __paimon.env.GOOGLE_DRIVE_CLIENT_ID;
|
||||
const API_KEY = __paimon.env.GOOGLE_DRIVE_API_KEY;
|
||||
const DISCOVERY_DOCS = ['https://www.googleapis.com/discovery/v1/apis/drive/v3/rest'];
|
||||
const SCOPES = 'https://www.googleapis.com/auth/drive.appdata';
|
||||
|
||||
onMount(() => {
|
||||
const script = document.createElement('script');
|
||||
script.onload = handleClientLoad;
|
||||
script.src = 'https://apis.google.com/js/api.js';
|
||||
document.body.appendChild(script);
|
||||
});
|
||||
|
||||
function handleClientLoad() {
|
||||
gapi.load('client:auth2', initClient);
|
||||
}
|
||||
|
||||
function updateSigninStatus(status) {
|
||||
console.log('DRIVE signed in:', status);
|
||||
driveSignedIn.set(status);
|
||||
driveLoading.set(false);
|
||||
|
||||
if (status) {
|
||||
getFiles();
|
||||
}
|
||||
}
|
||||
|
||||
async function getFiles() {
|
||||
try {
|
||||
const { result } = await gapi.client.drive.files.list({
|
||||
spaces: 'appDataFolder',
|
||||
q: "name = 'save.json'",
|
||||
});
|
||||
console.log(result);
|
||||
|
||||
if (result.files.length === 0) {
|
||||
createFile();
|
||||
} else {
|
||||
const data = await gapi.client.drive.files.get({
|
||||
fileId: result.files[0].id,
|
||||
alt: 'media',
|
||||
});
|
||||
console.log(data);
|
||||
}
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
}
|
||||
}
|
||||
|
||||
async function createFile() {
|
||||
try {
|
||||
const { result } = await gapi.client.drive.files.create({
|
||||
resource: {
|
||||
name: 'save.json',
|
||||
parents: ['appDataFolder'],
|
||||
},
|
||||
fields: 'id',
|
||||
});
|
||||
|
||||
const data = await gapi.client.request({
|
||||
path: `/upload/drive/v3/files/${result.id}`,
|
||||
method: 'PATCH',
|
||||
params: {
|
||||
uploadType: 'media',
|
||||
},
|
||||
body: JSON.stringify({ v: __paimon.env.CURRENT_VERSION }),
|
||||
});
|
||||
|
||||
console.log(data);
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
}
|
||||
}
|
||||
|
||||
function initClient() {
|
||||
gapi.client
|
||||
.init({
|
||||
apiKey: API_KEY,
|
||||
clientId: CLIENT_ID,
|
||||
discoveryDocs: DISCOVERY_DOCS,
|
||||
scope: SCOPES,
|
||||
})
|
||||
.then(
|
||||
function () {
|
||||
gapi.auth2.getAuthInstance().isSignedIn.listen(updateSigninStatus);
|
||||
updateSigninStatus(gapi.auth2.getAuthInstance().isSignedIn.get());
|
||||
},
|
||||
function (error) {
|
||||
console.error(error);
|
||||
},
|
||||
);
|
||||
}
|
||||
</script>
|
|
@ -62,4 +62,10 @@
|
|||
image="/images/calculator.png"
|
||||
label="Calculator"
|
||||
href="/calculator" />
|
||||
<SidebarItem
|
||||
on:clicked={close}
|
||||
active={segment === 'settings'}
|
||||
image="/images/settings.png"
|
||||
label="Settings"
|
||||
href="/settings" />
|
||||
</div>
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
import Tailwind from '../components/Tailwindcss.svelte';
|
||||
import Sidebar from '../components/Sidebar/Sidebar.svelte';
|
||||
import Header from '../components/Header.svelte';
|
||||
import DataSync from '../components/DataSync.svelte';
|
||||
|
||||
import { showSidebar } from '../stores/sidebar';
|
||||
|
||||
|
@ -26,3 +27,5 @@
|
|||
Paimon.moe is not affiliated with miHoYo.<br />
|
||||
Genshin Impact, game content and materials are trademarks and copyrights of miHoYo.
|
||||
</p>
|
||||
|
||||
<DataSync />
|
||||
|
|
34
src/routes/settings.svelte
Normal file
34
src/routes/settings.svelte
Normal file
|
@ -0,0 +1,34 @@
|
|||
<script>
|
||||
import { mdiGoogleDrive, mdiLoading } from '@mdi/js';
|
||||
|
||||
import Button from '../components/Button.svelte';
|
||||
import Icon from '../components/Icon.svelte';
|
||||
import { driveSignedIn, driveLoading } from '../stores/dataSync';
|
||||
|
||||
function signIn() {
|
||||
gapi.auth2.getAuthInstance().signIn();
|
||||
}
|
||||
|
||||
function signOut() {
|
||||
gapi.auth2.getAuthInstance().signOut();
|
||||
}
|
||||
</script>
|
||||
|
||||
<div class="lg:ml-64 pt-20 px-8 lg:pt-8">
|
||||
{#if $driveLoading}
|
||||
<Icon path={mdiLoading} color="white" spin />
|
||||
{:else}
|
||||
<p class="text-white">Drive signed in: {$driveSignedIn}</p>
|
||||
{#if !$driveSignedIn}
|
||||
<Button on:click={signIn}>
|
||||
<Icon path={mdiGoogleDrive} className="mr-2" />
|
||||
Sign in to Google Drive
|
||||
</Button>
|
||||
{:else}
|
||||
<Button on:click={signOut}>
|
||||
<Icon path={mdiGoogleDrive} className="mr-2" />
|
||||
Sign out Google Drive
|
||||
</Button>
|
||||
{/if}
|
||||
{/if}
|
||||
</div>
|
4
src/stores/dataSync.js
Normal file
4
src/stores/dataSync.js
Normal file
|
@ -0,0 +1,4 @@
|
|||
import { writable } from 'svelte/store';
|
||||
|
||||
export const driveSignedIn = writable(false);
|
||||
export const driveLoading = writable(true);
|
BIN
static/images/settings.png
Normal file
BIN
static/images/settings.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.9 KiB |
19
yarn.lock
19
yarn.lock
|
@ -917,13 +917,13 @@
|
|||
is-module "^1.0.0"
|
||||
resolve "^1.17.0"
|
||||
|
||||
"@rollup/plugin-replace@^2.2.0":
|
||||
version "2.3.3"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-2.3.3.tgz#cd6bae39444de119f5d905322b91ebd4078562e7"
|
||||
integrity sha512-XPmVXZ7IlaoWaJLkSCDaa0Y6uVo5XQYHhiMFzOd5qSv5rE+t/UJToPIOE56flKIxBFQI27ONsxb7dqHnwSsjKQ==
|
||||
"@rollup/plugin-replace@^2.3.4":
|
||||
version "2.3.4"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-2.3.4.tgz#7dd84c17755d62b509577f2db37eb524d7ca88ca"
|
||||
integrity sha512-waBhMzyAtjCL1GwZes2jaE9MjuQ/DQF2BatH3fRivUF3z0JBFrU0U6iBNC/4WR+2rLKhaAhPWDNPYp4mI6RqdQ==
|
||||
dependencies:
|
||||
"@rollup/pluginutils" "^3.0.8"
|
||||
magic-string "^0.25.5"
|
||||
"@rollup/pluginutils" "^3.1.0"
|
||||
magic-string "^0.25.7"
|
||||
|
||||
"@rollup/plugin-url@^5.0.0":
|
||||
version "5.0.1"
|
||||
|
@ -1335,6 +1335,11 @@ dir-glob@^3.0.1:
|
|||
dependencies:
|
||||
path-type "^4.0.0"
|
||||
|
||||
dotenv@^8.2.0:
|
||||
version "8.2.0"
|
||||
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a"
|
||||
integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==
|
||||
|
||||
electron-to-chromium@^1.3.571:
|
||||
version "1.3.582"
|
||||
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.582.tgz#1adfac5affce84d85b3d7b3dfbc4ade293a6ffc4"
|
||||
|
@ -1753,7 +1758,7 @@ lower-case@^1.1.1:
|
|||
resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac"
|
||||
integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw=
|
||||
|
||||
magic-string@^0.25.2, magic-string@^0.25.5, magic-string@^0.25.7:
|
||||
magic-string@^0.25.2, magic-string@^0.25.7:
|
||||
version "0.25.7"
|
||||
resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051"
|
||||
integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==
|
||||
|
|
Loading…
Reference in a new issue