3 Commits

Author SHA1 Message Date
Sebastian 539284d5b5 chore(deps): update dependency phpunit/phpunit to v12.5.35
Build Test / test (pull_request) Successful in 1m13s
JS Unit Tests / test (pull_request) Successful in 1m16s
PHP Integration Tests / Integration Tests (pull_request) Failing after 1m45s
PHP Unit Tests / test (pull_request) Failing after 1m56s
2026-09-10 03:07:34 +00:00
Sebastian 5c9e13f87b refactor(module): register browser integration through context
Signed-off-by: Sebastian <krupinski01@gmail.com>
2026-08-31 22:55:11 -04:00
Sebastian 9508106d4f feat(preview): disable attachment previews when unavailable
Signed-off-by: Sebastian <krupinski01@gmail.com>
2026-08-31 22:55:11 -04:00
4 changed files with 21 additions and 21 deletions
Generated
+6 -6
View File
@@ -589,16 +589,16 @@
},
{
"name": "phpunit/phpunit",
"version": "12.5.34",
"version": "12.5.35",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
"reference": "6cbff63d670de92cb1cb3d2ff9f40327e9da9c7f"
"reference": "345ac22e42cb14cdc7aa8428655d8bb8c82a4aab"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/6cbff63d670de92cb1cb3d2ff9f40327e9da9c7f",
"reference": "6cbff63d670de92cb1cb3d2ff9f40327e9da9c7f",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/345ac22e42cb14cdc7aa8428655d8bb8c82a4aab",
"reference": "345ac22e42cb14cdc7aa8428655d8bb8c82a4aab",
"shasum": ""
},
"require": {
@@ -667,7 +667,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
"source": "https://github.com/sebastianbergmann/phpunit/tree/12.5.34"
"source": "https://github.com/sebastianbergmann/phpunit/tree/12.5.35"
},
"funding": [
{
@@ -675,7 +675,7 @@
"type": "other"
}
],
"time": "2026-08-27T08:38:28+00:00"
"time": "2026-09-09T04:48:50+00:00"
},
{
"name": "sebastian/cli-parser",
+7 -12
View File
@@ -4,13 +4,14 @@ namespace KTXM\Mail;
use KTXF\Event\DeliveryMode;
use KTXF\Event\EventListenerRegistrarInterface;
use KTXF\Module\ModuleBrowserInterface;
use KTXF\Module\Configuration\BrowserModuleContextInterface;
use KTXF\Module\Configuration\ModuleContextInterface;
use KTXF\Module\ModuleInstanceAbstract;
/**
* Mail Module - Email Client
*/
class Module extends ModuleInstanceAbstract implements ModuleBrowserInterface
class Module extends ModuleInstanceAbstract
{
public function __construct(
@@ -79,16 +80,10 @@ class Module extends ModuleInstanceAbstract implements ModuleBrowserInterface
];
}
public function registerBI(): array
public function configure(ModuleContextInterface $context): void
{
return [
'handle' => $this->handle(),
'namespace' => 'Mail',
'version' => $this->version(),
'label' => $this->label(),
'author' => $this->author(),
'description' => $this->description(),
'boot' => 'static/module.mjs',
];
if ($context instanceof BrowserModuleContextInterface) {
$context->registerModule($this, 'Mail', 'static/module.mjs');
}
}
}
+3 -1
View File
@@ -1,6 +1,6 @@
<script setup lang="ts">
import { computed, ref, watch } from 'vue'
import { useUser } from '@KTXC'
import { usePreviewStore, useUser } from '@KTXC'
import { useMailUiStore } from '@/stores/mailUiStore'
import type { EntityObject, MessageObject } from '@MailManager/models'
import { SecurityLevel } from '@/utile/emailSanitizer'
@@ -29,6 +29,7 @@ const emit = defineEmits<{
// User settings
const { getSetting } = useUser()
const previewStore = usePreviewStore()
const mailUiStore = useMailUiStore()
// Security overrides
@@ -65,6 +66,7 @@ const effectiveSecurityLevel = computed(() => {
// Preview state
const previewDialog = computed(() => mediaViewerComponent('dialog'))
const previewItems = computed<MediaViewerItem[]>(() => {
if (!previewStore.availability.storage) return []
const attachments = message.value?.attachments ?? []
const items: MediaViewerItem[] = []
attachments.forEach((attachment, index) => {
+5 -2
View File
@@ -1,5 +1,6 @@
<script setup lang="ts">
import { computed } from 'vue'
import { usePreviewStore } from '@KTXC'
import RecipientDetails from '@/components/common/RecipientDetails.vue'
import { formatFileSize } from '@/utile/format'
import { mediaViewerCanDisplay, mediaViewerComponent } from '@/services/mediaViewer'
@@ -27,7 +28,9 @@ const emit = defineEmits<{
}>()
const mailUiStore = useMailUiStore()
const previewPopover = computed(() => mediaViewerComponent('popover'))
const previewStore = usePreviewStore()
const previewsAvailable = computed(() => previewStore.availability.storage)
const previewPopover = computed(() => previewsAvailable.value ? mediaViewerComponent('popover') : null)
const message = computed(() => {
return props.entity?.properties ?? null
@@ -48,7 +51,7 @@ const attachmentItems = computed<AttachmentItem[]>(() =>
)
const isPreviewable = (attachment: MessagePartInterface): boolean => {
return mediaViewerCanDisplay(attachment.type)
return previewsAvailable.value && mediaViewerCanDisplay(attachment.type)
}
const handleAttachmentClick = (attachment: MessagePartInterface, index: number): void => {