Page MenuHomePhorge

No OneTemporary

Size
17 KB
Referenced Files
None
Subscribers
None
diff --git a/.gitignore b/.gitignore
index 58c2de3..bc6cafa 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,10 +1,6 @@
*~
\#*
.#*
build
node_modules
TAGS
-/src/contents/ui/AvatarAdapter.qml
-/src/contents/ui/FileDialogAdapter.qml
-/src/contents/ui/FolderDialogAdapter.qml
-/src/contents/ui/ScrollablePageAdapter.qml
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index bf35f04..455fa52 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,121 +1,107 @@
# This file is part of libkazv.
# SPDX-FileCopyrightText: 2022-2023 tusooa <tusooa@kazv.moe>
# SPDX-License-Identifier: AGPL-3.0-or-later
workflow:
rules:
- if: '$CI_PIPELINE_SOURCE == "trigger"'
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
when: never
- if: $CI_COMMIT_BRANCH
- if: '$CI_COMMIT_TAG !~ /^phabricator\//'
stages:
- prepare
- lint
- build
- report
.report:
image:
name: 'reg.lily.kazv.moe/infra/phorge-ci-tools:servant'
rules:
- if: $TARGET_PHID
when: always
- when: never
before_script:
- pipelineUrl="$CI_PROJECT_URL"/-/pipelines/"$CI_PIPELINE_ID"
report-start:
extends: .report
stage: prepare
script:
- 'echo "{\"receiver\": \"$TARGET_PHID\", \"type\": \"work\", \"unit\": [{\"name\": \"GitLab CI (information only)\", \"result\": \"skip\", \"details\": \"$pipelineUrl\", \"format\": \"remarkup\"}]}" | /tools/arcanist/bin/arc call-conduit --conduit-uri https://iron.lily-is.land/ --conduit-token "$CONDUIT_TOKEN" -- harbormaster.sendmessage'
'lint:no-tabs':
stage: lint
script: |
echo 'Verify that no source file contains tabs'
! egrep -R --exclude-dir=transformed-libs --exclude-dir=Intl.js --exclude-dir=node_modules $'\t' src
rules: &build-rules
- changes: &src-chg
- Dockerfile.deps
- '**/*.cpp'
- '**/*.hpp'
- '**/CMakeLists.txt'
- '**/*.in'
- '**/*.qml'
- 'src/js/*.js'
- 'src/js/transformed-libs/*.js'
- 'packaging/**'
- 'icons/**'
.build:
stage: build
rules: *build-rules
.build-debug:
extends: .build
script: |
env JOBS=2 ./packaging/GNU-Linux/appimage/build.sh
artifacts:
paths:
- kazv-Debug.AppImage
expire_in: 1 week
.build-prod:
extends: .build
script: |
env JOBS=2 ./packaging/GNU-Linux/appimage/build-prod.sh
artifacts:
paths:
- kazv-Release.AppImage
expire_in: 1 week
-'build:GNU/Linux-amd64-debug:kf5':
- extends: .build-debug
- before_script:
- - export KF_VER=5
- image:
- name: 'reg.lily.kazv.moe/kazv/libkazv/libkazv:servant-ubuntu20.04-debug'
-
-'build:GNU/Linux-amd64-prod:kf5':
- extends: .build-prod
- before_script:
- - export KF_VER=5
- image:
- name: 'reg.lily.kazv.moe/kazv/libkazv/libkazv:servant-ubuntu20.04-prod'
-
'build:GNU/Linux-amd64-debug:kf6':
extends: .build-debug
before_script:
- export KF_VER=6
image:
name: 'reg.lily.kazv.moe/kazv/libkazv/libkazv:servant-ubuntu22.04-debug'
'build:GNU/Linux-amd64-prod:kf6':
extends: .build-prod
before_script:
- export KF_VER=6
image:
name: 'reg.lily.kazv.moe/kazv/libkazv/libkazv:servant-ubuntu22.04-prod'
report-success:
extends: .report
rules:
- if: $TARGET_PHID
when: on_success
- when: never
stage: report
script:
- 'echo "{\"receiver\": \"$TARGET_PHID\", \"type\": \"pass\"}" | /tools/arcanist/bin/arc call-conduit --conduit-uri https://iron.lily-is.land/ --conduit-token "$CONDUIT_TOKEN" -- harbormaster.sendmessage'
report-failure:
extends: .report
rules:
- if: $TARGET_PHID
when: on_failure
- when: never
stage: report
script:
- 'echo "{\"receiver\": \"$TARGET_PHID\", \"type\": \"fail\"}" | /tools/arcanist/bin/arc call-conduit --conduit-uri https://iron.lily-is.land/ --conduit-token "$CONDUIT_TOKEN" -- harbormaster.sendmessage'
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a4de0b9..b8ccc5a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,86 +1,76 @@
cmake_minimum_required(VERSION 3.16)
project(kazv)
include(FeatureSummary)
set(kazv_VERSION_MAJOR 0)
set(kazv_VERSION_MINOR 4)
set(kazv_VERSION_PATCH 0)
set(kazv_VERSION_STRING ${kazv_VERSION_MAJOR}.${kazv_VERSION_MINOR}.${kazv_VERSION_PATCH})
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})
set(CMAKE_CXX_STANDARD 17)
if(NOT kazv_KF_QT_MAJOR_VERSION)
- set(kazv_KF_QT_MAJOR_VERSION 5)
+ set(kazv_KF_QT_MAJOR_VERSION 6)
endif()
message(STATUS "KF/Qt major version: ${kazv_KF_QT_MAJOR_VERSION}")
-
+if(NOT kazv_KF_QT_MAJOR_VERSION EQUAL 6)
+ message(FATAL_ERROR "KF/Qt major version must be 6")
+endif()
set(QT_MAJOR_VERSION ${kazv_KF_QT_MAJOR_VERSION})
set(KF_MAJOR_VERSION ${kazv_KF_QT_MAJOR_VERSION})
-if(QT_MAJOR_VERSION EQUAL 5)
- set(QT_MIN_VERSION 5.15)
-endif()
-if(KF_MAJOR_VERSION EQUAL 5)
- set(KF_MIN_VERSION 5.78)
-endif()
-
find_package(ECM ${KF_MIN_VERSION} REQUIRED NO_MODULE)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH})
include(KDEInstallDirs)
include(KDECMakeSettings)
include(KDECompilerSettings NO_POLICY_SCOPE)
include(ECMSetupVersion)
include(ECMGenerateHeaders)
include(ECMPoQmTools)
include(ECMAddTests)
include(ECMQtDeclareLoggingCategory)
include(ECMDeprecationSettings)
ecm_set_disabled_deprecation_versions(
QT 5.15.14
KF 5.116.0
KCOREADDONS 5.116.0
)
find_package(Qt${QT_MAJOR_VERSION} ${QT_MIN_VERSION} REQUIRED COMPONENTS
Core Gui Qml QuickControls2 Svg Concurrent Widgets
Multimedia Test Network QuickTest
)
-find_package(KF${KF_MAJOR_VERSION} ${KF_MIN_VERSION} REQUIRED COMPONENTS Kirigami2 Config KIO Notifications)
-if(KF_MAJOR_VERSION EQUAL 6)
- find_package(KF${KF_MAJOR_VERSION}KirigamiAddons REQUIRED)
-else()
- find_package(KF${KF_MAJOR_VERSION}KirigamiAddons)
-endif()
+find_package(KF${KF_MAJOR_VERSION} ${KF_MIN_VERSION} REQUIRED COMPONENTS Kirigami Config KIO Notifications KirigamiAddons)
find_package(Threads REQUIRED)
find_package(nlohmann_json REQUIRED)
find_package(libkazv REQUIRED)
find_package(cmark)
set(CMARK_TARGET_NAME cmark::cmark)
if(NOT cmark_FOUND)
# CMark 0.29.0 on Ubuntu 20.04 has cmark.cmake instead of cmark-config.cmake
# But that is not usable, so we fall back to pkgconfig
find_package(PkgConfig REQUIRED)
pkg_search_module(cmark libcmark IMPORTED_TARGET GLOBAL)
set(CMARK_TARGET_NAME cmark)
endif()
kde_enable_exceptions()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -foperator-names -DQT_NO_EMIT")
add_subdirectory(src)
install(PROGRAMS moe.kazv.mxc.kazv.desktop DESTINATION ${KDE_INSTALL_APPDIR})
install(FILES moe.kazv.mxc.kazv.appdata.xml DESTINATION ${KDE_INSTALL_METAINFODIR})
install(FILES kazv.notifyrc DESTINATION ${KDE_INSTALL_KNOTIFYRCDIR})
install(FILES icons/kazvlogo-256.png DESTINATION ${KDE_INSTALL_ICONDIR}/hicolor/256x256/apps)
feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES)
diff --git a/packaging/GNU-Linux/appimage/build.sh b/packaging/GNU-Linux/appimage/build.sh
index 3eb0fd4..2644a5e 100755
--- a/packaging/GNU-Linux/appimage/build.sh
+++ b/packaging/GNU-Linux/appimage/build.sh
@@ -1,127 +1,103 @@
#!/bin/bash
set -x
set -e
# Collect deps
wget https://raw.githubusercontent.com/KDE/docker-neon/Neon/stable/public.key && \
apt-key add public.key && \
rm public.key
DEP_PACKAGES=(
extra-cmake-modules
wget
weston
dbus-x11
libcmark-dev
)
if [[ $KF_VER == 5 ]]; then
- DEP_PACKAGES+=(
- qtbase5-dev
- qtdeclarative5-dev
- qtmultimedia5-dev
- qml-module-qtmultimedia
- libqt5concurrent5
- libqt5gui5
- libqt5svg5-dev
- qtquickcontrols2-5-dev
- qml-module-qtquick-layouts
- qml-module-qtquick-controls2
- qml-module-qtquick-controls
- qml-module-qt-labs-qmlmodels
- kirigami2-dev
- libkf5config-dev
- libqt5multimedia5-plugins
- qt5-gtk-platformtheme
- plasma-integration
- libkf5kio-dev
- qml-module-qttest
- qml-module-qt-labs-platform
- libkf5notifications-dev
- qml-module-qtquick-dialogs
- qml-module-org-kde-notification
- )
- cp -v packaging/GNU-Linux/appimage/kde-neon-focal.list /etc/apt/sources.list.d/
+ echo "Building on KF5 is no longer supported."
+ exit 1
else
DEP_PACKAGES+=(
qt6-base-dev
qt6-declarative-dev
qt6-multimedia-dev
qml6-module-qtmultimedia
libqt6concurrent6
libqt6gui6
libqt6svg6-dev
libqt6quickcontrols2-6
qml6-module-qtquick-controls
qml6-module-qtquick-layouts
qml6-module-qt-labs-qmlmodels
kf6-kirigami2-dev
libkf6config-dev
qt6-gtk-platformtheme
plasma-integration
libkf6kio-dev
qml6-module-qttest
qml6-module-qt-labs-platform
libkf6notifications-dev
qml6-module-qtquick-dialogs
qml6-module-org-kde-notification
kf6-kirigami-addons-dev
cmark
)
export QMAKE=qmake6
cp -v packaging/GNU-Linux/appimage/kde-neon-jammy.list /etc/apt/sources.list.d/
fi
apt-get update && \
apt-get -y upgrade && \
DEBIAN_FRONTEND="noninteractive" \
apt-get -y install aptitude && \
aptitude -y install "${DEP_PACKAGES[@]}"
# Actual build
mkdir -pv /run/user/test
export XDG_RUNTIME_DIR=/run/user/test
thisDir="$(readlink -f "$(dirname "$(realpath "$0")")")"
BUILD_TYPE="$1"
if [[ ! "$BUILD_TYPE" ]]; then
export BUILD_TYPE=Debug
fi
export JOBS=${JOBS:-$(( $(nproc) / 2))} DEPS_INSTALL_DIR=/opt/libkazv-deps LIBKAZV_INSTALL_DIR=/opt/libkazv KAZV_INSTALL_DIR=/usr
export LD_LIBRARY_PATH="$LIBKAZV_INSTALL_DIR/lib:$DEPS_INSTALL_DIR/lib"
mkdir build && cd build && \
cmake .. -DCMAKE_INSTALL_PREFIX="$KAZV_INSTALL_DIR" \
-DCMAKE_PREFIX_PATH="$LIBKAZV_INSTALL_DIR;$DEPS_INSTALL_DIR" -DCMAKE_BUILD_TYPE=$BUILD_TYPE -Dkazv_KF_QT_MAJOR_VERSION=$KF_VER && \
make -j$JOBS && \
make -j$JOBS DESTDIR=AppDir install && \
dbus-launch --exit-with-session -- bash "$thisDir"/test.sh
wget https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage
wget https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage
chmod +x linuxdeploy*.AppImage
export QML_SOURCES_PATHS=../src
./linuxdeploy-plugin-qt-x86_64.AppImage --appimage-extract
./linuxdeploy-x86_64.AppImage --appimage-extract
# https://github.com/linuxdeploy/linuxdeploy/issues/154
mv -v ./linuxdeploy-plugin-qt-x86_64.AppImage ./linuxdeploy-notplugin-qt-x86_64.AppImage
# Enable the appimage to use Plasma themes, linuxdeploy-plugin-qt will only copy the gtk3 plugin -((
mkdir -pv AppDir/usr/plugins/platformthemes/
cp /usr/lib/x86_64-linux-gnu/qt5/plugins/platformthemes/KDEPlasmaPlatformTheme.so AppDir/usr/plugins/platformthemes/ || true
cp /usr/lib/x86_64-linux-gnu/qt6/plugins/platformthemes/KDEPlasmaPlatformTheme6.so AppDir/usr/plugins/platformthemes/ || true
# Workaround "cannot mix incompatible qt versions" problem
mkdir -pv AppDir/apprun-hooks/
cp -v "$thisDir"/hooks/patch-ld-library-path.sh AppDir/apprun-hooks/
./squashfs-root/AppRun --appdir AppDir -i ../icons/kazvlogo-256.png --plugin qt --output appimage # -l /lib/x86_64-linux-gnu/libstdc++.so.6
cp kazv*.AppImage ../kazv-"$BUILD_TYPE".AppImage
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 4b3047b..c94e6ac 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,115 +1,105 @@
set(KAZV_DATA_DIR ${KDE_INSTALL_DATADIR}/kazv)
set(KAZV_L10N_DIR ${KAZV_DATA_DIR}/l10n)
if(WIN32)
set(KAZV_IS_WINDOWS 1)
else()
set(KAZV_IS_WINDOWS 0)
endif()
configure_file(kazv-path-config.hpp.in kazv-path-config.hpp)
configure_file(kazv-version.cpp.in kazv-version.cpp)
configure_file(kazv-platform.hpp.in kazv-platform.hpp)
configure_file(kazv-defs.hpp.in kazv-defs.hpp)
-set(kazv_avatarAdapterFile ${CMAKE_CURRENT_SOURCE_DIR}/contents/ui/AvatarAdapter_KAC.qml)
-if(NOT KF${KF_MAJOR_VERSION}KirigamiAddons_FOUND)
- set(kazv_avatarAdapterFile ${CMAKE_CURRENT_SOURCE_DIR}/contents/ui/AvatarAdapter_Kirigami.qml)
-endif()
-
-configure_file(${kazv_avatarAdapterFile} ${CMAKE_CURRENT_SOURCE_DIR}/contents/ui/AvatarAdapter.qml COPYONLY)
-configure_file(${CMAKE_CURRENT_SOURCE_DIR}/contents/ui/FileDialogAdapter_Qt${QT_MAJOR_VERSION}.qml ${CMAKE_CURRENT_SOURCE_DIR}/contents/ui/FileDialogAdapter.qml COPYONLY)
-configure_file(${CMAKE_CURRENT_SOURCE_DIR}/contents/ui/FolderDialogAdapter_Qt${QT_MAJOR_VERSION}.qml ${CMAKE_CURRENT_SOURCE_DIR}/contents/ui/FolderDialogAdapter.qml COPYONLY)
-configure_file(${CMAKE_CURRENT_SOURCE_DIR}/contents/ui/ScrollablePageAdapter_KF${KF_MAJOR_VERSION}.qml ${CMAKE_CURRENT_SOURCE_DIR}/contents/ui/ScrollablePageAdapter.qml COPYONLY)
-
set(kazvprivlib_SRCS
qt-job-handler.cpp
qt-job.cpp
${CMAKE_CURRENT_BINARY_DIR}/kazv-version.cpp
matrix-sdk.cpp
matrix-room.cpp
matrix-room-list.cpp
matrix-room-timeline.cpp
matrix-room-member.cpp
matrix-room-member-list-model.cpp
matrix-event-reader.cpp
matrix-event-reader-list-model.cpp
matrix-event.cpp
matrix-link.cpp
meta-types.cpp
l10n-provider.cpp
qt-rand-adapter.cpp
helper.cpp
matrix-promise.cpp
kazv-util.cpp
matrix-sticker-pack.cpp
matrix-sticker.cpp
matrix-sticker-pack-list.cpp
matrix-sticker-pack-source.cpp
matrix-user-given-attrs-map.cpp
qt-promise-handler.cpp
device-mgmt/matrix-device.cpp
device-mgmt/matrix-device-list.cpp
kazv-config.cpp
kazv-io-manager.cpp
kazv-io-job.cpp
kazv-file.cpp
upload-job-model.cpp
kazv-markdown.cpp
shortcuts/shortcut-util.cpp
register-types.cpp
)
ecm_qt_declare_logging_category(kazvprivlib_SRCS
HEADER kazv-log.hpp
IDENTIFIER kazvLog
CATEGORY_NAME moe.kazv.mxc.kazv
)
add_library(kazvprivlib STATIC ${kazvprivlib_SRCS})
target_link_libraries(kazvprivlib PUBLIC
libkazv::kazvall
Qt${QT_MAJOR_VERSION}::Core
Qt${QT_MAJOR_VERSION}::Network
Threads::Threads
Qt${QT_MAJOR_VERSION}::Gui
Qt${QT_MAJOR_VERSION}::Qml
Qt${QT_MAJOR_VERSION}::Quick
Qt${QT_MAJOR_VERSION}::QuickControls2
Qt${QT_MAJOR_VERSION}::Svg
Qt${QT_MAJOR_VERSION}::Concurrent
Qt${QT_MAJOR_VERSION}::Widgets
KF${KF_MAJOR_VERSION}::ConfigCore KF${KF_MAJOR_VERSION}::KIOCore
KF${KF_MAJOR_VERSION}::Notifications
${CMARK_TARGET_NAME}
)
target_include_directories(kazvprivlib PUBLIC ${CMAKE_CURRENT_BINARY_DIR})
target_include_directories(kazvprivlib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/device-mgmt)
set(kazv_SRCS
main.cpp
resources.qrc
)
add_executable(kazv ${kazv_SRCS})
target_link_libraries(kazv
PRIVATE
kazvprivlib
)
set(kazv_INSTALL_ARGS ${KF_INSTALL_TARGETS_DEFAULT_ARGS})
if(NOT kazv_INSTALL_ARGS)
set(kazv_INSTALL_ARGS ${KF${KF_MAJOR_VERSION}_INSTALL_TARGETS_DEFAULT_ARGS})
endif()
install(TARGETS kazv ${kazv_INSTALL_ARGS})
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/l10n/
DESTINATION ${KAZV_L10N_DIR}
FILES_MATCHING PATTERN "*.ftl"
PATTERN "*.json"
)
add_subdirectory(tests)
diff --git a/src/contents/ui/AvatarAdapter_KAC.qml b/src/contents/ui/AvatarAdapter.qml
similarity index 100%
rename from src/contents/ui/AvatarAdapter_KAC.qml
rename to src/contents/ui/AvatarAdapter.qml
diff --git a/src/contents/ui/AvatarAdapter_Kirigami.qml b/src/contents/ui/AvatarAdapter_Kirigami.qml
deleted file mode 100644
index 6639ae9..0000000
--- a/src/contents/ui/AvatarAdapter_Kirigami.qml
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- * This file is part of kazv.
- * SPDX-FileCopyrightText: 2024 tusooa <tusooa@kazv.moe>
- * SPDX-License-Identifier: AGPL-3.0-or-later
- */
-
-import QtQuick 2.15
-import org.kde.kirigami 2.20 as Kirigami
-
-Kirigami.Avatar {
-}
diff --git a/src/contents/ui/FileDialogAdapter_Qt6.qml b/src/contents/ui/FileDialogAdapter.qml
similarity index 100%
rename from src/contents/ui/FileDialogAdapter_Qt6.qml
rename to src/contents/ui/FileDialogAdapter.qml
diff --git a/src/contents/ui/FileDialogAdapter_Qt5.qml b/src/contents/ui/FileDialogAdapter_Qt5.qml
deleted file mode 100644
index dcd7dbf..0000000
--- a/src/contents/ui/FileDialogAdapter_Qt5.qml
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- * This file is part of kazv.
- * SPDX-FileCopyrightText: 2024 tusooa <tusooa@kazv.moe>
- * SPDX-License-Identifier: AGPL-3.0-or-later
- */
-
-import QtQuick 2.15
-import QtQuick.Dialogs 1.3
-
-FileDialog {
-}
diff --git a/src/contents/ui/FolderDialogAdapter_Qt6.qml b/src/contents/ui/FolderDialogAdapter.qml
similarity index 100%
rename from src/contents/ui/FolderDialogAdapter_Qt6.qml
rename to src/contents/ui/FolderDialogAdapter.qml
diff --git a/src/contents/ui/FolderDialogAdapter_Qt5.qml b/src/contents/ui/FolderDialogAdapter_Qt5.qml
deleted file mode 100644
index 2b8a491..0000000
--- a/src/contents/ui/FolderDialogAdapter_Qt5.qml
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- * This file is part of kazv.
- * SPDX-FileCopyrightText: 2024 tusooa <tusooa@kazv.moe>
- * SPDX-License-Identifier: AGPL-3.0-or-later
- */
-
-import QtQuick 2.15
-import QtQuick.Dialogs 1.3
-
-FileDialog {
- selectFolder: true
-}
diff --git a/src/contents/ui/ScrollablePageAdapter_KF6.qml b/src/contents/ui/ScrollablePageAdapter.qml
similarity index 100%
rename from src/contents/ui/ScrollablePageAdapter_KF6.qml
rename to src/contents/ui/ScrollablePageAdapter.qml
diff --git a/src/contents/ui/ScrollablePageAdapter_KF5.qml b/src/contents/ui/ScrollablePageAdapter_KF5.qml
deleted file mode 100644
index 0c463bd..0000000
--- a/src/contents/ui/ScrollablePageAdapter_KF5.qml
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- * This file is part of kazv.
- * SPDX-FileCopyrightText: 2024 tusooa <tusooa@kazv.moe>
- * SPDX-License-Identifier: AGPL-3.0-or-later
- */
-
-import QtQuick 2.15
-import org.kde.kirigami 2.13 as Kirigami
-
-Kirigami.ScrollablePage {
-}

File Metadata

Mime Type
text/x-diff
Expires
Wed, Oct 14, 9:47 AM (1 d, 22 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1787077
Default Alt Text
(17 KB)

Event Timeline