✨ Sharable file
This commit is contained in:
		| @@ -12,7 +12,8 @@ | ||||
|             </n-alert> | ||||
|           </div> | ||||
|           <div v-else> | ||||
|             <n-image v-if="fileType === 'image'" :src="fileSource" /> | ||||
|             <n-image v-if="fileType === 'image'" :src="fileSource" class="w-full" /> | ||||
|             <video v-else-if="fileType === 'video'" :src="fileSource" controls class="w-full" /> | ||||
|           </div> | ||||
|         </n-gi> | ||||
|  | ||||
| @@ -83,7 +84,25 @@ | ||||
|               v-model:value="filePass" | ||||
|               type="password" | ||||
|             /> | ||||
|             <n-button @click="downloadFile">Download</n-button> | ||||
|             <div class="flex gap-2"> | ||||
|               <n-button class="flex-grow-1" @click="downloadFile">Download</n-button> | ||||
|               <n-popover placement="bottom" trigger="hover"> | ||||
|                 <template #trigger> | ||||
|                   <n-button> | ||||
|                     <n-icon> | ||||
|                       <qr-code-round /> | ||||
|                     </n-icon> | ||||
|                   </n-button> | ||||
|                 </template> | ||||
|                 <n-qr-code | ||||
|                   type="svg" | ||||
|                   :value="currentUrl" | ||||
|                   :size="160" | ||||
|                   icon-src="/favicon.png" | ||||
|                   error-correction-level="H" | ||||
|                 /> | ||||
|               </n-popover> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div v-else> | ||||
|             <n-progress processing :percentage="progress" /> | ||||
| @@ -109,9 +128,17 @@ import { | ||||
|   NCode, | ||||
|   NGrid, | ||||
|   NGi, | ||||
|   NPopover, | ||||
|   NQrCode, | ||||
|   useMessage, | ||||
| } from 'naive-ui' | ||||
| import { DataUsageRound, InfoRound, DetailsRound, FileUploadOutlined } from '@vicons/material' | ||||
| import { | ||||
|   DataUsageRound, | ||||
|   InfoRound, | ||||
|   DetailsRound, | ||||
|   FileUploadOutlined, | ||||
|   QrCodeRound, | ||||
| } from '@vicons/material' | ||||
| import { useRoute } from 'vue-router' | ||||
| import { computed, onMounted, ref } from 'vue' | ||||
|  | ||||
| @@ -135,6 +162,8 @@ const showTechDetails = ref<boolean>(false) | ||||
|  | ||||
| const messageDisplay = useMessage() | ||||
|  | ||||
| const currentUrl = window.location.href | ||||
|  | ||||
| const fileInfo = ref<any>(null) | ||||
| async function fetchFileInfo() { | ||||
|   try { | ||||
| @@ -161,10 +190,11 @@ function downloadFile() { | ||||
|     return | ||||
|   } | ||||
|   if (fileInfo.value.is_encrypted) { | ||||
|     downloadAndDecryptFile(fileSource.value, filePass.value, (p: number) => { | ||||
|     downloadAndDecryptFile(fileSource.value, filePass.value, fileInfo.value.name, (p: number) => { | ||||
|       progress.value = p * 100 | ||||
|     }).catch((err) => { | ||||
|       messageDisplay.error('Download failed: ' + err.message, { closable: true, duration: 10000 }) | ||||
|       progress.value = undefined | ||||
|     }) | ||||
|   } else { | ||||
|     window.open(fileSource.value, '_blank') | ||||
|   | ||||
		Reference in New Issue
	
	Block a user