feat: Multi Accounts (#237)

* wip: new sync

* wip: restructure routes

* update

* feat: improve sync

* feat: repost with multi-account

* feat: improve sync

* feat: publish with multi account

* fix: settings screen

* feat: add zap for multi accounts
This commit is contained in:
雨宮蓮
2024-10-22 16:00:06 +07:00
committed by GitHub
parent ba9c81a10a
commit cc7de41bfd
89 changed files with 2695 additions and 2911 deletions

View File

@@ -12,10 +12,10 @@ export class LumeEvent {
public meta: Meta;
public relay?: string;
public replies?: LumeEvent[];
#raw: NostrEvent;
public raw: NostrEvent;
constructor(event: NostrEvent) {
this.#raw = event;
this.raw = event;
Object.assign(this, event);
}
@@ -134,16 +134,6 @@ export class LumeEvent {
}
}
public async repost() {
const query = await commands.repost(JSON.stringify(this.#raw));
if (query.status === "ok") {
return query.data;
} else {
throw new Error(query.error);
}
}
static async publish(
content: string,
warning?: string,

View File

@@ -6,7 +6,7 @@ import { LumeEvent } from "./event";
export function useEvent(id: string, repost?: string) {
const { isLoading, isError, error, data } = useQuery({
queryKey: ["event", id],
queryKey: ["ids", "event", id],
queryFn: async () => {
try {
if (repost?.length) {

View File

@@ -9,7 +9,7 @@ export function useProfile(pubkey: string, embed?: string) {
isError,
data: profile,
} = useQuery({
queryKey: ["profile", pubkey],
queryKey: ["metadata", "profile", pubkey],
queryFn: async () => {
if (embed) {
const metadata: Metadata = JSON.parse(embed);

View File

@@ -1,6 +1,6 @@
import { commands } from "@/commands.gen";
import type { LumeColumn, NostrEvent } from "@/types";
import { getCurrentWindow } from "@tauri-apps/api/window";
import { Window, getCurrentWindow } from "@tauri-apps/api/window";
import { nanoid } from "nanoid";
import type { LumeEvent } from "./event";
@@ -11,7 +11,7 @@ export const LumeWindow = {
column,
});
},
openColumnsGallery: async () => {
openLaunchpad: async () => {
await getCurrentWindow().emit("columns", {
type: "add",
column: {
@@ -21,23 +21,36 @@ export const LumeWindow = {
},
});
},
openLocalFeeds: async () => {
openNewsfeed: async (account: string) => {
await getCurrentWindow().emit("columns", {
type: "add",
column: {
label: "newsfeed",
name: "Newsfeed",
url: "/columns/newsfeed",
url: `/columns/newsfeed/${account}`,
account,
},
});
},
openNotification: async () => {
openStory: async (account: string) => {
await getCurrentWindow().emit("columns", {
type: "add",
column: {
label: "stories",
name: "Stories",
url: `/columns/stories/${account}`,
account,
},
});
},
openNotification: async (account: string) => {
await getCurrentWindow().emit("columns", {
type: "add",
column: {
label: "notification",
name: "Notification",
url: "/columns/notification",
url: `/columns/notification/${account}`,
account,
},
});
},
@@ -86,27 +99,28 @@ export const LumeWindow = {
let url: string;
if (reply_to) {
url = `/editor?reply_to=${reply_to}`;
url = `/new-post?reply_to=${reply_to}`;
}
if (quote?.length) {
url = `/editor?quote=${quote}`;
url = `/new-post?quote=${quote}`;
}
if (!reply_to?.length && !quote?.length) {
url = "/editor";
url = "/new-post";
}
const label = `editor-${reply_to ? reply_to : 0}`;
const query = await commands.openWindow({
label,
url,
title: "Editor",
title: "New Post",
width: 560,
height: 340,
maximizable: false,
minimizable: false,
hidden_title: true,
closable: true,
});
if (query.status === "ok") {
@@ -128,21 +142,25 @@ export const LumeWindow = {
maximizable: false,
minimizable: false,
hidden_title: true,
closable: true,
});
} else {
await LumeWindow.openSettings(account, "bitcoin-connect");
await LumeWindow.openSettings(account, "wallet");
}
},
openSettings: async (account: string, path?: string) => {
const query = await commands.openWindow({
label: "settings",
url: path ? `${account}/${path}` : `${account}/general`,
url: path
? `/settings/${account}/${path}`
: `/settings/${account}/general`,
title: "Settings",
width: 800,
width: 700,
height: 500,
maximizable: false,
minimizable: false,
hidden_title: true,
closable: true,
});
if (query.status === "ok") {
@@ -151,20 +169,21 @@ export const LumeWindow = {
throw new Error(query.error);
}
},
openPopup: async (title: string, url: string) => {
openPopup: async (url: string, title?: string, closable = true) => {
const query = await commands.openWindow({
label: `popup-${nanoid()}`,
url,
title,
title: title ?? "",
width: 400,
height: 500,
maximizable: false,
minimizable: false,
hidden_title: false,
hidden_title: !!title,
closable,
});
if (query.status === "ok") {
return query.data;
return await Window.getByLabel(query.data);
} else {
throw new Error(query.error);
}