(user settings) init user settings with .litenote.json

This commit is contained in:
2021-03-24 22:33:50 +01:00
parent 55faf04d4f
commit 556ddb7f1e
9 changed files with 96 additions and 31 deletions

View File

@@ -0,0 +1,9 @@
export interface UserSettings {
fontFamily?:
| 'Courgette'
| 'IBM Plex Serif'
| 'Kiwi Maru'
| 'Maven Pro'
| 'Noto Sans KR'
| 'Tajawal'
}

View File

@@ -2,6 +2,7 @@ import { useGitHubLogin } from '@/hooks/useGitHubLogin.hook'
import { useMarkdown } from '@/hooks/useMarkdown.hook'
import { useNoteCache } from '@/modules/note/hooks/useNoteCache'
import { RepoFile } from '@/modules/repo/interfaces/RepoFile'
import { UserSettings } from '@/modules/repo/interfaces/UserSettings'
import { Octokit } from '@octokit/rest'
export const getFiles = async (
@@ -75,3 +76,49 @@ export const getMainReadme = async (owner: string, repo: string) => {
return null
}
export const getUserSettingsContent = async (
user: string,
repo: string,
files: RepoFile[]
): Promise<UserSettings | null> => {
const configFile = files.find((file) => file.path === '.litenote.json')
if (!configFile?.sha) {
return null
}
const content = await getFileContent(user, repo, configFile.sha)
if (!content) {
return null
}
return JSON.parse(atob(content)) as UserSettings
}
export const getFileContent = async (
user: string,
repo: string,
sha: string
) => {
const { accessToken } = useGitHubLogin()
const octokit = new Octokit({
auth: accessToken.value
})
if (!user || !repo) {
null
}
const file = await octokit.request(
'GET /repos/{owner}/{repo}/git/blobs/{file_sha}',
{
owner: user,
repo: repo,
file_sha: sha
}
)
return file?.data.content ?? null
}

View File

@@ -1,5 +1,10 @@
import { RepoFile } from '@/modules/repo/interfaces/RepoFile'
import { getFiles, getMainReadme } from '@/modules/repo/services/repo'
import { UserSettings } from '@/modules/repo/interfaces/UserSettings'
import {
getFiles,
getMainReadme,
getUserSettingsContent
} from '@/modules/repo/services/repo'
import { defineStore } from 'pinia'
interface State {
@@ -7,6 +12,7 @@ interface State {
repo: string
files: RepoFile[]
readme: string | null
userSettings: UserSettings | null
}
export const useUserRepoStore = defineStore({
@@ -15,7 +21,8 @@ export const useUserRepoStore = defineStore({
user: '',
repo: '',
files: [],
readme: null
readme: null,
userSettings: null
}),
actions: {
async setUserRepo(newUser: string, newRepo: string) {
@@ -25,6 +32,7 @@ export const useUserRepoStore = defineStore({
getMainReadme(newUser, newRepo),
getFiles(newUser, newRepo)
])
this.userSettings = await getUserSettingsContent(newUser, newRepo, files)
this.readme = readme
this.files = files