✨ (user settings) init user settings with .litenote.json
This commit is contained in:
9
src/modules/repo/interfaces/UserSettings.ts
Normal file
9
src/modules/repo/interfaces/UserSettings.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
export interface UserSettings {
|
||||
fontFamily?:
|
||||
| 'Courgette'
|
||||
| 'IBM Plex Serif'
|
||||
| 'Kiwi Maru'
|
||||
| 'Maven Pro'
|
||||
| 'Noto Sans KR'
|
||||
| 'Tajawal'
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user