Skip to content

Commit

Permalink
feat: add v0.19.0 support
Browse files Browse the repository at this point in the history
  • Loading branch information
Xyphyn committed Sep 29, 2023
1 parent b3b8a10 commit 119ab53
Show file tree
Hide file tree
Showing 62 changed files with 188 additions and 157 deletions.
3 changes: 3 additions & 0 deletions TODO.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Todo

- [ ] Add blocking instances and stuff
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
"@vite-pwa/sveltekit": "^0.2.5",
"autoprefixer": "^10.4.16",
"jsdom": "^22.1.0",
"lemmy-js-client": "^0.18.1",
"lemmy-js-client": "^0.19.0-rc.13",
"markdown-it-container": "^3.0.0",
"markdown-it-sub": "^1.0.0",
"markdown-it-sup": "^1.0.0",
Expand Down
4 changes: 3 additions & 1 deletion src/hooks.server.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
function buildUrl(inputUrl: URL): URL {
let withoutCors = inputUrl.pathname.replace('/cors/', '')

if (!withoutCors.startsWith('https://')) {
if (
!(withoutCors.startsWith('https://') || withoutCors.startsWith('http://'))
) {
withoutCors = 'https://' + withoutCors
}

Expand Down
55 changes: 36 additions & 19 deletions src/lib/auth.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
import { amModOfAny } from '$lib/components/lemmy/moderation/moderation.js'
import { toast } from 'mono-svelte'
import { DEFAULT_INSTANCE_URL, instance } from '$lib/instance.js'
import { getClient, site } from '$lib/lemmy.js'
import { client, getClient, site } from '$lib/lemmy.js'
import { userSettings } from '$lib/settings.js'
import { moveItem } from '$lib/util.js'
import { instanceToURL, moveItem } from '$lib/util.js'
import {
LemmyHttp,
type GetSiteResponse,
type MyUserInfo,
} from 'lemmy-js-client'
import { get, writable } from 'svelte/store'
import { MINIMUM_VERSION, versionIsSupported } from '$lib/version.js'

const getDefaultProfile = (): Profile => ({
id: -1,
Expand Down Expand Up @@ -87,13 +88,21 @@ profile.subscribe(async (p) => {
instance.set(p.instance)
// fetch the user because p.user is undefined
const user = await userFromJwt(p.jwt, p.instance)

if (!user?.user)
toast({
content: 'Your login has expired. Re-login to fix this issue.',
type: 'warning',
.then((user) => {
if (!user?.user)
toast({
content: 'Your login has expired. Re-login to fix this issue.',
type: 'warning',
})
site.set(user?.site)

return user
})
.catch((err) => {
toast({ content: err as any, type: 'error' })
})
site.set(user?.site)

if (!user?.user) return

profile.update(() => ({
...p,
Expand All @@ -105,13 +114,17 @@ profile.subscribe(async (p) => {

export async function setUser(jwt: string, inst: string, username: string) {
try {
new URL(`https://${inst}`)
new URL(instanceToURL(inst))
} catch (err) {
return
}

const user = await userFromJwt(jwt, inst)
if (!user) {
.then((u) => u)
.catch((err) => {
toast({ content: err as any, type: 'error' })
})
if (!user?.user) {
toast({
content: 'Failed to fetch your user. Is your instance down?',
type: 'error',
Expand Down Expand Up @@ -152,9 +165,7 @@ async function userFromJwt(
jwt: string,
instance: string
): Promise<{ user: PersonData; site: GetSiteResponse } | undefined> {
const sitePromise = getClient(instance).getSite({
auth: jwt,
})
const sitePromise = client({ instanceURL: instance, auth: jwt }).getSite()

let timer = setTimeout(
() =>
Expand All @@ -170,6 +181,12 @@ async function userFromJwt(
return r
})

if (!versionIsSupported(site.version, MINIMUM_VERSION)) {
throw new Error(
`This version of Photon only supports Lemmy instances with version ${MINIMUM_VERSION} or higher. This Lemmy instance is running: ${site.version}`
)
}

const myUser = site.my_user
if (!myUser) return undefined

Expand Down Expand Up @@ -250,6 +267,10 @@ export async function setUserID(id: number) {

if (prof?.jwt) {
const user = await userFromJwt(prof.jwt, prof.instance)
.then((u) => u)
.catch((err) => {
toast({ content: err as any, type: 'error' })
})
instance.set(prof.instance)
prof.user = user?.user
prof.avatar = user?.user.local_user_view.person.avatar
Expand All @@ -276,16 +297,12 @@ export function moveProfile(id: number, up: boolean) {
}

const getNotificationCount = async (jwt: string, mod: boolean) => {
const unreads = await getClient().getUnreadCount({
auth: jwt,
})
const unreads = await getClient().getUnreadCount()

let reports: number = 0

if (mod) {
const reportRes = await getClient().getReportCount({
auth: jwt,
})
const reportRes = await getClient().getReportCount({})

reports =
reportRes.comment_reports +
Expand Down
1 change: 0 additions & 1 deletion src/lib/components/lemmy/ObjectAutocomplete.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
search={async (q) => {
const results = await getClient().search({
q: q || ' ',
auth: jwt,
type_: 'Communities',
limit: 20,
listing_type: listing_type,
Expand Down
1 change: 0 additions & 1 deletion src/lib/components/lemmy/comment/Comment.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@

try {
await getClient().editComment({
auth: $profile.jwt,
comment_id: node.comment_view.comment.id,
content: newComment,
})
Expand Down
1 change: 0 additions & 1 deletion src/lib/components/lemmy/comment/CommentForm.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@
try {
const response = await getClient().createComment({
auth: $profile.jwt,
content: value,
post_id: postId,
parent_id: parentId,
Expand Down
2 changes: 0 additions & 2 deletions src/lib/components/lemmy/comment/CommentVote.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@
await getClient()
.likeComment({
score: upvoted ? 0 : 1,
auth: $profile.jwt,
comment_id: commentId,
})
.catch((_) => undefined)
Expand All @@ -59,7 +58,6 @@
await getClient()
.likeComment({
score: upvoted ? 0 : -1,
auth: $profile.jwt,
comment_id: commentId,
})
.catch((_) => undefined)
Expand Down
1 change: 0 additions & 1 deletion src/lib/components/lemmy/comment/Comments.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@
parent.loading = true
const newComments = await getClient($page.params.instance).getComments({
auth: $profile?.jwt,
max_depth: 5,
parent_id: parent.comment_view.comment.id,
type_: 'All',
Expand Down
2 changes: 0 additions & 2 deletions src/lib/components/lemmy/community/CommunityCard.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@
try {
await getClient().followCommunity({
auth: $profile.jwt,
community_id: community_view.community.id,
follow: !subscribed,
})
Expand All @@ -61,7 +60,6 @@
try {
await getClient().blockCommunity({
auth: $profile.jwt,
community_id: community_view.community.id,
block: !blocked,
})
Expand Down
2 changes: 0 additions & 2 deletions src/lib/components/lemmy/community/CommunityForm.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,6 @@
const res = edit
? await getClient().editCommunity({
auth: $profile.jwt,
title: formData.displayName,
description: formData.sidebar,
nsfw: formData.nsfw,
Expand All @@ -59,7 +58,6 @@
community_id: edit,
})
: await getClient().createCommunity({
auth: $profile.jwt,
name: formData.name,
title: formData.displayName,
description: formData.sidebar,
Expand Down
1 change: 0 additions & 1 deletion src/lib/components/lemmy/modal/PrivateMessageModal.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
try {
await getClient().createPrivateMessage({
auth: $profile.jwt,
content: message,
recipient_id: user.id,
})
Expand Down
2 changes: 0 additions & 2 deletions src/lib/components/lemmy/moderation/BanModal.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,6 @@
if (community) {
await getClient().banFromCommunity({
auth: $profile.jwt,
ban: !banned,
community_id: community.id,
person_id: item.id,
Expand All @@ -72,7 +71,6 @@
})
} else {
await getClient().banPerson({
auth: $profile.jwt,
ban: !banned,
person_id: item.id,
reason: reason || undefined,
Expand Down
2 changes: 0 additions & 2 deletions src/lib/components/lemmy/moderation/ModerationMenu.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@
try {
await getClient().lockPost({
auth: $profile.jwt,
locked: lock,
post_id: item.post.id,
})
Expand Down Expand Up @@ -60,7 +59,6 @@
try {
await getClient().featurePost({
feature_type: toInstance ? 'Local' : 'Community',
auth: $profile.jwt,
featured: pinned,
post_id: item.post.id,
})
Expand Down
6 changes: 0 additions & 6 deletions src/lib/components/lemmy/moderation/RemoveModal.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -57,13 +57,11 @@
if (purge) {
if (isCommentView(item)) {
await getClient(undefined, fetch).purgeComment({
auth: $profile.jwt,
comment_id: item.comment.id,
reason: reason,
})
} else {
await getClient(undefined, fetch).purgePost({
auth: $profile.jwt,
post_id: item.post.id,
reason: reason,
})
Expand Down Expand Up @@ -91,7 +89,6 @@
if (privateMessage) {
await getClient()
.createPrivateMessage({
auth: $profile.jwt,
content: replyReason,
recipient_id: isCommentView(item)
? item.comment.creator_id
Expand All @@ -106,7 +103,6 @@
} else {
await getClient()
.createComment({
auth: $profile.jwt,
content: replyReason,
post_id: item.post.id,
parent_id: isCommentView(item) ? item.comment.id : undefined,
Expand All @@ -122,15 +118,13 @@
if (isCommentView(item)) {
await getClient().removeComment({
auth: $profile.jwt,
comment_id: item.comment.id,
removed: !removed,
reason: reason || undefined,
})
item.comment.removed = !removed
} else if (isPostView(item)) {
await getClient().removePost({
auth: $profile.jwt,
post_id: item.post.id,
removed: !removed,
reason: reason || undefined,
Expand Down
2 changes: 0 additions & 2 deletions src/lib/components/lemmy/moderation/ReportModal.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,11 @@
try {
if (isComment(item)) {
await getClient().createCommentReport({
auth: $profile.jwt,
comment_id: item.comment.id,
reason: reason,
})
} else if (isPost(item)) {
await getClient().createPostReport({
auth: $profile.jwt,
post_id: item.post.id,
reason: reason,
})
Expand Down
2 changes: 1 addition & 1 deletion src/lib/components/lemmy/moderation/moderation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ export const amMod = (me: MyUserInfo, community: Community) =>
export const amModOfAny = (me?: MyUserInfo) =>
me && (me.moderates.length > 0 || isAdmin(me))

export const isAdmin = (me: MyUserInfo) => me.local_user_view.person.admin
export const isAdmin = (me: MyUserInfo) => me.local_user_view.local_user.admin

export const removalTemplate = (
input: string,
Expand Down
7 changes: 3 additions & 4 deletions src/lib/components/lemmy/post/PostForm.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,6 @@
communitySearch = passedCommunity.name
} else {
const list = await getClient().listCommunities({
auth: $profile?.jwt,
type_: 'All',
sort: 'Active',
limit: 40,
Expand Down Expand Up @@ -107,7 +106,6 @@
}
const post = await getClient().editPost({
auth: $profile.jwt,
name: data.title,
body: data.body,
url: data.url || undefined,
Expand All @@ -121,10 +119,11 @@
dispatcher('submit', post.post_view)
} else {
let image = data.image ? await uploadImage(data.image[0], $profile.instance, $profile.jwt) : undefined
let image = data.image
? await uploadImage(data.image[0], $profile.instance, $profile.jwt)
: undefined
data.url = image || data.url || undefined
const post = await getClient().createPost({
auth: $profile.jwt,
community_id: data.community!,
name: data.title,
body: data.body,
Expand Down
7 changes: 2 additions & 5 deletions src/lib/components/lemmy/post/helpers.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
import { getInstance } from '$lib/lemmy.js'
import type { CommentView, PersonView, Post, PostView } from 'lemmy-js-client'

export const isMutable = (post: PostView, me: PersonView) =>
(me.person.admin && post.post.local) || me.person.id == post.creator.id

export const isCommentMutable = (comment: CommentView, me: PersonView) =>
me.person.id == comment.creator.id

Expand All @@ -13,8 +10,8 @@ export const bestImageURL = (
width: number = 1024
) => {
if (width > 1024) {
if (post.url) return `${post.url}?format=webp`
else if (post.thumbnail_url) return `${post.thumbnail_url}?format=webp`
if (post.url) return `${post.url}?format=webp`
else if (post.thumbnail_url) return `${post.thumbnail_url}?format=webp`
}

if (compact && post.thumbnail_url)
Expand Down
2 changes: 1 addition & 1 deletion src/lib/components/ui/Navbar.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@
<Button
href="/admin"
aria-label="Admin"
class="max-md:w-9 max-md:h-8 max-md:!p-0 relative"
class="max-md:w-9 max-md:h-8 max-md:!p-0 "
>
<Icon src={CommandLine} mini size="16" slot="prefix" />
<span class="hidden md:inline">Admin</span>
Expand Down
Loading

0 comments on commit 119ab53

Please sign in to comment.