add Akkoma compatibility (tested on IceShrimp)

This commit is contained in:
Henry Jameson 2025-06-16 14:57:34 +03:00
commit f36f11045e
13 changed files with 28 additions and 12 deletions

View file

@ -5,6 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1,user-scalable=no">
<link rel="preload" href="/static/config.json" as="fetch" crossorigin />
<link rel="preload" href="/api/pleroma/frontend_configurations" as="fetch" crossorigin />
<link rel="preload" href="/nodeinfo/2.0.json" as="fetch" crossorigin />
<link rel="preload" href="/nodeinfo/2.1.json" as="fetch" crossorigin />
<link rel="preload" href="/api/v1/instance" as="fetch" crossorigin />
<link rel="preload" href="/static/pleromatan_apology_fox_small.webp" as="image" />

View file

@ -242,7 +242,8 @@ const resolveStaffAccounts = ({ store, accounts }) => {
const getNodeInfo = async ({ store }) => {
try {
const res = await preloadFetch('/nodeinfo/2.1.json')
let res = await preloadFetch('/nodeinfo/2.1.json')
if (!res.ok) res = await preloadFetch('/nodeinfo/2.0.json')
if (res.ok) {
const data = await res.json()
const metadata = data.metadata

View file

@ -29,7 +29,7 @@ const Announcement = {
currentUser: state => state.users.currentUser
}),
canEditAnnouncement () {
return this.currentUser && this.currentUser.privileges.includes('announcements_manage_announcements')
return this.currentUser && this.currentUser.privileges?.includes('announcements_manage_announcements')
},
content () {
return this.announcement.content

View file

@ -16,7 +16,7 @@ const Interactions = {
return {
allowFollowingMove: this.$store.state.users.currentUser.allow_following_move,
filterMode: tabModeDict.mentions,
canSeeReports: this.$store.state.users.currentUser.privileges.includes('reports_manage_reports')
canSeeReports: this.$store.state.users.currentUser.privileges?.includes('reports_manage_reports')
}
},
methods: {

View file

@ -59,7 +59,7 @@ const ModerationTools = {
return this.tagsSet.has(tagName)
},
privileged (privilege) {
return this.$store.state.users.currentUser.privileges.includes(privilege)
return this.$store.state.users.currentUser.privileges?.includes(privilege)
},
toggleTag (tag) {
const store = this.$store

View file

@ -19,11 +19,11 @@ export const getListEntries = store => store.allLists.map(list => ({
iconLetter: list.title[0]
}))
export const getBookmarkFolderEntries = store => store.allFolders.map(folder => ({
export const getBookmarkFolderEntries = store => store.allFolders ? store.allFolders.map(folder => ({
name: 'bookmark-folder-' + folder.id,
routeObject: { name: 'bookmark-folder', params: { id: folder.id } },
labelRaw: folder.name,
iconEmoji: folder.emoji,
iconEmojiUrl: folder.emoji_url,
iconLetter: folder.name[0]
}))
})) : []

View file

@ -18,7 +18,7 @@ const NotificationsTab = {
},
canReceiveReports () {
if (!this.user) { return false }
return this.user.privileges.includes('reports_manage_reports')
return this.user.privileges?.includes('reports_manage_reports')
},
...SharedComputedObject()
},

View file

@ -204,7 +204,7 @@ export const BUTTONS = [{
if ({ status, loggedIn, currentUser }) {
return loggedIn && (
status.user.id === currentUser.id ||
currentUser.privileges.includes('messages_delete')
currentUser.privileges?.includes('messages_delete')
)
},
confirm: ({ getters }) => getters.mergedConfig.modalOnDelete,

View file

@ -134,7 +134,10 @@ export default {
},
showModerationMenu () {
const privileges = this.loggedIn.privileges
return this.loggedIn.role === 'admin' || privileges.includes('users_manage_activation_state') || privileges.includes('users_delete') || privileges.includes('users_manage_tags')
return this.loggedIn.role === 'admin' ||
privileges?.includes('users_manage_activation_state') ||
privileges?.includes('users_delete')||
privileges?.includes('users_manage_tags')
},
hasNote () {
return this.relationship.note

View file

@ -281,6 +281,7 @@ const api = {
// Bookmark folders
startFetchingBookmarkFolders (store) {
if (store.state.fetchers.bookmarkFolders) return
if (!store.rootState.instance.pleromaBookmarkFoldersAvailable) return
const fetcher = store.state.backendInteractor.startFetchingBookmarkFolders({ store })
store.commit('addFetcher', { fetcherName: 'bookmarkFolders', fetcher })
},

View file

@ -38,6 +38,7 @@ export const defaultState = () => ({
allStatusesObject: {},
conversationsObject: {},
maxId: 0,
scrobblesUnsupported: false,
favorites: new Set(),
timelines: {
mentions: emptyTl(),
@ -112,8 +113,14 @@ const getLatestScrobble = (state, user) => {
return
}
if (state.scrobblesUnsupported) return
state.scrobblesNextFetch[user.id] = Date.now() + 24 * 60 * 60 * 1000
apiService.fetchScrobbles({ accountId: user.id }).then((scrobbles) => {
if (scrobbles?.error?.status === 501) {
state.scrobblesUnsupported = true
}
if (scrobbles.length > 0) {
user.latestScrobble = scrobbles[0]

View file

@ -599,6 +599,7 @@ const users = {
return new Promise((resolve, reject) => {
const commit = store.commit
const dispatch = store.dispatch
const rootState = store.rootState
commit('beginLogin')
store.rootState.api.backendInteractor.verifyCredentials(accessToken)
.then((data) => {
@ -665,9 +666,11 @@ const users = {
// Start fetching notifications
dispatch('startFetchingNotifications')
if (rootState.instance.pleromaChatMessagesAvailable) {
// Start fetching chats
dispatch('startFetchingChats')
}
}
dispatch('startFetchingLists')
dispatch('startFetchingBookmarkFolders')

View file

@ -25,7 +25,7 @@ export const useAnnouncementsStore = defineStore('announcements', {
}
const currentUser = window.vuex.state.users.currentUser
const isAdmin = currentUser && currentUser.privileges.includes('announcements_manage_announcements')
const isAdmin = currentUser && currentUser.privileges?.includes('announcements_manage_announcements')
const getAnnouncements = async () => {
if (!isAdmin) {