v2.0.3-rc (#32)
Some checks reported errors
BlockStorage/repertory/pipeline/head Something is wrong with the build of this commit
Some checks reported errors
BlockStorage/repertory/pipeline/head Something is wrong with the build of this commit
# Changelog ## v2.0.3-rc ### Issues * \#28 \[bug\] Address slow directory responses in S3 mounts for deeply nested directories * \#29 \[bug\] S3 error responses are not being logged * \#30 \[bug\] Sia provider error responses are not logged * \#31 \[bug\] S3 provider should limit max key size to 1024 ### Changes from v2.0.2-rc * Always use direct for read-only providers * Fixed externally removed files not being processed during cleanup * Fixed http headers not being added for requests * Fixed incorrect `stat` values for remote mounts * Fixed invalid directory nullptr error on remote mounts * Fixed memory leak in event system * Refactored application shutdown * Refactored event system * Updated build system to Alpine 3.21.0 * Updated build system to MinGW-w64 12.0.0 * Updated copyright to 2018-2025 Reviewed-on: #32
This commit is contained in:
parent
8dd46b8ad8
commit
fa439c634f
@ -26,6 +26,7 @@ cppvsdbg
|
|||||||
create_notraverse
|
create_notraverse
|
||||||
crypto_aead_xchacha20poly1305_ietf_npubbytes
|
crypto_aead_xchacha20poly1305_ietf_npubbytes
|
||||||
cstdint
|
cstdint
|
||||||
|
curlopt_aws_sigv4
|
||||||
cxxflags
|
cxxflags
|
||||||
cxxstd
|
cxxstd
|
||||||
d_largefile64_source
|
d_largefile64_source
|
||||||
@ -127,6 +128,7 @@ libcurl
|
|||||||
libdsm
|
libdsm
|
||||||
libevent
|
libevent
|
||||||
libexample
|
libexample
|
||||||
|
libexpat
|
||||||
libfuse3
|
libfuse3
|
||||||
libgmock
|
libgmock
|
||||||
libgtest
|
libgtest
|
||||||
@ -139,10 +141,12 @@ libuuid
|
|||||||
libuuid_include_dirs
|
libuuid_include_dirs
|
||||||
libvlc
|
libvlc
|
||||||
linkflags
|
linkflags
|
||||||
|
localappdata
|
||||||
lptr
|
lptr
|
||||||
lpwstr
|
lpwstr
|
||||||
markdownlint
|
markdownlint
|
||||||
mbig
|
mbig
|
||||||
|
minio
|
||||||
msvc
|
msvc
|
||||||
msvcr120
|
msvcr120
|
||||||
msys2
|
msys2
|
||||||
@ -154,6 +158,7 @@ nlohmann_json
|
|||||||
nmakeprg
|
nmakeprg
|
||||||
nominmax
|
nominmax
|
||||||
ntstatus
|
ntstatus
|
||||||
|
nullptr
|
||||||
nuspell_version
|
nuspell_version
|
||||||
oleaut32
|
oleaut32
|
||||||
openal_version
|
openal_version
|
||||||
@ -198,6 +203,7 @@ stduuid_project
|
|||||||
strequal
|
strequal
|
||||||
ularge_integer
|
ularge_integer
|
||||||
uring
|
uring
|
||||||
|
url
|
||||||
userenv
|
userenv
|
||||||
utimens_impl
|
utimens_impl
|
||||||
utimensat
|
utimensat
|
||||||
|
25
CHANGELOG.md
25
CHANGELOG.md
@ -1,14 +1,37 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## v2.0.3-rc
|
||||||
|
|
||||||
|
### Issues
|
||||||
|
|
||||||
|
* \#28 \[bug\] Address slow directory responses in S3 mounts for deeply nested directories
|
||||||
|
* \#29 \[bug\] S3 error responses are not being logged
|
||||||
|
* \#30 \[bug\] Sia provider error responses are not logged
|
||||||
|
* \#31 \[bug\] S3 provider should limit max key size to 1024
|
||||||
|
|
||||||
|
### Changes from v2.0.2-rc
|
||||||
|
|
||||||
|
* Always use direct for read-only providers
|
||||||
|
* Fixed externally removed files not being processed during cleanup
|
||||||
|
* Fixed http headers not being added for requests
|
||||||
|
* Fixed incorrect `stat` values for remote mounts
|
||||||
|
* Fixed invalid directory nullptr error on remote mounts
|
||||||
|
* Fixed memory leak in event system
|
||||||
|
* Refactored application shutdown
|
||||||
|
* Refactored event system
|
||||||
|
* Updated build system to Alpine 3.21.0
|
||||||
|
* Updated build system to MinGW-w64 12.0.0
|
||||||
|
* Updated copyright to 2018-2025
|
||||||
|
|
||||||
## v2.0.2-rc
|
## v2.0.2-rc
|
||||||
|
|
||||||
### BREAKING CHANGES
|
### BREAKING CHANGES
|
||||||
|
|
||||||
* Refactored `config.json` - will need to verify configuration settings prior to mounting
|
* Refactored `config.json` - will need to verify configuration settings prior to mounting
|
||||||
|
|
||||||
|
<!-- markdownlint-disable-next-line -->
|
||||||
### Issues
|
### Issues
|
||||||
|
|
||||||
* \#12 \[Unit Test\] Complete all providers unit tests
|
|
||||||
* \#14 \[Unit Test\] SQLite mini-ORM unit tests and cleanup
|
* \#14 \[Unit Test\] SQLite mini-ORM unit tests and cleanup
|
||||||
* \#16 Add support for bucket name in Sia provider
|
* \#16 Add support for bucket name in Sia provider
|
||||||
* \#17 Update to common c++ build system
|
* \#17 Update to common c++ build system
|
||||||
|
@ -3,6 +3,10 @@ cmake_minimum_required(VERSION 3.27)
|
|||||||
cmake_policy(SET CMP0135 NEW)
|
cmake_policy(SET CMP0135 NEW)
|
||||||
cmake_policy(SET CMP0144 NEW)
|
cmake_policy(SET CMP0144 NEW)
|
||||||
|
|
||||||
|
if (NOT PROJECT_INTERFACE)
|
||||||
|
message(FATAL_ERROR "Project must be compiled via 'make_win32.cmd'/'make_win32.sh' or 'make_unix.sh' build scripts. Invoking 'cmake' directly is not supported.")
|
||||||
|
endif()
|
||||||
|
|
||||||
project(${PROJECT_NAME}
|
project(${PROJECT_NAME}
|
||||||
DESCRIPTION ${PROJECT_DESC}
|
DESCRIPTION ${PROJECT_DESC}
|
||||||
HOMEPAGE_URL ${PROJECT_URL}
|
HOMEPAGE_URL ${PROJECT_URL}
|
||||||
@ -158,6 +162,7 @@ endif()
|
|||||||
-DPROJECT_FUSE=${PROJECT_FUSE}
|
-DPROJECT_FUSE=${PROJECT_FUSE}
|
||||||
-DPROJECT_FUSE_INCLUDE_DIRS=${PROJECT_FUSE_INCLUDE_DIRS}
|
-DPROJECT_FUSE_INCLUDE_DIRS=${PROJECT_FUSE_INCLUDE_DIRS}
|
||||||
-DPROJECT_GIT_REV=${PROJECT_GIT_REV}
|
-DPROJECT_GIT_REV=${PROJECT_GIT_REV}
|
||||||
|
-DPROJECT_INTERFACE=1
|
||||||
-DPROJECT_IS_ALPINE=${PROJECT_IS_ALPINE}
|
-DPROJECT_IS_ALPINE=${PROJECT_IS_ALPINE}
|
||||||
-DPROJECT_IS_ARM64=${PROJECT_IS_ARM64}
|
-DPROJECT_IS_ARM64=${PROJECT_IS_ARM64}
|
||||||
-DPROJECT_IS_MINGW=${PROJECT_IS_MINGW}
|
-DPROJECT_IS_MINGW=${PROJECT_IS_MINGW}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
# Repertory MIT License
|
# Repertory MIT License
|
||||||
### Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
### Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
126
README.md
126
README.md
@ -1,23 +1,22 @@
|
|||||||
# Repertory
|
# Repertory
|
||||||
|
|
||||||
Repertory allows you to mount AWS S3 and Sia via FUSE on Linux ~~/OS X~~ or via WinFSP
|
Repertory allows you to mount S3 and Sia via FUSE on Linux or via WinFSP
|
||||||
on Windows.
|
on Windows.
|
||||||
|
|
||||||
## Details and Features
|
## Details and Features
|
||||||
|
|
||||||
* Optimized for [Plex Media Server](https://www.plex.tv/)
|
* Optimized for [Plex Media Server](https://www.plex.tv/)
|
||||||
* Single application to mount AWS S3 and/or Sia
|
* Single application to mount S3 and/or Sia
|
||||||
* Remote mounting of Repertory instances on Linux ~~, OS X~~ and Windows
|
* Remote mounting of Repertory instances on Linux and Windows
|
||||||
* Securely share your mounts over TCP/IP (`XChaCha20-Poly1305` stream cipher)
|
* Securely share your mounts over TCP/IP via `XChaCha20-Poly1305` with other systems on your network or over the internet.
|
||||||
* Cross-platform support (Linux 64-bit, Linux arm64/aarch64, ~~OS X,~~ Windows 64-bit)
|
* Cross-platform support (Linux 64-bit, Linux arm64/aarch64, Windows 64-bit)
|
||||||
|
* Optionally encrypt file names and file data via `XChaCha20-Poly1305` in S3 mounts
|
||||||
|
|
||||||
## Minimum Requirements
|
## Minimum Requirements
|
||||||
|
|
||||||
* [Sia renterd](https://github.com/SiaFoundation/renterd/releases) v0.4.0+ for Sia support
|
* [Sia renterd](https://github.com/SiaFoundation/renterd/releases) v0.4.0+ for Sia support
|
||||||
* Only 64-bit operating systems are supported
|
* Only 64-bit operating systems are supported
|
||||||
* By default, Linux requires `fusermount3`; otherwise, `repertory` must be manually compiled with `libfuse2` support
|
* By default, Linux requires `fusermount3`; otherwise, `repertory` must be manually compiled with `libfuse2` support
|
||||||
* ~~OS X requires the following dependency to be installed:~~
|
|
||||||
* ~~[FUSE for macOS v4.5.0](https://github.com/osxfuse/osxfuse/releases/download/macfuse-4.5.0/macfuse-4.5.0.dmg)~~
|
|
||||||
* Windows requires the following dependencies to be installed:
|
* Windows requires the following dependencies to be installed:
|
||||||
* [WinFSP 2023](https://github.com/winfsp/winfsp/releases/download/v2.0/winfsp-2.0.23075.msi)
|
* [WinFSP 2023](https://github.com/winfsp/winfsp/releases/download/v2.0/winfsp-2.0.23075.msi)
|
||||||
|
|
||||||
@ -25,47 +24,103 @@ on Windows.
|
|||||||
|
|
||||||
* Linux `arm64/aarch64`
|
* Linux `arm64/aarch64`
|
||||||
* Linux `amd64`
|
* Linux `amd64`
|
||||||
* ~~OS X Mojave and above~~
|
|
||||||
* Windows 64-bit 10, 11
|
* Windows 64-bit 10, 11
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
|
### Sia
|
||||||
|
|
||||||
|
* Initial Configuration
|
||||||
|
* Sia steps:
|
||||||
|
* Set the appropriate bucket name and `renterd` API password in `repertory` configuration:
|
||||||
|
* To use `default` as the bucket name and configuration name:
|
||||||
|
* `repertory -set HostConfig.ApiPassword '<my password>'`
|
||||||
|
* To use a different bucket name with `default` as the configuration name:
|
||||||
|
* `repertory -set HostConfig.ApiPassword '<my password>'`
|
||||||
|
* `repertory -set SiaConfig.Bucket '<my bucket>'`
|
||||||
|
* For all other configurations:
|
||||||
|
* `repertory --name '<my config name>' -set HostConfig.ApiPassword '<my password>'`
|
||||||
|
* `repertory --name '<my config name>' -set SiaConfig.Bucket '<my bucket name>'`
|
||||||
|
* To verify/view all configuration options:
|
||||||
|
* `repertory -dc`
|
||||||
|
* `repertory --name '<my config name>' -dc`
|
||||||
|
* Example:
|
||||||
|
* `repertory --name default -dc`
|
||||||
|
* Mounting on Linux:
|
||||||
|
* `repertory /mnt/location`
|
||||||
|
* `repertory --name '<my config name>' /mnt/location`
|
||||||
|
* Example:
|
||||||
|
* `repertory --name default /mnt/location`
|
||||||
|
* Mounting on Windows:
|
||||||
|
* `repertory t:`
|
||||||
|
* `repertory --name '<my config name>' t:`
|
||||||
|
* Example:
|
||||||
|
* `repertory --name default t:`
|
||||||
|
|
||||||
|
### S3
|
||||||
|
|
||||||
|
* Initial Configuration
|
||||||
|
* S3 steps:
|
||||||
|
* Set the appropriate base URL:
|
||||||
|
* `repertory -s3 --name '<my config name>' -set S3Config.URL '<my url>'`
|
||||||
|
* Example:
|
||||||
|
* `repertory -s3 --name minio -set S3Config.URL 'http://localhost:9000'`
|
||||||
|
* Set the appropriate bucket name:
|
||||||
|
* `repertory -s3 --name '<my config name>' -set S3Config.Bucket '<my bucket name>'`
|
||||||
|
* Set the appropriate access key:
|
||||||
|
* `repertory -s3 --name '<my config name>' -set S3Config.AccessKey '<my access key>'`
|
||||||
|
* Set the appropriate secret key:
|
||||||
|
* `repertory -s3 --name '<my config name>' -set S3Config.SecretKey '<my secret key>'`
|
||||||
|
* For Sia and most local S3 gateway instances, enable path style URL's:
|
||||||
|
* `repertory -s3 --name '<my config name>' -set S3Config.UsePathStyle true`
|
||||||
|
* Optional steps:
|
||||||
|
* Set an appropriate region. Default is set to `any`:
|
||||||
|
* `repertory -s3 --name '<my config name>' -set S3Config.Region '<my region>'`
|
||||||
|
* Enable encrypted file names and file data. Set a strong, random encryption token and be sure to store it in a secure backup location:
|
||||||
|
* `repertory -s3 --name '<my config name>' -set S3Config.EncryptionToken '<my strong password>'`
|
||||||
|
* To verify/view all configuration options:
|
||||||
|
* `repertory -s3 --name '<my config name>' -dc`
|
||||||
|
* Example:
|
||||||
|
* `repertory -s3 --name minio -dc`
|
||||||
|
* Mounting on Linux:
|
||||||
|
* `repertory -s3 --name '<my config name>' /mnt/location`
|
||||||
|
* Example:
|
||||||
|
* `repertory -s3 --name minio /mnt/location`
|
||||||
|
* Mounting on Windows:
|
||||||
|
* `repertory -s3 --name '<my config name>' t:`
|
||||||
|
* Example:
|
||||||
|
* `repertory -s3 --name minio t:`
|
||||||
|
|
||||||
### Notable Options
|
### Notable Options
|
||||||
|
|
||||||
* `-dc`
|
|
||||||
* Display mount configuration.
|
|
||||||
* For Sia, `--name` is optional
|
|
||||||
* For S3, the `-s3` option is required along with `--name`
|
|
||||||
* `--help`
|
* `--help`
|
||||||
* Display all mount utility options.
|
* Display all mount utility options
|
||||||
* `--name, -na [name]`
|
* `--name, -na [name]`
|
||||||
* The `--name` option can be set to any valid value allowed as a file name for your filesystem.
|
* The `--name` option can be set to any valid value allowed as a file name for your filesystem.
|
||||||
* For Sia, the bucket name will be set to the same value if it is empty in the configuration file.
|
* For Sia, the bucket name will be set to the same value if it is empty in the configuration file.
|
||||||
* If the `--name` option is not specified, `default` will be used.
|
* If the `--name` option is not specified, `default` will be used.
|
||||||
* For S3, the `--name` option is required and does not affect the bucket name.
|
* For S3, the `--name` option is required and does not affect the bucket name.
|
||||||
* `-set SiaConfig.Bucket`
|
* `-dc`
|
||||||
* Set Sia bucket name for the mount.
|
* Display mount configuration
|
||||||
* Can be used in combination with `--name` to target a unique configuration.
|
* For Sia, `--name` is optional
|
||||||
* `-set S3Config.Bucket`
|
* For S3, the `-s3` option is required along with `--name`
|
||||||
* S3 bucket name for the mount.
|
|
||||||
* Must be used in combination with `--name` to target a unique configuration.
|
|
||||||
* Must be used in combination with `-s3`.
|
|
||||||
|
|
||||||
### Sia
|
### Data Directories
|
||||||
|
|
||||||
* Linux
|
* Linux
|
||||||
* `repertory /mnt/location`
|
* `~/.local/repertory2`
|
||||||
* `repertory --name default /mnt/location`
|
|
||||||
* Windows
|
* Windows
|
||||||
* `repertory.exe t:`
|
* `%LOCALAPPDATA%\repertory2`
|
||||||
* `repertory.exe --name default t:`
|
* Example:
|
||||||
|
* `C:\Users\Tom\AppData\Local\repertory2`
|
||||||
|
* IMPORTANT:
|
||||||
|
* It is highly recommended to exclude this folder from any anti-virus/anti-malware applications as severe performance issues may arise.
|
||||||
|
* Excluding the mounted drive letter is also highly recommended.
|
||||||
|
|
||||||
### S3
|
## Remote Mounting
|
||||||
|
|
||||||
* Linux
|
`Repertory` allows local mounts to be shared with other computers on your network.
|
||||||
* `repertory --name storj -s3 /mnt/location`
|
This option is referred to as remote mounting. Instructions TBD.
|
||||||
* Windows
|
|
||||||
* `repertory.exe --name storj -s3 t:`
|
|
||||||
|
|
||||||
## Compiling
|
## Compiling
|
||||||
|
|
||||||
@ -94,17 +149,26 @@ on Windows.
|
|||||||
|
|
||||||
## Credits
|
## Credits
|
||||||
|
|
||||||
|
* [binutils](https://www.gnu.org/software/binutils/)
|
||||||
* [boost c++ libraries](https://www.boost.org/)
|
* [boost c++ libraries](https://www.boost.org/)
|
||||||
* [cpp-httplib](https://github.com/yhirose/cpp-httplib)
|
* [cpp-httplib](https://github.com/yhirose/cpp-httplib)
|
||||||
* [curl](https://curl.haxx.se/)
|
* [curl](https://curl.haxx.se/)
|
||||||
* ~~[FUSE for macOS](https://osxfuse.github.io/)~~
|
* [docker](https://www.docker.com/)
|
||||||
* [Google Test](https://github.com/google/googletest)
|
* [Google Test](https://github.com/google/googletest)
|
||||||
|
* [ICU](https://icu.unicode.org/)
|
||||||
* [JSON for Modern C++](https://github.com/nlohmann/json)
|
* [JSON for Modern C++](https://github.com/nlohmann/json)
|
||||||
|
* [libexpat](https://github.com/libexpat/libexpat)
|
||||||
* [libfuse](https://github.com/libfuse/libfuse)
|
* [libfuse](https://github.com/libfuse/libfuse)
|
||||||
* [libsodium](https://doc.libsodium.org/)
|
* [libsodium](https://doc.libsodium.org/)
|
||||||
|
* [mingw-w64](https://www.mingw-w64.org/)
|
||||||
|
* [MSYS2](https://www.msys2.org)
|
||||||
* [OpenSSL](https://www.openssl.org/)
|
* [OpenSSL](https://www.openssl.org/)
|
||||||
|
* [pkg-config](https://www.freedesktop.org/wiki/Software/pkg-config/)
|
||||||
|
* [pugixml](https://pugixml.org/)
|
||||||
|
* [RocksDB](https://rocksdb.org)
|
||||||
* [ScPrime](https://scpri.me/)
|
* [ScPrime](https://scpri.me/)
|
||||||
* [Sia Decentralized Cloud Storage](https://sia.tech/)
|
* [Sia Decentralized Cloud Storage](https://sia.tech/)
|
||||||
|
* [spdlog](https://github.com/gabime/spdlog)
|
||||||
* [SQLite](https://www.sqlite.org)
|
* [SQLite](https://www.sqlite.org)
|
||||||
* [stduuid](https://github.com/mariusbancila/stduuid)
|
* [stduuid](https://github.com/mariusbancila/stduuid)
|
||||||
* [Storj](https://storj.io/)
|
* [Storj](https://storj.io/)
|
||||||
|
@ -1,15 +1,15 @@
|
|||||||
set(BINUTILS_HASH ae9a5789e23459e59606e6714723f2d3ffc31c03174191ef0d015bdf06007450)
|
set(BINUTILS_HASH b53606f443ac8f01d1d5fc9c39497f2af322d99e14cea5c0b4b124d630379365)
|
||||||
set(BOOST_HASH f55c340aa49763b1925ccf02b2e83f35fdcf634c9d5164a2acb87540173c741d)
|
|
||||||
set(BOOST2_HASH 7bd7ddceec1a1dfdcbdb3e609b60d01739c38390a5f956385a12f3122049f0ca)
|
set(BOOST2_HASH 7bd7ddceec1a1dfdcbdb3e609b60d01739c38390a5f956385a12f3122049f0ca)
|
||||||
|
set(BOOST_HASH f55c340aa49763b1925ccf02b2e83f35fdcf634c9d5164a2acb87540173c741d)
|
||||||
set(CPP_HTTPLIB_HASH 405abd8170f2a446fc8612ac635d0db5947c0d2e156e32603403a4496255ff00)
|
set(CPP_HTTPLIB_HASH 405abd8170f2a446fc8612ac635d0db5947c0d2e156e32603403a4496255ff00)
|
||||||
set(CURL_HASH 5a231145114589491fc52da118f9c7ef8abee885d1cb1ced99c7290e9a352f07)
|
set(CURL_HASH 5a231145114589491fc52da118f9c7ef8abee885d1cb1ced99c7290e9a352f07)
|
||||||
set(EXPAT_HASH 372b18f6527d162fa9658f1c74d22a37429b82d822f5a1e1fc7e00f6045a06a2)
|
set(EXPAT_HASH 372b18f6527d162fa9658f1c74d22a37429b82d822f5a1e1fc7e00f6045a06a2)
|
||||||
set(GCC_HASH 7d376d445f93126dc545e2c0086d0f647c3094aae081cdb78f42ce2bc25e7293)
|
set(GCC_HASH 7d376d445f93126dc545e2c0086d0f647c3094aae081cdb78f42ce2bc25e7293)
|
||||||
set(GTEST_HASH 7b42b4d6ed48810c5362c265a17faebe90dc2373c885e5216439d37927f02926)
|
set(GTEST_HASH 7b42b4d6ed48810c5362c265a17faebe90dc2373c885e5216439d37927f02926)
|
||||||
set(ICU_HASH 925e6b4b8cf8856e0ac214f6f34e30dee63b7bb7a50460ab4603950eff48f89e)
|
set(ICU_HASH a2c443404f00098e9e90acf29dc318e049d2dc78d9ae5f46efb261934a730ce2)
|
||||||
set(JSON_HASH 0d8ef5af7f9794e3263480193c491549b2ba6cc74bb018906202ada498a79406)
|
set(JSON_HASH 0d8ef5af7f9794e3263480193c491549b2ba6cc74bb018906202ada498a79406)
|
||||||
set(LIBSODIUM_HASH 8e5aeca07a723a27bbecc3beef14b0068d37e7fc0e97f51b3f1c82d2a58005c1)
|
set(LIBSODIUM_HASH 8e5aeca07a723a27bbecc3beef14b0068d37e7fc0e97f51b3f1c82d2a58005c1)
|
||||||
set(MINGW_HASH 3f66bce069ee8bed7439a1a13da7cb91a5e67ea6170f21317ac7f5794625ee10)
|
set(MINGW_HASH 30e5aad2c48dd318150f79cff47661232c4175876d6b4d6b270961cf2b49a48b)
|
||||||
set(OPENSSL_HASH e15dda82fe2fe8139dc2ac21a36d4ca01d5313c75f99f46c4e8a27709b7294bf)
|
set(OPENSSL_HASH e15dda82fe2fe8139dc2ac21a36d4ca01d5313c75f99f46c4e8a27709b7294bf)
|
||||||
set(PKG_CONFIG_HASH 6fc69c01688c9458a57eb9a1664c9aba372ccda420a02bf4429fe610e7e7d591)
|
set(PKG_CONFIG_HASH 6fc69c01688c9458a57eb9a1664c9aba372ccda420a02bf4429fe610e7e7d591)
|
||||||
set(PUGIXML_HASH 2f10e276870c64b1db6809050a75e11a897a8d7456c4be5c6b2e35a11168a015)
|
set(PUGIXML_HASH 2f10e276870c64b1db6809050a75e11a897a8d7456c4be5c6b2e35a11168a015)
|
||||||
|
@ -20,11 +20,13 @@ if(PROJECT_ENABLE_CURL)
|
|||||||
LIST_SEPARATOR |
|
LIST_SEPARATOR |
|
||||||
CMAKE_ARGS
|
CMAKE_ARGS
|
||||||
${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||||
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
|
||||||
-DBUILD_STATIC_LIBS=ON
|
|
||||||
-DBUILD_CURL_EXE=OFF
|
-DBUILD_CURL_EXE=OFF
|
||||||
|
-DBUILD_LIBCURL_DOCS=OFF
|
||||||
|
-DBUILD_MISC_DOCS=OFF
|
||||||
|
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||||
-DBUILD_STATIC_CURL=ON
|
-DBUILD_STATIC_CURL=ON
|
||||||
-DBUILD_STATIC_LIBS=ON
|
-DBUILD_STATIC_LIBS=ON
|
||||||
|
-DBUILD_STATIC_LIBS=ON
|
||||||
-DBUILD_TESTING=OFF
|
-DBUILD_TESTING=OFF
|
||||||
-DCURL_CA_BUNDLE=./cacert.pem
|
-DCURL_CA_BUNDLE=./cacert.pem
|
||||||
-DCURL_CA_FALLBACK=ON
|
-DCURL_CA_FALLBACK=ON
|
||||||
@ -33,6 +35,7 @@ if(PROJECT_ENABLE_CURL)
|
|||||||
-DCURL_USE_LIBSSH2=OFF
|
-DCURL_USE_LIBSSH2=OFF
|
||||||
-DCURL_USE_OPENSSL=${PROJECT_ENABLE_OPENSSL}
|
-DCURL_USE_OPENSSL=${PROJECT_ENABLE_OPENSSL}
|
||||||
-DCURL_ZLIB=ON
|
-DCURL_ZLIB=ON
|
||||||
|
-DENABLE_CURL_MANUAL=OFF
|
||||||
-DENABLE_THREADED_RESOLVER=ON
|
-DENABLE_THREADED_RESOLVER=ON
|
||||||
-DOPENSSL_ROOT_DIR=${OPENSSL_ROOT_DIR}
|
-DOPENSSL_ROOT_DIR=${OPENSSL_ROOT_DIR}
|
||||||
-DOPENSSL_USE_STATIC_LIBS=${OPENSSL_USE_STATIC_LIBS}
|
-DOPENSSL_USE_STATIC_LIBS=${OPENSSL_USE_STATIC_LIBS}
|
||||||
|
@ -1,28 +1,28 @@
|
|||||||
set(BINUTILS_VERSION 2.41)
|
set(BINUTILS_VERSION 2.43)
|
||||||
set(BOOST2_MAJOR_VERSION 1)
|
|
||||||
set(BOOST2_MINOR_VERSION 76)
|
|
||||||
set(BOOST2_PATCH_VERSION 0)
|
|
||||||
set(BOOST_MAJOR_VERSION 1)
|
set(BOOST_MAJOR_VERSION 1)
|
||||||
set(BOOST_MINOR_VERSION 87)
|
set(BOOST_MINOR_VERSION 87)
|
||||||
set(BOOST_PATCH_VERSION 0)
|
set(BOOST_PATCH_VERSION 0)
|
||||||
|
set(BOOST2_MAJOR_VERSION 1)
|
||||||
|
set(BOOST2_MINOR_VERSION 76)
|
||||||
|
set(BOOST2_PATCH_VERSION 0)
|
||||||
set(CPP_HTTPLIB_VERSION 0.18.1)
|
set(CPP_HTTPLIB_VERSION 0.18.1)
|
||||||
set(CURL2_VERSION 8_11_0)
|
|
||||||
set(CURL_VERSION 8.11.0)
|
set(CURL_VERSION 8.11.0)
|
||||||
set(EXPAT2_VERSION 2_6_4)
|
set(CURL2_VERSION 8_11_0)
|
||||||
set(EXPAT_VERSION 2.6.4)
|
set(EXPAT_VERSION 2.6.4)
|
||||||
|
set(EXPAT2_VERSION 2_6_4)
|
||||||
set(GCC_VERSION 14.2.0)
|
set(GCC_VERSION 14.2.0)
|
||||||
set(GTEST_VERSION 1.15.2)
|
set(GTEST_VERSION 1.15.2)
|
||||||
set(ICU_VERSION 75-1)
|
set(ICU_VERSION 76-1)
|
||||||
set(JSON_VERSION 3.11.3)
|
set(JSON_VERSION 3.11.3)
|
||||||
set(LIBSODIUM_VERSION 1.0.20)
|
set(LIBSODIUM_VERSION 1.0.20)
|
||||||
set(MESA_VERSION 23.3.3)
|
set(MESA_VERSION 23.3.3)
|
||||||
set(MINGW_VERSION 11.0.1)
|
set(MINGW_VERSION 12.0.0)
|
||||||
set(OPENSSL_VERSION 3.4.0)
|
set(OPENSSL_VERSION 3.4.0)
|
||||||
set(PKG_CONFIG_VERSION 0.29.2)
|
set(PKG_CONFIG_VERSION 0.29.2)
|
||||||
set(PUGIXML_VERSION 1.14)
|
set(PUGIXML_VERSION 1.14)
|
||||||
set(ROCKSDB_VERSION 9.7.4)
|
set(ROCKSDB_VERSION 9.7.4)
|
||||||
set(SPDLOG_VERSION 1.15.0)
|
set(SPDLOG_VERSION 1.15.0)
|
||||||
set(SQLITE2_VERSION 3.46.1)
|
|
||||||
set(SQLITE_VERSION 3460100)
|
set(SQLITE_VERSION 3460100)
|
||||||
|
set(SQLITE2_VERSION 3.46.1)
|
||||||
set(STDUUID_VERSION 1.2.3)
|
set(STDUUID_VERSION 1.2.3)
|
||||||
set(ZLIB_VERSION 1.3.1)
|
set(ZLIB_VERSION 1.3.1)
|
||||||
|
@ -5,12 +5,12 @@ PROJECT_NAME="repertory"
|
|||||||
PROJECT_COMPANY_NAME="https://git.fifthgrid.com/blockstorage"
|
PROJECT_COMPANY_NAME="https://git.fifthgrid.com/blockstorage"
|
||||||
PROJECT_URL="${PROJECT_COMPANY_NAME}/repertory"
|
PROJECT_URL="${PROJECT_COMPANY_NAME}/repertory"
|
||||||
|
|
||||||
PROJECT_COPYRIGHT="Copyright <2018-2024> <MIT License> <${PROJECT_URL}>"
|
PROJECT_COPYRIGHT="Copyright <2018-2025> <MIT License> <${PROJECT_URL}>"
|
||||||
PROJECT_DESC="Mount utility for Sia and S3"
|
PROJECT_DESC="Mount utility for Sia and S3"
|
||||||
|
|
||||||
PROJECT_MAJOR_VERSION=2
|
PROJECT_MAJOR_VERSION=2
|
||||||
PROJECT_MINOR_VERSION=0
|
PROJECT_MINOR_VERSION=0
|
||||||
PROJECT_REVISION_VERSION=2
|
PROJECT_REVISION_VERSION=3
|
||||||
PROJECT_RELEASE_NUM=0
|
PROJECT_RELEASE_NUM=0
|
||||||
PROJECT_RELEASE_ITER=rc
|
PROJECT_RELEASE_ITER=rc
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
FROM arm64v8/alpine:3.20.3
|
FROM arm64v8/alpine:3.21.0
|
||||||
MAINTAINER Scott E. Graves <scott.e.graves@protonmail.com>
|
MAINTAINER Scott E. Graves <scott.e.graves@protonmail.com>
|
||||||
CMD bash
|
CMD bash
|
||||||
|
|
||||||
@ -30,7 +30,6 @@ RUN apk add \
|
|||||||
gflags \
|
gflags \
|
||||||
gflags-dev \
|
gflags-dev \
|
||||||
git \
|
git \
|
||||||
gtkmm3-dev \
|
|
||||||
icu-dev \
|
icu-dev \
|
||||||
icu-libs \
|
icu-libs \
|
||||||
icu-static \
|
icu-static \
|
||||||
@ -69,7 +68,6 @@ RUN apk add \
|
|||||||
tcl \
|
tcl \
|
||||||
tcl-dev \
|
tcl-dev \
|
||||||
texinfo \
|
texinfo \
|
||||||
vlc-dev \
|
|
||||||
wget \
|
wget \
|
||||||
xz \
|
xz \
|
||||||
xz-dev \
|
xz-dev \
|
||||||
@ -82,3 +80,6 @@ RUN apk add \
|
|||||||
zstd-libs \
|
zstd-libs \
|
||||||
zstd-static \
|
zstd-static \
|
||||||
xz-static
|
xz-static
|
||||||
|
|
||||||
|
RUN ln -sf /usr/bin/aclocal-1.17 /usr/bin/aclocal-1.16
|
||||||
|
RUN ln -sf /usr/bin/automake-1.17 /usr/bin/automake-1.16
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
FROM alpine:3.20.3
|
FROM alpine:3.21.0
|
||||||
MAINTAINER Scott E. Graves <scott.e.graves@protonmail.com>
|
MAINTAINER Scott E. Graves <scott.e.graves@protonmail.com>
|
||||||
CMD bash
|
CMD bash
|
||||||
|
|
||||||
@ -80,3 +80,6 @@ RUN apk add \
|
|||||||
zstd-libs \
|
zstd-libs \
|
||||||
zstd-static \
|
zstd-static \
|
||||||
xz-static
|
xz-static
|
||||||
|
|
||||||
|
RUN ln -sf /usr/bin/aclocal-1.17 /usr/bin/aclocal-1.16
|
||||||
|
RUN ln -sf /usr/bin/automake-1.17 /usr/bin/automake-1.16
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#comment
|
#comment
|
||||||
FROM alpine:3.20.3
|
FROM alpine:3.21.0
|
||||||
|
|
||||||
RUN apk update
|
RUN apk update
|
||||||
RUN apk upgrade
|
RUN apk upgrade
|
||||||
@ -671,6 +671,8 @@ RUN if [ -f "/3rd_party/curl-${MY_CURL_VERSION}.tar.gz" ]; then \
|
|||||||
&& cd build \
|
&& cd build \
|
||||||
&& cmake .. \
|
&& cmake .. \
|
||||||
-DBUILD_CURL_EXE=ON \
|
-DBUILD_CURL_EXE=ON \
|
||||||
|
-DBUILD_LIBCURL_DOCS=OFF \
|
||||||
|
-DBUILD_MISC_DOCS=OFF \
|
||||||
-DBUILD_SHARED_LIBS=OFF \
|
-DBUILD_SHARED_LIBS=OFF \
|
||||||
-DBUILD_STATIC_LIBS=ON \
|
-DBUILD_STATIC_LIBS=ON \
|
||||||
-DBUILD_TESTING=OFF \
|
-DBUILD_TESTING=OFF \
|
||||||
@ -684,6 +686,7 @@ RUN if [ -f "/3rd_party/curl-${MY_CURL_VERSION}.tar.gz" ]; then \
|
|||||||
-DCURL_USE_LIBSSH2=OFF \
|
-DCURL_USE_LIBSSH2=OFF \
|
||||||
-DCURL_USE_OPENSSL=ON \
|
-DCURL_USE_OPENSSL=ON \
|
||||||
-DCURL_ZLIB=ON \
|
-DCURL_ZLIB=ON \
|
||||||
|
-DENABLE_CURL_MANUAL=OFF \
|
||||||
-DENABLE_THREADED_RESOLVER=ON \
|
-DENABLE_THREADED_RESOLVER=ON \
|
||||||
-DOPENSSL_USE_STATIC_LIBS=ON \
|
-DOPENSSL_USE_STATIC_LIBS=ON \
|
||||||
-DUSE_LIBIDN2=OFF \
|
-DUSE_LIBIDN2=OFF \
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
@ -22,12 +22,14 @@
|
|||||||
#ifndef REPERTORY_INCLUDE_APP_CONFIG_HPP_
|
#ifndef REPERTORY_INCLUDE_APP_CONFIG_HPP_
|
||||||
#define REPERTORY_INCLUDE_APP_CONFIG_HPP_
|
#define REPERTORY_INCLUDE_APP_CONFIG_HPP_
|
||||||
|
|
||||||
#include "events/event.hpp"
|
|
||||||
#include "types/remote.hpp"
|
#include "types/remote.hpp"
|
||||||
#include "types/repertory.hpp"
|
#include "types/repertory.hpp"
|
||||||
|
|
||||||
namespace repertory {
|
namespace repertory {
|
||||||
class app_config final {
|
class app_config final {
|
||||||
|
private:
|
||||||
|
static stop_type stop_requested;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
[[nodiscard]] static auto
|
[[nodiscard]] static auto
|
||||||
default_agent_name(const provider_type &prov) -> std::string;
|
default_agent_name(const provider_type &prov) -> std::string;
|
||||||
@ -50,6 +52,11 @@ public:
|
|||||||
[[nodiscard]] static auto
|
[[nodiscard]] static auto
|
||||||
get_provider_name(const provider_type &prov) -> std::string;
|
get_provider_name(const provider_type &prov) -> std::string;
|
||||||
|
|
||||||
|
public:
|
||||||
|
[[nodiscard]] static auto get_stop_requested() -> bool;
|
||||||
|
|
||||||
|
static void set_stop_requested();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
app_config(const provider_type &prov, std::string_view data_directory = "");
|
app_config(const provider_type &prov, std::string_view data_directory = "");
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
@ -22,10 +22,11 @@
|
|||||||
#ifndef REPERTORY_INCLUDE_COMM_CURL_CURL_COMM_HPP_
|
#ifndef REPERTORY_INCLUDE_COMM_CURL_CURL_COMM_HPP_
|
||||||
#define REPERTORY_INCLUDE_COMM_CURL_CURL_COMM_HPP_
|
#define REPERTORY_INCLUDE_COMM_CURL_CURL_COMM_HPP_
|
||||||
|
|
||||||
|
#include "app_config.hpp"
|
||||||
#include "comm/curl/multi_request.hpp"
|
#include "comm/curl/multi_request.hpp"
|
||||||
#include "comm/i_http_comm.hpp"
|
#include "comm/i_http_comm.hpp"
|
||||||
#include "events/event_system.hpp"
|
#include "events/event_system.hpp"
|
||||||
#include "events/events.hpp"
|
#include "events/types/curl_error.hpp"
|
||||||
#include "utils/encryption.hpp"
|
#include "utils/encryption.hpp"
|
||||||
|
|
||||||
namespace repertory {
|
namespace repertory {
|
||||||
@ -42,7 +43,7 @@ private:
|
|||||||
|
|
||||||
struct read_write_info final {
|
struct read_write_info final {
|
||||||
data_buffer data{};
|
data_buffer data{};
|
||||||
stop_type &stop_requested;
|
stop_type_callback stop_requested_cb;
|
||||||
};
|
};
|
||||||
|
|
||||||
static const write_callback write_data;
|
static const write_callback write_data;
|
||||||
@ -61,13 +62,14 @@ public:
|
|||||||
[[nodiscard]] static auto reset_curl(CURL *curl_handle) -> CURL *;
|
[[nodiscard]] static auto reset_curl(CURL *curl_handle) -> CURL *;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
[[nodiscard]] static auto
|
[[nodiscard]] static auto construct_url(CURL *curl,
|
||||||
construct_url(CURL *curl, const std::string &relative_path,
|
const std::string &relative_path,
|
||||||
const host_config &cfg) -> std::string;
|
const host_config &cfg)
|
||||||
|
-> std::string;
|
||||||
|
|
||||||
[[nodiscard]] static auto
|
[[nodiscard]] static auto create_host_config(const s3_config &cfg,
|
||||||
create_host_config(const s3_config &cfg,
|
bool use_s3_path_style)
|
||||||
bool use_s3_path_style) -> host_config;
|
-> host_config;
|
||||||
|
|
||||||
[[nodiscard]] static auto url_encode(CURL *curl, const std::string &data,
|
[[nodiscard]] static auto url_encode(CURL *curl, const std::string &data,
|
||||||
bool allow_slash) -> std::string;
|
bool allow_slash) -> std::string;
|
||||||
@ -75,8 +77,8 @@ public:
|
|||||||
template <typename request_type>
|
template <typename request_type>
|
||||||
[[nodiscard]] static auto
|
[[nodiscard]] static auto
|
||||||
make_encrypted_request(const host_config &cfg, const request_type &request,
|
make_encrypted_request(const host_config &cfg, const request_type &request,
|
||||||
long &response_code,
|
long &response_code, stop_type &stop_requested)
|
||||||
stop_type &stop_requested) -> bool {
|
-> bool {
|
||||||
response_code = 0;
|
response_code = 0;
|
||||||
|
|
||||||
if (not request.decryption_token.has_value() ||
|
if (not request.decryption_token.has_value() ||
|
||||||
@ -114,7 +116,7 @@ public:
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (response_code != 200) {
|
if (response_code != http_error_codes::ok) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -135,6 +137,8 @@ public:
|
|||||||
[[nodiscard]] static auto
|
[[nodiscard]] static auto
|
||||||
make_request(const host_config &cfg, const request_type &request,
|
make_request(const host_config &cfg, const request_type &request,
|
||||||
long &response_code, stop_type &stop_requested) -> bool {
|
long &response_code, stop_type &stop_requested) -> bool {
|
||||||
|
REPERTORY_USES_FUNCTION_NAME();
|
||||||
|
|
||||||
if (request.decryption_token.has_value() &&
|
if (request.decryption_token.has_value() &&
|
||||||
not request.decryption_token.value().empty()) {
|
not request.decryption_token.value().empty()) {
|
||||||
return make_encrypted_request(cfg, request, response_code,
|
return make_encrypted_request(cfg, request, response_code,
|
||||||
@ -169,7 +173,12 @@ public:
|
|||||||
curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, write_headers);
|
curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, write_headers);
|
||||||
}
|
}
|
||||||
|
|
||||||
read_write_info write_info{{}, stop_requested};
|
read_write_info write_info{
|
||||||
|
{},
|
||||||
|
[&stop_requested]() -> bool {
|
||||||
|
return stop_requested || app_config::get_stop_requested();
|
||||||
|
},
|
||||||
|
};
|
||||||
if (request.response_handler.has_value()) {
|
if (request.response_handler.has_value()) {
|
||||||
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &write_info);
|
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &write_info);
|
||||||
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
|
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
|
||||||
@ -193,6 +202,16 @@ public:
|
|||||||
request.aws_service.value().c_str());
|
request.aws_service.value().c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
curl_slist *header_list{nullptr};
|
||||||
|
if (not request.headers.empty()) {
|
||||||
|
for (const auto &header : request.headers) {
|
||||||
|
header_list = curl_slist_append(
|
||||||
|
header_list,
|
||||||
|
fmt::format("{}: {}", header.first, header.second).c_str());
|
||||||
|
}
|
||||||
|
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, header_list);
|
||||||
|
}
|
||||||
|
|
||||||
auto url = construct_url(curl, request.get_path(), cfg) + parameters;
|
auto url = construct_url(curl, request.get_path(), cfg) + parameters;
|
||||||
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
|
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
|
||||||
|
|
||||||
@ -200,8 +219,14 @@ public:
|
|||||||
|
|
||||||
CURLcode curl_code{};
|
CURLcode curl_code{};
|
||||||
curl_request.get_result(curl_code, response_code);
|
curl_request.get_result(curl_code, response_code);
|
||||||
|
|
||||||
|
if (header_list != nullptr) {
|
||||||
|
curl_slist_free_all(header_list);
|
||||||
|
}
|
||||||
|
|
||||||
if (curl_code != CURLE_OK) {
|
if (curl_code != CURLE_OK) {
|
||||||
event_system::instance().raise<curl_error>(url, curl_code);
|
event_system::instance().raise<curl_error>(curl_code, function_name,
|
||||||
|
url);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -215,26 +240,30 @@ public:
|
|||||||
public:
|
public:
|
||||||
void enable_s3_path_style(bool enable) override;
|
void enable_s3_path_style(bool enable) override;
|
||||||
|
|
||||||
[[nodiscard]] auto
|
[[nodiscard]] auto make_request(const curl::requests::http_delete &del,
|
||||||
make_request(const curl::requests::http_delete &del, long &response_code,
|
long &response_code,
|
||||||
stop_type &stop_requested) const -> bool override;
|
stop_type &stop_requested) const
|
||||||
|
-> bool override;
|
||||||
|
|
||||||
[[nodiscard]] auto
|
[[nodiscard]] auto make_request(const curl::requests::http_get &get,
|
||||||
make_request(const curl::requests::http_get &get, long &response_code,
|
long &response_code,
|
||||||
stop_type &stop_requested) const -> bool override;
|
stop_type &stop_requested) const
|
||||||
|
-> bool override;
|
||||||
|
|
||||||
[[nodiscard]] auto
|
[[nodiscard]] auto make_request(const curl::requests::http_head &head,
|
||||||
make_request(const curl::requests::http_head &head, long &response_code,
|
long &response_code,
|
||||||
stop_type &stop_requested) const -> bool override;
|
stop_type &stop_requested) const
|
||||||
|
-> bool override;
|
||||||
|
|
||||||
[[nodiscard]] auto
|
[[nodiscard]] auto make_request(const curl::requests::http_post &post_file,
|
||||||
make_request(const curl::requests::http_post &post_file, long &response_code,
|
long &response_code,
|
||||||
stop_type &stop_requested) const -> bool override;
|
stop_type &stop_requested) const
|
||||||
|
-> bool override;
|
||||||
|
|
||||||
[[nodiscard]] auto
|
[[nodiscard]] auto make_request(const curl::requests::http_put_file &put_file,
|
||||||
make_request(const curl::requests::http_put_file &put_file,
|
long &response_code,
|
||||||
long &response_code,
|
stop_type &stop_requested) const
|
||||||
stop_type &stop_requested) const -> bool override;
|
-> bool override;
|
||||||
};
|
};
|
||||||
} // namespace repertory
|
} // namespace repertory
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
@ -36,6 +36,9 @@ private:
|
|||||||
stop_type &stop_requested_;
|
stop_type &stop_requested_;
|
||||||
CURLM *multi_handle_;
|
CURLM *multi_handle_;
|
||||||
|
|
||||||
|
private:
|
||||||
|
[[nodiscard]] auto get_stop_requested() const -> bool;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void get_result(CURLcode &curl_code, long &http_code);
|
void get_result(CURLcode &curl_code, long &http_code);
|
||||||
};
|
};
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
@ -32,15 +32,15 @@ struct http_post final : http_request_base {
|
|||||||
auto operator=(const http_post &) -> http_post & = default;
|
auto operator=(const http_post &) -> http_post & = default;
|
||||||
auto operator=(http_post &&) -> http_post & = default;
|
auto operator=(http_post &&) -> http_post & = default;
|
||||||
|
|
||||||
~http_post() override;
|
~http_post() override = default;
|
||||||
|
|
||||||
std::optional<nlohmann::json> json;
|
std::optional<nlohmann::json> json;
|
||||||
|
|
||||||
[[nodiscard]] auto
|
[[nodiscard]] auto set_method(CURL *curl,
|
||||||
set_method(CURL *curl, stop_type & /*stop_requested*/) const -> bool override;
|
stop_type & /*stop_requested*/) const
|
||||||
|
-> bool override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
mutable curl_slist *headers{nullptr};
|
|
||||||
mutable std::optional<std::string> json_str;
|
mutable std::optional<std::string> json_str;
|
||||||
};
|
};
|
||||||
} // namespace repertory::curl::requests
|
} // namespace repertory::curl::requests
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
@ -51,7 +51,7 @@ struct http_request_base {
|
|||||||
bool allow_timeout{};
|
bool allow_timeout{};
|
||||||
std::optional<std::string> aws_service;
|
std::optional<std::string> aws_service;
|
||||||
std::optional<std::string> decryption_token{};
|
std::optional<std::string> decryption_token{};
|
||||||
http_headers headers{};
|
mutable http_headers headers{};
|
||||||
std::string path{};
|
std::string path{};
|
||||||
http_query_parameters query{};
|
http_query_parameters query{};
|
||||||
std::optional<http_range> range{};
|
std::optional<http_range> range{};
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
@ -69,21 +69,21 @@ private:
|
|||||||
|
|
||||||
void put_client(std::shared_ptr<client> &cli);
|
void put_client(std::shared_ptr<client> &cli);
|
||||||
|
|
||||||
[[nodiscard]] auto read_packet(client &cli, packet &response)
|
[[nodiscard]] auto read_packet(client &cli,
|
||||||
-> packet::error_type;
|
packet &response) const -> packet::error_type;
|
||||||
|
|
||||||
void resolve();
|
void resolve();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
[[nodiscard]] auto send(std::string_view method, std::uint32_t &service_flags)
|
[[nodiscard]] auto send(std::string_view method,
|
||||||
-> packet::error_type;
|
std::uint32_t &service_flags) -> packet::error_type;
|
||||||
|
|
||||||
[[nodiscard]] auto send(std::string_view method, packet &request,
|
[[nodiscard]] auto send(std::string_view method, packet &request,
|
||||||
std::uint32_t &service_flags) -> packet::error_type;
|
std::uint32_t &service_flags) -> packet::error_type;
|
||||||
|
|
||||||
[[nodiscard]] auto send(std::string_view method, packet &request,
|
[[nodiscard]] auto send(std::string_view method, packet &request,
|
||||||
packet &response, std::uint32_t &service_flags)
|
packet &response,
|
||||||
-> packet::error_type;
|
std::uint32_t &service_flags) -> packet::error_type;
|
||||||
};
|
};
|
||||||
} // namespace repertory
|
} // namespace repertory
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
@ -221,25 +221,44 @@ using WCHAR = wchar_t;
|
|||||||
|
|
||||||
#define MAX_PATH 260
|
#define MAX_PATH 260
|
||||||
|
|
||||||
#define STATUS_SUCCESS std::uint32_t{0U}
|
#define STATUS_SUCCESS \
|
||||||
#define STATUS_ACCESS_DENIED std::uint32_t{0xC0000022L}
|
std::uint32_t { 0U }
|
||||||
#define STATUS_DEVICE_BUSY std::uint32_t{0x80000011L}
|
#define STATUS_ACCESS_DENIED \
|
||||||
#define STATUS_DEVICE_INSUFFICIENT_RESOURCES std::uint32_t{0xC0000468L}
|
std::uint32_t { 0xC0000022L }
|
||||||
#define STATUS_DIRECTORY_NOT_EMPTY std::uint32_t{0xC0000101L}
|
#define STATUS_DEVICE_BUSY \
|
||||||
#define STATUS_FILE_IS_A_DIRECTORY std::uint32_t{0xC00000BAL}
|
std::uint32_t { 0x80000011L }
|
||||||
#define STATUS_FILE_TOO_LARGE std::uint32_t{0xC0000904L}
|
#define STATUS_DEVICE_INSUFFICIENT_RESOURCES \
|
||||||
#define STATUS_INSUFFICIENT_RESOURCES std::uint32_t{0xC000009AL}
|
std::uint32_t { 0xC0000468L }
|
||||||
#define STATUS_INTERNAL_ERROR std::uint32_t{0xC00000E5L}
|
#define STATUS_DIRECTORY_NOT_EMPTY \
|
||||||
#define STATUS_INVALID_ADDRESS std::uint32_t{0xC0000141L}
|
std::uint32_t { 0xC0000101L }
|
||||||
#define STATUS_INVALID_HANDLE std::uint32_t{0xC0000006L}
|
#define STATUS_FILE_IS_A_DIRECTORY \
|
||||||
#define STATUS_INVALID_IMAGE_FORMAT std::uint32_t{0xC000007BL}
|
std::uint32_t { 0xC00000BAL }
|
||||||
#define STATUS_INVALID_PARAMETER std::uint32_t{0xC000000DL}
|
#define STATUS_FILE_TOO_LARGE \
|
||||||
#define STATUS_NO_MEMORY std::uint32_t{0xC0000017L}
|
std::uint32_t { 0xC0000904L }
|
||||||
#define STATUS_NOT_IMPLEMENTED std::uint32_t{0xC0000002L}
|
#define STATUS_INSUFFICIENT_RESOURCES \
|
||||||
#define STATUS_OBJECT_NAME_EXISTS std::uint32_t{0x40000000L}
|
std::uint32_t { 0xC000009AL }
|
||||||
#define STATUS_OBJECT_NAME_NOT_FOUND std::uint32_t{0xC0000034L}
|
#define STATUS_INTERNAL_ERROR \
|
||||||
#define STATUS_OBJECT_PATH_INVALID std::uint32_t{0xC0000039L}
|
std::uint32_t { 0xC00000E5L }
|
||||||
#define STATUS_UNEXPECTED_IO_ERROR std::uint32_t{0xC00000E9L}
|
#define STATUS_INVALID_ADDRESS \
|
||||||
|
std::uint32_t { 0xC0000141L }
|
||||||
|
#define STATUS_INVALID_HANDLE \
|
||||||
|
std::uint32_t { 0xC0000006L }
|
||||||
|
#define STATUS_INVALID_IMAGE_FORMAT \
|
||||||
|
std::uint32_t { 0xC000007BL }
|
||||||
|
#define STATUS_INVALID_PARAMETER \
|
||||||
|
std::uint32_t { 0xC000000DL }
|
||||||
|
#define STATUS_NO_MEMORY \
|
||||||
|
std::uint32_t { 0xC0000017L }
|
||||||
|
#define STATUS_NOT_IMPLEMENTED \
|
||||||
|
std::uint32_t { 0xC0000002L }
|
||||||
|
#define STATUS_OBJECT_NAME_EXISTS \
|
||||||
|
std::uint32_t { 0x40000000L }
|
||||||
|
#define STATUS_OBJECT_NAME_NOT_FOUND \
|
||||||
|
std::uint32_t { 0xC0000034L }
|
||||||
|
#define STATUS_OBJECT_PATH_INVALID \
|
||||||
|
std::uint32_t { 0xC0000039L }
|
||||||
|
#define STATUS_UNEXPECTED_IO_ERROR \
|
||||||
|
std::uint32_t { 0xC00000E9L }
|
||||||
|
|
||||||
#define CONVERT_STATUS_NOT_IMPLEMENTED(e) \
|
#define CONVERT_STATUS_NOT_IMPLEMENTED(e) \
|
||||||
((std::uint32_t(e) == STATUS_NOT_IMPLEMENTED) ? -ENOTSUP : e)
|
((std::uint32_t(e) == STATUS_NOT_IMPLEMENTED) ? -ENOTSUP : e)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
@ -31,7 +31,7 @@ class i_file_db {
|
|||||||
public:
|
public:
|
||||||
struct file_info final {
|
struct file_info final {
|
||||||
std::string api_path;
|
std::string api_path;
|
||||||
bool directory;
|
bool directory{};
|
||||||
std::string source_path;
|
std::string source_path;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -56,6 +56,10 @@ public:
|
|||||||
|
|
||||||
[[nodiscard]] virtual auto count() const -> std::uint64_t = 0;
|
[[nodiscard]] virtual auto count() const -> std::uint64_t = 0;
|
||||||
|
|
||||||
|
virtual void enumerate_item_list(
|
||||||
|
std::function<void(const std::vector<i_file_db::file_info> &)> callback,
|
||||||
|
stop_type_callback stop_requested_cb) const = 0;
|
||||||
|
|
||||||
[[nodiscard]] virtual auto get_api_path(const std::string &source_path,
|
[[nodiscard]] virtual auto get_api_path(const std::string &source_path,
|
||||||
std::string &api_path) const
|
std::string &api_path) const
|
||||||
-> api_error = 0;
|
-> api_error = 0;
|
||||||
@ -80,7 +84,8 @@ public:
|
|||||||
get_file_source_path(const std::string &api_path,
|
get_file_source_path(const std::string &api_path,
|
||||||
std::string &source_path) const -> api_error = 0;
|
std::string &source_path) const -> api_error = 0;
|
||||||
|
|
||||||
[[nodiscard]] virtual auto get_item_list() const
|
[[nodiscard]] virtual auto
|
||||||
|
get_item_list(stop_type_callback stop_requested_cb) const
|
||||||
-> std::vector<file_info> = 0;
|
-> std::vector<file_info> = 0;
|
||||||
|
|
||||||
[[nodiscard]] virtual auto get_source_path(const std::string &api_path,
|
[[nodiscard]] virtual auto get_source_path(const std::string &api_path,
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
@ -41,10 +41,7 @@ public:
|
|||||||
std::string source_path;
|
std::string source_path;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct upload_entry final {
|
using upload_entry = upload_active_entry;
|
||||||
std::string api_path;
|
|
||||||
std::string source_path;
|
|
||||||
};
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
[[nodiscard]] virtual auto add_resume(const resume_entry &entry) -> bool = 0;
|
[[nodiscard]] virtual auto add_resume(const resume_entry &entry) -> bool = 0;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
@ -31,6 +31,10 @@ class i_meta_db {
|
|||||||
public:
|
public:
|
||||||
virtual void clear() = 0;
|
virtual void clear() = 0;
|
||||||
|
|
||||||
|
virtual void enumerate_api_path_list(
|
||||||
|
std::function<void(const std::vector<std::string> &)> callback,
|
||||||
|
stop_type_callback stop_requested_cb) const = 0;
|
||||||
|
|
||||||
[[nodiscard]] virtual auto get_api_path(const std::string &source_path,
|
[[nodiscard]] virtual auto get_api_path(const std::string &source_path,
|
||||||
std::string &api_path) const
|
std::string &api_path) const
|
||||||
-> api_error = 0;
|
-> api_error = 0;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
@ -67,50 +67,54 @@ private:
|
|||||||
rocksdb::Transaction *txn) -> rocksdb::Status;
|
rocksdb::Transaction *txn) -> rocksdb::Status;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
[[nodiscard]] auto
|
[[nodiscard]] auto add_directory(const std::string &api_path,
|
||||||
add_directory(const std::string &api_path,
|
const std::string &source_path)
|
||||||
const std::string &source_path) -> api_error override;
|
-> api_error override;
|
||||||
|
|
||||||
[[nodiscard]] auto
|
[[nodiscard]] auto add_or_update_file(const i_file_db::file_data &data)
|
||||||
add_or_update_file(const i_file_db::file_data &data) -> api_error override;
|
-> api_error override;
|
||||||
|
|
||||||
void clear() override;
|
void clear() override;
|
||||||
|
|
||||||
[[nodiscard]] auto count() const -> std::uint64_t override;
|
[[nodiscard]] auto count() const -> std::uint64_t override;
|
||||||
|
|
||||||
[[nodiscard]] auto
|
void enumerate_item_list(
|
||||||
get_api_path(const std::string &source_path,
|
std::function<void(const std::vector<i_file_db::file_info> &)> callback,
|
||||||
std::string &api_path) const -> api_error override;
|
stop_type_callback stop_requested_cb) const override;
|
||||||
|
|
||||||
[[nodiscard]] auto
|
[[nodiscard]] auto get_api_path(const std::string &source_path,
|
||||||
get_directory_api_path(const std::string &source_path,
|
std::string &api_path) const
|
||||||
std::string &api_path) const -> api_error override;
|
-> api_error override;
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_directory_api_path(const std::string &source_path,
|
||||||
|
std::string &api_path) const
|
||||||
|
-> api_error override;
|
||||||
|
|
||||||
[[nodiscard]] auto get_directory_source_path(const std::string &api_path,
|
[[nodiscard]] auto get_directory_source_path(const std::string &api_path,
|
||||||
std::string &source_path) const
|
std::string &source_path) const
|
||||||
-> api_error override;
|
-> api_error override;
|
||||||
|
|
||||||
[[nodiscard]] auto
|
[[nodiscard]] auto get_file_api_path(const std::string &source_path,
|
||||||
get_file_api_path(const std::string &source_path,
|
std::string &api_path) const
|
||||||
std::string &api_path) const -> api_error override;
|
-> api_error override;
|
||||||
|
|
||||||
[[nodiscard]] auto
|
[[nodiscard]] auto get_file_data(const std::string &api_path,
|
||||||
get_file_data(const std::string &api_path,
|
i_file_db::file_data &data) const
|
||||||
i_file_db::file_data &data) const -> api_error override;
|
-> api_error override;
|
||||||
|
|
||||||
[[nodiscard]] auto
|
[[nodiscard]] auto get_file_source_path(const std::string &api_path,
|
||||||
get_file_source_path(const std::string &api_path,
|
std::string &source_path) const
|
||||||
std::string &source_path) const -> api_error override;
|
-> api_error override;
|
||||||
|
|
||||||
[[nodiscard]] auto
|
[[nodiscard]] auto get_item_list(stop_type_callback stop_requested_cb) const
|
||||||
get_item_list() const -> std::vector<i_file_db::file_info> override;
|
-> std::vector<i_file_db::file_info> override;
|
||||||
|
|
||||||
[[nodiscard]] auto
|
[[nodiscard]] auto get_source_path(const std::string &api_path,
|
||||||
get_source_path(const std::string &api_path,
|
std::string &source_path) const
|
||||||
std::string &source_path) const -> api_error override;
|
-> api_error override;
|
||||||
|
|
||||||
[[nodiscard]] auto
|
[[nodiscard]] auto remove_item(const std::string &api_path)
|
||||||
remove_item(const std::string &api_path) -> api_error override;
|
-> api_error override;
|
||||||
};
|
};
|
||||||
} // namespace repertory
|
} // namespace repertory
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
@ -80,6 +80,10 @@ private:
|
|||||||
public:
|
public:
|
||||||
void clear() override;
|
void clear() override;
|
||||||
|
|
||||||
|
void enumerate_api_path_list(
|
||||||
|
std::function<void(const std::vector<std::string> &)> callback,
|
||||||
|
stop_type_callback stop_requested_cb) const override;
|
||||||
|
|
||||||
[[nodiscard]] auto get_api_path(const std::string &source_path,
|
[[nodiscard]] auto get_api_path(const std::string &source_path,
|
||||||
std::string &api_path) const
|
std::string &api_path) const
|
||||||
-> api_error override;
|
-> api_error override;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
@ -53,6 +53,10 @@ public:
|
|||||||
|
|
||||||
[[nodiscard]] auto count() const -> std::uint64_t override;
|
[[nodiscard]] auto count() const -> std::uint64_t override;
|
||||||
|
|
||||||
|
void enumerate_item_list(
|
||||||
|
std::function<void(const std::vector<i_file_db::file_info> &)> callback,
|
||||||
|
stop_type_callback stop_requested_cb) const override;
|
||||||
|
|
||||||
[[nodiscard]] auto get_api_path(const std::string &source_path,
|
[[nodiscard]] auto get_api_path(const std::string &source_path,
|
||||||
std::string &api_path) const
|
std::string &api_path) const
|
||||||
-> api_error override;
|
-> api_error override;
|
||||||
@ -77,7 +81,7 @@ public:
|
|||||||
std::string &source_path) const
|
std::string &source_path) const
|
||||||
-> api_error override;
|
-> api_error override;
|
||||||
|
|
||||||
[[nodiscard]] auto get_item_list() const
|
[[nodiscard]] auto get_item_list(stop_type_callback stop_requested_cb) const
|
||||||
-> std::vector<i_file_db::file_info> override;
|
-> std::vector<i_file_db::file_info> override;
|
||||||
|
|
||||||
[[nodiscard]] auto get_source_path(const std::string &api_path,
|
[[nodiscard]] auto get_source_path(const std::string &api_path,
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
@ -50,6 +50,10 @@ private:
|
|||||||
public:
|
public:
|
||||||
void clear() override;
|
void clear() override;
|
||||||
|
|
||||||
|
void enumerate_api_path_list(
|
||||||
|
std::function<void(const std::vector<std::string> &)> callback,
|
||||||
|
stop_type_callback stop_requested_cb) const override;
|
||||||
|
|
||||||
[[nodiscard]] auto get_api_path(const std::string &source_path,
|
[[nodiscard]] auto get_api_path(const std::string &source_path,
|
||||||
std::string &api_path) const
|
std::string &api_path) const
|
||||||
-> api_error override;
|
-> api_error override;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
@ -22,12 +22,10 @@
|
|||||||
#ifndef REPERTORY_INCLUDE_DRIVES_DIRECTORY_CACHE_HPP_
|
#ifndef REPERTORY_INCLUDE_DRIVES_DIRECTORY_CACHE_HPP_
|
||||||
#define REPERTORY_INCLUDE_DRIVES_DIRECTORY_CACHE_HPP_
|
#define REPERTORY_INCLUDE_DRIVES_DIRECTORY_CACHE_HPP_
|
||||||
|
|
||||||
#include "utils/single_thread_service_base.hpp"
|
|
||||||
|
|
||||||
namespace repertory {
|
namespace repertory {
|
||||||
class directory_iterator;
|
class directory_iterator;
|
||||||
|
|
||||||
class directory_cache final : public single_thread_service_base {
|
class directory_cache final {
|
||||||
public:
|
public:
|
||||||
using execute_callback = std::function<void(directory_iterator &)>;
|
using execute_callback = std::function<void(directory_iterator &)>;
|
||||||
|
|
||||||
@ -35,13 +33,11 @@ private:
|
|||||||
struct open_directory final {
|
struct open_directory final {
|
||||||
std::shared_ptr<directory_iterator> iterator;
|
std::shared_ptr<directory_iterator> iterator;
|
||||||
std::vector<std::uint64_t> handles;
|
std::vector<std::uint64_t> handles;
|
||||||
std::chrono::system_clock::time_point last_update{
|
|
||||||
std::chrono::system_clock::now()};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
directory_cache() : single_thread_service_base("directory_cache") {}
|
directory_cache() = default;
|
||||||
~directory_cache() override = default;
|
~directory_cache() = default;
|
||||||
|
|
||||||
directory_cache(const directory_cache &) = delete;
|
directory_cache(const directory_cache &) = delete;
|
||||||
directory_cache(directory_cache &&) = delete;
|
directory_cache(directory_cache &&) = delete;
|
||||||
@ -51,10 +47,6 @@ public:
|
|||||||
private:
|
private:
|
||||||
std::unordered_map<std::string, open_directory> directory_lookup_;
|
std::unordered_map<std::string, open_directory> directory_lookup_;
|
||||||
std::recursive_mutex directory_mutex_;
|
std::recursive_mutex directory_mutex_;
|
||||||
std::unique_ptr<std::thread> refresh_thread_;
|
|
||||||
|
|
||||||
protected:
|
|
||||||
void service_function() override;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void execute_action(const std::string &api_path,
|
void execute_action(const std::string &api_path,
|
||||||
@ -63,7 +55,7 @@ public:
|
|||||||
[[nodiscard]] auto get_directory(std::uint64_t handle)
|
[[nodiscard]] auto get_directory(std::uint64_t handle)
|
||||||
-> std::shared_ptr<directory_iterator>;
|
-> std::shared_ptr<directory_iterator>;
|
||||||
|
|
||||||
[[nodiscard]] auto remove_directory(const std::string &api_path)
|
auto remove_directory(const std::string &api_path)
|
||||||
-> std::shared_ptr<directory_iterator>;
|
-> std::shared_ptr<directory_iterator>;
|
||||||
|
|
||||||
void remove_directory(std::uint64_t handle);
|
void remove_directory(std::uint64_t handle);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
@ -1,41 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
*/
|
|
||||||
#ifndef REPERTORY_INCLUDE_DRIVES_FUSE_EVENTS_HPP_
|
|
||||||
#define REPERTORY_INCLUDE_DRIVES_FUSE_EVENTS_HPP_
|
|
||||||
|
|
||||||
#include "events/event_system.hpp"
|
|
||||||
|
|
||||||
namespace repertory {
|
|
||||||
// clang-format off
|
|
||||||
E_SIMPLE3(fuse_event, debug, true,
|
|
||||||
std::string, function, func, E_FROM_STRING,
|
|
||||||
std::string, api_path, ap, E_FROM_STRING,
|
|
||||||
int, result, res, E_FROM_INT32
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE1(fuse_args_parsed, info, true,
|
|
||||||
std::string, arguments, args, E_FROM_STRING
|
|
||||||
);
|
|
||||||
// clang-format on
|
|
||||||
} // namespace repertory
|
|
||||||
|
|
||||||
#endif // REPERTORY_INCLUDE_DRIVES_FUSE_EVENTS_HPP_
|
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
@ -24,7 +24,7 @@
|
|||||||
#if !defined(_WIN32)
|
#if !defined(_WIN32)
|
||||||
|
|
||||||
#include "events/event_system.hpp"
|
#include "events/event_system.hpp"
|
||||||
#include "utils/path.hpp"
|
#include "types/repertory.hpp"
|
||||||
|
|
||||||
namespace repertory {
|
namespace repertory {
|
||||||
class app_config;
|
class app_config;
|
||||||
@ -51,8 +51,8 @@ private:
|
|||||||
std::string mount_location_;
|
std::string mount_location_;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool atime_enabled_ = true;
|
bool atime_enabled_{true};
|
||||||
bool console_enabled_ = false;
|
bool console_enabled_{false};
|
||||||
std::optional<gid_t> forced_gid_;
|
std::optional<gid_t> forced_gid_;
|
||||||
std::optional<uid_t> forced_uid_;
|
std::optional<uid_t> forced_uid_;
|
||||||
std::optional<mode_t> forced_umask_;
|
std::optional<mode_t> forced_umask_;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
@ -63,11 +63,14 @@ private:
|
|||||||
std::shared_ptr<logging_consumer> logging_consumer_;
|
std::shared_ptr<logging_consumer> logging_consumer_;
|
||||||
std::shared_ptr<remote_fuse::remote_server> remote_server_;
|
std::shared_ptr<remote_fuse::remote_server> remote_server_;
|
||||||
std::shared_ptr<full_server> server_;
|
std::shared_ptr<full_server> server_;
|
||||||
bool was_mounted_ = false;
|
std::mutex stop_all_mtx_;
|
||||||
|
bool was_mounted_{false};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void update_accessed_time(const std::string &api_path);
|
void update_accessed_time(const std::string &api_path);
|
||||||
|
|
||||||
|
void stop_all();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
#if defined(__APPLE__)
|
#if defined(__APPLE__)
|
||||||
[[nodiscard]] auto chflags_impl(std::string api_path,
|
[[nodiscard]] auto chflags_impl(std::string api_path,
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
@ -53,8 +53,8 @@ private:
|
|||||||
bool was_mounted_ = false;
|
bool was_mounted_ = false;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void populate_stat(const remote::stat &r_stat, bool directory,
|
static void populate_stat(const remote::stat &r_stat, bool directory,
|
||||||
struct stat &unix_st);
|
struct stat &unix_st);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
[[nodiscard]] auto access_impl(std::string api_path,
|
[[nodiscard]] auto access_impl(std::string api_path,
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
@ -30,7 +30,10 @@
|
|||||||
#include "drives/remote/remote_open_file_table.hpp"
|
#include "drives/remote/remote_open_file_table.hpp"
|
||||||
#include "drives/winfsp/remotewinfsp/i_remote_instance.hpp"
|
#include "drives/winfsp/remotewinfsp/i_remote_instance.hpp"
|
||||||
#include "events/event_system.hpp"
|
#include "events/event_system.hpp"
|
||||||
#include "events/events.hpp"
|
#include "events/types/service_start_begin.hpp"
|
||||||
|
#include "events/types/service_start_end.hpp"
|
||||||
|
#include "events/types/service_stop_begin.hpp"
|
||||||
|
#include "events/types/service_stop_end.hpp"
|
||||||
#include "types/remote.hpp"
|
#include "types/remote.hpp"
|
||||||
#include "types/repertory.hpp"
|
#include "types/repertory.hpp"
|
||||||
#include "utils/base64.hpp"
|
#include "utils/base64.hpp"
|
||||||
@ -55,7 +58,10 @@ public:
|
|||||||
drive_(drv),
|
drive_(drv),
|
||||||
mount_location_(std::move(mount_location)),
|
mount_location_(std::move(mount_location)),
|
||||||
client_pool_(config.get_remote_mount().client_pool_size) {
|
client_pool_(config.get_remote_mount().client_pool_size) {
|
||||||
event_system::instance().raise<service_started>("remote_server_base");
|
REPERTORY_USES_FUNCTION_NAME();
|
||||||
|
|
||||||
|
event_system::instance().raise<service_start_begin>(function_name,
|
||||||
|
"remote_server_base");
|
||||||
handler_lookup_.insert(
|
handler_lookup_.insert(
|
||||||
{"::winfsp_can_delete",
|
{"::winfsp_can_delete",
|
||||||
[this](std::uint32_t, const std::string &, std::uint64_t,
|
[this](std::uint32_t, const std::string &, std::uint64_t,
|
||||||
@ -1372,14 +1378,19 @@ public:
|
|||||||
method, request, response,
|
method, request, response,
|
||||||
message_complete);
|
message_complete);
|
||||||
});
|
});
|
||||||
|
event_system::instance().raise<service_start_end>(function_name,
|
||||||
|
"remote_server_base");
|
||||||
}
|
}
|
||||||
|
|
||||||
~remote_server_base() override {
|
~remote_server_base() override {
|
||||||
event_system::instance().raise<service_shutdown_begin>(
|
REPERTORY_USES_FUNCTION_NAME();
|
||||||
"remote_server_base");
|
|
||||||
|
event_system::instance().raise<service_stop_begin>(function_name,
|
||||||
|
"remote_server_base");
|
||||||
client_pool_.shutdown();
|
client_pool_.shutdown();
|
||||||
packet_server_.reset();
|
packet_server_.reset();
|
||||||
event_system::instance().raise<service_shutdown_end>("remote_server_base");
|
event_system::instance().raise<service_stop_end>(function_name,
|
||||||
|
"remote_server_base");
|
||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
@ -73,6 +73,7 @@ private:
|
|||||||
std::unique_ptr<file_manager> fm_;
|
std::unique_ptr<file_manager> fm_;
|
||||||
std::unique_ptr<eviction> eviction_;
|
std::unique_ptr<eviction> eviction_;
|
||||||
std::unique_ptr<remote_winfsp::remote_server> remote_server_;
|
std::unique_ptr<remote_winfsp::remote_server> remote_server_;
|
||||||
|
std::mutex stop_all_mtx_;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
[[nodiscard]] auto handle_error(std::string_view function_name,
|
[[nodiscard]] auto handle_error(std::string_view function_name,
|
||||||
@ -94,6 +95,8 @@ private:
|
|||||||
static void set_file_info(remote::file_info &dest,
|
static void set_file_info(remote::file_info &dest,
|
||||||
const FSP_FSCTL_FILE_INFO &src);
|
const FSP_FSCTL_FILE_INFO &src);
|
||||||
|
|
||||||
|
void stop_all();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
auto CanDelete(PVOID file_node, PVOID file_desc, PWSTR file_name)
|
auto CanDelete(PVOID file_node, PVOID file_desc, PWSTR file_name)
|
||||||
-> NTSTATUS override;
|
-> NTSTATUS override;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
@ -23,6 +23,7 @@
|
|||||||
#define REPERTORY_INCLUDE_EVENTS_CONSUMERS_CONSOLE_CONSUMER_HPP_
|
#define REPERTORY_INCLUDE_EVENTS_CONSUMERS_CONSOLE_CONSUMER_HPP_
|
||||||
|
|
||||||
#include "events/event_system.hpp"
|
#include "events/event_system.hpp"
|
||||||
|
#include "types/repertory.hpp"
|
||||||
|
|
||||||
namespace repertory {
|
namespace repertory {
|
||||||
class console_consumer final {
|
class console_consumer final {
|
||||||
@ -36,7 +37,7 @@ public:
|
|||||||
~console_consumer();
|
~console_consumer();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void process_event(const event &e) const;
|
static void process_event(const i_event &evt);
|
||||||
};
|
};
|
||||||
} // namespace repertory
|
} // namespace repertory
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
@ -23,9 +23,10 @@
|
|||||||
#define REPERTORY_INCLUDE_EVENTS_CONSUMERS_LOGGING_CONSUMER_HPP_
|
#define REPERTORY_INCLUDE_EVENTS_CONSUMERS_LOGGING_CONSUMER_HPP_
|
||||||
|
|
||||||
#include "events/event_system.hpp"
|
#include "events/event_system.hpp"
|
||||||
|
#include "types/repertory.hpp"
|
||||||
|
|
||||||
namespace repertory {
|
namespace repertory {
|
||||||
class logging_consumer {
|
class logging_consumer final {
|
||||||
E_CONSUMER();
|
E_CONSUMER();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -39,7 +40,7 @@ private:
|
|||||||
5ULL};
|
5ULL};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void process_event(const event &event) const;
|
static void process_event(const i_event &evt);
|
||||||
};
|
};
|
||||||
} // namespace repertory
|
} // namespace repertory
|
||||||
|
|
||||||
|
@ -1,92 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
*/
|
|
||||||
#ifndef REPERTORY_INCLUDE_EVENTS_EVENT_HPP_
|
|
||||||
#define REPERTORY_INCLUDE_EVENTS_EVENT_HPP_
|
|
||||||
|
|
||||||
namespace repertory {
|
|
||||||
enum class event_level {
|
|
||||||
critical,
|
|
||||||
error,
|
|
||||||
warn,
|
|
||||||
info,
|
|
||||||
debug,
|
|
||||||
trace,
|
|
||||||
};
|
|
||||||
|
|
||||||
[[nodiscard]] auto
|
|
||||||
event_level_from_string(std::string level,
|
|
||||||
event_level default_level = event_level::info)
|
|
||||||
-> event_level;
|
|
||||||
|
|
||||||
[[nodiscard]] auto event_level_to_string(event_level level) -> std::string;
|
|
||||||
|
|
||||||
class event {
|
|
||||||
protected:
|
|
||||||
explicit event(bool allow_async) : allow_async_(allow_async) {}
|
|
||||||
|
|
||||||
event(const std::stringstream &ss, json j, bool allow_async)
|
|
||||||
: allow_async_(allow_async), ss_(ss.str()), j_(std::move(j)) {}
|
|
||||||
|
|
||||||
public:
|
|
||||||
event(const event &) = delete;
|
|
||||||
event(event &&) = delete;
|
|
||||||
auto operator=(const event &) -> event & = delete;
|
|
||||||
auto operator=(event &&) -> event & = delete;
|
|
||||||
virtual ~event() = default;
|
|
||||||
|
|
||||||
private:
|
|
||||||
bool allow_async_;
|
|
||||||
|
|
||||||
protected:
|
|
||||||
std::stringstream ss_;
|
|
||||||
json j_;
|
|
||||||
|
|
||||||
public:
|
|
||||||
[[nodiscard]] virtual auto clone() const -> std::shared_ptr<event> = 0;
|
|
||||||
|
|
||||||
[[nodiscard]] auto get_allow_async() const -> bool { return allow_async_; }
|
|
||||||
|
|
||||||
[[nodiscard]] virtual auto get_event_level() const -> event_level = 0;
|
|
||||||
|
|
||||||
[[nodiscard]] auto get_json() const -> json { return j_; }
|
|
||||||
|
|
||||||
[[nodiscard]] virtual auto get_name() const -> std::string = 0;
|
|
||||||
|
|
||||||
[[nodiscard]] virtual auto get_single_line() const -> std::string = 0;
|
|
||||||
};
|
|
||||||
} // namespace repertory
|
|
||||||
|
|
||||||
NLOHMANN_JSON_NAMESPACE_BEGIN
|
|
||||||
template <> struct adl_serializer<std::atomic<repertory::event_level>> {
|
|
||||||
static void to_json(json &data,
|
|
||||||
const std::atomic<repertory::event_level> &value) {
|
|
||||||
data = repertory::event_level_to_string(value.load());
|
|
||||||
}
|
|
||||||
|
|
||||||
static void from_json(const json &data,
|
|
||||||
std::atomic<repertory::event_level> &value) {
|
|
||||||
value.store(repertory::event_level_from_string(data.get<std::string>()));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
NLOHMANN_JSON_NAMESPACE_END
|
|
||||||
|
|
||||||
#endif // REPERTORY_INCLUDE_EVENTS_EVENT_HPP_
|
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
@ -22,200 +22,104 @@
|
|||||||
#ifndef REPERTORY_INCLUDE_EVENTS_EVENT_SYSTEM_HPP_
|
#ifndef REPERTORY_INCLUDE_EVENTS_EVENT_SYSTEM_HPP_
|
||||||
#define REPERTORY_INCLUDE_EVENTS_EVENT_SYSTEM_HPP_
|
#define REPERTORY_INCLUDE_EVENTS_EVENT_SYSTEM_HPP_
|
||||||
|
|
||||||
#include "events/event.hpp"
|
|
||||||
#include "events/t_event_system.hpp"
|
|
||||||
|
|
||||||
namespace repertory {
|
namespace repertory {
|
||||||
using event_system = t_event_system<event>;
|
class i_event;
|
||||||
using event_consumer = event_system::event_consumer;
|
|
||||||
|
|
||||||
#define E_FROM_API_FILE_ERROR(e) api_error_to_string(e)
|
class event_system final {
|
||||||
#define E_FROM_BOOL(t) std::to_string(t)
|
private:
|
||||||
#define E_FROM_CURL_CODE(t) std::string(curl_easy_strerror(t))
|
static constexpr const std::uint8_t max_queue_retry{
|
||||||
#define E_FROM_DOUBLE(d) std::to_string(d)
|
30U,
|
||||||
#define E_FROM_DOUBLE_PRECISE(dbl_val) \
|
};
|
||||||
([](const double &d) -> std::string { \
|
|
||||||
std::stringstream ss; \
|
|
||||||
ss << std::fixed << std::setprecision(2) << d; \
|
|
||||||
return ss.str(); \
|
|
||||||
})(dbl_val)
|
|
||||||
#define E_FROM_INT32(t) std::to_string(t)
|
|
||||||
#define E_FROM_SIZE_T(t) std::to_string(t)
|
|
||||||
#define E_FROM_STRING(t) t
|
|
||||||
#define E_FROM_UINT16(t) std::to_string(t)
|
|
||||||
#define E_FROM_UINT64(t) std::to_string(t)
|
|
||||||
#define E_FROM_DOWNLOAD_TYPE(t) download_type_to_string(t)
|
|
||||||
|
|
||||||
#define E_PROP(type, name, short_name, ts) \
|
const std::uint32_t max_queue_size{
|
||||||
private: \
|
std::thread::hardware_concurrency() * 4U,
|
||||||
void init_##short_name(const type &val) { \
|
};
|
||||||
auto ts_val = ts(val); \
|
|
||||||
ss_ << "|" << #short_name << "|" << ts_val; \
|
|
||||||
j_[#name] = ts_val; \
|
|
||||||
} \
|
|
||||||
\
|
|
||||||
public: \
|
|
||||||
[[nodiscard]] auto get_##name() const->json { return j_[#name]; }
|
|
||||||
|
|
||||||
#define E_BEGIN(name, el) \
|
static constexpr const std::chrono::seconds queue_wait_secs{
|
||||||
class name final : public virtual event { \
|
5s,
|
||||||
private: \
|
};
|
||||||
name(const std::stringstream &ss, const json &j, bool allow_async) \
|
|
||||||
: event(ss, j, allow_async) {} \
|
public:
|
||||||
\
|
event_system(const event_system &) = delete;
|
||||||
public: \
|
event_system(event_system &&) = delete;
|
||||||
~name() override = default; \
|
auto operator=(const event_system &) -> event_system & = delete;
|
||||||
\
|
auto operator=(event_system &&) -> event_system & = delete;
|
||||||
public: \
|
|
||||||
static const event_level level = event_level::el; \
|
protected:
|
||||||
\
|
event_system() = default;
|
||||||
public: \
|
|
||||||
[[nodiscard]] auto get_name() const -> std::string override { \
|
~event_system() { stop(); }
|
||||||
return #name; \
|
|
||||||
} \
|
public:
|
||||||
\
|
class event_consumer final {
|
||||||
[[nodiscard]] auto get_event_level() const -> event_level override { \
|
public:
|
||||||
return name::level; \
|
explicit event_consumer(std::function<void(const i_event &)> callback)
|
||||||
} \
|
: callback_(std::move(callback)) {
|
||||||
\
|
event_system::instance().attach(this);
|
||||||
[[nodiscard]] auto get_single_line() const -> std::string override { \
|
|
||||||
const auto s = ss_.str(); \
|
|
||||||
return get_name() + (s.empty() ? "" : s); \
|
|
||||||
} \
|
|
||||||
\
|
|
||||||
[[nodiscard]] auto clone() const -> std::shared_ptr<event> override { \
|
|
||||||
return std::shared_ptr<name>(new name(ss_, j_, get_allow_async())); \
|
|
||||||
}
|
}
|
||||||
#define E_END() }
|
|
||||||
|
|
||||||
#define E_SIMPLE(event_name, el, allow_async) \
|
event_consumer(std::string_view event_name,
|
||||||
E_BEGIN(event_name, el) \
|
std::function<void(const i_event &)> callback)
|
||||||
public: \
|
: callback_(std::move(callback)) {
|
||||||
event_name() : event(allow_async) {} \
|
event_system::instance().attach(event_name, this);
|
||||||
E_END()
|
}
|
||||||
|
|
||||||
#define E_SIMPLE1(event_name, el, allow_async, type, name, short_name, tc) \
|
~event_consumer() { event_system::instance().release(this); }
|
||||||
E_BEGIN(event_name, el) \
|
|
||||||
explicit event_name(const type &tv) : event(allow_async) { \
|
|
||||||
init_##short_name(tv); \
|
|
||||||
} \
|
|
||||||
E_PROP(type, name, short_name, tc) \
|
|
||||||
E_END()
|
|
||||||
|
|
||||||
#define E_SIMPLE2(event_name, el, allow_async, type, name, short_name, tc, \
|
public:
|
||||||
type2, name2, short_name2, tc2) \
|
event_consumer(const event_consumer &) = delete;
|
||||||
E_BEGIN(event_name, el) \
|
event_consumer(event_consumer &&) = delete;
|
||||||
explicit event_name(const type &tv, const type2 &tv2) : event(allow_async) { \
|
auto operator=(const event_consumer &) -> event_consumer & = delete;
|
||||||
init_##short_name(tv); \
|
auto operator=(event_consumer &&) -> event_consumer & = delete;
|
||||||
init_##short_name2(tv2); \
|
|
||||||
} \
|
|
||||||
E_PROP(type, name, short_name, tc) \
|
|
||||||
E_PROP(type2, name2, short_name2, tc2) \
|
|
||||||
E_END()
|
|
||||||
|
|
||||||
#define E_SIMPLE3(event_name, el, allow_async, type, name, short_name, tc, \
|
private:
|
||||||
type2, name2, short_name2, tc2, type3, name3, short_name3, \
|
std::function<void(const i_event &)> callback_;
|
||||||
tc3) \
|
|
||||||
E_BEGIN(event_name, el) \
|
|
||||||
explicit event_name(const type &tv, const type2 &tv2, const type3 &tv3) \
|
|
||||||
: event(allow_async) { \
|
|
||||||
init_##short_name(tv); \
|
|
||||||
init_##short_name2(tv2); \
|
|
||||||
init_##short_name3(tv3); \
|
|
||||||
} \
|
|
||||||
E_PROP(type, name, short_name, tc) \
|
|
||||||
E_PROP(type2, name2, short_name2, tc2) \
|
|
||||||
E_PROP(type3, name3, short_name3, tc3) \
|
|
||||||
E_END()
|
|
||||||
|
|
||||||
#define E_SIMPLE4(event_name, el, allow_async, type, name, short_name, tc, \
|
public:
|
||||||
type2, name2, short_name2, tc2, type3, name3, short_name3, \
|
void notify_event(const i_event &event) { callback_(event); }
|
||||||
tc3, type4, name4, short_name4, tc4) \
|
};
|
||||||
E_BEGIN(event_name, el) \
|
|
||||||
explicit event_name(const type &tv, const type2 &tv2, const type3 &tv3, \
|
|
||||||
const type4 &tv4) \
|
|
||||||
: event(allow_async) { \
|
|
||||||
init_##short_name(tv); \
|
|
||||||
init_##short_name2(tv2); \
|
|
||||||
init_##short_name3(tv3); \
|
|
||||||
init_##short_name4(tv4); \
|
|
||||||
} \
|
|
||||||
E_PROP(type, name, short_name, tc) \
|
|
||||||
E_PROP(type2, name2, short_name2, tc2) \
|
|
||||||
E_PROP(type3, name3, short_name3, tc3) \
|
|
||||||
E_PROP(type4, name4, short_name4, tc4) \
|
|
||||||
E_END()
|
|
||||||
|
|
||||||
#define E_SIMPLE5(event_name, el, allow_async, type, name, short_name, tc, \
|
private:
|
||||||
type2, name2, short_name2, tc2, type3, name3, short_name3, \
|
static event_system instance_;
|
||||||
tc3, type4, name4, short_name4, tc4, type5, name5, \
|
|
||||||
short_name5, tc5) \
|
|
||||||
E_BEGIN(event_name, el) \
|
|
||||||
explicit event_name(const type &tv, const type2 &tv2, const type3 &tv3, \
|
|
||||||
const type4 &tv4, const type5 &tv5) \
|
|
||||||
: event(allow_async) { \
|
|
||||||
init_##short_name(tv); \
|
|
||||||
init_##short_name2(tv2); \
|
|
||||||
init_##short_name3(tv3); \
|
|
||||||
init_##short_name4(tv4); \
|
|
||||||
init_##short_name5(tv5); \
|
|
||||||
} \
|
|
||||||
E_PROP(type, name, short_name, tc) \
|
|
||||||
E_PROP(type2, name2, short_name2, tc2) \
|
|
||||||
E_PROP(type3, name3, short_name3, tc3) \
|
|
||||||
E_PROP(type4, name4, short_name4, tc4) \
|
|
||||||
E_PROP(type5, name5, short_name5, tc5) \
|
|
||||||
E_END()
|
|
||||||
|
|
||||||
#define E_SIMPLE6(event_name, el, allow_async, type, name, short_name, tc, \
|
public:
|
||||||
type2, name2, short_name2, tc2, type3, name3, short_name3, \
|
[[nodiscard]] static auto instance() -> event_system &;
|
||||||
tc3, type4, name4, short_name4, tc4, type5, name5, \
|
|
||||||
short_name5, tc5, type6, name6, short_name6, tc6) \
|
|
||||||
E_BEGIN(event_name, el) \
|
|
||||||
explicit event_name(const type &tv, const type2 &tv2, const type3 &tv3, \
|
|
||||||
const type4 &tv4, const type5 &tv5, const type6 &tv6) \
|
|
||||||
: event(allow_async) { \
|
|
||||||
init_##short_name(tv); \
|
|
||||||
init_##short_name2(tv2); \
|
|
||||||
init_##short_name3(tv3); \
|
|
||||||
init_##short_name4(tv4); \
|
|
||||||
init_##short_name5(tv5); \
|
|
||||||
init_##short_name6(tv6); \
|
|
||||||
} \
|
|
||||||
E_PROP(type, name, short_name, tc) \
|
|
||||||
E_PROP(type2, name2, short_name2, tc2) \
|
|
||||||
E_PROP(type3, name3, short_name3, tc3) \
|
|
||||||
E_PROP(type4, name4, short_name4, tc4) \
|
|
||||||
E_PROP(type5, name5, short_name5, tc5) \
|
|
||||||
E_PROP(type6, name6, short_name6, tc6) \
|
|
||||||
E_END()
|
|
||||||
|
|
||||||
#define E_SIMPLE7(event_name, el, allow_async, type, name, short_name, tc, \
|
private:
|
||||||
type2, name2, short_name2, tc2, type3, name3, short_name3, \
|
std::unordered_map<std::string, std::deque<event_consumer *>>
|
||||||
tc3, type4, name4, short_name4, tc4, type5, name5, \
|
event_consumers_;
|
||||||
short_name5, tc5, type6, name6, short_name6, tc6, type7, \
|
std::recursive_mutex consumer_mutex_;
|
||||||
name7, short_name7, tc7) \
|
std::vector<std::shared_ptr<i_event>> event_list_;
|
||||||
E_BEGIN(event_name, el) \
|
std::condition_variable event_notify_;
|
||||||
explicit event_name(const type &tv, const type2 &tv2, const type3 &tv3, \
|
std::mutex event_mutex_;
|
||||||
const type4 &tv4, const type5 &tv5, const type6 &tv6, \
|
std::unique_ptr<std::thread> event_thread_;
|
||||||
const type7 &tv7) \
|
std::mutex run_mutex_;
|
||||||
: event(allow_async) { \
|
stop_type stop_requested_{false};
|
||||||
init_##short_name(tv); \
|
|
||||||
init_##short_name2(tv2); \
|
private:
|
||||||
init_##short_name3(tv3); \
|
[[nodiscard]] auto get_stop_requested() const -> bool;
|
||||||
init_##short_name4(tv4); \
|
|
||||||
init_##short_name5(tv5); \
|
void process_events();
|
||||||
init_##short_name6(tv6); \
|
|
||||||
init_##short_name7(tv7); \
|
void queue_event(std::shared_ptr<i_event> evt);
|
||||||
} \
|
|
||||||
E_PROP(type, name, short_name, tc) \
|
public:
|
||||||
E_PROP(type2, name2, short_name2, tc2) \
|
void attach(event_consumer *consumer);
|
||||||
E_PROP(type3, name3, short_name3, tc3) \
|
|
||||||
E_PROP(type4, name4, short_name4, tc4) \
|
void attach(std::string_view event_name, event_consumer *consumer);
|
||||||
E_PROP(type5, name5, short_name5, tc5) \
|
|
||||||
E_PROP(type6, name6, short_name6, tc6) \
|
template <typename evt_t, typename... arg_t> void raise(arg_t &&...args) {
|
||||||
E_PROP(type7, name7, short_name7, tc7) \
|
queue_event(std::make_shared<evt_t>(std::forward<arg_t>(args)...));
|
||||||
E_END()
|
}
|
||||||
|
|
||||||
|
void release(event_consumer *consumer);
|
||||||
|
|
||||||
|
void start();
|
||||||
|
|
||||||
|
void stop();
|
||||||
|
};
|
||||||
|
|
||||||
|
using event_consumer = event_system::event_consumer;
|
||||||
|
|
||||||
#define E_CONSUMER() \
|
#define E_CONSUMER() \
|
||||||
private: \
|
private: \
|
||||||
@ -223,19 +127,15 @@ private: \
|
|||||||
|
|
||||||
#define E_CONSUMER_RELEASE() event_consumers_.clear()
|
#define E_CONSUMER_RELEASE() event_consumers_.clear()
|
||||||
|
|
||||||
#define E_SUBSCRIBE(name, callback) \
|
#define E_SUBSCRIBE(event, callback) \
|
||||||
event_consumers_.emplace_back(std::make_shared<repertory::event_consumer>( \
|
event_consumers_.emplace_back(std::make_shared<repertory::event_consumer>( \
|
||||||
#name, [this](const event &evt) { callback(evt); }))
|
event::name, [this](const i_event &evt) { \
|
||||||
|
callback(dynamic_cast<const event &>(evt)); \
|
||||||
#define E_SUBSCRIBE_EXACT(name, callback) \
|
|
||||||
event_consumers_.emplace_back(std::make_shared<repertory::event_consumer>( \
|
|
||||||
#name, [this](const event &evt) { \
|
|
||||||
callback(dynamic_cast<const name &>(evt)); \
|
|
||||||
}))
|
}))
|
||||||
|
|
||||||
#define E_SUBSCRIBE_ALL(callback) \
|
#define E_SUBSCRIBE_ALL(callback) \
|
||||||
event_consumers_.emplace_back(std::make_shared<repertory::event_consumer>( \
|
event_consumers_.emplace_back(std::make_shared<repertory::event_consumer>( \
|
||||||
[this](const event &evt) { callback(evt); }))
|
[this](const i_event &evt) { callback(evt); }))
|
||||||
} // namespace repertory
|
} // namespace repertory
|
||||||
|
|
||||||
#endif // REPERTORY_INCLUDE_EVENTS_EVENT_SYSTEM_HPP_
|
#endif // REPERTORY_INCLUDE_EVENTS_EVENT_SYSTEM_HPP_
|
||||||
|
@ -1,295 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
*/
|
|
||||||
#ifndef REPERTORY_INCLUDE_EVENTS_EVENTS_HPP_
|
|
||||||
#define REPERTORY_INCLUDE_EVENTS_EVENTS_HPP_
|
|
||||||
|
|
||||||
#include "events/event_system.hpp"
|
|
||||||
#include "types/repertory.hpp"
|
|
||||||
#include "utils/utils.hpp"
|
|
||||||
|
|
||||||
namespace repertory {
|
|
||||||
// clang-format off
|
|
||||||
E_SIMPLE2(curl_error, error, true,
|
|
||||||
std::string, url, url, E_FROM_STRING,
|
|
||||||
CURLcode, res, res, E_FROM_CURL_CODE
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE3(debug_log, debug, true,
|
|
||||||
std::string, function, func, E_FROM_STRING,
|
|
||||||
std::string, api_path, ap, E_FROM_STRING,
|
|
||||||
std::string, data, data, E_FROM_STRING
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE1(directory_removed, info, true,
|
|
||||||
std::string, api_path, ap, E_FROM_STRING
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE2(directory_removed_externally, warn, true,
|
|
||||||
std::string, api_path, ap, E_FROM_STRING,
|
|
||||||
std::string, source, src, E_FROM_STRING
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE2(directory_remove_failed, error, true,
|
|
||||||
std::string, api_path, ap, E_FROM_STRING,
|
|
||||||
std::string, error, err, E_FROM_STRING
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE2(drive_mount_failed, error, true,
|
|
||||||
std::string, location, loc, E_FROM_STRING,
|
|
||||||
std::string, result, res, E_FROM_STRING
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE1(drive_mounted, info, true,
|
|
||||||
std::string, location, loc, E_FROM_STRING
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE1(drive_mount_result, info, true,
|
|
||||||
std::string, result, res, E_FROM_STRING
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE1(drive_unmount_pending, info, true,
|
|
||||||
std::string, location, loc, E_FROM_STRING
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE1(drive_unmounted, info, true,
|
|
||||||
std::string, location, loc, E_FROM_STRING
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE1(event_level_changed, info, true,
|
|
||||||
std::string, new_event_level, level, E_FROM_STRING
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE1(failed_upload_queued, error, true,
|
|
||||||
std::string, api_path, ap, E_FROM_STRING
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE1(failed_upload_removed, warn, true,
|
|
||||||
std::string, api_path, ap, E_FROM_STRING
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE1(failed_upload_retry, info, true,
|
|
||||||
std::string, api_path, ap, E_FROM_STRING
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE2(file_get_failed, error, true,
|
|
||||||
std::string, api_path, ap, E_FROM_STRING,
|
|
||||||
std::string, error, err, E_FROM_STRING
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE1(file_get_api_list_failed, error, true,
|
|
||||||
std::string, error, err, E_FROM_STRING
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE1(file_pinned, info, true,
|
|
||||||
std::string, api_path, ap, E_FROM_STRING
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE3(file_read_bytes_failed, error, true,
|
|
||||||
std::string, api_path, ap, E_FROM_STRING,
|
|
||||||
std::string, error, err, E_FROM_STRING,
|
|
||||||
std::size_t, retry, retry, E_FROM_SIZE_T
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE1(file_removed, debug, true,
|
|
||||||
std::string, api_path, ap, E_FROM_STRING
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE2(file_removed_externally, warn, true,
|
|
||||||
std::string, api_path, ap, E_FROM_STRING,
|
|
||||||
std::string, source, src, E_FROM_STRING
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE2(file_remove_failed, error, true,
|
|
||||||
std::string, api_path, ap, E_FROM_STRING,
|
|
||||||
std::string, error, err, E_FROM_STRING
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE3(file_rename_failed, error, true,
|
|
||||||
std::string, from_api_path, FROM, E_FROM_STRING,
|
|
||||||
std::string, to_api_path, TO, E_FROM_STRING,
|
|
||||||
std::string, error, err, E_FROM_STRING
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE2(file_get_size_failed, error, true,
|
|
||||||
std::string, api_path, ap, E_FROM_STRING,
|
|
||||||
std::string, error, err, E_FROM_STRING
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE3(filesystem_item_added, debug, true,
|
|
||||||
std::string, api_path, ap, E_FROM_STRING,
|
|
||||||
std::string, parent, parent, E_FROM_STRING,
|
|
||||||
bool, directory, dir, E_FROM_BOOL
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE4(filesystem_item_closed, trace, true,
|
|
||||||
std::string, api_path, ap, E_FROM_STRING,
|
|
||||||
std::string, source, src, E_FROM_STRING,
|
|
||||||
bool, directory, dir, E_FROM_BOOL,
|
|
||||||
bool, changed, changed, E_FROM_BOOL
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE5(filesystem_item_handle_closed, trace, true,
|
|
||||||
std::string, api_path, ap, E_FROM_STRING,
|
|
||||||
std::uint64_t, handle, handle, E_FROM_UINT64,
|
|
||||||
std::string, source, src, E_FROM_STRING,
|
|
||||||
bool, directory, dir, E_FROM_BOOL,
|
|
||||||
bool, changed, changed, E_FROM_BOOL
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE4(filesystem_item_handle_opened, trace, true,
|
|
||||||
std::string, api_path, ap, E_FROM_STRING,
|
|
||||||
std::uint64_t, handle, handle, E_FROM_UINT64,
|
|
||||||
std::string, source, src, E_FROM_STRING,
|
|
||||||
bool, directory, dir, E_FROM_BOOL
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE2(filesystem_item_evicted, info, true,
|
|
||||||
std::string, api_path, ap, E_FROM_STRING,
|
|
||||||
std::string, source, src, E_FROM_STRING
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE3(filesystem_item_opened, trace, true,
|
|
||||||
std::string, api_path, ap, E_FROM_STRING,
|
|
||||||
std::string, source, src, E_FROM_STRING,
|
|
||||||
bool, directory, dir, E_FROM_BOOL
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE1(file_unpinned, info, true,
|
|
||||||
std::string, api_path, ap, E_FROM_STRING
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE4(file_upload_completed, info, true,
|
|
||||||
std::string, api_path, ap, E_FROM_STRING,
|
|
||||||
std::string, source, src, E_FROM_STRING,
|
|
||||||
api_error, result, res, E_FROM_API_FILE_ERROR,
|
|
||||||
bool, cancelled, cancel, E_FROM_BOOL
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE3(file_upload_failed, error, true,
|
|
||||||
std::string, api_path, ap, E_FROM_STRING,
|
|
||||||
std::string, source, src, E_FROM_STRING,
|
|
||||||
std::string, error, err, E_FROM_STRING
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE2(file_upload_not_found, warn, true,
|
|
||||||
std::string, api_path, ap, E_FROM_STRING,
|
|
||||||
std::string, source, src, E_FROM_STRING
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE2(file_upload_queued, info, true,
|
|
||||||
std::string, api_path, ap, E_FROM_STRING,
|
|
||||||
std::string, source, src, E_FROM_STRING
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE1(file_upload_removed, debug, true,
|
|
||||||
std::string, api_path, ap, E_FROM_STRING
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE3(file_upload_retry, info, true,
|
|
||||||
std::string, api_path, ap, E_FROM_STRING,
|
|
||||||
std::string, source, src, E_FROM_STRING,
|
|
||||||
api_error, result, res, E_FROM_API_FILE_ERROR
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE2(file_upload_started, info, true,
|
|
||||||
std::string, api_path, ap, E_FROM_STRING,
|
|
||||||
std::string, source, src, E_FROM_STRING
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE1(orphaned_file_deleted, warn, true,
|
|
||||||
std::string, source, src, E_FROM_STRING
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE1(orphaned_file_detected, warn, true,
|
|
||||||
std::string, source, src, E_FROM_STRING
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE3(orphaned_file_processing_failed, error, true,
|
|
||||||
std::string, source, src, E_FROM_STRING,
|
|
||||||
std::string, dest, dest, E_FROM_STRING,
|
|
||||||
std::string, result, res, E_FROM_STRING
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE1(orphaned_source_file_detected, info, true,
|
|
||||||
std::string, source, src, E_FROM_STRING
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE1(orphaned_source_file_removed, info, true,
|
|
||||||
std::string, source, src, E_FROM_STRING
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE1(polling_item_begin, debug, true,
|
|
||||||
std::string, item_name, item, E_FROM_STRING
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE1(polling_item_end, debug, true,
|
|
||||||
std::string, item_name, item, E_FROM_STRING
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE2(provider_offline, error, true,
|
|
||||||
std::string, host_name_or_ip, host, E_FROM_STRING,
|
|
||||||
std::uint16_t, port, port, E_FROM_UINT16
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE2(provider_upload_begin, info, true,
|
|
||||||
std::string, api_path, ap, E_FROM_STRING,
|
|
||||||
std::string, source, src, E_FROM_STRING
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE3(provider_upload_end, info, true,
|
|
||||||
std::string, api_path, ap, E_FROM_STRING,
|
|
||||||
std::string, source, src, E_FROM_STRING,
|
|
||||||
api_error, result, res, E_FROM_API_FILE_ERROR
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE2(repertory_exception, error, true,
|
|
||||||
std::string, function, func, E_FROM_STRING,
|
|
||||||
std::string, message, msg, E_FROM_STRING
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE1(rpc_server_exception, error, true,
|
|
||||||
std::string, exception, exception, E_FROM_STRING
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE1(service_shutdown_begin, debug, true,
|
|
||||||
std::string, service, svc, E_FROM_STRING
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE1(service_shutdown_end, debug, true,
|
|
||||||
std::string, service, svc, E_FROM_STRING
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE1(service_started, debug, true,
|
|
||||||
std::string, service, svc, E_FROM_STRING
|
|
||||||
);
|
|
||||||
|
|
||||||
E_SIMPLE(unmount_requested, info, true);
|
|
||||||
#if !defined(_WIN32)
|
|
||||||
E_SIMPLE2(unmount_result, info, true,
|
|
||||||
std::string, location, loc, E_FROM_STRING,
|
|
||||||
std::string, result, res, E_FROM_STRING
|
|
||||||
);
|
|
||||||
#endif
|
|
||||||
// clang-format on
|
|
||||||
} // namespace repertory
|
|
||||||
|
|
||||||
#endif // REPERTORY_INCLUDE_EVENTS_EVENTS_HPP_
|
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
@ -19,18 +19,22 @@
|
|||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
#include "events/t_event_system.hpp"
|
#ifndef REPERTORY_INCLUDE_EVENTS_I_EVENT_HPP_
|
||||||
|
#define REPERTORY_INCLUDE_EVENTS_I_EVENT_HPP_
|
||||||
|
|
||||||
#include "events/event.hpp"
|
#include "types/repertory.hpp"
|
||||||
|
|
||||||
namespace repertory {
|
namespace repertory {
|
||||||
template <typename event_type>
|
class i_event {
|
||||||
auto t_event_system<event_type>::instance() -> t_event_system<event_type> & {
|
INTERFACE_SETUP(i_event);
|
||||||
return event_system_;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename event_type>
|
public:
|
||||||
t_event_system<event_type> t_event_system<event_type>::event_system_;
|
[[nodiscard]] virtual auto get_event_level() const -> event_level = 0;
|
||||||
|
|
||||||
template class t_event_system<event>;
|
[[nodiscard]] virtual auto get_name() const -> std::string_view = 0;
|
||||||
|
|
||||||
|
[[nodiscard]] virtual auto get_single_line() const -> std::string = 0;
|
||||||
|
};
|
||||||
} // namespace repertory
|
} // namespace repertory
|
||||||
|
|
||||||
|
#endif // REPERTORY_INCLUDE_EVENTS_EVENT_HPP_
|
@ -1,193 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
*/
|
|
||||||
#ifndef REPERTORY_INCLUDE_EVENTS_T_EVENT_SYSTEM_HPP_
|
|
||||||
#define REPERTORY_INCLUDE_EVENTS_T_EVENT_SYSTEM_HPP_
|
|
||||||
|
|
||||||
#include "events/event.hpp"
|
|
||||||
#include "utils/collection.hpp"
|
|
||||||
#include "utils/utils.hpp"
|
|
||||||
|
|
||||||
namespace repertory {
|
|
||||||
template <typename event_type> class t_event_system final {
|
|
||||||
public:
|
|
||||||
t_event_system(const t_event_system &) = delete;
|
|
||||||
t_event_system(t_event_system &&) = delete;
|
|
||||||
auto operator=(const t_event_system &) -> t_event_system & = delete;
|
|
||||||
auto operator=(t_event_system &&) -> t_event_system & = delete;
|
|
||||||
|
|
||||||
protected:
|
|
||||||
t_event_system() = default;
|
|
||||||
|
|
||||||
~t_event_system() { stop(); }
|
|
||||||
|
|
||||||
public:
|
|
||||||
class event_consumer final {
|
|
||||||
public:
|
|
||||||
explicit event_consumer(std::function<void(const event &)> callback)
|
|
||||||
: callback_(std::move(callback)) {
|
|
||||||
t_event_system::instance().attach(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
event_consumer(const std::string &event_name,
|
|
||||||
std::function<void(const event &)> callback)
|
|
||||||
: callback_(std::move(callback)) {
|
|
||||||
t_event_system::instance().attach(event_name, this);
|
|
||||||
}
|
|
||||||
|
|
||||||
~event_consumer() { t_event_system::instance().release(this); }
|
|
||||||
|
|
||||||
public:
|
|
||||||
event_consumer(const event_consumer &) = delete;
|
|
||||||
event_consumer(event_consumer &&) = delete;
|
|
||||||
auto operator=(const event_consumer &) -> event_consumer & = delete;
|
|
||||||
auto operator=(event_consumer &&) -> event_consumer & = delete;
|
|
||||||
|
|
||||||
private:
|
|
||||||
std::function<void(const event &)> callback_;
|
|
||||||
|
|
||||||
public:
|
|
||||||
void notify_event(const event &event) { callback_(event); }
|
|
||||||
};
|
|
||||||
|
|
||||||
private:
|
|
||||||
static t_event_system event_system_;
|
|
||||||
|
|
||||||
public:
|
|
||||||
static auto instance() -> t_event_system &;
|
|
||||||
|
|
||||||
private:
|
|
||||||
std::unordered_map<std::string, std::deque<event_consumer *>>
|
|
||||||
event_consumers_;
|
|
||||||
std::recursive_mutex consumer_mutex_;
|
|
||||||
std::vector<std::shared_ptr<event_type>> event_list_;
|
|
||||||
std::condition_variable event_notify_;
|
|
||||||
std::mutex event_mutex_;
|
|
||||||
std::unique_ptr<std::thread> event_thread_;
|
|
||||||
std::mutex run_mutex_;
|
|
||||||
stop_type stop_requested_ = false;
|
|
||||||
|
|
||||||
private:
|
|
||||||
void process_events() {
|
|
||||||
std::vector<std::shared_ptr<event_type>> events;
|
|
||||||
{
|
|
||||||
unique_mutex_lock lock(event_mutex_);
|
|
||||||
if (not stop_requested_ && event_list_.empty()) {
|
|
||||||
event_notify_.wait_for(lock, 1s);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (not event_list_.empty()) {
|
|
||||||
events.insert(events.end(), event_list_.begin(), event_list_.end());
|
|
||||||
event_list_.clear();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const auto notify_events = [this](const std::string &name,
|
|
||||||
const event_type &event) {
|
|
||||||
std::deque<std::future<void>> futures;
|
|
||||||
recur_mutex_lock lock(consumer_mutex_);
|
|
||||||
if (event_consumers_.find(name) != event_consumers_.end()) {
|
|
||||||
for (auto *consumer : event_consumers_[name]) {
|
|
||||||
if (event.get_allow_async()) {
|
|
||||||
futures.emplace_back(
|
|
||||||
std::async(std::launch::async, [consumer, &event]() {
|
|
||||||
consumer->notify_event(event);
|
|
||||||
}));
|
|
||||||
} else {
|
|
||||||
consumer->notify_event(event);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
while (not futures.empty()) {
|
|
||||||
futures.front().get();
|
|
||||||
futures.pop_front();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
for (const auto &evt : events) {
|
|
||||||
notify_events("", *evt.get());
|
|
||||||
notify_events(evt->get_name(), *evt.get());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void queue_event(std::shared_ptr<event_type> evt) {
|
|
||||||
mutex_lock lock(event_mutex_);
|
|
||||||
event_list_.push_back(std::move(evt));
|
|
||||||
event_notify_.notify_all();
|
|
||||||
}
|
|
||||||
|
|
||||||
public:
|
|
||||||
void attach(event_consumer *consumer) {
|
|
||||||
recur_mutex_lock lock(consumer_mutex_);
|
|
||||||
event_consumers_[""].push_back(consumer);
|
|
||||||
}
|
|
||||||
|
|
||||||
void attach(const std::string &event_name, event_consumer *consumer) {
|
|
||||||
recur_mutex_lock lock(consumer_mutex_);
|
|
||||||
event_consumers_[event_name].push_back(consumer);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename event_t, typename... arg_t> void raise(arg_t &&...args) {
|
|
||||||
queue_event(std::make_shared<event_t>(std::forward<arg_t>(args)...));
|
|
||||||
}
|
|
||||||
|
|
||||||
void release(event_consumer *consumer) {
|
|
||||||
recur_mutex_lock lock(consumer_mutex_);
|
|
||||||
auto iter = std::find_if(event_consumers_.begin(), event_consumers_.end(),
|
|
||||||
[&](const auto &item) -> bool {
|
|
||||||
return utils::collection::includes(item.second,
|
|
||||||
consumer);
|
|
||||||
});
|
|
||||||
|
|
||||||
if (iter != event_consumers_.end()) {
|
|
||||||
utils::collection::remove_element((*iter).second, consumer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void start() {
|
|
||||||
mutex_lock lock(run_mutex_);
|
|
||||||
if (not event_thread_) {
|
|
||||||
stop_requested_ = false;
|
|
||||||
event_thread_ = std::make_unique<std::thread>([this]() {
|
|
||||||
while (not stop_requested_) {
|
|
||||||
process_events();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void stop() {
|
|
||||||
mutex_lock lock(run_mutex_);
|
|
||||||
if (event_thread_) {
|
|
||||||
stop_requested_ = true;
|
|
||||||
event_notify_.notify_all();
|
|
||||||
|
|
||||||
event_thread_->join();
|
|
||||||
event_thread_.reset();
|
|
||||||
|
|
||||||
process_events();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
} // namespace repertory
|
|
||||||
|
|
||||||
#endif // REPERTORY_INCLUDE_EVENTS_T_EVENT_SYSTEM_HPP_
|
|
74
repertory/librepertory/include/events/types/curl_error.hpp
Normal file
74
repertory/librepertory/include/events/types/curl_error.hpp
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
/*
|
||||||
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
*/
|
||||||
|
#ifndef REPERTORY_INCLUDE_EVENTS_TYPES_CURL_ERROR_HPP_
|
||||||
|
#define REPERTORY_INCLUDE_EVENTS_TYPES_CURL_ERROR_HPP_
|
||||||
|
|
||||||
|
#include "events/i_event.hpp"
|
||||||
|
#include "types/repertory.hpp"
|
||||||
|
|
||||||
|
namespace repertory {
|
||||||
|
struct curl_error final : public i_event {
|
||||||
|
curl_error() = default;
|
||||||
|
curl_error(CURLcode code_, std::string_view function_name_, std::string url_)
|
||||||
|
: code(code_),
|
||||||
|
function_name(std::string{function_name_}),
|
||||||
|
url(std::move(url_)) {}
|
||||||
|
|
||||||
|
static constexpr const event_level level{event_level::error};
|
||||||
|
static constexpr const std::string_view name{"curl_error"};
|
||||||
|
|
||||||
|
CURLcode code{};
|
||||||
|
std::string function_name;
|
||||||
|
std::string url;
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_event_level() const -> event_level override {
|
||||||
|
return level;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_name() const -> std::string_view override {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_single_line() const -> std::string override {
|
||||||
|
return fmt::format("{}|func|{}|url|{}|code|{}", name, function_name, url,
|
||||||
|
static_cast<int>(code));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} // namespace repertory
|
||||||
|
|
||||||
|
NLOHMANN_JSON_NAMESPACE_BEGIN
|
||||||
|
template <> struct adl_serializer<repertory::curl_error> {
|
||||||
|
static void to_json(json &data, const repertory::curl_error &value) {
|
||||||
|
data["code"] = value.code;
|
||||||
|
data["function_name"] = value.function_name;
|
||||||
|
data["url"] = value.url;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void from_json(const json &data, repertory::curl_error &value) {
|
||||||
|
data.at("code").get_to<CURLcode>(value.code);
|
||||||
|
data.at("function_name").get_to<std::string>(value.function_name);
|
||||||
|
data.at("url").get_to<std::string>(value.url);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
NLOHMANN_JSON_NAMESPACE_END
|
||||||
|
|
||||||
|
#endif // REPERTORY_INCLUDE_EVENTS_TYPES_CURL_ERROR_HPP_
|
68
repertory/librepertory/include/events/types/debug_log.hpp
Normal file
68
repertory/librepertory/include/events/types/debug_log.hpp
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
/*
|
||||||
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
*/
|
||||||
|
#ifndef REPERTORY_INCLUDE_EVENTS_TYPES_DEBUG_LOG_HPP_
|
||||||
|
#define REPERTORY_INCLUDE_EVENTS_TYPES_DEBUG_LOG_HPP_
|
||||||
|
|
||||||
|
#include "events/i_event.hpp"
|
||||||
|
#include "types/repertory.hpp"
|
||||||
|
|
||||||
|
namespace repertory {
|
||||||
|
struct debug_log final : public i_event {
|
||||||
|
debug_log() = default;
|
||||||
|
debug_log(std::string_view function_name_, std::string msg_)
|
||||||
|
: function_name(std::string(function_name_)), msg(std::move(msg_)) {}
|
||||||
|
|
||||||
|
static constexpr const event_level level{event_level::debug};
|
||||||
|
static constexpr const std::string_view name{"debug_log"};
|
||||||
|
|
||||||
|
std::string function_name;
|
||||||
|
std::string msg;
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_event_level() const -> event_level override {
|
||||||
|
return level;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_name() const -> std::string_view override {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_single_line() const -> std::string override {
|
||||||
|
return fmt::format("{}|func|{}|msg|{}", name, function_name, msg);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} // namespace repertory
|
||||||
|
|
||||||
|
NLOHMANN_JSON_NAMESPACE_BEGIN
|
||||||
|
template <> struct adl_serializer<repertory::debug_log> {
|
||||||
|
static void to_json(json &data, const repertory::debug_log &value) {
|
||||||
|
data["function_name"] = value.function_name;
|
||||||
|
data["msg"] = value.msg;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void from_json(const json &data, repertory::debug_log &value) {
|
||||||
|
data.at("function_name").get_to<std::string>(value.function_name);
|
||||||
|
data.at("msg").get_to<std::string>(value.msg);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
NLOHMANN_JSON_NAMESPACE_END
|
||||||
|
|
||||||
|
#endif // REPERTORY_INCLUDE_EVENTS_TYPES_DEBUG_LOG_HPP_
|
@ -0,0 +1,78 @@
|
|||||||
|
/*
|
||||||
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
*/
|
||||||
|
#ifndef REPERTORY_INCLUDE_EVENTS_TYPES_DIRECTORY_REMOVE_FAILED_HPP_
|
||||||
|
#define REPERTORY_INCLUDE_EVENTS_TYPES_DIRECTORY_REMOVE_FAILED_HPP_
|
||||||
|
|
||||||
|
#include "events/i_event.hpp"
|
||||||
|
#include "types/repertory.hpp"
|
||||||
|
|
||||||
|
namespace repertory {
|
||||||
|
struct directory_remove_failed final : public i_event {
|
||||||
|
directory_remove_failed() = default;
|
||||||
|
directory_remove_failed(std::string api_path_, api_error error_,
|
||||||
|
std::string_view function_name_)
|
||||||
|
: api_path(std::move(api_path_)),
|
||||||
|
error(error_),
|
||||||
|
function_name(std::string(function_name_)) {}
|
||||||
|
|
||||||
|
static constexpr const event_level level{event_level::error};
|
||||||
|
static constexpr const std::string_view name{"directory_remove_failed"};
|
||||||
|
|
||||||
|
std::string api_path;
|
||||||
|
api_error error{};
|
||||||
|
std::string function_name;
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_event_level() const -> event_level override {
|
||||||
|
return level;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_name() const -> std::string_view override {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_single_line() const -> std::string override {
|
||||||
|
return fmt::format("{}|func|{}|ap|{}|error|{}", name, function_name,
|
||||||
|
api_path, api_error_to_string(error));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} // namespace repertory
|
||||||
|
|
||||||
|
NLOHMANN_JSON_NAMESPACE_BEGIN
|
||||||
|
template <> struct adl_serializer<repertory::directory_remove_failed> {
|
||||||
|
static void to_json(json &data,
|
||||||
|
const repertory::directory_remove_failed &value) {
|
||||||
|
data["api_path"] = value.api_path;
|
||||||
|
data["error"] = repertory::api_error_to_string(value.error);
|
||||||
|
data["function_name"] = value.function_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void from_json(const json &data,
|
||||||
|
repertory::directory_remove_failed &value) {
|
||||||
|
data.at("api_path").get_to<std::string>(value.api_path);
|
||||||
|
value.error =
|
||||||
|
repertory::api_error_from_string(data.at("error").get<std::string>());
|
||||||
|
data.at("function_name").get_to<std::string>(value.function_name);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
NLOHMANN_JSON_NAMESPACE_END
|
||||||
|
|
||||||
|
#endif // REPERTORY_INCLUDE_EVENTS_TYPES_DIRECTORY_REMOVE_FAILED_HPP_
|
@ -0,0 +1,69 @@
|
|||||||
|
/*
|
||||||
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
*/
|
||||||
|
#ifndef REPERTORY_INCLUDE_EVENTS_TYPES_DIRECTORY_REMOVED_HPP_
|
||||||
|
#define REPERTORY_INCLUDE_EVENTS_TYPES_DIRECTORY_REMOVED_HPP_
|
||||||
|
|
||||||
|
#include "events/i_event.hpp"
|
||||||
|
#include "types/repertory.hpp"
|
||||||
|
|
||||||
|
namespace repertory {
|
||||||
|
struct directory_removed final : public i_event {
|
||||||
|
directory_removed() = default;
|
||||||
|
directory_removed(std::string api_path_, std::string_view function_name_)
|
||||||
|
: api_path(std::move(api_path_)),
|
||||||
|
function_name(std::string(function_name_)) {}
|
||||||
|
|
||||||
|
static constexpr const event_level level{event_level::debug};
|
||||||
|
static constexpr const std::string_view name{"directory_removed"};
|
||||||
|
|
||||||
|
std::string api_path;
|
||||||
|
std::string function_name;
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_event_level() const -> event_level override {
|
||||||
|
return level;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_name() const -> std::string_view override {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_single_line() const -> std::string override {
|
||||||
|
return fmt::format("{}|func|{}|ap|{}", name, function_name, api_path);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} // namespace repertory
|
||||||
|
|
||||||
|
NLOHMANN_JSON_NAMESPACE_BEGIN
|
||||||
|
template <> struct adl_serializer<repertory::directory_removed> {
|
||||||
|
static void to_json(json &data, const repertory::directory_removed &value) {
|
||||||
|
data["api_path"] = value.api_path;
|
||||||
|
data["function_name"] = value.function_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void from_json(const json &data, repertory::directory_removed &value) {
|
||||||
|
data.at("api_path").get_to<std::string>(value.api_path);
|
||||||
|
data.at("function_name").get_to<std::string>(value.function_name);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
NLOHMANN_JSON_NAMESPACE_END
|
||||||
|
|
||||||
|
#endif // REPERTORY_INCLUDE_EVENTS_TYPES_DIRECTORY_REMOVED_HPP_
|
@ -0,0 +1,78 @@
|
|||||||
|
/*
|
||||||
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
*/
|
||||||
|
#ifndef REPERTORY_INCLUDE_EVENTS_TYPES_DIRECTORY_REMOVED_EXTERNALLY_HPP_
|
||||||
|
#define REPERTORY_INCLUDE_EVENTS_TYPES_DIRECTORY_REMOVED_EXTERNALLY_HPP_
|
||||||
|
|
||||||
|
#include "events/i_event.hpp"
|
||||||
|
#include "types/repertory.hpp"
|
||||||
|
|
||||||
|
namespace repertory {
|
||||||
|
struct directory_removed_externally final : public i_event {
|
||||||
|
directory_removed_externally() = default;
|
||||||
|
directory_removed_externally(std::string api_path_,
|
||||||
|
std::string_view function_name_,
|
||||||
|
std::string source_path_)
|
||||||
|
: api_path(std::move(api_path_)),
|
||||||
|
function_name(std::string(function_name_)),
|
||||||
|
source_path(std::move(source_path_)) {}
|
||||||
|
|
||||||
|
static constexpr const event_level level{event_level::warn};
|
||||||
|
static constexpr const std::string_view name{"directory_removed_externally"};
|
||||||
|
|
||||||
|
std::string api_path;
|
||||||
|
std::string function_name;
|
||||||
|
std::string source_path;
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_event_level() const -> event_level override {
|
||||||
|
return level;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_name() const -> std::string_view override {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_single_line() const -> std::string override {
|
||||||
|
return fmt::format("{}|func|{}|ap|{}|src|{}", name, function_name, api_path,
|
||||||
|
source_path);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} // namespace repertory
|
||||||
|
|
||||||
|
NLOHMANN_JSON_NAMESPACE_BEGIN
|
||||||
|
template <> struct adl_serializer<repertory::directory_removed_externally> {
|
||||||
|
static void to_json(json &data,
|
||||||
|
const repertory::directory_removed_externally &value) {
|
||||||
|
data["api_path"] = value.api_path;
|
||||||
|
data["function_name"] = value.function_name;
|
||||||
|
data["source_path"] = value.source_path;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void from_json(const json &data,
|
||||||
|
repertory::directory_removed_externally &value) {
|
||||||
|
data.at("api_path").get_to<std::string>(value.api_path);
|
||||||
|
data.at("function_name").get_to<std::string>(value.function_name);
|
||||||
|
data.at("source_path").get_to<std::string>(value.source_path);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
NLOHMANN_JSON_NAMESPACE_END
|
||||||
|
|
||||||
|
#endif // REPERTORY_INCLUDE_EVENTS_TYPES_DIRECTORY_REMOVED_EXTERNALLY_HPP_
|
@ -0,0 +1,75 @@
|
|||||||
|
/*
|
||||||
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
*/
|
||||||
|
#ifndef REPERTORY_INCLUDE_EVENTS_TYPES_DOWNLOAD_BEGIN_HPP_
|
||||||
|
#define REPERTORY_INCLUDE_EVENTS_TYPES_DOWNLOAD_BEGIN_HPP_
|
||||||
|
|
||||||
|
#include "events/i_event.hpp"
|
||||||
|
#include "types/repertory.hpp"
|
||||||
|
|
||||||
|
namespace repertory {
|
||||||
|
struct download_begin final : public i_event {
|
||||||
|
download_begin() = default;
|
||||||
|
download_begin(std::string api_path_, std::string dest_path_,
|
||||||
|
std::string_view function_name_)
|
||||||
|
: api_path(std::move(api_path_)),
|
||||||
|
dest_path(std::move(dest_path_)),
|
||||||
|
function_name(std::string(function_name_)) {}
|
||||||
|
|
||||||
|
static constexpr const event_level level{event_level::info};
|
||||||
|
static constexpr const std::string_view name{"download_begin"};
|
||||||
|
|
||||||
|
std::string api_path;
|
||||||
|
std::string dest_path;
|
||||||
|
std::string function_name;
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_event_level() const -> event_level override {
|
||||||
|
return level;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_name() const -> std::string_view override {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_single_line() const -> std::string override {
|
||||||
|
return fmt::format("{}|func|{}|ap|{}|dp|{}", name, function_name, api_path,
|
||||||
|
dest_path);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} // namespace repertory
|
||||||
|
|
||||||
|
NLOHMANN_JSON_NAMESPACE_BEGIN
|
||||||
|
template <> struct adl_serializer<repertory::download_begin> {
|
||||||
|
static void to_json(json &data, const repertory::download_begin &value) {
|
||||||
|
data["api_path"] = value.api_path;
|
||||||
|
data["dest_path"] = value.dest_path;
|
||||||
|
data["function_name"] = value.function_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void from_json(const json &data, repertory::download_begin &value) {
|
||||||
|
data.at("api_path").get_to<std::string>(value.api_path);
|
||||||
|
data.at("dest_path").get_to<std::string>(value.dest_path);
|
||||||
|
data.at("function_name").get_to<std::string>(value.function_name);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
NLOHMANN_JSON_NAMESPACE_END
|
||||||
|
|
||||||
|
#endif // REPERTORY_INCLUDE_EVENTS_TYPES_DOWNLOAD_BEGIN_HPP_
|
80
repertory/librepertory/include/events/types/download_end.hpp
Normal file
80
repertory/librepertory/include/events/types/download_end.hpp
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
/*
|
||||||
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
*/
|
||||||
|
#ifndef REPERTORY_INCLUDE_EVENTS_TYPES_DOWNLOAD_END_HPP_
|
||||||
|
#define REPERTORY_INCLUDE_EVENTS_TYPES_DOWNLOAD_END_HPP_
|
||||||
|
|
||||||
|
#include "events/i_event.hpp"
|
||||||
|
#include "types/repertory.hpp"
|
||||||
|
|
||||||
|
namespace repertory {
|
||||||
|
struct download_end final : public i_event {
|
||||||
|
download_end() = default;
|
||||||
|
download_end(std::string api_path_, std::string dest_path_, api_error error_,
|
||||||
|
std::string_view function_name_)
|
||||||
|
: api_path(std::move(api_path_)),
|
||||||
|
dest_path(std::move(dest_path_)),
|
||||||
|
error(error_),
|
||||||
|
function_name(std::string(function_name_)) {}
|
||||||
|
|
||||||
|
static constexpr const event_level level{event_level::info};
|
||||||
|
static constexpr const std::string_view name{"download_end"};
|
||||||
|
|
||||||
|
std::string api_path;
|
||||||
|
std::string dest_path;
|
||||||
|
api_error error{};
|
||||||
|
std::string function_name;
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_event_level() const -> event_level override {
|
||||||
|
return level;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_name() const -> std::string_view override {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_single_line() const -> std::string override {
|
||||||
|
return fmt::format("{}|func|{}|ap|{}|dp|{}|error|{}", name, function_name,
|
||||||
|
api_path, dest_path, api_error_to_string(error));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} // namespace repertory
|
||||||
|
|
||||||
|
NLOHMANN_JSON_NAMESPACE_BEGIN
|
||||||
|
template <> struct adl_serializer<repertory::download_end> {
|
||||||
|
static void to_json(json &data, const repertory::download_end &value) {
|
||||||
|
data["api_path"] = value.api_path;
|
||||||
|
data["dest_path"] = value.dest_path;
|
||||||
|
data["error"] = repertory::api_error_to_string(value.error);
|
||||||
|
data["function_name"] = value.function_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void from_json(const json &data, repertory::download_end &value) {
|
||||||
|
data.at("api_path").get_to<std::string>(value.api_path);
|
||||||
|
data.at("dest_path").get_to<std::string>(value.dest_path);
|
||||||
|
value.error =
|
||||||
|
repertory::api_error_from_string(data.at("error").get<std::string>());
|
||||||
|
data.at("function_name").get_to<std::string>(value.function_name);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
NLOHMANN_JSON_NAMESPACE_END
|
||||||
|
|
||||||
|
#endif // REPERTORY_INCLUDE_EVENTS_TYPES_DOWNLOAD_END_HPP_
|
@ -0,0 +1,79 @@
|
|||||||
|
/*
|
||||||
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
*/
|
||||||
|
#ifndef REPERTORY_INCLUDE_EVENTS_TYPES_DOWNLOAD_PROGRESS_HPP_
|
||||||
|
#define REPERTORY_INCLUDE_EVENTS_TYPES_DOWNLOAD_PROGRESS_HPP_
|
||||||
|
|
||||||
|
#include "events/i_event.hpp"
|
||||||
|
#include "types/repertory.hpp"
|
||||||
|
|
||||||
|
namespace repertory {
|
||||||
|
struct download_progress final : public i_event {
|
||||||
|
download_progress() = default;
|
||||||
|
download_progress(std::string api_path_, std::string dest_path_,
|
||||||
|
std::string_view function_name_, double progress_)
|
||||||
|
: api_path(std::move(api_path_)),
|
||||||
|
dest_path(std::move(dest_path_)),
|
||||||
|
function_name(std::string(function_name_)),
|
||||||
|
progress(progress_) {}
|
||||||
|
|
||||||
|
static constexpr const event_level level{event_level::info};
|
||||||
|
static constexpr const std::string_view name{"download_progress"};
|
||||||
|
|
||||||
|
std::string api_path;
|
||||||
|
std::string dest_path;
|
||||||
|
std::string function_name;
|
||||||
|
double progress{};
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_event_level() const -> event_level override {
|
||||||
|
return level;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_name() const -> std::string_view override {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_single_line() const -> std::string override {
|
||||||
|
return fmt::format("{}|func|{}|ap|{}|dp|{}|prog|{}", name, function_name,
|
||||||
|
api_path, dest_path, progress);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} // namespace repertory
|
||||||
|
|
||||||
|
NLOHMANN_JSON_NAMESPACE_BEGIN
|
||||||
|
template <> struct adl_serializer<repertory::download_progress> {
|
||||||
|
static void to_json(json &data, const repertory::download_progress &value) {
|
||||||
|
data["api_path"] = value.api_path;
|
||||||
|
data["dest_path"] = value.dest_path;
|
||||||
|
data["function_name"] = value.function_name;
|
||||||
|
data["progress"] = value.progress;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void from_json(const json &data, repertory::download_progress &value) {
|
||||||
|
data.at("api_path").get_to<std::string>(value.api_path);
|
||||||
|
data.at("dest_path").get_to<std::string>(value.dest_path);
|
||||||
|
data.at("function_name").get_to<std::string>(value.function_name);
|
||||||
|
data.at("progress").get_to<double>(value.progress);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
NLOHMANN_JSON_NAMESPACE_END
|
||||||
|
|
||||||
|
#endif // REPERTORY_INCLUDE_EVENTS_TYPES_DOWNLOAD_PROGRESS_HPP_
|
@ -0,0 +1,81 @@
|
|||||||
|
/*
|
||||||
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
*/
|
||||||
|
#ifndef REPERTORY_INCLUDE_EVENTS_TYPES_DOWNLOAD_RESTORE_FAILED_HPP_
|
||||||
|
#define REPERTORY_INCLUDE_EVENTS_TYPES_DOWNLOAD_RESTORE_FAILED_HPP_
|
||||||
|
|
||||||
|
#include "events/i_event.hpp"
|
||||||
|
#include "types/repertory.hpp"
|
||||||
|
|
||||||
|
namespace repertory {
|
||||||
|
struct download_restore_failed final : public i_event {
|
||||||
|
download_restore_failed() = default;
|
||||||
|
download_restore_failed(std::string api_path_, std::string dest_path_,
|
||||||
|
std::string error_, std::string_view function_name_)
|
||||||
|
: api_path(std::move(api_path_)),
|
||||||
|
dest_path(std::move(dest_path_)),
|
||||||
|
error(std::move(error_)),
|
||||||
|
function_name(std::string(function_name_)) {}
|
||||||
|
|
||||||
|
static constexpr const event_level level{event_level::error};
|
||||||
|
static constexpr const std::string_view name{"download_restore_failed"};
|
||||||
|
|
||||||
|
std::string api_path;
|
||||||
|
std::string dest_path;
|
||||||
|
std::string error;
|
||||||
|
std::string function_name;
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_event_level() const -> event_level override {
|
||||||
|
return level;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_name() const -> std::string_view override {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_single_line() const -> std::string override {
|
||||||
|
return fmt::format("{}|func|{}|ap|{}|dp|{}|error|{}", name, function_name,
|
||||||
|
api_path, dest_path, error);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} // namespace repertory
|
||||||
|
|
||||||
|
NLOHMANN_JSON_NAMESPACE_BEGIN
|
||||||
|
template <> struct adl_serializer<repertory::download_restore_failed> {
|
||||||
|
static void to_json(json &data,
|
||||||
|
const repertory::download_restore_failed &value) {
|
||||||
|
data["api_path"] = value.api_path;
|
||||||
|
data["dest_path"] = value.dest_path;
|
||||||
|
data["error"] = value.error;
|
||||||
|
data["function_name"] = value.function_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void from_json(const json &data,
|
||||||
|
repertory::download_restore_failed &value) {
|
||||||
|
data.at("api_path").get_to<std::string>(value.api_path);
|
||||||
|
data.at("dest_path").get_to<std::string>(value.dest_path);
|
||||||
|
data.at("error").get_to<std::string>(value.error);
|
||||||
|
data.at("function_name").get_to<std::string>(value.function_name);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
NLOHMANN_JSON_NAMESPACE_END
|
||||||
|
|
||||||
|
#endif // REPERTORY_INCLUDE_EVENTS_TYPES_DOWNLOAD_RESTORE_FAILED_HPP_
|
@ -0,0 +1,75 @@
|
|||||||
|
/*
|
||||||
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
*/
|
||||||
|
#ifndef REPERTORY_INCLUDE_EVENTS_TYPES_DOWNLOAD_RESTORED_HPP_
|
||||||
|
#define REPERTORY_INCLUDE_EVENTS_TYPES_DOWNLOAD_RESTORED_HPP_
|
||||||
|
|
||||||
|
#include "events/i_event.hpp"
|
||||||
|
#include "types/repertory.hpp"
|
||||||
|
|
||||||
|
namespace repertory {
|
||||||
|
struct download_restored final : public i_event {
|
||||||
|
download_restored() = default;
|
||||||
|
download_restored(std::string api_path_, std::string dest_path_,
|
||||||
|
std::string_view function_name_)
|
||||||
|
: api_path(std::move(api_path_)),
|
||||||
|
dest_path(std::move(dest_path_)),
|
||||||
|
function_name(std::string(function_name_)) {}
|
||||||
|
|
||||||
|
static constexpr const event_level level{event_level::info};
|
||||||
|
static constexpr const std::string_view name{"download_restored"};
|
||||||
|
|
||||||
|
std::string api_path;
|
||||||
|
std::string dest_path;
|
||||||
|
std::string function_name;
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_event_level() const -> event_level override {
|
||||||
|
return level;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_name() const -> std::string_view override {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_single_line() const -> std::string override {
|
||||||
|
return fmt::format("{}|func|{}|ap|{}|dp|{}", name, function_name, api_path,
|
||||||
|
dest_path);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} // namespace repertory
|
||||||
|
|
||||||
|
NLOHMANN_JSON_NAMESPACE_BEGIN
|
||||||
|
template <> struct adl_serializer<repertory::download_restored> {
|
||||||
|
static void to_json(json &data, const repertory::download_restored &value) {
|
||||||
|
data["api_path"] = value.api_path;
|
||||||
|
data["dest_path"] = value.dest_path;
|
||||||
|
data["function_name"] = value.function_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void from_json(const json &data, repertory::download_restored &value) {
|
||||||
|
data.at("api_path").get_to<std::string>(value.api_path);
|
||||||
|
data.at("dest_path").get_to<std::string>(value.dest_path);
|
||||||
|
data.at("function_name").get_to<std::string>(value.function_name);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
NLOHMANN_JSON_NAMESPACE_END
|
||||||
|
|
||||||
|
#endif // REPERTORY_INCLUDE_EVENTS_TYPES_DOWNLOAD_RESTORED_HPP_
|
@ -0,0 +1,82 @@
|
|||||||
|
/*
|
||||||
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
*/
|
||||||
|
#ifndef REPERTORY_INCLUDE_EVENTS_TYPES_DOWNLOAD_RESUME_ADD_FAILED_HPP_
|
||||||
|
#define REPERTORY_INCLUDE_EVENTS_TYPES_DOWNLOAD_RESUME_ADD_FAILED_HPP_
|
||||||
|
|
||||||
|
#include "events/i_event.hpp"
|
||||||
|
#include "types/repertory.hpp"
|
||||||
|
|
||||||
|
namespace repertory {
|
||||||
|
struct download_resume_add_failed final : public i_event {
|
||||||
|
download_resume_add_failed() = default;
|
||||||
|
download_resume_add_failed(std::string api_path_, std::string dest_path_,
|
||||||
|
std::string error_,
|
||||||
|
std::string_view function_name_)
|
||||||
|
: api_path(std::move(api_path_)),
|
||||||
|
dest_path(std::move(dest_path_)),
|
||||||
|
error(std::move(error_)),
|
||||||
|
function_name(std::string(function_name_)) {}
|
||||||
|
|
||||||
|
static constexpr const event_level level{event_level::error};
|
||||||
|
static constexpr const std::string_view name{"download_resume_add_failed"};
|
||||||
|
|
||||||
|
std::string api_path;
|
||||||
|
std::string dest_path;
|
||||||
|
std::string error;
|
||||||
|
std::string function_name;
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_event_level() const -> event_level override {
|
||||||
|
return level;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_name() const -> std::string_view override {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_single_line() const -> std::string override {
|
||||||
|
return fmt::format("{}|func|{}|ap|{}|dp|{}|error|{}", name, function_name,
|
||||||
|
api_path, dest_path, error);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} // namespace repertory
|
||||||
|
|
||||||
|
NLOHMANN_JSON_NAMESPACE_BEGIN
|
||||||
|
template <> struct adl_serializer<repertory::download_resume_add_failed> {
|
||||||
|
static void to_json(json &data,
|
||||||
|
const repertory::download_resume_add_failed &value) {
|
||||||
|
data["api_path"] = value.api_path;
|
||||||
|
data["dest_path"] = value.dest_path;
|
||||||
|
data["error"] = value.error;
|
||||||
|
data["function_name"] = value.function_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void from_json(const json &data,
|
||||||
|
repertory::download_resume_add_failed &value) {
|
||||||
|
data.at("api_path").get_to<std::string>(value.api_path);
|
||||||
|
data.at("dest_path").get_to<std::string>(value.dest_path);
|
||||||
|
data.at("error").get_to<std::string>(value.error);
|
||||||
|
data.at("function_name").get_to<std::string>(value.function_name);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
NLOHMANN_JSON_NAMESPACE_END
|
||||||
|
|
||||||
|
#endif // REPERTORY_INCLUDE_EVENTS_TYPES_DOWNLOAD_RESUME_ADD_FAILED_HPP_
|
@ -0,0 +1,77 @@
|
|||||||
|
/*
|
||||||
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
*/
|
||||||
|
#ifndef REPERTORY_INCLUDE_EVENTS_TYPES_DOWNLOAD_RESUME_ADDED_HPP_
|
||||||
|
#define REPERTORY_INCLUDE_EVENTS_TYPES_DOWNLOAD_RESUME_ADDED_HPP_
|
||||||
|
|
||||||
|
#include "events/i_event.hpp"
|
||||||
|
#include "types/repertory.hpp"
|
||||||
|
|
||||||
|
namespace repertory {
|
||||||
|
struct download_resume_added final : public i_event {
|
||||||
|
download_resume_added() = default;
|
||||||
|
download_resume_added(std::string api_path_, std::string dest_path_,
|
||||||
|
std::string_view function_name_)
|
||||||
|
: api_path(std::move(api_path_)),
|
||||||
|
dest_path(std::move(dest_path_)),
|
||||||
|
function_name(std::string(function_name_)) {}
|
||||||
|
|
||||||
|
static constexpr const event_level level{event_level::debug};
|
||||||
|
static constexpr const std::string_view name{"download_resume_added"};
|
||||||
|
|
||||||
|
std::string api_path;
|
||||||
|
std::string dest_path;
|
||||||
|
std::string function_name;
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_event_level() const -> event_level override {
|
||||||
|
return level;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_name() const -> std::string_view override {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_single_line() const -> std::string override {
|
||||||
|
return fmt::format("{}|func|{}|ap|{}|dp|{}", name, function_name, api_path,
|
||||||
|
dest_path);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} // namespace repertory
|
||||||
|
|
||||||
|
NLOHMANN_JSON_NAMESPACE_BEGIN
|
||||||
|
template <> struct adl_serializer<repertory::download_resume_added> {
|
||||||
|
static void to_json(json &data,
|
||||||
|
const repertory::download_resume_added &value) {
|
||||||
|
data["api_path"] = value.api_path;
|
||||||
|
data["dest_path"] = value.dest_path;
|
||||||
|
data["function_name"] = value.function_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void from_json(const json &data,
|
||||||
|
repertory::download_resume_added &value) {
|
||||||
|
data.at("api_path").get_to<std::string>(value.api_path);
|
||||||
|
data.at("dest_path").get_to<std::string>(value.dest_path);
|
||||||
|
data.at("function_name").get_to<std::string>(value.function_name);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
NLOHMANN_JSON_NAMESPACE_END
|
||||||
|
|
||||||
|
#endif // REPERTORY_INCLUDE_EVENTS_TYPES_DOWNLOAD_RESUME_ADDED_HPP_
|
@ -0,0 +1,77 @@
|
|||||||
|
/*
|
||||||
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
*/
|
||||||
|
#ifndef REPERTORY_INCLUDE_EVENTS_TYPES_DOWNLOAD_RESUME_REMOVED_HPP_
|
||||||
|
#define REPERTORY_INCLUDE_EVENTS_TYPES_DOWNLOAD_RESUME_REMOVED_HPP_
|
||||||
|
|
||||||
|
#include "events/i_event.hpp"
|
||||||
|
#include "types/repertory.hpp"
|
||||||
|
|
||||||
|
namespace repertory {
|
||||||
|
struct download_resume_removed final : public i_event {
|
||||||
|
download_resume_removed() = default;
|
||||||
|
download_resume_removed(std::string api_path_, std::string dest_path_,
|
||||||
|
std::string_view function_name_)
|
||||||
|
: api_path(std::move(api_path_)),
|
||||||
|
dest_path(std::move(dest_path_)),
|
||||||
|
function_name(std::string(function_name_)) {}
|
||||||
|
|
||||||
|
static constexpr const event_level level{event_level::debug};
|
||||||
|
static constexpr const std::string_view name{"download_resume_removed"};
|
||||||
|
|
||||||
|
std::string api_path;
|
||||||
|
std::string dest_path;
|
||||||
|
std::string function_name;
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_event_level() const -> event_level override {
|
||||||
|
return level;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_name() const -> std::string_view override {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_single_line() const -> std::string override {
|
||||||
|
return fmt::format("{}|func|{}|ap|{}|dp|{}", name, function_name, api_path,
|
||||||
|
dest_path);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} // namespace repertory
|
||||||
|
|
||||||
|
NLOHMANN_JSON_NAMESPACE_BEGIN
|
||||||
|
template <> struct adl_serializer<repertory::download_resume_removed> {
|
||||||
|
static void to_json(json &data,
|
||||||
|
const repertory::download_resume_removed &value) {
|
||||||
|
data["api_path"] = value.api_path;
|
||||||
|
data["dest_path"] = value.dest_path;
|
||||||
|
data["function_name"] = value.function_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void from_json(const json &data,
|
||||||
|
repertory::download_resume_removed &value) {
|
||||||
|
data.at("api_path").get_to<std::string>(value.api_path);
|
||||||
|
data.at("dest_path").get_to<std::string>(value.dest_path);
|
||||||
|
data.at("function_name").get_to<std::string>(value.function_name);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
NLOHMANN_JSON_NAMESPACE_END
|
||||||
|
|
||||||
|
#endif // REPERTORY_INCLUDE_EVENTS_TYPES_DOWNLOAD_RESUME_REMOVED_HPP_
|
@ -0,0 +1,82 @@
|
|||||||
|
/*
|
||||||
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
*/
|
||||||
|
#ifndef REPERTORY_INCLUDE_EVENTS_TYPES_DOWNLOAD_TYPE_SELECTED_HPP_
|
||||||
|
#define REPERTORY_INCLUDE_EVENTS_TYPES_DOWNLOAD_TYPE_SELECTED_HPP_
|
||||||
|
|
||||||
|
#include "events/i_event.hpp"
|
||||||
|
#include "types/repertory.hpp"
|
||||||
|
|
||||||
|
namespace repertory {
|
||||||
|
struct download_type_selected final : public i_event {
|
||||||
|
download_type_selected() = default;
|
||||||
|
download_type_selected(std::string api_path_, std::string dest_path_,
|
||||||
|
std::string_view function_name_, download_type type_)
|
||||||
|
: api_path(std::move(api_path_)),
|
||||||
|
dest_path(std::move(dest_path_)),
|
||||||
|
function_name(std::string(function_name_)),
|
||||||
|
type(type_) {}
|
||||||
|
|
||||||
|
static constexpr const event_level level{event_level::debug};
|
||||||
|
static constexpr const std::string_view name{"download_type_selected"};
|
||||||
|
|
||||||
|
std::string api_path;
|
||||||
|
std::string dest_path;
|
||||||
|
std::string function_name;
|
||||||
|
download_type type{};
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_event_level() const -> event_level override {
|
||||||
|
return level;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_name() const -> std::string_view override {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_single_line() const -> std::string override {
|
||||||
|
return fmt::format("{}|func|{}|ap|{}|dp|{}|type|{}", name, function_name,
|
||||||
|
api_path, dest_path, download_type_to_string(type));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} // namespace repertory
|
||||||
|
|
||||||
|
NLOHMANN_JSON_NAMESPACE_BEGIN
|
||||||
|
template <> struct adl_serializer<repertory::download_type_selected> {
|
||||||
|
static void to_json(json &data,
|
||||||
|
const repertory::download_type_selected &value) {
|
||||||
|
data["api_path"] = value.api_path;
|
||||||
|
data["dest_path"] = value.dest_path;
|
||||||
|
data["function_name"] = value.function_name;
|
||||||
|
data["type"] = repertory::download_type_to_string(value.type);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void from_json(const json &data,
|
||||||
|
repertory::download_type_selected &value) {
|
||||||
|
data.at("api_path").get_to<std::string>(value.api_path);
|
||||||
|
data.at("dest_path").get_to<std::string>(value.dest_path);
|
||||||
|
data.at("function_name").get_to<std::string>(value.function_name);
|
||||||
|
value.type = repertory::download_type_from_string(
|
||||||
|
data.at("type").get<std::string>());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
NLOHMANN_JSON_NAMESPACE_END
|
||||||
|
|
||||||
|
#endif // REPERTORY_INCLUDE_EVENTS_TYPES_DOWNLOAD_TYPE_SELECTED_HPP_
|
@ -0,0 +1,78 @@
|
|||||||
|
/*
|
||||||
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
*/
|
||||||
|
#ifndef REPERTORY_INCLUDE_EVENTS_TYPES_DRIVE_MOUNT_FAILED_HPP_
|
||||||
|
#define REPERTORY_INCLUDE_EVENTS_TYPES_DRIVE_MOUNT_FAILED_HPP_
|
||||||
|
#if defined(_WIN32)
|
||||||
|
|
||||||
|
#include "events/i_event.hpp"
|
||||||
|
#include "types/repertory.hpp"
|
||||||
|
|
||||||
|
namespace repertory {
|
||||||
|
struct drive_mount_failed final : public i_event {
|
||||||
|
drive_mount_failed() = default;
|
||||||
|
drive_mount_failed(NTSTATUS error_, std::string_view function_name_,
|
||||||
|
std::string mount_location_)
|
||||||
|
: error(error_),
|
||||||
|
function_name(std::string(function_name_)),
|
||||||
|
mount_location(std::move(mount_location_)) {}
|
||||||
|
|
||||||
|
static constexpr const event_level level{event_level::error};
|
||||||
|
static constexpr const std::string_view name{"drive_mount_failed"};
|
||||||
|
|
||||||
|
NTSTATUS error{};
|
||||||
|
std::string function_name;
|
||||||
|
std::string mount_location;
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_event_level() const -> event_level override {
|
||||||
|
return level;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_name() const -> std::string_view override {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_single_line() const -> std::string override {
|
||||||
|
return fmt::format("{}|func|{}|location|{}|status|{}", name, function_name,
|
||||||
|
mount_location, error);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} // namespace repertory
|
||||||
|
|
||||||
|
NLOHMANN_JSON_NAMESPACE_BEGIN
|
||||||
|
template <> struct adl_serializer<repertory::drive_mount_failed> {
|
||||||
|
static void to_json(json &data, const repertory::drive_mount_failed &value) {
|
||||||
|
data["error"] = value.error;
|
||||||
|
data["function_name"] = value.function_name;
|
||||||
|
data["mount_location"] = value.mount_location;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void from_json(const json &data,
|
||||||
|
repertory::drive_mount_failed &value) {
|
||||||
|
data.at("error").get_to<NTSTATUS>(value.error);
|
||||||
|
data.at("function_name").get_to<std::string>(value.function_name);
|
||||||
|
data.at("mount_location").get_to<std::string>(value.mount_location);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
NLOHMANN_JSON_NAMESPACE_END
|
||||||
|
|
||||||
|
#endif // defined(_WIN32)
|
||||||
|
#endif // REPERTORY_INCLUDE_EVENTS_TYPES_DRIVE_MOUNT_FAILED_HPP_
|
@ -0,0 +1,76 @@
|
|||||||
|
/*
|
||||||
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
*/
|
||||||
|
#ifndef REPERTORY_INCLUDE_EVENTS_TYPES_DRIVE_MOUNT_RESULT_HPP_
|
||||||
|
#define REPERTORY_INCLUDE_EVENTS_TYPES_DRIVE_MOUNT_RESULT_HPP_
|
||||||
|
|
||||||
|
#include "events/i_event.hpp"
|
||||||
|
#include "types/repertory.hpp"
|
||||||
|
|
||||||
|
namespace repertory {
|
||||||
|
struct drive_mount_result final : public i_event {
|
||||||
|
drive_mount_result() = default;
|
||||||
|
drive_mount_result(std::string_view function_name_,
|
||||||
|
std::string mount_location_, std::string result_)
|
||||||
|
: function_name(std::string(function_name_)),
|
||||||
|
mount_location(std::move(mount_location_)),
|
||||||
|
result(std::move(result_)) {}
|
||||||
|
|
||||||
|
static constexpr const event_level level{event_level::info};
|
||||||
|
static constexpr const std::string_view name{"drive_mount_result"};
|
||||||
|
|
||||||
|
std::string function_name;
|
||||||
|
std::string mount_location;
|
||||||
|
std::string result;
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_event_level() const -> event_level override {
|
||||||
|
return level;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_name() const -> std::string_view override {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_single_line() const -> std::string override {
|
||||||
|
return fmt::format("{}|func|{}|location|{}|result|{}", name, function_name,
|
||||||
|
mount_location, result);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} // namespace repertory
|
||||||
|
|
||||||
|
NLOHMANN_JSON_NAMESPACE_BEGIN
|
||||||
|
template <> struct adl_serializer<repertory::drive_mount_result> {
|
||||||
|
static void to_json(json &data, const repertory::drive_mount_result &value) {
|
||||||
|
data["function_name"] = value.function_name;
|
||||||
|
data["mount_location"] = value.mount_location;
|
||||||
|
data["result"] = value.result;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void from_json(const json &data,
|
||||||
|
repertory::drive_mount_result &value) {
|
||||||
|
data.at("function_name").get_to<std::string>(value.function_name);
|
||||||
|
data.at("mount_location").get_to<std::string>(value.mount_location);
|
||||||
|
data.at("result").get_to<std::string>(value.result);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
NLOHMANN_JSON_NAMESPACE_END
|
||||||
|
|
||||||
|
#endif // REPERTORY_INCLUDE_EVENTS_TYPES_DRIVE_MOUNT_RESULT_HPP_
|
@ -0,0 +1,70 @@
|
|||||||
|
/*
|
||||||
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
*/
|
||||||
|
#ifndef REPERTORY_INCLUDE_EVENTS_TYPES_DRIVE_MOUNTED_HPP_
|
||||||
|
#define REPERTORY_INCLUDE_EVENTS_TYPES_DRIVE_MOUNTED_HPP_
|
||||||
|
|
||||||
|
#include "events/i_event.hpp"
|
||||||
|
#include "types/repertory.hpp"
|
||||||
|
|
||||||
|
namespace repertory {
|
||||||
|
struct drive_mounted final : public i_event {
|
||||||
|
drive_mounted() = default;
|
||||||
|
drive_mounted(std::string_view function_name_, std::string mount_location_)
|
||||||
|
: function_name(std::string(function_name_)),
|
||||||
|
mount_location(std::move(mount_location_)) {}
|
||||||
|
|
||||||
|
static constexpr const event_level level{event_level::info};
|
||||||
|
static constexpr const std::string_view name{"drive_mounted"};
|
||||||
|
|
||||||
|
std::string function_name;
|
||||||
|
std::string mount_location;
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_event_level() const -> event_level override {
|
||||||
|
return level;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_name() const -> std::string_view override {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_single_line() const -> std::string override {
|
||||||
|
return fmt::format("{}|func|{}|location|{}", name, function_name,
|
||||||
|
mount_location);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} // namespace repertory
|
||||||
|
|
||||||
|
NLOHMANN_JSON_NAMESPACE_BEGIN
|
||||||
|
template <> struct adl_serializer<repertory::drive_mounted> {
|
||||||
|
static void to_json(json &data, const repertory::drive_mounted &value) {
|
||||||
|
data["function_name"] = value.function_name;
|
||||||
|
data["mount_location"] = value.mount_location;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void from_json(const json &data, repertory::drive_mounted &value) {
|
||||||
|
data.at("function_name").get_to<std::string>(value.function_name);
|
||||||
|
data.at("mount_location").get_to<std::string>(value.mount_location);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
NLOHMANN_JSON_NAMESPACE_END
|
||||||
|
|
||||||
|
#endif // REPERTORY_INCLUDE_EVENTS_TYPES_DRIVE_MOUNTED_HPP_
|
@ -0,0 +1,67 @@
|
|||||||
|
/*
|
||||||
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
*/
|
||||||
|
#ifndef REPERTORY_INCLUDE_EVENTS_TYPES_DRIVE_STOP_TIMED_OUT_HPP_
|
||||||
|
#define REPERTORY_INCLUDE_EVENTS_TYPES_DRIVE_STOP_TIMED_OUT_HPP_
|
||||||
|
|
||||||
|
#include "events/i_event.hpp"
|
||||||
|
#include "types/repertory.hpp"
|
||||||
|
|
||||||
|
namespace repertory {
|
||||||
|
struct drive_stop_timed_out final : public i_event {
|
||||||
|
drive_stop_timed_out() = default;
|
||||||
|
drive_stop_timed_out(std::string_view function_name_)
|
||||||
|
: function_name(std::string(function_name_)) {}
|
||||||
|
|
||||||
|
static constexpr const event_level level{event_level::warn};
|
||||||
|
static constexpr const std::string_view name{"drive_stop_timed_out"};
|
||||||
|
|
||||||
|
std::string function_name;
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_event_level() const -> event_level override {
|
||||||
|
return level;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_name() const -> std::string_view override {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_single_line() const -> std::string override {
|
||||||
|
return fmt::format("{}|func|{}", name, function_name);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} // namespace repertory
|
||||||
|
|
||||||
|
NLOHMANN_JSON_NAMESPACE_BEGIN
|
||||||
|
template <> struct adl_serializer<repertory::drive_stop_timed_out> {
|
||||||
|
static void to_json(json &data,
|
||||||
|
const repertory::drive_stop_timed_out &value) {
|
||||||
|
data["function_name"] = value.function_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void from_json(const json &data,
|
||||||
|
repertory::drive_stop_timed_out &value) {
|
||||||
|
data.at("function_name").get_to<std::string>(value.function_name);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
NLOHMANN_JSON_NAMESPACE_END
|
||||||
|
|
||||||
|
#endif // REPERTORY_INCLUDE_EVENTS_TYPES_DRIVE_STOP_TIMED_OUT_HPP_
|
@ -0,0 +1,73 @@
|
|||||||
|
/*
|
||||||
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
*/
|
||||||
|
#ifndef REPERTORY_INCLUDE_EVENTS_TYPES_DRIVE_UNMOUNT_PENDING_HPP_
|
||||||
|
#define REPERTORY_INCLUDE_EVENTS_TYPES_DRIVE_UNMOUNT_PENDING_HPP_
|
||||||
|
|
||||||
|
#include "events/i_event.hpp"
|
||||||
|
#include "types/repertory.hpp"
|
||||||
|
|
||||||
|
namespace repertory {
|
||||||
|
struct drive_unmount_pending final : public i_event {
|
||||||
|
drive_unmount_pending() = default;
|
||||||
|
drive_unmount_pending(std::string_view function_name_,
|
||||||
|
std::string mount_location_)
|
||||||
|
: function_name(std::string(function_name_)),
|
||||||
|
mount_location(std::move(mount_location_)) {}
|
||||||
|
|
||||||
|
static constexpr const event_level level{event_level::info};
|
||||||
|
static constexpr const std::string_view name{"drive_unmount_pending"};
|
||||||
|
|
||||||
|
std::string function_name;
|
||||||
|
std::string mount_location;
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_event_level() const -> event_level override {
|
||||||
|
return level;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_name() const -> std::string_view override {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_single_line() const -> std::string override {
|
||||||
|
return fmt::format("{}|func|{}|location|{}", name, function_name,
|
||||||
|
mount_location);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} // namespace repertory
|
||||||
|
|
||||||
|
NLOHMANN_JSON_NAMESPACE_BEGIN
|
||||||
|
template <> struct adl_serializer<repertory::drive_unmount_pending> {
|
||||||
|
static void to_json(json &data,
|
||||||
|
const repertory::drive_unmount_pending &value) {
|
||||||
|
data["function_name"] = value.function_name;
|
||||||
|
data["mount_location"] = value.mount_location;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void from_json(const json &data,
|
||||||
|
repertory::drive_unmount_pending &value) {
|
||||||
|
data.at("function_name").get_to<std::string>(value.function_name);
|
||||||
|
data.at("mount_location").get_to<std::string>(value.mount_location);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
NLOHMANN_JSON_NAMESPACE_END
|
||||||
|
|
||||||
|
#endif // REPERTORY_INCLUDE_EVENTS_TYPES_DRIVE_UNMOUNT_PENDING_HPP_
|
@ -0,0 +1,70 @@
|
|||||||
|
/*
|
||||||
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
*/
|
||||||
|
#ifndef REPERTORY_INCLUDE_EVENTS_TYPES_DRIVE_UNMOUNTED_HPP_
|
||||||
|
#define REPERTORY_INCLUDE_EVENTS_TYPES_DRIVE_UNMOUNTED_HPP_
|
||||||
|
|
||||||
|
#include "events/i_event.hpp"
|
||||||
|
#include "types/repertory.hpp"
|
||||||
|
|
||||||
|
namespace repertory {
|
||||||
|
struct drive_unmounted final : public i_event {
|
||||||
|
drive_unmounted() = default;
|
||||||
|
drive_unmounted(std::string_view function_name_, std::string mount_location_)
|
||||||
|
: function_name(std::string(function_name_)),
|
||||||
|
mount_location(std::move(mount_location_)) {}
|
||||||
|
|
||||||
|
static constexpr const event_level level{event_level::info};
|
||||||
|
static constexpr const std::string_view name{"drive_unmounted"};
|
||||||
|
|
||||||
|
std::string function_name;
|
||||||
|
std::string mount_location;
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_event_level() const -> event_level override {
|
||||||
|
return level;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_name() const -> std::string_view override {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_single_line() const -> std::string override {
|
||||||
|
return fmt::format("{}|func|{}|location|{}", name, function_name,
|
||||||
|
mount_location);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} // namespace repertory
|
||||||
|
|
||||||
|
NLOHMANN_JSON_NAMESPACE_BEGIN
|
||||||
|
template <> struct adl_serializer<repertory::drive_unmounted> {
|
||||||
|
static void to_json(json &data, const repertory::drive_unmounted &value) {
|
||||||
|
data["function_name"] = value.function_name;
|
||||||
|
data["mount_location"] = value.mount_location;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void from_json(const json &data, repertory::drive_unmounted &value) {
|
||||||
|
data.at("function_name").get_to<std::string>(value.function_name);
|
||||||
|
data.at("mount_location").get_to<std::string>(value.mount_location);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
NLOHMANN_JSON_NAMESPACE_END
|
||||||
|
|
||||||
|
#endif // REPERTORY_INCLUDE_EVENTS_TYPES_DRIVE_UNMOUNTED_HPP_
|
@ -0,0 +1,71 @@
|
|||||||
|
/*
|
||||||
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
*/
|
||||||
|
#ifndef REPERTORY_INCLUDE_EVENTS_TYPES_EVENT_LEVEL_CHANGED_HPP_
|
||||||
|
#define REPERTORY_INCLUDE_EVENTS_TYPES_EVENT_LEVEL_CHANGED_HPP_
|
||||||
|
|
||||||
|
#include "events/i_event.hpp"
|
||||||
|
#include "types/repertory.hpp"
|
||||||
|
|
||||||
|
namespace repertory {
|
||||||
|
struct event_level_changed final : public i_event {
|
||||||
|
event_level_changed() = default;
|
||||||
|
event_level_changed(std::string_view function_name_, event_level new_level_)
|
||||||
|
: function_name(std::string(function_name_)), new_level(new_level_) {}
|
||||||
|
|
||||||
|
static constexpr const event_level level{event_level::info};
|
||||||
|
static constexpr const std::string_view name{"event_level_changed"};
|
||||||
|
|
||||||
|
std::string function_name;
|
||||||
|
event_level new_level{};
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_event_level() const -> event_level override {
|
||||||
|
return level;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_name() const -> std::string_view override {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_single_line() const -> std::string override {
|
||||||
|
return fmt::format("{}|func|{}|level|{}", name, function_name,
|
||||||
|
event_level_to_string(new_level));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} // namespace repertory
|
||||||
|
|
||||||
|
NLOHMANN_JSON_NAMESPACE_BEGIN
|
||||||
|
template <> struct adl_serializer<repertory::event_level_changed> {
|
||||||
|
static void to_json(json &data, const repertory::event_level_changed &value) {
|
||||||
|
data["new_level"] = repertory::event_level_to_string(value.new_level);
|
||||||
|
data["function_name"] = value.function_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void from_json(const json &data,
|
||||||
|
repertory::event_level_changed &value) {
|
||||||
|
value.new_level = repertory::event_level_from_string(
|
||||||
|
data.at("new_level").get<std::string>());
|
||||||
|
data.at("function_name").get_to<std::string>(value.function_name);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
NLOHMANN_JSON_NAMESPACE_END
|
||||||
|
|
||||||
|
#endif // REPERTORY_INCLUDE_EVENTS_TYPES_EVENT_LEVEL_CHANGED_HPP_
|
69
repertory/librepertory/include/events/types/file_pinned.hpp
Normal file
69
repertory/librepertory/include/events/types/file_pinned.hpp
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
/*
|
||||||
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
*/
|
||||||
|
#ifndef REPERTORY_INCLUDE_EVENTS_TYPES_FILE_PINNED_HPP_
|
||||||
|
#define REPERTORY_INCLUDE_EVENTS_TYPES_FILE_PINNED_HPP_
|
||||||
|
|
||||||
|
#include "events/i_event.hpp"
|
||||||
|
#include "types/repertory.hpp"
|
||||||
|
|
||||||
|
namespace repertory {
|
||||||
|
struct file_pinned final : public i_event {
|
||||||
|
file_pinned() = default;
|
||||||
|
file_pinned(std::string api_path_, std::string_view function_name_)
|
||||||
|
: api_path(std::move(api_path_)),
|
||||||
|
function_name(std::string(function_name_)) {}
|
||||||
|
|
||||||
|
static constexpr const event_level level{event_level::info};
|
||||||
|
static constexpr const std::string_view name{"file_pinned"};
|
||||||
|
|
||||||
|
std::string api_path;
|
||||||
|
std::string function_name;
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_event_level() const -> event_level override {
|
||||||
|
return level;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_name() const -> std::string_view override {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_single_line() const -> std::string override {
|
||||||
|
return fmt::format("{}|func|{}|ap|{}", name, function_name, api_path);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} // namespace repertory
|
||||||
|
|
||||||
|
NLOHMANN_JSON_NAMESPACE_BEGIN
|
||||||
|
template <> struct adl_serializer<repertory::file_pinned> {
|
||||||
|
static void to_json(json &data, const repertory::file_pinned &value) {
|
||||||
|
data["api_path"] = value.api_path;
|
||||||
|
data["function_name"] = value.function_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void from_json(const json &data, repertory::file_pinned &value) {
|
||||||
|
data.at("api_path").get_to<std::string>(value.api_path);
|
||||||
|
data.at("function_name").get_to<std::string>(value.function_name);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
NLOHMANN_JSON_NAMESPACE_END
|
||||||
|
|
||||||
|
#endif // REPERTORY_INCLUDE_EVENTS_TYPES_FILE_PINNED_HPP_
|
@ -0,0 +1,77 @@
|
|||||||
|
/*
|
||||||
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
*/
|
||||||
|
#ifndef REPERTORY_INCLUDE_EVENTS_TYPES_FILE_REMOVE_FAILED_HPP_
|
||||||
|
#define REPERTORY_INCLUDE_EVENTS_TYPES_FILE_REMOVE_FAILED_HPP_
|
||||||
|
|
||||||
|
#include "events/i_event.hpp"
|
||||||
|
#include "types/repertory.hpp"
|
||||||
|
|
||||||
|
namespace repertory {
|
||||||
|
struct file_remove_failed final : public i_event {
|
||||||
|
file_remove_failed() = default;
|
||||||
|
file_remove_failed(std::string api_path_, api_error error_,
|
||||||
|
std::string_view function_name_)
|
||||||
|
: api_path(std::move(api_path_)),
|
||||||
|
error(error_),
|
||||||
|
function_name(std::string(function_name_)) {}
|
||||||
|
|
||||||
|
static constexpr const event_level level{event_level::error};
|
||||||
|
static constexpr const std::string_view name{"file_remove_failed"};
|
||||||
|
|
||||||
|
std::string api_path;
|
||||||
|
api_error error{};
|
||||||
|
std::string function_name;
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_event_level() const -> event_level override {
|
||||||
|
return level;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_name() const -> std::string_view override {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_single_line() const -> std::string override {
|
||||||
|
return fmt::format("{}|func|{}|ap|{}|error|{}", name, function_name,
|
||||||
|
api_path, api_error_to_string(error));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} // namespace repertory
|
||||||
|
|
||||||
|
NLOHMANN_JSON_NAMESPACE_BEGIN
|
||||||
|
template <> struct adl_serializer<repertory::file_remove_failed> {
|
||||||
|
static void to_json(json &data, const repertory::file_remove_failed &value) {
|
||||||
|
data["api_path"] = value.api_path;
|
||||||
|
data["error"] = repertory::api_error_to_string(value.error);
|
||||||
|
data["function_name"] = value.function_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void from_json(const json &data,
|
||||||
|
repertory::file_remove_failed &value) {
|
||||||
|
data.at("api_path").get_to<std::string>(value.api_path);
|
||||||
|
value.error =
|
||||||
|
repertory::api_error_from_string(data.at("error").get<std::string>());
|
||||||
|
data.at("function_name").get_to<std::string>(value.function_name);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
NLOHMANN_JSON_NAMESPACE_END
|
||||||
|
|
||||||
|
#endif // REPERTORY_INCLUDE_EVENTS_TYPES_FILE_REMOVE_FAILED_HPP_
|
69
repertory/librepertory/include/events/types/file_removed.hpp
Normal file
69
repertory/librepertory/include/events/types/file_removed.hpp
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
/*
|
||||||
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
*/
|
||||||
|
#ifndef REPERTORY_INCLUDE_EVENTS_TYPES_FILE_REMOVED_HPP_
|
||||||
|
#define REPERTORY_INCLUDE_EVENTS_TYPES_FILE_REMOVED_HPP_
|
||||||
|
|
||||||
|
#include "events/i_event.hpp"
|
||||||
|
#include "types/repertory.hpp"
|
||||||
|
|
||||||
|
namespace repertory {
|
||||||
|
struct file_removed final : public i_event {
|
||||||
|
file_removed() = default;
|
||||||
|
file_removed(std::string api_path_, std::string_view function_name_)
|
||||||
|
: api_path(std::move(api_path_)),
|
||||||
|
function_name(std::string(function_name_)) {}
|
||||||
|
|
||||||
|
static constexpr const event_level level{event_level::debug};
|
||||||
|
static constexpr const std::string_view name{"file_removed"};
|
||||||
|
|
||||||
|
std::string api_path;
|
||||||
|
std::string function_name;
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_event_level() const -> event_level override {
|
||||||
|
return level;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_name() const -> std::string_view override {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_single_line() const -> std::string override {
|
||||||
|
return fmt::format("{}|func|{}|ap|{}", name, function_name, api_path);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} // namespace repertory
|
||||||
|
|
||||||
|
NLOHMANN_JSON_NAMESPACE_BEGIN
|
||||||
|
template <> struct adl_serializer<repertory::file_removed> {
|
||||||
|
static void to_json(json &data, const repertory::file_removed &value) {
|
||||||
|
data["api_path"] = value.api_path;
|
||||||
|
data["function_name"] = value.function_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void from_json(const json &data, repertory::file_removed &value) {
|
||||||
|
data.at("api_path").get_to<std::string>(value.api_path);
|
||||||
|
data.at("function_name").get_to<std::string>(value.function_name);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
NLOHMANN_JSON_NAMESPACE_END
|
||||||
|
|
||||||
|
#endif // REPERTORY_INCLUDE_EVENTS_TYPES_FILE_REMOVED_HPP_
|
@ -0,0 +1,78 @@
|
|||||||
|
/*
|
||||||
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
*/
|
||||||
|
#ifndef REPERTORY_INCLUDE_EVENTS_TYPES_FILE_REMOVED_EXTERNALLY_HPP_
|
||||||
|
#define REPERTORY_INCLUDE_EVENTS_TYPES_FILE_REMOVED_EXTERNALLY_HPP_
|
||||||
|
|
||||||
|
#include "events/i_event.hpp"
|
||||||
|
#include "types/repertory.hpp"
|
||||||
|
|
||||||
|
namespace repertory {
|
||||||
|
struct file_removed_externally final : public i_event {
|
||||||
|
file_removed_externally() = default;
|
||||||
|
file_removed_externally(std::string api_path_,
|
||||||
|
std::string_view function_name_,
|
||||||
|
std::string source_path_)
|
||||||
|
: api_path(std::move(api_path_)),
|
||||||
|
function_name(std::string(function_name_)),
|
||||||
|
source_path(std::move(source_path_)) {}
|
||||||
|
|
||||||
|
static constexpr const event_level level{event_level::warn};
|
||||||
|
static constexpr const std::string_view name{"file_removed_externally"};
|
||||||
|
|
||||||
|
std::string api_path;
|
||||||
|
std::string function_name;
|
||||||
|
std::string source_path;
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_event_level() const -> event_level override {
|
||||||
|
return level;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_name() const -> std::string_view override {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_single_line() const -> std::string override {
|
||||||
|
return fmt::format("{}|func|{}|ap|{}|src|{}", name, function_name, api_path,
|
||||||
|
source_path);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} // namespace repertory
|
||||||
|
|
||||||
|
NLOHMANN_JSON_NAMESPACE_BEGIN
|
||||||
|
template <> struct adl_serializer<repertory::file_removed_externally> {
|
||||||
|
static void to_json(json &data,
|
||||||
|
const repertory::file_removed_externally &value) {
|
||||||
|
data["api_path"] = value.api_path;
|
||||||
|
data["function_name"] = value.function_name;
|
||||||
|
data["source_path"] = value.source_path;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void from_json(const json &data,
|
||||||
|
repertory::file_removed_externally &value) {
|
||||||
|
data.at("api_path").get_to<std::string>(value.api_path);
|
||||||
|
data.at("function_name").get_to<std::string>(value.function_name);
|
||||||
|
data.at("source_path").get_to<std::string>(value.source_path);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
NLOHMANN_JSON_NAMESPACE_END
|
||||||
|
|
||||||
|
#endif // REPERTORY_INCLUDE_EVENTS_TYPES_FILE_REMOVED_EXTERNALLY_HPP_
|
@ -0,0 +1,69 @@
|
|||||||
|
/*
|
||||||
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
*/
|
||||||
|
#ifndef REPERTORY_INCLUDE_EVENTS_TYPES_FILE_UNPINNED_HPP_
|
||||||
|
#define REPERTORY_INCLUDE_EVENTS_TYPES_FILE_UNPINNED_HPP_
|
||||||
|
|
||||||
|
#include "events/i_event.hpp"
|
||||||
|
#include "types/repertory.hpp"
|
||||||
|
|
||||||
|
namespace repertory {
|
||||||
|
struct file_unpinned final : public i_event {
|
||||||
|
file_unpinned() = default;
|
||||||
|
file_unpinned(std::string api_path_, std::string_view function_name_)
|
||||||
|
: api_path(std::move(api_path_)),
|
||||||
|
function_name(std::string(function_name_)) {}
|
||||||
|
|
||||||
|
static constexpr const event_level level{event_level::info};
|
||||||
|
static constexpr const std::string_view name{"file_unpinned"};
|
||||||
|
|
||||||
|
std::string api_path;
|
||||||
|
std::string function_name;
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_event_level() const -> event_level override {
|
||||||
|
return level;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_name() const -> std::string_view override {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_single_line() const -> std::string override {
|
||||||
|
return fmt::format("{}|func|{}|ap|{}", name, function_name, api_path);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} // namespace repertory
|
||||||
|
|
||||||
|
NLOHMANN_JSON_NAMESPACE_BEGIN
|
||||||
|
template <> struct adl_serializer<repertory::file_unpinned> {
|
||||||
|
static void to_json(json &data, const repertory::file_unpinned &value) {
|
||||||
|
data["api_path"] = value.api_path;
|
||||||
|
data["function_name"] = value.function_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void from_json(const json &data, repertory::file_unpinned &value) {
|
||||||
|
data.at("api_path").get_to<std::string>(value.api_path);
|
||||||
|
data.at("function_name").get_to<std::string>(value.function_name);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
NLOHMANN_JSON_NAMESPACE_END
|
||||||
|
|
||||||
|
#endif // REPERTORY_INCLUDE_EVENTS_TYPES_FILE_UNPINNED_HPP_
|
@ -0,0 +1,88 @@
|
|||||||
|
/*
|
||||||
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
*/
|
||||||
|
#ifndef REPERTORY_INCLUDE_EVENTS_TYPES_FILE_UPLOAD_COMPLETED_HPP_
|
||||||
|
#define REPERTORY_INCLUDE_EVENTS_TYPES_FILE_UPLOAD_COMPLETED_HPP_
|
||||||
|
|
||||||
|
#include "events/i_event.hpp"
|
||||||
|
#include "types/repertory.hpp"
|
||||||
|
|
||||||
|
namespace repertory {
|
||||||
|
struct file_upload_completed final : public i_event {
|
||||||
|
file_upload_completed() = default;
|
||||||
|
file_upload_completed(std::string api_path_, bool cancelled_,
|
||||||
|
api_error error_, std::string_view function_name_,
|
||||||
|
std::string source_path_)
|
||||||
|
: api_path(std::move(api_path_)),
|
||||||
|
cancelled(cancelled_),
|
||||||
|
error(error_),
|
||||||
|
function_name(std::string(function_name_)),
|
||||||
|
source_path(std::move(source_path_)) {}
|
||||||
|
|
||||||
|
static constexpr const event_level level{event_level::info};
|
||||||
|
static constexpr const std::string_view name{"file_upload_completed"};
|
||||||
|
|
||||||
|
std::string api_path;
|
||||||
|
bool cancelled{};
|
||||||
|
api_error error{};
|
||||||
|
std::string function_name;
|
||||||
|
std::string source_path;
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_event_level() const -> event_level override {
|
||||||
|
return level;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_name() const -> std::string_view override {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_single_line() const -> std::string override {
|
||||||
|
return fmt::format("{}|func|{}|ap|{}|cancelled|{}|error|{}|sp|{}", name,
|
||||||
|
function_name, api_path, cancelled,
|
||||||
|
api_error_to_string(error), source_path);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} // namespace repertory
|
||||||
|
|
||||||
|
NLOHMANN_JSON_NAMESPACE_BEGIN
|
||||||
|
template <> struct adl_serializer<repertory::file_upload_completed> {
|
||||||
|
static void to_json(json &data,
|
||||||
|
const repertory::file_upload_completed &value) {
|
||||||
|
data["api_path"] = value.api_path;
|
||||||
|
data["cancelled"] = value.cancelled;
|
||||||
|
data["error"] = repertory::api_error_to_string(value.error);
|
||||||
|
data["function_name"] = value.function_name;
|
||||||
|
data["source_path"] = value.source_path;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void from_json(const json &data,
|
||||||
|
repertory::file_upload_completed &value) {
|
||||||
|
data.at("api_path").get_to<std::string>(value.api_path);
|
||||||
|
data.at("cancelled").get_to<bool>(value.cancelled);
|
||||||
|
value.error =
|
||||||
|
repertory::api_error_from_string(data.at("error").get<std::string>());
|
||||||
|
data.at("function_name").get_to<std::string>(value.function_name);
|
||||||
|
data.at("source_path").get_to<std::string>(value.source_path);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
NLOHMANN_JSON_NAMESPACE_END
|
||||||
|
|
||||||
|
#endif // REPERTORY_INCLUDE_EVENTS_TYPES_FILE_UPLOAD_COMPLETED_HPP_
|
@ -0,0 +1,80 @@
|
|||||||
|
/*
|
||||||
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
*/
|
||||||
|
#ifndef REPERTORY_INCLUDE_EVENTS_TYPES_FILE_UPLOAD_FAILED_HPP_
|
||||||
|
#define REPERTORY_INCLUDE_EVENTS_TYPES_FILE_UPLOAD_FAILED_HPP_
|
||||||
|
|
||||||
|
#include "events/i_event.hpp"
|
||||||
|
#include "types/repertory.hpp"
|
||||||
|
|
||||||
|
namespace repertory {
|
||||||
|
struct file_upload_failed final : public i_event {
|
||||||
|
file_upload_failed() = default;
|
||||||
|
file_upload_failed(std::string api_path_, std::string error_,
|
||||||
|
std::string_view function_name_, std::string source_path_)
|
||||||
|
: api_path(std::move(api_path_)),
|
||||||
|
error(std::move(error_)),
|
||||||
|
function_name(std::string(function_name_)),
|
||||||
|
source_path(std::move(source_path_)) {}
|
||||||
|
|
||||||
|
static constexpr const event_level level{event_level::warn};
|
||||||
|
static constexpr const std::string_view name{"file_upload_failed"};
|
||||||
|
|
||||||
|
std::string api_path;
|
||||||
|
std::string error;
|
||||||
|
std::string function_name;
|
||||||
|
std::string source_path;
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_event_level() const -> event_level override {
|
||||||
|
return level;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_name() const -> std::string_view override {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_single_line() const -> std::string override {
|
||||||
|
return fmt::format("{}|func|{}|ap|{}|error|{}|sp|{}", name, function_name,
|
||||||
|
api_path, error, source_path);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} // namespace repertory
|
||||||
|
|
||||||
|
NLOHMANN_JSON_NAMESPACE_BEGIN
|
||||||
|
template <> struct adl_serializer<repertory::file_upload_failed> {
|
||||||
|
static void to_json(json &data, const repertory::file_upload_failed &value) {
|
||||||
|
data["api_path"] = value.api_path;
|
||||||
|
data["error"] = value.error;
|
||||||
|
data["function_name"] = value.function_name;
|
||||||
|
data["source_path"] = value.source_path;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void from_json(const json &data,
|
||||||
|
repertory::file_upload_failed &value) {
|
||||||
|
data.at("api_path").get_to<std::string>(value.api_path);
|
||||||
|
data.at("error").get_to<std::string>(value.error);
|
||||||
|
data.at("function_name").get_to<std::string>(value.function_name);
|
||||||
|
data.at("source_path").get_to<std::string>(value.source_path);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
NLOHMANN_JSON_NAMESPACE_END
|
||||||
|
|
||||||
|
#endif // REPERTORY_INCLUDE_EVENTS_TYPES_FILE_UPLOAD_FAILED_HPP_
|
@ -0,0 +1,77 @@
|
|||||||
|
/*
|
||||||
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
*/
|
||||||
|
#ifndef REPERTORY_INCLUDE_EVENTS_TYPES_FILE_UPLOAD_NOT_FOUND_HPP_
|
||||||
|
#define REPERTORY_INCLUDE_EVENTS_TYPES_FILE_UPLOAD_NOT_FOUND_HPP_
|
||||||
|
|
||||||
|
#include "events/i_event.hpp"
|
||||||
|
#include "types/repertory.hpp"
|
||||||
|
|
||||||
|
namespace repertory {
|
||||||
|
struct file_upload_not_found final : public i_event {
|
||||||
|
file_upload_not_found() = default;
|
||||||
|
file_upload_not_found(std::string api_path_, std::string_view function_name_,
|
||||||
|
std::string source_path_)
|
||||||
|
: api_path(std::move(api_path_)),
|
||||||
|
function_name(std::string(function_name_)),
|
||||||
|
source_path(std::move(source_path_)) {}
|
||||||
|
|
||||||
|
static constexpr const event_level level{event_level::warn};
|
||||||
|
static constexpr const std::string_view name{"file_upload_not_found"};
|
||||||
|
|
||||||
|
std::string api_path;
|
||||||
|
std::string function_name;
|
||||||
|
std::string source_path;
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_event_level() const -> event_level override {
|
||||||
|
return level;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_name() const -> std::string_view override {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_single_line() const -> std::string override {
|
||||||
|
return fmt::format("{}|func|{}|ap|{}|sp|{}", name, function_name, api_path,
|
||||||
|
source_path);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} // namespace repertory
|
||||||
|
|
||||||
|
NLOHMANN_JSON_NAMESPACE_BEGIN
|
||||||
|
template <> struct adl_serializer<repertory::file_upload_not_found> {
|
||||||
|
static void to_json(json &data,
|
||||||
|
const repertory::file_upload_not_found &value) {
|
||||||
|
data["api_path"] = value.api_path;
|
||||||
|
data["function_name"] = value.function_name;
|
||||||
|
data["source_path"] = value.source_path;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void from_json(const json &data,
|
||||||
|
repertory::file_upload_not_found &value) {
|
||||||
|
data.at("api_path").get_to<std::string>(value.api_path);
|
||||||
|
data.at("function_name").get_to<std::string>(value.function_name);
|
||||||
|
data.at("source_path").get_to<std::string>(value.source_path);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
NLOHMANN_JSON_NAMESPACE_END
|
||||||
|
|
||||||
|
#endif // REPERTORY_INCLUDE_EVENTS_TYPES_FILE_UPLOAD_NOT_FOUND_HPP_
|
@ -0,0 +1,76 @@
|
|||||||
|
/*
|
||||||
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
*/
|
||||||
|
#ifndef REPERTORY_INCLUDE_EVENTS_TYPES_FILE_UPLOAD_QUEUED_HPP_
|
||||||
|
#define REPERTORY_INCLUDE_EVENTS_TYPES_FILE_UPLOAD_QUEUED_HPP_
|
||||||
|
|
||||||
|
#include "events/i_event.hpp"
|
||||||
|
#include "types/repertory.hpp"
|
||||||
|
|
||||||
|
namespace repertory {
|
||||||
|
struct file_upload_queued final : public i_event {
|
||||||
|
file_upload_queued() = default;
|
||||||
|
file_upload_queued(std::string api_path_, std::string_view function_name_,
|
||||||
|
std::string source_path_)
|
||||||
|
: api_path(std::move(api_path_)),
|
||||||
|
function_name(std::string(function_name_)),
|
||||||
|
source_path(std::move(source_path_)) {}
|
||||||
|
|
||||||
|
static constexpr const event_level level{event_level::info};
|
||||||
|
static constexpr const std::string_view name{"file_upload_queued"};
|
||||||
|
|
||||||
|
std::string api_path;
|
||||||
|
std::string function_name;
|
||||||
|
std::string source_path;
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_event_level() const -> event_level override {
|
||||||
|
return level;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_name() const -> std::string_view override {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_single_line() const -> std::string override {
|
||||||
|
return fmt::format("{}|func|{}|ap|{}|sp|{}", name, function_name, api_path,
|
||||||
|
source_path);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} // namespace repertory
|
||||||
|
|
||||||
|
NLOHMANN_JSON_NAMESPACE_BEGIN
|
||||||
|
template <> struct adl_serializer<repertory::file_upload_queued> {
|
||||||
|
static void to_json(json &data, const repertory::file_upload_queued &value) {
|
||||||
|
data["api_path"] = value.api_path;
|
||||||
|
data["function_name"] = value.function_name;
|
||||||
|
data["source_path"] = value.source_path;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void from_json(const json &data,
|
||||||
|
repertory::file_upload_queued &value) {
|
||||||
|
data.at("api_path").get_to<std::string>(value.api_path);
|
||||||
|
data.at("function_name").get_to<std::string>(value.function_name);
|
||||||
|
data.at("source_path").get_to<std::string>(value.source_path);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
NLOHMANN_JSON_NAMESPACE_END
|
||||||
|
|
||||||
|
#endif // REPERTORY_INCLUDE_EVENTS_TYPES_FILE_UPLOAD_QUEUED_HPP_
|
@ -0,0 +1,70 @@
|
|||||||
|
/*
|
||||||
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
*/
|
||||||
|
#ifndef REPERTORY_INCLUDE_EVENTS_TYPES_FILE_UPLOAD_REMOVED_HPP_
|
||||||
|
#define REPERTORY_INCLUDE_EVENTS_TYPES_FILE_UPLOAD_REMOVED_HPP_
|
||||||
|
|
||||||
|
#include "events/i_event.hpp"
|
||||||
|
#include "types/repertory.hpp"
|
||||||
|
|
||||||
|
namespace repertory {
|
||||||
|
struct file_upload_removed final : public i_event {
|
||||||
|
file_upload_removed() = default;
|
||||||
|
file_upload_removed(std::string api_path_, std::string_view function_name_)
|
||||||
|
: api_path(std::move(api_path_)),
|
||||||
|
function_name(std::string(function_name_)) {}
|
||||||
|
|
||||||
|
static constexpr const event_level level{event_level::debug};
|
||||||
|
static constexpr const std::string_view name{"file_upload_removed"};
|
||||||
|
|
||||||
|
std::string api_path;
|
||||||
|
std::string function_name;
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_event_level() const -> event_level override {
|
||||||
|
return level;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_name() const -> std::string_view override {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_single_line() const -> std::string override {
|
||||||
|
return fmt::format("{}|func|{}|ap|{}", name, function_name, api_path);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} // namespace repertory
|
||||||
|
|
||||||
|
NLOHMANN_JSON_NAMESPACE_BEGIN
|
||||||
|
template <> struct adl_serializer<repertory::file_upload_removed> {
|
||||||
|
static void to_json(json &data, const repertory::file_upload_removed &value) {
|
||||||
|
data["api_path"] = value.api_path;
|
||||||
|
data["function_name"] = value.function_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void from_json(const json &data,
|
||||||
|
repertory::file_upload_removed &value) {
|
||||||
|
data.at("api_path").get_to<std::string>(value.api_path);
|
||||||
|
data.at("function_name").get_to<std::string>(value.function_name);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
NLOHMANN_JSON_NAMESPACE_END
|
||||||
|
|
||||||
|
#endif // REPERTORY_INCLUDE_EVENTS_TYPES_FILE_UPLOAD_REMOVED_HPP_
|
@ -0,0 +1,80 @@
|
|||||||
|
/*
|
||||||
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
*/
|
||||||
|
#ifndef REPERTORY_INCLUDE_EVENTS_TYPES_FILE_UPLOAD_RETRY_HPP_
|
||||||
|
#define REPERTORY_INCLUDE_EVENTS_TYPES_FILE_UPLOAD_RETRY_HPP_
|
||||||
|
|
||||||
|
#include "events/i_event.hpp"
|
||||||
|
#include "types/repertory.hpp"
|
||||||
|
|
||||||
|
namespace repertory {
|
||||||
|
struct file_upload_retry final : public i_event {
|
||||||
|
file_upload_retry() = default;
|
||||||
|
file_upload_retry(std::string api_path_, api_error error_,
|
||||||
|
std::string_view function_name_, std::string source_path_)
|
||||||
|
: api_path(std::move(api_path_)),
|
||||||
|
error(std::move(error_)),
|
||||||
|
function_name(std::string(function_name_)),
|
||||||
|
source_path(std::move(source_path_)) {}
|
||||||
|
|
||||||
|
static constexpr const event_level level{event_level::warn};
|
||||||
|
static constexpr const std::string_view name{"file_upload_retry"};
|
||||||
|
|
||||||
|
std::string api_path;
|
||||||
|
api_error error{};
|
||||||
|
std::string function_name;
|
||||||
|
std::string source_path;
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_event_level() const -> event_level override {
|
||||||
|
return level;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_name() const -> std::string_view override {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_single_line() const -> std::string override {
|
||||||
|
return fmt::format("{}|func|{}|ap|{}|sp|{}|error|{}", name, function_name,
|
||||||
|
api_path, source_path, api_error_to_string(error));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} // namespace repertory
|
||||||
|
|
||||||
|
NLOHMANN_JSON_NAMESPACE_BEGIN
|
||||||
|
template <> struct adl_serializer<repertory::file_upload_retry> {
|
||||||
|
static void to_json(json &data, const repertory::file_upload_retry &value) {
|
||||||
|
data["api_path"] = value.api_path;
|
||||||
|
data["error"] = repertory::api_error_to_string(value.error);
|
||||||
|
data["function_name"] = value.function_name;
|
||||||
|
data["source_path"] = value.source_path;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void from_json(const json &data, repertory::file_upload_retry &value) {
|
||||||
|
data.at("api_path").get_to<std::string>(value.api_path);
|
||||||
|
value.error =
|
||||||
|
repertory::api_error_from_string(data.at("error").get<std::string>());
|
||||||
|
data.at("function_name").get_to<std::string>(value.function_name);
|
||||||
|
data.at("source_path").get_to<std::string>(value.source_path);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
NLOHMANN_JSON_NAMESPACE_END
|
||||||
|
|
||||||
|
#endif // REPERTORY_INCLUDE_EVENTS_TYPES_FILE_UPLOAD_RETRY_HPP_
|
@ -0,0 +1,81 @@
|
|||||||
|
/*
|
||||||
|
Copyright <2018-2025> <scott.e.graves@protonmail.com>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
*/
|
||||||
|
#ifndef REPERTORY_INCLUDE_EVENTS_TYPES_FILESYSTEM_ITEM_ADDED_HPP_
|
||||||
|
#define REPERTORY_INCLUDE_EVENTS_TYPES_FILESYSTEM_ITEM_ADDED_HPP_
|
||||||
|
|
||||||
|
#include "events/i_event.hpp"
|
||||||
|
#include "types/repertory.hpp"
|
||||||
|
|
||||||
|
namespace repertory {
|
||||||
|
struct filesystem_item_added final : public i_event {
|
||||||
|
filesystem_item_added() = default;
|
||||||
|
filesystem_item_added(std::string api_parent_, std::string api_path_,
|
||||||
|
bool directory_, std::string_view function_name_)
|
||||||
|
: api_parent(std::move(api_parent_)),
|
||||||
|
api_path(std::move(api_path_)),
|
||||||
|
directory(directory_),
|
||||||
|
function_name(std::string(function_name_)) {}
|
||||||
|
|
||||||
|
static constexpr const event_level level{event_level::debug};
|
||||||
|
static constexpr const std::string_view name{"filesystem_item_added"};
|
||||||
|
|
||||||
|
std::string api_parent;
|
||||||
|
std::string api_path;
|
||||||
|
bool directory{};
|
||||||
|
std::string function_name;
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_event_level() const -> event_level override {
|
||||||
|
return level;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_name() const -> std::string_view override {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto get_single_line() const -> std::string override {
|
||||||
|
return fmt::format("{}|func|{}|ap|{}|parent|{}|dir|{}", name, function_name,
|
||||||
|
api_path, api_parent, directory);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} // namespace repertory
|
||||||
|
|
||||||
|
NLOHMANN_JSON_NAMESPACE_BEGIN
|
||||||
|
template <> struct adl_serializer<repertory::filesystem_item_added> {
|
||||||
|
static void to_json(json &data,
|
||||||
|
const repertory::filesystem_item_added &value) {
|
||||||
|
data["api_parent"] = value.api_parent;
|
||||||
|
data["api_path"] = value.api_path;
|
||||||
|
data["directory"] = value.directory;
|
||||||
|
data["function_name"] = value.function_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void from_json(const json &data,
|
||||||
|
repertory::filesystem_item_added &value) {
|
||||||
|
data.at("api_parent").get_to<std::string>(value.api_parent);
|
||||||
|
data.at("api_path").get_to<std::string>(value.api_path);
|
||||||
|
data.at("directory").get_to<bool>(value.directory);
|
||||||
|
data.at("function_name").get_to<std::string>(value.function_name);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
NLOHMANN_JSON_NAMESPACE_END
|
||||||
|
|
||||||
|
#endif // REPERTORY_INCLUDE_EVENTS_TYPES_FILESYSTEM_ITEM_ADDED_HPP_
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user