feat: add export to Obsidian feature (#998)

Co-authored-by: zjnbwxq <zjnbwxq@users.noreply.github.com>
Co-authored-by: Stephen Zhou <38493346+hyoban@users.noreply.github.com>
This commit is contained in:
Xiaoqi_Weng 2024-10-21 03:52:37 +01:00 committed by GitHub
parent 93461e8ad7
commit e875edfd57
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
27 changed files with 228 additions and 6 deletions

View File

@ -1,3 +1,5 @@
import fs from "node:fs"
import fsp from "node:fs/promises"
import path from "node:path"
import { getRendererHandlers } from "@egoist/tipc/main"
@ -225,6 +227,46 @@ export const appRoute = {
}),
clearAllData: t.procedure.action(clearAllData),
saveToObsidian: t.procedure
.input<{
url: string
title: string
content: string
author: string
publishedAt: string
vaultPath: string
}>()
.action(async ({ input }) => {
try {
const { url, title, content, author, publishedAt, vaultPath } = input
const fileName = `${(title || publishedAt).trim().slice(0, 20)}.md`
const filePath = path.join(vaultPath, fileName)
const exists = fs.existsSync(filePath)
if (exists) {
return { success: false, error: "File already exists" }
}
const markdown = `---
url: ${url}
author: ${author}
publishedAt: ${publishedAt}
---
# ${title}
${content}
`
await fsp.writeFile(filePath, markdown, "utf-8")
return { success: true }
} catch (error) {
console.error("Failed to save to Obsidian:", error)
const errorMessage = error instanceof Error ? error.message : String(error)
return { success: false, error: errorMessage }
}
}),
}
interface Sender extends Electron.WebContents {

View File

@ -19,6 +19,10 @@ export const createDefaultSettings = (): IntegrationSettings => ({
enableOmnivore: false,
omnivoreEndpoint: "",
omnivoreToken: "",
// obsidian
enableObsidian: false,
obsidianVaultPath: "",
})
export const {

View File

@ -0,0 +1,18 @@
import type { SVGProps } from "react"
export function SimpleIconsObsidian(props: SVGProps<SVGSVGElement>) {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
width="1em"
height="1em"
viewBox="0 0 512 512"
{...props}
>
<path
fill="currentColor"
d="M359.9 434.3c-2.6 19.1-21.3 34-40 28.9-26.4-7.3-57-18.7-84.7-20.8l-42.3-3.2a27.9 27.9 0 0 1-18-8.4l-73-75a27.9 27.9 0 0 1-5.4-31s45.1-99 46.8-104.2c1.7-5.1 7.8-50 11.4-74.2a28 28 0 0 1 9-16.6l86.2-77.5a28 28 0 0 1 40.6 3.5l72.5 92a29.7 29.7 0 0 1 6.2 18.3c0 17.4 1.5 53.2 11.1 76.3a303 303 0 0 0 35.6 58.5 14 14 0 0 1 1.1 15.7c-6.4 10.8-18.9 31.4-36.7 57.9a143.3 143.3 0 0 0-20.4 59.8Z"
/>
</svg>
)
}

View File

@ -1,5 +1,6 @@
export * from "./collections/eagle"
export * from "./collections/instapaper"
export * from "./collections/obsidian"
export * from "./collections/omnivore"
export * from "./collections/readwise"
export * from "./collections/rss3"

View File

@ -25,6 +25,7 @@ import { mountLottie } from "~/components/ui/lottie-container"
import {
SimpleIconsEagle,
SimpleIconsInstapaper,
SimpleIconsObsidian,
SimpleIconsOmnivore,
SimpleIconsReadwise,
} from "~/components/ui/platform-icon/icons"
@ -171,6 +172,34 @@ export const useEntryActions = ({
const enableOmnivore = useIntegrationSettingKey("enableOmnivore")
const omnivoreToken = useIntegrationSettingKey("omnivoreToken")
const omnivoreEndpoint = useIntegrationSettingKey("omnivoreEndpoint")
const enableObsidian = useIntegrationSettingKey("enableObsidian")
const obsidianVaultPath = useIntegrationSettingKey("obsidianVaultPath")
const isObsidianEnabled = enableObsidian && !!obsidianVaultPath
const saveToObsidian = useMutation({
mutationKey: ["save-to-obsidian"],
mutationFn: async (data: {
url: string
title: string
content: string
author: string
publishedAt: string
vaultPath: string
}) => {
return await tipcClient?.saveToObsidian(data)
},
onSuccess: (data) => {
if (data?.success) {
toast.success(t("entry_actions.saved_to_obsidian"), {
duration: 3000,
})
} else {
toast.error(`${t("entry_actions.failed_to_save_to_obsidian")}: ${data?.error}`, {
duration: 3000,
})
}
},
})
const checkEagle = useQuery({
queryKey: ["check-eagle"],
@ -370,6 +399,24 @@ export const useEntryActions = ({
}
},
},
{
name: t("entry_actions.save_to_obsidian"),
icon: <SimpleIconsObsidian />,
key: "saveToObsidian",
hide: !isObsidianEnabled || !populatedEntry?.entries?.url,
onClick: () => {
if (!isObsidianEnabled || !populatedEntry?.entries?.url) return
saveToObsidian.mutate({
url: populatedEntry.entries.url,
title: populatedEntry.entries.title || "",
content: populatedEntry.entries.content || "",
author: populatedEntry.entries.author || "",
publishedAt: populatedEntry.entries.publishedAt || "",
vaultPath: obsidianVaultPath,
})
},
},
{
key: "tip",
shortcut: shortcuts.entry.tip.key,
@ -534,9 +581,16 @@ export const useEntryActions = ({
enableInstapaper,
instapaperPassword,
instapaperUsername,
enableOmnivore,
omnivoreToken,
omnivoreEndpoint,
isObsidianEnabled,
isInbox,
feed?.ownerUserId,
type,
showSourceContent,
obsidianVaultPath,
saveToObsidian,
openTipModal,
collect,
uncollect,

View File

@ -7,6 +7,7 @@ import { Divider } from "~/components/ui/divider"
import {
SimpleIconsEagle,
SimpleIconsInstapaper,
SimpleIconsObsidian,
SimpleIconsOmnivore,
SimpleIconsReadwise,
} from "~/components/ui/platform-icon/icons"
@ -151,6 +152,24 @@ export const SettingIntegration = () => {
</>
),
}),
{
type: "title",
value: (
<span className="flex items-center gap-2 font-bold">
<SimpleIconsObsidian />
{t("integration.obsidian.title")}
</span>
),
},
defineSettingItem("enableObsidian", {
label: t("integration.obsidian.enable.label"),
description: t("integration.obsidian.enable.description"),
}),
defineSettingItem("obsidianVaultPath", {
label: t("integration.obsidian.vaultPath.label"),
vertical: true,
description: t("integration.obsidian.vaultPath.description"),
}),
BottomTip,
]}

View File

@ -17,15 +17,18 @@
"entry_actions.copy_link": "نسخ الرابط",
"entry_actions.failed_to_save_to_eagle": "فشل في الحفظ إلى Eagle.",
"entry_actions.failed_to_save_to_instapaper": "فشل في الحفظ إلى Instapaper.",
"entry_actions.failed_to_save_to_obsidian": "فشل في الحفظ إلى Obsidian.",
"entry_actions.failed_to_save_to_readwise": "فشل في الحفظ إلى Readwise.",
"entry_actions.mark_as_read": "تحديد كمقروء",
"entry_actions.mark_as_unread": "تحديد كغير مقروء",
"entry_actions.open_in_browser": "فتح في المتصفح",
"entry_actions.save_media_to_eagle": "حفظ الوسائط إلى Eagle",
"entry_actions.save_to_instapaper": "حفظ إلى Instapaper",
"entry_actions.save_to_obsidian": "حفظ إلى Obsidian",
"entry_actions.save_to_readwise": "حفظ إلى Readwise",
"entry_actions.saved_to_eagle": "تم الحفظ إلى Eagle.",
"entry_actions.saved_to_instapaper": "تم الحفظ إلى Instapaper.",
"entry_actions.saved_to_obsidian": "تم الحفظ إلى Obsidian.",
"entry_actions.saved_to_readwise": "تم الحفظ إلى Readwise.",
"entry_actions.share": "مشاركة",
"entry_actions.star": "تمييز بنجمة",

View File

@ -17,15 +17,18 @@
"entry_actions.copy_link": "نسخ الرابط",
"entry_actions.failed_to_save_to_eagle": "فشل في الحفظ إلى Eagle.",
"entry_actions.failed_to_save_to_instapaper": "فشل في الحفظ إلى Instapaper.",
"entry_actions.failed_to_save_to_obsidian": "فشل في الحفظ إلى Obsidian.",
"entry_actions.failed_to_save_to_readwise": "فشل في الحفظ إلى Readwise.",
"entry_actions.mark_as_read": "تحديد كمقروء",
"entry_actions.mark_as_unread": "تحديد كغير مقروء",
"entry_actions.open_in_browser": "فتح في المتصفح",
"entry_actions.save_media_to_eagle": "حفظ الوسائط إلى Eagle",
"entry_actions.save_to_instapaper": "حفظ إلى Instapaper",
"entry_actions.save_to_obsidian": "حفظ إلى Obsidian",
"entry_actions.save_to_readwise": "حفظ إلى Readwise",
"entry_actions.saved_to_eagle": "تم الحفظ إلى Eagle.",
"entry_actions.saved_to_instapaper": "تم الحفظ إلى Instapaper.",
"entry_actions.saved_to_obsidian": "تم الحفظ إلى Obsidian.",
"entry_actions.saved_to_readwise": "تم الحفظ إلى Readwise.",
"entry_actions.share": "مشاركة",
"entry_actions.star": "إضافة إلى المفضلة",

View File

@ -17,15 +17,18 @@
"entry_actions.copy_link": "نسخ الرابط",
"entry_actions.failed_to_save_to_eagle": "فشل في الحفظ إلى Eagle.",
"entry_actions.failed_to_save_to_instapaper": "فشل في الحفظ إلى Instapaper.",
"entry_actions.failed_to_save_to_obsidian": "فشل في الحفظ إلى Obsidian",
"entry_actions.failed_to_save_to_readwise": "فشل في الحفظ إلى Readwise.",
"entry_actions.mark_as_read": "وضع علامة كمقروء",
"entry_actions.mark_as_unread": "وضع علامة كغير مقروء",
"entry_actions.open_in_browser": "فتح في المتصفح",
"entry_actions.save_media_to_eagle": "حفظ الوسائط إلى Eagle",
"entry_actions.save_to_instapaper": "حفظ إلى Instapaper",
"entry_actions.save_to_obsidian": "حفظ إلى Obsidian",
"entry_actions.save_to_readwise": "حفظ إلى Readwise",
"entry_actions.saved_to_eagle": "تم الحفظ إلى Eagle.",
"entry_actions.saved_to_instapaper": "تم الحفظ إلى Instapaper.",
"entry_actions.saved_to_obsidian": "تم الحفظ إلى Obsidian.",
"entry_actions.saved_to_readwise": "تم الحفظ إلى Readwise.",
"entry_actions.share": "مشاركة",
"entry_actions.star": "تفضيل",

View File

@ -17,16 +17,19 @@
"entry_actions.copy_link": "نسخ الرابط",
"entry_actions.failed_to_save_to_eagle": "فشل الحفظ إلى Eagle.",
"entry_actions.failed_to_save_to_instapaper": "فشل الحفظ إلى Instapaper.",
"entry_actions.failed_to_save_to_obsidian": "فشل الحفظ في Obsidian",
"entry_actions.failed_to_save_to_readwise": "فشل الحفظ إلى Readwise.",
"entry_actions.mark_as_read": "وضع علامة كمقروء",
"entry_actions.mark_as_unread": "وضع علامة كغير مقروء",
"entry_actions.open_in_browser": "فتح في المتصفح",
"entry_actions.save_media_to_eagle": "حفظ الوسائط إلى Eagle",
"entry_actions.save_to_instapaper": "حفظ إلى Instapaper",
"entry_actions.save_to_obsidian": "حفظ في Obsidian",
"entry_actions.save_to_readwise": "حفظ إلى Readwise",
"entry_actions.saved_to_eagle": "تم الحفظ إلى Eagle.",
"entry_actions.saved_to_instapaper": "تم الحفظ إلى Instapaper.",
"entry_actions.saved_to_readwise": "تم الحفظ إلى Readwise.",
"entry_actions.saved_to_obsidian": "تم الحفظ في Obsidian",
"entry_actions.saved_to_readwise": "تم الحفظ في Readwise.",
"entry_actions.share": "مشاركة",
"entry_actions.star": "إضافة إلى المفضلة",
"entry_actions.starred": "مضاف إلى المفضلة.",

View File

@ -17,15 +17,18 @@
"entry_actions.copy_link": "Link kopieren",
"entry_actions.failed_to_save_to_eagle": "Speichern in Eagle fehlgeschlagen.",
"entry_actions.failed_to_save_to_instapaper": "Speichern in Instapaper fehlgeschlagen.",
"entry_actions.failed_to_save_to_obsidian": "Speichern in Obsidian fehlgeschlagen",
"entry_actions.failed_to_save_to_readwise": "Speichern in Readwise fehlgeschlagen.",
"entry_actions.mark_as_read": "Als gelesen markieren",
"entry_actions.mark_as_unread": "Als ungelesen markieren",
"entry_actions.open_in_browser": "Im Browser öffnen",
"entry_actions.save_media_to_eagle": "Medien in Eagle speichern",
"entry_actions.save_to_instapaper": "In Instapaper speichern",
"entry_actions.save_to_obsidian": "In Obsidian speichern",
"entry_actions.save_to_readwise": "In Readwise speichern",
"entry_actions.saved_to_eagle": "In Eagle gespeichert.",
"entry_actions.saved_to_instapaper": "In Instapaper gespeichert.",
"entry_actions.saved_to_obsidian": "In Obsidian gespeichert",
"entry_actions.saved_to_readwise": "In Readwise gespeichert.",
"entry_actions.share": "Teilen",
"entry_actions.star": "Favorisieren",

View File

@ -59,6 +59,7 @@
"entry_actions.copy_title": "Copy Title",
"entry_actions.failed_to_save_to_eagle": "Failed to save to Eagle.",
"entry_actions.failed_to_save_to_instapaper": "Failed to save to Instapaper.",
"entry_actions.failed_to_save_to_obsidian": "Failed to save to Obsidian",
"entry_actions.failed_to_save_to_omnivore": "Failed to save to Omnivore.",
"entry_actions.failed_to_save_to_readwise": "Failed to save to Readwise.",
"entry_actions.mark_as_read": "Mark as Read",
@ -67,10 +68,12 @@
"entry_actions.recent_reader": "Recent reader:",
"entry_actions.save_media_to_eagle": "Save Media To Eagle",
"entry_actions.save_to_instapaper": "Save To Instapaper",
"entry_actions.save_to_obsidian": "Save to Obsidian",
"entry_actions.save_to_omnivore": "Save To Omnivore",
"entry_actions.save_to_readwise": "Save To Readwise",
"entry_actions.saved_to_eagle": "Saved To Eagle.",
"entry_actions.saved_to_instapaper": "Saved To Instapaper.",
"entry_actions.saved_to_obsidian": "Saved to Obsidian",
"entry_actions.saved_to_omnivore": "Saved To Omnivore.",
"entry_actions.saved_to_readwise": "Saved To Readwise.",
"entry_actions.share": "Share",

View File

@ -15,12 +15,15 @@
"discover.rss_url": "RSS URL",
"discover.select_placeholder": "Seleccionar",
"entry_actions.copy_link": "Copiar enlace",
"entry_actions.failed_to_save_to_obsidian": "Error al guardar en Obsidian",
"entry_actions.mark_as_read": "Marcar como leído",
"entry_actions.mark_as_unread": "Marcar como no leído",
"entry_actions.open_in_browser": "Abrir en el navegador",
"entry_actions.save_media_to_eagle": "Guardar medios en Eagle",
"entry_actions.save_to_instapaper": "Guardar en Instapaper",
"entry_actions.save_to_obsidian": "Guardar en Obsidian",
"entry_actions.save_to_readwise": "Guardar en Readwise",
"entry_actions.saved_to_obsidian": "Guardado en Obsidian",
"entry_actions.share": "Compartir",
"entry_actions.star": "Agregar a favoritos",
"entry_actions.tip": "Dar propina",

View File

@ -55,6 +55,7 @@
"entry_actions.copy_title": "复制标题",
"entry_actions.failed_to_save_to_eagle": "保存到 Eagle 失败",
"entry_actions.failed_to_save_to_instapaper": "保存到 Instapaper 失败",
"entry_actions.failed_to_save_to_obsidian": "保存到 Obsidian 失败",
"entry_actions.failed_to_save_to_omnivore": "保存到 Omnivore 失败",
"entry_actions.failed_to_save_to_readwise": "保存到 Readwise 失败",
"entry_actions.mark_as_read": "标记为已读",
@ -63,10 +64,12 @@
"entry_actions.recent_reader": "最近阅读者:",
"entry_actions.save_media_to_eagle": "保存到 Eagle",
"entry_actions.save_to_instapaper": "保存到 Instapaper",
"entry_actions.save_to_obsidian": "保存到 Obsidian",
"entry_actions.save_to_omnivore": "保存到 Omnivore",
"entry_actions.save_to_readwise": "保存到 Readwise",
"entry_actions.saved_to_eagle": "保存到 Eagle",
"entry_actions.saved_to_instapaper": "保存到 Instapaper.",
"entry_actions.saved_to_obsidian": "已保存到 Obsidian",
"entry_actions.saved_to_omnivore": "保存到 Omnivore.",
"entry_actions.saved_to_readwise": "保存到 Readwise.",
"entry_actions.share": "分享",

View File

@ -55,6 +55,7 @@
"entry_actions.copy_title": "複製標題",
"entry_actions.failed_to_save_to_eagle": "無法保存至 Eagle",
"entry_actions.failed_to_save_to_instapaper": "無法保存至 Instapaper",
"entry_actions.failed_to_save_to_obsidian": "儲存至 Obsidian 失敗",
"entry_actions.failed_to_save_to_omnivore": "無法保存至 Omnivore",
"entry_actions.failed_to_save_to_readwise": "無法保存至 Readwise",
"entry_actions.mark_as_read": "標記為已讀",
@ -63,12 +64,14 @@
"entry_actions.recent_reader": "最近閱讀者:",
"entry_actions.save_media_to_eagle": "保存媒體至 Eagle",
"entry_actions.save_to_instapaper": "保存至 Instapaper",
"entry_actions.save_to_obsidian": "儲存至 Obsidian",
"entry_actions.save_to_omnivore": "保存至 Omnivore",
"entry_actions.save_to_readwise": "存至 Readwise",
"entry_actions.save_to_readwise": "存至 Readwise",
"entry_actions.saved_to_eagle": "已保存至 Eagle",
"entry_actions.saved_to_instapaper": "已保存至 Instapaper",
"entry_actions.saved_to_obsidian": "已儲存至 Obsidian",
"entry_actions.saved_to_omnivore": "已保存至 Omnivore",
"entry_actions.saved_to_readwise": "已存至 Readwise",
"entry_actions.saved_to_readwise": "已存至 Readwise",
"entry_actions.share": "分享",
"entry_actions.star": "收藏",
"entry_actions.starred": "已收藏",
@ -197,7 +200,7 @@
"sidebar.add_more_feeds": "添加訂閱源",
"sidebar.category_remove_dialog.cancel": "取消",
"sidebar.category_remove_dialog.continue": "繼續",
"sidebar.category_remove_dialog.description": "此操作將刪除你的分類,但其中的訂閱源將留並按網站分組。",
"sidebar.category_remove_dialog.description": "此操作將刪除你的分類,但其中的訂閱源將留並按網站分組。",
"sidebar.category_remove_dialog.title": "刪除分類",
"sidebar.feed_actions.claim": "認領",
"sidebar.feed_actions.claim_feed": "認領訂閱源",

View File

@ -55,6 +55,7 @@
"entry_actions.copy_title": "複製標題",
"entry_actions.failed_to_save_to_eagle": "無法儲存到 Eagle。",
"entry_actions.failed_to_save_to_instapaper": "無法儲存到 Instapaper。",
"entry_actions.failed_to_save_to_obsidian": "儲存到 Obsidian 失敗",
"entry_actions.failed_to_save_to_omnivore": "無法儲存到 Omnivore。",
"entry_actions.failed_to_save_to_readwise": "無法儲存到 Readwise。",
"entry_actions.mark_as_read": "標記為已讀",
@ -63,10 +64,12 @@
"entry_actions.recent_reader": "最近閲讀者:",
"entry_actions.save_media_to_eagle": "儲存媒體至 Eagle",
"entry_actions.save_to_instapaper": "儲存到 Instapaper",
"entry_actions.save_to_obsidian": "儲存到 Obsidian",
"entry_actions.save_to_omnivore": "儲存到 Omnivore",
"entry_actions.save_to_readwise": "儲存到 Readwise",
"entry_actions.saved_to_eagle": "已儲存至 Eagle。",
"entry_actions.saved_to_instapaper": "已儲存至 Instapaper。",
"entry_actions.saved_to_obsidian": "已儲存到 Obsidian",
"entry_actions.saved_to_omnivore": "已儲存至 Omnivore。",
"entry_actions.saved_to_readwise": "已儲存至 Readwise。",
"entry_actions.share": "分享",

View File

@ -109,6 +109,11 @@
"integration.instapaper.password.label": "كلمة مرور Instapaper",
"integration.instapaper.title": "Instapaper",
"integration.instapaper.username.label": "اسم مستخدم Instapaper",
"integration.obsidian.enable.description": "عرض زر 'حفظ إلى Obsidian' عند توفره.",
"integration.obsidian.enable.label": "تمكين",
"integration.obsidian.title": "Obsidian",
"integration.obsidian.vaultPath.description": "المسار إلى خزنة Obsidian الخاصة بك.",
"integration.obsidian.vaultPath.label": "مسار خزنة Obsidian",
"integration.readwise.enable.description": "عرض زر 'حفظ إلى Readwise' عند توفره.",
"integration.readwise.enable.label": "تمكين",
"integration.readwise.title": "Readwise",

View File

@ -115,6 +115,11 @@
"integration.instapaper.password.label": "كلمة مرور Instapaper",
"integration.instapaper.title": "Instapaper",
"integration.instapaper.username.label": "اسم مستخدم Instapaper",
"integration.obsidian.enable.description": "عرض زر 'حفظ إلى Obsidian' عند توفره.",
"integration.obsidian.enable.label": "تمكين",
"integration.obsidian.title": "Obsidian",
"integration.obsidian.vaultPath.description": "المسار إلى خزنة Obsidian الخاصة بك.",
"integration.obsidian.vaultPath.label": "مسار خزنة Obsidian",
"integration.readwise.enable.description": "عرض زر 'حفظ إلى Readwise' عند توفره.",
"integration.readwise.enable.label": "تمكين",
"integration.readwise.title": "Readwise",

View File

@ -115,6 +115,11 @@
"integration.instapaper.password.label": "كلمة مرور Instapaper",
"integration.instapaper.title": "Instapaper",
"integration.instapaper.username.label": "اسم مستخدم Instapaper",
"integration.obsidian.enable.description": "عرض زر 'حفظ إلى Obsidian' عند توفره.",
"integration.obsidian.enable.label": "تمكين",
"integration.obsidian.title": "Obsidian",
"integration.obsidian.vaultPath.description": "المسار إلى خزنة Obsidian الخاصة بك.",
"integration.obsidian.vaultPath.label": "مسار خزنة Obsidian",
"integration.readwise.enable.description": "عرض زر 'حفظ إلى Readwise' عند توفره.",
"integration.readwise.enable.label": "تمكين",
"integration.readwise.title": "Readwise",

View File

@ -109,11 +109,16 @@
"integration.instapaper.password.label": "كلمة مرور Instapaper",
"integration.instapaper.title": "Instapaper",
"integration.instapaper.username.label": "اسم مستخدم Instapaper",
"integration.obsidian.enable.description": "عرض زر 'حفظ في Obsidian' إلا كان متوفر.",
"integration.obsidian.enable.label": "تشغيل",
"integration.obsidian.title": "Obsidian",
"integration.obsidian.vaultPath.description": "المسار لخزنة Obsidian ديالك.",
"integration.obsidian.vaultPath.label": "مسار خزنة Obsidian",
"integration.readwise.enable.description": "عرض زر 'حفظ إلى Readwise' إلا كان متوفر.",
"integration.readwise.enable.label": "تشغيل",
"integration.readwise.title": "Readwise",
"integration.readwise.token.description": "يمكنك الحصول عليه هنا: ",
"integration.readwise.token.label": "رمز الوصول إلى Readwise",
"integration.readwise.token.label": "رمز الوصول لـ Readwise",
"integration.sidebar_title": "التكامل",
"integration.tip": "نصيحة: البيانات الحساسة ديالك كتحفظ محليا وما كتترفعش للسيرفر.",
"integration.title": "التكامل",

View File

@ -121,6 +121,11 @@
"integration.instapaper.password.label": "Instapaper Passwort",
"integration.instapaper.title": "Instapaper",
"integration.instapaper.username.label": "Instapaper Benutzername",
"integration.obsidian.enable.description": "Zeige den Button „In Obsidian speichern, wenn erfügbar.",
"integration.obsidian.enable.label": "Aktivieren",
"integration.obsidian.title": "Obsidian",
"integration.obsidian.vaultPath.description": "Der Pfad zu Ihrem Obsidian Vault.",
"integration.obsidian.vaultPath.label": "Obsidian Vault-Pfad",
"integration.readwise.enable.description": "Zeige den Button „Zu Readwise speichern“, wenn verfügbar.",
"integration.readwise.enable.label": "Aktivieren",
"integration.readwise.title": "Readwise",

View File

@ -129,6 +129,11 @@
"integration.instapaper.password.label": "Instapaper Password",
"integration.instapaper.title": "Instapaper",
"integration.instapaper.username.label": "Instapaper Username",
"integration.obsidian.enable.description": "Display 'Save to Obsidian' button when available.",
"integration.obsidian.enable.label": "Enable",
"integration.obsidian.title": "Obsidian",
"integration.obsidian.vaultPath.description": "The path to your Obsidian vault.",
"integration.obsidian.vaultPath.label": "Obsidian Vault Path",
"integration.omnivore.enable.description": "Display 'Save to Omnivore' button when available.",
"integration.omnivore.enable.label": "Enable",
"integration.omnivore.endpoint.description": "Omnivore Official Endpoint is: ",

View File

@ -109,6 +109,11 @@
"integration.instapaper.password.label": "Contraseña de Instapaper",
"integration.instapaper.title": "Instapaper",
"integration.instapaper.username.label": "Usuario de Instapaper",
"integration.obsidian.enable.description": "Mostrar el botón 'Guardar en Obsidian' cuando esté disponible.",
"integration.obsidian.enable.label": "Habilitar",
"integration.obsidian.title": "Obsidian",
"integration.obsidian.vaultPath.description": "La ruta a tu bóveda de Obsidian.",
"integration.obsidian.vaultPath.label": "Ruta de la bóveda de Obsidian",
"integration.readwise.enable.description": "Mostrar el botón 'Guardar en Readwise' cuando esté disponible.",
"integration.readwise.enable.label": "Habilitar",
"integration.readwise.title": "Readwise",

View File

@ -128,6 +128,11 @@
"integration.instapaper.password.label": "密码",
"integration.instapaper.title": "Instapaper",
"integration.instapaper.username.label": "Instapaper 用户名",
"integration.obsidian.enable.description": "显示保存到Obsidian按钮如果可用",
"integration.obsidian.enable.label": "启用",
"integration.obsidian.title": "Obsidian",
"integration.obsidian.vaultPath.description": "你的 Obsidian 仓库的路径",
"integration.obsidian.vaultPath.label": "Obsidian 仓库路径",
"integration.omnivore.enable.description": "显示\"保存到 Omnivore\"按钮(如果可用)",
"integration.omnivore.enable.label": "启用",
"integration.omnivore.endpoint.description": "Omnivore 官方接口",

View File

@ -128,6 +128,11 @@
"integration.instapaper.password.label": "Instapaper 密碼",
"integration.instapaper.title": "Instapaper",
"integration.instapaper.username.label": "Instapaper 用戶名",
"integration.obsidian.enable.description": "顯示「儲存至 Obsidian」按鈕如果可用",
"integration.obsidian.enable.label": "啟用",
"integration.obsidian.title": "Obsidian",
"integration.obsidian.vaultPath.description": "你的 Obsidian 儲存庫的路徑",
"integration.obsidian.vaultPath.label": "Obsidian 儲存庫路徑",
"integration.omnivore.enable.description": "顯示\"保存到 Omnivore\"按钮(如果可用)。",
"integration.omnivore.enable.label": "啟用",
"integration.omnivore.endpoint.description": "Omnivore 官方端口",

View File

@ -125,11 +125,16 @@
"integration.instapaper.password.label": "密碼",
"integration.instapaper.title": "Instapaper",
"integration.instapaper.username.label": "Instapaper 使用者",
"integration.obsidian.enable.description": "顯示「儲存到 Obsidian」按鈕如果可用",
"integration.obsidian.enable.label": "啟用",
"integration.obsidian.title": "Obsidian",
"integration.obsidian.vaultPath.description": "您的 Obsidian 儲存庫的路徑",
"integration.obsidian.vaultPath.label": "Obsidian 儲存庫路徑",
"integration.readwise.enable.description": "顯示「儲存到 Readwise」按钮如果可用。",
"integration.readwise.enable.label": "啟用",
"integration.readwise.title": "Readwise",
"integration.readwise.token.description": "您可以在這裡取得",
"integration.readwise.token.label": "Readwise 存取令牌",
"integration.readwise.token.label": "Readwise 令牌",
"integration.sidebar_title": "整合功能",
"integration.tip": "提示:您的敏感資料儲存於本機,不會上傳到伺服器。",
"integration.title": "整合功能",

View File

@ -56,4 +56,8 @@ export interface IntegrationSettings {
enableOmnivore: boolean
omnivoreEndpoint: string
omnivoreToken: string
// obsidian
enableObsidian: boolean
obsidianVaultPath: string
}