mirror of
https://github.com/luminous-devs/lume.git
synced 2024-09-19 11:43:30 +00:00
temporary using default relays
This commit is contained in:
parent
53aa13c8aa
commit
380d1fb930
@ -43,7 +43,7 @@ export function NewMessageModal() {
|
|||||||
<Dialog.Title className="text-lg font-semibold leading-none text-white">
|
<Dialog.Title className="text-lg font-semibold leading-none text-white">
|
||||||
New chat
|
New chat
|
||||||
</Dialog.Title>
|
</Dialog.Title>
|
||||||
<Dialog.Close className="inline-flex h-6 w-6 items-center justify-center rounded-md backdrop-blur-xl hover:bg-white/10">
|
<Dialog.Close className="inline-flex h-6 w-6 items-center justify-center rounded-md hover:bg-white/10">
|
||||||
<CancelIcon className="h-4 w-4 text-white/50" />
|
<CancelIcon className="h-4 w-4 text-white/50" />
|
||||||
</Dialog.Close>
|
</Dialog.Close>
|
||||||
</div>
|
</div>
|
||||||
@ -56,14 +56,14 @@ export function NewMessageModal() {
|
|||||||
{db.account?.follows?.map((pubkey) => (
|
{db.account?.follows?.map((pubkey) => (
|
||||||
<div
|
<div
|
||||||
key={pubkey}
|
key={pubkey}
|
||||||
className="group flex items-center justify-between px-4 py-2 backdrop-blur-xl hover:bg-white/10"
|
className="group flex items-center justify-between px-4 py-2 hover:bg-white/10"
|
||||||
>
|
>
|
||||||
<User pubkey={pubkey} variant="simple" />
|
<User pubkey={pubkey} variant="simple" />
|
||||||
<div>
|
<div>
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
onClick={() => openChat(pubkey)}
|
onClick={() => openChat(pubkey)}
|
||||||
className="hidden w-max rounded bg-white/10 px-3 py-1 text-sm font-medium backdrop-blur-xl hover:bg-fuchsia-500 group-hover:inline-flex"
|
className="hidden w-max rounded bg-white/10 px-3 py-1 text-sm font-medium hover:bg-fuchsia-500 group-hover:inline-flex"
|
||||||
>
|
>
|
||||||
Chat
|
Chat
|
||||||
</button>
|
</button>
|
||||||
|
@ -43,7 +43,7 @@ export function UnknownsModal({ data }: { data: string[] }) {
|
|||||||
<Dialog.Title className="text-lg font-semibold leading-none text-white">
|
<Dialog.Title className="text-lg font-semibold leading-none text-white">
|
||||||
{data.length} unknowns
|
{data.length} unknowns
|
||||||
</Dialog.Title>
|
</Dialog.Title>
|
||||||
<Dialog.Close className="inline-flex h-6 w-6 items-center justify-center rounded-md backdrop-blur-xl hover:bg-white/10">
|
<Dialog.Close className="inline-flex h-6 w-6 items-center justify-center rounded-md hover:bg-white/10">
|
||||||
<CancelIcon className="h-4 w-4 text-white/50" />
|
<CancelIcon className="h-4 w-4 text-white/50" />
|
||||||
</Dialog.Close>
|
</Dialog.Close>
|
||||||
</div>
|
</div>
|
||||||
@ -56,14 +56,14 @@ export function UnknownsModal({ data }: { data: string[] }) {
|
|||||||
{data.map((pubkey) => (
|
{data.map((pubkey) => (
|
||||||
<div
|
<div
|
||||||
key={pubkey}
|
key={pubkey}
|
||||||
className="group flex items-center justify-between px-4 py-2 backdrop-blur-xl hover:bg-white/10"
|
className="group flex items-center justify-between px-4 py-2 hover:bg-white/10"
|
||||||
>
|
>
|
||||||
<User pubkey={pubkey} variant="simple" />
|
<User pubkey={pubkey} variant="simple" />
|
||||||
<div>
|
<div>
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
onClick={() => openChat(pubkey)}
|
onClick={() => openChat(pubkey)}
|
||||||
className="hidden w-max rounded bg-white/10 px-3 py-1 text-sm font-medium backdrop-blur-xl hover:bg-fuchsia-500 group-hover:inline-flex"
|
className="hidden w-max rounded bg-white/10 px-3 py-1 text-sm font-medium hover:bg-fuchsia-500 group-hover:inline-flex"
|
||||||
>
|
>
|
||||||
Chat
|
Chat
|
||||||
</button>
|
</button>
|
||||||
|
@ -102,7 +102,7 @@ export function ArticleNoteScreen() {
|
|||||||
) : (
|
) : (
|
||||||
<>
|
<>
|
||||||
<div className="h-min w-full px-3">
|
<div className="h-min w-full px-3">
|
||||||
<div className="rounded-xl bg-white/10 px-3 pt-3 backdrop-blur-xl">
|
<div className="rounded-xl border-t border-white/10 bg-white/20 px-3 pt-3">
|
||||||
<User pubkey={data.pubkey} time={data.created_at} variant="thread" />
|
<User pubkey={data.pubkey} time={data.created_at} variant="thread" />
|
||||||
<div className="mt-2">{renderKind(data)}</div>
|
<div className="mt-2">{renderKind(data)}</div>
|
||||||
<div>
|
<div>
|
||||||
|
@ -14,6 +14,7 @@ import {
|
|||||||
LocalArticlesWidget,
|
LocalArticlesWidget,
|
||||||
LocalFeedsWidget,
|
LocalFeedsWidget,
|
||||||
LocalFilesWidget,
|
LocalFilesWidget,
|
||||||
|
LocalFollowsWidget,
|
||||||
LocalNetworkWidget,
|
LocalNetworkWidget,
|
||||||
LocalThreadWidget,
|
LocalThreadWidget,
|
||||||
LocalUserWidget,
|
LocalUserWidget,
|
||||||
@ -22,7 +23,6 @@ import {
|
|||||||
XfeedsWidget,
|
XfeedsWidget,
|
||||||
XhashtagWidget,
|
XhashtagWidget,
|
||||||
} from '@shared/widgets';
|
} from '@shared/widgets';
|
||||||
import { LocalFollowsWidget } from '@shared/widgets/local/follows';
|
|
||||||
|
|
||||||
import { WidgetKinds, useWidgets } from '@stores/widgets';
|
import { WidgetKinds, useWidgets } from '@stores/widgets';
|
||||||
|
|
||||||
|
@ -12,7 +12,11 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.markdown {
|
.markdown {
|
||||||
@apply prose prose-white max-w-none select-text hyphens-auto text-white prose-p:mb-0 prose-p:mt-0 prose-p:break-words prose-p:[word-break:break-word] prose-p:last:mb-0 prose-a:break-words prose-a:break-all prose-a:font-normal hover:prose-a:text-fuchsia-500 prose-blockquote:mb-1 prose-blockquote:mt-1 prose-blockquote:border-l-[2px] prose-blockquote:border-fuchsia-500 prose-blockquote:pl-2 prose-pre:whitespace-pre-wrap prose-pre:break-words prose-pre:break-all prose-pre:bg-white/10 prose-ol:m-0 prose-ol:mb-1 prose-ul:mb-1 prose-ul:mt-1 prose-img:mb-2 prose-img:mt-3 prose-hr:mx-0 prose-hr:my-2;
|
@apply prose prose-white max-w-none select-text hyphens-auto text-white prose-headings:mb-1 prose-headings:mt-3 prose-p:mb-0 prose-p:mt-0 prose-p:break-words prose-p:[word-break:break-word] prose-p:last:mb-0 prose-a:break-words prose-a:break-all prose-a:font-normal hover:prose-a:text-fuchsia-500 prose-blockquote:mb-1 prose-blockquote:mt-1 prose-blockquote:border-l-[2px] prose-blockquote:border-fuchsia-500 prose-blockquote:pl-2 prose-pre:whitespace-pre-wrap prose-pre:break-words prose-pre:break-all prose-pre:bg-white/10 prose-ol:m-0 prose-ol:mb-1 prose-ul:mb-1 prose-ul:mt-1 prose-img:mb-2 prose-img:mt-3 prose-hr:mx-0 prose-hr:my-2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-article {
|
||||||
|
@apply prose prose-white max-w-none select-text hyphens-auto text-white/80 prose-headings:mb-1 prose-headings:mt-3 prose-headings:text-white prose-p:mb-2 prose-p:mt-0 prose-p:break-words prose-p:[word-break:break-word] prose-a:break-words prose-a:break-all prose-a:font-normal hover:prose-a:text-fuchsia-500 prose-blockquote:mb-1 prose-blockquote:mt-1 prose-blockquote:border-l-[2px] prose-blockquote:border-fuchsia-500 prose-blockquote:pl-2 prose-pre:whitespace-pre-wrap prose-pre:break-words prose-pre:break-all prose-pre:bg-white/10 prose-ol:m-0 prose-ol:mb-1 prose-ul:mb-1 prose-ul:mt-1 prose-img:mb-2 prose-img:mt-3 prose-hr:mx-0 prose-hr:my-2;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ProseMirror p.is-empty::before {
|
.ProseMirror p.is-empty::before {
|
||||||
|
@ -6,14 +6,11 @@ import { useEffect, useMemo, useState } from 'react';
|
|||||||
import TauriAdapter from '@libs/ndk/cache';
|
import TauriAdapter from '@libs/ndk/cache';
|
||||||
import { useStorage } from '@libs/storage/provider';
|
import { useStorage } from '@libs/storage/provider';
|
||||||
|
|
||||||
import { FULL_RELAYS } from '@stores/constants';
|
|
||||||
|
|
||||||
export const NDKInstance = () => {
|
export const NDKInstance = () => {
|
||||||
const { db } = useStorage();
|
|
||||||
|
|
||||||
const [ndk, setNDK] = useState<NDK | undefined>(undefined);
|
const [ndk, setNDK] = useState<NDK | undefined>(undefined);
|
||||||
const [relayUrls, setRelayUrls] = useState<string[]>([]);
|
const [relayUrls, setRelayUrls] = useState<string[]>([]);
|
||||||
|
|
||||||
|
const { db } = useStorage();
|
||||||
const cacheAdapter = useMemo(() => new TauriAdapter(), [ndk]);
|
const cacheAdapter = useMemo(() => new TauriAdapter(), [ndk]);
|
||||||
|
|
||||||
// TODO: fully support NIP-11
|
// TODO: fully support NIP-11
|
||||||
@ -23,11 +20,10 @@ export const NDKInstance = () => {
|
|||||||
const timeoutId = setTimeout(() => controller.abort('timeout'), 10000);
|
const timeoutId = setTimeout(() => controller.abort('timeout'), 10000);
|
||||||
|
|
||||||
// get relays
|
// get relays
|
||||||
const relays = (await db.getExplicitRelayUrls()) ?? FULL_RELAYS;
|
const relays = await db.getExplicitRelayUrls();
|
||||||
|
|
||||||
const requests = relays.map((relay) => {
|
const requests = relays.map((relay) => {
|
||||||
const url = new URL(relay);
|
const url = new URL(relay);
|
||||||
|
|
||||||
return fetch(`https://${url.hostname + url.pathname}`, {
|
return fetch(`https://${url.hostname + url.pathname}`, {
|
||||||
headers: { Accept: 'application/nostr+json' },
|
headers: { Accept: 'application/nostr+json' },
|
||||||
signal: controller.signal,
|
signal: controller.signal,
|
||||||
@ -35,11 +31,12 @@ export const NDKInstance = () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const responses = await Promise.all(requests);
|
const responses = await Promise.all(requests);
|
||||||
const errors = responses.filter((response) => !response.ok);
|
const successes = responses.filter((res) => res.ok);
|
||||||
|
const errors = responses.filter((res) => !res.ok);
|
||||||
|
|
||||||
if (errors.length > 0) throw errors.map((response) => Error(response.statusText));
|
if (errors.length > 0) throw errors.map((response) => Error(response.statusText));
|
||||||
|
|
||||||
const verifiedRelays: string[] = responses.map((res) => {
|
const verifiedRelays: string[] = successes.map((res) => {
|
||||||
const url = new URL(res.url);
|
const url = new URL(res.url);
|
||||||
if (url.protocol === 'http:') return `ws://${url.hostname + url.pathname}`;
|
if (url.protocol === 'http:') return `ws://${url.hostname + url.pathname}`;
|
||||||
if (url.protocol === 'https:') return `wss://${url.hostname + url.pathname}`;
|
if (url.protocol === 'https:') return `wss://${url.hostname + url.pathname}`;
|
||||||
@ -60,8 +57,6 @@ export const NDKInstance = () => {
|
|||||||
const instance = new NDK({
|
const instance = new NDK({
|
||||||
explicitRelayUrls,
|
explicitRelayUrls,
|
||||||
cacheAdapter,
|
cacheAdapter,
|
||||||
// outboxRelayUrls: ['wss://purplepag.es'],
|
|
||||||
// enableOutboxModel: true,
|
|
||||||
});
|
});
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -5,12 +5,12 @@ import { PropsWithChildren, createContext, useContext } from 'react';
|
|||||||
import { NDKInstance } from '@libs/ndk/instance';
|
import { NDKInstance } from '@libs/ndk/instance';
|
||||||
|
|
||||||
interface NDKContext {
|
interface NDKContext {
|
||||||
ndk: NDK;
|
ndk: undefined | NDK;
|
||||||
relayUrls: string[];
|
relayUrls: string[];
|
||||||
}
|
}
|
||||||
|
|
||||||
const NDKContext = createContext<NDKContext>({
|
const NDKContext = createContext<NDKContext>({
|
||||||
ndk: new NDK({}),
|
ndk: undefined,
|
||||||
relayUrls: [],
|
relayUrls: [],
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -4,6 +4,8 @@ import { Platform } from '@tauri-apps/api/os';
|
|||||||
import Database from 'tauri-plugin-sql-api';
|
import Database from 'tauri-plugin-sql-api';
|
||||||
import { Stronghold } from 'tauri-plugin-stronghold-api';
|
import { Stronghold } from 'tauri-plugin-stronghold-api';
|
||||||
|
|
||||||
|
import { FULL_RELAYS } from '@stores/constants';
|
||||||
|
|
||||||
import { Account, DBEvent, Relays, Widget } from '@utils/types';
|
import { Account, DBEvent, Relays, Widget } from '@utils/types';
|
||||||
|
|
||||||
export class LumeStorage {
|
export class LumeStorage {
|
||||||
@ -287,8 +289,9 @@ export class LumeStorage {
|
|||||||
`SELECT * FROM relays WHERE account_id = "${this.account.id}" ORDER BY id DESC LIMIT 50;`
|
`SELECT * FROM relays WHERE account_id = "${this.account.id}" ORDER BY id DESC LIMIT 50;`
|
||||||
);
|
);
|
||||||
|
|
||||||
if (result.length < 1) return null;
|
if (result.length < 1) return FULL_RELAYS;
|
||||||
return result.map((el) => el.relay);
|
// return [...new Set(result.map((el) => el.relay))];
|
||||||
|
return FULL_RELAYS;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async createRelay(relay: string, purpose?: string) {
|
public async createRelay(relay: string, purpose?: string) {
|
||||||
|
@ -26,7 +26,7 @@ export function ArticleDetailNote({ event }: { event: NDKEvent }) {
|
|||||||
}, [event.id]);*/
|
}, [event.id]);*/
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ReactMarkdown className="markdown" remarkPlugins={[remarkGfm]}>
|
<ReactMarkdown className="markdown-article" remarkPlugins={[remarkGfm]}>
|
||||||
{event.content}
|
{event.content}
|
||||||
</ReactMarkdown>
|
</ReactMarkdown>
|
||||||
);
|
);
|
||||||
|
@ -4,6 +4,7 @@ export * from './local/user';
|
|||||||
export * from './local/thread';
|
export * from './local/thread';
|
||||||
export * from './local/files';
|
export * from './local/files';
|
||||||
export * from './local/articles';
|
export * from './local/articles';
|
||||||
|
export * from './local/follows';
|
||||||
export * from './global/articles';
|
export * from './global/articles';
|
||||||
export * from './global/files';
|
export * from './global/files';
|
||||||
export * from './global/hashtag';
|
export * from './global/hashtag';
|
||||||
|
@ -71,7 +71,7 @@ export function LocalFeedsWidget({ params }: { params: Widget }) {
|
|||||||
data-index={index}
|
data-index={index}
|
||||||
ref={virtualizer.measureElement}
|
ref={virtualizer.measureElement}
|
||||||
>
|
>
|
||||||
<Repost key={dbEvent.id} event={event} root={dbEvent.root_id} />
|
<Repost key={dbEvent.id} event={event} />
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
case 1063:
|
case 1063:
|
||||||
|
@ -70,7 +70,7 @@ export function LocalFollowsWidget({ params }: { params: Widget }) {
|
|||||||
data-index={index}
|
data-index={index}
|
||||||
ref={virtualizer.measureElement}
|
ref={virtualizer.measureElement}
|
||||||
>
|
>
|
||||||
<Repost key={dbEvent.id} event={event} root={dbEvent.root_id} />
|
<Repost key={dbEvent.id} event={event} />
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
case 1063:
|
case 1063:
|
||||||
|
@ -73,7 +73,7 @@ export function LocalNetworkWidget() {
|
|||||||
data-index={index}
|
data-index={index}
|
||||||
ref={virtualizer.measureElement}
|
ref={virtualizer.measureElement}
|
||||||
>
|
>
|
||||||
<Repost key={dbEvent.id} event={event} root={dbEvent.root_id} />
|
<Repost key={dbEvent.id} event={event} />
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
case 1063:
|
case 1063:
|
||||||
|
@ -4,7 +4,7 @@ import { create } from 'zustand';
|
|||||||
interface ActivitiesState {
|
interface ActivitiesState {
|
||||||
activities: Array<NDKEvent>;
|
activities: Array<NDKEvent>;
|
||||||
totalNewActivities: number;
|
totalNewActivities: number;
|
||||||
setActivities: (events: NDKEvent[]) => void;
|
setActivities: (events: NDKEvent[], lastLogin: number) => void;
|
||||||
addActivity: (event: NDKEvent) => void;
|
addActivity: (event: NDKEvent) => void;
|
||||||
clearTotalNewActivities: () => void;
|
clearTotalNewActivities: () => void;
|
||||||
}
|
}
|
||||||
@ -12,8 +12,12 @@ interface ActivitiesState {
|
|||||||
export const useActivities = create<ActivitiesState>((set) => ({
|
export const useActivities = create<ActivitiesState>((set) => ({
|
||||||
activities: null,
|
activities: null,
|
||||||
totalNewActivities: 0,
|
totalNewActivities: 0,
|
||||||
setActivities: (events: NDKEvent[]) => {
|
setActivities: (events: NDKEvent[], lastLogin: number) => {
|
||||||
set(() => ({ activities: events }));
|
const latest = events.filter((ev) => ev.created_at > lastLogin);
|
||||||
|
set(() => ({
|
||||||
|
activities: events,
|
||||||
|
totalNewActivities: latest.length > 0 ? latest.length : 0,
|
||||||
|
}));
|
||||||
},
|
},
|
||||||
addActivity: (event: NDKEvent) => {
|
addActivity: (event: NDKEvent) => {
|
||||||
set((state) => ({
|
set((state) => ({
|
||||||
|
@ -57,7 +57,7 @@ export function useNostr() {
|
|||||||
const follows = new Set<string>(preFollows || []);
|
const follows = new Set<string>(preFollows || []);
|
||||||
const lruNetwork = new LRUCache<string, string, void>({ max: 300 });
|
const lruNetwork = new LRUCache<string, string, void>({ max: 300 });
|
||||||
|
|
||||||
// fetch user's relays
|
/* fetch user's relays
|
||||||
const relayEvents = await ndk.fetchEvents({
|
const relayEvents = await ndk.fetchEvents({
|
||||||
kinds: [NDKKind.RelayList],
|
kinds: [NDKKind.RelayList],
|
||||||
authors: [db.account.pubkey],
|
authors: [db.account.pubkey],
|
||||||
@ -74,6 +74,7 @@ export function useNostr() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
// fetch user's follows
|
// fetch user's follows
|
||||||
if (!preFollows) {
|
if (!preFollows) {
|
||||||
|
Loading…
Reference in New Issue
Block a user