kopia lustrzana https://github.com/elk-zone/elk
				
				
				
			
		
			
				
	
	
		
			67 wiersze
		
	
	
		
			1.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
			
		
		
	
	
			67 wiersze
		
	
	
		
			1.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
| import type { mastodon } from 'masto'
 | |
| import type { CustomEmojisInfo } from './push-notifications/types'
 | |
| import { STORAGE_KEY_CUSTOM_EMOJIS } from '~/constants'
 | |
| 
 | |
| const TTL = 1000 * 60 * 60 * 24 // 1 day
 | |
| 
 | |
| function getDefault(): CustomEmojisInfo {
 | |
|   return {
 | |
|     lastUpdate: 0,
 | |
|     emojis: [],
 | |
|   }
 | |
| }
 | |
| 
 | |
| export const currentCustomEmojis = process.server
 | |
|   ? computed(getDefault)
 | |
|   : useUserLocalStorage(STORAGE_KEY_CUSTOM_EMOJIS, getDefault)
 | |
| 
 | |
| export async function updateCustomEmojis() {
 | |
|   if (Date.now() - currentCustomEmojis.value.lastUpdate < TTL)
 | |
|     return
 | |
| 
 | |
|   const { client } = $(useMasto())
 | |
|   const emojis = await client.v1.customEmojis.list()
 | |
|   Object.assign(currentCustomEmojis.value, {
 | |
|     lastUpdate: Date.now(),
 | |
|     emojis,
 | |
|   })
 | |
| }
 | |
| 
 | |
| function transformEmojiData(emojis: mastodon.v1.CustomEmoji[]) {
 | |
|   const result = []
 | |
| 
 | |
|   for (const emoji of emojis) {
 | |
|     if (!emoji.visibleInPicker)
 | |
|       continue
 | |
|     result.push({
 | |
|       id: emoji.shortcode,
 | |
|       native: ':emoji.shortcode:',
 | |
|       name: emoji.shortcode,
 | |
|       skins: [{ src: emoji.url || emoji.staticUrl }],
 | |
|     })
 | |
|   }
 | |
| 
 | |
|   return result
 | |
| }
 | |
| 
 | |
| export const customEmojisData = computed(() => currentCustomEmojis.value.emojis.length
 | |
|   ? [{
 | |
|       id: 'custom',
 | |
|       name: `Custom emojis on ${currentServer.value}`,
 | |
|       emojis: transformEmojiData(currentCustomEmojis.value.emojis),
 | |
|     }]
 | |
|   : undefined)
 | |
| 
 | |
| export function useEmojisFallback(emojisGetter: () => mastodon.v1.CustomEmoji[] | undefined) {
 | |
|   return computed(() => {
 | |
|     const result: mastodon.v1.CustomEmoji[] = []
 | |
|     const emojis = emojisGetter()
 | |
|     if (emojis)
 | |
|       result.push(...emojis)
 | |
| 
 | |
|     result.push(...currentCustomEmojis.value.emojis)
 | |
| 
 | |
|     return emojisArrayToObject(result)
 | |
|   })
 | |
| }
 |