diff --git a/.arcconfig b/.arcconfig new file mode 100644 index 000000000..05b12555c --- /dev/null +++ b/.arcconfig @@ -0,0 +1,3 @@ +{ + "phabricator.uri" : "https://phabricator.readdle.com/" +} diff --git a/.github/workflows/pull-request-check.yml b/.github/workflows/pull-request-check.yml new file mode 100644 index 000000000..e251fbd5c --- /dev/null +++ b/.github/workflows/pull-request-check.yml @@ -0,0 +1,113 @@ +name: Pull Request Check + +on: pull_request + +defaults: + run: + shell: zsh -l {0} # Use zsh iwth login as default shell + +concurrency: + group: ${{ github.ref }} + cancel-in-progress: true + +jobs: + + Android: + name: "mailcore2 - Android" + runs-on: macos-latest + + steps: + - uses: actions/checkout@v4 + + - name: Select Xcode 26.2 + run: sudo xcode-select -s /Applications/Xcode_26.2.app + + - name: Install Swift 6.2.1 toolchain + run: | + curl -L -O https://download.swift.org/swift-6.2.1-release/xcode/swift-6.2.1-RELEASE/swift-6.2.1-RELEASE-osx.pkg + sudo installer -pkg swift-6.2.1-RELEASE-osx.pkg -target / + + - name: Install Swiftly shim + run: | + # The Readdle Gradle plugin invokes "swiftly run +6.2 swift build ..." + # Swiftly's install script does not support macOS 15 yet, so we create + # a shim that delegates to the Swift 6.2.1 toolchain (must match the + # SDK's module version exactly). + SWIFT_621="/Library/Developer/Toolchains/swift-6.2.1-RELEASE.xctoolchain/usr/bin" + mkdir -p ~/.swiftly/bin + cat > ~/.swiftly/bin/swiftly << SHIM + #!/bin/bash + if [ "\$1" = "run" ]; then + shift 2 + exec env PATH="$SWIFT_621:\$PATH" "\$@" + fi + exec "\$@" + SHIM + chmod +x ~/.swiftly/bin/swiftly + echo "$HOME/.swiftly/bin" >> $GITHUB_PATH + + - name: Install Readdle Swift Android SDK + run: | + swift sdk install https://github.com/readdle/swift-android-toolchain/releases/download/6.2-r1/readdle-swift-6.2.1-RELEASE_android.artifactbundle.tar.gz \ + --checksum 2057ecd9cf71fcd9beaded08d370f4815f867983c073f2d0010796aefdf8c2f1 + ~/Library/org.swift.swiftpm/swift-sdks/readdle-swift-6.2.1-RELEASE_android.artifactbundle/swift-android/scripts/setup-android-sdk.sh + + - name: Install Swift Android Build Tools + run: | + git clone https://github.com/readdle/swift-android-buildtools.git ~/swift-android-buildtools + echo "$HOME/swift-android-buildtools" >> $GITHUB_PATH + + - name: Run connected android tests + run: swift-android build --build-tests + + Windows: + name: "mailcore2 - Windows prebuilt" + runs-on: ubuntu-latest + timeout-minutes: 10 + permissions: + contents: read + + # There is no Windows CI: the C/C++ for Windows is built by hand and published as a release + # asset named after a digest of the sources. This job does not build anything - it only asks + # whether the archive for these sources exists, so that a forgotten upload is caught in the + # pull request instead of in the spark-core build days later. The digest is a hash of git + # tree entries, identical on every platform, so a Linux runner answers it in seconds. + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 2 # the pull request merge commit and both of its parents + + - name: Check that a prebuilt is published for these sources + shell: pwsh + env: + GH_TOKEN: ${{ github.token }} + run: ./build-windows-5.10/Check-PrebuiltPublished.ps1 + + Darwin: + name: "mailcore2 - ${{ matrix.os }}" + runs-on: macos-latest + timeout-minutes: 60 + + strategy: + matrix: + os: [macOS, iOS] + include: + - os: macOS + os_lowercased: macos + - os: iOS + os_lowercased: ios + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Run tests + run: ./build-scripts/test-${{ matrix.os_lowercased }}.sh + - name: Publish Report + uses: mikepenz/action-junit-report@v3 + if: failure() + with: + report_paths: .build/reports/junit.xml + check_name: mailcore2 - ${{ matrix.os }} - Report + detailed_summary: true + include_passed: true diff --git a/.gitignore b/.gitignore index e6ba39b64..eef4bc240 100644 --- a/.gitignore +++ b/.gitignore @@ -23,6 +23,7 @@ DerivedData *.hmap *.xcuserstate *.xccheckout +build-mac/mailcore2.xcodeproj/project.xcworkspace/xcshareddata #CocoaPods Pods @@ -33,7 +34,6 @@ Podfile.lock *.opensdf *.suo Externals -build-mac/mailcore2.xcodeproj/project.xcworkspace/xcshareddata build-windows/include build-windows/_headers_depends build-windows/mailcore2/Debug @@ -48,4 +48,15 @@ build-windows/mailcore2/test/Release build-windows/mailcore2/test/x64/Release build-windows/mailcore2/test/Debug build-windows/mailcore2/test/x64/Debug +build-windows/mailcore2/mailcore2/mailcore2.vcxproj.user cocoapods-build +*.aar +.build +.vs + +LinuxMain.swift +third-party +test.log +junit.xml +.build-ios +ndk-stack.log diff --git a/.sourcery.LinuxMain.stencil b/.sourcery.LinuxMain.stencil new file mode 100644 index 000000000..cc73124f1 --- /dev/null +++ b/.sourcery.LinuxMain.stencil @@ -0,0 +1,15 @@ +import XCTest +{{ argument.testimports }} + +{% for type in types.classes|based:"XCTestCase" %} +{% if not type.annotations.disableTests %}extension {{ type.name }} { + static var allTests = [ + {% for method in type.methods %}{% if not method.annotations.disableTest and method.parameters.count == 0 and method.shortName|hasPrefix:"test" %} ("{{ method.shortName }}", {{ method.shortName }}), + {% endif %}{% endfor %}] +} + +{% endif %}{% endfor %} + +XCTMain([ +{% for type in types.classes|based:"XCTestCase" %}{% if not type.annotations.disableTests %} testCase({{ type.name }}.allTests), +{% endif %}{% endfor %}]) diff --git a/.sourcery.yml b/.sourcery.yml new file mode 100644 index 000000000..7835ac976 --- /dev/null +++ b/.sourcery.yml @@ -0,0 +1,9 @@ +# This is config file for sourcery, just run `sourcery` in this folder +sources: + - unittest +templates: + - .sourcery.LinuxMain.stencil +output: + LinuxMain.swift +args: + testimports: '@testable import MailCoreTests' diff --git a/.travis.yml b/.travis.yml index f22320669..ec0b8636f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,4 +4,3 @@ os: language: c++ before_script: scripts/travis/before-script.sh script: scripts/travis/script.sh -osx_image: xcode7 diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 000000000..97e1ffc2c --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,98 @@ +# Working in this repository + +This is Readdle's fork of MailCore 2. Most of it is the upstream C++ library; the parts we +maintain are the C wrapper (`src/c`), the Swift bindings (`src/swift`) and the Windows build +under `build-windows-5.10`. + +## Publishing the Windows prebuilt + +Spark's Windows build does not compile the mailcore2 C++ from source. It downloads an archive +whose name is derived from the content of the C/C++ sources, so **sources that were never built +simply have no archive** and the Spark build says so: + +``` +Prebuilt MailCore not found: mailcore2-windows-.zip +Have you built and uploaded it yet? +``` + +There is no Windows CI. The `mailcore2 - Windows prebuilt` pull-request check asks the same +question earlier, on every pull request, and goes red when the answer is no. Either way, +someone has to build and publish from a Windows machine — that is what "build and upload the +Windows changes" means. + +You can ask the same question yourself, from anywhere, without a Windows machine: + +```powershell +pwsh ./build-windows-5.10/Check-PrebuiltPublished.ps1 +``` + +### The whole procedure + +On a Windows build machine, in a checkout of this repository **at the revision that needs the +prebuilt** (a branch head, a tag, anything committed): + +```powershell +.\build-windows-5.10\Publish-Mailcore2Prebuilt.ps1 +``` + +That is the entire job. It computes the digest, exits early if that archive already exists, +fetches the dependency archive, clears the previous build output, builds through +`Build-Mailcore2.ps1`, stamps the digest, packages, verifies the package, and adds it to the +release. + +**Do not commit anything to mailcore2 afterwards.** The archive is named after the sources, so +the revision that needs it will find it. Committing, opening the PR and tagging are the +developer's job, not the agent's. + +### The release + +Archives live on the permanent `windows-prebuilt` release, set up by hand once. +`Publish-Mailcore2Prebuilt.ps1` only adds `mailcore2-windows-.zip` to it. If it is +somehow missing, say so rather than creating one. + +### Requirements + +The same machine that has always built mailcore2 for Windows: the toolchain the build expects +(Swift for Windows, VS 2022 Build Tools, the Windows SDK) and the internal RD PowerShell +modules. Nothing about the build changed. + +What did change: no AWS credential. `SPARK_PREBUILT_KEY` is gone, and the three binaries it +used to fetch travel as one public asset on the release. Publishing additionally needs `gh` +authenticated as a user with write access (`gh auth login`). + +The working tree must be committed. The digest describes `HEAD`, so uncommitted changes under +`src` (excluding `src/swift`), `CMakeLists.txt` or `build-windows-5.10` make the script refuse +to run. + +### When it fails + +- *Uncommitted changes under …* — commit them first, or test locally by passing + `-BuildMailcore2` to `Build-SwiftMailcore.ps1` instead of publishing. +- *The windows-prebuilt release does not exist* — ask the developer; see "The release" above. +- *Could not download the dependency archive* — `mailcore2-windows-deps-.zip` carries + openssl, sasl and zlib and is attached to the release by hand. If it is not there, ask the + developer to attach it. The message names the path a local copy can be dropped at instead. +- *GitHub CLI is not authenticated* — `gh auth login`. Do not work around this with a token + pasted into the shell. +- Anything about ICU, libxml2 or the toolchain — that is the build machine's setup, unchanged by + this flow. Do not try to install or relocate it. + +### What not to do + +- Do not edit the archive by hand or upload one built from an uncommitted tree. +- Do not delete a published `mailcore2-windows-.zip`: revisions that were built against + it keep downloading it by name. Re-uploading the *same* digest after a rebuild is the only + legitimate replacement, and `-Force` exists for exactly that. +- Do not create the release or attach the dependency archive. Both are the developer's. +- Do not add a version number anywhere. The digest replaced it; there is nothing to bump. + +### What the digest covers + +`src` (without `src/swift`), `CMakeLists.txt`, and `build-windows-5.10` — the scripts included, +because they decide what gets compiled, which project files and redistributables get copied in, +and what ends up in the package. So there is no way to change the contents of an archive without +changing its name. + +The price is the other direction: editing any script here, even a message or the pull-request +check, produces a new digest and asks for a rebuild. Expect that, and prefer to land script edits +together with whatever else needs republishing. diff --git a/CMakeLists.txt b/CMakeLists.txt index b391ae255..a4e1e543c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,8 +1,10 @@ -cmake_minimum_required (VERSION 2.6) -project (mailcore2) +cmake_minimum_required (VERSION 3.12) +project (mailcore2 + LANGUAGES + C CXX) -IF(APPLE) - set(CMAKE_CXX__FLAGS "-std=c++11 -stdlib=libc++") +if(APPLE) + set(CMAKE_CXX_FLAGS "-std=c++11 -stdlib=libc++") set(CMAKE_EXE_LINKER_FLAGS "-lc++ -stdlib=libc++") set(additional_lib_searchpath @@ -20,11 +22,10 @@ IF(APPLE) "${sdkpath}/usr/include/tidy" "${sdkpath}/usr/include/libxml2" ) - message(STATUS "${additional_includes}") set(mac_libraries iconv) -ELSEIF(${CMAKE_SYSTEM_NAME} MATCHES "Linux") +elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux") set(CMAKE_CXX_FLAGS "-std=gnu++0x") set(additional_includes @@ -34,8 +35,21 @@ ELSEIF(${CMAKE_SYSTEM_NAME} MATCHES "Linux") set(icu_libraries icudata icui18n icuio icule iculx icutest icutu icuuc) set(linux_libraries ${icu_libraries} pthread uuid) -ENDIF() +elseif(WIN32) + set(CMAKE_CXX_STANDARD 11) + add_compile_definitions(_HAS_CONDITIONAL_EXPLICIT=0) + add_compile_definitions(LIBXML_STATIC) + set(BUILD_SHARED_LIBS ON) + set(additional_includes + "${CMAKE_CURRENT_SOURCE_DIR}/Externals/include" + ) + set(additional_lib_searchpath + "${CMAKE_CURRENT_SOURCE_DIR}/Externals/lib64" + ) +endif() +message(STATUS "Additional includes: ${additional_includes}") +message(STATUS "Additional lib search path: ${additional_lib_searchpath}") IF(${CMAKE_SYSTEM_NAME} MATCHES "Linux") find_package(PkgConfig) @@ -50,135 +64,230 @@ ENDIF() if(NOT APPLE) + # detect icu find_path(ICU4C_INCLUDE_DIR NAMES unicode/utf8.h PATHS ${additional_includes} ) - find_library(ICU4C_LIBRARY - NAMES icudata icui18n icuio icule iculx icutest icutu icuuc + + if(WIN32) + find_library(ICU4C_UC_LIBRARY + NAMES icuuc + PATHS ${additional_lib_searchpath} + ) + find_library(ICU4C_IN_LIBRARY + NAMES icuin + PATHS ${additional_lib_searchpath} + ) + + if(NOT ICU4C_INCLUDE_DIR OR NOT ICU4C_UC_LIBRARY OR NOT ICU4C_IN_LIBRARY) + message(FATAL_ERROR "ERROR: Could not find ICU4C") + else() + message(STATUS "Found ICU4C") + endif() + + else() + find_library(ICU4C_LIBRARY + NAMES icudata icui18n icuio icule iculx icutest icutu icuuc + PATHS ${additional_lib_searchpath} + ) + + if(NOT ICU4C_INCLUDE_DIR OR NOT ICU4C_LIBRARY) + message(FATAL_ERROR "ERROR: Could not find ICU4C") + else() + message(STATUS "Found ICU4C") + endif() + endif() # WIN32 + + include_directories(${ICU4C_INCLUDE_DIR}) +endif() + +if(ANDROID) + message(STATUS "Android platform") +else() + + + # detect ctemplate + + find_path(CTEMPLATE_INCLUDE_DIR + NAMES ctemplate/template.h + PATHS ${additional_includes} + ) + find_library(CTEMPLATE_LIBRARY + NAMES ctemplate libctemplate PATHS ${additional_lib_searchpath} ) - if(NOT ICU4C_INCLUDE_DIR OR NOT ICU4C_LIBRARY) - message(FATAL_ERROR "ERROR: Could not find icu4c") + if(NOT CTEMPLATE_INCLUDE_DIR OR NOT CTEMPLATE_LIBRARY) + message(FATAL_ERROR "ERROR: Could not find ctemplate") else() - message(STATUS "Found icu4c") + message(STATUS "Found ctemplate") endif() - -endif() + include_directories(${CTEMPLATE_INCLUDE_DIR}) -IF(ANDROID) - message(STATUS "Android platform") -ELSE() -# detect ctemplate + # detect libetpan -find_path(CTEMPLATE_INCLUDE_DIR - NAMES ctemplate/template.h - PATHS ${additional_includes} -) -find_library(CTEMPLATE_LIBRARY - NAMES ctemplate - PATHS ${additional_lib_searchpath} -) + find_path(LIBETPAN_INCLUDE_DIR + NAMES libetpan/libetpan.h + PATHS ${additional_includes} + ) + find_library(LIBETPAN_LIBRARY + NAMES etpan libetpan + PATHS ${additional_lib_searchpath} + ) -if(NOT CTEMPLATE_INCLUDE_DIR OR NOT CTEMPLATE_LIBRARY) - message(FATAL_ERROR "ERROR: Could not find ctemplate") -else() - message(STATUS "Found ctemplate") -endif() + if(NOT LIBETPAN_INCLUDE_DIR OR NOT LIBETPAN_LIBRARY) + message(FATAL_ERROR "ERROR: Could not find libetpan") + else() + message(STATUS "Found libetpan") + endif() + include_directories(${LIBETPAN_INCLUDE_DIR}) -# detect libetpan -find_path(LIBETPAN_INCLUDE_DIR - NAMES libetpan/libetpan.h - PATHS ${additional_includes} -) -find_library(LIBETPAN_LIBRARY - NAMES etpan - PATHS ${additional_lib_searchpath} -) + # detect tidy -if(NOT LIBETPAN_INCLUDE_DIR OR NOT LIBETPAN_LIBRARY) - message(FATAL_ERROR "ERROR: Could not find libetpan") -else() - message(STATUS "Found libetpan") -endif() + find_path(TIDY_INCLUDE_DIR + NAMES tidy.h tidy/tidy.h + PATHS ${additional_includes} + ) + find_library(TIDY_LIBRARY + NAMES tidy rdtidy + PATHS ${additional_lib_searchpath} + ) + + if(NOT TIDY_INCLUDE_DIR OR NOT TIDY_LIBRARY) + message(FATAL_ERROR "ERROR: Could not find tidy") + else() + message(STATUS "Found tidy") + endif() + include_directories(${TIDY_INCLUDE_DIR}) -# detect tidy -find_path(TIDY_INCLUDE_DIR - NAMES tidy.h - PATHS ${additional_includes} -) -find_library(TIDY_LIBRARY - NAMES tidy - PATHS ${additional_lib_searchpath} -) + # detect libxml2 -if(NOT TIDY_INCLUDE_DIR OR NOT TIDY_LIBRARY) - message(FATAL_ERROR "ERROR: Could not find tidy") -else() - message(STATUS "Found tidy") -endif() + find_path(LIBXML_INCLUDE_DIR + NAMES libxml/xmlreader.h libxml2/libxml/xmlreader.h + PATHS ${additional_includes} + ) + find_library(LIBXML_LIBRARY + NAMES xml2 libxml2s + PATHS ${additional_lib_searchpath} + ) + if(NOT LIBXML_INCLUDE_DIR OR NOT LIBXML_LIBRARY) + message(FATAL_ERROR "ERROR: Could not find libxml2") + else() + message(STATUS "Found libxml2") + endif() -# detect uuid + if(WIN32 AND LIBXML_INCLUDE_DIR MATCHES ".*/include") + set(LIBXML_INCLUDE_DIR "${LIBXML_INCLUDE_DIR}/libxml2") + message(STATUS "Fixed libxml2 path: ${LIBXML_INCLUDE_DIR}") + endif() -find_path(UUID_INCLUDE_DIR - NAMES uuid/uuid.h - PATHS ${additional_includes} -) + include_directories(${LIBXML_INCLUDE_DIR}) -if(NOT UUID_INCLUDE_DIR) - message(FATAL_ERROR "ERROR: Could not find uuid") -else() - message(STATUS "Found uuid") -endif() + # detect zlib -# detect libxml2 + find_path(ZLIB_INCLUDE_DIR + NAMES zlib.h + PATHS ${additional_includes} + ) + find_library(ZLIB_LIBRARY + NAMES z zlib + PATHS ${additional_lib_searchpath} + ) -find_path(LIBXML_INCLUDE_DIR - NAMES libxml/xmlreader.h - PATHS ${additional_includes} -) -find_library(LIBXML_LIBRARY - NAMES xml2 - PATHS ${additional_lib_searchpath} -) + if(NOT ZLIB_INCLUDE_DIR OR NOT ZLIB_LIBRARY) + message(FATAL_ERROR "ERROR: Could not find zlib") + else() + message(STATUS "Found zlib") + endif() -if(NOT LIBXML_INCLUDE_DIR OR NOT LIBXML_LIBRARY) - message(FATAL_ERROR "ERROR: Could not find libxml2") -else() - message(STATUS "Found libxml2") -endif() + include_directories(${ZLIB_INCLUDE_DIR}) -# detect zlib + if(WIN32) -find_path(ZLIB_INCLUDE_DIR - NAMES zlib.h - PATHS ${additional_includes} -) -find_library(ZLIB_LIBRARY - NAMES z - PATHS ${additional_lib_searchpath} -) -if(NOT ZLIB_INCLUDE_DIR OR NOT ZLIB_LIBRARY) - message(FATAL_ERROR "ERROR: Could not find zlib") -else() - message(STATUS "Found zlib") -endif() + # detect OpenSSL -ENDIF() # Android platform + find_path(OPENSSL_INCLUDE_DIR + NAMES openssl/opensslv.h + PATHS ${additional_includes} + ) + find_library(OPENSSL_CRYPTO_LIBRARY + NAMES libcrypto + PATHS ${additional_lib_searchpath} + ) + + if(NOT OPENSSL_INCLUDE_DIR OR NOT OPENSSL_CRYPTO_LIBRARY) + message(FATAL_ERROR "ERROR: Could not find OpenSSL") + else() + message(STATUS "Found OpenSSL") + endif() + + include_directories(${OPENSSL_INCLUDE_DIR}) -add_subdirectory (src) -add_subdirectory (tests) -add_subdirectory (unittest) + # detect dispatch + + find_path(DISPATCH_INCLUDE_DIR + NAMES dispatch/dispatch.h + HINTS ENV PATH + PATHS ${additional_includes} + ) + find_library(DISPATCH_LIBRARY + NAMES dispatch + PATHS ${additional_lib_searchpath} + ) + find_library(DISPATCH_BLOCKS_LIBRARY + NAMES BlocksRuntime + PATHS ${additional_lib_searchpath} + ) + + if(NOT DISPATCH_INCLUDE_DIR OR NOT DISPATCH_LIBRARY) + message(FATAL_ERROR "ERROR: Could not find dispatch") + else() + message(STATUS "Found dispatch") + endif() + + if(NOT DISPATCH_BLOCKS_LIBRARY) + message(FATAL_ERROR "ERROR: Could not find blocks runtime") + else() + message(STATUS "Found blocks runtime") + endif() + + include_directories(${DISPATCH_INCLUDE_DIR}) + + else() + + + # detect uuid + + find_path(UUID_INCLUDE_DIR + NAMES uuid/uuid.h + PATHS ${additional_includes} + ) + + if(NOT UUID_INCLUDE_DIR) + message(FATAL_ERROR "ERROR: Could not find uuid") + else() + message(STATUS "Found uuid") + endif() + + endif() # WIN32 + +endif() # Android platform + +add_subdirectory (src) +if (NOT WIN32) + add_subdirectory (tests) + add_subdirectory (unittest) +endif() diff --git a/CMakeSettings.json b/CMakeSettings.json new file mode 100644 index 000000000..70335ba50 --- /dev/null +++ b/CMakeSettings.json @@ -0,0 +1,53 @@ +{ + "configurations": [ + { + "name": "x64-Release", + "generator": "Ninja", + "configurationType": "RelWithDebInfo", + "buildRoot": "${projectDir}\\.build\\mailcore2", + "installRoot": "${projectDir}\\.build\\install", + "cmakeCommandArgs": "", + "buildCommandArgs": "-v", + "ctestCommandArgs": "", + "inheritEnvironments": [ "clang_cl_x64" ], + "variables": [ + { + "name": "DISPATCH_INCLUDE_DIR", + "value": "C:/Library/Developer/Platforms/Windows.platform/Developer/SDKs/Windows.sdk/usr/lib/swift", + "type": "PATH" + }, + { + "name": "ICU4C_UC_LIBRARY", + "value": "C:/Library/icu-64/usr/lib/icuuc64.lib", + "type": "FILEPATH" + }, + { + "name": "ICU4C_IN_LIBRARY", + "value": "C:/Library/icu-64/usr/lib/icuin64.lib", + "type": "FILEPATH" + }, + { + "name": "CMAKE_C_COMPILER", + "value": "clang-cl.exe", + "type": "FILEPATH" + }, + { + "name": "CMAKE_CXX_COMPILER", + "value": "clang-cl.exe", + "type": "FILEPATH" + }, + { + "name": "DISPATCH_LIBRARY", + "value": "C:/Library/Developer/Platforms/Windows.platform/Developer/SDKs/Windows.sdk/usr/lib/swift/windows/dispatch.lib", + "type": "FILEPATH" + }, + { + "name": "DISPATCH_BLOCKS_LIBRARY", + "value": "C:/Library/Developer/Platforms/Windows.platform/Developer/SDKs/Windows.sdk/usr/lib/swift/windows/BlocksRuntime.lib", + "type": "FILEPATH" + } + ], + "intelliSenseMode": "windows-clang-x64" + } + ] +} \ No newline at end of file diff --git a/Package.swift b/Package.swift new file mode 100644 index 000000000..b562cf7f1 --- /dev/null +++ b/Package.swift @@ -0,0 +1,283 @@ +// swift-tools-version:5.4 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +import PackageDescription +import Foundation + +var CMailCoreExcludes = [ + "core/basetypes/MCDataMac.mm", + "core/rfc822/MCMessageParserMac.mm", + + "core/zip/MiniZip/MiniZip64_Changes.txt", + "core/zip/MiniZip/unzip.c", + "core/zip/MiniZip/Makefile", + "core/zip/MiniZip/mztools.c", + "core/zip/MiniZip/MiniZip64_info.txt", + "core/zip/MiniZip/make_vms.com", + "core/zip/MiniZip/iowin32.c", + "core/zip/MiniZip/minizip.c", + "core/zip/MiniZip/miniunz.c", + + "core/basetypes/icu-ucsdet/ucsdet.cpp", + "core/basetypes/icu-ucsdet/csrutf8.cpp", + "core/basetypes/icu-ucsdet/csdetect.cpp", + "core/basetypes/icu-ucsdet/uinvchar.c", + "core/basetypes/icu-ucsdet/csrucode.cpp", + "core/basetypes/icu-ucsdet/uarrsort.c", + "core/basetypes/icu-ucsdet/ucln_in.cpp", + "core/basetypes/icu-ucsdet/csrsbcs.cpp", + "core/basetypes/icu-ucsdet/ucln_cmn.cpp", + "core/basetypes/icu-ucsdet/csr2022.cpp", + "core/basetypes/icu-ucsdet/inputext.cpp", + "core/basetypes/icu-ucsdet/cmemory.c", + "core/basetypes/icu-ucsdet/uenum.c", + "core/basetypes/icu-ucsdet/umutex.cpp", + "core/basetypes/icu-ucsdet/csrmbcs.cpp", + "core/basetypes/icu-ucsdet/utrace.c", + "core/basetypes/icu-ucsdet/csmatch.cpp", + "core/basetypes/icu-ucsdet/ustring.cpp", + "core/basetypes/icu-ucsdet/udataswp.c", + "core/basetypes/icu-ucsdet/cstring.c", + "core/basetypes/icu-ucsdet/uobject.cpp", + "core/basetypes/icu-ucsdet/csrecog.cpp", + + "objc/abstract/MCOAbstractPart.mm", + "objc/abstract/MCOAbstractMultipart.mm", + "objc/abstract/MCOMessageHeader.mm", + "objc/abstract/MCOAbstractMessage.mm", + "objc/abstract/MCOAbstractMessageRendererCallback.mm", + "objc/abstract/MCOAbstractMessagePart.mm", + "objc/abstract/MCOAddress.mm", + "objc/pop/MCOPOPFetchMessageOperation.mm", + "objc/pop/MCOPOPNoopOperation.mm", + "objc/pop/MCOPOPSession.mm", + "objc/pop/MCOPOPMessageInfo.mm", + "objc/pop/MCOPOPFetchHeaderOperation.mm", + "objc/pop/MCOPOPOperation.mm", + "objc/pop/MCOPOPFetchMessagesOperation.mm", + "objc/imap/MCOIMAPCustomCommandOperation.mm", + "objc/imap/MCOIMAPCheckAccountOperation.mm", + "objc/imap/MCOIMAPIdentityOperation.mm", + "objc/imap/MCOIMAPFolderInfo.mm", + "objc/imap/MCOIMAPMultipart.mm", + "objc/imap/MCOIMAPFetchMessagesOperation.mm", + "objc/imap/MCOIMAPSession.mm", + "objc/imap/MCOIMAPMessage.mm", + "objc/imap/MCOIMAPMultiDisconnectOperation.mm", + "objc/imap/MCOIMAPBaseOperation.mm", + "objc/imap/MCOIMAPAppendMessageOperation.mm", + "objc/imap/MCOIMAPMoveMessagesOperation.mm", + "objc/imap/MCOIMAPFolderInfoOperation.mm", + "objc/imap/MCOIMAPOperation.mm", + "objc/imap/MCOIMAPFetchContentToFileOperation.mm", + "objc/imap/MCOIMAPQuotaOperation.mm", + "objc/imap/MCOIMAPFolderStatusOperation.mm", + "objc/imap/MCOIMAPIdentity.mm", + "objc/imap/MCOIMAPMessagePart.mm", + "objc/imap/MCOIMAPFolder.mm", + "objc/imap/MCOIMAPNamespaceItem.mm", + "objc/imap/MCOIMAPFolderStatus.mm", + "objc/imap/MCOIMAPFetchParsedContentOperation.mm", + "objc/imap/MCOIMAPSearchExpression.mm", + "objc/imap/MCOIMAPFetchFoldersOperation.mm", + "objc/imap/MCOIMAPNamespace.mm", + "objc/imap/MCOIMAPNoopOperation.mm", + "objc/imap/MCOIMAPFetchNamespaceOperation.mm", + "objc/imap/MCOIMAPSearchOperation.mm", + "objc/imap/MCOIMAPCapabilityOperation.mm", + "objc/imap/MCOIMAPIdleOperation.mm", + "objc/imap/MCOIMAPFetchContentOperation.mm", + "objc/imap/MCOIMAPPart.mm", + "objc/imap/MCOIMAPCopyMessagesOperation.mm", + "objc/imap/MCOIMAPMessageRenderingOperation.mm", + "objc/rfc822/MCOMessageBuilder.mm", + "objc/rfc822/MCOMessagePart.mm", + "objc/rfc822/MCOMessageParser.mm", + "objc/rfc822/MCOMultipart.mm", + "objc/rfc822/MCOAttachment.mm", + "objc/provider/MCOAccountValidator.mm", + "objc/provider/MCONetService.mm", + "objc/provider/MCOMailProvidersManager.mm", + "objc/provider/MCOMailProvider.mm", + "objc/utils/MCORange.mm", + "objc/utils/NSDictionary+MCO.mm", + "objc/utils/NSArray+MCO.mm", + "objc/utils/NSSet+MCO.mm", + "objc/utils/MCOIndexSet.mm", + "objc/utils/NSObject+MCO.mm", + "objc/utils/MCOOperation.mm", + "objc/utils/NSError+MCO.mm", + "objc/utils/NSValue+MCO.mm", + "objc/utils/NSString+MCO.mm", + "objc/utils/NSData+MCO.mm", + "objc/smtp/MCOSMTPSession.mm", + "objc/smtp/MCOSMTPLoginOperation.mm", + "objc/smtp/MCOSMTPNoopOperation.mm", + "objc/smtp/MCOSMTPSendOperation.mm", + "objc/smtp/MCOSMTPOperation.mm", + "objc/nntp/MCONNTPDisconnectOperation.mm", + "objc/nntp/MCONNTPListNewsgroupsOperation.mm", + "objc/nntp/MCONNTPFetchOverviewOperation.mm", + "objc/nntp/MCONNTPOperation.mm", + "objc/nntp/MCONNTPGroupInfo.mm", + "objc/nntp/MCONNTPFetchServerTimeOperation.mm", + "objc/nntp/MCONNTPFetchHeaderOperation.mm", + "objc/nntp/MCONNTPPostOperation.mm", + "objc/nntp/MCONNTPFetchAllArticlesOperation.mm", + "objc/nntp/MCONNTPFetchArticleOperation.mm", + "objc/nntp/MCONNTPSession.mm", +] + +var mailcoreExcludes = [ + "utils/RSMLibetpanHelper.mm", +] + +#if TARGET_ANDROID + +CMailCoreExcludes += [ + "core/basetypes/MCMainThreadMac.mm", + "core/basetypes/MCAutoreleasePoolMac.mm", + "core/basetypes/MCObjectMac.mm", + "core/zip/MCZipMac.mm", + "objc/utils/MCOObjectWrapper.mm", +] + +let CMailCoreExtensionFiles: [String] = [ + "core/zip/MiniZip/zip.c", + "core/zip/MiniZip/ioapi.c" +] + +let mailcoreResources: [Resource] = [] + +mailcoreExcludes += [ + "resources/providers.json" +] + +#else + +let CMailCoreExtensionFiles: [String] = [ + "core/basetypes/MCMainThreadMac.mm", + "core/basetypes/MCAutoreleasePoolMac.mm", + "core/basetypes/MCObjectMac.mm", + "core/zip/MCZipMac.mm", + "objc/utils/MCOObjectWrapper.mm", + "core/zip/MiniZip/zip.c", + "core/zip/MiniZip/ioapi.c" +] + +let mailcoreResources: [Resource] = [ + .copy("resources/providers.json") +] + +#endif + +let products: [Product] = [ + .library(name: "MailCore", type: .dynamic, targets: ["MailCore"]), +] + +let dependencies: [Package.Dependency] = [ + .package(name: "libetpan", url: "https://github.com/readdle/libetpan.git", .exact("1.9.3-readdle.9")), + .package(name: "tidy-html5", url: "https://github.com/readdle/tidy-html5.git", .exact("5.4.0-readdle.29")), + .package(name: "ctemplate", url: "https://github.com/readdle/ctemplate.git", .exact("2.2.3-readdle.4")), + .package(name: "unicode", url: "https://github.com/readdle/swift-unicode", .exact("68.2.0")) +] + +var targets: [Target] = [ + .target( + name: "CMailCore", + dependencies: [ + .product(name: "etpan", package: "libetpan"), + .product(name: "RDHtml5Tidy", package: "tidy-html5"), + .product(name: "ctemplate", package: "ctemplate"), + .product(name: "unicode", package: "unicode", condition: .when(platforms: [.iOS, .macOS])), + ], + path: "src", + exclude: [ + "core/basetypes/MCWin32.cpp", + "core/basetypes/MCStringWin32.cpp", + "core/basetypes/MCMainThreadGTK.cpp", + "core/basetypes/MCMainThreadAndroid.cpp", + "core/basetypes/MCMainThreadWin32.cpp" + ] + CMailCoreExcludes, + sources: [ + "async", + "c", + "core" + ] + CMailCoreExtensionFiles, + cSettings: [ + .headerSearchPath("async/imap"), + .headerSearchPath("async/pop"), + .headerSearchPath("async/smtp"), + .headerSearchPath("core/basetypes"), + .headerSearchPath("core/zip/MiniZip"), + .headerSearchPath("core/abstract"), + .headerSearchPath("core/basetypes"), + .headerSearchPath("core/imap"), + .headerSearchPath("core/nntp"), + .headerSearchPath("core/pop"), + .headerSearchPath("core/renderer"), + .headerSearchPath("core/rfc822"), + .headerSearchPath("core/security"), + .headerSearchPath("core/smtp"), + .headerSearchPath("core/zip"), + .headerSearchPath("c"), + .headerSearchPath("c/abstract"), + .headerSearchPath("c/basetypes"), + .headerSearchPath("c/imap"), + .headerSearchPath("c/provider"), + .headerSearchPath("c/rfc822"), + .headerSearchPath("c/smtp"), + .headerSearchPath("c/utils"), + .headerSearchPath("objc/utils"), + .define("ANDROID", .when(platforms: [.android])), + .define("UCHAR_TYPE", to: "uint16_t", .when(platforms: [.macOS, .iOS])), + .unsafeFlags(["-fsigned-char"], .when(platforms: [.android])), + .unsafeFlags(["-fno-objc-arc"], .when(platforms: [.macOS, .iOS])) + ], + linkerSettings: [ + .linkedLibrary("z"), + .linkedLibrary("xml2"), + .linkedLibrary("resolv", .when(platforms: [.iOS, .macOS])), + .linkedLibrary("log", .when(platforms: [.android])), + .linkedLibrary("_FoundationICU", .when(platforms: [.android])) + ] + ), + .target( + name: "MailCore", + dependencies: [ + .product(name: "etpan", package: "libetpan"), + "CMailCore" + ], + path: "src/swift", + exclude: mailcoreExcludes, + resources: mailcoreResources, + linkerSettings: [ + .unsafeFlags(["-Xlinker", "-soname", "-Xlinker", "libMailCore.so"], .when(platforms: [.android])) + ] + ), + .testTarget( + name: "MailCoreTests", + dependencies: ["MailCore"], + path: "unittest", + exclude: [ + "Info.plist", + "CMakeLists.txt", + "unittest.cpp", + "unittest.mm" + ], + sources: ["IMAPInterruptCurrentCommandTests.swift", "LibetpanHelperTests.swift", "unittest.swift"], + resources: [ + .copy("data") + ] + ) +] + +let package = Package( + name: "MailCore", + defaultLocalization: "en", + products: products, + dependencies: dependencies, + targets: targets, + swiftLanguageVersions: [.v5], + cxxLanguageStandard: .cxx11 +) diff --git a/README.md b/README.md index 048742d6b..042e1ed20 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,153 @@ Read [instructions for Windows](https://github.com/MailCore/mailcore2/blob/maste Read [instructions for Linux](https://github.com/MailCore/mailcore2/blob/master/build-linux/README.md). +## Updating mailcore2 on Windows (Spark prebuilt flow) ## + +Windows builds of spark-core do **not** compile mailcore2 C++ from source. +`Build-SparkCore.ps1` clones this repo at a pinned tag and runs +`build-windows-5.10\Build-SwiftMailcore.ps1`, which compiles only the Swift +bindings (`src/swift`) and downloads the prebuilt C++ libraries +(`Get-Mailcore2.ps1`). **Any C++ change reaches Windows only through a new +prebuilt archive** — merging a PR or moving a tag is not enough. + +The archive is a **release asset of this repository**, named after a digest of +the sources it was built from: + +```text +mailcore2-windows-.zip +``` + +It used to be `mailcore2-all-.zip` in the `spark-prebuilt-binaries` S3 +bucket, behind `SPARK_PREBUILT_KEY`, with the version bumped by hand inside the +shipped tag. Nothing about the build changed — only where the archive lives and +how it is named. Two things follow: + +- **Nothing to bump.** The digest covers `src` (without `src/swift`), + `CMakeLists.txt` and `build-windows-5.10`, so a checkout already knows which + archive it needs. A change that touches none of those reuses the published one. +- **A missing archive cannot pass silently.** The `mailcore2 - Windows prebuilt` + pull-request check says so before the spark-core build ever runs. + +### Prerequisites ### + +Everything below is preinstalled in the CI image +`ghcr.io/readdle/spark-js-addon-windows-builder` — building inside it is the +easiest path. On a bare machine you need: + +- VS2022 Build Tools with an MSVC toolset whose STL accepts the Swift + toolchain's clang. Swift 5.10.1 ships clang 16, so the toolset must be + **14.39 (17.9) or older** — the 14.40+ STL requires clang 17 and fails with + `STL1000`. Install the side-by-side component + `Microsoft.VisualStudio.Component.VC.14.39.17.9.x86.x64` and make it the + default via `VC\Auxiliary\Build\Microsoft.VCToolsVersion.default.txt` if a + newer toolset is also installed. +- Windows SDK **10.0.18362** (version 1903, from the Windows SDK archive) — + the RD build modules pin it when configuring the VS environment. +- RD PowerShell modules (`RDBuildCMake`, `RDBuildMSVC`, `RDDependency`) in + `PSModulePath`. +- Swift **5.10.1** toolchain (provides `clang-cl` and the Windows SDK with + dispatch/BlocksRuntime). +- ICU 69.1 at `C:\Library\icu-69.1\usr`, libxml2 2.11.5 at + `C:\Library\libxml2-2.11.5\usr` (paths are hardcoded in the script). +- ssh access to `git@github.com:readdle/{ctemplate,libetpan,tidy-html5}`. + +`SPARK_PREBUILT_KEY` is no longer needed: zlib/sasl/openssl come from a public +release asset. Publishing additionally needs the GitHub CLI, authenticated as a +user with write access — that one cannot be baked into the image: + +```powershell +gh auth login +``` + +### Build ### + +```powershell +powershell -ExecutionPolicy Bypass -File .\build-windows-5.10\Build-Mailcore2.ps1 -Install +``` + +The script clones and builds ctemplate/libetpan/tidy, downloads the binary +deps (openssl/sasl/zlib, now from the release instead of S3), then builds +mailcore2/CMailCore with CMake + Ninja using `clang-cl` from the Swift +toolchain. `-Install` lays the result out in `.build\install` +(`bin`, `include`, `lib`, `etc`). + +- After a **failed** run, delete `.build` before retrying — stale CMake + caches keep the old configuration (wrong install prefix, wrong build type) + and produce confusing errors. `Publish-Mailcore2Prebuilt.ps1` does this for + you; a direct run does not. +- Verify what was built: `type .build\install\etc\mailcore2-git-rev` must be + the commit you intend to ship. + +### Publish ### + +Packaging and uploading are one command, run in a checkout **at the revision +that needs the prebuilt**: + +```powershell +.\build-windows-5.10\Publish-Mailcore2Prebuilt.ps1 +``` + +It computes the digest, exits early if that archive is already published, +fetches the dependency archive, clears the previous build output, builds through +`Build-Mailcore2.ps1`, stamps `etc/mailcore2-source-digest`, packages +`mailcore2-all/`, verifies the package, and adds it to the +[`windows-prebuilt`](https://github.com/readdle/mailcore2/releases/tag/windows-prebuilt) +release. `-Force` rebuilds and replaces an archive that is already published; +`-SkipUpload` stops after verifying. + +Nothing needs to be committed afterwards — the archive is named after the +sources, so the revision that needs it finds it. + +The `windows-prebuilt` release is a permanent container for binaries, not a code +release. It was created by hand, once, along with +`mailcore2-windows-deps-1.zip`: openssl, sasl and zlib, the three binaries that +used to come from S3, unchanged. No script creates the release or attaches that +archive. + +Never delete a published `mailcore2-windows-.zip` — revisions built +against it keep downloading it by name. + +### Pull request check ### + +`.github/workflows/pull-request-check.yml` runs +[`build-windows-5.10/Check-PrebuiltPublished.ps1`](build-windows-5.10/Check-PrebuiltPublished.ps1) +on every pull request. It builds nothing and needs no Windows: the digest is a +hash of git tree entries, identical on every platform, so a Linux runner +computes it in seconds and asks the release whether that archive is there. + +It checks the merge result, because that is what lands on the base branch and +gets tagged. When the base has moved since you published, your branch head has +an archive and the merge result does not — the check says so and tells you to +rebase. + +Re-run it after publishing; nothing needs to be pushed for it to turn green. It +is advisory until `mailcore2 - Windows prebuilt` is added to the branch +protection rules for `spark2`. + +### Switch builds to the new prebuilt ### + +1. Publish the prebuilt for the revision you are shipping (above). There is no + version to bump and nothing to commit for it. +2. Tag the merge with the next `2.1.x` tag. +3. In `spark-core-mono`, update every mailcore pin to the new tag — the + versions must match across platforms: + - `spark-core/build-scripts/Windows-5.10/Build-SparkCore.ps1` + (`GitBranch` of the MailCore dependency) — Windows; + - `spark-core/Package.swift` and `spark-core/SparkCoreNano/Package.swift` + (`.package(... branch:)`) — Mac/Android SPM; + - `spark-js-addon/scripts/mac/configure.rb` (`RemoteSwiftPackage`) — the + source the addon workspace is generated from; + - `spark-js-addon/SparkCoreAddon.xcworkspace/xcshareddata/swiftpm/Package.resolved` + — autogenerated from `configure.rb` but tracked in git; update the + `branch`/`revision` pair so CI resolves without a regeneration step. + +### Local testing without a prebuilt ### + +To test unreleased C++ changes, add `-BuildMailcore2` to the +`Build-SwiftMailcore.ps1` invocation in `Build-SparkCore.ps1` — mailcore2 is +then compiled from the pinned checkout instead of downloading the archive. +Slower (~10–15 min extra), for test builds only; remove it before release. + ## Basic IMAP Usage ## Using MailCore 2 is just a little more complex conceptually than the original MailCore. All fetch requests in MailCore 2 are made asynchronously through a queue. What does this mean? Well, let's take a look at a simple example: diff --git a/RSMMailCore.podspec b/RSMMailCore.podspec new file mode 100644 index 000000000..a4b257437 --- /dev/null +++ b/RSMMailCore.podspec @@ -0,0 +1,127 @@ +Pod::Spec.new do |s| + s.name = "RSMMailCore" + s.version = "2.1.36" + s.summary = "Mailcore 2" + s.description = "MailCore 2 provide a simple and asynchronous API to work with e-mail protocols IMAP, POP and SMTP. The API has been redesigned from ground up." + + s.homepage = 'https://github.com/readdle/mailcore2.git' + s.license = { :type => 'Copyright 2017 Readdle Inc.', :text => 'Copyright 2017 Readdle Inc.' } + + s.author = { "Viktor Gedzenko" => "fox@readdle.com" } + s.source = { :git => "https://github.com/readdle/mailcore2.git", :tag => "2.1.36"} + s.platforms = { :ios => "9.0", :osx => "10.11" } + + s.framework = "Foundation", "Security" + + s.ios.xcconfig = { "HEADER_SEARCH_PATHS" => "\"$(PODS_TARGET_SRCROOT)/Externals/ctemplate-ios/include/\" \"$(PODS_TARGET_SRCROOT)/Externals/libetpan-ios/include/\" \"$(PODS_TARGET_SRCROOT)/Externals/libsasl-ios/include/\"", + "SWIFT_INCLUDE_PATHS" => "\"$(PODS_TARGET_SRCROOT)/build-mac/CMailCore\" \"$(PODS_TARGET_SRCROOT)/Externals/libetpan-ios/include/\"", + "OTHER_CPLUSPLUSFLAGS" => "-DSWIFT -DUCHAR_TYPE=uint16_t" + } + + + s.osx.xcconfig = { "HEADER_SEARCH_PATHS" => "\"$(PODS_TARGET_SRCROOT)/Externals/ctemplate-osx/include/\" \"$(PODS_TARGET_SRCROOT)/Externals/libetpan-osx/include/\"", + "SWIFT_INCLUDE_PATHS" => "\"$(PODS_TARGET_SRCROOT)/build-mac/CMailCore\" \"$(PODS_TARGET_SRCROOT)/Externals/libetpan-osx/include/\"", + "OTHER_CPLUSPLUSFLAGS" => "-DSWIFT -DUCHAR_TYPE=uint16_t" + } + + + s.prepare_command = <<-CMD + scripts/get-ios.sh + scripts/get-mac.sh + sed -i '' 's###g' ./src/core/basetypes/MCHTMLCleaner.cpp + sed -i '' 's###g' ./src/core/basetypes/MCHTMLCleaner.cpp + mv src/core/zip/MiniZip/zip.h src/core/zip/MiniZip/rsmmczip.h + sed -i '' 's#"zip.h"#"rsmmczip.h"#g' src/core/zip/MCZip.cpp + sed -i '' 's#"zip.h"#"rsmmczip.h"#g' src/core/zip/MiniZip/zip.c + CMD + + s.dependency 'RDTidyHtml5' + s.dependency 'RDICU4c' + + s.default_subspec = 'core' + s.requires_arc = false + + s.header_dir = 'MailCore' + s.libraries = "xml2", "iconv", "z", "resolv", "c++", "objc" + + s.module_map = "build-mac/MailCore.modulemap" + + s.subspec 'core' do |ss| + ss.source_files = "src/c/**/*.{h,cpp}", + "src/core/**/*.{h,cpp,c,mm}", + "src/async/**/*.{h,cpp}", + "src/objc/utils/MCOObjectWrapper.{mm,h}", + "src/objc/utils/NSObject+MCO.h", + "src/swift/**/*.swift", + "src/MailCore.h", + "src/AbstractMessageRendererCallbackWrapper.h" + + ss.exclude_files = "src/core/zip/MiniZip/iowin32.{h,c}", + "src/core/zip/MiniZip/mini*", + "src/core/zip/MiniZip/mz*", + "src/core/basetypes/**/*Win32*.cpp", + "src/core/basetypes/**/*Android*", + "src/core/basetypes/**/*GTK*", + "src/core/basetypes/MCDataMac.mm", + "src/core/rfc822/MCMessageParserMac.mm", + "src/swift/utils/AndroidShim.swift", + "src/core/basetypes/icu-ucsdet/**/*" + + ss.public_header_files = + "src/MailCore.h", + "src/core/**/**/MC*.h", + "src/async/**/**/MC*.h", + "src/c/**/**/C*.h", + "src/c/basetypes/MailCoreString.h" + + ss.private_header_files = + "src/core/basetypes/MCJSONParser.h", + "src/core/basetypes/MCConnectionLoggerUtils.h", + "src/core/basetypes/MCLibetpan.h", + "src/core/basetypes/MCValuePrivate.h", + "src/core/security/MCCertificateUtils.h", + "src/core/zip/MCZipPrivate.h", + "src/c/CBase+Private.h" + + ss.preserve_paths = + "build-mac/CMailCore/**/*.{h,modulemap}", + "build-mac/MailCore.modulemap" + + ss.resources = "resources/providers.json" + ss.dependency "RSMMailCore/etpan" + ss.dependency "RSMMailCore/ctemplate" + ss.dependency "RSMMailCore/sasl2" + end + + s.subspec 'etpan' do |ss| + ss.ios.vendored_frameworks = "Externals/libetpan-ios/lib/libetpan-ios.xcframework" + ss.ios.private_header_files = "Externals/libetpan-ios/include/libetpan/*.h" + ss.ios.source_files = "Externals/libetpan-ios/include/libetpan/*.h" + ss.ios.preserve_paths = "Externals/libetpan-ios/include/libetpan/*.h", "Externals/libetpan-ios/lib/**/*" + + ss.osx.vendored_libraries = "Externals/libetpan-osx/lib/libetpan.a" + ss.osx.private_header_files = "Externals/libetpan-osx/include/libetpan/*.h" + ss.osx.source_files = "Externals/libetpan-osx/include/libetpan/*.h" + ss.osx.preserve_paths = "Externals/libetpan-osx/include/libetpan/*.h" + end + + s.subspec 'sasl2' do |ss| + ss.osx.libraries = "sasl2" + ss.ios.vendored_frameworks = "Externals/libsasl-ios/lib/sasl.xcframework" + ss.ios.private_header_files = "Externals/libsasl-ios/include/sasl/*.h" + ss.ios.source_files = "Externals/libsasl-ios/include/sasl/*.h" + ss.ios.preserve_paths = "Externals/libsasl-ios/include/sasl/*.h", "Externals/libsasl-ios/lib/**/*" + end + + s.subspec 'ctemplate' do |ss| + ss.ios.vendored_frameworks = "Externals/ctemplate-ios/lib/libctemplate-ios.xcframework" + ss.ios.private_header_files = "Externals/ctemplate-ios/include/ctemplate/*.h" + ss.ios.source_files = "Externals/ctemplate-ios/include/ctemplate/*.h" + ss.ios.preserve_paths = "Externals/ctemplate-ios/include/ctemplate/*.h", "Externals/ctemplate-ios/lib/**/*" + + ss.osx.vendored_libraries = "Externals/ctemplate-osx/lib/libctemplate.a" + ss.osx.private_header_files = "Externals/ctemplate-osx/include/ctemplate/*.h" + ss.osx.source_files = "Externals/ctemplate-osx/include/ctemplate/*.h" + ss.osx.preserve_paths = "Externals/ctemplate-osx/include/ctemplate/*.h" + end +end diff --git a/build-android-swift/.gitignore b/build-android-swift/.gitignore new file mode 100644 index 000000000..4ab1f8bcf --- /dev/null +++ b/build-android-swift/.gitignore @@ -0,0 +1,6 @@ +third-party +mailcore2-android-*.zip +cmake-build + +libs +obj diff --git a/build-android-swift/CMailCore/CMailCore.c b/build-android-swift/CMailCore/CMailCore.c new file mode 100644 index 000000000..8f85e84d7 --- /dev/null +++ b/build-android-swift/CMailCore/CMailCore.c @@ -0,0 +1,4 @@ +// Stub method to avoid no debug symbol warning from compiler. +int CMailCore_anchor() { + return 0; +} diff --git a/build-android-swift/CMailCore/include/CAbstractMessage.h b/build-android-swift/CMailCore/include/CAbstractMessage.h new file mode 120000 index 000000000..6a025a861 --- /dev/null +++ b/build-android-swift/CMailCore/include/CAbstractMessage.h @@ -0,0 +1 @@ +../../../src/c//abstract/CAbstractMessage.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CAbstractMessagePart.h b/build-android-swift/CMailCore/include/CAbstractMessagePart.h new file mode 120000 index 000000000..9a791338f --- /dev/null +++ b/build-android-swift/CMailCore/include/CAbstractMessagePart.h @@ -0,0 +1 @@ +../../../src/c//abstract/CAbstractMessagePart.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CAbstractMessageRendererCallback.h b/build-android-swift/CMailCore/include/CAbstractMessageRendererCallback.h new file mode 120000 index 000000000..52dbee265 --- /dev/null +++ b/build-android-swift/CMailCore/include/CAbstractMessageRendererCallback.h @@ -0,0 +1 @@ +../../../src/c//abstract/CAbstractMessageRendererCallback.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CAbstractMessageRendererCallbackWrapper.h b/build-android-swift/CMailCore/include/CAbstractMessageRendererCallbackWrapper.h new file mode 120000 index 000000000..e8ff6a719 --- /dev/null +++ b/build-android-swift/CMailCore/include/CAbstractMessageRendererCallbackWrapper.h @@ -0,0 +1 @@ +../../../src/c//abstract/CAbstractMessageRendererCallbackWrapper.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CAbstractMultipart.h b/build-android-swift/CMailCore/include/CAbstractMultipart.h new file mode 120000 index 000000000..a0999e52a --- /dev/null +++ b/build-android-swift/CMailCore/include/CAbstractMultipart.h @@ -0,0 +1 @@ +../../../src/c//abstract/CAbstractMultipart.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CAbstractPart.h b/build-android-swift/CMailCore/include/CAbstractPart.h new file mode 120000 index 000000000..5e32f2afb --- /dev/null +++ b/build-android-swift/CMailCore/include/CAbstractPart.h @@ -0,0 +1 @@ +../../../src/c//abstract/CAbstractPart.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CAddress.h b/build-android-swift/CMailCore/include/CAddress.h new file mode 120000 index 000000000..02fc6081b --- /dev/null +++ b/build-android-swift/CMailCore/include/CAddress.h @@ -0,0 +1 @@ +../../../src/c//abstract/CAddress.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CArray.h b/build-android-swift/CMailCore/include/CArray.h new file mode 120000 index 000000000..f32a11bb5 --- /dev/null +++ b/build-android-swift/CMailCore/include/CArray.h @@ -0,0 +1 @@ +../../../src/c//basetypes/CArray.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CAttachment.h b/build-android-swift/CMailCore/include/CAttachment.h new file mode 120000 index 000000000..cf64f7eea --- /dev/null +++ b/build-android-swift/CMailCore/include/CAttachment.h @@ -0,0 +1 @@ +../../../src/c//rfc822/CAttachment.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CAutoreleasePool.h b/build-android-swift/CMailCore/include/CAutoreleasePool.h new file mode 120000 index 000000000..b6f40548e --- /dev/null +++ b/build-android-swift/CMailCore/include/CAutoreleasePool.h @@ -0,0 +1 @@ +../../../src/c/utils/CAutoreleasePool.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CBase+Private.h b/build-android-swift/CMailCore/include/CBase+Private.h new file mode 120000 index 000000000..49637a344 --- /dev/null +++ b/build-android-swift/CMailCore/include/CBase+Private.h @@ -0,0 +1 @@ +../../../src/c//CBase+Private.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CBase.h b/build-android-swift/CMailCore/include/CBase.h new file mode 120000 index 000000000..c845edb52 --- /dev/null +++ b/build-android-swift/CMailCore/include/CBase.h @@ -0,0 +1 @@ +../../../src/c//CBase.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CCore.h b/build-android-swift/CMailCore/include/CCore.h new file mode 120000 index 000000000..445981f30 --- /dev/null +++ b/build-android-swift/CMailCore/include/CCore.h @@ -0,0 +1 @@ +../../../src/c//CCore.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CData.h b/build-android-swift/CMailCore/include/CData.h new file mode 120000 index 000000000..bb762f2cf --- /dev/null +++ b/build-android-swift/CMailCore/include/CData.h @@ -0,0 +1 @@ +../../../src/c//basetypes/CData.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CDictionary.h b/build-android-swift/CMailCore/include/CDictionary.h new file mode 120000 index 000000000..eac5b75d8 --- /dev/null +++ b/build-android-swift/CMailCore/include/CDictionary.h @@ -0,0 +1 @@ +../../../src/c//basetypes/CDictionary.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CIMAPAppendMessageOperation.h b/build-android-swift/CMailCore/include/CIMAPAppendMessageOperation.h new file mode 120000 index 000000000..d870f256e --- /dev/null +++ b/build-android-swift/CMailCore/include/CIMAPAppendMessageOperation.h @@ -0,0 +1 @@ +../../../src/c//imap/CIMAPAppendMessageOperation.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CIMAPAsyncSession.h b/build-android-swift/CMailCore/include/CIMAPAsyncSession.h new file mode 120000 index 000000000..784c7dc6d --- /dev/null +++ b/build-android-swift/CMailCore/include/CIMAPAsyncSession.h @@ -0,0 +1 @@ +../../../src/c//imap/CIMAPAsyncSession.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CIMAPBaseOperation.h b/build-android-swift/CMailCore/include/CIMAPBaseOperation.h new file mode 120000 index 000000000..977d0933f --- /dev/null +++ b/build-android-swift/CMailCore/include/CIMAPBaseOperation.h @@ -0,0 +1 @@ +../../../src/c//imap/CIMAPBaseOperation.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CIMAPCapabilityOperation.h b/build-android-swift/CMailCore/include/CIMAPCapabilityOperation.h new file mode 120000 index 000000000..e4e09c855 --- /dev/null +++ b/build-android-swift/CMailCore/include/CIMAPCapabilityOperation.h @@ -0,0 +1 @@ +../../../src/c//imap/CIMAPCapabilityOperation.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CIMAPCheckAccountOperation.h b/build-android-swift/CMailCore/include/CIMAPCheckAccountOperation.h new file mode 120000 index 000000000..4ca3df2fa --- /dev/null +++ b/build-android-swift/CMailCore/include/CIMAPCheckAccountOperation.h @@ -0,0 +1 @@ +../../../src/c//imap/CIMAPCheckAccountOperation.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CIMAPCopyMessagesOperation.h b/build-android-swift/CMailCore/include/CIMAPCopyMessagesOperation.h new file mode 120000 index 000000000..43e05f437 --- /dev/null +++ b/build-android-swift/CMailCore/include/CIMAPCopyMessagesOperation.h @@ -0,0 +1 @@ +../../../src/c//imap/CIMAPCopyMessagesOperation.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CIMAPCustomCommandOperation.h b/build-android-swift/CMailCore/include/CIMAPCustomCommandOperation.h new file mode 120000 index 000000000..0bf88ad07 --- /dev/null +++ b/build-android-swift/CMailCore/include/CIMAPCustomCommandOperation.h @@ -0,0 +1 @@ +../../../src/c//imap/CIMAPCustomCommandOperation.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CIMAPFetchContentOperation.h b/build-android-swift/CMailCore/include/CIMAPFetchContentOperation.h new file mode 120000 index 000000000..c68a8f96d --- /dev/null +++ b/build-android-swift/CMailCore/include/CIMAPFetchContentOperation.h @@ -0,0 +1 @@ +../../../src/c//imap/CIMAPFetchContentOperation.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CIMAPFetchContentToFileOperation.h b/build-android-swift/CMailCore/include/CIMAPFetchContentToFileOperation.h new file mode 120000 index 000000000..de3ef2ebd --- /dev/null +++ b/build-android-swift/CMailCore/include/CIMAPFetchContentToFileOperation.h @@ -0,0 +1 @@ +../../../src/c//imap/CIMAPFetchContentToFileOperation.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CIMAPFetchFoldersOperation.h b/build-android-swift/CMailCore/include/CIMAPFetchFoldersOperation.h new file mode 120000 index 000000000..ddf8fabf9 --- /dev/null +++ b/build-android-swift/CMailCore/include/CIMAPFetchFoldersOperation.h @@ -0,0 +1 @@ +../../../src/c//imap/CIMAPFetchFoldersOperation.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CIMAPFetchMessagesOperation.h b/build-android-swift/CMailCore/include/CIMAPFetchMessagesOperation.h new file mode 120000 index 000000000..a38b63914 --- /dev/null +++ b/build-android-swift/CMailCore/include/CIMAPFetchMessagesOperation.h @@ -0,0 +1 @@ +../../../src/c//imap/CIMAPFetchMessagesOperation.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CIMAPFetchNamespaceOperation.h b/build-android-swift/CMailCore/include/CIMAPFetchNamespaceOperation.h new file mode 120000 index 000000000..9aa468550 --- /dev/null +++ b/build-android-swift/CMailCore/include/CIMAPFetchNamespaceOperation.h @@ -0,0 +1 @@ +../../../src/c//imap/CIMAPFetchNamespaceOperation.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CIMAPFetchParsedContentOperation.h b/build-android-swift/CMailCore/include/CIMAPFetchParsedContentOperation.h new file mode 120000 index 000000000..aa286d14c --- /dev/null +++ b/build-android-swift/CMailCore/include/CIMAPFetchParsedContentOperation.h @@ -0,0 +1 @@ +../../../src/c//imap/CIMAPFetchParsedContentOperation.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CIMAPFolder.h b/build-android-swift/CMailCore/include/CIMAPFolder.h new file mode 120000 index 000000000..3f2d7b3e1 --- /dev/null +++ b/build-android-swift/CMailCore/include/CIMAPFolder.h @@ -0,0 +1 @@ +../../../src/c//imap/CIMAPFolder.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CIMAPFolderInfo.h b/build-android-swift/CMailCore/include/CIMAPFolderInfo.h new file mode 120000 index 000000000..d0f1ffef0 --- /dev/null +++ b/build-android-swift/CMailCore/include/CIMAPFolderInfo.h @@ -0,0 +1 @@ +../../../src/c//imap/CIMAPFolderInfo.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CIMAPFolderInfoOperation.h b/build-android-swift/CMailCore/include/CIMAPFolderInfoOperation.h new file mode 120000 index 000000000..0166827d6 --- /dev/null +++ b/build-android-swift/CMailCore/include/CIMAPFolderInfoOperation.h @@ -0,0 +1 @@ +../../../src/c//imap/CIMAPFolderInfoOperation.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CIMAPFolderStatus.h b/build-android-swift/CMailCore/include/CIMAPFolderStatus.h new file mode 120000 index 000000000..e50f8a3c3 --- /dev/null +++ b/build-android-swift/CMailCore/include/CIMAPFolderStatus.h @@ -0,0 +1 @@ +../../../src/c//imap/CIMAPFolderStatus.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CIMAPFolderStatusOperation.h b/build-android-swift/CMailCore/include/CIMAPFolderStatusOperation.h new file mode 120000 index 000000000..f3569182a --- /dev/null +++ b/build-android-swift/CMailCore/include/CIMAPFolderStatusOperation.h @@ -0,0 +1 @@ +../../../src/c//imap/CIMAPFolderStatusOperation.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CIMAPIdentity.h b/build-android-swift/CMailCore/include/CIMAPIdentity.h new file mode 120000 index 000000000..89d726105 --- /dev/null +++ b/build-android-swift/CMailCore/include/CIMAPIdentity.h @@ -0,0 +1 @@ +../../../src/c//imap/CIMAPIdentity.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CIMAPIdentityOperation.h b/build-android-swift/CMailCore/include/CIMAPIdentityOperation.h new file mode 120000 index 000000000..0ebc8e503 --- /dev/null +++ b/build-android-swift/CMailCore/include/CIMAPIdentityOperation.h @@ -0,0 +1 @@ +../../../src/c//imap/CIMAPIdentityOperation.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CIMAPIdleOperation.h b/build-android-swift/CMailCore/include/CIMAPIdleOperation.h new file mode 120000 index 000000000..bd3cc4657 --- /dev/null +++ b/build-android-swift/CMailCore/include/CIMAPIdleOperation.h @@ -0,0 +1 @@ +../../../src/c//imap/CIMAPIdleOperation.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CIMAPMessage.h b/build-android-swift/CMailCore/include/CIMAPMessage.h new file mode 120000 index 000000000..cac582469 --- /dev/null +++ b/build-android-swift/CMailCore/include/CIMAPMessage.h @@ -0,0 +1 @@ +../../../src/c//imap/CIMAPMessage.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CIMAPMessagePart.h b/build-android-swift/CMailCore/include/CIMAPMessagePart.h new file mode 120000 index 000000000..78704ed11 --- /dev/null +++ b/build-android-swift/CMailCore/include/CIMAPMessagePart.h @@ -0,0 +1 @@ +../../../src/c//imap/CIMAPMessagePart.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CIMAPMessageRenderingOperation.h b/build-android-swift/CMailCore/include/CIMAPMessageRenderingOperation.h new file mode 120000 index 000000000..bc8ece9f3 --- /dev/null +++ b/build-android-swift/CMailCore/include/CIMAPMessageRenderingOperation.h @@ -0,0 +1 @@ +../../../src/c//imap/CIMAPMessageRenderingOperation.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CIMAPMoveMessagesOperation.h b/build-android-swift/CMailCore/include/CIMAPMoveMessagesOperation.h new file mode 120000 index 000000000..4321e9fdc --- /dev/null +++ b/build-android-swift/CMailCore/include/CIMAPMoveMessagesOperation.h @@ -0,0 +1 @@ +../../../src/c//imap/CIMAPMoveMessagesOperation.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CIMAPMultipart.h b/build-android-swift/CMailCore/include/CIMAPMultipart.h new file mode 120000 index 000000000..bfe041078 --- /dev/null +++ b/build-android-swift/CMailCore/include/CIMAPMultipart.h @@ -0,0 +1 @@ +../../../src/c//imap/CIMAPMultipart.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CIMAPNamespace.h b/build-android-swift/CMailCore/include/CIMAPNamespace.h new file mode 120000 index 000000000..0bd3b2b50 --- /dev/null +++ b/build-android-swift/CMailCore/include/CIMAPNamespace.h @@ -0,0 +1 @@ +../../../src/c//imap/CIMAPNamespace.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CIMAPNamespaceItem.h b/build-android-swift/CMailCore/include/CIMAPNamespaceItem.h new file mode 120000 index 000000000..59b038472 --- /dev/null +++ b/build-android-swift/CMailCore/include/CIMAPNamespaceItem.h @@ -0,0 +1 @@ +../../../src/c//imap/CIMAPNamespaceItem.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CIMAPPart.h b/build-android-swift/CMailCore/include/CIMAPPart.h new file mode 120000 index 000000000..325bf4159 --- /dev/null +++ b/build-android-swift/CMailCore/include/CIMAPPart.h @@ -0,0 +1 @@ +../../../src/c//imap/CIMAPPart.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CIMAPQuotaOperation.h b/build-android-swift/CMailCore/include/CIMAPQuotaOperation.h new file mode 120000 index 000000000..fe08aa2fd --- /dev/null +++ b/build-android-swift/CMailCore/include/CIMAPQuotaOperation.h @@ -0,0 +1 @@ +../../../src/c//imap/CIMAPQuotaOperation.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CIMAPSearchExpression.h b/build-android-swift/CMailCore/include/CIMAPSearchExpression.h new file mode 120000 index 000000000..b0f5091dc --- /dev/null +++ b/build-android-swift/CMailCore/include/CIMAPSearchExpression.h @@ -0,0 +1 @@ +../../../src/c//imap/CIMAPSearchExpression.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CIMAPSearchOperation.h b/build-android-swift/CMailCore/include/CIMAPSearchOperation.h new file mode 120000 index 000000000..ee6a5dba0 --- /dev/null +++ b/build-android-swift/CMailCore/include/CIMAPSearchOperation.h @@ -0,0 +1 @@ +../../../src/c//imap/CIMAPSearchOperation.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CIndexSet.h b/build-android-swift/CMailCore/include/CIndexSet.h new file mode 120000 index 000000000..1a3a0fe2a --- /dev/null +++ b/build-android-swift/CMailCore/include/CIndexSet.h @@ -0,0 +1 @@ +../../../src/c//basetypes/CIndexSet.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CMailCore.h b/build-android-swift/CMailCore/include/CMailCore.h new file mode 100644 index 000000000..d03337a5d --- /dev/null +++ b/build-android-swift/CMailCore/include/CMailCore.h @@ -0,0 +1,78 @@ +// +// CMailCore.h +// CMailCore framework +// +// Copyright (c) 2015 Readdle. All rights reserved. +// + +#include + +#include "CBase.h" + +extern int mailimap_hack_date_time_parse(char * str, + struct mailimap_date_time ** result, + size_t progr_rate, + progress_function * progr_fun); + +extern CMAILCORE_EXPORT time_t MailCoreTimestampFromDate(struct mailimf_date_time * date_time); +extern CMAILCORE_EXPORT time_t MailCoreTimestampFromIMAPDate(struct mailimap_date_time * imap_date); + +#include "CAbstractMessage.h" +#include "CAbstractMessagePart.h" +#include "CAbstractMessageRendererCallback.h" +#include "CAbstractMessageRendererCallbackWrapper.h" +#include "CAbstractMultipart.h" +#include "CAbstractPart.h" +#include "CAddress.h" +#include "CArray.h" +#include "CAttachment.h" +#include "CData.h" +#include "CDictionary.h" +#include "CIMAPAppendMessageOperation.h" +#include "CIMAPAsyncSession.h" +#include "CIMAPBaseOperation.h" +#include "CIMAPCapabilityOperation.h" +#include "CIMAPCheckAccountOperation.h" +#include "CIMAPCopyMessagesOperation.h" +#include "CIMAPCustomCommandOperation.h" +#include "CIMAPFetchContentOperation.h" +#include "CIMAPFetchContentToFileOperation.h" +#include "CIMAPFetchFoldersOperation.h" +#include "CIMAPFetchMessagesOperation.h" +#include "CIMAPFetchNamespaceOperation.h" +#include "CIMAPFetchParsedContentOperation.h" +#include "CIMAPFolder.h" +#include "CIMAPFolderInfo.h" +#include "CIMAPFolderInfoOperation.h" +#include "CIMAPFolderStatus.h" +#include "CIMAPFolderStatusOperation.h" +#include "CIMAPIdentity.h" +#include "CIMAPIdentityOperation.h" +#include "CIMAPIdleOperation.h" +#include "CIMAPMessage.h" +#include "CIMAPMessagePart.h" +#include "CIMAPMessageRenderingOperation.h" +#include "CIMAPMoveMessagesOperation.h" +#include "CIMAPMultipart.h" +#include "CIMAPNamespace.h" +#include "CIMAPNamespaceItem.h" +#include "CIMAPPart.h" +#include "CIMAPQuotaOperation.h" +#include "CIMAPSearchExpression.h" +#include "CIMAPSearchOperation.h" +#include "CIndexSet.h" +#include "CMailProvider.h" +#include "CMailProvidersManager.h" +#include "CMessageBuilder.h" +#include "CMessageConstants.h" +#include "CMessageHeader.h" +#include "CMessageParser.h" +#include "CMessagePart.h" +#include "CMultipart.h" +#include "CNetService.h" +#include "CObject.h" +#include "COperation.h" +#include "CSMTPOperation.h" +#include "CSMTPSession.h" +#include "CAutoreleasePool.h" +#include "MailCoreString.h" diff --git a/build-android-swift/CMailCore/include/CMailProvider.h b/build-android-swift/CMailCore/include/CMailProvider.h new file mode 120000 index 000000000..be3e4dd3c --- /dev/null +++ b/build-android-swift/CMailCore/include/CMailProvider.h @@ -0,0 +1 @@ +../../../src/c//provider/CMailProvider.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CMailProvidersManager.h b/build-android-swift/CMailCore/include/CMailProvidersManager.h new file mode 120000 index 000000000..7e1f528a7 --- /dev/null +++ b/build-android-swift/CMailCore/include/CMailProvidersManager.h @@ -0,0 +1 @@ +../../../src/c//provider/CMailProvidersManager.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CMessageBuilder.h b/build-android-swift/CMailCore/include/CMessageBuilder.h new file mode 120000 index 000000000..c4ec13e91 --- /dev/null +++ b/build-android-swift/CMailCore/include/CMessageBuilder.h @@ -0,0 +1 @@ +../../../src/c//rfc822/CMessageBuilder.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CMessageConstants.h b/build-android-swift/CMailCore/include/CMessageConstants.h new file mode 120000 index 000000000..701c740f1 --- /dev/null +++ b/build-android-swift/CMailCore/include/CMessageConstants.h @@ -0,0 +1 @@ +../../../src/c//abstract/CMessageConstants.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CMessageHeader.h b/build-android-swift/CMailCore/include/CMessageHeader.h new file mode 120000 index 000000000..aa87bfab5 --- /dev/null +++ b/build-android-swift/CMailCore/include/CMessageHeader.h @@ -0,0 +1 @@ +../../../src/c//abstract/CMessageHeader.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CMessageParser.h b/build-android-swift/CMailCore/include/CMessageParser.h new file mode 120000 index 000000000..1881287a3 --- /dev/null +++ b/build-android-swift/CMailCore/include/CMessageParser.h @@ -0,0 +1 @@ +../../../src/c//rfc822/CMessageParser.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CMessagePart.h b/build-android-swift/CMailCore/include/CMessagePart.h new file mode 120000 index 000000000..ec1fc33a0 --- /dev/null +++ b/build-android-swift/CMailCore/include/CMessagePart.h @@ -0,0 +1 @@ +../../../src/c//rfc822/CMessagePart.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CMultipart.h b/build-android-swift/CMailCore/include/CMultipart.h new file mode 120000 index 000000000..a69665e36 --- /dev/null +++ b/build-android-swift/CMailCore/include/CMultipart.h @@ -0,0 +1 @@ +../../../src/c//rfc822/CMultipart.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CNetService.h b/build-android-swift/CMailCore/include/CNetService.h new file mode 120000 index 000000000..48bd545b7 --- /dev/null +++ b/build-android-swift/CMailCore/include/CNetService.h @@ -0,0 +1 @@ +../../../src/c//provider/CNetService.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CObject.h b/build-android-swift/CMailCore/include/CObject.h new file mode 120000 index 000000000..9b1e9c7d8 --- /dev/null +++ b/build-android-swift/CMailCore/include/CObject.h @@ -0,0 +1 @@ +../../../src/c//basetypes/CObject.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/COperation.h b/build-android-swift/CMailCore/include/COperation.h new file mode 120000 index 000000000..f697da068 --- /dev/null +++ b/build-android-swift/CMailCore/include/COperation.h @@ -0,0 +1 @@ +../../../src/c//utils/COperation.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CSMTPOperation.h b/build-android-swift/CMailCore/include/CSMTPOperation.h new file mode 120000 index 000000000..3175da963 --- /dev/null +++ b/build-android-swift/CMailCore/include/CSMTPOperation.h @@ -0,0 +1 @@ +../../../src/c//smtp/CSMTPOperation.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/CSMTPSession.h b/build-android-swift/CMailCore/include/CSMTPSession.h new file mode 120000 index 000000000..b48794219 --- /dev/null +++ b/build-android-swift/CMailCore/include/CSMTPSession.h @@ -0,0 +1 @@ +../../../src/c//smtp/CSMTPSession.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/MailCoreString.h b/build-android-swift/CMailCore/include/MailCoreString.h new file mode 120000 index 000000000..6c3523e18 --- /dev/null +++ b/build-android-swift/CMailCore/include/MailCoreString.h @@ -0,0 +1 @@ +../../../src/c//basetypes/MailCoreString.h \ No newline at end of file diff --git a/build-android-swift/CMailCore/include/module.modulemap b/build-android-swift/CMailCore/include/module.modulemap new file mode 100644 index 000000000..ca95e2ec0 --- /dev/null +++ b/build-android-swift/CMailCore/include/module.modulemap @@ -0,0 +1,5 @@ +module CMailCore [system] { + header "CMailCore.h" + + link "CMailCore" +} diff --git a/build-android-swift/copy_resources.sh b/build-android-swift/copy_resources.sh new file mode 100755 index 000000000..3922719ec --- /dev/null +++ b/build-android-swift/copy_resources.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +# Copy resources +pushd $(realpath $(dirname $0)) + adb shell rm -rf /data/local/tmp/MailCorePackageTests/resources + adb shell mkdir -p /data/local/tmp/MailCorePackageTests/resources + adb push ../unittest/data-android/ /data/local/tmp/MailCorePackageTests/resources +popd diff --git a/build-android-swift/jni/Android.mk b/build-android-swift/jni/Android.mk new file mode 100644 index 000000000..d18ac8c33 --- /dev/null +++ b/build-android-swift/jni/Android.mk @@ -0,0 +1,200 @@ +CURRENT_DIR := $(realpath $(call my-dir)) +BASE_DIR := $(realpath $(CURRENT_DIR)/../..) + +src_dir := $(realpath $(BASE_DIR)/src) +subdirs = \ + core \ + core/basetypes \ + core/abstract \ + core/imap \ + core/nntp \ + core/pop \ + core/provider \ + core/renderer \ + core/rfc822 \ + core/security \ + core/smtp \ + core/zip \ + core/zip/MiniZip \ + async/imap \ + async/nntp \ + async/pop \ + async/smtp + +ifeq ($(TARGET_ARCH_ABI),armeabi-v7a) + ARCH_FOLDER := armv7 +endif +ifeq ($(TARGET_ARCH_ABI),arm64-v8a) + ARCH_FOLDER := aarch64 +endif +ifeq ($(TARGET_ARCH_ABI),x86) + ARCH_FOLDER := i686 +endif +ifeq ($(TARGET_ARCH_ABI),x86_64) + ARCH_FOLDER := x86_64 +endif + +include $(CLEAR_VARS) +LOCAL_MODULE := iconv +LOCAL_SRC_FILES := $(ICONV_PATH)/libs/$(TARGET_ARCH_ABI)/libiconv.a +include $(PREBUILT_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := etpan +LOCAL_SRC_FILES := $(LIBETPAN_PATH)/libs/$(TARGET_ARCH_ABI)/libetpan.a +include $(PREBUILT_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := crypto +LOCAL_SRC_FILES := $(OPENSSL_PATH)/libs/$(TARGET_ARCH_ABI)/libcrypto.a +include $(PREBUILT_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := ssl +LOCAL_SRC_FILES := $(OPENSSL_PATH)/libs/$(TARGET_ARCH_ABI)/libssl.a +include $(PREBUILT_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := ctemplate +LOCAL_SRC_FILES := $(CTEMPLATE_PATH)/libs/$(TARGET_ARCH_ABI)/libctemplate.a +include $(PREBUILT_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := sasl2 +LOCAL_SRC_FILES := $(CYRUS_SASL_PATH)/libs/$(TARGET_ARCH_ABI)/libsasl2.a +include $(PREBUILT_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := dispatch +LOCAL_EXPORT_C_INCLUDES := $(SWIFT_LIB)-$(ARCH_FOLDER) +LOCAL_SRC_FILES := $(SWIFT_LIB)-$(ARCH_FOLDER)/android/libdispatch.so +include $(PREBUILT_SHARED_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := blocksRuntime +LOCAL_EXPORT_C_INCLUDES := $(SWIFT_LIB)-$(ARCH_FOLDER) +LOCAL_SRC_FILES := $(SWIFT_LIB)-$(ARCH_FOLDER)/android/libBlocksRuntime.so +include $(PREBUILT_SHARED_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := scuuc +LOCAL_SRC_FILES := $(SWIFT_LIB)-$(ARCH_FOLDER)/android/libicuuc.$(SWIFT_ANDROID_ICU_VERSION).so +include $(PREBUILT_SHARED_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := scui18n +LOCAL_SRC_FILES := $(SWIFT_LIB)-$(ARCH_FOLDER)/android/libicui18n.$(SWIFT_ANDROID_ICU_VERSION).so +include $(PREBUILT_SHARED_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := scudata +LOCAL_SRC_FILES := $(SWIFT_LIB)-$(ARCH_FOLDER)/android/libicudata.$(SWIFT_ANDROID_ICU_VERSION).so +include $(PREBUILT_SHARED_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := xml2 +LOCAL_SRC_FILES := $(SWIFT_LIB)-$(ARCH_FOLDER)/android/libxml2.so +include $(PREBUILT_SHARED_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := tidy +LOCAL_SRC_FILES := $(SWIFT_PM_EXTERNAL_LIBS)/$(TARGET_ARCH_ABI)/libtidy.so +include $(PREBUILT_SHARED_LIBRARY) + +include $(CLEAR_VARS) +core_excludes = MCWin32.cpp MCStringWin32.cpp MCMainThreadWin32.cpp MCMainThreadGTK.cpp MCMainThreadAndroid.cpp +core_src_files := $(filter-out \ + $(addprefix $(src_dir)/core/basetypes/, $(core_excludes)), \ + $(wildcard $(src_dir)/core/basetypes/*.cpp) \ + $(wildcard $(src_dir)/core/basetypes/*.c) \ +) + +abstract_src_files := $(wildcard $(src_dir)/core/abstract/*.cpp) +imap_src_files := $(wildcard $(src_dir)/core/imap/*.cpp) +nntp_src_files := $(wildcard $(src_dir)/core/nntp/*.cpp) +pop_src_files := $(wildcard $(src_dir)/core/pop/*.cpp) +provider_src_files := $(wildcard $(src_dir)/core/provider/*.cpp) +renderer_src_files := $(wildcard $(src_dir)/core/renderer/*.cpp) +rfc822_src_files := $(wildcard $(src_dir)/core/rfc822/*.cpp) +security_src_files := $(wildcard $(src_dir)/core/security/*.cpp) +smtp_src_files := $(wildcard $(src_dir)/core/smtp/*.cpp) +zip_src_files := $(wildcard $(src_dir)/core/zip/*.cpp) + +async_imap_src_files := $(wildcard $(src_dir)/async/imap/*.cpp) +async_nntp_src_files := $(wildcard $(src_dir)/async/nntp/*.cpp) +async_pop_src_files := $(wildcard $(src_dir)/async/pop/*.cpp) +async_smtp_src_files := $(wildcard $(src_dir)/async/smtp/*.cpp) + +minizip_src_files := \ + $(src_dir)/core/zip/MiniZip/ioapi.c \ + $(src_dir)/core/zip/MiniZip/unzip.c \ + $(src_dir)/core/zip/MiniZip/zip.c + +LOCAL_MODULE := MailCore +LOCAL_C_INCLUDES += \ + $(SWIFT_PM_EXTERNAL_INCLUDE) \ + $(CTEMPLATE_PATH)/include \ + $(SWIFT_LIB)-$(ARCH_FOLDER) \ + $(LIBETPAN_PATH)/include \ + $(SWIFT_PM_EXTERNAL_INCLUDE) \ + $(OPENSSL_PATH)/include \ + $(addprefix $(src_dir)/, $(subdirs)) + +LOCAL_SRC_FILES := \ + $(core_src_files) \ + $(abstract_src_files) \ + $(imap_src_files) \ + $(nntp_src_files) \ + $(pop_src_files) \ + $(provider_src_files) \ + $(renderer_src_files) \ + $(rfc822_src_files) \ + $(security_src_files) \ + $(smtp_src_files) \ + $(zip_src_files) \ + $(minizip_src_files) \ + $(async_imap_src_files) \ + $(async_nntp_src_files) \ + $(async_pop_src_files) \ + $(async_smtp_src_files) + +LOCAL_CFLAGS := -DNOCRYPT -fblocks +LOCAL_CPPFLAGS := -frtti +LOCAL_STATIC_LIBRARIES := etpan sasl2 ssl crypto iconv ctemplate +LOCAL_SHARED_LIBRARIES := dispatch scuuc scui18n scudata xml2 tidy blocksRuntime +include $(BUILD_STATIC_LIBRARY) + +include $(CLEAR_VARS) +abstract_src_files := $(wildcard $(src_dir)/c/abstract/*.cpp) +basetypes_src_files := $(wildcard $(src_dir)/c/basetypes/*.cpp) +imap_src_files := $(wildcard $(src_dir)/c/imap/*.cpp) +provider_src_files := $(wildcard $(src_dir)/c/provider/*.cpp) +rfc822_src_files := $(wildcard $(src_dir)/c/rfc822/*.cpp) +smtp_src_files := $(wildcard $(src_dir)/c/smtp/*.cpp) +utils_src_files := $(wildcard $(src_dir)/c/utils/*.cpp) + +LOCAL_MODULE := CMailCore +LOCAL_C_INCLUDES += $(src_dir)/c +LOCAL_C_INCLUDES += $(src_dir)/c/basetypes +LOCAL_C_INCLUDES += $(src_dir)/c/imap +LOCAL_C_INCLUDES += $(src_dir)/c/abstract +LOCAL_C_INCLUDES += $(src_dir)/c/utils +LOCAL_C_INCLUDES += $(src_dir)/c/rfc822 +LOCAL_C_INCLUDES += $(SWIFT_PM_EXTERNAL_INCLUDE) +LOCAL_C_INCLUDES += $(LIBETPAN_PATH)/include + +LOCAL_SRC_FILES := \ + $(abstract_src_files) \ + $(basetypes_src_files) \ + $(imap_src_files) \ + $(provider_src_files) \ + $(rfc822_src_files) \ + $(smtp_src_files) \ + $(utils_src_files) + +LOCAL_LDLIBS := -lz -llog +LOCAL_CFLAGS := -fblocks +LOCAL_CPPFLAGS := -frtti +LOCAL_STATIC_LIBRARIES := MailCore +LOCAL_SHARED_LIBRARIES := blocksRuntime +include $(BUILD_SHARED_LIBRARY) diff --git a/build-android-swift/jni/Application.mk b/build-android-swift/jni/Application.mk new file mode 100644 index 000000000..39b139baa --- /dev/null +++ b/build-android-swift/jni/Application.mk @@ -0,0 +1,4 @@ +APP_ABI := armeabi-v7a arm64-v8a x86 x86_64 +NDK_TOOLCHAIN_VERSION := clang +APP_PLATFORM := android-24 +APP_STL := c++_shared diff --git a/build-android-swift/resources.json b/build-android-swift/resources.json new file mode 100644 index 000000000..78c045e73 --- /dev/null +++ b/build-android-swift/resources.json @@ -0,0 +1,3 @@ +[ + "unittest/data/" +] diff --git a/build-android/.gitignore b/build-android/.gitignore index 9f17b19ca..2b8810bb7 100644 --- a/build-android/.gitignore +++ b/build-android/.gitignore @@ -2,3 +2,6 @@ third-party include mailcore2-android-*.zip cmake-build + +libs +obj diff --git a/build-android/build.sh b/build-android/build.sh index 274bb6326..b6e82b729 100755 --- a/build-android/build.sh +++ b/build-android/build.sh @@ -53,8 +53,8 @@ function build { cp "$current_dir/libs/$TARGET_ARCH_ABI/libMailCore.so" "$current_dir/bin/jni/$TARGET_ARCH_ABI" # cp "$ANDROID_NDK/sources/cxx-stl/llvm-libc++/libs/$TARGET_ARCH_ABI/libc++_shared.so" "$current_dir/bin/jni/$TARGET_ARCH_ABI" cp "$ANDROID_NDK/sources/cxx-stl/gnu-libstdc++/4.9/libs/$TARGET_ARCH_ABI/libgnustl_shared.so" "$current_dir/bin/jni/$TARGET_ARCH_ABI" - rm -rf "$current_dir/obj" - rm -rf "$current_dir/libs" + # rm -rf "$current_dir/obj" + # rm -rf "$current_dir/libs" } mkdir -p "$current_dir/cmake-build" diff --git a/build-mac/CMailCore/CMailCore.h b/build-mac/CMailCore/CMailCore.h new file mode 100644 index 000000000..989375417 --- /dev/null +++ b/build-mac/CMailCore/CMailCore.h @@ -0,0 +1,19 @@ +// +// CMailCore.h +// CMailCore framework +// +// Copyright (c) 2015 Readdle. All rights reserved. +// + +// Fake module +// TODO: move CMailCore to indiivdual module + +#include + +extern int mailimap_hack_date_time_parse(char * str, + struct mailimap_date_time ** result, + size_t progr_rate, + progress_function * progr_fun); + +extern time_t MailCoreTimestampFromDate(struct mailimf_date_time * date_time); +extern time_t MailCoreTimestampFromIMAPDate(struct mailimap_date_time * imap_date); diff --git a/build-mac/CMailCore/module.modulemap b/build-mac/CMailCore/module.modulemap new file mode 100644 index 000000000..1dcc78c2a --- /dev/null +++ b/build-mac/CMailCore/module.modulemap @@ -0,0 +1,4 @@ +module CMailCore { + header "CMailCore.h" + export * +} diff --git a/build-mac/MailCore.modulemap b/build-mac/MailCore.modulemap new file mode 100644 index 000000000..b7c4b27cf --- /dev/null +++ b/build-mac/MailCore.modulemap @@ -0,0 +1,6 @@ +framework module MailCore { + umbrella header "MailCore.h" + + export * + module * { export * } +} \ No newline at end of file diff --git a/build-mac/MailCoreTests/Info.plist b/build-mac/MailCoreTests/Info.plist new file mode 100644 index 000000000..6c40a6cd0 --- /dev/null +++ b/build-mac/MailCoreTests/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/build-mac/OSX/MailCore.h b/build-mac/OSX/MailCore.h index d821e354f..8366ec768 100644 --- a/build-mac/OSX/MailCore.h +++ b/build-mac/OSX/MailCore.h @@ -6,225 +6,67 @@ // Copyright © 2017 MailCore. All rights reserved. // -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include diff --git a/build-mac/iOS/MailCore.h b/build-mac/iOS/MailCore.h index 203a6cecd..611b22aa3 100644 --- a/build-mac/iOS/MailCore.h +++ b/build-mac/iOS/MailCore.h @@ -6,215 +6,65 @@ // Copyright © 2017 MailCore. All rights reserved. // -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include diff --git a/build-mac/mailcore2.xcodeproj/project.pbxproj b/build-mac/mailcore2.xcodeproj/project.pbxproj index a7125be5d..3a2d7cac9 100755 --- a/build-mac/mailcore2.xcodeproj/project.pbxproj +++ b/build-mac/mailcore2.xcodeproj/project.pbxproj @@ -8,286 +8,175 @@ /* Begin PBXBuildFile section */ 00922FC3F11869C3F7AB0A8A /* MCMessageBuilder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6E2169E847800778456 /* MCMessageBuilder.cpp */; }; - 00C58A9AA11F95A5499671DA /* MCPOPAsyncSession.h in Headers */ = {isa = PBXBuildFile; fileRef = C62C6EEE16A7B67600737497 /* MCPOPAsyncSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 01196CFEA30A43178EC65FE9 /* MCOIMAPCopyMessagesOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C6F61F7F17016A0D0073032E /* MCOIMAPCopyMessagesOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0285143A54170BFBE20CF583 /* MCOUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB26C16FD62FB000DB34C /* MCOUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 02A14B5B2B8CF3623AA0160E /* MCOIMAPMessage.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F5B9E116FEA1E800D9DABD /* MCOIMAPMessage.mm */; }; - 03CD6B1A40432026A0CF8FF4 /* MCOAddress.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB24016EDAAF3000DB34C /* MCOAddress.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 03E7C868113F88DC90F6B0A7 /* MCOIMAPCustomCommandOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1845356F1BE23FBD000B0D87 /* MCOIMAPCustomCommandOperation.mm */; }; - 044FC1F9E419A2DA57A68F96 /* MCOIMAPFetchNamespaceOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C6F61F8E17016B090073032E /* MCOIMAPFetchNamespaceOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 00C58A9AA11F95A5499671DA /* MCPOPAsyncSession.h in Headers */ = {isa = PBXBuildFile; fileRef = C62C6EEE16A7B67600737497 /* MCPOPAsyncSession.h */; }; 04738A6E274B7A530F34452C /* MCIMAPFetchContentOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA81B16A29DC100778456 /* MCIMAPFetchContentOperation.cpp */; }; - 049613B0B276CC49D60E18C5 /* NSIndexSet+MCO.h in Headers */ = {isa = PBXBuildFile; fileRef = C69BA85917DEFCCB00D601B7 /* NSIndexSet+MCO.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 050614C2A1FA0BBA1E280CA6 /* MCOMultipart.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB26916FD44C2000DB34C /* MCOMultipart.mm */; }; 052AAA74C5D3B28F3167F974 /* MCAssert.c in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6A7169E847800778456 /* MCAssert.c */; }; 05907892CA96447EAB5C53E7 /* MCNetService.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6CF62C3175324F0006398B9 /* MCNetService.cpp */; }; - 05919E99B3B3C69116584CBF /* MCOIMAPFolderInfoOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F7A170169EE0073032E /* MCOIMAPFolderInfoOperation.mm */; }; - 05A17F9F27B495ED0F667572 /* MCAddress.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA69D169E847800778456 /* MCAddress.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 05A17F9F27B495ED0F667572 /* MCAddress.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA69D169E847800778456 /* MCAddress.h */; }; 05AAF9D05587FD8969F5C6AD /* MCPOPAsyncSession.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C62C6EED16A7B67600737497 /* MCPOPAsyncSession.cpp */; }; 05B449A377A3B80C86BD140F /* MCObjectMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = C668E2C51735C8D500A2BB47 /* MCObjectMac.mm */; }; - 0666C5FF629C919979C80006 /* MCOIMAPFetchMessagesOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F8317016A200073032E /* MCOIMAPFetchMessagesOperation.mm */; }; - 0687DC326F72F66453ABBB4D /* MCLibetpanTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = C6AC1131171249DF00B715B7 /* MCLibetpanTypes.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0687DC326F72F66453ABBB4D /* MCLibetpanTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = C6AC1131171249DF00B715B7 /* MCLibetpanTypes.h */; }; 06C96CA5C1753F6DEF464D23 /* MCRange.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6B3169E847800778456 /* MCRange.cpp */; }; - 07121054A1A84C9D546096FC /* MCObject.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6B2169E847800778456 /* MCObject.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0783C68E08E739D7B781E56B /* MCMailProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = C6CF62C0175324F0006398B9 /* MCMailProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 079BC8C0C4622F536D2E5707 /* MCOPOPMessageInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = C6A81BFE1707CEE400882C15 /* MCOPOPMessageInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 07C92C13F3A8373454C45ECA /* NSObject+MCO.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6EB310016B8E6E50091F4F1 /* NSObject+MCO.mm */; }; + 07121054A1A84C9D546096FC /* MCObject.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6B2169E847800778456 /* MCObject.h */; }; + 0783C68E08E739D7B781E56B /* MCMailProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = C6CF62C0175324F0006398B9 /* MCMailProvider.h */; }; 07CD65B1F75E76B5D7A6A1E1 /* MCSMTPSendWithDataOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA79C169F29A700778456 /* MCSMTPSendWithDataOperation.cpp */; }; - 07DE281343371AAAB7375DF2 /* MCAsync.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA7E416A14A4500778456 /* MCAsync.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 07DE281343371AAAB7375DF2 /* MCAsync.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA7E416A14A4500778456 /* MCAsync.h */; }; 07E0E590A13DD46EFF9D22D4 /* ucln_cmn.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7CBB1A70771B0001DCC3 /* ucln_cmn.cpp */; }; - 07F3D618E79C7D184FAEBFBB /* MCOAccountValidator.mm in Sources */ = {isa = PBXBuildFile; fileRef = 27478E831A7646F8004AE621 /* MCOAccountValidator.mm */; }; 08B778137CC1EEB8B7C4ABC1 /* MCAbstractMultipart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA698169E847800778456 /* MCAbstractMultipart.cpp */; }; - 092DDA8C0C188B7F99426174 /* MCOSMTPOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6A81BC617068EB000882C15 /* MCOSMTPOperation.mm */; }; - 093B8ED020FC6AE9F9DFEF78 /* MCOPOP.h in Headers */ = {isa = PBXBuildFile; fileRef = C6A81BFB170781BC00882C15 /* MCOPOP.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 095E03511D3D3D7BB782BB6C /* MCIMAPIdentity.h in Headers */ = {isa = PBXBuildFile; fileRef = C63D315B17C9155C00A4D993 /* MCIMAPIdentity.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0992A9E9A705EF5ECBF47E78 /* MCOIMAPFolderStatusOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9EF9AB18175F36600027FA3B /* MCOIMAPFolderStatusOperation.mm */; }; - 0A4BB933452EA824BA4EDF9C /* MCOOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB25816FD3BC5000DB34C /* MCOOperation.mm */; }; - 0A83EAF2F76D5DBA030C3D35 /* MCONNTPFetchServerTimeOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84CFA99419F725CB00FE35D2 /* MCONNTPFetchServerTimeOperation.mm */; }; + 095E03511D3D3D7BB782BB6C /* MCIMAPIdentity.h in Headers */ = {isa = PBXBuildFile; fileRef = C63D315B17C9155C00A4D993 /* MCIMAPIdentity.h */; }; 0B0829A867DE7C3A26599328 /* umutex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7CED1A7079300001DCC3 /* umutex.cpp */; }; - 0B4D4247DCCA355F647485D3 /* MCMD5.h in Headers */ = {isa = PBXBuildFile; fileRef = C6D6F951171E5CB8006F5B28 /* MCMD5.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0B4D4247DCCA355F647485D3 /* MCMD5.h in Headers */ = {isa = PBXBuildFile; fileRef = C6D6F951171E5CB8006F5B28 /* MCMD5.h */; }; 0B87684F911F754579375354 /* MCNNTPFetchHeaderOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84D73735199BF7F2005124E5 /* MCNNTPFetchHeaderOperation.cpp */; }; - 0BB3B1BDD6665F07D09DF42A /* MCIMAPCheckAccountOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA7F716A15A7800778456 /* MCIMAPCheckAccountOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0BF2B23FB724081E007CB7D8 /* MCAsyncIMAP.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA7F916A15A9200778456 /* MCAsyncIMAP.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0C6EE4C007B5FE22293F1844 /* MCString.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6B8169E847800778456 /* MCString.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0CF163C3A514931EA15A94F1 /* MCIMAPSyncResult.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB22016E34DCB000DB34C /* MCIMAPSyncResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0D8CAB6E664B79AD034036C3 /* MCONNTPFetchArticleOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D7376F199C007E005124E5 /* MCONNTPFetchArticleOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0DEBB177E93B2A28821635FB /* MCAbstractMultipart.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA699169E847800778456 /* MCAbstractMultipart.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0BB3B1BDD6665F07D09DF42A /* MCIMAPCheckAccountOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA7F716A15A7800778456 /* MCIMAPCheckAccountOperation.h */; }; + 0BF2B23FB724081E007CB7D8 /* MCAsyncIMAP.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA7F916A15A9200778456 /* MCAsyncIMAP.h */; }; + 0C6EE4C007B5FE22293F1844 /* MCString.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6B8169E847800778456 /* MCString.h */; }; + 0CF163C3A514931EA15A94F1 /* MCIMAPSyncResult.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB22016E34DCB000DB34C /* MCIMAPSyncResult.h */; }; + 0DEBB177E93B2A28821635FB /* MCAbstractMultipart.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA699169E847800778456 /* MCAbstractMultipart.h */; }; 0E4EAA748969A74A2F8AC40B /* MCZip.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6E665AA1796500B0063F2CF /* MCZip.cpp */; }; - 0E64019FFCF885376D848CB0 /* MCOIMAPMessageRenderingOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA89896C178A47D200F6D90A /* MCOIMAPMessageRenderingOperation.mm */; }; 0EBCD5964A48085343093B7E /* ioapi.c in Sources */ = {isa = PBXBuildFile; fileRef = C6E665AD1796500B0063F2CF /* ioapi.c */; }; - 0EEB9FC38BC4CB05C917DCDF /* MCOAbstractMessagePart.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB23716EDAA3F000DB34C /* MCOAbstractMessagePart.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0F0D905C01C04151E50BE0E9 /* MCOOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB25816FD3BC5000DB34C /* MCOOperation.mm */; }; - 0F263E601A76E4E7C5D97AFB /* MCOIMAPIdentityOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F9217016B250073032E /* MCOIMAPIdentityOperation.mm */; }; - 0F58BD3A93B79D70A72BAB38 /* MCAbstract.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA693169E847800778456 /* MCAbstract.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0FCC7057D298389470514E39 /* NSValue+MCO.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB25016FC2846000DB34C /* NSValue+MCO.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0FDDF57D7053BA455E9BDD64 /* MCDataMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6D4FD4219FB7DAA001F7E01 /* MCDataMac.mm */; }; - 1031EDE66FAC10A66B24633B /* MCORange.h in Headers */ = {isa = PBXBuildFile; fileRef = C6CCC5C816FFE54F0077A5FC /* MCORange.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0F58BD3A93B79D70A72BAB38 /* MCAbstract.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA693169E847800778456 /* MCAbstract.h */; }; 10904693FA93BED3FF76253E /* MCJSON.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6D6F7F7171E595D006F5B28 /* MCJSON.cpp */; }; 10B11B475533B0C7AD21CD90 /* MCIMAPIdleOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA82716A29EF400778456 /* MCIMAPIdleOperation.cpp */; }; - 10B237C1986B5D2E25171A14 /* MCOIMAPMessageRenderingOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = DA89896B178A47D200F6D90A /* MCOIMAPMessageRenderingOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1105BD4F65B1FC74D942C475 /* MCOIMAPFetchContentOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C6F61F8517016AD60073032E /* MCOIMAPFetchContentOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 110673744CECCFD4C1F67272 /* MCOAbstractMultipart.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB23A16EDAAC7000DB34C /* MCOAbstractMultipart.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 11714C5A62FC483074173837 /* MCOUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB26C16FD62FB000DB34C /* MCOUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; 11C045EAE412D0EA3713DE5C /* MCJSONParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6D6F965171FCF9F006F5B28 /* MCJSONParser.cpp */; }; - 121442C3EED1EA437FE04358 /* MCData.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6AA169E847800778456 /* MCData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 138571845D3FB15CED01175B /* MCPOPFetchMessageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C62C6EF416A7C6E900737497 /* MCPOPFetchMessageOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 121442C3EED1EA437FE04358 /* MCData.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6AA169E847800778456 /* MCData.h */; }; + 138571845D3FB15CED01175B /* MCPOPFetchMessageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C62C6EF416A7C6E900737497 /* MCPOPFetchMessageOperation.h */; }; 13C7C4080CC5DF60AC79E003 /* MCPOPAsyncSession.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C62C6EED16A7B67600737497 /* MCPOPAsyncSession.cpp */; }; - 13FE38B1086D2D6C023B8AEF /* MCONNTPPostOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = F38221A11C7AAD8100E00721 /* MCONNTPPostOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 145C8FE3A7EC3593E1A33517 /* MCOOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB25716FD3BC2000DB34C /* MCOOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 14758EE20D3A3D7A8AC39B3A /* MCOIMAPMessagePart.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F5B9E416FEA27500D9DABD /* MCOIMAPMessagePart.mm */; }; - 14A20BA5965894DC10C3DC9B /* MCOIMAPFetchContentToFileOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 810DB78F1C68F50600017B12 /* MCOIMAPFetchContentToFileOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; 14B99C0280A9FE59EAA0942A /* MCIMAPFetchFoldersOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA7FA16A2959700778456 /* MCIMAPFetchFoldersOperation.cpp */; }; - 14FC9C3913E43C2B294ABDE3 /* MCOSMTPSession.h in Headers */ = {isa = PBXBuildFile; fileRef = C6A81BBD17068E5E00882C15 /* MCOSMTPSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; 152BD5E7A7548C7AE07AF6DD /* MCPOPSession.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6DD169E847800778456 /* MCPOPSession.cpp */; }; 153444EFB4CCB86F2CABAA6C /* MCSMTPLoginOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B0095C71A00DDC500F84BC0 /* MCSMTPLoginOperation.cpp */; }; - 15B9D86694481EAF7D3629B6 /* MCSMTPOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA7D916A1386600778456 /* MCSMTPOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 15E69ED1D4D38AB6D6CAC829 /* NSString+MCO.h in Headers */ = {isa = PBXBuildFile; fileRef = C6D42C1B16AE03D6002BB4F9 /* NSString+MCO.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 15B9D86694481EAF7D3629B6 /* MCSMTPOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA7D916A1386600778456 /* MCSMTPOperation.h */; }; 15FBB468AE17AD7D04FF74DC /* MCIMAPDisconnectOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6081679177635D2001F1018 /* MCIMAPDisconnectOperation.cpp */; }; - 1629F9D1A5BF128A37B149F2 /* NSError+MCO.h in Headers */ = {isa = PBXBuildFile; fileRef = C07AD44B013BB42A240B4F04 /* NSError+MCO.h */; settings = {ATTRIBUTES = (Public, ); }; }; 163FE32A65D83A98E41AD136 /* MCIMAPOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA7EF16A15A4D00778456 /* MCIMAPOperation.cpp */; }; 16C8E3A0A7EA58FE8155E49E /* uarrsort.c in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7CBA1A70771B0001DCC3 /* uarrsort.c */; }; - 172012590990B17B8DC13D85 /* MCOMessagePart.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB26616FD43E2000DB34C /* MCOMessagePart.mm */; }; 17228CB8E98A85819D6A70FD /* MCIMAPFetchMessagesOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA81816A29AD400778456 /* MCIMAPFetchMessagesOperation.cpp */; }; 177AA97E353774F3A3AD1013 /* MCMailProvider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6CF62BF175324F0006398B9 /* MCMailProvider.cpp */; }; 17AE4024ABC69FAFF4C5E581 /* MCIMAPFolder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6C5169E847800778456 /* MCIMAPFolder.cpp */; }; 17CCD054BAEE51B7DF5F4ADC /* MCPOPFetchHeaderOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C62C6EF016A7C6DE00737497 /* MCPOPFetchHeaderOperation.cpp */; }; 17D0AB66F5601442684FA08D /* MCIMAPMultiDisconnectOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6EFFBC6182BBF5700CFF656 /* MCIMAPMultiDisconnectOperation.cpp */; }; 17E6289FBAC69CD514148080 /* MCNNTPCheckAccountOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84D73744199BFA8C005124E5 /* MCNNTPCheckAccountOperation.cpp */; }; - 17E7E295C3F508352AC45B4E /* MCIMAPMessageRenderingOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = DA0F1C7A177C07B300F0D3B4 /* MCIMAPMessageRenderingOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 17E7E295C3F508352AC45B4E /* MCIMAPMessageRenderingOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = DA0F1C7A177C07B300F0D3B4 /* MCIMAPMessageRenderingOperation.h */; }; 17EE5F85CDACBCF56AEBB4E6 /* ucln_cmn.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7CBB1A70771B0001DCC3 /* ucln_cmn.cpp */; }; - 17F4EB7E2E70F577BC95D868 /* MCONNTPFetchServerTimeOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84CFA99319F725CB00FE35D2 /* MCONNTPFetchServerTimeOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 18019B9132C80AEF852B0CEB /* MCOIMAPCustomCommandOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 1845356E1BE23FBD000B0D87 /* MCOIMAPCustomCommandOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1820E7D51BD403ED00835D1E /* MCIMAPCustomCommandOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1820E7D31BD403ED00835D1E /* MCIMAPCustomCommandOperation.cpp */; }; 1820E7D61BD403ED00835D1E /* MCIMAPCustomCommandOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1820E7D31BD403ED00835D1E /* MCIMAPCustomCommandOperation.cpp */; }; - 183F31F9017DB5C9BFD59279 /* MCOIMAPCapabilityOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C6F61F9417016B310073032E /* MCOIMAPCapabilityOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 184535701BE23FBD000B0D87 /* MCOIMAPCustomCommandOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1845356F1BE23FBD000B0D87 /* MCOIMAPCustomCommandOperation.mm */; }; - 184535711BE23FCF000B0D87 /* MCOIMAPCustomCommandOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1845356F1BE23FBD000B0D87 /* MCOIMAPCustomCommandOperation.mm */; }; - 184805441BE751AF001B80AA /* MCOIMAPCustomCommandOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 1845356E1BE23FBD000B0D87 /* MCOIMAPCustomCommandOperation.h */; }; - 184805451BE751BD001B80AA /* MCOIMAPCustomCommandOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 1845356E1BE23FBD000B0D87 /* MCOIMAPCustomCommandOperation.h */; }; - 1857AE722E29E86F12E9D064 /* MCOIMAPFetchContentOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F8617016AD60073032E /* MCOIMAPFetchContentOperation.mm */; }; 185FEAE317F302182E28433D /* cmemory.c in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7CEC1A7079300001DCC3 /* cmemory.c */; }; 18707E211BE24DEA00B494C3 /* MCIMAPCustomCommandOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 1820E7D41BD403ED00835D1E /* MCIMAPCustomCommandOperation.h */; }; 18707E221BE24E0800B494C3 /* MCIMAPCustomCommandOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 1820E7D41BD403ED00835D1E /* MCIMAPCustomCommandOperation.h */; }; - 18B2D32B4DFCDEB51F263FAC /* MCIMAPOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA7F016A15A4D00778456 /* MCIMAPOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 18B2D32B4DFCDEB51F263FAC /* MCIMAPOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA7F016A15A4D00778456 /* MCIMAPOperation.h */; }; 18CBF5741BB4755A6C3871AE /* MCAbstractMessagePart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA696169E847800778456 /* MCAbstractMessagePart.cpp */; }; 19BD82EAC8F47FAEB79E6D6B /* ustring.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7CC11A70771B0001DCC3 /* ustring.cpp */; }; 1A108F3A843C2059F3382AC3 /* MCIMAPFolderInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C673EBEB1A46B41000A53F7F /* MCIMAPFolderInfo.cpp */; }; 1A47ED20F1693DE237671B75 /* MCNNTPFetchHeaderOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84D73735199BF7F2005124E5 /* MCNNTPFetchHeaderOperation.cpp */; }; 1A9C29BA400BFD1284B1F0EB /* MCIMAPSearchExpression.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6D4169E847800778456 /* MCIMAPSearchExpression.cpp */; }; - 1AD0E83FAC5BF79037F26F63 /* MCRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = C63CD68716BE1AB600DB18F1 /* MCRenderer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1AD29FDC262D05AEECCE0F47 /* MCOIMAPMessage.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F5B9E116FEA1E800D9DABD /* MCOIMAPMessage.mm */; }; + 1AD0E83FAC5BF79037F26F63 /* MCRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = C63CD68716BE1AB600DB18F1 /* MCRenderer.h */; }; 1AE39966A02FFB7FB1F11512 /* MCAutoreleasePool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6A2169E847800778456 /* MCAutoreleasePool.cpp */; }; - 1B191E78D6ECE4A50001E216 /* MCOPOPFetchMessageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C6A81BDC1706904800882C15 /* MCOPOPFetchMessageOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1B2A94D60BE845DAA517B22E /* csrecog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7C6D1A70771B0001DCC3 /* csrecog.cpp */; }; 1B68E766F528F8EB6F8E675B /* MCPOPMessageInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6DA169E847800778456 /* MCPOPMessageInfo.cpp */; }; - 1B952DBD5162F09260779A41 /* MCNNTPListNewsgroupsOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D7375B199BFDCA005124E5 /* MCNNTPListNewsgroupsOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1BDBD4A8C43EE9E7536E021E /* MCNNTPOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D7372F199BF704005124E5 /* MCNNTPOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1BDFDBC9E01906D5BEEBE995 /* MCHash.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6AC169E847800778456 /* MCHash.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1C1DEA7565C8B2226EEDC83D /* MCONNTPPostOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = F38221A11C7AAD8100E00721 /* MCONNTPPostOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1C507ED4AF446C98EAC7EA95 /* MCORFC822.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB26B16FD4C3B000DB34C /* MCORFC822.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1C6433DDC4431C1AE105D869 /* MCOIMAPFolderStatusOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EF9AB16175F35C60027FA3B /* MCOIMAPFolderStatusOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1D00C02F96F71F11785EEC8A /* MCOPOPFetchMessagesOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6A81BE51706906C00882C15 /* MCOPOPFetchMessagesOperation.mm */; }; + 1B952DBD5162F09260779A41 /* MCNNTPListNewsgroupsOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D7375B199BFDCA005124E5 /* MCNNTPListNewsgroupsOperation.h */; }; + 1BDBD4A8C43EE9E7536E021E /* MCNNTPOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D7372F199BF704005124E5 /* MCNNTPOperation.h */; }; + 1BDFDBC9E01906D5BEEBE995 /* MCHash.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6AC169E847800778456 /* MCHash.h */; }; 1DE4D24B50F05C5288003248 /* MCPOPFetchMessagesOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C62C6F0416A7E54200737497 /* MCPOPFetchMessagesOperation.cpp */; }; - 1E50BEEF674E4A4DCE9A0FDE /* MCONNTP.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D73761199BFF80005124E5 /* MCONNTP.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1E59801F0C6E3553BFE22320 /* MCOMessagePart.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB26516FD43E2000DB34C /* MCOMessagePart.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1EC4C20E18BD0208FF3EDE41 /* MCOIMAPIdleOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F8C17016AFA0073032E /* MCOIMAPIdleOperation.mm */; }; 1EE1B7A9373FC948C87B96ED /* MCIMAPCheckAccountOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA7F616A15A7800778456 /* MCIMAPCheckAccountOperation.cpp */; }; 1EE1E1DAFC696AFE4785F52D /* MCMessageParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6E4169E847800778456 /* MCMessageParser.cpp */; }; - 1F20A2FBF8E65CE73B4B4802 /* MCOPOPFetchMessageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C6A81BDC1706904800882C15 /* MCOPOPFetchMessageOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F4A7597FB8A313E685CB80A /* MCIMAPAppendMessageOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA80F16A299EA00778456 /* MCIMAPAppendMessageOperation.cpp */; }; - 1FC6C22810924CE89B4E155A /* MCRange.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6B4169E847800778456 /* MCRange.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1FC6C22810924CE89B4E155A /* MCRange.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6B4169E847800778456 /* MCRange.h */; }; 1FD0A71D29FFD452A3E2ACAC /* inputext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7CB91A70771B0001DCC3 /* inputext.cpp */; }; 1FF2CDE08DD91C05320CD8CF /* MCAbstractMultipart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA698169E847800778456 /* MCAbstractMultipart.cpp */; }; - 20995A38C1A7C39FC9C4EA0D /* MCIMAPPart.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6D2169E847800778456 /* MCIMAPPart.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 20FAC3A40837DDE7B117A58B /* MCSet.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6B6169E847800778456 /* MCSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 21426C6F22B5AD733A79661A /* MCMessageHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6A0169E847800778456 /* MCMessageHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 20995A38C1A7C39FC9C4EA0D /* MCIMAPPart.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6D2169E847800778456 /* MCIMAPPart.h */; }; + 20FAC3A40837DDE7B117A58B /* MCSet.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6B6169E847800778456 /* MCSet.h */; }; + 21426C6F22B5AD733A79661A /* MCMessageHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6A0169E847800778456 /* MCMessageHeader.h */; }; 22509B3CE33E5FF1F02C578A /* MCAddress.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA69C169E847800778456 /* MCAddress.cpp */; }; 22B4886524CCC93C1B72108D /* MCHTMLRendererIMAPDataCallback.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DAACAD4F17886807000B4517 /* MCHTMLRendererIMAPDataCallback.cpp */; }; 230552946325FBC6CE50CD05 /* MCIMAPStoreFlagsOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA81E16A29E3D00778456 /* MCIMAPStoreFlagsOperation.cpp */; }; 23C66560403223DCA116BA68 /* MCMXRecordResolverOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2744B1681A7A4637009E9E67 /* MCMXRecordResolverOperation.cpp */; }; 241A93AE76901E8241F1BB18 /* MCMD5.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6D6F950171E5CB8006F5B28 /* MCMD5.cpp */; }; 246C6256FB3D2D45C060531C /* MCMultipart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6E8169E847800778456 /* MCMultipart.cpp */; }; - 2470565C009E610B456AEBD9 /* MCAbstractMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA695169E847800778456 /* MCAbstractMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2470AD3233C41BE5D914FDE3 /* MCNNTPFetchOverviewOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84CFA98619F7159700FE35D2 /* MCNNTPFetchOverviewOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2505AB6A90F7484D3CE0B8CB /* MCNNTPFetchAllArticlesOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D73741199BF963005124E5 /* MCNNTPFetchAllArticlesOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2470565C009E610B456AEBD9 /* MCAbstractMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA695169E847800778456 /* MCAbstractMessage.h */; }; + 2470AD3233C41BE5D914FDE3 /* MCNNTPFetchOverviewOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84CFA98619F7159700FE35D2 /* MCNNTPFetchOverviewOperation.h */; }; + 2505AB6A90F7484D3CE0B8CB /* MCNNTPFetchAllArticlesOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D73741199BF963005124E5 /* MCNNTPFetchAllArticlesOperation.h */; }; 258E3EB3B06E71D29AF6A4E1 /* MCSMTPSession.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6EE169E847800778456 /* MCSMTPSession.cpp */; }; 26CA50680EBC1B1A27F9051E /* MCIMAPNamespaceItem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6CF169E847800778456 /* MCIMAPNamespaceItem.cpp */; }; - 26CA94ECE6FD13B61CF3E7EF /* MCOIMAPPart.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F5B9F016FEA3D700D9DABD /* MCOIMAPPart.mm */; }; - 271338E576D2B669BA0A0A49 /* MCOIMAPFetchMessagesOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F8317016A200073032E /* MCOIMAPFetchMessagesOperation.mm */; }; - 271FB4CA4C7371157E73F95A /* MCOIMAPFetchContentOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C6F61F8517016AD60073032E /* MCOIMAPFetchContentOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; 2740D3722F3FB8E43C9927B3 /* udataswp.c in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7CBD1A70771B0001DCC3 /* udataswp.c */; }; 2744B16A1A7A4637009E9E67 /* MCMXRecordResolverOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2744B1681A7A4637009E9E67 /* MCMXRecordResolverOperation.cpp */; }; 2744B16B1A7A4637009E9E67 /* MCMXRecordResolverOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2744B1681A7A4637009E9E67 /* MCMXRecordResolverOperation.cpp */; }; 27478E801A764698004AE621 /* MCAccountValidator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 27478E7E1A764698004AE621 /* MCAccountValidator.cpp */; }; 27478E811A764699004AE621 /* MCAccountValidator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 27478E7E1A764698004AE621 /* MCAccountValidator.cpp */; }; - 27478E841A7646F8004AE621 /* MCOAccountValidator.mm in Sources */ = {isa = PBXBuildFile; fileRef = 27478E831A7646F8004AE621 /* MCOAccountValidator.mm */; }; - 27478E851A7646F8004AE621 /* MCOAccountValidator.mm in Sources */ = {isa = PBXBuildFile; fileRef = 27478E831A7646F8004AE621 /* MCOAccountValidator.mm */; }; - 27478E861A76475F004AE621 /* MCOAccountValidator.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 27478E821A7646F8004AE621 /* MCOAccountValidator.h */; }; 27478E871A76475F004AE621 /* MCAccountValidator.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 27478E7F1A764698004AE621 /* MCAccountValidator.h */; }; - 27478E881A7647AC004AE621 /* MCOAccountValidator.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 27478E821A7646F8004AE621 /* MCOAccountValidator.h */; }; 27478E891A7647AC004AE621 /* MCAccountValidator.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 27478E7F1A764698004AE621 /* MCAccountValidator.h */; }; - 27581A33396A0DFA89DBDD20 /* MCOIndexSet.h in Headers */ = {isa = PBXBuildFile; fileRef = C6F5B9F216FEAC6C00D9DABD /* MCOIndexSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 27780C2E19CF9CD100C77E44 /* MCOFramework.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6BD28A9170BDB6B00A91AC1 /* MCOFramework.mm */; }; 27780C3219CF9CD100C77E44 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C6ED6D1917A1919500A4A14C /* Security.framework */; }; 27780C3619CF9CD100C77E44 /* providers.json in Resources */ = {isa = PBXBuildFile; fileRef = 84AF9E7D172DBAF600E60AA3 /* providers.json */; }; 27780C3D19CF9D9800C77E44 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 27780C3C19CF9D9800C77E44 /* CFNetwork.framework */; }; - 27AA5A2F27A4C3B9C8B7332F /* MCIMAPIdentity.h in Headers */ = {isa = PBXBuildFile; fileRef = C63D315B17C9155C00A4D993 /* MCIMAPIdentity.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 27AA5A2F27A4C3B9C8B7332F /* MCIMAPIdentity.h in Headers */ = {isa = PBXBuildFile; fileRef = C63D315B17C9155C00A4D993 /* MCIMAPIdentity.h */; }; 27E91D601A80D3F4005A3244 /* MCMXRecordResolverOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 2744B1691A7A4637009E9E67 /* MCMXRecordResolverOperation.h */; }; - 27EE03BBC916FB16424F9CF9 /* MCHashMap.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6AE169E847800778456 /* MCHashMap.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2812062627EDC1F0DD99CE79 /* MCOIMAPMessagePart.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F5B9E416FEA27500D9DABD /* MCOIMAPMessagePart.mm */; }; - 2822FB6434F1EF57699936A4 /* MCOIMAPFolderStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EF9AB06175F2EC60027FA3B /* MCOIMAPFolderStatus.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 27EE03BBC916FB16424F9CF9 /* MCHashMap.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6AE169E847800778456 /* MCHashMap.h */; }; 28B9BBA6C95D246A0A2B1C0C /* MCIMAPConnectOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 943F1A9817D964F600F0C798 /* MCIMAPConnectOperation.cpp */; }; - 2909DA08A1469B46DEFC2DEB /* MCOIMAPSearchExpression.h in Headers */ = {isa = PBXBuildFile; fileRef = C6F61F9717016B460073032E /* MCOIMAPSearchExpression.h */; settings = {ATTRIBUTES = (Public, ); }; }; 2971F87A8881733BCE4628CF /* MCNNTPSession.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8491899F18C93FB7002063A3 /* MCNNTPSession.cpp */; }; - 29A1D8460C55E89BE051E63F /* MCOObjectWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = C64FF38F16B3C13000F8C162 /* MCOObjectWrapper.h */; settings = {ATTRIBUTES = (Public, ); }; }; 29E9736A4C4A3129ECA6F9C5 /* MCAddressDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C63CD67716BDCDD400DB18F1 /* MCAddressDisplay.cpp */; }; - 2A072B0DF7CE10C882876F13 /* MCOperationQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6C2169E847800778456 /* MCOperationQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2A072B0DF7CE10C882876F13 /* MCOperationQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6C2169E847800778456 /* MCOperationQueue.h */; }; 2A37E055FE5EAAA415CB31F2 /* MCDataStreamDecoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 81416BDC1CF8BB17000A4299 /* MCDataStreamDecoder.cpp */; }; - 2AB202A1680EBDDC41BC8853 /* MCIMAPFetchParsedContentOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8199FBF019FAF1270040BBC3 /* MCIMAPFetchParsedContentOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2ADDB288E4999ACDEDACA50D /* MCPOPAsyncSession.h in Headers */ = {isa = PBXBuildFile; fileRef = C62C6EEE16A7B67600737497 /* MCPOPAsyncSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2AB202A1680EBDDC41BC8853 /* MCIMAPFetchParsedContentOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8199FBF019FAF1270040BBC3 /* MCIMAPFetchParsedContentOperation.h */; }; + 2ADDB288E4999ACDEDACA50D /* MCPOPAsyncSession.h in Headers */ = {isa = PBXBuildFile; fileRef = C62C6EEE16A7B67600737497 /* MCPOPAsyncSession.h */; }; 2AE74F72C495AC4314951D5F /* MCPOPNoopOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B639E617F27EBD003B5BA2 /* MCPOPNoopOperation.cpp */; }; - 2AF748035111C741663A6B67 /* MCOIMAPIdentityOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C6F61F9117016B250073032E /* MCOIMAPIdentityOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2B157B8E7F3A915667ADE7C6 /* MCSet.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6B6169E847800778456 /* MCSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2B8D8E5B6EF1FF9E2CB0A9FE /* MCOAbstract.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB23616EDAA2B000DB34C /* MCOAbstract.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2B157B8E7F3A915667ADE7C6 /* MCSet.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6B6169E847800778456 /* MCSet.h */; }; 2BA05A32764F85A07627EFB1 /* MCNNTPFetchArticleOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84D7373B199BF83B005124E5 /* MCNNTPFetchArticleOperation.cpp */; }; - 2BCAC2A9C080808A6CAED24A /* MCOAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB25C16FD4377000DB34C /* MCOAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2CCB64F93013A0B4A5D86A8D /* MCMessageBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6E3169E847800778456 /* MCMessageBuilder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2CF42E31FCE464508C0E91EC /* MCOIMAPMoveMessagesOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8568A4191C610F6600FF4470 /* MCOIMAPMoveMessagesOperation.mm */; }; + 2CCB64F93013A0B4A5D86A8D /* MCMessageBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6E3169E847800778456 /* MCMessageBuilder.h */; }; 2E417E0B3D91E0F248B92C6C /* MCSMTPOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA7D816A1386500778456 /* MCSMTPOperation.cpp */; }; - 2E5BF6F27ED81C4BC6E16549 /* MCOIMAPMultipart.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F5B9E716FEA28600D9DABD /* MCOIMAPMultipart.mm */; }; - 2E992ED3E1EB08DA6494509C /* MCOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6BF169E847800778456 /* MCOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2EA8FAA76470C3D16F34CD86 /* MCOIMAPNamespace.h in Headers */ = {isa = PBXBuildFile; fileRef = C6F5B9E916FEA3B500D9DABD /* MCOIMAPNamespace.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2EC6D69D8B2DBD43D0E2088F /* MCOIMAPFolderInfo.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F9E17016EA00073032E /* MCOIMAPFolderInfo.mm */; }; + 2E992ED3E1EB08DA6494509C /* MCOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6BF169E847800778456 /* MCOperation.h */; }; 2ED1344CB8D0D3778D1DBE30 /* MCMultipart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6E8169E847800778456 /* MCMultipart.cpp */; }; - 2ED5033A9BFC3E74DB3D9ED6 /* MCOIMAPIdentityOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C6F61F9117016B250073032E /* MCOIMAPIdentityOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2F7CC3DBAD8EE06FAC638672 /* MCOIndexSet.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F5B9F316FEAC6C00D9DABD /* MCOIndexSet.mm */; }; 2F864B35BD689A4500E0D43B /* MCAbstractMessage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA694169E847800778456 /* MCAbstractMessage.cpp */; }; - 2F9167A79FDC31E51FD7C2BD /* MCNNTPProgressCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D73732199BF754005124E5 /* MCNNTPProgressCallback.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2F9167A79FDC31E51FD7C2BD /* MCNNTPProgressCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D73732199BF754005124E5 /* MCNNTPProgressCallback.h */; }; 3001DB3E3907C83825A16F48 /* MCIMAPMessageRenderingOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DA0F1C79177C07B300F0D3B4 /* MCIMAPMessageRenderingOperation.cpp */; }; - 302F0D954AC56A108413B736 /* MCOIMAPIdleOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C6F61F8B17016AFA0073032E /* MCOIMAPIdleOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 304363D446243048FD03183A /* MCOIMAPFetchFoldersOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = F87F190B16BB62B00012652F /* MCOIMAPFetchFoldersOperation.mm */; }; - 3055EB3D5ABB36F4CCA25468 /* MCIMAPFolderStatusOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EF9AB0E175F30C20027FA3B /* MCIMAPFolderStatusOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3062195FCDDB0EA2FBEF6DB6 /* MCONNTPFetchHeaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D7376B199C005A005124E5 /* MCONNTPFetchHeaderOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 30D4517EC9261CE038E73D23 /* NSIndexSet+MCO.m in Sources */ = {isa = PBXBuildFile; fileRef = C69BA85A17DEFCCB00D601B7 /* NSIndexSet+MCO.m */; }; - 313E695471BC9A477B677BDE /* MCOHTMLRendererIMAPDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = C6F5B9FF16FED7AB00D9DABD /* MCOHTMLRendererIMAPDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3055EB3D5ABB36F4CCA25468 /* MCIMAPFolderStatusOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EF9AB0E175F30C20027FA3B /* MCIMAPFolderStatusOperation.h */; }; 31A2A745B3572CD9EFE0BC6B /* MCIMAPIdentityOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C62C6ED216A2A0E600737497 /* MCIMAPIdentityOperation.cpp */; }; 31B494515F08125DC498E33E /* MCIMAPSyncResult.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64BB21F16E34DCA000DB34C /* MCIMAPSyncResult.cpp */; }; - 32032AFB325A68BBDC17E2A9 /* MCNNTPAsyncSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D7372B199BF66C005124E5 /* MCNNTPAsyncSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3206FD3ED89515925DA9BF3D /* MCIMAPCustomCommandOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 1820E7D41BD403ED00835D1E /* MCIMAPCustomCommandOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 32032AFB325A68BBDC17E2A9 /* MCNNTPAsyncSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D7372B199BF66C005124E5 /* MCNNTPAsyncSession.h */; }; + 3206FD3ED89515925DA9BF3D /* MCIMAPCustomCommandOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 1820E7D41BD403ED00835D1E /* MCIMAPCustomCommandOperation.h */; }; 323CA434D479B1DA1065DBAE /* MCIMAPMessage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6C7169E847800778456 /* MCIMAPMessage.cpp */; }; - 326FD8772C077BB0ECA1CECB /* MCONNTPSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D73762199BFFC7005124E5 /* MCONNTPSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 328F2F0668D2477E714CD275 /* MCUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6B9169E847800778456 /* MCUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 32EEFB1A52E629C101C8815F /* MCOIMAPBaseOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C6F61FB31702AB2A0073032E /* MCOIMAPBaseOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3327648AE081FD3818B29E9F /* MCIMAPCopyMessagesOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA81316A29A1000778456 /* MCIMAPCopyMessagesOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 33418C6B4CBA051E587F9A11 /* MCPOPSession.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6DE169E847800778456 /* MCPOPSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 328F2F0668D2477E714CD275 /* MCUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6B9169E847800778456 /* MCUtils.h */; }; + 3327648AE081FD3818B29E9F /* MCIMAPCopyMessagesOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA81316A29A1000778456 /* MCIMAPCopyMessagesOperation.h */; }; + 33418C6B4CBA051E587F9A11 /* MCPOPSession.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6DE169E847800778456 /* MCPOPSession.h */; }; 347C957CA245D0BA62CA9D1B /* MCIMAPSearchOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA82416A29EE000778456 /* MCIMAPSearchOperation.cpp */; }; - 34D1CDF076F0C97BFFF2F410 /* MCOIMAPNamespace.h in Headers */ = {isa = PBXBuildFile; fileRef = C6F5B9E916FEA3B500D9DABD /* MCOIMAPNamespace.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3503E423F8702DDC40450B6F /* MCIMAPMessagePart.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6CA169E847800778456 /* MCIMAPMessagePart.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 354C1F7185CA4790ABB6E503 /* MCOPOPFetchHeaderOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6A81BD91706903E00882C15 /* MCOPOPFetchHeaderOperation.mm */; }; - 35630AABCF7F7895C249F86E /* MCOIMAPFolder.h in Headers */ = {isa = PBXBuildFile; fileRef = C623C59116FE750D001BBEFC /* MCOIMAPFolder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 35A4FE25031081ADFD4C0698 /* MCIMAPMoveMessagesOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8568A4121C610D9800FF4470 /* MCIMAPMoveMessagesOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3503E423F8702DDC40450B6F /* MCIMAPMessagePart.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6CA169E847800778456 /* MCIMAPMessagePart.h */; }; + 35A4FE25031081ADFD4C0698 /* MCIMAPMoveMessagesOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8568A4121C610D9800FF4470 /* MCIMAPMoveMessagesOperation.h */; }; 35A95B39787BF973CF69C225 /* MCAbstractPart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA69A169E847800778456 /* MCAbstractPart.cpp */; }; - 35EF5E32EA062362C8CDE42B /* MCOSMTPSendOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C6A81BC117068E9500882C15 /* MCOSMTPSendOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 35FC3A62359EF9E81BF698D5 /* NSString+MCO.h in Headers */ = {isa = PBXBuildFile; fileRef = C6D42C1B16AE03D6002BB4F9 /* NSString+MCO.h */; settings = {ATTRIBUTES = (Public, ); }; }; 363B2284B10774018DCE4B2C /* MCIMAPIdentity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C63D315A17C9155C00A4D993 /* MCIMAPIdentity.cpp */; }; - 366F0B2B1441B6B76913C90D /* MCSMTPProgressCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6ED169E847800778456 /* MCSMTPProgressCallback.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 366F0B2B1441B6B76913C90D /* MCSMTPProgressCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6ED169E847800778456 /* MCSMTPProgressCallback.h */; }; 3686A6EC7B3B16D6CF073851 /* MCHTMLRendererCallback.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C63CD68416BE148B00DB18F1 /* MCHTMLRendererCallback.cpp */; }; - 368A68E76FE5828719712501 /* MCValue.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6BB169E847800778456 /* MCValue.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 369A72559CC81BDCE72A1F8D /* MCONNTPListNewsgroupsOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D73789199C0260005124E5 /* MCONNTPListNewsgroupsOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 36A952AB0AB7A7E7370AC019 /* MCMessageHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6A0169E847800778456 /* MCMessageHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 36C730260AC040622F91CFE0 /* MCNNTPFetchServerTimeOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84CFA98E19F724E500FE35D2 /* MCNNTPFetchServerTimeOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 36E5924B80F52437FF4A0BC3 /* MCOPOPOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6A81BE11706905600882C15 /* MCOPOPOperation.mm */; }; - 3701F6C365000E9D6F4087F8 /* MCNNTPFetchArticleOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D7373C199BF83B005124E5 /* MCNNTPFetchArticleOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3763528492FDC9622F28BD93 /* MCONNTPOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D73766199BFFFC005124E5 /* MCONNTPOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 368A68E76FE5828719712501 /* MCValue.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6BB169E847800778456 /* MCValue.h */; }; + 36A952AB0AB7A7E7370AC019 /* MCMessageHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6A0169E847800778456 /* MCMessageHeader.h */; }; + 36C730260AC040622F91CFE0 /* MCNNTPFetchServerTimeOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84CFA98E19F724E500FE35D2 /* MCNNTPFetchServerTimeOperation.h */; }; + 3701F6C365000E9D6F4087F8 /* MCNNTPFetchArticleOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D7373C199BF83B005124E5 /* MCNNTPFetchArticleOperation.h */; }; 378720EB8B04256FE0E8BFE9 /* MCIMAPFetchParsedContentOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8199FBEF19FAF1270040BBC3 /* MCIMAPFetchParsedContentOperation.cpp */; }; 3796429D231DB0384468F3A5 /* MCIMAPPart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6D1169E847800778456 /* MCIMAPPart.cpp */; }; - 37AB9F00B2E9B5AC9F1E7F1A /* MCOIMAPSession.h in Headers */ = {isa = PBXBuildFile; fileRef = F8EA941416BAED6E0011AC6F /* MCOIMAPSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 37BD93476D0CF9CD2CECBB5F /* MCOAbstractPart.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB23E16EDAAE1000DB34C /* MCOAbstractPart.mm */; }; - 37CABFE41284A99A7B5C536C /* MCNNTPFetchHeaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D73736199BF7F2005124E5 /* MCNNTPFetchHeaderOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 38367DEDB34A294DF192D7C5 /* MCONNTPFetchArticleOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84D73770199C007E005124E5 /* MCONNTPFetchArticleOperation.mm */; }; - 38ED0CA1511DD942B00B6DE5 /* MCAsyncIMAP.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA7F916A15A9200778456 /* MCAsyncIMAP.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 37CABFE41284A99A7B5C536C /* MCNNTPFetchHeaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D73736199BF7F2005124E5 /* MCNNTPFetchHeaderOperation.h */; }; + 38ED0CA1511DD942B00B6DE5 /* MCAsyncIMAP.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA7F916A15A9200778456 /* MCAsyncIMAP.h */; }; 396EA1D46798EFCCB6BE03E6 /* MCIMAPCreateFolderOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA80616A2999800778456 /* MCIMAPCreateFolderOperation.cpp */; }; - 3974E4AC43E9CC45C843E100 /* MCAbstract.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA693169E847800778456 /* MCAbstract.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 39805787350CC39EDA29BCA5 /* MCOIMAPNamespace.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F5B9EA16FEA3B500D9DABD /* MCOIMAPNamespace.mm */; }; + 3974E4AC43E9CC45C843E100 /* MCAbstract.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA693169E847800778456 /* MCAbstract.h */; }; 39A2E4CB28AE666834D20E60 /* MCIMAPQuotaOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B3C1BDF17ABF4BB008BBF4C /* MCIMAPQuotaOperation.cpp */; }; 39D4AF4203D45FB055081BBB /* MCNull.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6D6F952171E5CB8006F5B28 /* MCNull.cpp */; }; - 39EE13C78A82A0C92DD2AC1D /* MCOOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB25716FD3BC2000DB34C /* MCOOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3A3BC9EA3B314CB8185D1E11 /* ioapi.c in Sources */ = {isa = PBXBuildFile; fileRef = C6E665AD1796500B0063F2CF /* ioapi.c */; }; - 3A4EB6F1A1968F090A3712DA /* MCOperationCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6C0169E847800778456 /* MCOperationCallback.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3A4EB6F1A1968F090A3712DA /* MCOperationCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6C0169E847800778456 /* MCOperationCallback.h */; }; 3A78E3333C03F1EE466F8B61 /* MCBase64.c in Sources */ = {isa = PBXBuildFile; fileRef = C67597C117A8D65000DA69DF /* MCBase64.c */; }; - 3ABAFBB958CBDE353E5B057A /* MCIMAPFolderInfoOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C62C6ED716A398FA00737497 /* MCIMAPFolderInfoOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3ABFC3DE00F422C0866FD2B6 /* MCIMAPFetchNamespaceOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA82B16A2A01400778456 /* MCIMAPFetchNamespaceOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3ABAFBB958CBDE353E5B057A /* MCIMAPFolderInfoOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C62C6ED716A398FA00737497 /* MCIMAPFolderInfoOperation.h */; }; + 3ABFC3DE00F422C0866FD2B6 /* MCIMAPFetchNamespaceOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA82B16A2A01400778456 /* MCIMAPFetchNamespaceOperation.h */; }; 3AD29E8C23C53793D5AD6437 /* MCMessageHeader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA69F169E847800778456 /* MCMessageHeader.cpp */; }; - 3AE87C548E91C091F13FE013 /* MCJSON.h in Headers */ = {isa = PBXBuildFile; fileRef = C6D6F7F8171E595D006F5B28 /* MCJSON.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3B735D299B1A25CFC3E62410 /* NSData+MCO.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6D42C1A16AE03D6002BB4F9 /* NSData+MCO.mm */; }; - 3B7A4C0C03E2097CF55E0C63 /* MCIMAPSearchOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA82516A29EE300778456 /* MCIMAPSearchOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3AE87C548E91C091F13FE013 /* MCJSON.h in Headers */ = {isa = PBXBuildFile; fileRef = C6D6F7F8171E595D006F5B28 /* MCJSON.h */; }; 3BA5DC055EE2FA934545729D /* MCNNTPOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84D7372E199BF704005124E5 /* MCNNTPOperation.cpp */; }; - 3BA824E083E9A950365D795D /* MCIMAP.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6C4169E847800778456 /* MCIMAP.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3BA824E083E9A950365D795D /* MCIMAP.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6C4169E847800778456 /* MCIMAP.h */; }; 3BBD6E38F8AE31A25B69FFED /* MCSMTPCheckAccountOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA7E816A154B000778456 /* MCSMTPCheckAccountOperation.cpp */; }; - 3BD69427581B268E89557F81 /* MCPOPFetchMessagesOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C62C6F0516A7E54400737497 /* MCPOPFetchMessagesOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3BD69427581B268E89557F81 /* MCPOPFetchMessagesOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C62C6F0516A7E54400737497 /* MCPOPFetchMessagesOperation.h */; }; 3BE174E097F4B40946B905CD /* MCMailProvidersManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6CF62C1175324F0006398B9 /* MCMailProvidersManager.cpp */; }; 3BE2F2913A0998DD751EEAD9 /* MCIMAPNamespace.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6CD169E847800778456 /* MCIMAPNamespace.cpp */; }; - 3CE14B7C1892222E114AC11E /* MCArray.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6A6169E847800778456 /* MCArray.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3CE14B7C1892222E114AC11E /* MCArray.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6A6169E847800778456 /* MCArray.h */; }; 3D18DC5F6995DD39AA69C0D4 /* MCIMAPMultiDisconnectOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6EFFBC6182BBF5700CFF656 /* MCIMAPMultiDisconnectOperation.cpp */; }; 3DDB33D31ECC11E0B0A49CC1 /* zip.c in Sources */ = {isa = PBXBuildFile; fileRef = C6E665B31796500B0063F2CF /* zip.c */; }; - 3DE7EA2084774624AE33D931 /* MCOMessageHeader.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB24416EDAAFE000DB34C /* MCOMessageHeader.mm */; }; - 3DF4B51E06CD755E6405F6AB /* MCONNTPFetchAllArticlesOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84D73774199C00AB005124E5 /* MCONNTPFetchAllArticlesOperation.mm */; }; - 3E349E56ABA9E31B301CC9A4 /* MCIMAPSearchExpression.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6D5169E847800778456 /* MCIMAPSearchExpression.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3E40BEDF19DACB39AD070E2B /* MCOIMAPSession.mm in Sources */ = {isa = PBXBuildFile; fileRef = C07AD057D3C8FBDC7AC95733 /* MCOIMAPSession.mm */; }; + 3E349E56ABA9E31B301CC9A4 /* MCIMAPSearchExpression.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6D5169E847800778456 /* MCIMAPSearchExpression.h */; }; 3EEA57840839BAE3BCC1088F /* MCHTMLRendererIMAPDataCallback.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DAACAD4F17886807000B4517 /* MCHTMLRendererIMAPDataCallback.cpp */; }; 3F4516DAD95F1046385A2A53 /* csrecog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7C6D1A70771B0001DCC3 /* csrecog.cpp */; }; - 3F552AC432E15FB6A5FDDEBD /* MCOIMAPAppendMessageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C6F61F7C170169FB0073032E /* MCOIMAPAppendMessageOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3F610FE6FE6D4C7721ECCC1B /* MCAssert.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6A8169E847800778456 /* MCAssert.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 402B217D2FDA0705FA80EA37 /* MCOIMAPMoveMessagesOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8568A4181C610F6600FF4470 /* MCOIMAPMoveMessagesOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3F610FE6FE6D4C7721ECCC1B /* MCAssert.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6A8169E847800778456 /* MCAssert.h */; }; 404AB08B392A7DBF7E220FBF /* MCZipMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = BD7C0F451B545CE2003337DF /* MCZipMac.mm */; }; - 406D21F6F7ACED90BCA795EB /* MCBaseTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6A4169E847800778456 /* MCBaseTypes.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 41502E4B6A93898EF53D2C21 /* MCMessageConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA69E169E847800778456 /* MCMessageConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 415A82AD8267E8915A32AD84 /* MCOIMAPMultiDisconnectOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6EFFBCB1833334900CFF656 /* MCOIMAPMultiDisconnectOperation.mm */; }; - 417D14B87112F7074B466CED /* MCOIMAPFolderInfoOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C6F61F79170169EE0073032E /* MCOIMAPFolderInfoOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 418716951105D169B36A835A /* MCONNTPFetchArticleOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84D73770199C007E005124E5 /* MCONNTPFetchArticleOperation.mm */; }; - 41A6D9505A39EE5EEA6372E9 /* MCOIMAPFolderInfo.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F9E17016EA00073032E /* MCOIMAPFolderInfo.mm */; }; - 41ED5C763019329EC6C9E74E /* NSString+MCO.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6D42C1C16AE03D6002BB4F9 /* NSString+MCO.mm */; }; + 406D21F6F7ACED90BCA795EB /* MCBaseTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6A4169E847800778456 /* MCBaseTypes.h */; }; + 41502E4B6A93898EF53D2C21 /* MCMessageConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA69E169E847800778456 /* MCMessageConstants.h */; }; 42290C063351F439A7431B97 /* MCIMAPCapabilityOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64BB22916E5C0A3000DB34C /* MCIMAPCapabilityOperation.cpp */; }; - 423FC92F53CD31D0175130A0 /* MCOIMAPQuotaOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4B3C1BDD17ABF307008BBF4C /* MCOIMAPQuotaOperation.mm */; }; 4262A77B543E2F33900B6904 /* MCNNTPSession.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8491899F18C93FB7002063A3 /* MCNNTPSession.cpp */; }; 428D7EB802E427599D889B16 /* MCHTMLRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C63CD67B16BDCDD400DB18F1 /* MCHTMLRenderer.cpp */; }; 42DB7BAB14B996C711359336 /* MCNNTPAsyncSession.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84D7372A199BF66C005124E5 /* MCNNTPAsyncSession.cpp */; }; @@ -298,126 +187,80 @@ 43E821EF0A9372B944A45782 /* csrsbcs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7C6F1A70771B0001DCC3 /* csrsbcs.cpp */; }; 444C845F5ABC2BDD0FD214C0 /* MCString.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6B7169E847800778456 /* MCString.cpp */; }; 4483D4A0029BD3BD89406D58 /* MCPOPFetchMessageOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C62C6EF316A7C6E900737497 /* MCPOPFetchMessageOperation.cpp */; }; - 449B1115F410D11E124F7CF3 /* MCDateFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = C63CD67A16BDCDD400DB18F1 /* MCDateFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 44BFF1BFC4DA9635C093FC4D /* MCConnectionLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = C68B2AEB1778A589005E61EF /* MCConnectionLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 449B1115F410D11E124F7CF3 /* MCDateFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = C63CD67A16BDCDD400DB18F1 /* MCDateFormatter.h */; }; + 44BFF1BFC4DA9635C093FC4D /* MCConnectionLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = C68B2AEB1778A589005E61EF /* MCConnectionLogger.h */; }; 454BB4D0CF639EACC8915385 /* MCNNTPFetchAllArticlesOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84D73740199BF963005124E5 /* MCNNTPFetchAllArticlesOperation.cpp */; }; - 456E8A4046BFB656BF170DA3 /* MCRFC822.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6EA169E847800778456 /* MCRFC822.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4630415C571B6EE5B52D85FA /* MCOIMAPIdleOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C6F61F8B17016AFA0073032E /* MCOIMAPIdleOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 456E8A4046BFB656BF170DA3 /* MCRFC822.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6EA169E847800778456 /* MCRFC822.h */; }; 4632239A398A018B5896D5F3 /* MCDateFormatter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C63CD67916BDCDD400DB18F1 /* MCDateFormatter.cpp */; }; 4704D4CDBEEE261C18482F22 /* MCHTMLBodyRendererTemplateCallback.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DAD28C891783CFFC00F2BB8F /* MCHTMLBodyRendererTemplateCallback.cpp */; }; - 470D511F350C5738DD5B9C53 /* MCONNTPFetchArticleOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D7376F199C007E005124E5 /* MCONNTPFetchArticleOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 471D6ED2D54281AFDBC8A191 /* MCOSMTPNoopOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8416A99C17F284F400B3C7DA /* MCOSMTPNoopOperation.mm */; }; 478FBDA7C6B9C6AA0BC38E97 /* MCAttachment.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6E0169E847800778456 /* MCAttachment.cpp */; }; - 47E641E8E45B0F1F16EA8EE9 /* MCOIMAPSession.mm in Sources */ = {isa = PBXBuildFile; fileRef = C07AD057D3C8FBDC7AC95733 /* MCOIMAPSession.mm */; }; - 47FC8F983AFFF98F5BC72B38 /* MCSMTP.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6EC169E847800778456 /* MCSMTP.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 482B491DC7FE3462B881899E /* MCNNTPFetchArticleOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D7373C199BF83B005124E5 /* MCNNTPFetchArticleOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 482BC520550F5A3CBC966922 /* MCOPOPSession.h in Headers */ = {isa = PBXBuildFile; fileRef = C6A81BD41706903500882C15 /* MCOPOPSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 47FC8F983AFFF98F5BC72B38 /* MCSMTP.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6EC169E847800778456 /* MCSMTP.h */; }; + 482B491DC7FE3462B881899E /* MCNNTPFetchArticleOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D7373C199BF83B005124E5 /* MCNNTPFetchArticleOperation.h */; }; 4895FCEAD620719B0F44579E /* MCCertificateUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6F7B19D17A1C15200BE78BB /* MCCertificateUtils.cpp */; }; - 48BDC6E2F7C7E7DA9E66DB52 /* MCOSMTP.h in Headers */ = {isa = PBXBuildFile; fileRef = C6A81BE81706A6B300882C15 /* MCOSMTP.h */; settings = {ATTRIBUTES = (Public, ); }; }; 49117180689B3BCDD3D3D898 /* MCPOPFetchMessageOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C62C6EF316A7C6E900737497 /* MCPOPFetchMessageOperation.cpp */; }; 49168C0ECE85D17C4DCA6E78 /* MCIMAPFolder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6C5169E847800778456 /* MCIMAPFolder.cpp */; }; 4A4A96DDCA43E40CA772C52C /* MCData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6A9169E847800778456 /* MCData.cpp */; }; - 4A5ECD2D2F77DFB1F3F6BF11 /* MCObject.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6B2169E847800778456 /* MCObject.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4A7601BE03DD863B1330D521 /* MCOAccountValidator.h in Headers */ = {isa = PBXBuildFile; fileRef = 27478E821A7646F8004AE621 /* MCOAccountValidator.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4AB9BCB20EEC0AE915B9C236 /* MCIMAPProgressCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6D3169E847800778456 /* MCIMAPProgressCallback.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4B3C1BDE17ABF309008BBF4C /* MCOIMAPQuotaOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4B3C1BDD17ABF307008BBF4C /* MCOIMAPQuotaOperation.mm */; }; + 4A5ECD2D2F77DFB1F3F6BF11 /* MCObject.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6B2169E847800778456 /* MCObject.h */; }; + 4AB9BCB20EEC0AE915B9C236 /* MCIMAPProgressCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6D3169E847800778456 /* MCIMAPProgressCallback.h */; }; 4B3C1BE117ABF4BC008BBF4C /* MCIMAPQuotaOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B3C1BDF17ABF4BB008BBF4C /* MCIMAPQuotaOperation.cpp */; }; - 4B3C1BE217ABFF7C008BBF4C /* MCOIMAPQuotaOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 4B3C1BDC17ABF306008BBF4C /* MCOIMAPQuotaOperation.h */; }; - 4B3C1BE317ABFF91008BBF4C /* MCOIMAPQuotaOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4B3C1BDD17ABF307008BBF4C /* MCOIMAPQuotaOperation.mm */; }; 4B3C1BE417AC0156008BBF4C /* MCIMAPQuotaOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 4B3C1BE017ABF4BC008BBF4C /* MCIMAPQuotaOperation.h */; }; 4B3C1BE517AC0176008BBF4C /* MCIMAPQuotaOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B3C1BDF17ABF4BB008BBF4C /* MCIMAPQuotaOperation.cpp */; }; - 4B711609CF722B1A49132323 /* MCNNTPOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D7372F199BF704005124E5 /* MCNNTPOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4BE4029117B548B900ECC5E4 /* MCOIMAPQuotaOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 4B3C1BDC17ABF306008BBF4C /* MCOIMAPQuotaOperation.h */; }; + 4B711609CF722B1A49132323 /* MCNNTPOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D7372F199BF704005124E5 /* MCNNTPOperation.h */; }; 4BE4029217B548D900ECC5E4 /* MCIMAPQuotaOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 4B3C1BE017ABF4BC008BBF4C /* MCIMAPQuotaOperation.h */; }; 4C87BB31E2E17DDA01C657E4 /* MCZip.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6E665AA1796500B0063F2CF /* MCZip.cpp */; }; - 4D56CD6B3E41F22FC3B4D892 /* NSDictionary+MCO.h in Headers */ = {isa = PBXBuildFile; fileRef = C6EB30F516B8C9480091F4F1 /* NSDictionary+MCO.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4DDA46346C360015991B7B83 /* MCNNTPFetchServerTimeOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84CFA98E19F724E500FE35D2 /* MCNNTPFetchServerTimeOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4DDA46346C360015991B7B83 /* MCNNTPFetchServerTimeOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84CFA98E19F724E500FE35D2 /* MCNNTPFetchServerTimeOperation.h */; }; 4E07E0264EB5E2ADC903B326 /* MCDateFormatter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C63CD67916BDCDD400DB18F1 /* MCDateFormatter.cpp */; }; 4E37EDB145EED5003D1E3BEF /* udataswp.c in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7CBD1A70771B0001DCC3 /* udataswp.c */; }; - 4EAD4BA39FC8799BD288A9E9 /* MCONNTPFetchAllArticlesOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84D73774199C00AB005124E5 /* MCONNTPFetchAllArticlesOperation.mm */; }; 4F5C26CE37EF893A2E87131A /* MCSMTPOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA7D816A1386500778456 /* MCSMTPOperation.cpp */; }; - 4F8A2E85CAA953605FCA0989 /* MCOAbstractMessageRendererCallback.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F5B9FC16FED18500D9DABD /* MCOAbstractMessageRendererCallback.mm */; }; 4FDE7B5B08312093D99ACF0A /* MCIMAPStoreFlagsOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA81E16A29E3D00778456 /* MCIMAPStoreFlagsOperation.cpp */; }; - 50B141837659C00AC6A0D2A9 /* NSData+MCO.h in Headers */ = {isa = PBXBuildFile; fileRef = C6D42C1916AE03D6002BB4F9 /* NSData+MCO.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 50E957CF0372C5AF4937FF2D /* MCONNTPListNewsgroupsOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D73789199C0260005124E5 /* MCONNTPListNewsgroupsOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 516946BDC01C07D115717286 /* MCOAbstractMessage.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB23416EDAA17000DB34C /* MCOAbstractMessage.mm */; }; - 5194E2A305743C7BB52D45A9 /* MCOIMAPSearchOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C6F61F8817016AE60073032E /* MCOIMAPSearchOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; 51FA844FCC46F6322814574A /* MCIMAPFetchMessagesOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA81816A29AD400778456 /* MCIMAPFetchMessagesOperation.cpp */; }; - 52516BFEB3739590E779F6F5 /* MCAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6E1169E847800778456 /* MCAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 52B5AAA92CA3DF9321990EA2 /* MCIMAPSession.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6D7169E847800778456 /* MCIMAPSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 52C6B23AC49D49D0F0B6E16C /* MCONNTPFetchHeaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D7376B199C005A005124E5 /* MCONNTPFetchHeaderOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 52516BFEB3739590E779F6F5 /* MCAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6E1169E847800778456 /* MCAttachment.h */; }; + 52B5AAA92CA3DF9321990EA2 /* MCIMAPSession.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6D7169E847800778456 /* MCIMAPSession.h */; }; 52D9CF5450D8FD99DF6C860A /* MCSMTPDisconnectOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C608167317759967001F1018 /* MCSMTPDisconnectOperation.cpp */; }; 530B858E822277F7258D5FBD /* MCIMAPPart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6D1169E847800778456 /* MCIMAPPart.cpp */; }; - 530D70D8375F5127126519D9 /* MCAbstractPart.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA69B169E847800778456 /* MCAbstractPart.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 532ACF171DBC91AEA85C1C67 /* MCPOPOperationCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = C62C6EFC16A7CA1500737497 /* MCPOPOperationCallback.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5350425DE37B8D63971FA631 /* MCOIMAPFetchFoldersOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = F87F190816BB62690012652F /* MCOIMAPFetchFoldersOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 530D70D8375F5127126519D9 /* MCAbstractPart.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA69B169E847800778456 /* MCAbstractPart.h */; }; + 532ACF171DBC91AEA85C1C67 /* MCPOPOperationCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = C62C6EFC16A7CA1500737497 /* MCPOPOperationCallback.h */; }; 5361C01715EBFC70E99717D1 /* MCIMAPMessageRenderingOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DA0F1C79177C07B300F0D3B4 /* MCIMAPMessageRenderingOperation.cpp */; }; - 53A986F57B061F3C22C8E904 /* MCOPOPOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6A81BE11706905600882C15 /* MCOPOPOperation.mm */; }; 541318FB813F89BD5DC444BC /* unzip.c in Sources */ = {isa = PBXBuildFile; fileRef = C6E665B11796500B0063F2CF /* unzip.c */; }; 5437000F37EEC0D87875BD15 /* MCPOPDeleteMessagesOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C62C6EF616A7C6F500737497 /* MCPOPDeleteMessagesOperation.cpp */; }; - 54388E630085133508D68A96 /* MCNNTPOperationCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D7373F199BF887005124E5 /* MCNNTPOperationCallback.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 55AB302F89157418B44BB17E /* MCOIMAPNamespaceItem.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F5B9ED16FEA3C400D9DABD /* MCOIMAPNamespaceItem.mm */; }; + 54388E630085133508D68A96 /* MCNNTPOperationCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D7373F199BF887005124E5 /* MCNNTPOperationCallback.h */; }; 55DBD5240FC44C606C7DCECC /* MCAssert.c in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6A7169E847800778456 /* MCAssert.c */; }; - 55E72C7B9CC5334114B662BE /* MCOIMAPCopyMessagesOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F8017016A0D0073032E /* MCOIMAPCopyMessagesOperation.mm */; }; - 55FC99630CA7C7F8EBEEBF19 /* MCONNTPDisconnectOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D7378D199C02A8005124E5 /* MCONNTPDisconnectOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 560304E655EADF6B709B6C6C /* MCMailProvidersManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C6CF62C2175324F0006398B9 /* MCMailProvidersManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 56262E142C519E59E8E49E0C /* MCONNTPFetchHeaderOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84D7376C199C005A005124E5 /* MCONNTPFetchHeaderOperation.mm */; }; - 5642B88645291DCD5372E5FF /* MCIMAPAsyncSession.h in Headers */ = {isa = PBXBuildFile; fileRef = C62C6F0916A8F57700737497 /* MCIMAPAsyncSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 565A6ADC6EB2168A57C85958 /* MCIMAPSearchExpression.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6D5169E847800778456 /* MCIMAPSearchExpression.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 56668306EDC2255654BF7CF2 /* MCAccountValidator.h in Headers */ = {isa = PBXBuildFile; fileRef = 27478E7F1A764698004AE621 /* MCAccountValidator.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 569DF27CBDFF0B1E02274C10 /* MCOIndexSet.h in Headers */ = {isa = PBXBuildFile; fileRef = C6F5B9F216FEAC6C00D9DABD /* MCOIndexSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 56D89C9C666108D51690179A /* MCOSMTPLoginOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B0095CA1A00DDE700F84BC0 /* MCOSMTPLoginOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 574149F83EDABAAD4D520BFB /* NSDictionary+MCO.h in Headers */ = {isa = PBXBuildFile; fileRef = C6EB30F516B8C9480091F4F1 /* NSDictionary+MCO.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 576F048DA0BFAC3086A5E508 /* MCRange.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6B4169E847800778456 /* MCRange.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 560304E655EADF6B709B6C6C /* MCMailProvidersManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C6CF62C2175324F0006398B9 /* MCMailProvidersManager.h */; }; + 5642B88645291DCD5372E5FF /* MCIMAPAsyncSession.h in Headers */ = {isa = PBXBuildFile; fileRef = C62C6F0916A8F57700737497 /* MCIMAPAsyncSession.h */; }; + 565A6ADC6EB2168A57C85958 /* MCIMAPSearchExpression.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6D5169E847800778456 /* MCIMAPSearchExpression.h */; }; + 56668306EDC2255654BF7CF2 /* MCAccountValidator.h in Headers */ = {isa = PBXBuildFile; fileRef = 27478E7F1A764698004AE621 /* MCAccountValidator.h */; }; + 576F048DA0BFAC3086A5E508 /* MCRange.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6B4169E847800778456 /* MCRange.h */; }; 583938F86AAC3065CF7852C3 /* MCNull.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6D6F952171E5CB8006F5B28 /* MCNull.cpp */; }; - 58573A7F69BC56D50B7FF131 /* MCOIMAPSearchOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C6F61F8817016AE60073032E /* MCOIMAPSearchOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 585D1BA5ACBA63ADC5FD0701 /* MCOIMAPMessagePart.h in Headers */ = {isa = PBXBuildFile; fileRef = C6F5B9E316FEA27500D9DABD /* MCOIMAPMessagePart.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 58CE4104E99120870C50B1C7 /* MCAsyncPOP.h in Headers */ = {isa = PBXBuildFile; fileRef = C62C6EFD16A7DD0300737497 /* MCAsyncPOP.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 590FBDEE991AAA6DDE8C9156 /* MCIMAPFetchFoldersOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA7FB16A2959700778456 /* MCIMAPFetchFoldersOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 591F15D7F28AEE54A96AB497 /* MCAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6E1169E847800778456 /* MCAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 599DC18774D1FC23DD044B46 /* MCOAddress.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB24116EDAAF3000DB34C /* MCOAddress.mm */; }; - 59A56DD29C2F2E36EBFB090E /* MCIMAPCheckAccountOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA7F716A15A7800778456 /* MCIMAPCheckAccountOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 59E4B8AC8383595C973A8270 /* MCAddressDisplay.h in Headers */ = {isa = PBXBuildFile; fileRef = C63CD67816BDCDD400DB18F1 /* MCAddressDisplay.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 59F51DE4F3C1041A832317D1 /* MCOIMAPNamespaceItem.h in Headers */ = {isa = PBXBuildFile; fileRef = C6F5B9EC16FEA3C400D9DABD /* MCOIMAPNamespaceItem.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 58CE4104E99120870C50B1C7 /* MCAsyncPOP.h in Headers */ = {isa = PBXBuildFile; fileRef = C62C6EFD16A7DD0300737497 /* MCAsyncPOP.h */; }; + 590FBDEE991AAA6DDE8C9156 /* MCIMAPFetchFoldersOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA7FB16A2959700778456 /* MCIMAPFetchFoldersOperation.h */; }; + 591F15D7F28AEE54A96AB497 /* MCAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6E1169E847800778456 /* MCAttachment.h */; }; + 59A56DD29C2F2E36EBFB090E /* MCIMAPCheckAccountOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA7F716A15A7800778456 /* MCIMAPCheckAccountOperation.h */; }; + 59E4B8AC8383595C973A8270 /* MCAddressDisplay.h in Headers */ = {isa = PBXBuildFile; fileRef = C63CD67816BDCDD400DB18F1 /* MCAddressDisplay.h */; }; 5A20312A0E17B134BFB8A03B /* MCIMAPFetchContentOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA81B16A29DC100778456 /* MCIMAPFetchContentOperation.cpp */; }; - 5A3567771FB532760005BF97 /* MCOIMAPQuotaOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4B3C1BDD17ABF307008BBF4C /* MCOIMAPQuotaOperation.mm */; }; 5A9F19CAE4AE38D92DA6E6FD /* MCNNTPAsyncSession.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84D7372A199BF66C005124E5 /* MCNNTPAsyncSession.cpp */; }; - 5AA24015F0C189BF2B629098 /* MCMessageParserMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6D4FD3E19FB7534001F7E01 /* MCMessageParserMac.mm */; }; - 5AF2114BF777016AD8E49BE9 /* MCOIMAPFolderInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = C6F61F9D17016EA00073032E /* MCOIMAPFolderInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; 5AFB196AD715C42BAA585C22 /* MCIMAPCreateFolderOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA80616A2999800778456 /* MCIMAPCreateFolderOperation.cpp */; }; - 5B167A135C0B7B2AF8D22E73 /* NSSet+MCO.mm in Sources */ = {isa = PBXBuildFile; fileRef = C643F491189A3D59007EA2F7 /* NSSet+MCO.mm */; }; 5B39622D77ACA866E930893F /* MCObjectMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = C668E2C51735C8D500A2BB47 /* MCObjectMac.mm */; }; - 5B71C571BA37F70BF2C94D5D /* MCPOPNoopOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84B639E717F27EBD003B5BA2 /* MCPOPNoopOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5B71C571BA37F70BF2C94D5D /* MCPOPNoopOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84B639E717F27EBD003B5BA2 /* MCPOPNoopOperation.h */; }; 5B74DAAA466655CF34F48703 /* MCIMAPFolderStatusOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9EF9AB10175F319A0027FA3B /* MCIMAPFolderStatusOperation.cpp */; }; 5B9E3FB9EFE663DB4E66245D /* MCSizeFormatter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C63CD67D16BDCDD400DB18F1 /* MCSizeFormatter.cpp */; }; 5BD9B883B3E4CAEBB43CD509 /* csdetect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7C6A1A70771B0001DCC3 /* csdetect.cpp */; }; - 5BE0C29A3D053E2706044280 /* MCAbstractMultipart.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA699169E847800778456 /* MCAbstractMultipart.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5BE0C29A3D053E2706044280 /* MCAbstractMultipart.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA699169E847800778456 /* MCAbstractMultipart.h */; }; 5BE2AE83FAB9CCCC11F9976A /* MCMailProvidersManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6CF62C1175324F0006398B9 /* MCMailProvidersManager.cpp */; }; - 5C04EF7E088400E3A968D349 /* MCOMessageHeader.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB24416EDAAFE000DB34C /* MCOMessageHeader.mm */; }; - 5C31890ECB836A78BA8F4A6B /* MCOIMAPMultipart.h in Headers */ = {isa = PBXBuildFile; fileRef = C6F5B9E616FEA28600D9DABD /* MCOIMAPMultipart.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5C60F482DB2CFE116BB94ED5 /* MCOIMAPIdentity.h in Headers */ = {isa = PBXBuildFile; fileRef = C63D316017C92D8300A4D993 /* MCOIMAPIdentity.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5CBAB2ECE15269A85DE903A2 /* MCIMAPQuotaOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B3C1BE017ABF4BC008BBF4C /* MCIMAPQuotaOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5CBAB2ECE15269A85DE903A2 /* MCIMAPQuotaOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B3C1BE017ABF4BC008BBF4C /* MCIMAPQuotaOperation.h */; }; 5D03952E13B7236BD60534BE /* MCArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6A5169E847800778456 /* MCArray.cpp */; }; 5D380253F1CC55BD97B01520 /* MCAbstractMessagePart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA696169E847800778456 /* MCAbstractMessagePart.cpp */; }; 5D4230E93B57B396DDE289F8 /* MCAddressDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C63CD67716BDCDD400DB18F1 /* MCAddressDisplay.cpp */; }; - 5D7BAE3BF9AF302A46460729 /* MCIMAPSession.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6D7169E847800778456 /* MCIMAPSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5D7BAE3BF9AF302A46460729 /* MCIMAPSession.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6D7169E847800778456 /* MCIMAPSession.h */; }; 5DD54C9EBF93E9EF57E9120A /* cmemory.c in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7CEC1A7079300001DCC3 /* cmemory.c */; }; - 5E2860A01BBD8B59F38BFEFE /* MCOIMAPOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C623C58D16FE6B45001BBEFC /* MCOIMAPOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; 5E44C7C9D4447966F536A182 /* MCIMAPNamespaceItem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6CF169E847800778456 /* MCIMAPNamespaceItem.cpp */; }; 5E764A9567D410F3E3522A6D /* uenum.c in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7CBE1A70771B0001DCC3 /* uenum.c */; }; - 5E99F64225ADE38144D22CAC /* MCIMAPAsyncSession.h in Headers */ = {isa = PBXBuildFile; fileRef = C62C6F0916A8F57700737497 /* MCIMAPAsyncSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5EB30CEC902B4F8DB2633B42 /* MCNNTP.h in Headers */ = {isa = PBXBuildFile; fileRef = 8491899C18C93F92002063A3 /* MCNNTP.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5E99F64225ADE38144D22CAC /* MCIMAPAsyncSession.h in Headers */ = {isa = PBXBuildFile; fileRef = C62C6F0916A8F57700737497 /* MCIMAPAsyncSession.h */; }; + 5EB30CEC902B4F8DB2633B42 /* MCNNTP.h in Headers */ = {isa = PBXBuildFile; fileRef = 8491899C18C93F92002063A3 /* MCNNTP.h */; }; 5EB97FBAB7A58914351460B9 /* MCPOPCheckAccountOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6AC10FE17114DAF00B715B7 /* MCPOPCheckAccountOperation.cpp */; }; - 5EC6CD790AD21C4A79C2C09D /* MCOHTMLRendererDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = C623C58B16FE52C0001BBEFC /* MCOHTMLRendererDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F890CECD69F936D7BE6261B /* MCOIMAPCapabilityOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C6F61F9417016B310073032E /* MCOIMAPCapabilityOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5FEF7A557A99C90EDF9E5287 /* MCHTMLCleaner.h in Headers */ = {isa = PBXBuildFile; fileRef = C63CD69016BE566E00DB18F1 /* MCHTMLCleaner.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 602DB41F397CBB627B421C7D /* MCLog.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6B0169E847800778456 /* MCLog.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FEF7A557A99C90EDF9E5287 /* MCHTMLCleaner.h in Headers */ = {isa = PBXBuildFile; fileRef = C63CD69016BE566E00DB18F1 /* MCHTMLCleaner.h */; }; + 602DB41F397CBB627B421C7D /* MCLog.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6B0169E847800778456 /* MCLog.h */; }; 605FD6AE213EF24708EB67D2 /* MCIMAPFolderStatus.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9E774D881767C7F60065EB9B /* MCIMAPFolderStatus.cpp */; }; - 608F4B10E2EED58C7E22D054 /* MCOPOPMessageInfo.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6A81BFF1707CEE500882C15 /* MCOPOPMessageInfo.mm */; }; - 6092BF2908DA21353A3CD290 /* MCOAbstractMultipart.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB23A16EDAAC7000DB34C /* MCOAbstractMultipart.h */; settings = {ATTRIBUTES = (Public, ); }; }; 60B5C74F1F7D19F7DFD1C378 /* zip.c in Sources */ = {isa = PBXBuildFile; fileRef = C6E665B31796500B0063F2CF /* zip.c */; }; - 60CA4D8048CBB2E7FA93085F /* MCOIMAPFolder.h in Headers */ = {isa = PBXBuildFile; fileRef = C623C59116FE750D001BBEFC /* MCOIMAPFolder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6133B24FC61208B6D6709E10 /* MCONNTPOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84D73767199BFFFC005124E5 /* MCONNTPOperation.mm */; }; 614A927A0345AE6DA232DE0B /* ucln_in.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7CBC1A70771B0001DCC3 /* ucln_in.cpp */; }; 621178ADBAA0EE724603D62B /* MCZipMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = BD7C0F451B545CE2003337DF /* MCZipMac.mm */; }; 63214A7A1F87DD8668505C2C /* MCMessagePart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6E6169E847800778456 /* MCMessagePart.cpp */; }; @@ -426,127 +269,287 @@ 645D6A98256EB8375F6CCADF /* unzip.c in Sources */ = {isa = PBXBuildFile; fileRef = C6E665B11796500B0063F2CF /* unzip.c */; }; 64E2562DC1EAFBB6728EDC9D /* csrucode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7C701A70771B0001DCC3 /* csrucode.cpp */; }; 6540716D8AF9677D6622D49D /* MCIMAPConnectOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 943F1A9817D964F600F0C798 /* MCIMAPConnectOperation.cpp */; }; - 65DAF237BAE3238FAAC5977D /* MCOIMAPSearchExpression.h in Headers */ = {isa = PBXBuildFile; fileRef = C6F61F9717016B460073032E /* MCOIMAPSearchExpression.h */; settings = {ATTRIBUTES = (Public, ); }; }; 66662CF33D7C3F991F69AF32 /* MCMessageBuilder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6E2169E847800778456 /* MCMessageBuilder.cpp */; }; - 67027A677E0D4220451ECCED /* MCOIMAPFetchFoldersOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = F87F190816BB62690012652F /* MCOIMAPFetchFoldersOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 677E7BA4DDA151109DC61505 /* MCONetService.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6CF62B7175324CE006398B9 /* MCONetService.mm */; }; - 67A039B761C989C3D0EAF0BD /* MCONNTPOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84D73767199BFFFC005124E5 /* MCONNTPOperation.mm */; }; - 67C8A8E80F5E9396C813C4A0 /* MCOMessageHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB24316EDAAFD000DB34C /* MCOMessageHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 69880E44DFC638E391CA8840 /* MCIMAPFetchContentOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA81C16A29DC400778456 /* MCIMAPFetchContentOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 69880E44DFC638E391CA8840 /* MCIMAPFetchContentOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA81C16A29DC400778456 /* MCIMAPFetchContentOperation.h */; }; 69C47A83A8E38FC5A0E09D6B /* MCSMTPNoopOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B639E117F279BB003B5BA2 /* MCSMTPNoopOperation.cpp */; }; - 69FD95825496869A6E8CFB2D /* MCOIMAPFolderInfoOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F7A170169EE0073032E /* MCOIMAPFolderInfoOperation.mm */; }; - 6A05182A90EFE09B29C46FAA /* MCOSMTPLoginOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8B0095CB1A00DDE700F84BC0 /* MCOSMTPLoginOperation.mm */; }; 6AAC56D01B8C460F481A7E2D /* MCHTMLBodyRendererTemplateCallback.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DAD28C891783CFFC00F2BB8F /* MCHTMLBodyRendererTemplateCallback.cpp */; }; - 6ABB980C406E247553A1C522 /* MCHashMap.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6AE169E847800778456 /* MCHashMap.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6ABB980C406E247553A1C522 /* MCHashMap.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6AE169E847800778456 /* MCHashMap.h */; }; 6B478AC5B81BFD9620DDCC79 /* MCSMTPCheckAccountOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA7E816A154B000778456 /* MCSMTPCheckAccountOperation.cpp */; }; - 6B7FFE3EFE648D64BB96D067 /* MCOIMAPFolderInfoOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C6F61F79170169EE0073032E /* MCOIMAPFolderInfoOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; 6BEB2FA271B26274752D0E8B /* MCIMAPFolderStatus.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9E774D881767C7F60065EB9B /* MCIMAPFolderStatus.cpp */; }; - 6C942DED6FB84C7127ADA216 /* MCOIMAPCopyMessagesOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F8017016A0D0073032E /* MCOIMAPCopyMessagesOperation.mm */; }; - 6C978625C1AAB0BCB5EC0528 /* MCOMailProvider.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6CF62B3175324CE006398B9 /* MCOMailProvider.mm */; }; - 6CAA68845098E4C116E7AAD7 /* MCOPOPFetchHeaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C6A81BD81706903E00882C15 /* MCOPOPFetchHeaderOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; 6D087B36C2DEEBC1B737C044 /* MCNNTPGroupInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 849189A918C94986002063A3 /* MCNNTPGroupInfo.cpp */; }; 6D5B01F0487DE0DB5F8E747C /* MCOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6BE169E847800778456 /* MCOperation.cpp */; }; - 6D695BAAFE4012D4C3F3A03C /* MCIMAPFetchMessagesOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA81916A29ADB00778456 /* MCIMAPFetchMessagesOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6D6A34E4C03FACA811040B10 /* MCNNTPOperationCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D7373F199BF887005124E5 /* MCNNTPOperationCallback.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6DD55EC284E7CBF7413FAD92 /* MCOperationQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6C2169E847800778456 /* MCOperationQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6D695BAAFE4012D4C3F3A03C /* MCIMAPFetchMessagesOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA81916A29ADB00778456 /* MCIMAPFetchMessagesOperation.h */; }; + 6D6A34E4C03FACA811040B10 /* MCNNTPOperationCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D7373F199BF887005124E5 /* MCNNTPOperationCallback.h */; }; + 6DD55EC284E7CBF7413FAD92 /* MCOperationQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6C2169E847800778456 /* MCOperationQueue.h */; }; 6E419468F107A702054A3EA2 /* inputext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7CB91A70771B0001DCC3 /* inputext.cpp */; }; 6E851F1A1D71DDA3D29FBBC8 /* MCPOPFetchMessagesOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C62C6F0416A7E54200737497 /* MCPOPFetchMessagesOperation.cpp */; }; - 6E9EF73E21D281C9E21F5A0B /* MCMessageParserMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6D4FD3E19FB7534001F7E01 /* MCMessageParserMac.mm */; }; - 6F24645831A68DD3C7324610 /* MCIMAPFolderStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E774D871767C54E0065EB9B /* MCIMAPFolderStatus.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6FB8D6BAFD2B7A3C98698089 /* MCUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6B9169E847800778456 /* MCUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6FD6BF3896CE4A2B2DB624EF /* MCAsyncSMTP.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA7E316A149EF00778456 /* MCAsyncSMTP.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6FDF04F9ED8DCD86A5369918 /* MCOIMAPMoveMessagesOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8568A4191C610F6600FF4470 /* MCOIMAPMoveMessagesOperation.mm */; }; - 70008CC60AFB9D72874FEE6F /* MCAccountValidator.h in Headers */ = {isa = PBXBuildFile; fileRef = 27478E7F1A764698004AE621 /* MCAccountValidator.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6F24645831A68DD3C7324610 /* MCIMAPFolderStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E774D871767C54E0065EB9B /* MCIMAPFolderStatus.h */; }; + 6FB8D6BAFD2B7A3C98698089 /* MCUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6B9169E847800778456 /* MCUtils.h */; }; + 6FD6BF3896CE4A2B2DB624EF /* MCAsyncSMTP.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA7E316A149EF00778456 /* MCAsyncSMTP.h */; }; + 70008CC60AFB9D72874FEE6F /* MCAccountValidator.h in Headers */ = {isa = PBXBuildFile; fileRef = 27478E7F1A764698004AE621 /* MCAccountValidator.h */; }; 70A1E6C59071BFC4FA60DAA6 /* MCHTMLCleaner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C63CD68F16BE566D00DB18F1 /* MCHTMLCleaner.cpp */; }; - 70A24CB346F979125CD6A125 /* MCIMAPFolderStatusOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EF9AB0E175F30C20027FA3B /* MCIMAPFolderStatusOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 70A2D5C73554888BAB4BE590 /* MCOSMTPLoginOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8B0095CB1A00DDE700F84BC0 /* MCOSMTPLoginOperation.mm */; }; - 70C2DD2F974E5EF1B9F5C3BA /* MCIMAPFolderInfoOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C62C6ED716A398FA00737497 /* MCIMAPFolderInfoOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 70CF9C6A42EE4CFD9F0CE1D2 /* MCIMAPFetchMessagesOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA81916A29ADB00778456 /* MCIMAPFetchMessagesOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 71547D85D5F9A7138E3119D6 /* MCOIMAPFolderInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = C6F61F9D17016EA00073032E /* MCOIMAPFolderInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 70A24CB346F979125CD6A125 /* MCIMAPFolderStatusOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EF9AB0E175F30C20027FA3B /* MCIMAPFolderStatusOperation.h */; }; + 70C2DD2F974E5EF1B9F5C3BA /* MCIMAPFolderInfoOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C62C6ED716A398FA00737497 /* MCIMAPFolderInfoOperation.h */; }; + 70CF9C6A42EE4CFD9F0CE1D2 /* MCIMAPFetchMessagesOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA81916A29ADB00778456 /* MCIMAPFetchMessagesOperation.h */; }; 722BEC743188F66A40E621EE /* MCNetService.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6CF62C3175324F0006398B9 /* MCNetService.cpp */; }; 728B3A1B63AE74E68EFA4136 /* MCIMAPSession.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6D6169E847800778456 /* MCIMAPSession.cpp */; }; 73314F9F8391B02F4EA41A20 /* MCMailProvider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6CF62BF175324F0006398B9 /* MCMailProvider.cpp */; }; 739596D31ABFE8BAB028CD84 /* MCJSONParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6D6F965171FCF9F006F5B28 /* MCJSONParser.cpp */; }; 73AEEB3582E3E1D89998FF91 /* csrsbcs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7C6F1A70771B0001DCC3 /* csrsbcs.cpp */; }; - 73FE9FD5A62AE63B2C2D0A4F /* NSArray+MCO.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6EB30FC16B8E50F0091F4F1 /* NSArray+MCO.mm */; }; - 7408F42E99C35541080C11DB /* MCIMAPPart.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6D2169E847800778456 /* MCIMAPPart.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7408F42E99C35541080C11DB /* MCIMAPPart.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6D2169E847800778456 /* MCIMAPPart.h */; }; 7456401F6548E5F97E373D2F /* MCIMAPAsyncSession.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C62C6F0816A8F57000737497 /* MCIMAPAsyncSession.cpp */; }; - 748671E304E26CDF65B3C234 /* MCNNTPGroupInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 849189AA18C94986002063A3 /* MCNNTPGroupInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 748671E304E26CDF65B3C234 /* MCNNTPGroupInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 849189AA18C94986002063A3 /* MCNNTPGroupInfo.h */; }; 75DEED198A8C6658D671516D /* MCIMAPFolderInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C673EBEB1A46B41000A53F7F /* MCIMAPFolderInfo.cpp */; }; - 7612CCA03BDC33A1FA75B647 /* MCOIMAPCustomCommandOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 1845356E1BE23FBD000B0D87 /* MCOIMAPCustomCommandOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 76267B6C00281A721D111065 /* MCOPOP.h in Headers */ = {isa = PBXBuildFile; fileRef = C6A81BFB170781BC00882C15 /* MCOPOP.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 76D0ED6B0A023CD8C429A7CE /* MCOIMAPAppendMessageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C6F61F7C170169FB0073032E /* MCOIMAPAppendMessageOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; 76E07173C48ADAC316AB8AD9 /* MCOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6BE169E847800778456 /* MCOperation.cpp */; }; 77B4DC9F890092853F645F08 /* MCIMAPIdentity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C63D315A17C9155C00A4D993 /* MCIMAPIdentity.cpp */; }; - 7849DD2AAF0039824EAB4C9F /* MCOMailProvidersManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C6CF62B4175324CE006398B9 /* MCOMailProvidersManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 78A69024E148BE5615D38666 /* MCIMAPMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6C8169E847800778456 /* MCIMAPMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 78E7B733CB813DC82C65364B /* MCNetService.h in Headers */ = {isa = PBXBuildFile; fileRef = C6CF62C4175324F0006398B9 /* MCNetService.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 793CD139BFC584B6D74026E6 /* MCIMAPConnectOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 943F1A9917D964F600F0C798 /* MCIMAPConnectOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 78A69024E148BE5615D38666 /* MCIMAPMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6C8169E847800778456 /* MCIMAPMessage.h */; }; + 78E7B733CB813DC82C65364B /* MCNetService.h in Headers */ = {isa = PBXBuildFile; fileRef = C6CF62C4175324F0006398B9 /* MCNetService.h */; }; + 793CD139BFC584B6D74026E6 /* MCIMAPConnectOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 943F1A9917D964F600F0C798 /* MCIMAPConnectOperation.h */; }; 79450C97F762FED8C62ED18F /* MCErrorMessage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7C591A5B1C2C0001DCC3 /* MCErrorMessage.cpp */; }; - 79B8D92B571C7941FD9A259C /* MCOIMAPNoopOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8416A9A017F2871D00B3C7DA /* MCOIMAPNoopOperation.mm */; }; - 7A1E0824EDBAF10EE11DB6A7 /* MCOIMAPMultipart.h in Headers */ = {isa = PBXBuildFile; fileRef = C6F5B9E616FEA28600D9DABD /* MCOIMAPMultipart.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7A5D6C8936879398260E5B7B /* MCSMTPSession.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6EF169E847800778456 /* MCSMTPSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7B0B78FF7316D63CB2FB15D2 /* MCIMAPFetchContentOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA81C16A29DC400778456 /* MCIMAPFetchContentOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7A5D6C8936879398260E5B7B /* MCSMTPSession.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6EF169E847800778456 /* MCSMTPSession.h */; }; + 7B0B78FF7316D63CB2FB15D2 /* MCIMAPFetchContentOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA81C16A29DC400778456 /* MCIMAPFetchContentOperation.h */; }; 7BD9728D5C6AFBD72802E569 /* MCObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6B1169E847800778456 /* MCObject.cpp */; }; - 7C1D9BDC4BAF244EC85FD7F6 /* NSObject+MCO.h in Headers */ = {isa = PBXBuildFile; fileRef = C6EB30FF16B8E6E50091F4F1 /* NSObject+MCO.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7C91217FF23875F0DF406EC4 /* MCOIMAPFetchMessagesOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C6F61F8217016A200073032E /* MCOIMAPFetchMessagesOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; 7D7DD58E4ED5A38350C0D90A /* MCPOPOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C62C6EF916A7C93F00737497 /* MCPOPOperation.cpp */; }; - 7D9809C0EFFD01D562B7208D /* MCONNTPGroupInfo.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84D73792199C0511005124E5 /* MCONNTPGroupInfo.mm */; }; - 7DA3ECA876B858E0CA74C7C4 /* MCOIMAPFetchNamespaceOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F8F17016B090073032E /* MCOIMAPFetchNamespaceOperation.mm */; }; - 7DFD919902CB3E8722EDE260 /* NSData+MCO.h in Headers */ = {isa = PBXBuildFile; fileRef = C6D42C1916AE03D6002BB4F9 /* NSData+MCO.h */; settings = {ATTRIBUTES = (Public, ); }; }; 7E6AD96802C15B38EC9AD220 /* MCOperationQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6C1169E847800778456 /* MCOperationQueue.cpp */; }; - 7EE9C6F64230E5B718679ABC /* MCIMAPSearchOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA82516A29EE300778456 /* MCIMAPSearchOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7EE9C6F64230E5B718679ABC /* MCIMAPSearchOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA82516A29EE300778456 /* MCIMAPSearchOperation.h */; }; 7F417BA25150166CC1ABAA1C /* MCPOPCheckAccountOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6AC10FE17114DAF00B715B7 /* MCPOPCheckAccountOperation.cpp */; }; - 7F5B37D909E9B13DD1ECFF42 /* NSError+MCO.mm in Sources */ = {isa = PBXBuildFile; fileRef = C07ADFE43E22B38EFF23ADB5 /* NSError+MCO.mm */; }; - 7F796F927EF5CDFB3BB43E38 /* MCIndexSet.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB22D16E5C1EE000DB34C /* MCIndexSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7FF10DB1E9A6A55DC8DF1FFF /* MCDateFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = C63CD67A16BDCDD400DB18F1 /* MCDateFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7F796F927EF5CDFB3BB43E38 /* MCIndexSet.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB22D16E5C1EE000DB34C /* MCIndexSet.h */; }; + 7FF10DB1E9A6A55DC8DF1FFF /* MCDateFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = C63CD67A16BDCDD400DB18F1 /* MCDateFormatter.h */; }; 8019C3E16545C2DD0B0762FA /* MCIMAPMessagePart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6C9169E847800778456 /* MCIMAPMessagePart.cpp */; }; + 8029D8C61F96408F00BF5BC4 /* NSObjectCompat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8029D8C51F96408900BF5BC4 /* NSObjectCompat.swift */; }; + 8029D8C71F96409000BF5BC4 /* NSObjectCompat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8029D8C51F96408900BF5BC4 /* NSObjectCompat.swift */; }; 802A99231ECF83E500FFF0AB /* MailCore.h in Headers */ = {isa = PBXBuildFile; fileRef = 802A99221ECF838D00FFF0AB /* MailCore.h */; settings = {ATTRIBUTES = (Public, ); }; }; 802A99241ECF83E900FFF0AB /* MailCore.h in Headers */ = {isa = PBXBuildFile; fileRef = 802A99211ECF837800FFF0AB /* MailCore.h */; settings = {ATTRIBUTES = (Public, ); }; }; 8044EF5EB5A7CBF984D536C8 /* MCIMAPNoopOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B639EB17F280F3003B5BA2 /* MCIMAPNoopOperation.cpp */; }; - 8076B4B619ABE454926FAFFB /* MCAsyncSMTP.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA7E316A149EF00778456 /* MCAsyncSMTP.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8076B4B619ABE454926FAFFB /* MCAsyncSMTP.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA7E316A149EF00778456 /* MCAsyncSMTP.h */; }; 808B7BCFF308BB35D00D46DB /* MCSMTPSendWithDataOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA79C169F29A700778456 /* MCSMTPSendWithDataOperation.cpp */; }; 80C6D6A5646D1537926668C8 /* MCMD5.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6D6F950171E5CB8006F5B28 /* MCMD5.cpp */; }; - 80F639615326DC9F0CE40382 /* MCNNTPFetchHeaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D73736199BF7F2005124E5 /* MCNNTPFetchHeaderOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 810C1B6B1F0CD8D65A5AF339 /* MCOMessageBuilder.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB26016FD438F000DB34C /* MCOMessageBuilder.mm */; }; + 80F639615326DC9F0CE40382 /* MCNNTPFetchHeaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D73736199BF7F2005124E5 /* MCNNTPFetchHeaderOperation.h */; }; 810DB78D1C68F4E200017B12 /* MCIMAPFetchContentToFileOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 810DB78B1C68F4E200017B12 /* MCIMAPFetchContentToFileOperation.cpp */; }; 810DB78E1C68F4F000017B12 /* MCIMAPFetchContentToFileOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 810DB78B1C68F4E200017B12 /* MCIMAPFetchContentToFileOperation.cpp */; }; - 810DB7911C68F50600017B12 /* MCOIMAPFetchContentToFileOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 810DB7901C68F50600017B12 /* MCOIMAPFetchContentToFileOperation.mm */; }; - 810DB7921C68F50B00017B12 /* MCOIMAPFetchContentToFileOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 810DB7901C68F50600017B12 /* MCOIMAPFetchContentToFileOperation.mm */; }; 811320AF1D02388A004B7ECF /* MCDataDecoderUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 811320AE1D02388A004B7ECF /* MCDataDecoderUtils.cpp */; }; 811320B01D02388A004B7ECF /* MCDataDecoderUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 811320AE1D02388A004B7ECF /* MCDataDecoderUtils.cpp */; }; - 8123CA50FD8A349DE24C197E /* MCIterator.h in Headers */ = {isa = PBXBuildFile; fileRef = C6D6F96D1721028D006F5B28 /* MCIterator.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8123CA50FD8A349DE24C197E /* MCIterator.h in Headers */ = {isa = PBXBuildFile; fileRef = C6D6F96D1721028D006F5B28 /* MCIterator.h */; }; 81416BDE1CF8BB17000A4299 /* MCDataStreamDecoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 81416BDC1CF8BB17000A4299 /* MCDataStreamDecoder.cpp */; }; 81416BDF1CF8BB18000A4299 /* MCDataStreamDecoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 81416BDC1CF8BB17000A4299 /* MCDataStreamDecoder.cpp */; }; - 81766D65616D98E143BA8DA7 /* MCONNTPFetchOverviewOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84CFA98119F7153B00FE35D2 /* MCONNTPFetchOverviewOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; 817FA5271C69013C006146BD /* MCIMAPFetchContentToFileOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 810DB78C1C68F4E200017B12 /* MCIMAPFetchContentToFileOperation.h */; }; 817FA5281C69016A006146BD /* MCIMAPFetchContentToFileOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 810DB78C1C68F4E200017B12 /* MCIMAPFetchContentToFileOperation.h */; }; - 817FA5291C69037B006146BD /* MCOIMAPFetchContentToFileOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 810DB78F1C68F50600017B12 /* MCOIMAPFetchContentToFileOperation.h */; }; - 817FA52A1C69038F006146BD /* MCOIMAPFetchContentToFileOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 810DB78F1C68F50600017B12 /* MCOIMAPFetchContentToFileOperation.h */; }; - 8199FBEB19FAEA440040BBC3 /* MCOIMAPFetchParsedContentOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8199FBE819FAEA440040BBC3 /* MCOIMAPFetchParsedContentOperation.mm */; }; - 8199FBEC19FAEA440040BBC3 /* MCOIMAPFetchParsedContentOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8199FBE819FAEA440040BBC3 /* MCOIMAPFetchParsedContentOperation.mm */; }; 8199FBF119FAF1270040BBC3 /* MCIMAPFetchParsedContentOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8199FBEF19FAF1270040BBC3 /* MCIMAPFetchParsedContentOperation.cpp */; }; 8199FBF219FAF1270040BBC3 /* MCIMAPFetchParsedContentOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8199FBEF19FAF1270040BBC3 /* MCIMAPFetchParsedContentOperation.cpp */; }; - 8199FBF719FAF3AF0040BBC3 /* MCOIMAPFetchParsedContentOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8199FBE719FAEA440040BBC3 /* MCOIMAPFetchParsedContentOperation.h */; }; 8199FBF819FAF3AF0040BBC3 /* MCIMAPFetchParsedContentOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8199FBF019FAF1270040BBC3 /* MCIMAPFetchParsedContentOperation.h */; }; - 81B98D805260F395BDE27767 /* MCOObjectWrapper.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64FF39016B3C13000F8C162 /* MCOObjectWrapper.mm */; }; 81F11A31B597D4AEC49F253E /* MCIMAPRenameFolderOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA80016A295E200778456 /* MCIMAPRenameFolderOperation.cpp */; }; - 82EA488427194EB997FE4925 /* MCRFC822.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6EA169E847800778456 /* MCRFC822.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 831007A88AD8D070D172012D /* MCONNTP.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D73761199BFF80005124E5 /* MCONNTP.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 83138173490554374D150833 /* MCOIMAPFolderStatus.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9EF9AB07175F2EC60027FA3B /* MCOIMAPFolderStatus.mm */; }; + 82EA488427194EB997FE4925 /* MCRFC822.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6EA169E847800778456 /* MCRFC822.h */; }; 8332234CB1374156B6B55824 /* MCNNTPDisconnectOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84D73756199BFC8A005124E5 /* MCNNTPDisconnectOperation.cpp */; }; 83D255B1AC1A46181454B02A /* MCSMTPLoginOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B0095C71A00DDC500F84BC0 /* MCSMTPLoginOperation.cpp */; }; - 8416A99D17F284F400B3C7DA /* MCOSMTPNoopOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8416A99C17F284F400B3C7DA /* MCOSMTPNoopOperation.mm */; }; - 8416A99E17F284F400B3C7DA /* MCOSMTPNoopOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8416A99C17F284F400B3C7DA /* MCOSMTPNoopOperation.mm */; }; - 8416A9A117F2871D00B3C7DA /* MCOIMAPNoopOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8416A9A017F2871D00B3C7DA /* MCOIMAPNoopOperation.mm */; }; - 8416A9A217F2871D00B3C7DA /* MCOIMAPNoopOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8416A9A017F2871D00B3C7DA /* MCOIMAPNoopOperation.mm */; }; - 84391342199C3AA800FEFCDD /* MCONNTPListNewsgroupsOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 84D73789199C0260005124E5 /* MCONNTPListNewsgroupsOperation.h */; }; - 84391343199C3AAA00FEFCDD /* MCONNTPListNewsgroupsOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 84D73789199C0260005124E5 /* MCONNTPListNewsgroupsOperation.h */; }; - 84391345199C3AB400FEFCDD /* MCONNTPDisconnectOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 84D7378D199C02A8005124E5 /* MCONNTPDisconnectOperation.h */; }; - 84391346199C3ABB00FEFCDD /* MCONNTPGroupInfo.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 84D73791199C0511005124E5 /* MCONNTPGroupInfo.h */; }; - 84391347199C3ABD00FEFCDD /* MCONNTPGroupInfo.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 84D73791199C0511005124E5 /* MCONNTPGroupInfo.h */; }; - 843A6E1A891EE36B451FDED8 /* MCOAddress.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB24016EDAAF3000DB34C /* MCOAddress.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 84661F22525AB3AA3D5FD9D1 /* MCOIMAPAppendMessageOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F7D170169FB0073032E /* MCOIMAPAppendMessageOperation.mm */; }; + 8408C7111F2635030003A816 /* NSArray+MCO.h in Headers */ = {isa = PBXBuildFile; fileRef = 8408C6E31F26345C0003A816 /* NSArray+MCO.h */; }; + 8408C7131F2635090003A816 /* NSData+MCO.h in Headers */ = {isa = PBXBuildFile; fileRef = 8408C6E51F26345C0003A816 /* NSData+MCO.h */; }; + 8408C7151F26350D0003A816 /* NSDictionary+MCO.h in Headers */ = {isa = PBXBuildFile; fileRef = 8408C6E71F26345C0003A816 /* NSDictionary+MCO.h */; }; + 8408C71B1F26351C0003A816 /* NSObject+MCO.h in Headers */ = {isa = PBXBuildFile; fileRef = 8408C6ED1F26345C0003A816 /* NSObject+MCO.h */; }; + 8408C71D1F2635210003A816 /* NSSet+MCO.h in Headers */ = {isa = PBXBuildFile; fileRef = 8408C6EF1F26345C0003A816 /* NSSet+MCO.h */; }; + 8408C71F1F2635250003A816 /* NSString+MCO.h in Headers */ = {isa = PBXBuildFile; fileRef = 8408C6F11F26345C0003A816 /* NSString+MCO.h */; }; + 8408C7211F26352A0003A816 /* NSValue+MCO.h in Headers */ = {isa = PBXBuildFile; fileRef = 8408C6F31F26345C0003A816 /* NSValue+MCO.h */; }; + 8408C7251F2635930003A816 /* COperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B110A71D92924C0079C769 /* COperation.cpp */; }; + 8408C7271F2635930003A816 /* CAbstractMessage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8498CCAA1D9511FC0074217C /* CAbstractMessage.cpp */; }; + 8408C7291F2635930003A816 /* CAbstractMessagePart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8498CCAD1D9519B40074217C /* CAbstractMessagePart.cpp */; }; + 8408C72B1F2635930003A816 /* CAbstractMultipart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8498CCB01D9520660074217C /* CAbstractMultipart.cpp */; }; + 8408C72E1F2635930003A816 /* CAddress.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84ECAD7E1D943B11006261FD /* CAddress.cpp */; }; + 8408C7301F2635930003A816 /* CAbstractPart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84ECAD761D93E9CD006261FD /* CAbstractPart.cpp */; }; + 8408C7321F2635930003A816 /* CMessageHeader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84ECAD7A1D93FF9E006261FD /* CMessageHeader.cpp */; }; + 8408C7341F2635930003A816 /* CAbstractMessageRendererCallback.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A929171DA7BABF0020205B /* CAbstractMessageRendererCallback.cpp */; }; + 8408C7361F2635930003A816 /* CIMAPFolder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84E3DB471D9BB29E003B598F /* CIMAPFolder.cpp */; }; + 8408C7381F2635930003A816 /* CIMAPMessage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84E3DB4D1D9BBDAD003B598F /* CIMAPMessage.cpp */; }; + 8408C73A1F2635930003A816 /* CIMAPMessagePart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84E3DB531D9BDB41003B598F /* CIMAPMessagePart.cpp */; }; + 8408C73C1F2635930003A816 /* CIMAPMultipart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84CD9BDC1D9BE3AF000622CB /* CIMAPMultipart.cpp */; }; + 8408C73E1F2635930003A816 /* CIMAPNamespace.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F7B4BD1D9178D3005F83E8 /* CIMAPNamespace.cpp */; }; + 8408C7401F2635930003A816 /* CIMAPNamespaceItem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84CD9BE11D9BFB37000622CB /* CIMAPNamespaceItem.cpp */; }; + 8408C7421F2635930003A816 /* CIMAPPart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8494D6CF1D9C03BB009EEE5E /* CIMAPPart.cpp */; }; + 8408C7441F2635930003A816 /* CIMAPFolderInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8494D6D51D9C082E009EEE5E /* CIMAPFolderInfo.cpp */; }; + 8408C7461F2635930003A816 /* CIMAPFolderStatus.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8494D6DD1D9C0FE9009EEE5E /* CIMAPFolderStatus.cpp */; }; + 8408C7481F2635930003A816 /* CIMAPSearchExpression.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8494D6E51D9C2274009EEE5E /* CIMAPSearchExpression.cpp */; }; + 8408C74A1F2635930003A816 /* CIMAPBaseOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B110AF1D929B560079C769 /* CIMAPBaseOperation.cpp */; }; + 8408C74C1F2635930003A816 /* CIMAPAppendMessageOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F7B45A1D915D88005F83E8 /* CIMAPAppendMessageOperation.cpp */; }; + 8408C74E1F2635930003A816 /* CIMAPCopyMessagesOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F7B45E1D915D88005F83E8 /* CIMAPCopyMessagesOperation.cpp */; }; + 8408C7501F2635930003A816 /* CIMAPFetchContentOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F7B4601D915D88005F83E8 /* CIMAPFetchContentOperation.cpp */; }; + 8408C7521F2635930003A816 /* CIMAPFetchMessagesOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F7B4621D915D88005F83E8 /* CIMAPFetchMessagesOperation.cpp */; }; + 8408C7541F2635930003A816 /* CIMAPFolderInfoOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F7B4641D915D88005F83E8 /* CIMAPFolderInfoOperation.cpp */; }; + 8408C7561F2635930003A816 /* CIMAPFolderStatusOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F7B4661D915D88005F83E8 /* CIMAPFolderStatusOperation.cpp */; }; + 8408C75A1F2635930003A816 /* CIMAPIdleOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84E3DB371D9A7C93003B598F /* CIMAPIdleOperation.cpp */; }; + 8408C75C1F2635930003A816 /* CIMAPAsyncSession.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F7B45C1D915D88005F83E8 /* CIMAPAsyncSession.cpp */; }; + 8408C75E1F2635930003A816 /* CIMAPFetchFoldersOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84E1E0251DF5D33B00D45A31 /* CIMAPFetchFoldersOperation.cpp */; }; + 8408C7601F2635930003A816 /* CIMAPCapabilityOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8491BB611DF6E74800E6D679 /* CIMAPCapabilityOperation.cpp */; }; + 8408C7621F2635930003A816 /* CIMAPCheckAccountOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8491BB651DF6F64400E6D679 /* CIMAPCheckAccountOperation.cpp */; }; + 8408C7641F2635930003A816 /* CIMAPCustomCommandOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8491BB6B1DF7028C00E6D679 /* CIMAPCustomCommandOperation.cpp */; }; + 8408C7661F2635930003A816 /* CIMAPFetchContentToFileOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84D344D91DF7090700B81A94 /* CIMAPFetchContentToFileOperation.cpp */; }; + 8408C7681F2635930003A816 /* CIMAPFetchNamespaceOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84D344DF1DF712D500B81A94 /* CIMAPFetchNamespaceOperation.cpp */; }; + 8408C76A1F2635930003A816 /* CIMAPFetchParsedContentOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 842D79991DF801AE00F9424C /* CIMAPFetchParsedContentOperation.cpp */; }; + 8408C76C1F2635930003A816 /* CIMAPMessageRenderingOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 842D799D1DF8033100F9424C /* CIMAPMessageRenderingOperation.cpp */; }; + 8408C76E1F2635930003A816 /* CIMAPMoveMessagesOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 842D79A11DF8049D00F9424C /* CIMAPMoveMessagesOperation.cpp */; }; + 8408C7701F2635930003A816 /* CIMAPQuotaOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 842D79A51DF8080200F9424C /* CIMAPQuotaOperation.cpp */; }; + 8408C7721F2635930003A816 /* CIMAPIdentity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 842D79B31DF876B600F9424C /* CIMAPIdentity.cpp */; }; + 8408C7741F2635930003A816 /* CIMAPIdentityOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 842D79B91DF881A000F9424C /* CIMAPIdentityOperation.cpp */; }; + 8408C7761F2635930003A816 /* CSMTPSession.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8920E1DA268F8008FD1C4 /* CSMTPSession.cpp */; }; + 8408C7781F2635930003A816 /* CSMTPOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B892121DA27A54008FD1C4 /* CSMTPOperation.cpp */; }; + 8408C77A1F2635930003A816 /* CArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F7B4101D915997005F83E8 /* CArray.cpp */; }; + 8408C77C1F2635930003A816 /* CIndexSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F7B4121D915997005F83E8 /* CIndexSet.cpp */; }; + 8408C77E1F2635930003A816 /* CObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F7B4141D915997005F83E8 /* CObject.cpp */; }; + 8408C7801F2635930003A816 /* CDictionary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84E3DB3F1D9AA676003B598F /* CDictionary.cpp */; }; + 8408C7BB1F2637220003A816 /* COperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84B110A81D92924C0079C769 /* COperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7BC1F2637220003A816 /* CAbstractMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = 8498CCAB1D9511FC0074217C /* CAbstractMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7BD1F2637220003A816 /* CAbstractMessagePart.h in Headers */ = {isa = PBXBuildFile; fileRef = 8498CCAE1D9519B40074217C /* CAbstractMessagePart.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7BE1F2637220003A816 /* CAbstractMultipart.h in Headers */ = {isa = PBXBuildFile; fileRef = 8498CCB11D9520660074217C /* CAbstractMultipart.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7BF1F2637220003A816 /* CMessageConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F7B43D1D9159E9005F83E8 /* CMessageConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7C01F2637220003A816 /* CAddress.h in Headers */ = {isa = PBXBuildFile; fileRef = 84ECAD7F1D943B11006261FD /* CAddress.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7C11F2637220003A816 /* CAbstractPart.h in Headers */ = {isa = PBXBuildFile; fileRef = 84ECAD771D93E9CD006261FD /* CAbstractPart.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7C31F2637220003A816 /* CMessageHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 84ECAD7B1D93FF9E006261FD /* CMessageHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7C41F2637220003A816 /* CAbstractMessageRendererCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A929181DA7BABF0020205B /* CAbstractMessageRendererCallback.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7C51F2637220003A816 /* CIMAPFolder.h in Headers */ = {isa = PBXBuildFile; fileRef = 84E3DB481D9BB29E003B598F /* CIMAPFolder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7C61F2637220003A816 /* CIMAPMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = 84E3DB4E1D9BBDAD003B598F /* CIMAPMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7C71F2637220003A816 /* CIMAPMessagePart.h in Headers */ = {isa = PBXBuildFile; fileRef = 84E3DB541D9BDB41003B598F /* CIMAPMessagePart.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7C81F2637220003A816 /* CIMAPMultipart.h in Headers */ = {isa = PBXBuildFile; fileRef = 84CD9BDD1D9BE3AF000622CB /* CIMAPMultipart.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7C91F2637220003A816 /* CIMAPNamespace.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F7B4681D915D88005F83E8 /* CIMAPNamespace.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7CA1F2637220003A816 /* CIMAPNamespaceItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 84CD9BE21D9BFB37000622CB /* CIMAPNamespaceItem.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7CB1F2637220003A816 /* CIMAPPart.h in Headers */ = {isa = PBXBuildFile; fileRef = 8494D6D01D9C03BB009EEE5E /* CIMAPPart.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7CC1F2637220003A816 /* CIMAPFolderInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 8494D6D61D9C082E009EEE5E /* CIMAPFolderInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7CD1F2637220003A816 /* CIMAPFolderStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 8494D6DE1D9C0FE9009EEE5E /* CIMAPFolderStatus.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7CF1F2637220003A816 /* CIMAPSearchExpression.h in Headers */ = {isa = PBXBuildFile; fileRef = 8494D6E61D9C2274009EEE5E /* CIMAPSearchExpression.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7D01F2637220003A816 /* CIMAPBaseOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84B110B01D929B560079C769 /* CIMAPBaseOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7D11F2637220003A816 /* CIMAPAppendMessageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F7B45B1D915D88005F83E8 /* CIMAPAppendMessageOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7D21F2637220003A816 /* CIMAPCopyMessagesOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F7B45F1D915D88005F83E8 /* CIMAPCopyMessagesOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7D41F2637220003A816 /* CIMAPFetchContentOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F7B4611D915D88005F83E8 /* CIMAPFetchContentOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7D61F2637220003A816 /* CIMAPFetchMessagesOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F7B4631D915D88005F83E8 /* CIMAPFetchMessagesOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7D71F2637220003A816 /* CIMAPFolderInfoOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F7B4651D915D88005F83E8 /* CIMAPFolderInfoOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7D81F2637220003A816 /* CIMAPFolderStatusOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F7B4671D915D88005F83E8 /* CIMAPFolderStatusOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7DB1F2637220003A816 /* CIMAPIdleOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84E3DB381D9A7C93003B598F /* CIMAPIdleOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7DC1F2637220003A816 /* CIMAPAsyncSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F7B45D1D915D88005F83E8 /* CIMAPAsyncSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7DE1F2637220003A816 /* CIMAPFetchFoldersOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84E1E0261DF5D33B00D45A31 /* CIMAPFetchFoldersOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7DF1F2637220003A816 /* CIMAPCapabilityOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8491BB621DF6E74800E6D679 /* CIMAPCapabilityOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7E11F2637220003A816 /* CIMAPCheckAccountOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8491BB661DF6F64400E6D679 /* CIMAPCheckAccountOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7E21F2637220003A816 /* CIMAPCustomCommandOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8491BB6C1DF7028C00E6D679 /* CIMAPCustomCommandOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7E41F2637220003A816 /* CIMAPFetchContentToFileOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D344DA1DF7090700B81A94 /* CIMAPFetchContentToFileOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7E61F2637220003A816 /* CIMAPFetchNamespaceOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D344E01DF712D500B81A94 /* CIMAPFetchNamespaceOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7E81F2637220003A816 /* CIMAPFetchParsedContentOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 842D799A1DF801AE00F9424C /* CIMAPFetchParsedContentOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7E91F2637220003A816 /* CIMAPMessageRenderingOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 842D799E1DF8033100F9424C /* CIMAPMessageRenderingOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7EA1F2637220003A816 /* CIMAPMoveMessagesOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 842D79A21DF8049D00F9424C /* CIMAPMoveMessagesOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7EB1F2637220003A816 /* CIMAPQuotaOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 842D79A61DF8080200F9424C /* CIMAPQuotaOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7EC1F2637220003A816 /* CIMAPIdentity.h in Headers */ = {isa = PBXBuildFile; fileRef = 842D79B41DF876B600F9424C /* CIMAPIdentity.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7ED1F2637220003A816 /* CIMAPIdentityOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 842D79BA1DF881A000F9424C /* CIMAPIdentityOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7EE1F2637220003A816 /* CSMTPSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 84B8920F1DA268F8008FD1C4 /* CSMTPSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7EF1F2637220003A816 /* CSMTPOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84B892131DA27A54008FD1C4 /* CSMTPOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7F01F2637220003A816 /* CArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F7B4111D915997005F83E8 /* CArray.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7F11F2637220003A816 /* CIndexSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F7B4131D915997005F83E8 /* CIndexSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7F21F2637220003A816 /* CObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F7B4151D915997005F83E8 /* CObject.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7F31F2637220003A816 /* CDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = 84E3DB401D9AA676003B598F /* CDictionary.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7F41F2637220003A816 /* CBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F7B40D1D915985005F83E8 /* CBase.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C7F51F2637220003A816 /* CBase+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 847530611F2230B30011100D /* CBase+Private.h */; }; + 8408C7F61F2637220003A816 /* CCore.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F7B40E1D915985005F83E8 /* CCore.h */; }; + 8408C7FE1F26378D0003A816 /* CAttachment.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8408C7F81F26378D0003A816 /* CAttachment.cpp */; }; + 8408C7FF1F26378D0003A816 /* CAttachment.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8408C7F81F26378D0003A816 /* CAttachment.cpp */; }; + 8408C8001F26378D0003A816 /* CAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = 8408C7F91F26378D0003A816 /* CAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C8011F26378D0003A816 /* CAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = 8408C7F91F26378D0003A816 /* CAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C8021F26378D0003A816 /* CMessageBuilder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8408C7FA1F26378D0003A816 /* CMessageBuilder.cpp */; }; + 8408C8031F26378D0003A816 /* CMessageBuilder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8408C7FA1F26378D0003A816 /* CMessageBuilder.cpp */; }; + 8408C8041F26378D0003A816 /* CMessageBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 8408C7FB1F26378D0003A816 /* CMessageBuilder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C8051F26378D0003A816 /* CMessageBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 8408C7FB1F26378D0003A816 /* CMessageBuilder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C8061F26378D0003A816 /* CMessageParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8408C7FC1F26378D0003A816 /* CMessageParser.cpp */; }; + 8408C8071F26378D0003A816 /* CMessageParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8408C7FC1F26378D0003A816 /* CMessageParser.cpp */; }; + 8408C8081F26378D0003A816 /* CMessageParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 8408C7FD1F26378D0003A816 /* CMessageParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C8091F26378D0003A816 /* CMessageParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 8408C7FD1F26378D0003A816 /* CMessageParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408C81F1F263AD50003A816 /* COperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B110A71D92924C0079C769 /* COperation.cpp */; }; + 8408C8201F263AD50003A816 /* CAbstractMessage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8498CCAA1D9511FC0074217C /* CAbstractMessage.cpp */; }; + 8408C8211F263AD50003A816 /* CAbstractMessagePart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8498CCAD1D9519B40074217C /* CAbstractMessagePart.cpp */; }; + 8408C8221F263AD50003A816 /* CAbstractMultipart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8498CCB01D9520660074217C /* CAbstractMultipart.cpp */; }; + 8408C8231F263AD50003A816 /* CAddress.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84ECAD7E1D943B11006261FD /* CAddress.cpp */; }; + 8408C8241F263AD50003A816 /* CAbstractPart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84ECAD761D93E9CD006261FD /* CAbstractPart.cpp */; }; + 8408C8251F263AD50003A816 /* CMessageHeader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84ECAD7A1D93FF9E006261FD /* CMessageHeader.cpp */; }; + 8408C8261F263AD50003A816 /* CAbstractMessageRendererCallback.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A929171DA7BABF0020205B /* CAbstractMessageRendererCallback.cpp */; }; + 8408C8271F263AD50003A816 /* CIMAPFolder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84E3DB471D9BB29E003B598F /* CIMAPFolder.cpp */; }; + 8408C8281F263AD50003A816 /* CIMAPMessage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84E3DB4D1D9BBDAD003B598F /* CIMAPMessage.cpp */; }; + 8408C8291F263AD50003A816 /* CIMAPMessagePart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84E3DB531D9BDB41003B598F /* CIMAPMessagePart.cpp */; }; + 8408C82A1F263AD50003A816 /* CIMAPMultipart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84CD9BDC1D9BE3AF000622CB /* CIMAPMultipart.cpp */; }; + 8408C82B1F263AD50003A816 /* CIMAPNamespace.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F7B4BD1D9178D3005F83E8 /* CIMAPNamespace.cpp */; }; + 8408C82C1F263AD50003A816 /* CIMAPNamespaceItem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84CD9BE11D9BFB37000622CB /* CIMAPNamespaceItem.cpp */; }; + 8408C82D1F263AD50003A816 /* CIMAPPart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8494D6CF1D9C03BB009EEE5E /* CIMAPPart.cpp */; }; + 8408C82E1F263AD50003A816 /* CIMAPFolderInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8494D6D51D9C082E009EEE5E /* CIMAPFolderInfo.cpp */; }; + 8408C82F1F263AD50003A816 /* CIMAPFolderStatus.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8494D6DD1D9C0FE9009EEE5E /* CIMAPFolderStatus.cpp */; }; + 8408C8301F263AD50003A816 /* CIMAPSearchExpression.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8494D6E51D9C2274009EEE5E /* CIMAPSearchExpression.cpp */; }; + 8408C8311F263AD50003A816 /* CIMAPBaseOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B110AF1D929B560079C769 /* CIMAPBaseOperation.cpp */; }; + 8408C8321F263AD50003A816 /* CIMAPAppendMessageOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F7B45A1D915D88005F83E8 /* CIMAPAppendMessageOperation.cpp */; }; + 8408C8331F263AD50003A816 /* CIMAPCopyMessagesOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F7B45E1D915D88005F83E8 /* CIMAPCopyMessagesOperation.cpp */; }; + 8408C8341F263AD50003A816 /* CIMAPFetchContentOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F7B4601D915D88005F83E8 /* CIMAPFetchContentOperation.cpp */; }; + 8408C8351F263AD50003A816 /* CIMAPFetchMessagesOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F7B4621D915D88005F83E8 /* CIMAPFetchMessagesOperation.cpp */; }; + 8408C8361F263AD50003A816 /* CIMAPFolderInfoOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F7B4641D915D88005F83E8 /* CIMAPFolderInfoOperation.cpp */; }; + 8408C8371F263AD50003A816 /* CIMAPFolderStatusOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F7B4661D915D88005F83E8 /* CIMAPFolderStatusOperation.cpp */; }; + 8408C8391F263AD50003A816 /* CIMAPIdleOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84E3DB371D9A7C93003B598F /* CIMAPIdleOperation.cpp */; }; + 8408C83A1F263AD50003A816 /* CIMAPAsyncSession.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F7B45C1D915D88005F83E8 /* CIMAPAsyncSession.cpp */; }; + 8408C83B1F263AD50003A816 /* CIMAPFetchFoldersOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84E1E0251DF5D33B00D45A31 /* CIMAPFetchFoldersOperation.cpp */; }; + 8408C83C1F263AD50003A816 /* CIMAPCapabilityOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8491BB611DF6E74800E6D679 /* CIMAPCapabilityOperation.cpp */; }; + 8408C83D1F263AD50003A816 /* CIMAPCheckAccountOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8491BB651DF6F64400E6D679 /* CIMAPCheckAccountOperation.cpp */; }; + 8408C83E1F263AD50003A816 /* CIMAPCustomCommandOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8491BB6B1DF7028C00E6D679 /* CIMAPCustomCommandOperation.cpp */; }; + 8408C83F1F263AD50003A816 /* CIMAPFetchContentToFileOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84D344D91DF7090700B81A94 /* CIMAPFetchContentToFileOperation.cpp */; }; + 8408C8401F263AD50003A816 /* CIMAPFetchNamespaceOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84D344DF1DF712D500B81A94 /* CIMAPFetchNamespaceOperation.cpp */; }; + 8408C8411F263AD50003A816 /* CIMAPFetchParsedContentOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 842D79991DF801AE00F9424C /* CIMAPFetchParsedContentOperation.cpp */; }; + 8408C8421F263AD50003A816 /* CIMAPMessageRenderingOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 842D799D1DF8033100F9424C /* CIMAPMessageRenderingOperation.cpp */; }; + 8408C8431F263AD50003A816 /* CIMAPMoveMessagesOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 842D79A11DF8049D00F9424C /* CIMAPMoveMessagesOperation.cpp */; }; + 8408C8441F263AD50003A816 /* CIMAPQuotaOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 842D79A51DF8080200F9424C /* CIMAPQuotaOperation.cpp */; }; + 8408C8451F263AD50003A816 /* CIMAPIdentity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 842D79B31DF876B600F9424C /* CIMAPIdentity.cpp */; }; + 8408C8461F263AD50003A816 /* CIMAPIdentityOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 842D79B91DF881A000F9424C /* CIMAPIdentityOperation.cpp */; }; + 8408C8471F263AD50003A816 /* CSMTPSession.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8920E1DA268F8008FD1C4 /* CSMTPSession.cpp */; }; + 8408C8481F263AD50003A816 /* CSMTPOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B892121DA27A54008FD1C4 /* CSMTPOperation.cpp */; }; + 8408C8491F263AD50003A816 /* CArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F7B4101D915997005F83E8 /* CArray.cpp */; }; + 8408C84A1F263AD50003A816 /* CIndexSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F7B4121D915997005F83E8 /* CIndexSet.cpp */; }; + 8408C84B1F263AD50003A816 /* CObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F7B4141D915997005F83E8 /* CObject.cpp */; }; + 8408C84C1F263AD50003A816 /* CDictionary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84E3DB3F1D9AA676003B598F /* CDictionary.cpp */; }; + 840CB4531F274AD60068E8E6 /* CIMAPSearchOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840CB4501F274AD60068E8E6 /* CIMAPSearchOperation.cpp */; }; + 840CB4541F274AD60068E8E6 /* CIMAPSearchOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 840CB4511F274AD60068E8E6 /* CIMAPSearchOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 840CB4551F274AD60068E8E6 /* CIMAPSearchOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 840CB4511F274AD60068E8E6 /* CIMAPSearchOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 841E64F51F6833EA007BB736 /* MailCore.framework in Resources */ = {isa = PBXBuildFile; fileRef = C6BD288D170BD71100A91AC1 /* MailCore.framework */; }; + 841E64FF1F683440007BB736 /* MailCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C6BD288D170BD71100A91AC1 /* MailCore.framework */; }; + 8435684F1F45A2F200FCFF33 /* CAbstractMessageRendererCallbackWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 84C95C1D1F3208580056A543 /* CAbstractMessageRendererCallbackWrapper.h */; }; + 843568501F45A2F200FCFF33 /* CAbstractMessageRendererCallbackWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 84C95C1D1F3208580056A543 /* CAbstractMessageRendererCallbackWrapper.h */; }; + 843E49FC1F2F9A4700D78022 /* ConnectionLoggerHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 843E49FB1F2F9A4700D78022 /* ConnectionLoggerHelper.swift */; }; + 843E49FD1F2F9A4700D78022 /* ConnectionLoggerHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 843E49FB1F2F9A4700D78022 /* ConnectionLoggerHelper.swift */; }; + 843E4A821F30716300D78022 /* MCOObjectWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 843E4A7E1F306F2600D78022 /* MCOObjectWrapper.h */; }; + 843E4A841F30716600D78022 /* MCOObjectWrapper.mm in Sources */ = {isa = PBXBuildFile; fileRef = 843E4A7F1F306F2600D78022 /* MCOObjectWrapper.mm */; }; + 843E4A871F30838500D78022 /* MailCoreString.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 843E4A851F30838500D78022 /* MailCoreString.cpp */; }; + 843E4A881F30838500D78022 /* MailCoreString.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 843E4A851F30838500D78022 /* MailCoreString.cpp */; }; + 843E4A891F30838500D78022 /* MailCoreString.h in Headers */ = {isa = PBXBuildFile; fileRef = 843E4A861F30838500D78022 /* MailCoreString.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 843E4A8A1F30838500D78022 /* MailCoreString.h in Headers */ = {isa = PBXBuildFile; fileRef = 843E4A861F30838500D78022 /* MailCoreString.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 843E58151F6927DA00AE681B /* DispatchQueue+Mailcore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 843E58141F6927D900AE681B /* DispatchQueue+Mailcore.swift */; }; + 843E58161F6927DA00AE681B /* DispatchQueue+Mailcore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 843E58141F6927D900AE681B /* DispatchQueue+Mailcore.swift */; }; + 843E58171F69554300AE681B /* data in Resources */ = {isa = PBXBuildFile; fileRef = C6B5B08F19F63542001352A6 /* data */; }; + 843EA47C1F795A5400861123 /* LibetpanHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 843EA47B1F795A5400861123 /* LibetpanHelper.swift */; }; + 843EA47D1F795A5400861123 /* LibetpanHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 843EA47B1F795A5400861123 /* LibetpanHelper.swift */; }; + 843EA47F1F7966A500861123 /* LibetpanHelperTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 843EA47E1F7966A400861123 /* LibetpanHelperTests.swift */; }; + 843EA4801F79730400861123 /* MCLibetpan.h in Headers */ = {isa = PBXBuildFile; fileRef = BD63713A177DFF080094121B /* MCLibetpan.h */; }; + 843EA4811F79730500861123 /* MCLibetpan.h in Headers */ = {isa = PBXBuildFile; fileRef = BD63713A177DFF080094121B /* MCLibetpan.h */; }; + 84424A7E1F274CBA009B953B /* CIMAPSearchOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840CB4501F274AD60068E8E6 /* CIMAPSearchOperation.cpp */; }; + 844D9CE01F28F1F500E470A8 /* CMessagePart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 844D9CDE1F28F1F500E470A8 /* CMessagePart.cpp */; }; + 844D9CE11F28F1F500E470A8 /* CMessagePart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 844D9CDE1F28F1F500E470A8 /* CMessagePart.cpp */; }; + 844D9CE21F28F1F500E470A8 /* CMessagePart.h in Headers */ = {isa = PBXBuildFile; fileRef = 844D9CDF1F28F1F500E470A8 /* CMessagePart.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 844D9CE31F28F1F500E470A8 /* CMessagePart.h in Headers */ = {isa = PBXBuildFile; fileRef = 844D9CDF1F28F1F500E470A8 /* CMessagePart.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8458F9521F3F505B0066C70C /* MCOObjectWrapper.mm in Sources */ = {isa = PBXBuildFile; fileRef = 843E4A7F1F306F2600D78022 /* MCOObjectWrapper.mm */; }; + 8458F9531F3F505E0066C70C /* MCOObjectWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 843E4A7E1F306F2600D78022 /* MCOObjectWrapper.h */; }; + 845FB8421F29031400A29DA8 /* CMailProvidersManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 845FB8401F29031400A29DA8 /* CMailProvidersManager.cpp */; }; + 845FB8431F29031400A29DA8 /* CMailProvidersManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 845FB8401F29031400A29DA8 /* CMailProvidersManager.cpp */; }; + 845FB8441F29031400A29DA8 /* CMailProvidersManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 845FB8411F29031400A29DA8 /* CMailProvidersManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 845FB8451F29031400A29DA8 /* CMailProvidersManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 845FB8411F29031400A29DA8 /* CMailProvidersManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 845FB8481F29057A00A29DA8 /* CNetService.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 845FB8461F29057A00A29DA8 /* CNetService.cpp */; }; + 845FB8491F29057A00A29DA8 /* CNetService.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 845FB8461F29057A00A29DA8 /* CNetService.cpp */; }; + 845FB84A1F29057A00A29DA8 /* CNetService.h in Headers */ = {isa = PBXBuildFile; fileRef = 845FB8471F29057A00A29DA8 /* CNetService.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 845FB84B1F29057A00A29DA8 /* CNetService.h in Headers */ = {isa = PBXBuildFile; fileRef = 845FB8471F29057A00A29DA8 /* CNetService.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 845FB84E1F2909A000A29DA8 /* CMailProvider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 845FB84C1F2909A000A29DA8 /* CMailProvider.cpp */; }; + 845FB84F1F2909A000A29DA8 /* CMailProvider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 845FB84C1F2909A000A29DA8 /* CMailProvider.cpp */; }; + 845FB8501F2909A000A29DA8 /* CMailProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 845FB84D1F2909A000A29DA8 /* CMailProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 845FB8511F2909A000A29DA8 /* CMailProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 845FB84D1F2909A000A29DA8 /* CMailProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 845FB8571F290CF000A29DA8 /* NetService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 845FB8561F290CF000A29DA8 /* NetService.swift */; }; + 845FB8581F290CF000A29DA8 /* NetService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 845FB8561F290CF000A29DA8 /* NetService.swift */; }; + 845FB85A1F2910D700A29DA8 /* MailProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 845FB8591F2910D700A29DA8 /* MailProvider.swift */; }; + 845FB85B1F2910D700A29DA8 /* MailProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 845FB8591F2910D700A29DA8 /* MailProvider.swift */; }; + 845FB85D1F2914D200A29DA8 /* MailProvidersManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 845FB85C1F2914D200A29DA8 /* MailProvidersManager.swift */; }; + 845FB85E1F2914D200A29DA8 /* MailProvidersManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 845FB85C1F2914D200A29DA8 /* MailProvidersManager.swift */; }; + 846021D81F6BE26D0032EF37 /* unittest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 841E65061F68348B007BB736 /* unittest.swift */; }; + 846693051F6829AA0020C6C9 /* MessagePart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 846693041F6829A90020C6C9 /* MessagePart.swift */; }; + 846693061F6829AA0020C6C9 /* MessagePart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 846693041F6829A90020C6C9 /* MessagePart.swift */; }; 846E0FB6BB2F46B3574C761C /* MCMainThreadMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6BD169E847800778456 /* MCMainThreadMac.mm */; }; 84915BB8199C4B0400EDDED9 /* MCNNTP.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8491899C18C93F92002063A3 /* MCNNTP.h */; }; 849189A118C93FB7002063A3 /* MCNNTPSession.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8491899F18C93FB7002063A3 /* MCNNTPSession.cpp */; }; @@ -555,6 +558,12 @@ 849189A418C94023002063A3 /* MCNNTPSession.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 849189A018C93FB7002063A3 /* MCNNTPSession.h */; }; 849189AB18C94986002063A3 /* MCNNTPGroupInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 849189A918C94986002063A3 /* MCNNTPGroupInfo.cpp */; }; 849189AC18C94986002063A3 /* MCNNTPGroupInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 849189A918C94986002063A3 /* MCNNTPGroupInfo.cpp */; }; + 84AD84911F435DEB000361A3 /* CMultipart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84AD848F1F435DEB000361A3 /* CMultipart.cpp */; }; + 84AD84921F435DEB000361A3 /* CMultipart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84AD848F1F435DEB000361A3 /* CMultipart.cpp */; }; + 84AD84931F435DEB000361A3 /* CMultipart.h in Headers */ = {isa = PBXBuildFile; fileRef = 84AD84901F435DEB000361A3 /* CMultipart.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84AD84941F435DEB000361A3 /* CMultipart.h in Headers */ = {isa = PBXBuildFile; fileRef = 84AD84901F435DEB000361A3 /* CMultipart.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84AD84961F435F9A000361A3 /* Multipart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84AD84951F435F9A000361A3 /* Multipart.swift */; }; + 84AD84971F435F9A000361A3 /* Multipart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84AD84951F435F9A000361A3 /* Multipart.swift */; }; 84AF9E7E172DBAF600E60AA3 /* providers.json in Resources */ = {isa = PBXBuildFile; fileRef = 84AF9E7D172DBAF600E60AA3 /* providers.json */; }; 84B639E317F279BB003B5BA2 /* MCSMTPNoopOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B639E117F279BB003B5BA2 /* MCSMTPNoopOperation.cpp */; }; 84B639E417F279BB003B5BA2 /* MCSMTPNoopOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B639E117F279BB003B5BA2 /* MCSMTPNoopOperation.cpp */; }; @@ -562,21 +571,37 @@ 84B639E917F27EBD003B5BA2 /* MCPOPNoopOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B639E617F27EBD003B5BA2 /* MCPOPNoopOperation.cpp */; }; 84B639ED17F280F3003B5BA2 /* MCIMAPNoopOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B639EB17F280F3003B5BA2 /* MCIMAPNoopOperation.cpp */; }; 84B639EE17F280F3003B5BA2 /* MCIMAPNoopOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B639EB17F280F3003B5BA2 /* MCIMAPNoopOperation.cpp */; }; - 84B639F117F282B4003B5BA2 /* MCOPOPNoopOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84B639F017F282B4003B5BA2 /* MCOPOPNoopOperation.mm */; }; - 84B639F217F282B4003B5BA2 /* MCOPOPNoopOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84B639F017F282B4003B5BA2 /* MCOPOPNoopOperation.mm */; }; - 84B639F317F2839C003B5BA2 /* MCOPOPNoopOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 84B639EF17F282B4003B5BA2 /* MCOPOPNoopOperation.h */; }; 84B639F417F2839C003B5BA2 /* MCIMAPNoopOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 84B639EC17F280F3003B5BA2 /* MCIMAPNoopOperation.h */; }; 84B639F517F2839C003B5BA2 /* MCPOPNoopOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 84B639E717F27EBD003B5BA2 /* MCPOPNoopOperation.h */; }; 84B639F617F2839C003B5BA2 /* MCSMTPNoopOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 84B639E217F279BB003B5BA2 /* MCSMTPNoopOperation.h */; }; - 84C389E8CC06C8FAFEF2D650 /* MCOIMAPIdentity.mm in Sources */ = {isa = PBXBuildFile; fileRef = C63D316117C92D8300A4D993 /* MCOIMAPIdentity.mm */; }; - 84CFA98319F7153B00FE35D2 /* MCONNTPFetchOverviewOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84CFA98219F7153B00FE35D2 /* MCONNTPFetchOverviewOperation.mm */; }; - 84CFA98419F7153B00FE35D2 /* MCONNTPFetchOverviewOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84CFA98219F7153B00FE35D2 /* MCONNTPFetchOverviewOperation.mm */; }; + 84C1894A223808A3001430F3 /* CAutoreleasePool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84C18948223808A3001430F3 /* CAutoreleasePool.cpp */; }; + 84C1894B223808A3001430F3 /* CAutoreleasePool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84C18948223808A3001430F3 /* CAutoreleasePool.cpp */; }; + 84C1894C223808A3001430F3 /* CAutoreleasePool.h in Headers */ = {isa = PBXBuildFile; fileRef = 84C18949223808A3001430F3 /* CAutoreleasePool.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84C1894D223808A3001430F3 /* CAutoreleasePool.h in Headers */ = {isa = PBXBuildFile; fileRef = 84C18949223808A3001430F3 /* CAutoreleasePool.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84C36C361F62EC8B003E1399 /* MCOperationQueueCallback.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6081678177625AD001F1018 /* MCOperationQueueCallback.h */; }; + 84C36C371F62EC93003E1399 /* MCOperationQueueCallback.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6081678177625AD001F1018 /* MCOperationQueueCallback.h */; }; + 84C36C381F62ECA5003E1399 /* MCDefines.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = BD62729A1A158DA000129AA8 /* MCDefines.h */; }; + 84C36C391F62ECAC003E1399 /* MCDefines.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = BD62729A1A158DA000129AA8 /* MCDefines.h */; }; + 84C36C3A1F62EE87003E1399 /* MCDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = BD62729A1A158DA000129AA8 /* MCDefines.h */; }; + 84C36C3B1F62EE88003E1399 /* MCDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = BD62729A1A158DA000129AA8 /* MCDefines.h */; }; + 84C36C3C1F62F02F003E1399 /* MCOperationQueueCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = C6081678177625AD001F1018 /* MCOperationQueueCallback.h */; }; + 84C36C3D1F62F030003E1399 /* MCOperationQueueCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = C6081678177625AD001F1018 /* MCOperationQueueCallback.h */; }; + 84C36C3E1F62F078003E1399 /* MCHTMLRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = C63CD67C16BDCDD400DB18F1 /* MCHTMLRenderer.h */; }; + 84C36C3F1F62F078003E1399 /* MCHTMLRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = C63CD67C16BDCDD400DB18F1 /* MCHTMLRenderer.h */; }; + 84C36C401F62F087003E1399 /* MCHTMLBodyRendererTemplateCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = DAD28C8A1783CFFC00F2BB8F /* MCHTMLBodyRendererTemplateCallback.h */; }; + 84C36C411F62F087003E1399 /* MCHTMLBodyRendererTemplateCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = DAD28C8A1783CFFC00F2BB8F /* MCHTMLBodyRendererTemplateCallback.h */; }; + 84C87A211F41DCEC0018398E /* MCAbstractMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA695169E847800778456 /* MCAbstractMessage.h */; }; + 84C87A221F41DD000018398E /* MCIMAPSearchOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA82516A29EE300778456 /* MCIMAPSearchOperation.h */; }; + 84C87A231F41DFCF0018398E /* CCore.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F7B40E1D915985005F83E8 /* CCore.h */; }; + 84CD9BDE1D9BE3AF000622CB /* CIMAPMultipart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84CD9BDC1D9BE3AF000622CB /* CIMAPMultipart.cpp */; }; 84CFA98719F7159700FE35D2 /* MCNNTPFetchOverviewOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84CFA98519F7159700FE35D2 /* MCNNTPFetchOverviewOperation.cpp */; }; 84CFA98819F7159700FE35D2 /* MCNNTPFetchOverviewOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84CFA98519F7159700FE35D2 /* MCNNTPFetchOverviewOperation.cpp */; }; 84CFA98F19F724E500FE35D2 /* MCNNTPFetchServerTimeOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84CFA98D19F724E500FE35D2 /* MCNNTPFetchServerTimeOperation.cpp */; }; 84CFA99019F724E500FE35D2 /* MCNNTPFetchServerTimeOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84CFA98D19F724E500FE35D2 /* MCNNTPFetchServerTimeOperation.cpp */; }; - 84CFA99519F725CB00FE35D2 /* MCONNTPFetchServerTimeOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84CFA99419F725CB00FE35D2 /* MCONNTPFetchServerTimeOperation.mm */; }; - 84CFA99619F725CB00FE35D2 /* MCONNTPFetchServerTimeOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84CFA99419F725CB00FE35D2 /* MCONNTPFetchServerTimeOperation.mm */; }; + 84D72F1D1F32161800F570BC /* CData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84D72F1B1F32161800F570BC /* CData.cpp */; }; + 84D72F1E1F32161800F570BC /* CData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84D72F1B1F32161800F570BC /* CData.cpp */; }; + 84D72F1F1F32161800F570BC /* CData.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D72F1C1F32161800F570BC /* CData.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84D72F201F32161800F570BC /* CData.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D72F1C1F32161800F570BC /* CData.h */; settings = {ATTRIBUTES = (Public, ); }; }; 84D7372C199BF66C005124E5 /* MCNNTPAsyncSession.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84D7372A199BF66C005124E5 /* MCNNTPAsyncSession.cpp */; }; 84D7372D199BF66C005124E5 /* MCNNTPAsyncSession.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84D7372A199BF66C005124E5 /* MCNNTPAsyncSession.cpp */; }; 84D73730199BF704005124E5 /* MCNNTPOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84D7372E199BF704005124E5 /* MCNNTPOperation.cpp */; }; @@ -611,269 +636,316 @@ 84D7375D199BFDCA005124E5 /* MCNNTPListNewsgroupsOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84D7375A199BFDCA005124E5 /* MCNNTPListNewsgroupsOperation.cpp */; }; 84D7375E199BFF34005124E5 /* MCNNTPListNewsgroupsOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 84D7375B199BFDCA005124E5 /* MCNNTPListNewsgroupsOperation.h */; }; 84D7375F199BFF38005124E5 /* MCNNTPListNewsgroupsOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 84D7375B199BFDCA005124E5 /* MCNNTPListNewsgroupsOperation.h */; }; - 84D73764199BFFC7005124E5 /* MCONNTPSession.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84D73763199BFFC7005124E5 /* MCONNTPSession.mm */; }; - 84D73765199BFFC7005124E5 /* MCONNTPSession.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84D73763199BFFC7005124E5 /* MCONNTPSession.mm */; }; - 84D73768199BFFFC005124E5 /* MCONNTPOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84D73767199BFFFC005124E5 /* MCONNTPOperation.mm */; }; - 84D73769199BFFFC005124E5 /* MCONNTPOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84D73767199BFFFC005124E5 /* MCONNTPOperation.mm */; }; - 84D7376D199C005A005124E5 /* MCONNTPFetchHeaderOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84D7376C199C005A005124E5 /* MCONNTPFetchHeaderOperation.mm */; }; - 84D7376E199C005A005124E5 /* MCONNTPFetchHeaderOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84D7376C199C005A005124E5 /* MCONNTPFetchHeaderOperation.mm */; }; - 84D73771199C007E005124E5 /* MCONNTPFetchArticleOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84D73770199C007E005124E5 /* MCONNTPFetchArticleOperation.mm */; }; - 84D73772199C007E005124E5 /* MCONNTPFetchArticleOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84D73770199C007E005124E5 /* MCONNTPFetchArticleOperation.mm */; }; - 84D73775199C00AB005124E5 /* MCONNTPFetchAllArticlesOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84D73774199C00AB005124E5 /* MCONNTPFetchAllArticlesOperation.mm */; }; - 84D73776199C00AB005124E5 /* MCONNTPFetchAllArticlesOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84D73774199C00AB005124E5 /* MCONNTPFetchAllArticlesOperation.mm */; }; - 84D7377B199C00F5005124E5 /* MCONNTP.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 84D73761199BFF80005124E5 /* MCONNTP.h */; }; - 84D7377C199C00F7005124E5 /* MCONNTP.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 84D73761199BFF80005124E5 /* MCONNTP.h */; }; - 84D7377D199C00FE005124E5 /* MCONNTPSession.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 84D73762199BFFC7005124E5 /* MCONNTPSession.h */; }; - 84D7377E199C0100005124E5 /* MCONNTPSession.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 84D73762199BFFC7005124E5 /* MCONNTPSession.h */; }; - 84D7377F199C0104005124E5 /* MCONNTPOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 84D73766199BFFFC005124E5 /* MCONNTPOperation.h */; }; - 84D73780199C0107005124E5 /* MCONNTPFetchHeaderOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 84D7376B199C005A005124E5 /* MCONNTPFetchHeaderOperation.h */; }; - 84D73781199C010A005124E5 /* MCONNTPFetchArticleOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 84D7376F199C007E005124E5 /* MCONNTPFetchArticleOperation.h */; }; - 84D73782199C010B005124E5 /* MCONNTPFetchAllArticlesOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 84D73773199C00AB005124E5 /* MCONNTPFetchAllArticlesOperation.h */; }; - 84D73784199C0114005124E5 /* MCONNTPOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 84D73766199BFFFC005124E5 /* MCONNTPOperation.h */; }; - 84D73785199C0117005124E5 /* MCONNTPFetchHeaderOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 84D7376B199C005A005124E5 /* MCONNTPFetchHeaderOperation.h */; }; - 84D73786199C0118005124E5 /* MCONNTPFetchArticleOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 84D7376F199C007E005124E5 /* MCONNTPFetchArticleOperation.h */; }; - 84D73787199C011A005124E5 /* MCONNTPFetchAllArticlesOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 84D73773199C00AB005124E5 /* MCONNTPFetchAllArticlesOperation.h */; }; - 84D7378B199C0260005124E5 /* MCONNTPListNewsgroupsOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84D7378A199C0260005124E5 /* MCONNTPListNewsgroupsOperation.mm */; }; - 84D7378C199C0260005124E5 /* MCONNTPListNewsgroupsOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84D7378A199C0260005124E5 /* MCONNTPListNewsgroupsOperation.mm */; }; - 84D7378F199C02A8005124E5 /* MCONNTPDisconnectOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84D7378E199C02A8005124E5 /* MCONNTPDisconnectOperation.mm */; }; - 84D73790199C02A8005124E5 /* MCONNTPDisconnectOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84D7378E199C02A8005124E5 /* MCONNTPDisconnectOperation.mm */; }; - 84D73793199C0511005124E5 /* MCONNTPGroupInfo.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84D73792199C0511005124E5 /* MCONNTPGroupInfo.mm */; }; - 84D73794199C0511005124E5 /* MCONNTPGroupInfo.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84D73792199C0511005124E5 /* MCONNTPGroupInfo.mm */; }; + 84DBBE891F26400E00F03A5F /* Attachment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8408C80B1F2637B50003A816 /* Attachment.swift */; }; + 84DBBE8A1F26400E00F03A5F /* MessageBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8408C80C1F2637B50003A816 /* MessageBuilder.swift */; }; + 84DBBE8B1F26400E00F03A5F /* MessageParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8408C80D1F2637B50003A816 /* MessageParser.swift */; }; + 84DBBE8C1F26400E00F03A5F /* Operation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E3DB331D997D32003B598F /* Operation.swift */; }; + 84DBBE8D1F26400E00F03A5F /* MailCoreError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E3DB3B1D9A8459003B598F /* MailCoreError.swift */; }; + 84DBBE8E1F26400E00F03A5F /* AbstractMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 843AFCD31D9579F30086FB46 /* AbstractMessage.swift */; }; + 84DBBE8F1F26400E00F03A5F /* AbstractMessagePart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 843AFCD41D9579F30086FB46 /* AbstractMessagePart.swift */; }; + 84DBBE901F26400E00F03A5F /* AbstractMultipart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 843AFCD51D9579F30086FB46 /* AbstractMultipart.swift */; }; + 84DBBE911F26400E00F03A5F /* AbstractPart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 843AFCD61D9579F30086FB46 /* AbstractPart.swift */; }; + 84DBBE921F26400E00F03A5F /* Address.swift in Sources */ = {isa = PBXBuildFile; fileRef = 843AFCD71D9579F30086FB46 /* Address.swift */; }; + 84DBBE931F26400E00F03A5F /* MessageHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 843AFCD81D9579F30086FB46 /* MessageHeader.swift */; }; + 84DBBE941F26400E00F03A5F /* HTMLRendererDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84A929111DA7B5BB0020205B /* HTMLRendererDelegate.swift */; }; + 84DBBE951F26400E00F03A5F /* HTMLRendererImapDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84A929131DA7B8480020205B /* HTMLRendererImapDelegate.swift */; }; + 84DBBE961F26400E00F03A5F /* AbstractMessageRendererCallback.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84A929151DA7B9790020205B /* AbstractMessageRendererCallback.swift */; }; + 84DBBE971F26400E00F03A5F /* Convertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F7B4961D916D0B005F83E8 /* Convertible.swift */; }; + 84DBBE981F26400E00F03A5F /* String+Mailcore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 849EA1741D9928CE000E4E4D /* String+Mailcore.swift */; }; + 84DBBE991F26400E00F03A5F /* Dictionary+Mailcore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E3DB3D1D9AA56A003B598F /* Dictionary+Mailcore.swift */; }; + 84DBBE9A1F26400E00F03A5F /* Data+Mailcore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E3DB431D9ABDCC003B598F /* Data+Mailcore.swift */; }; + 84DBBE9B1F26400E00F03A5F /* Array+Mailcore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E3DB451D9AC3A6003B598F /* Array+Mailcore.swift */; }; + 84DBBE9C1F26400E00F03A5F /* UInt32+Mailcore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 848F95371D9D568B00058351 /* UInt32+Mailcore.swift */; }; + 84DBBE9D1F26400E00F03A5F /* MCOIndexSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84501D0C1DA511A400A9FF4D /* MCOIndexSet.swift */; }; + 84DBBE9E1F26400E00F03A5F /* IMAPFolder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E3DB4B1D9BB9F7003B598F /* IMAPFolder.swift */; }; + 84DBBE9F1F26400E00F03A5F /* IMAPMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E3DB511D9BCEED003B598F /* IMAPMessage.swift */; }; + 84DBBEA01F26400E00F03A5F /* IMAPMessagePart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E3DB571D9BDD62003B598F /* IMAPMessagePart.swift */; }; + 84DBBEA11F26400E00F03A5F /* IMAPMultipart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84CD9BDF1D9BE514000622CB /* IMAPMultipart.swift */; }; + 84DBBEA21F26400E00F03A5F /* IMAPNamespace.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F7B4A31D916D4A005F83E8 /* IMAPNamespace.swift */; }; + 84DBBEA31F26400E00F03A5F /* IMAPNamespaceItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84CD9BE51D9C0039000622CB /* IMAPNamespaceItem.swift */; }; + 84DBBEA41F26400E00F03A5F /* IMAPPart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8494D6D31D9C06F5009EEE5E /* IMAPPart.swift */; }; + 84DBBEA51F26400E00F03A5F /* IMAPFolderInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8494D6DB1D9C0DE8009EEE5E /* IMAPFolderInfo.swift */; }; + 84DBBEA61F26400E00F03A5F /* IMAPFolderStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8494D6E11D9C11C7009EEE5E /* IMAPFolderStatus.swift */; }; + 84DBBEA71F26400E00F03A5F /* IMAPSearchExpression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8494D6E31D9C2253009EEE5E /* IMAPSearchExpression.swift */; }; + 84DBBEA81F26400E00F03A5F /* IMAPBaseOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E3DB351D9A7059003B598F /* IMAPBaseOperation.swift */; }; + 84DBBEA91F26400E00F03A5F /* IMAPOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F7B4A41D916D4A005F83E8 /* IMAPOperation.swift */; }; + 84DBBEAA1F26400E00F03A5F /* IMAPAppendMessageOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F7B49D1D916D4A005F83E8 /* IMAPAppendMessageOperation.swift */; }; + 84DBBEAB1F26400E00F03A5F /* IMAPCopyMessagesOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F7B49E1D916D4A005F83E8 /* IMAPCopyMessagesOperation.swift */; }; + 84DBBEAC1F26400E00F03A5F /* IMAPFetchContentOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F7B49F1D916D4A005F83E8 /* IMAPFetchContentOperation.swift */; }; + 84DBBEAD1F26400E00F03A5F /* IMAPFetchMessagesOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F7B4A01D916D4A005F83E8 /* IMAPFetchMessagesOperation.swift */; }; + 84DBBEAE1F26400E00F03A5F /* IMAPFolderInfoOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F7B4A11D916D4A005F83E8 /* IMAPFolderInfoOperation.swift */; }; + 84DBBEAF1F26400E00F03A5F /* IMAPFolderStatusOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F7B4A21D916D4A005F83E8 /* IMAPFolderStatusOperation.swift */; }; + 84DBBEB01F26400E00F03A5F /* IMAPSearchOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F7B4A61D916D4A005F83E8 /* IMAPSearchOperation.swift */; }; + 84DBBEB11F26400E00F03A5F /* IMAPIdleOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84B110A41D928E1D0079C769 /* IMAPIdleOperation.swift */; }; + 84DBBEB21F26400E00F03A5F /* IMAPSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F7B4A71D916D4A005F83E8 /* IMAPSession.swift */; }; + 84DBBEB31F26400E00F03A5F /* IMAPFetchFoldersOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E1E0291DF5D4E500D45A31 /* IMAPFetchFoldersOperation.swift */; }; + 84DBBEB41F26400E00F03A5F /* IMAPCapabilityOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8491BB5F1DF6E66F00E6D679 /* IMAPCapabilityOperation.swift */; }; + 84DBBEB51F26400E00F03A5F /* IMAPCheckAccountOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8491BB691DF6FA5000E6D679 /* IMAPCheckAccountOperation.swift */; }; + 84DBBEB61F26400E00F03A5F /* IMAPCustomCommandOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8491BB6F1DF7057800E6D679 /* IMAPCustomCommandOperation.swift */; }; + 84DBBEB71F26400E00F03A5F /* IMAPFetchContentToFileOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84D344DD1DF70DB600B81A94 /* IMAPFetchContentToFileOperation.swift */; }; + 84DBBEB81F26400E00F03A5F /* IMAPFetchNamespaceOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84D344E31DF7151D00B81A94 /* IMAPFetchNamespaceOperation.swift */; }; + 84DBBEB91F26400E00F03A5F /* IMAPFetchParsedContentOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 842D79A91DF80C7E00F9424C /* IMAPFetchParsedContentOperation.swift */; }; + 84DBBEBA1F26400E00F03A5F /* IMAPMessageRenderingOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 842D79AB1DF817B300F9424C /* IMAPMessageRenderingOperation.swift */; }; + 84DBBEBB1F26400E00F03A5F /* IMAPMoveMessagesOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 842D79AD1DF81EDF00F9424C /* IMAPMoveMessagesOperation.swift */; }; + 84DBBEBC1F26400E00F03A5F /* IMAPQuotaOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 842D79B11DF81FA800F9424C /* IMAPQuotaOperation.swift */; }; + 84DBBEBD1F26400E00F03A5F /* IMAPIdentity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 842D79B71DF87A2B00F9424C /* IMAPIdentity.swift */; }; + 84DBBEBE1F26400E00F03A5F /* IMAPIdentityOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 842D79BD1DF882A100F9424C /* IMAPIdentityOperation.swift */; }; + 84DBBEBF1F26400E00F03A5F /* SMTPSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84B892171DA27FDD008FD1C4 /* SMTPSession.swift */; }; + 84DBBEC01F26400E00F03A5F /* SMTPOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84B892191DA28121008FD1C4 /* SMTPOperation.swift */; }; + 84DBBEC11F26400E00F03A5F /* SMTPSendOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84B8921F1DA29A3B008FD1C4 /* SMTPSendOperation.swift */; }; + 84DBBEC21F26411500F03A5F /* Attachment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8408C80B1F2637B50003A816 /* Attachment.swift */; }; + 84DBBEC31F26411500F03A5F /* MessageBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8408C80C1F2637B50003A816 /* MessageBuilder.swift */; }; + 84DBBEC41F26411500F03A5F /* MessageParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8408C80D1F2637B50003A816 /* MessageParser.swift */; }; + 84DBBEC51F26411500F03A5F /* Operation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E3DB331D997D32003B598F /* Operation.swift */; }; + 84DBBEC61F26411500F03A5F /* MailCoreError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E3DB3B1D9A8459003B598F /* MailCoreError.swift */; }; + 84DBBEC71F26411500F03A5F /* AbstractMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 843AFCD31D9579F30086FB46 /* AbstractMessage.swift */; }; + 84DBBEC81F26411500F03A5F /* AbstractMessagePart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 843AFCD41D9579F30086FB46 /* AbstractMessagePart.swift */; }; + 84DBBEC91F26411500F03A5F /* AbstractMultipart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 843AFCD51D9579F30086FB46 /* AbstractMultipart.swift */; }; + 84DBBECA1F26411500F03A5F /* AbstractPart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 843AFCD61D9579F30086FB46 /* AbstractPart.swift */; }; + 84DBBECB1F26411500F03A5F /* Address.swift in Sources */ = {isa = PBXBuildFile; fileRef = 843AFCD71D9579F30086FB46 /* Address.swift */; }; + 84DBBECC1F26411500F03A5F /* MessageHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 843AFCD81D9579F30086FB46 /* MessageHeader.swift */; }; + 84DBBECD1F26411500F03A5F /* HTMLRendererDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84A929111DA7B5BB0020205B /* HTMLRendererDelegate.swift */; }; + 84DBBECE1F26411500F03A5F /* HTMLRendererImapDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84A929131DA7B8480020205B /* HTMLRendererImapDelegate.swift */; }; + 84DBBECF1F26411500F03A5F /* AbstractMessageRendererCallback.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84A929151DA7B9790020205B /* AbstractMessageRendererCallback.swift */; }; + 84DBBED01F26411500F03A5F /* Convertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F7B4961D916D0B005F83E8 /* Convertible.swift */; }; + 84DBBED11F26411500F03A5F /* String+Mailcore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 849EA1741D9928CE000E4E4D /* String+Mailcore.swift */; }; + 84DBBED21F26411500F03A5F /* Dictionary+Mailcore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E3DB3D1D9AA56A003B598F /* Dictionary+Mailcore.swift */; }; + 84DBBED31F26411500F03A5F /* Data+Mailcore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E3DB431D9ABDCC003B598F /* Data+Mailcore.swift */; }; + 84DBBED41F26411500F03A5F /* Array+Mailcore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E3DB451D9AC3A6003B598F /* Array+Mailcore.swift */; }; + 84DBBED51F26411500F03A5F /* UInt32+Mailcore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 848F95371D9D568B00058351 /* UInt32+Mailcore.swift */; }; + 84DBBED61F26411500F03A5F /* MCOIndexSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84501D0C1DA511A400A9FF4D /* MCOIndexSet.swift */; }; + 84DBBED71F26411500F03A5F /* IMAPFolder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E3DB4B1D9BB9F7003B598F /* IMAPFolder.swift */; }; + 84DBBED81F26411500F03A5F /* IMAPMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E3DB511D9BCEED003B598F /* IMAPMessage.swift */; }; + 84DBBED91F26411500F03A5F /* IMAPMessagePart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E3DB571D9BDD62003B598F /* IMAPMessagePart.swift */; }; + 84DBBEDA1F26411500F03A5F /* IMAPMultipart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84CD9BDF1D9BE514000622CB /* IMAPMultipart.swift */; }; + 84DBBEDB1F26411500F03A5F /* IMAPNamespace.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F7B4A31D916D4A005F83E8 /* IMAPNamespace.swift */; }; + 84DBBEDC1F26411500F03A5F /* IMAPNamespaceItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84CD9BE51D9C0039000622CB /* IMAPNamespaceItem.swift */; }; + 84DBBEDD1F26411500F03A5F /* IMAPPart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8494D6D31D9C06F5009EEE5E /* IMAPPart.swift */; }; + 84DBBEDE1F26411500F03A5F /* IMAPFolderInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8494D6DB1D9C0DE8009EEE5E /* IMAPFolderInfo.swift */; }; + 84DBBEDF1F26411500F03A5F /* IMAPFolderStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8494D6E11D9C11C7009EEE5E /* IMAPFolderStatus.swift */; }; + 84DBBEE01F26411500F03A5F /* IMAPSearchExpression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8494D6E31D9C2253009EEE5E /* IMAPSearchExpression.swift */; }; + 84DBBEE11F26411500F03A5F /* IMAPBaseOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E3DB351D9A7059003B598F /* IMAPBaseOperation.swift */; }; + 84DBBEE21F26411500F03A5F /* IMAPOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F7B4A41D916D4A005F83E8 /* IMAPOperation.swift */; }; + 84DBBEE31F26411500F03A5F /* IMAPAppendMessageOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F7B49D1D916D4A005F83E8 /* IMAPAppendMessageOperation.swift */; }; + 84DBBEE41F26411500F03A5F /* IMAPCopyMessagesOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F7B49E1D916D4A005F83E8 /* IMAPCopyMessagesOperation.swift */; }; + 84DBBEE51F26411500F03A5F /* IMAPFetchContentOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F7B49F1D916D4A005F83E8 /* IMAPFetchContentOperation.swift */; }; + 84DBBEE61F26411500F03A5F /* IMAPFetchMessagesOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F7B4A01D916D4A005F83E8 /* IMAPFetchMessagesOperation.swift */; }; + 84DBBEE71F26411500F03A5F /* IMAPFolderInfoOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F7B4A11D916D4A005F83E8 /* IMAPFolderInfoOperation.swift */; }; + 84DBBEE81F26411500F03A5F /* IMAPFolderStatusOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F7B4A21D916D4A005F83E8 /* IMAPFolderStatusOperation.swift */; }; + 84DBBEE91F26411500F03A5F /* IMAPSearchOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F7B4A61D916D4A005F83E8 /* IMAPSearchOperation.swift */; }; + 84DBBEEA1F26411500F03A5F /* IMAPIdleOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84B110A41D928E1D0079C769 /* IMAPIdleOperation.swift */; }; + 84DBBEEB1F26411500F03A5F /* IMAPSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F7B4A71D916D4A005F83E8 /* IMAPSession.swift */; }; + 84DBBEEC1F26411500F03A5F /* IMAPFetchFoldersOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E1E0291DF5D4E500D45A31 /* IMAPFetchFoldersOperation.swift */; }; + 84DBBEED1F26411500F03A5F /* IMAPCapabilityOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8491BB5F1DF6E66F00E6D679 /* IMAPCapabilityOperation.swift */; }; + 84DBBEEE1F26411500F03A5F /* IMAPCheckAccountOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8491BB691DF6FA5000E6D679 /* IMAPCheckAccountOperation.swift */; }; + 84DBBEEF1F26411500F03A5F /* IMAPCustomCommandOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8491BB6F1DF7057800E6D679 /* IMAPCustomCommandOperation.swift */; }; + 84DBBEF01F26411500F03A5F /* IMAPFetchContentToFileOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84D344DD1DF70DB600B81A94 /* IMAPFetchContentToFileOperation.swift */; }; + 84DBBEF11F26411500F03A5F /* IMAPFetchNamespaceOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84D344E31DF7151D00B81A94 /* IMAPFetchNamespaceOperation.swift */; }; + 84DBBEF21F26411500F03A5F /* IMAPFetchParsedContentOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 842D79A91DF80C7E00F9424C /* IMAPFetchParsedContentOperation.swift */; }; + 84DBBEF31F26411500F03A5F /* IMAPMessageRenderingOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 842D79AB1DF817B300F9424C /* IMAPMessageRenderingOperation.swift */; }; + 84DBBEF41F26411500F03A5F /* IMAPMoveMessagesOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 842D79AD1DF81EDF00F9424C /* IMAPMoveMessagesOperation.swift */; }; + 84DBBEF51F26411500F03A5F /* IMAPQuotaOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 842D79B11DF81FA800F9424C /* IMAPQuotaOperation.swift */; }; + 84DBBEF61F26411500F03A5F /* IMAPIdentity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 842D79B71DF87A2B00F9424C /* IMAPIdentity.swift */; }; + 84DBBEF71F26411500F03A5F /* IMAPIdentityOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 842D79BD1DF882A100F9424C /* IMAPIdentityOperation.swift */; }; + 84DBBEF81F26411500F03A5F /* SMTPSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84B892171DA27FDD008FD1C4 /* SMTPSession.swift */; }; + 84DBBEF91F26411500F03A5F /* SMTPOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84B892191DA28121008FD1C4 /* SMTPOperation.swift */; }; + 84DBBEFA1F26411500F03A5F /* SMTPSendOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84B8921F1DA29A3B008FD1C4 /* SMTPSendOperation.swift */; }; + 84DBBEFB1F26413600F03A5F /* COperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84B110A81D92924C0079C769 /* COperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBEFC1F26413600F03A5F /* CAbstractMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = 8498CCAB1D9511FC0074217C /* CAbstractMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBEFD1F26413600F03A5F /* CAbstractMessagePart.h in Headers */ = {isa = PBXBuildFile; fileRef = 8498CCAE1D9519B40074217C /* CAbstractMessagePart.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBEFE1F26413600F03A5F /* CAbstractMultipart.h in Headers */ = {isa = PBXBuildFile; fileRef = 8498CCB11D9520660074217C /* CAbstractMultipart.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBEFF1F26413600F03A5F /* CMessageConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F7B43D1D9159E9005F83E8 /* CMessageConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBF001F26413600F03A5F /* CAddress.h in Headers */ = {isa = PBXBuildFile; fileRef = 84ECAD7F1D943B11006261FD /* CAddress.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBF011F26413600F03A5F /* CAbstractPart.h in Headers */ = {isa = PBXBuildFile; fileRef = 84ECAD771D93E9CD006261FD /* CAbstractPart.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBF021F26413600F03A5F /* CMessageHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 84ECAD7B1D93FF9E006261FD /* CMessageHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBF031F26413600F03A5F /* CAbstractMessageRendererCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A929181DA7BABF0020205B /* CAbstractMessageRendererCallback.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBF041F26413600F03A5F /* CIMAPFolder.h in Headers */ = {isa = PBXBuildFile; fileRef = 84E3DB481D9BB29E003B598F /* CIMAPFolder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBF051F26413600F03A5F /* CIMAPMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = 84E3DB4E1D9BBDAD003B598F /* CIMAPMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBF061F26413600F03A5F /* CIMAPMessagePart.h in Headers */ = {isa = PBXBuildFile; fileRef = 84E3DB541D9BDB41003B598F /* CIMAPMessagePart.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBF071F26413600F03A5F /* CIMAPMultipart.h in Headers */ = {isa = PBXBuildFile; fileRef = 84CD9BDD1D9BE3AF000622CB /* CIMAPMultipart.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBF081F26413600F03A5F /* CIMAPNamespace.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F7B4681D915D88005F83E8 /* CIMAPNamespace.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBF091F26413600F03A5F /* CIMAPNamespaceItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 84CD9BE21D9BFB37000622CB /* CIMAPNamespaceItem.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBF0A1F26413600F03A5F /* CIMAPPart.h in Headers */ = {isa = PBXBuildFile; fileRef = 8494D6D01D9C03BB009EEE5E /* CIMAPPart.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBF0B1F26413600F03A5F /* CIMAPFolderInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 8494D6D61D9C082E009EEE5E /* CIMAPFolderInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBF0C1F26413600F03A5F /* CIMAPFolderStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 8494D6DE1D9C0FE9009EEE5E /* CIMAPFolderStatus.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBF0D1F26413600F03A5F /* CIMAPSearchExpression.h in Headers */ = {isa = PBXBuildFile; fileRef = 8494D6E61D9C2274009EEE5E /* CIMAPSearchExpression.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBF0E1F26413600F03A5F /* CIMAPBaseOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84B110B01D929B560079C769 /* CIMAPBaseOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBF0F1F26413600F03A5F /* CIMAPAppendMessageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F7B45B1D915D88005F83E8 /* CIMAPAppendMessageOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBF101F26413600F03A5F /* CIMAPCopyMessagesOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F7B45F1D915D88005F83E8 /* CIMAPCopyMessagesOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBF111F26413600F03A5F /* CIMAPFetchContentOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F7B4611D915D88005F83E8 /* CIMAPFetchContentOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBF121F26413600F03A5F /* CIMAPFetchMessagesOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F7B4631D915D88005F83E8 /* CIMAPFetchMessagesOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBF131F26413600F03A5F /* CIMAPFolderInfoOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F7B4651D915D88005F83E8 /* CIMAPFolderInfoOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBF141F26413600F03A5F /* CIMAPFolderStatusOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F7B4671D915D88005F83E8 /* CIMAPFolderStatusOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBF161F26413600F03A5F /* CIMAPIdleOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84E3DB381D9A7C93003B598F /* CIMAPIdleOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBF171F26413600F03A5F /* CIMAPAsyncSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F7B45D1D915D88005F83E8 /* CIMAPAsyncSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBF181F26413600F03A5F /* CIMAPFetchFoldersOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84E1E0261DF5D33B00D45A31 /* CIMAPFetchFoldersOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBF191F26413600F03A5F /* CIMAPCapabilityOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8491BB621DF6E74800E6D679 /* CIMAPCapabilityOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBF1A1F26413600F03A5F /* CIMAPCheckAccountOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8491BB661DF6F64400E6D679 /* CIMAPCheckAccountOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBF1B1F26413600F03A5F /* CIMAPCustomCommandOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8491BB6C1DF7028C00E6D679 /* CIMAPCustomCommandOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBF1C1F26413600F03A5F /* CIMAPFetchContentToFileOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D344DA1DF7090700B81A94 /* CIMAPFetchContentToFileOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBF1D1F26413600F03A5F /* CIMAPFetchNamespaceOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D344E01DF712D500B81A94 /* CIMAPFetchNamespaceOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBF1E1F26413600F03A5F /* CIMAPFetchParsedContentOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 842D799A1DF801AE00F9424C /* CIMAPFetchParsedContentOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBF1F1F26413600F03A5F /* CIMAPMessageRenderingOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 842D799E1DF8033100F9424C /* CIMAPMessageRenderingOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBF201F26413600F03A5F /* CIMAPMoveMessagesOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 842D79A21DF8049D00F9424C /* CIMAPMoveMessagesOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBF211F26413600F03A5F /* CIMAPQuotaOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 842D79A61DF8080200F9424C /* CIMAPQuotaOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBF221F26413600F03A5F /* CIMAPIdentity.h in Headers */ = {isa = PBXBuildFile; fileRef = 842D79B41DF876B600F9424C /* CIMAPIdentity.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBF231F26413600F03A5F /* CIMAPIdentityOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 842D79BA1DF881A000F9424C /* CIMAPIdentityOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBF241F26413600F03A5F /* CSMTPSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 84B8920F1DA268F8008FD1C4 /* CSMTPSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBF251F26413600F03A5F /* CSMTPOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84B892131DA27A54008FD1C4 /* CSMTPOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBF261F26413600F03A5F /* CArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F7B4111D915997005F83E8 /* CArray.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBF271F26413600F03A5F /* CIndexSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F7B4131D915997005F83E8 /* CIndexSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBF281F26413600F03A5F /* CObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F7B4151D915997005F83E8 /* CObject.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBF291F26413600F03A5F /* CDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = 84E3DB401D9AA676003B598F /* CDictionary.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBF2A1F26413600F03A5F /* CBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F7B40D1D915985005F83E8 /* CBase.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84DBBF2B1F26413600F03A5F /* CBase+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 847530611F2230B30011100D /* CBase+Private.h */; }; + 84E52F6E1F3350CA00233DA3 /* Object.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E52F6D1F3350CA00233DA3 /* Object.swift */; }; + 84E52F6F1F3350CA00233DA3 /* Object.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E52F6D1F3350CA00233DA3 /* Object.swift */; }; 84E65533199BE15500EC8CC4 /* MCNNTPSession.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 849189A018C93FB7002063A3 /* MCNNTPSession.h */; }; 84E65534199BE2BF00EC8CC4 /* MCNNTPGroupInfo.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 849189AA18C94986002063A3 /* MCNNTPGroupInfo.h */; }; 84E65535199BE2C300EC8CC4 /* MCNNTPGroupInfo.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 849189AA18C94986002063A3 /* MCNNTPGroupInfo.h */; }; - 84EDC6D3C8B582B4BDA39B3F /* MCNull.h in Headers */ = {isa = PBXBuildFile; fileRef = C6D6F953171E5CB8006F5B28 /* MCNull.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84EDC6D3C8B582B4BDA39B3F /* MCNull.h in Headers */ = {isa = PBXBuildFile; fileRef = C6D6F953171E5CB8006F5B28 /* MCNull.h */; }; + 84FEDEC31F28979900A9E88C /* MessageConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84FEDEC21F28979900A9E88C /* MessageConstants.swift */; }; + 84FEDEC41F28979900A9E88C /* MessageConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84FEDEC21F28979900A9E88C /* MessageConstants.swift */; }; 851682AD1C6A2484005B86C4 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 851682AC1C6A2484005B86C4 /* Default-568h@2x.png */; }; 8568A4131C610D9800FF4470 /* MCIMAPMoveMessagesOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8568A4111C610D9800FF4470 /* MCIMAPMoveMessagesOperation.cpp */; }; 8568A4141C610DA800FF4470 /* MCIMAPMoveMessagesOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8568A4111C610D9800FF4470 /* MCIMAPMoveMessagesOperation.cpp */; }; - 8568A41A1C610F6600FF4470 /* MCOIMAPMoveMessagesOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8568A4191C610F6600FF4470 /* MCOIMAPMoveMessagesOperation.mm */; }; - 8568A41B1C610F6600FF4470 /* MCOIMAPMoveMessagesOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8568A4191C610F6600FF4470 /* MCOIMAPMoveMessagesOperation.mm */; }; 8568A41C1C61167F00FF4470 /* MCIMAPMoveMessagesOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8568A4121C610D9800FF4470 /* MCIMAPMoveMessagesOperation.h */; }; - 8568A41D1C61169000FF4470 /* MCOIMAPMoveMessagesOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8568A4181C610F6600FF4470 /* MCOIMAPMoveMessagesOperation.h */; }; - 8568A41E1C61169A00FF4470 /* MCOIMAPMoveMessagesOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8568A4181C610F6600FF4470 /* MCOIMAPMoveMessagesOperation.h */; }; 8568A41F1C6116B600FF4470 /* MCIMAPMoveMessagesOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8568A4121C610D9800FF4470 /* MCIMAPMoveMessagesOperation.h */; }; - 856A0FD349772C0508B70517 /* MCSMTPSession.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6EF169E847800778456 /* MCSMTPSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 857358F7C8D0843E5A84D4F3 /* MCOIMAPFetchParsedContentOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8199FBE819FAEA440040BBC3 /* MCOIMAPFetchParsedContentOperation.mm */; }; - 85FBB90565A47732E22118B5 /* NSSet+MCO.mm in Sources */ = {isa = PBXBuildFile; fileRef = C643F491189A3D59007EA2F7 /* NSSet+MCO.mm */; }; + 856A0FD349772C0508B70517 /* MCSMTPSession.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6EF169E847800778456 /* MCSMTPSession.h */; }; 867DF395CFCFC98C9A692CA0 /* MCIMAPDeleteFolderOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA80316A2997B00778456 /* MCIMAPDeleteFolderOperation.cpp */; }; - 86826D824CA11A9D07E506CC /* MCMD5.h in Headers */ = {isa = PBXBuildFile; fileRef = C6D6F951171E5CB8006F5B28 /* MCMD5.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8699027A4BD3AE23A8B04EE5 /* MCONNTPDisconnectOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84D7378E199C02A8005124E5 /* MCONNTPDisconnectOperation.mm */; }; + 86826D824CA11A9D07E506CC /* MCMD5.h in Headers */ = {isa = PBXBuildFile; fileRef = C6D6F951171E5CB8006F5B28 /* MCMD5.h */; }; 8742EDE467A07D548A294318 /* MCIMAPNamespace.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6CD169E847800778456 /* MCIMAPNamespace.cpp */; }; - 875270C82497EF2D85294525 /* NSValue+MCO.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB25116FC2848000DB34C /* NSValue+MCO.mm */; }; 87732A5557EE97AA37ED35CF /* MCIMAPSearchExpression.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6D4169E847800778456 /* MCIMAPSearchExpression.cpp */; }; - 878C7C293710F029A32295D0 /* MCOMailProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = C6CF62B2175324CE006398B9 /* MCOMailProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 87A98537B7D111209AFDA9E3 /* MCOIMAPQuotaOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B3C1BDC17ABF306008BBF4C /* MCOIMAPQuotaOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8941EA189E618AD5FA281FE3 /* MCOAttachment.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB25D16FD4377000DB34C /* MCOAttachment.mm */; }; - 896A300E021C118CCD4DA8FC /* MCPOPSession.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6DE169E847800778456 /* MCPOPSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 89BFF372F06F06EE43F601EE /* MCMailProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = C6CF62C0175324F0006398B9 /* MCMailProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 896A300E021C118CCD4DA8FC /* MCPOPSession.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6DE169E847800778456 /* MCPOPSession.h */; }; + 89BFF372F06F06EE43F601EE /* MCMailProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = C6CF62C0175324F0006398B9 /* MCMailProvider.h */; }; 89DAEABAF1BE96FDBECEDE15 /* MCNNTPListNewsgroupsOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84D7375A199BFDCA005124E5 /* MCNNTPListNewsgroupsOperation.cpp */; }; - 89F641DF9343A7F89B3210DD /* NSValue+MCO.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB25016FC2846000DB34C /* NSValue+MCO.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 89FB57A7347B1506AD2B5573 /* MCOIMAPFetchFoldersOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = F87F190B16BB62B00012652F /* MCOIMAPFetchFoldersOperation.mm */; }; - 8A33AE1E339C800A921CE2DF /* MCOAbstractPart.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB23D16EDAAE0000DB34C /* MCOAbstractPart.h */; settings = {ATTRIBUTES = (Public, ); }; }; 8AB02545973F92F1FFECDAE6 /* MCAutoreleasePoolMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = C668E2CA1735CB8900A2BB47 /* MCAutoreleasePoolMac.mm */; }; - 8AB02FFE114F257EB58B90F4 /* MCOSMTPOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C6A81BC517068EB000882C15 /* MCOSMTPOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8AEA6CFEDE772561B10D77A2 /* MCMXRecordResolverOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 2744B1691A7A4637009E9E67 /* MCMXRecordResolverOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8AEA6CFEDE772561B10D77A2 /* MCMXRecordResolverOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 2744B1691A7A4637009E9E67 /* MCMXRecordResolverOperation.h */; }; 8B0095C91A00DDC500F84BC0 /* MCSMTPLoginOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B0095C71A00DDC500F84BC0 /* MCSMTPLoginOperation.cpp */; }; - 8B0095CC1A00DDE700F84BC0 /* MCOSMTPLoginOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8B0095CB1A00DDE700F84BC0 /* MCOSMTPLoginOperation.mm */; }; - 8B0095CE1A00DE7700F84BC0 /* MCOSMTPLoginOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8B0095CB1A00DDE700F84BC0 /* MCOSMTPLoginOperation.mm */; }; 8B0095CF1A00DE7700F84BC0 /* MCSMTPLoginOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B0095C71A00DDC500F84BC0 /* MCSMTPLoginOperation.cpp */; }; - 8B39E1B92970F8B2B206BE33 /* MCPOPFetchHeaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C62C6EF116A7C6DE00737497 /* MCPOPFetchHeaderOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8B5764371A00E1B0004868C0 /* MCOSMTPLoginOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8B0095CA1A00DDE700F84BC0 /* MCOSMTPLoginOperation.h */; }; + 8B39E1B92970F8B2B206BE33 /* MCPOPFetchHeaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C62C6EF116A7C6DE00737497 /* MCPOPFetchHeaderOperation.h */; }; 8B63FD72E8E31ABB1942FC95 /* MCNNTPPostOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F382219E1C7A626700E00721 /* MCNNTPPostOperation.cpp */; }; - 8BF8C9B751CDE6BF45D42610 /* MCOIMAPCapabilityOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F9517016B310073032E /* MCOIMAPCapabilityOperation.mm */; }; - 8C1FD6CFD00F8F45A40FEFA6 /* MCOPOPNoopOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84B639F017F282B4003B5BA2 /* MCOPOPNoopOperation.mm */; }; - 8C76A926F70726C194F51198 /* MCOIMAPCheckAccountOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F49A921C8EA1450087F4B7 /* MCOIMAPCheckAccountOperation.mm */; }; - 8C817A3F795D557A26E4337F /* MCOIMAPCheckAccountOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F49A921C8EA1450087F4B7 /* MCOIMAPCheckAccountOperation.mm */; }; - 8CAFD77E7A692C20D31A8BAF /* MCPOPMessageInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6DB169E847800778456 /* MCPOPMessageInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8CAFD77E7A692C20D31A8BAF /* MCPOPMessageInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6DB169E847800778456 /* MCPOPMessageInfo.h */; }; 8CD733AB06B81BAB7C3E40E3 /* MCRange.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6B3169E847800778456 /* MCRange.cpp */; }; 8CF5E712E3690395D0D51516 /* MCNNTPFetchOverviewOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84CFA98519F7159700FE35D2 /* MCNNTPFetchOverviewOperation.cpp */; }; - 8D96BE9CABB92A9E4CA3228F /* MCIMAPFetchContentToFileOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 810DB78C1C68F4E200017B12 /* MCIMAPFetchContentToFileOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8D96BE9CABB92A9E4CA3228F /* MCIMAPFetchContentToFileOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 810DB78C1C68F4E200017B12 /* MCIMAPFetchContentToFileOperation.h */; }; 8DE9F4E340CF1C374E516148 /* MCIMAPCustomCommandOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1820E7D31BD403ED00835D1E /* MCIMAPCustomCommandOperation.cpp */; }; - 8E5F1123F7348274D161A883 /* MCOIMAPCopyMessagesOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C6F61F7F17016A0D0073032E /* MCOIMAPCopyMessagesOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8EF93A43DF9F8B859852D0CB /* MCNNTPFetchAllArticlesOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D73741199BF963005124E5 /* MCNNTPFetchAllArticlesOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8F25E7F5171C475696E1C07B /* MCOIMAPSearchExpression.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F9817016B460073032E /* MCOIMAPSearchExpression.mm */; }; - 8F4A6F0C97289F6DD9830459 /* MCMainThread.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6BC169E847800778456 /* MCMainThread.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8F58AC8081D4161832402EBE /* MCDataMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6D4FD4219FB7DAA001F7E01 /* MCDataMac.mm */; }; - 8F6991D1F5D47C1EE53E0144 /* MCOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6BF169E847800778456 /* MCOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8EF93A43DF9F8B859852D0CB /* MCNNTPFetchAllArticlesOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D73741199BF963005124E5 /* MCNNTPFetchAllArticlesOperation.h */; }; + 8F4A6F0C97289F6DD9830459 /* MCMainThread.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6BC169E847800778456 /* MCMainThread.h */; }; + 8F6991D1F5D47C1EE53E0144 /* MCOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6BF169E847800778456 /* MCOperation.h */; }; 8F8203937E43E84F3B71ADB1 /* MCDataDecoderUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 811320AE1D02388A004B7ECF /* MCDataDecoderUtils.cpp */; }; 8FC62F3EBB05AAA6CB60FF7C /* MCIMAPFetchNamespaceOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA82A16A29FAA00778456 /* MCIMAPFetchNamespaceOperation.cpp */; }; 8FCB2EF3AB3714C3988A1125 /* MCMessageHeader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA69F169E847800778456 /* MCMessageHeader.cpp */; }; - 900337F01B5DD13ABB63BCC6 /* MCIMAPMessagePart.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6CA169E847800778456 /* MCIMAPMessagePart.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9018BECB2B8C0DF224A15132 /* MCIMAPNamespace.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6CE169E847800778456 /* MCIMAPNamespace.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 90678C5B9D575E73304D461E /* MCOIMAP.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB25416FD32A0000DB34C /* MCOIMAP.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 900337F01B5DD13ABB63BCC6 /* MCIMAPMessagePart.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6CA169E847800778456 /* MCIMAPMessagePart.h */; }; + 9018BECB2B8C0DF224A15132 /* MCIMAPNamespace.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6CE169E847800778456 /* MCIMAPNamespace.h */; }; 90A45B4FD6198433333A19CA /* cstring.c in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7C721A70771B0001DCC3 /* cstring.c */; }; 912A5DAAE7352F9C53F2C15F /* ustring.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7CC11A70771B0001DCC3 /* ustring.cpp */; }; - 915157868D0F017A7A1629CD /* MCIMAPIdentityOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C62C6ED316A2A0E600737497 /* MCIMAPIdentityOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 915157868D0F017A7A1629CD /* MCIMAPIdentityOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C62C6ED316A2A0E600737497 /* MCIMAPIdentityOperation.h */; }; 9152E0DB18EEF85D6FDBEA14 /* MCString.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6B7169E847800778456 /* MCString.cpp */; }; - 9161ECD867E352B780AA36A2 /* MCOAbstract.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB23616EDAA2B000DB34C /* MCOAbstract.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 91D70C9B39074553FA57C2DC /* MCOIMAP.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB25416FD32A0000DB34C /* MCOIMAP.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 91F8E8ED4014B8C26821D247 /* MCPOPOperationCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = C62C6EFC16A7CA1500737497 /* MCPOPOperationCallback.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 920C3F811C04A8DA655F794B /* MCMailProvidersManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C6CF62C2175324F0006398B9 /* MCMailProvidersManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 91F8E8ED4014B8C26821D247 /* MCPOPOperationCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = C62C6EFC16A7CA1500737497 /* MCPOPOperationCallback.h */; }; + 920C3F811C04A8DA655F794B /* MCMailProvidersManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C6CF62C2175324F0006398B9 /* MCMailProvidersManager.h */; }; 9360BE7A652078955C7AE4C6 /* MCLibetpan.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BD637139177DFF080094121B /* MCLibetpan.cpp */; }; - 936CA0E6259664A60BA684B2 /* NSArray+MCO.h in Headers */ = {isa = PBXBuildFile; fileRef = C6EB30FD16B8E50F0091F4F1 /* NSArray+MCO.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 937170C4694EDF6630CC4DDA /* MCAddressDisplay.h in Headers */ = {isa = PBXBuildFile; fileRef = C63CD67816BDCDD400DB18F1 /* MCAddressDisplay.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 93D509F7FAE001720B9AFBB8 /* MCIMAPNoopOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84B639EC17F280F3003B5BA2 /* MCIMAPNoopOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 943C21F93A500A02B9044F05 /* MCOIMAPIdentity.mm in Sources */ = {isa = PBXBuildFile; fileRef = C63D316117C92D8300A4D993 /* MCOIMAPIdentity.mm */; }; + 937170C4694EDF6630CC4DDA /* MCAddressDisplay.h in Headers */ = {isa = PBXBuildFile; fileRef = C63CD67816BDCDD400DB18F1 /* MCAddressDisplay.h */; }; + 93D509F7FAE001720B9AFBB8 /* MCIMAPNoopOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84B639EC17F280F3003B5BA2 /* MCIMAPNoopOperation.h */; }; 943F1A9A17D964F600F0C798 /* MCIMAPConnectOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 943F1A9817D964F600F0C798 /* MCIMAPConnectOperation.cpp */; }; 943F1A9E17D96C5500F0C798 /* MCIMAPConnectOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 943F1A9817D964F600F0C798 /* MCIMAPConnectOperation.cpp */; }; 943F1AA017D9736100F0C798 /* MCIMAPConnectOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 943F1A9917D964F600F0C798 /* MCIMAPConnectOperation.h */; }; - 946090F1BB6898E345104F0D /* MCONNTPFetchHeaderOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84D7376C199C005A005124E5 /* MCONNTPFetchHeaderOperation.mm */; }; 94947F723AD04A0A36463CF3 /* MCIMAPFolderInfoOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C62C6ED616A398FA00737497 /* MCIMAPFolderInfoOperation.cpp */; }; - 94FCD8C87C6487357A2B7C12 /* MCOAccountValidator.mm in Sources */ = {isa = PBXBuildFile; fileRef = 27478E831A7646F8004AE621 /* MCOAccountValidator.mm */; }; - 9516EA863A64491B2C847078 /* MCIterator.h in Headers */ = {isa = PBXBuildFile; fileRef = C6D6F96D1721028D006F5B28 /* MCIterator.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9516EA863A64491B2C847078 /* MCIterator.h in Headers */ = {isa = PBXBuildFile; fileRef = C6D6F96D1721028D006F5B28 /* MCIterator.h */; }; 960EF405CA617C29A584A0F7 /* MCLog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6AF169E847800778456 /* MCLog.cpp */; }; 9669A0FFA906CACCCAB2895D /* umutex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7CED1A7079300001DCC3 /* umutex.cpp */; }; 9760A8F16AE2C2BB7FC32D7A /* MCConnectionLoggerUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C68B2AF517797389005E61EF /* MCConnectionLoggerUtils.cpp */; }; - 97746DC826DB4886D163A572 /* MCIMAPOperationCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA7F416A15A6300778456 /* MCIMAPOperationCallback.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 97A2356B6CB23A5CD859CF0D /* MCPOP.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6D9169E847800778456 /* MCPOP.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 97F4A1DB58D6C077AF1FCE56 /* MCOPOPNoopOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84B639EF17F282B4003B5BA2 /* MCOPOPNoopOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 981E2815BEBDEBB3FD9E348E /* MCOIMAPOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C623C58D16FE6B45001BBEFC /* MCOIMAPOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 97746DC826DB4886D163A572 /* MCIMAPOperationCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA7F416A15A6300778456 /* MCIMAPOperationCallback.h */; }; + 97A2356B6CB23A5CD859CF0D /* MCPOP.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6D9169E847800778456 /* MCPOP.h */; }; 9834D71F64B088E0C5E86BC5 /* csdetect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7C6A1A70771B0001DCC3 /* csdetect.cpp */; }; - 98A6E1C1284BD3C994F6A2E9 /* MCOMessageBuilder.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB26016FD438F000DB34C /* MCOMessageBuilder.mm */; }; - 9904168CD37AB9E8EA3BE559 /* MCOIMAPFetchNamespaceOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F8F17016B090073032E /* MCOIMAPFetchNamespaceOperation.mm */; }; 9927A59231F681695C392F45 /* cstring.c in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7C721A70771B0001DCC3 /* cstring.c */; }; - 9941A41F649705E26179A96C /* MCOMessagePart.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB26616FD43E2000DB34C /* MCOMessagePart.mm */; }; - 99D2B618A7C9BEF1DBB0EAC9 /* MCOIMAPFetchParsedContentOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8199FBE719FAEA440040BBC3 /* MCOIMAPFetchParsedContentOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9A6B2DF110BCA6CC55E71E97 /* MCOMultipart.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB26816FD44C2000DB34C /* MCOMultipart.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9AC1190D35512F25DC179E6A /* MCNNTPAsyncSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D7372B199BF66C005124E5 /* MCNNTPAsyncSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9AF0FDF184E1FF511D288E61 /* MCString.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6B8169E847800778456 /* MCString.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9AC1190D35512F25DC179E6A /* MCNNTPAsyncSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D7372B199BF66C005124E5 /* MCNNTPAsyncSession.h */; }; + 9AF0FDF184E1FF511D288E61 /* MCString.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6B8169E847800778456 /* MCString.h */; }; 9B03A27FFCAA4583FDDBD347 /* csrutf8.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7C711A70771B0001DCC3 /* csrutf8.cpp */; }; - 9BCD85B21C0BC2A200CA2B02 /* MCOAddress.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB24116EDAAF3000DB34C /* MCOAddress.mm */; }; - 9C5253B510321886FBF6B9F2 /* MCMultipart.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6E9169E847800778456 /* MCMultipart.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9C5253B510321886FBF6B9F2 /* MCMultipart.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6E9169E847800778456 /* MCMultipart.h */; }; 9C57079671DCE1ACCDF3E8F0 /* MCPOPOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C62C6EF916A7C93F00737497 /* MCPOPOperation.cpp */; }; 9C95572790276F512AEFDF23 /* MCNNTPGroupInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 849189A918C94986002063A3 /* MCNNTPGroupInfo.cpp */; }; - 9D2A8FB8A0073172A23A119E /* MCOMailProvider.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6CF62B3175324CE006398B9 /* MCOMailProvider.mm */; }; - 9DAB085A9E14C50F0D96F8AA /* MCIMAPFolderInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = C673EBEC1A46B41000A53F7F /* MCIMAPFolderInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9DAB085A9E14C50F0D96F8AA /* MCIMAPFolderInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = C673EBEC1A46B41000A53F7F /* MCIMAPFolderInfo.h */; }; 9DCF912E373FEF77F81D772E /* MCSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6B5169E847800778456 /* MCSet.cpp */; }; 9DD5E50CD46DB05FEFA8D188 /* MCPOPNoopOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B639E617F27EBD003B5BA2 /* MCPOPNoopOperation.cpp */; }; - 9E15EE187EDC0EDD52E672CF /* MCOIMAPFetchNamespaceOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C6F61F8E17016B090073032E /* MCOIMAPFetchNamespaceOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9E56607BBA51478E92FA5F14 /* MCOPOPNoopOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84B639F017F282B4003B5BA2 /* MCOPOPNoopOperation.mm */; }; 9E774D891767C7F60065EB9B /* MCIMAPFolderStatus.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9E774D881767C7F60065EB9B /* MCIMAPFolderStatus.cpp */; }; 9E774D8A1767C7F60065EB9B /* MCIMAPFolderStatus.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9E774D881767C7F60065EB9B /* MCIMAPFolderStatus.cpp */; }; 9E774D8B1767CD3C0065EB9B /* MCIMAPFolderStatus.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9E774D871767C54E0065EB9B /* MCIMAPFolderStatus.h */; }; 9E774D8C1767CD490065EB9B /* MCIMAPFolderStatus.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9E774D871767C54E0065EB9B /* MCIMAPFolderStatus.h */; }; - 9E7F63C23A73DE9951AB6082 /* MCIMAPMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6C8169E847800778456 /* MCIMAPMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9E7F63C23A73DE9951AB6082 /* MCIMAPMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6C8169E847800778456 /* MCIMAPMessage.h */; }; 9E8EE4564C84443EE6FA23C9 /* ucsdet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7CE91A7077680001DCC3 /* ucsdet.cpp */; }; - 9EF9AB09175F2EC60027FA3B /* MCOIMAPFolderStatus.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9EF9AB07175F2EC60027FA3B /* MCOIMAPFolderStatus.mm */; }; - 9EF9AB0A175F2EC60027FA3B /* MCOIMAPFolderStatus.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9EF9AB07175F2EC60027FA3B /* MCOIMAPFolderStatus.mm */; }; 9EF9AB11175F319A0027FA3B /* MCIMAPFolderStatusOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9EF9AB10175F319A0027FA3B /* MCIMAPFolderStatusOperation.cpp */; }; 9EF9AB12175F319A0027FA3B /* MCIMAPFolderStatusOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9EF9AB10175F319A0027FA3B /* MCIMAPFolderStatusOperation.cpp */; }; - 9EF9AB19175F36600027FA3B /* MCOIMAPFolderStatusOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9EF9AB18175F36600027FA3B /* MCOIMAPFolderStatusOperation.mm */; }; - 9EF9AB1A175F36600027FA3B /* MCOIMAPFolderStatusOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9EF9AB18175F36600027FA3B /* MCOIMAPFolderStatusOperation.mm */; }; - 9EF9AB20175F3FD10027FA3B /* MCOIMAPFolderStatus.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9EF9AB06175F2EC60027FA3B /* MCOIMAPFolderStatus.h */; }; - 9EF9AB21175F3FD10027FA3B /* MCOIMAPFolderStatusOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9EF9AB16175F35C60027FA3B /* MCOIMAPFolderStatusOperation.h */; }; - 9EF9AB22175F406D0027FA3B /* MCOIMAPFolderStatus.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9EF9AB06175F2EC60027FA3B /* MCOIMAPFolderStatus.h */; }; - 9EF9AB23175F406D0027FA3B /* MCOIMAPFolderStatusOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9EF9AB16175F35C60027FA3B /* MCOIMAPFolderStatusOperation.h */; }; 9EF9AB24175F409D0027FA3B /* MCIMAPFolderStatusOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9EF9AB0E175F30C20027FA3B /* MCIMAPFolderStatusOperation.h */; }; 9EF9AB25175F40C70027FA3B /* MCIMAPFolderStatusOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9EF9AB0E175F30C20027FA3B /* MCIMAPFolderStatusOperation.h */; }; 9F89C826D347517A53EFB827 /* uarrsort.c in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7CBA1A70771B0001DCC3 /* uarrsort.c */; }; - 9FBC69484783555390502CFF /* MCOObjectWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = C64FF38F16B3C13000F8C162 /* MCOObjectWrapper.h */; settings = {ATTRIBUTES = (Public, ); }; }; 9FE4A7EADDB2DEB7EF72D156 /* MCHash.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6AB169E847800778456 /* MCHash.cpp */; }; - A009D0B9C2A026D48A9EB564 /* MCAsync.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA7E416A14A4500778456 /* MCAsync.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A00E3DFF008A7697C79E7677 /* MCOPOPOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C6A81BE01706905600882C15 /* MCOPOPOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A01585743857B33FB99DAB99 /* MCOIMAPFetchMessagesOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C6F61F8217016A200073032E /* MCOIMAPFetchMessagesOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A0A1ACAB18472711AC5704F5 /* MCSMTPOperationCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA7E116A1425400778456 /* MCSMTPOperationCallback.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A009D0B9C2A026D48A9EB564 /* MCAsync.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA7E416A14A4500778456 /* MCAsync.h */; }; + A0A1ACAB18472711AC5704F5 /* MCSMTPOperationCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA7E116A1425400778456 /* MCSMTPOperationCallback.h */; }; A0BF12275D4256FD6DAFBD3C /* MCBase64.c in Sources */ = {isa = PBXBuildFile; fileRef = C67597C117A8D65000DA69DF /* MCBase64.c */; }; - A0E39142E03B9BDE5738B179 /* MCOHTMLRendererIMAPDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = C6F5B9FF16FED7AB00D9DABD /* MCOHTMLRendererIMAPDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A0F47559BD447B029EB2DD82 /* MCOProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = C6CF62B8175324CE006398B9 /* MCOProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; A0FFF7352B1DCF658A4B66AB /* csrmbcs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7C6E1A70771B0001DCC3 /* csrmbcs.cpp */; }; A108EE056AE49B51447D52C7 /* MCIMAPMoveMessagesOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8568A4111C610D9800FF4470 /* MCIMAPMoveMessagesOperation.cpp */; }; - A1196034473C65866C2E49B2 /* MCOAbstractPart.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB23D16EDAAE0000DB34C /* MCOAbstractPart.h */; settings = {ATTRIBUTES = (Public, ); }; }; A11FA879FB152E0A5AA3E21B /* MCIMAPIdleOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA82716A29EF400778456 /* MCIMAPIdleOperation.cpp */; }; - A15C9FF7C392424E08ADC54E /* MCIMAPSyncResult.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB22016E34DCB000DB34C /* MCIMAPSyncResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A1C646D1BEF0C245A0C891E2 /* MCONNTPDisconnectOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84D7378E199C02A8005124E5 /* MCONNTPDisconnectOperation.mm */; }; - A243079A0AEA1353E041D767 /* MCOIMAPFolderStatusOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EF9AB16175F35C60027FA3B /* MCOIMAPFolderStatusOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A2821BEC0F171D2C7B1786A2 /* MCIMAPFolder.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6C6169E847800778456 /* MCIMAPFolder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A3740975B467CCB6E8B45BF4 /* MCIMAPNamespaceItem.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6D0169E847800778456 /* MCIMAPNamespaceItem.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A15C9FF7C392424E08ADC54E /* MCIMAPSyncResult.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB22016E34DCB000DB34C /* MCIMAPSyncResult.h */; }; + A2821BEC0F171D2C7B1786A2 /* MCIMAPFolder.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6C6169E847800778456 /* MCIMAPFolder.h */; }; + A3740975B467CCB6E8B45BF4 /* MCIMAPNamespaceItem.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6D0169E847800778456 /* MCIMAPNamespaceItem.h */; }; A3FA0952984E9F27D395EC6E /* MCIMAPDisconnectOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6081679177635D2001F1018 /* MCIMAPDisconnectOperation.cpp */; }; A42D0D576E54917ED0F730D8 /* MCIMAPFetchFoldersOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA7FA16A2959700778456 /* MCIMAPFetchFoldersOperation.cpp */; }; - A4866F6D49E4EBB355275A1C /* MCOIMAPSearchExpression.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F9817016B460073032E /* MCOIMAPSearchExpression.mm */; }; - A4A303F4AF7BB01CC915449E /* MCORange.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6CCC5C616FFE5190077A5FC /* MCORange.mm */; }; - A51B28DF8F2B471070FDA7EA /* MCOIMAPBaseOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61FB41702AB2F0073032E /* MCOIMAPBaseOperation.mm */; }; - A533D6485454C01302AEFFB7 /* MCProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = C6CF62C5175324F0006398B9 /* MCProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A533D6485454C01302AEFFB7 /* MCProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = C6CF62C5175324F0006398B9 /* MCProvider.h */; }; A549CD214B203F1620CC0F77 /* uobject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7CC01A70771B0001DCC3 /* uobject.cpp */; }; A55D0A007FEB978C8B14BCDC /* MCDataStreamDecoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 81416BDC1CF8BB17000A4299 /* MCDataStreamDecoder.cpp */; }; - A560E64FE3F78355FFEA0B90 /* MCOAbstractMultipart.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB23B16EDAAC7000DB34C /* MCOAbstractMultipart.mm */; }; - A59ECA8DDE5FD9BB200E2D9E /* MCPOPProgressCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6DC169E847800778456 /* MCPOPProgressCallback.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A5BB29FB218B4B4AECAB2532 /* MCOMessageParser.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB26216FD43A1000DB34C /* MCOMessageParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A59ECA8DDE5FD9BB200E2D9E /* MCPOPProgressCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6DC169E847800778456 /* MCPOPProgressCallback.h */; }; A5C7685D8D8BBB741AE7FFBE /* MCIMAPDeleteFolderOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA80316A2997B00778456 /* MCIMAPDeleteFolderOperation.cpp */; }; - A5E1D6302C5C5585030086E7 /* MCOAbstractMessagePart.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB23716EDAA3F000DB34C /* MCOAbstractMessagePart.h */; settings = {ATTRIBUTES = (Public, ); }; }; A623909AAA8C23264EEF776E /* MCIMAPMessagePart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6C9169E847800778456 /* MCIMAPMessagePart.cpp */; }; - A68E58803899E2416FC35EBC /* MCOMultipart.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB26916FD44C2000DB34C /* MCOMultipart.mm */; }; - A7D0A4BB5B7D25809B33B723 /* MCValue.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6BB169E847800778456 /* MCValue.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A805BC4801E78224A75CC196 /* MCONNTPFetchServerTimeOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84CFA99419F725CB00FE35D2 /* MCONNTPFetchServerTimeOperation.mm */; }; + A7D0A4BB5B7D25809B33B723 /* MCValue.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6BB169E847800778456 /* MCValue.h */; }; A82FCADB37B75DC40B2F69AE /* MCHash.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6AB169E847800778456 /* MCHash.cpp */; }; A849B8D51A28615EEF2EABE3 /* MCIMAPMultipart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6CB169E847800778456 /* MCIMAPMultipart.cpp */; }; - A959C39DF6ABC747BDEB5247 /* MCOIMAPFetchContentToFileOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 810DB7901C68F50600017B12 /* MCOIMAPFetchContentToFileOperation.mm */; }; A95ECF069F8855F2FAEBE187 /* MCMXRecordResolverOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2744B1681A7A4637009E9E67 /* MCMXRecordResolverOperation.cpp */; }; - A9AC247A8C5B4CCED04F6B1A /* MCOPOPSession.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6A81BD51706903500882C15 /* MCOPOPSession.mm */; }; - A9CA34D66C9C3F45BBEB98EB /* MCIMAPIdleOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA82816A29F0300778456 /* MCIMAPIdleOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A9CA34D66C9C3F45BBEB98EB /* MCIMAPIdleOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA82816A29F0300778456 /* MCIMAPIdleOperation.h */; }; A9D52459D38E9DFFBFFD3530 /* MCNNTPFetchArticleOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84D7373B199BF83B005124E5 /* MCNNTPFetchArticleOperation.cpp */; }; A9F258003F34845F30D30FB3 /* MCIMAPAsyncConnection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA7FD16A295B500778456 /* MCIMAPAsyncConnection.cpp */; }; - AA62B1999E009E0FE4814FCF /* MCNNTPFetchOverviewOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84CFA98619F7159700FE35D2 /* MCNNTPFetchOverviewOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AA830E979F6BFDC40649265E /* MCIMAPFetchContentToFileOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 810DB78C1C68F4E200017B12 /* MCIMAPFetchContentToFileOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AA62B1999E009E0FE4814FCF /* MCNNTPFetchOverviewOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84CFA98619F7159700FE35D2 /* MCNNTPFetchOverviewOperation.h */; }; + AA830E979F6BFDC40649265E /* MCIMAPFetchContentToFileOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 810DB78C1C68F4E200017B12 /* MCIMAPFetchContentToFileOperation.h */; }; AAA1D2EBA7ACD7A7408B95B8 /* MCIMAPStoreLabelsOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA82116A29E4F00778456 /* MCIMAPStoreLabelsOperation.cpp */; }; AAA5607C1DEF5AEB88EF5FBE /* MCIMAPFetchContentToFileOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 810DB78B1C68F4E200017B12 /* MCIMAPFetchContentToFileOperation.cpp */; }; AABA8E97D2671BB334A75754 /* MCOperationQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6C1169E847800778456 /* MCOperationQueue.cpp */; }; AAE6103C7EE49D55C36F5490 /* MCSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6B5169E847800778456 /* MCSet.cpp */; }; - AAEB91E93571116AF7B755D5 /* MCAbstractMessagePart.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA697169E847800778456 /* MCAbstractMessagePart.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB594B926AA4F81F3F7545FC /* MCNull.h in Headers */ = {isa = PBXBuildFile; fileRef = C6D6F953171E5CB8006F5B28 /* MCNull.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ABAF7343AC8408EEA9819D6C /* MCOIMAPCapabilityOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F9517016B310073032E /* MCOIMAPCapabilityOperation.mm */; }; + AAEB91E93571116AF7B755D5 /* MCAbstractMessagePart.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA697169E847800778456 /* MCAbstractMessagePart.h */; }; + AB594B926AA4F81F3F7545FC /* MCNull.h in Headers */ = {isa = PBXBuildFile; fileRef = C6D6F953171E5CB8006F5B28 /* MCNull.h */; }; AC6F99B5ECC7D61FE83BDE4E /* MCHTMLCleaner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C63CD68F16BE566D00DB18F1 /* MCHTMLCleaner.cpp */; }; - AC811A049DE2A602AE678A7E /* MCIMAPOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA7F016A15A4D00778456 /* MCIMAPOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ACBE12776961DBE96F6E88CF /* MCMessagePart.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6E7169E847800778456 /* MCMessagePart.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AD63521F7FED2DCD76765F00 /* MCIMAPMessageRenderingOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = DA0F1C7A177C07B300F0D3B4 /* MCIMAPMessageRenderingOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ADBE865F69A3ECAFCFF6064C /* MCONNTPFetchAllArticlesOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D73773199C00AB005124E5 /* MCONNTPFetchAllArticlesOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ADC0ECFD26C9139D2EAB9A4E /* NSDictionary+MCO.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6EB30F616B8C9480091F4F1 /* NSDictionary+MCO.mm */; }; - AE2E1DE7529590DE128A1143 /* MCSMTPProgressCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6ED169E847800778456 /* MCSMTPProgressCallback.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AE5F1F0F75CB25015A0F3F11 /* MCOperationCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6C0169E847800778456 /* MCOperationCallback.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AC811A049DE2A602AE678A7E /* MCIMAPOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA7F016A15A4D00778456 /* MCIMAPOperation.h */; }; + ACBE12776961DBE96F6E88CF /* MCMessagePart.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6E7169E847800778456 /* MCMessagePart.h */; }; + AD63521F7FED2DCD76765F00 /* MCIMAPMessageRenderingOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = DA0F1C7A177C07B300F0D3B4 /* MCIMAPMessageRenderingOperation.h */; }; + AE2E1DE7529590DE128A1143 /* MCSMTPProgressCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6ED169E847800778456 /* MCSMTPProgressCallback.h */; }; + AE5F1F0F75CB25015A0F3F11 /* MCOperationCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6C0169E847800778456 /* MCOperationCallback.h */; }; AEDB88E1F9D52B022B1334A0 /* MCIMAPSession.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6D6169E847800778456 /* MCIMAPSession.cpp */; }; - AF2B2DA5B20B882750859E34 /* MCAsyncNNTP.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D73729199BF63F005124E5 /* MCAsyncNNTP.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B03DA9FB94C6C44AF4D84907 /* MCONNTPOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D73766199BFFFC005124E5 /* MCONNTPOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AF2B2DA5B20B882750859E34 /* MCAsyncNNTP.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D73729199BF63F005124E5 /* MCAsyncNNTP.h */; }; B067722112DC35F007BDEC7A /* MCMessageParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6E4169E847800778456 /* MCMessageParser.cpp */; }; B0D15802A099E9ACAC901523 /* MCPOPSession.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6DD169E847800778456 /* MCPOPSession.cpp */; }; B19960FEAC7C297D67F11FA4 /* MCIMAPCapabilityOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64BB22916E5C0A3000DB34C /* MCIMAPCapabilityOperation.cpp */; }; - B1D7FD0CAB3A7FB81DBB21C6 /* MCOMessageBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB25F16FD438F000DB34C /* MCOMessageBuilder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B1E68F3C5C04001AA7D7C012 /* MCIMAPNamespace.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6CE169E847800778456 /* MCIMAPNamespace.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B2156F4CF16BF378D4F26B83 /* MCAbstractMessagePart.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA697169E847800778456 /* MCAbstractMessagePart.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B271EA628771A97A43AEAAEB /* MCPOPFetchMessagesOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C62C6F0516A7E54400737497 /* MCPOPFetchMessagesOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B1E68F3C5C04001AA7D7C012 /* MCIMAPNamespace.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6CE169E847800778456 /* MCIMAPNamespace.h */; }; + B2156F4CF16BF378D4F26B83 /* MCAbstractMessagePart.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA697169E847800778456 /* MCAbstractMessagePart.h */; }; + B271EA628771A97A43AEAAEB /* MCPOPFetchMessagesOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C62C6F0516A7E54400737497 /* MCPOPFetchMessagesOperation.h */; }; B2CA7CEFFC4B937592A4E9B6 /* MCIMAPFetchContentToFileOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 810DB78B1C68F4E200017B12 /* MCIMAPFetchContentToFileOperation.cpp */; }; - B2ECBB6C8357FE5DF87E2E8F /* MCSizeFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = C63CD67E16BDCDD400DB18F1 /* MCSizeFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B303C50210301040BCD28892 /* MCOAbstractMessage.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB23416EDAA17000DB34C /* MCOAbstractMessage.mm */; }; - B30AC8720D220554CC50BB23 /* MCOPOPSession.h in Headers */ = {isa = PBXBuildFile; fileRef = C6A81BD41706903500882C15 /* MCOPOPSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B39712FEC0FF79FDDF201282 /* MCOIMAPOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C623C58E16FE6B45001BBEFC /* MCOIMAPOperation.mm */; }; - B3D4C10E5F2988F0EDFB9756 /* MCCore.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA782169F23AB00778456 /* MCCore.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B403E11D79BD3C16BDE4A134 /* MCOIMAPFetchContentToFileOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 810DB78F1C68F50600017B12 /* MCOIMAPFetchContentToFileOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B46C309D546FCEEDED7DEAC2 /* MCHash.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6AC169E847800778456 /* MCHash.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B60487ACA616A809B944A0F2 /* MCOIMAPCustomCommandOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1845356F1BE23FBD000B0D87 /* MCOIMAPCustomCommandOperation.mm */; }; - B60E7F7B892BE16A4C1222A3 /* MCNNTPPostOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = F382219D1C7A60A800E00721 /* MCNNTPPostOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B617849103B64FEBA30975E9 /* MCIMAPNamespaceItem.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6D0169E847800778456 /* MCIMAPNamespaceItem.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B6689354330CE0C39D31DDDC /* MCOIMAPBaseOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C6F61FB31702AB2A0073032E /* MCOIMAPBaseOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B68A2D70B3DE86BEB46B5D19 /* MCOIMAPMultiDisconnectOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6EFFBCB1833334900CFF656 /* MCOIMAPMultiDisconnectOperation.mm */; }; + B2ECBB6C8357FE5DF87E2E8F /* MCSizeFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = C63CD67E16BDCDD400DB18F1 /* MCSizeFormatter.h */; }; + B3D4C10E5F2988F0EDFB9756 /* MCCore.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA782169F23AB00778456 /* MCCore.h */; }; + B46C309D546FCEEDED7DEAC2 /* MCHash.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6AC169E847800778456 /* MCHash.h */; }; + B60E7F7B892BE16A4C1222A3 /* MCNNTPPostOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = F382219D1C7A60A800E00721 /* MCNNTPPostOperation.h */; }; + B617849103B64FEBA30975E9 /* MCIMAPNamespaceItem.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6D0169E847800778456 /* MCIMAPNamespaceItem.h */; }; B697AA487FD38113BDCAD094 /* utrace.c in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7CC21A70771B0001DCC3 /* utrace.c */; }; - B697FE5DC80481D97694C290 /* MCOIMAPFolder.mm in Sources */ = {isa = PBXBuildFile; fileRef = C623C59216FE750E001BBEFC /* MCOIMAPFolder.mm */; }; - B6D79A51A86764B5C75FCB50 /* MCONNTPFetchOverviewOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84CFA98219F7153B00FE35D2 /* MCONNTPFetchOverviewOperation.mm */; }; B6DAF3A5BC75C3131A3E5BB7 /* MCAddress.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA69C169E847800778456 /* MCAddress.cpp */; }; - B7626C784C6E4A64FA1BDA03 /* MCOSMTPSendOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6A81BC217068E9500882C15 /* MCOSMTPSendOperation.mm */; }; - B79FDB53A9025A12340633E8 /* MCONetService.h in Headers */ = {isa = PBXBuildFile; fileRef = C6CF62B6175324CE006398B9 /* MCONetService.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B7AD69B7F705319F034C0158 /* MCSMTPOperationCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA7E116A1425400778456 /* MCSMTPOperationCallback.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B7CC1BBDE98AB1841FF4D4BC /* MCIMAPFolderStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E774D871767C54E0065EB9B /* MCIMAPFolderStatus.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B7AD69B7F705319F034C0158 /* MCSMTPOperationCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA7E116A1425400778456 /* MCSMTPOperationCallback.h */; }; + B7CC1BBDE98AB1841FF4D4BC /* MCIMAPFolderStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E774D871767C54E0065EB9B /* MCIMAPFolderStatus.h */; }; B808A967FC94D0E43BE4D183 /* MCNNTPPostOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F382219E1C7A626700E00721 /* MCNNTPPostOperation.cpp */; }; - B861E6E66A83DE69F974843A /* MCOMessageHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB24316EDAAFD000DB34C /* MCOMessageHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; B877A3CFE9A48A87DDDDE151 /* MCMessagePart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6E6169E847800778456 /* MCMessagePart.cpp */; }; - B895E6DA3DB2C9094513F376 /* MCNNTPSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 849189A018C93FB7002063A3 /* MCNNTPSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B8982E581E0D7A44D84E18D7 /* MCOIMAPPart.h in Headers */ = {isa = PBXBuildFile; fileRef = C6F5B9EF16FEA3D700D9DABD /* MCOIMAPPart.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B895E6DA3DB2C9094513F376 /* MCNNTPSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 849189A018C93FB7002063A3 /* MCNNTPSession.h */; }; B9C8E309672D819BAC84A0B3 /* MCHTMLRendererCallback.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C63CD68416BE148B00DB18F1 /* MCHTMLRendererCallback.cpp */; }; B9D5748BDAB56CC85D8728FD /* uobject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7CC01A70771B0001DCC3 /* uobject.cpp */; }; - BA9EE0254B07D265D628EB0D /* MCRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = C63CD68716BE1AB600DB18F1 /* MCRenderer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BAF3C3BA29851FF65EA8510E /* MCLibetpanTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = C6AC1131171249DF00B715B7 /* MCLibetpanTypes.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BB326E032A5839CD18A90E3D /* MCObjC.h in Headers */ = {isa = PBXBuildFile; fileRef = C6EB30DC16B5B7770091F4F1 /* MCObjC.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BA9EE0254B07D265D628EB0D /* MCRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = C63CD68716BE1AB600DB18F1 /* MCRenderer.h */; }; + BAF3C3BA29851FF65EA8510E /* MCLibetpanTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = C6AC1131171249DF00B715B7 /* MCLibetpanTypes.h */; }; BB68B0C5AAB589D806F35438 /* MCIMAPRenameFolderOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA80016A295E200778456 /* MCIMAPRenameFolderOperation.cpp */; }; - BB8DD5F98108DDE2E260D3A1 /* MCOIMAPFetchContentOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F8617016AD60073032E /* MCOIMAPFetchContentOperation.mm */; }; - BBC9F0FBE0D1C014C133D3E9 /* MCONNTPListNewsgroupsOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84D7378A199C0260005124E5 /* MCONNTPListNewsgroupsOperation.mm */; }; BC2E7B751D3A26C80F40E3B2 /* csr2022.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7C6C1A70771B0001DCC3 /* csr2022.cpp */; }; BC47B8DB9BDE862640B003D4 /* MCSMTPDisconnectOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C608167317759967001F1018 /* MCSMTPDisconnectOperation.cpp */; }; - BC674766811CC380212CFC5B /* NSIndexSet+MCO.m in Sources */ = {isa = PBXBuildFile; fileRef = C69BA85A17DEFCCB00D601B7 /* NSIndexSet+MCO.m */; }; BCC9CBF3618E6376F3D9B7DA /* MCAccountValidator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 27478E7E1A764698004AE621 /* MCAccountValidator.cpp */; }; BD49963719FEC6DD000945BC /* ConvertUTF.c in Sources */ = {isa = PBXBuildFile; fileRef = BD49963519FEC6DD000945BC /* ConvertUTF.c */; }; BD49963819FEC6DD000945BC /* ConvertUTF.c in Sources */ = {isa = PBXBuildFile; fileRef = BD49963519FEC6DD000945BC /* ConvertUTF.c */; }; @@ -882,8 +954,8 @@ BD63713B177DFF080094121B /* MCLibetpan.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BD637139177DFF080094121B /* MCLibetpan.cpp */; }; BD7C0F461B545CE2003337DF /* MCZipMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = BD7C0F451B545CE2003337DF /* MCZipMac.mm */; }; BD7C0F471B545CE2003337DF /* MCZipMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = BD7C0F451B545CE2003337DF /* MCZipMac.mm */; }; - BD8A849CDEC40C3C98CECBA3 /* MCIMAPProgressCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6D3169E847800778456 /* MCIMAPProgressCallback.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BDA9FE8E7500DD007A2C6EF8 /* MCCore.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA782169F23AB00778456 /* MCCore.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BD8A849CDEC40C3C98CECBA3 /* MCIMAPProgressCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6D3169E847800778456 /* MCIMAPProgressCallback.h */; }; + BDA9FE8E7500DD007A2C6EF8 /* MCCore.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA782169F23AB00778456 /* MCCore.h */; }; BDCD7C5B1A5B1C2C0001DCC3 /* MCErrorMessage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7C591A5B1C2C0001DCC3 /* MCErrorMessage.cpp */; }; BDCD7C5C1A5B1C2C0001DCC3 /* MCErrorMessage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7C591A5B1C2C0001DCC3 /* MCErrorMessage.cpp */; }; BDCD7CC31A70771B0001DCC3 /* csdetect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7C6A1A70771B0001DCC3 /* csdetect.cpp */; }; @@ -930,45 +1002,20 @@ BDCD7CEF1A7079300001DCC3 /* cmemory.c in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7CEC1A7079300001DCC3 /* cmemory.c */; }; BDCD7CF01A7079300001DCC3 /* umutex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7CED1A7079300001DCC3 /* umutex.cpp */; }; BDCD7CF11A7079300001DCC3 /* umutex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7CED1A7079300001DCC3 /* umutex.cpp */; }; - BDDFF64B6753ECDD32E875AC /* MCOIMAPMultipart.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F5B9E716FEA28600D9DABD /* MCOIMAPMultipart.mm */; }; BE1BAA5139A95198A6F67BE5 /* MCNNTPFetchServerTimeOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84CFA98D19F724E500FE35D2 /* MCNNTPFetchServerTimeOperation.cpp */; }; - BE22EDD9A9B615C5050CEED8 /* MCOIMAPNamespace.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F5B9EA16FEA3B500D9DABD /* MCOIMAPNamespace.mm */; }; BE2643CC426804B08970F9AC /* MCErrorMessage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7C591A5B1C2C0001DCC3 /* MCErrorMessage.cpp */; }; - BE4DD0EFF70EE6C29E681457 /* MCOIMAPQuotaOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B3C1BDC17ABF306008BBF4C /* MCOIMAPQuotaOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BE62AAFC394F7FEE8C3DC861 /* MCMessagePart.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6E7169E847800778456 /* MCMessagePart.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BEB528F53B82259229703F11 /* MCOAbstractMessagePart.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB23816EDAA3F000DB34C /* MCOAbstractMessagePart.mm */; }; - BEDEAFB54CC76AB321EE1F9A /* MCOAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB25C16FD4377000DB34C /* MCOAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BF3FF231FF86423816F5A8E3 /* MCHTMLRendererCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = C63CD68516BE148B00DB18F1 /* MCHTMLRendererCallback.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C045B2CD73B56E8B22E1FEDF /* MCOPOPFetchMessagesOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6A81BE51706906C00882C15 /* MCOPOPFetchMessagesOperation.mm */; }; - C07AD5D7FD82F8ACAB576231 /* NSError+MCO.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C07AD44B013BB42A240B4F04 /* NSError+MCO.h */; }; - C07AD99B2E2054C684DB8FF6 /* NSError+MCO.mm in Sources */ = {isa = PBXBuildFile; fileRef = C07ADFE43E22B38EFF23ADB5 /* NSError+MCO.mm */; }; - C07ADC28B83E7959BF114D46 /* MCOIMAPSession.mm in Sources */ = {isa = PBXBuildFile; fileRef = C07AD057D3C8FBDC7AC95733 /* MCOIMAPSession.mm */; }; + BE62AAFC394F7FEE8C3DC861 /* MCMessagePart.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6E7169E847800778456 /* MCMessagePart.h */; }; + BF3FF231FF86423816F5A8E3 /* MCHTMLRendererCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = C63CD68516BE148B00DB18F1 /* MCHTMLRendererCallback.h */; }; C0C6F07E9BC4EBA836D41A1A /* MCSMTPAsyncSession.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA68F169E847800778456 /* MCSMTPAsyncSession.cpp */; }; - C0E9FF4524465885E9E255AA /* MCONNTPSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D73762199BFFC7005124E5 /* MCONNTPSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; C106E35490416D7690BAD87C /* MCNNTPDisconnectOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84D73756199BFC8A005124E5 /* MCNNTPDisconnectOperation.cpp */; }; - C166A8DA9CF7B11F5CFD6AA9 /* MCSMTPOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA7D916A1386600778456 /* MCSMTPOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C18D3307A8DE8216E52217F8 /* MCOMailProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = C6CF62B2175324CE006398B9 /* MCOMailProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C1DA4495CDAE3F61ADC94119 /* MCOIMAPMoveMessagesOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8568A4181C610F6600FF4470 /* MCOIMAPMoveMessagesOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C1F02797D0D5F21DFB70B212 /* MCAssert.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6A8169E847800778456 /* MCAssert.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C1F4B4B5A8F425EE2E7DCA66 /* MCMessageParser.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6E5169E847800778456 /* MCMessageParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C24D11DA1DDEA511F46D59A7 /* MCONNTPFetchOverviewOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84CFA98119F7153B00FE35D2 /* MCONNTPFetchOverviewOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C2C312F3395D11A3DA69A17C /* MCOMessagePart.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB26516FD43E2000DB34C /* MCOMessagePart.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C2E4444D61778074E3496FFF /* MCOAbstractMessagePart.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB23816EDAA3F000DB34C /* MCOAbstractMessagePart.mm */; }; + C166A8DA9CF7B11F5CFD6AA9 /* MCSMTPOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA7D916A1386600778456 /* MCSMTPOperation.h */; }; + C1F02797D0D5F21DFB70B212 /* MCAssert.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6A8169E847800778456 /* MCAssert.h */; }; + C1F4B4B5A8F425EE2E7DCA66 /* MCMessageParser.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6E5169E847800778456 /* MCMessageParser.h */; }; C2FEA9672C9CBBDC1BD51A6E /* MCIMAPFolderInfoOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C62C6ED616A398FA00737497 /* MCIMAPFolderInfoOperation.cpp */; }; - C33A20EE3C1DACBF5E02A953 /* MCOIMAPPart.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F5B9F016FEA3D700D9DABD /* MCOIMAPPart.mm */; }; C348F28EACEC0522D75ED8BD /* MCAttachment.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6E0169E847800778456 /* MCAttachment.cpp */; }; - C362FB4DBE7A407450FB5AAE /* MCOPOPMessageInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = C6A81BFE1707CEE400882C15 /* MCOPOPMessageInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C36A64976A9890F0C0222286 /* MCONNTPSession.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84D73763199BFFC7005124E5 /* MCONNTPSession.mm */; }; - C39079BA900BB23AB3CA44BA /* MCOIMAPSearchOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F8917016AE60073032E /* MCOIMAPSearchOperation.mm */; }; - C39100857B52E84008763451 /* MCONNTPPostOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = F38221A21C7AAD8100E00721 /* MCONNTPPostOperation.mm */; }; - C3B67CB2EC956397234D6958 /* MCOIMAPNoopOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8416A9A017F2871D00B3C7DA /* MCOIMAPNoopOperation.mm */; }; - C3F2619662467DE55B14619B /* MCIMAPCapabilityOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB22A16E5C0A3000DB34C /* MCIMAPCapabilityOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C3F2619662467DE55B14619B /* MCIMAPCapabilityOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB22A16E5C0A3000DB34C /* MCIMAPCapabilityOperation.h */; }; C437A833C190907BC1C5BA8F /* MCAbstractMessage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA694169E847800778456 /* MCAbstractMessage.cpp */; }; - C4DF9C4E264035D4CFA44ED8 /* MCOSMTPSession.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6A81BBE17068E5E00882C15 /* MCOSMTPSession.mm */; }; - C4E42086490E64BD83ACBBA3 /* MCORange.h in Headers */ = {isa = PBXBuildFile; fileRef = C6CCC5C816FFE54F0077A5FC /* MCORange.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C59D601A5C291B3652174757 /* MCIMAPIdleOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA82816A29F0300778456 /* MCIMAPIdleOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C5A789A09FB3E6611A3D5D07 /* MCOIMAPFolder.mm in Sources */ = {isa = PBXBuildFile; fileRef = C623C59216FE750E001BBEFC /* MCOIMAPFolder.mm */; }; - C5B3A9357C94190330504521 /* MCOSMTPSession.h in Headers */ = {isa = PBXBuildFile; fileRef = C6A81BBD17068E5E00882C15 /* MCOSMTPSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C59D601A5C291B3652174757 /* MCIMAPIdleOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA82816A29F0300778456 /* MCIMAPIdleOperation.h */; }; C600B61C1A242C6A000728F1 /* unittest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C600B61B1A242C6A000728F1 /* unittest.cpp */; }; C600B61D1A244BD1000728F1 /* libMailCore.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C64EA537169E772200778456 /* libMailCore.a */; }; C600B6201A244C9A000728F1 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C6ED6D1917A1919500A4A14C /* Security.framework */; }; @@ -978,17 +1025,8 @@ C608167617759968001F1018 /* MCSMTPDisconnectOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C608167317759967001F1018 /* MCSMTPDisconnectOperation.cpp */; }; C608167B177635D2001F1018 /* MCIMAPDisconnectOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6081679177635D2001F1018 /* MCIMAPDisconnectOperation.cpp */; }; C608167C177635D2001F1018 /* MCIMAPDisconnectOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6081679177635D2001F1018 /* MCIMAPDisconnectOperation.cpp */; }; - C6181D3219FE0F8A0088FBBC /* MCOIMAPFetchParsedContentOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8199FBE719FAEA440040BBC3 /* MCOIMAPFetchParsedContentOperation.h */; }; C6181D3319FE0F8D0088FBBC /* MCIMAPFetchParsedContentOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8199FBF019FAF1270040BBC3 /* MCIMAPFetchParsedContentOperation.h */; }; C61CC25819765763004A28D3 /* MCLibetpan.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BD637139177DFF080094121B /* MCLibetpan.cpp */; }; - C623C58616FD6A50001BBEFC /* MCOConstants.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB26D16FD63F6000DB34C /* MCOConstants.h */; }; - C623C58716FD6A61001BBEFC /* MCOOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB25716FD3BC2000DB34C /* MCOOperation.h */; }; - C623C58816FD6DF6001BBEFC /* NSValue+MCO.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB25016FC2846000DB34C /* NSValue+MCO.h */; }; - C623C58916FD8B71001BBEFC /* MCOUtils.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB26C16FD62FB000DB34C /* MCOUtils.h */; }; - C623C58C16FE54C9001BBEFC /* MCOHTMLRendererDelegate.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C623C58B16FE52C0001BBEFC /* MCOHTMLRendererDelegate.h */; }; - C623C58F16FE6B45001BBEFC /* MCOIMAPOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C623C58E16FE6B45001BBEFC /* MCOIMAPOperation.mm */; }; - C623C59016FE71B2001BBEFC /* MCOIMAPOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C623C58D16FE6B45001BBEFC /* MCOIMAPOperation.h */; }; - C623C59316FE750E001BBEFC /* MCOIMAPFolder.mm in Sources */ = {isa = PBXBuildFile; fileRef = C623C59216FE750E001BBEFC /* MCOIMAPFolder.mm */; }; C62C6ED416A2A0E600737497 /* MCIMAPIdentityOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C62C6ED216A2A0E600737497 /* MCIMAPIdentityOperation.cpp */; }; C62C6ED816A398FA00737497 /* MCIMAPFolderInfoOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C62C6ED616A398FA00737497 /* MCIMAPFolderInfoOperation.cpp */; }; C62C6EDA16A3D60700737497 /* MCIMAPAsyncConnection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA7FD16A295B500778456 /* MCIMAPAsyncConnection.cpp */; }; @@ -1030,44 +1068,16 @@ C63CD68A16BE1BC400DB18F1 /* MCSizeFormatter.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C63CD67E16BDCDD400DB18F1 /* MCSizeFormatter.h */; }; C63CD68C16BE1BC800DB18F1 /* MCHTMLRendererCallback.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C63CD68516BE148B00DB18F1 /* MCHTMLRendererCallback.h */; }; C63CD68D16BE1BCA00DB18F1 /* MCRenderer.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C63CD68716BE1AB600DB18F1 /* MCRenderer.h */; }; - C63CD68E16BE324100DB18F1 /* MCOIMAPFetchFoldersOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = F87F190816BB62690012652F /* MCOIMAPFetchFoldersOperation.h */; }; C63CD69116BE566E00DB18F1 /* MCHTMLCleaner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C63CD68F16BE566D00DB18F1 /* MCHTMLCleaner.cpp */; }; C63D315C17C9155C00A4D993 /* MCIMAPIdentity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C63D315A17C9155C00A4D993 /* MCIMAPIdentity.cpp */; }; C63D315D17C9155C00A4D993 /* MCIMAPIdentity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C63D315A17C9155C00A4D993 /* MCIMAPIdentity.cpp */; }; C63D315E17C9279700A4D993 /* MCIMAPIdentity.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C63D315B17C9155C00A4D993 /* MCIMAPIdentity.h */; }; C63D315F17C9279D00A4D993 /* MCIMAPIdentity.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C63D315B17C9155C00A4D993 /* MCIMAPIdentity.h */; }; - C63D316217C92D8300A4D993 /* MCOIMAPIdentity.mm in Sources */ = {isa = PBXBuildFile; fileRef = C63D316117C92D8300A4D993 /* MCOIMAPIdentity.mm */; }; - C63D316317C92D8300A4D993 /* MCOIMAPIdentity.mm in Sources */ = {isa = PBXBuildFile; fileRef = C63D316117C92D8300A4D993 /* MCOIMAPIdentity.mm */; }; - C63D316617C997B400A4D993 /* MCOIMAPIdentity.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C63D316017C92D8300A4D993 /* MCOIMAPIdentity.h */; }; - C63D316717C997BA00A4D993 /* MCOIMAPIdentity.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C63D316017C92D8300A4D993 /* MCOIMAPIdentity.h */; }; - C643F492189A3D59007EA2F7 /* NSSet+MCO.mm in Sources */ = {isa = PBXBuildFile; fileRef = C643F491189A3D59007EA2F7 /* NSSet+MCO.mm */; }; - C643F493189A3D59007EA2F7 /* NSSet+MCO.mm in Sources */ = {isa = PBXBuildFile; fileRef = C643F491189A3D59007EA2F7 /* NSSet+MCO.mm */; }; C64BB22116E34DCB000DB34C /* MCIMAPSyncResult.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64BB21F16E34DCA000DB34C /* MCIMAPSyncResult.cpp */; }; C64BB22B16E5C0A4000DB34C /* MCIMAPCapabilityOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64BB22916E5C0A3000DB34C /* MCIMAPCapabilityOperation.cpp */; }; C64BB22E16E5C1EE000DB34C /* MCIndexSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64BB22C16E5C1EE000DB34C /* MCIndexSet.cpp */; }; C64BB22F16E885C3000DB34C /* MCIndexSet.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB22D16E5C1EE000DB34C /* MCIndexSet.h */; }; C64BB23016E8876F000DB34C /* MCIMAPCapabilityOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB22A16E5C0A3000DB34C /* MCIMAPCapabilityOperation.h */; }; - C64BB23516EDAA17000DB34C /* MCOAbstractMessage.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB23416EDAA17000DB34C /* MCOAbstractMessage.mm */; }; - C64BB23916EDAA3F000DB34C /* MCOAbstractMessagePart.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB23816EDAA3F000DB34C /* MCOAbstractMessagePart.mm */; }; - C64BB23C16EDAAC7000DB34C /* MCOAbstractMultipart.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB23B16EDAAC7000DB34C /* MCOAbstractMultipart.mm */; }; - C64BB23F16EDAAE1000DB34C /* MCOAbstractPart.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB23E16EDAAE1000DB34C /* MCOAbstractPart.mm */; }; - C64BB24216EDAAF4000DB34C /* MCOAddress.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB24116EDAAF3000DB34C /* MCOAddress.mm */; }; - C64BB24516EDAAFE000DB34C /* MCOMessageHeader.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB24416EDAAFE000DB34C /* MCOMessageHeader.mm */; }; - C64BB24716EEFCB9000DB34C /* MCOAbstract.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB23616EDAA2B000DB34C /* MCOAbstract.h */; }; - C64BB24916EEFCBE000DB34C /* MCOAbstractMessagePart.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB23716EDAA3F000DB34C /* MCOAbstractMessagePart.h */; }; - C64BB24A16EEFCBF000DB34C /* MCOAbstractMultipart.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB23A16EDAAC7000DB34C /* MCOAbstractMultipart.h */; }; - C64BB24B16EEFCC1000DB34C /* MCOAbstractPart.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB23D16EDAAE0000DB34C /* MCOAbstractPart.h */; }; - C64BB24C16EEFCC2000DB34C /* MCOAddress.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB24016EDAAF3000DB34C /* MCOAddress.h */; }; - C64BB24D16EEFCC4000DB34C /* MCOMessageHeader.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB24316EDAAFD000DB34C /* MCOMessageHeader.h */; }; - C64BB25216FC284A000DB34C /* NSValue+MCO.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB25116FC2848000DB34C /* NSValue+MCO.mm */; }; - C64BB25516FD32FB000DB34C /* MCOIMAP.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB25416FD32A0000DB34C /* MCOIMAP.h */; }; - C64BB25616FD333C000DB34C /* MCOAbstractMessage.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB23316EDAA17000DB34C /* MCOAbstractMessage.h */; }; - C64BB25A16FD3BCB000DB34C /* MCOOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB25816FD3BC5000DB34C /* MCOOperation.mm */; }; - C64BB25E16FD4377000DB34C /* MCOAttachment.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB25D16FD4377000DB34C /* MCOAttachment.mm */; }; - C64BB26116FD4390000DB34C /* MCOMessageBuilder.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB26016FD438F000DB34C /* MCOMessageBuilder.mm */; }; - C64BB26416FD43A1000DB34C /* MCOMessageParser.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB26316FD43A1000DB34C /* MCOMessageParser.mm */; }; - C64BB26716FD43E2000DB34C /* MCOMessagePart.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB26616FD43E2000DB34C /* MCOMessagePart.mm */; }; - C64BB26A16FD44C2000DB34C /* MCOMultipart.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB26916FD44C2000DB34C /* MCOMultipart.mm */; }; C64EA6F4169E847800778456 /* MCAbstractMessage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA694169E847800778456 /* MCAbstractMessage.cpp */; }; C64EA6F6169E847800778456 /* MCAbstractMessagePart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA696169E847800778456 /* MCAbstractMessagePart.cpp */; }; C64EA6F8169E847800778456 /* MCAbstractMultipart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA698169E847800778456 /* MCAbstractMultipart.cpp */; }; @@ -1187,8 +1197,6 @@ C64EA82616A29EE500778456 /* MCIMAPSearchOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA82416A29EE000778456 /* MCIMAPSearchOperation.cpp */; }; C64EA82916A29F2200778456 /* MCIMAPIdleOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA82716A29EF400778456 /* MCIMAPIdleOperation.cpp */; }; C64EA82C16A2A08B00778456 /* MCIMAPFetchNamespaceOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA82A16A29FAA00778456 /* MCIMAPFetchNamespaceOperation.cpp */; }; - C64FF39116B3C13000F8C162 /* MCOObjectWrapper.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64FF39016B3C13000F8C162 /* MCOObjectWrapper.mm */; }; - C64FF39316B3C25200F8C162 /* MCOObjectWrapper.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64FF38F16B3C13000F8C162 /* MCOObjectWrapper.h */; }; C668E2C71735C8D500A2BB47 /* MCObjectMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = C668E2C51735C8D500A2BB47 /* MCObjectMac.mm */; }; C668E2C81735C8D500A2BB47 /* MCObjectMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = C668E2C51735C8D500A2BB47 /* MCObjectMac.mm */; }; C668E2CC1735CB8900A2BB47 /* MCAutoreleasePoolMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = C668E2CA1735CB8900A2BB47 /* MCAutoreleasePoolMac.mm */; }; @@ -1204,10 +1212,6 @@ C68B2AEF1778A869005E61EF /* MCConnectionLogger.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C68B2AEB1778A589005E61EF /* MCConnectionLogger.h */; }; C68B2AF717797389005E61EF /* MCConnectionLoggerUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C68B2AF517797389005E61EF /* MCConnectionLoggerUtils.cpp */; }; C68B2AF817797389005E61EF /* MCConnectionLoggerUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C68B2AF517797389005E61EF /* MCConnectionLoggerUtils.cpp */; }; - C69BA85B17DEFCCB00D601B7 /* NSIndexSet+MCO.m in Sources */ = {isa = PBXBuildFile; fileRef = C69BA85A17DEFCCB00D601B7 /* NSIndexSet+MCO.m */; }; - C69BA85C17DEFCCB00D601B7 /* NSIndexSet+MCO.m in Sources */ = {isa = PBXBuildFile; fileRef = C69BA85A17DEFCCB00D601B7 /* NSIndexSet+MCO.m */; }; - C69BA85D17DEFD9A00D601B7 /* NSIndexSet+MCO.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C69BA85917DEFCCB00D601B7 /* NSIndexSet+MCO.h */; }; - C69BA85E17DEFD9F00D601B7 /* NSIndexSet+MCO.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C69BA85917DEFCCB00D601B7 /* NSIndexSet+MCO.h */; }; C6A81B931706840C00882C15 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C6A81B921706840C00882C15 /* UIKit.framework */; }; C6A81B941706840C00882C15 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C64EA78F169F259200778456 /* Foundation.framework */; }; C6A81B961706840C00882C15 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C6A81B951706840C00882C15 /* CoreGraphics.framework */; }; @@ -1217,116 +1221,24 @@ C6A81BB41706891B00882C15 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C6A81BB31706891B00882C15 /* CFNetwork.framework */; }; C6A81BBA17068C0600882C15 /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6A81BB717068C0600882C15 /* AppDelegate.mm */; }; C6A81BBB17068C0600882C15 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = C6A81BB817068C0600882C15 /* main.m */; }; - C6A81BBF17068E5E00882C15 /* MCOSMTPSession.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6A81BBE17068E5E00882C15 /* MCOSMTPSession.mm */; }; - C6A81BC017068E5E00882C15 /* MCOSMTPSession.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6A81BBE17068E5E00882C15 /* MCOSMTPSession.mm */; }; - C6A81BC317068E9500882C15 /* MCOSMTPSendOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6A81BC217068E9500882C15 /* MCOSMTPSendOperation.mm */; }; - C6A81BC417068E9500882C15 /* MCOSMTPSendOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6A81BC217068E9500882C15 /* MCOSMTPSendOperation.mm */; }; - C6A81BC717068EB000882C15 /* MCOSMTPOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6A81BC617068EB000882C15 /* MCOSMTPOperation.mm */; }; - C6A81BC817068EB000882C15 /* MCOSMTPOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6A81BC617068EB000882C15 /* MCOSMTPOperation.mm */; }; - C6A81BD61706903500882C15 /* MCOPOPSession.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6A81BD51706903500882C15 /* MCOPOPSession.mm */; }; - C6A81BD71706903500882C15 /* MCOPOPSession.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6A81BD51706903500882C15 /* MCOPOPSession.mm */; }; - C6A81BDA1706903E00882C15 /* MCOPOPFetchHeaderOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6A81BD91706903E00882C15 /* MCOPOPFetchHeaderOperation.mm */; }; - C6A81BDB1706903E00882C15 /* MCOPOPFetchHeaderOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6A81BD91706903E00882C15 /* MCOPOPFetchHeaderOperation.mm */; }; - C6A81BDE1706904800882C15 /* MCOPOPFetchMessageOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6A81BDD1706904800882C15 /* MCOPOPFetchMessageOperation.mm */; }; - C6A81BDF1706904800882C15 /* MCOPOPFetchMessageOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6A81BDD1706904800882C15 /* MCOPOPFetchMessageOperation.mm */; }; - C6A81BE21706905600882C15 /* MCOPOPOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6A81BE11706905600882C15 /* MCOPOPOperation.mm */; }; - C6A81BE31706905600882C15 /* MCOPOPOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6A81BE11706905600882C15 /* MCOPOPOperation.mm */; }; - C6A81BE61706906D00882C15 /* MCOPOPFetchMessagesOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6A81BE51706906C00882C15 /* MCOPOPFetchMessagesOperation.mm */; }; - C6A81BE71706906D00882C15 /* MCOPOPFetchMessagesOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6A81BE51706906C00882C15 /* MCOPOPFetchMessagesOperation.mm */; }; - C6A81BE91707805B00882C15 /* MCOPOPSession.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6A81BD41706903500882C15 /* MCOPOPSession.h */; }; - C6A81BEA1707805C00882C15 /* MCOPOPFetchHeaderOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6A81BD81706903E00882C15 /* MCOPOPFetchHeaderOperation.h */; }; - C6A81BEB1707805E00882C15 /* MCOPOPFetchMessageOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6A81BDC1706904800882C15 /* MCOPOPFetchMessageOperation.h */; }; - C6A81BEC1707805F00882C15 /* MCOPOPOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6A81BE01706905600882C15 /* MCOPOPOperation.h */; }; - C6A81BED1707806100882C15 /* MCOPOPFetchMessagesOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6A81BE41706906C00882C15 /* MCOPOPFetchMessagesOperation.h */; }; - C6A81BEE1707806500882C15 /* MCOSMTPSession.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6A81BBD17068E5E00882C15 /* MCOSMTPSession.h */; }; - C6A81BEF1707806600882C15 /* MCOSMTPSendOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6A81BC117068E9500882C15 /* MCOSMTPSendOperation.h */; }; - C6A81BF01707806800882C15 /* MCOSMTPOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6A81BC517068EB000882C15 /* MCOSMTPOperation.h */; }; - C6A81BF1170780EC00882C15 /* MCOPOPSession.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6A81BD41706903500882C15 /* MCOPOPSession.h */; }; - C6A81BF2170780F900882C15 /* MCOPOPOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6A81BE01706905600882C15 /* MCOPOPOperation.h */; }; - C6A81BF3170780FB00882C15 /* MCOPOPFetchHeaderOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6A81BD81706903E00882C15 /* MCOPOPFetchHeaderOperation.h */; }; - C6A81BF41707810900882C15 /* MCOPOPFetchMessageOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6A81BDC1706904800882C15 /* MCOPOPFetchMessageOperation.h */; }; - C6A81BF51707810C00882C15 /* MCOPOPFetchMessagesOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6A81BE41706906C00882C15 /* MCOPOPFetchMessagesOperation.h */; }; - C6A81BF61707810E00882C15 /* MCOSMTP.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6A81BE81706A6B300882C15 /* MCOSMTP.h */; }; - C6A81BF71707811000882C15 /* MCOSMTPSession.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6A81BBD17068E5E00882C15 /* MCOSMTPSession.h */; }; - C6A81BF81707811100882C15 /* MCOSMTPSendOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6A81BC117068E9500882C15 /* MCOSMTPSendOperation.h */; }; - C6A81BF91707811500882C15 /* MCOSMTPOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6A81BC517068EB000882C15 /* MCOSMTPOperation.h */; }; - C6A81BFA1707811D00882C15 /* MCOSMTP.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6A81BE81706A6B300882C15 /* MCOSMTP.h */; }; - C6A81BFC1707821F00882C15 /* MCOPOP.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6A81BFB170781BC00882C15 /* MCOPOP.h */; }; - C6A81BFD1707822200882C15 /* MCOPOP.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6A81BFB170781BC00882C15 /* MCOPOP.h */; }; - C6A81C001707CEE600882C15 /* MCOPOPMessageInfo.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6A81BFF1707CEE500882C15 /* MCOPOPMessageInfo.mm */; }; - C6A81C011707CEE600882C15 /* MCOPOPMessageInfo.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6A81BFF1707CEE500882C15 /* MCOPOPMessageInfo.mm */; }; - C6A81C021707D96200882C15 /* MCOPOPMessageInfo.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6A81BFE1707CEE400882C15 /* MCOPOPMessageInfo.h */; }; - C6A81C031707D96500882C15 /* MCOPOPMessageInfo.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6A81BFE1707CEE400882C15 /* MCOPOPMessageInfo.h */; }; C6A81C04170A82F300882C15 /* MCIMAPSyncResult.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB22016E34DCB000DB34C /* MCIMAPSyncResult.h */; }; C6A81C05170A82F600882C15 /* MCIMAPSyncResult.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB22016E34DCB000DB34C /* MCIMAPSyncResult.h */; }; C6AC110017114DAF00B715B7 /* MCPOPCheckAccountOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6AC10FE17114DAF00B715B7 /* MCPOPCheckAccountOperation.cpp */; }; C6AC110117114DAF00B715B7 /* MCPOPCheckAccountOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6AC10FE17114DAF00B715B7 /* MCPOPCheckAccountOperation.cpp */; }; C6AC113417124D0600B715B7 /* MCLibetpanTypes.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6AC1131171249DF00B715B7 /* MCLibetpanTypes.h */; }; C6AC113517124D0A00B715B7 /* MCLibetpanTypes.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6AC1131171249DF00B715B7 /* MCLibetpanTypes.h */; }; - C6B5AE0719F630B3001352A6 /* unittest.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6B5AE0619F630B3001352A6 /* unittest.mm */; }; C6B5B09119F6359B001352A6 /* data in Resources */ = {isa = PBXBuildFile; fileRef = C6B5B08F19F63542001352A6 /* data */; }; C6B5B09219F6FFB5001352A6 /* MailCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C6BD288D170BD71100A91AC1 /* MailCore.framework */; }; C6BA2B0C1705F4E6003F0E9E /* MCHTMLRendererCallback.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C63CD68516BE148B00DB18F1 /* MCHTMLRendererCallback.h */; }; - C6BA2B0D1705F4E6003F0E9E /* MCOMultipart.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB26816FD44C2000DB34C /* MCOMultipart.h */; }; - C6BA2B0E1705F4E6003F0E9E /* MCOMessageBuilder.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB25F16FD438F000DB34C /* MCOMessageBuilder.h */; }; - C6BA2B0F1705F4E6003F0E9E /* MCOIMAPBaseOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6F61FB31702AB2A0073032E /* MCOIMAPBaseOperation.h */; }; - C6BA2B101705F4E6003F0E9E /* MCORFC822.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB26B16FD4C3B000DB34C /* MCORFC822.h */; }; - C6BA2B111705F4E6003F0E9E /* MCOConstants.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB26D16FD63F6000DB34C /* MCOConstants.h */; }; - C6BA2B121705F4E6003F0E9E /* MCOAttachment.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB25C16FD4377000DB34C /* MCOAttachment.h */; }; - C6BA2B131705F4E6003F0E9E /* MCOMessageParser.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB26216FD43A1000DB34C /* MCOMessageParser.h */; }; - C6BA2B141705F4E6003F0E9E /* MCOMessagePart.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB26516FD43E2000DB34C /* MCOMessagePart.h */; }; - C6BA2B151705F4E6003F0E9E /* MCOIMAPFolderInfoOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6F61F79170169EE0073032E /* MCOIMAPFolderInfoOperation.h */; }; - C6BA2B161705F4E6003F0E9E /* MCOIMAPFetchMessagesOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6F61F8217016A200073032E /* MCOIMAPFetchMessagesOperation.h */; }; - C6BA2B171705F4E6003F0E9E /* MCOIMAPCopyMessagesOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6F61F7F17016A0D0073032E /* MCOIMAPCopyMessagesOperation.h */; }; - C6BA2B181705F4E6003F0E9E /* MCOIMAPAppendMessageOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6F61F7C170169FB0073032E /* MCOIMAPAppendMessageOperation.h */; }; - C6BA2B191705F4E6003F0E9E /* MCOIMAPSearchExpression.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6F61F9717016B460073032E /* MCOIMAPSearchExpression.h */; }; - C6BA2B1A1705F4E6003F0E9E /* MCOIMAPFetchContentOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6F61F8517016AD60073032E /* MCOIMAPFetchContentOperation.h */; }; - C6BA2B1B1705F4E6003F0E9E /* MCOIndexSet.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6F5B9F216FEAC6C00D9DABD /* MCOIndexSet.h */; }; - C6BA2B1C1705F4E6003F0E9E /* MCOIMAPFetchNamespaceOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6F61F8E17016B090073032E /* MCOIMAPFetchNamespaceOperation.h */; }; - C6BA2B1D1705F4E6003F0E9E /* MCOIMAPIdleOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6F61F8B17016AFA0073032E /* MCOIMAPIdleOperation.h */; }; - C6BA2B1E1705F4E6003F0E9E /* MCOIMAPSearchOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6F61F8817016AE60073032E /* MCOIMAPSearchOperation.h */; }; - C6BA2B1F1705F4E6003F0E9E /* MCOIMAPIdentityOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6F61F9117016B250073032E /* MCOIMAPIdentityOperation.h */; }; - C6BA2B201705F4E6003F0E9E /* MCOIMAPMessagePart.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6F5B9E316FEA27500D9DABD /* MCOIMAPMessagePart.h */; }; - C6BA2B211705F4E6003F0E9E /* MCOIMAPCapabilityOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6F61F9417016B310073032E /* MCOIMAPCapabilityOperation.h */; }; - C6BA2B221705F4E6003F0E9E /* MCOIMAPFolderInfo.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6F61F9D17016EA00073032E /* MCOIMAPFolderInfo.h */; }; - C6BA2B231705F4E6003F0E9E /* MCOOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB25716FD3BC2000DB34C /* MCOOperation.h */; }; - C6BA2B241705F4E6003F0E9E /* MCOIMAPNamespace.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6F5B9E916FEA3B500D9DABD /* MCOIMAPNamespace.h */; }; - C6BA2B251705F4E6003F0E9E /* MCOIMAPNamespaceItem.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6F5B9EC16FEA3C400D9DABD /* MCOIMAPNamespaceItem.h */; }; - C6BA2B261705F4E6003F0E9E /* MCORange.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6CCC5C816FFE54F0077A5FC /* MCORange.h */; }; - C6BA2B271705F4E6003F0E9E /* MCOIMAPMultipart.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6F5B9E616FEA28600D9DABD /* MCOIMAPMultipart.h */; }; - C6BA2B281705F4E6003F0E9E /* MCOHTMLRendererDelegate.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C623C58B16FE52C0001BBEFC /* MCOHTMLRendererDelegate.h */; }; - C6BA2B2A1705F4E6003F0E9E /* MCOHTMLRendererIMAPDelegate.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6F5B9FF16FED7AB00D9DABD /* MCOHTMLRendererIMAPDelegate.h */; }; - C6BA2B2B1705F4E6003F0E9E /* MCOIMAPPart.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6F5B9EF16FEA3D700D9DABD /* MCOIMAPPart.h */; }; - C6BA2B2C1705F4E6003F0E9E /* MCOIMAPFetchFoldersOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = F87F190816BB62690012652F /* MCOIMAPFetchFoldersOperation.h */; }; - C6BA2B2D1705F4E6003F0E9E /* MCOIMAPFolder.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C623C59116FE750D001BBEFC /* MCOIMAPFolder.h */; }; - C6BA2B2E1705F4E6003F0E9E /* MCOIMAPOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C623C58D16FE6B45001BBEFC /* MCOIMAPOperation.h */; }; - C6BA2B2F1705F4E6003F0E9E /* MCOIMAPMessage.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6F5B9E016FEA1E800D9DABD /* MCOIMAPMessage.h */; }; - C6BA2B301705F4E6003F0E9E /* MCOUtils.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB26C16FD62FB000DB34C /* MCOUtils.h */; }; C6BA2B311705F4E6003F0E9E /* MCAbstractMessage.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64EA695169E847800778456 /* MCAbstractMessage.h */; }; - C6BA2B321705F4E6003F0E9E /* NSValue+MCO.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB25016FC2846000DB34C /* NSValue+MCO.h */; }; C6BA2B331705F4E6003F0E9E /* MCAddressDisplay.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C63CD67816BDCDD400DB18F1 /* MCAddressDisplay.h */; }; C6BA2B341705F4E6003F0E9E /* MCRenderer.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C63CD68716BE1AB600DB18F1 /* MCRenderer.h */; }; C6BA2B351705F4E6003F0E9E /* MCIndexSet.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB22D16E5C1EE000DB34C /* MCIndexSet.h */; }; C6BA2B361705F4E6003F0E9E /* MCIMAPCapabilityOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB22A16E5C0A3000DB34C /* MCIMAPCapabilityOperation.h */; }; C6BA2B371705F4E6003F0E9E /* MCAsyncIMAP.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64EA7F916A15A9200778456 /* MCAsyncIMAP.h */; }; - C6BA2B3A1705F4E6003F0E9E /* MCOAddress.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB24016EDAAF3000DB34C /* MCOAddress.h */; }; - C6BA2B3B1705F4E6003F0E9E /* MCOAbstractMessage.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB23316EDAA17000DB34C /* MCOAbstractMessage.h */; }; - C6BA2B3C1705F4E6003F0E9E /* MCOAbstract.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB23616EDAA2B000DB34C /* MCOAbstract.h */; }; - C6BA2B3D1705F4E6003F0E9E /* MCOAbstractMultipart.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB23A16EDAAC7000DB34C /* MCOAbstractMultipart.h */; }; C6BA2B3E1705F4E6003F0E9E /* MCDateFormatter.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C63CD67A16BDCDD400DB18F1 /* MCDateFormatter.h */; }; - C6BA2B3F1705F4E6003F0E9E /* MCOAbstractMessagePart.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB23716EDAA3F000DB34C /* MCOAbstractMessagePart.h */; }; - C6BA2B401705F4E6003F0E9E /* MCOMessageHeader.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB24316EDAAFD000DB34C /* MCOMessageHeader.h */; }; - C6BA2B411705F4E6003F0E9E /* MCOAbstractPart.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB23D16EDAAE0000DB34C /* MCOAbstractPart.h */; }; - C6BA2B421705F4E6003F0E9E /* MCObjC.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6EB30DC16B5B7770091F4F1 /* MCObjC.h */; }; - C6BA2B431705F4E6003F0E9E /* NSObject+MCO.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6EB30FF16B8E6E50091F4F1 /* NSObject+MCO.h */; }; - C6BA2B441705F4E6003F0E9E /* NSArray+MCO.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6EB30FD16B8E50F0091F4F1 /* NSArray+MCO.h */; }; - C6BA2B451705F4E6003F0E9E /* MCOObjectWrapper.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64FF38F16B3C13000F8C162 /* MCOObjectWrapper.h */; }; - C6BA2B461705F4E6003F0E9E /* NSDictionary+MCO.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6EB30F516B8C9480091F4F1 /* NSDictionary+MCO.h */; }; C6BA2B471705F4E6003F0E9E /* MCAbstract.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64EA693169E847800778456 /* MCAbstract.h */; }; - C6BA2B481705F4E6003F0E9E /* NSData+MCO.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6D42C1916AE03D6002BB4F9 /* NSData+MCO.h */; }; - C6BA2B491705F4E6003F0E9E /* MCOIMAP.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB25416FD32A0000DB34C /* MCOIMAP.h */; }; C6BA2B4A1705F4E6003F0E9E /* MCPOPFetchHeaderOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C62C6EF116A7C6DE00737497 /* MCPOPFetchHeaderOperation.h */; }; - C6BA2B4B1705F4E6003F0E9E /* NSString+MCO.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6D42C1B16AE03D6002BB4F9 /* NSString+MCO.h */; }; C6BA2B4C1705F4E6003F0E9E /* MCIMAPFetchFoldersOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64EA7FB16A2959700778456 /* MCIMAPFetchFoldersOperation.h */; }; C6BA2B4D1705F4E6003F0E9E /* MCAsync.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64EA7E416A14A4500778456 /* MCAsync.h */; }; C6BA2B4E1705F4E6003F0E9E /* MCAbstractMessagePart.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64EA697169E847800778456 /* MCAbstractMessagePart.h */; }; @@ -1400,8 +1312,6 @@ C6BA2B931705F4E6003F0E9E /* MCSMTP.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64EA6EC169E847800778456 /* MCSMTP.h */; }; C6BA2B941705F4E6003F0E9E /* MCSMTPProgressCallback.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64EA6ED169E847800778456 /* MCSMTPProgressCallback.h */; }; C6BA2B951705F4E6003F0E9E /* MCSMTPSession.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64EA6EF169E847800778456 /* MCSMTPSession.h */; }; - C6BA2B961705F4E6003F0E9E /* MCOIMAPSession.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = F8EA941416BAED6E0011AC6F /* MCOIMAPSession.h */; }; - C6BA2B971705F4E6003F0E9E /* NSError+MCO.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C07AD44B013BB42A240B4F04 /* NSError+MCO.h */; }; C6BA2B991705F4E6003F0E9E /* MCAbstractMessage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA694169E847800778456 /* MCAbstractMessage.cpp */; }; C6BA2B9A1705F4E6003F0E9E /* MCAbstractMessagePart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA696169E847800778456 /* MCAbstractMessagePart.cpp */; }; C6BA2B9B1705F4E6003F0E9E /* MCAbstractMultipart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA698169E847800778456 /* MCAbstractMultipart.cpp */; }; @@ -1471,15 +1381,6 @@ C6BA2BDB1705F4E6003F0E9E /* MCPOPOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C62C6EF916A7C93F00737497 /* MCPOPOperation.cpp */; }; C6BA2BDC1705F4E6003F0E9E /* MCPOPFetchMessagesOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C62C6F0416A7E54200737497 /* MCPOPFetchMessagesOperation.cpp */; }; C6BA2BDD1705F4E6003F0E9E /* MCIMAPAsyncSession.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C62C6F0816A8F57000737497 /* MCIMAPAsyncSession.cpp */; }; - C6BA2BDE1705F4E6003F0E9E /* NSData+MCO.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6D42C1A16AE03D6002BB4F9 /* NSData+MCO.mm */; }; - C6BA2BDF1705F4E6003F0E9E /* NSString+MCO.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6D42C1C16AE03D6002BB4F9 /* NSString+MCO.mm */; }; - C6BA2BE01705F4E6003F0E9E /* MCOObjectWrapper.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64FF39016B3C13000F8C162 /* MCOObjectWrapper.mm */; }; - C6BA2BE11705F4E6003F0E9E /* MCOIMAPSession.mm in Sources */ = {isa = PBXBuildFile; fileRef = C07AD057D3C8FBDC7AC95733 /* MCOIMAPSession.mm */; }; - C6BA2BE21705F4E6003F0E9E /* NSError+MCO.mm in Sources */ = {isa = PBXBuildFile; fileRef = C07ADFE43E22B38EFF23ADB5 /* NSError+MCO.mm */; }; - C6BA2BE31705F4E6003F0E9E /* MCOIMAPFetchFoldersOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = F87F190B16BB62B00012652F /* MCOIMAPFetchFoldersOperation.mm */; }; - C6BA2BE41705F4E6003F0E9E /* NSDictionary+MCO.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6EB30F616B8C9480091F4F1 /* NSDictionary+MCO.mm */; }; - C6BA2BE51705F4E6003F0E9E /* NSArray+MCO.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6EB30FC16B8E50F0091F4F1 /* NSArray+MCO.mm */; }; - C6BA2BE61705F4E6003F0E9E /* NSObject+MCO.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6EB310016B8E6E50091F4F1 /* NSObject+MCO.mm */; }; C6BA2BE71705F4E6003F0E9E /* MCAddressDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C63CD67716BDCDD400DB18F1 /* MCAddressDisplay.cpp */; }; C6BA2BE81705F4E6003F0E9E /* MCDateFormatter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C63CD67916BDCDD400DB18F1 /* MCDateFormatter.cpp */; }; C6BA2BE91705F4E6003F0E9E /* MCHTMLRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C63CD67B16BDCDD400DB18F1 /* MCHTMLRenderer.cpp */; }; @@ -1489,91 +1390,28 @@ C6BA2BED1705F4E6003F0E9E /* MCIMAPSyncResult.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64BB21F16E34DCA000DB34C /* MCIMAPSyncResult.cpp */; }; C6BA2BEE1705F4E6003F0E9E /* MCIMAPCapabilityOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64BB22916E5C0A3000DB34C /* MCIMAPCapabilityOperation.cpp */; }; C6BA2BEF1705F4E6003F0E9E /* MCIndexSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64BB22C16E5C1EE000DB34C /* MCIndexSet.cpp */; }; - C6BA2BF01705F4E6003F0E9E /* MCOAbstractMessage.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB23416EDAA17000DB34C /* MCOAbstractMessage.mm */; }; - C6BA2BF11705F4E6003F0E9E /* MCOAbstractMessagePart.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB23816EDAA3F000DB34C /* MCOAbstractMessagePart.mm */; }; - C6BA2BF21705F4E6003F0E9E /* MCOAbstractMultipart.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB23B16EDAAC7000DB34C /* MCOAbstractMultipart.mm */; }; - C6BA2BF31705F4E6003F0E9E /* MCOAbstractPart.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB23E16EDAAE1000DB34C /* MCOAbstractPart.mm */; }; - C6BA2BF41705F4E6003F0E9E /* MCOAddress.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB24116EDAAF3000DB34C /* MCOAddress.mm */; }; - C6BA2BF51705F4E6003F0E9E /* MCOMessageHeader.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB24416EDAAFE000DB34C /* MCOMessageHeader.mm */; }; - C6BA2BF61705F4E6003F0E9E /* NSValue+MCO.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB25116FC2848000DB34C /* NSValue+MCO.mm */; }; - C6BA2BF71705F4E6003F0E9E /* MCOOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB25816FD3BC5000DB34C /* MCOOperation.mm */; }; - C6BA2BF81705F4E6003F0E9E /* MCOAttachment.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB25D16FD4377000DB34C /* MCOAttachment.mm */; }; - C6BA2BF91705F4E6003F0E9E /* MCOMessageBuilder.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB26016FD438F000DB34C /* MCOMessageBuilder.mm */; }; - C6BA2BFA1705F4E6003F0E9E /* MCOMessageParser.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB26316FD43A1000DB34C /* MCOMessageParser.mm */; }; - C6BA2BFB1705F4E6003F0E9E /* MCOMessagePart.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB26616FD43E2000DB34C /* MCOMessagePart.mm */; }; - C6BA2BFC1705F4E6003F0E9E /* MCOMultipart.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB26916FD44C2000DB34C /* MCOMultipart.mm */; }; - C6BA2BFD1705F4E6003F0E9E /* MCOIMAPOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C623C58E16FE6B45001BBEFC /* MCOIMAPOperation.mm */; }; - C6BA2BFE1705F4E6003F0E9E /* MCOIMAPFolder.mm in Sources */ = {isa = PBXBuildFile; fileRef = C623C59216FE750E001BBEFC /* MCOIMAPFolder.mm */; }; - C6BA2BFF1705F4E6003F0E9E /* MCOIMAPMessage.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F5B9E116FEA1E800D9DABD /* MCOIMAPMessage.mm */; }; - C6BA2C001705F4E6003F0E9E /* MCOIMAPMessagePart.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F5B9E416FEA27500D9DABD /* MCOIMAPMessagePart.mm */; }; - C6BA2C011705F4E6003F0E9E /* MCOIMAPMultipart.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F5B9E716FEA28600D9DABD /* MCOIMAPMultipart.mm */; }; - C6BA2C021705F4E6003F0E9E /* MCOIMAPNamespace.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F5B9EA16FEA3B500D9DABD /* MCOIMAPNamespace.mm */; }; - C6BA2C031705F4E6003F0E9E /* MCOIMAPNamespaceItem.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F5B9ED16FEA3C400D9DABD /* MCOIMAPNamespaceItem.mm */; }; - C6BA2C041705F4E6003F0E9E /* MCOIMAPPart.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F5B9F016FEA3D700D9DABD /* MCOIMAPPart.mm */; }; - C6BA2C051705F4E6003F0E9E /* MCOIndexSet.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F5B9F316FEAC6C00D9DABD /* MCOIndexSet.mm */; }; - C6BA2C061705F4E6003F0E9E /* MCOAbstractMessageRendererCallback.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F5B9FC16FED18500D9DABD /* MCOAbstractMessageRendererCallback.mm */; }; - C6BA2C071705F4E6003F0E9E /* MCORange.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6CCC5C616FFE5190077A5FC /* MCORange.mm */; }; - C6BA2C081705F4E6003F0E9E /* MCOIMAPFolderInfoOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F7A170169EE0073032E /* MCOIMAPFolderInfoOperation.mm */; }; - C6BA2C091705F4E6003F0E9E /* MCOIMAPAppendMessageOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F7D170169FB0073032E /* MCOIMAPAppendMessageOperation.mm */; }; - C6BA2C0A1705F4E6003F0E9E /* MCOIMAPCopyMessagesOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F8017016A0D0073032E /* MCOIMAPCopyMessagesOperation.mm */; }; - C6BA2C0B1705F4E6003F0E9E /* MCOIMAPFetchMessagesOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F8317016A200073032E /* MCOIMAPFetchMessagesOperation.mm */; }; - C6BA2C0C1705F4E6003F0E9E /* MCOIMAPFetchContentOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F8617016AD60073032E /* MCOIMAPFetchContentOperation.mm */; }; - C6BA2C0D1705F4E6003F0E9E /* MCOIMAPSearchOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F8917016AE60073032E /* MCOIMAPSearchOperation.mm */; }; - C6BA2C0E1705F4E6003F0E9E /* MCOIMAPIdleOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F8C17016AFA0073032E /* MCOIMAPIdleOperation.mm */; }; - C6BA2C0F1705F4E6003F0E9E /* MCOIMAPFetchNamespaceOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F8F17016B090073032E /* MCOIMAPFetchNamespaceOperation.mm */; }; - C6BA2C101705F4E6003F0E9E /* MCOIMAPIdentityOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F9217016B250073032E /* MCOIMAPIdentityOperation.mm */; }; - C6BA2C111705F4E6003F0E9E /* MCOIMAPCapabilityOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F9517016B310073032E /* MCOIMAPCapabilityOperation.mm */; }; - C6BA2C121705F4E6003F0E9E /* MCOIMAPSearchExpression.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F9817016B460073032E /* MCOIMAPSearchExpression.mm */; }; - C6BA2C131705F4E6003F0E9E /* MCOIMAPFolderInfo.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F9E17016EA00073032E /* MCOIMAPFolderInfo.mm */; }; - C6BA2C141705F4E6003F0E9E /* MCOIMAPBaseOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61FB41702AB2F0073032E /* MCOIMAPBaseOperation.mm */; }; C6BD288F170BD71100A91AC1 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C6BD288E170BD71100A91AC1 /* Cocoa.framework */; }; - C6BD28AB170BDB6B00A91AC1 /* MCOFramework.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6BD28A9170BDB6B00A91AC1 /* MCOFramework.mm */; }; C6BD28AC170BDEA200A91AC1 /* MailCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C6BD288D170BD71100A91AC1 /* MailCore.framework */; }; C6BEC1AA1B1256BA00546519 /* MCHTMLCleaner.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C63CD69016BE566E00DB18F1 /* MCHTMLCleaner.h */; }; C6BEC1AB1B1256C100546519 /* MCHTMLCleaner.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C63CD69016BE566E00DB18F1 /* MCHTMLCleaner.h */; }; - C6CCC5C716FFE5190077A5FC /* MCORange.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6CCC5C616FFE5190077A5FC /* MCORange.mm */; }; - C6CCC5C916FFEA070077A5FC /* MCORange.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6CCC5C816FFE54F0077A5FC /* MCORange.h */; }; - C6CCC5CA16FFEA090077A5FC /* MCOIndexSet.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6F5B9F216FEAC6C00D9DABD /* MCOIndexSet.h */; }; - C6CF62B9175324CE006398B9 /* MCOMailProvider.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6CF62B3175324CE006398B9 /* MCOMailProvider.mm */; }; - C6CF62BA175324CE006398B9 /* MCOMailProvider.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6CF62B3175324CE006398B9 /* MCOMailProvider.mm */; }; - C6CF62BB175324CE006398B9 /* MCOMailProvidersManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6CF62B5175324CE006398B9 /* MCOMailProvidersManager.mm */; }; - C6CF62BC175324CE006398B9 /* MCOMailProvidersManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6CF62B5175324CE006398B9 /* MCOMailProvidersManager.mm */; }; - C6CF62BD175324CE006398B9 /* MCONetService.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6CF62B7175324CE006398B9 /* MCONetService.mm */; }; - C6CF62BE175324CE006398B9 /* MCONetService.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6CF62B7175324CE006398B9 /* MCONetService.mm */; }; C6CF62C6175324F0006398B9 /* MCMailProvider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6CF62BF175324F0006398B9 /* MCMailProvider.cpp */; }; C6CF62C7175324F0006398B9 /* MCMailProvider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6CF62BF175324F0006398B9 /* MCMailProvider.cpp */; }; C6CF62C8175324F0006398B9 /* MCMailProvidersManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6CF62C1175324F0006398B9 /* MCMailProvidersManager.cpp */; }; C6CF62C9175324F0006398B9 /* MCMailProvidersManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6CF62C1175324F0006398B9 /* MCMailProvidersManager.cpp */; }; C6CF62CA175324F0006398B9 /* MCNetService.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6CF62C3175324F0006398B9 /* MCNetService.cpp */; }; C6CF62CB175324F0006398B9 /* MCNetService.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6CF62C3175324F0006398B9 /* MCNetService.cpp */; }; - C6CF62CD1753250E006398B9 /* MCOMailProvider.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6CF62B2175324CE006398B9 /* MCOMailProvider.h */; }; - C6CF62CE17532510006398B9 /* MCOMailProvidersManager.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6CF62B4175324CE006398B9 /* MCOMailProvidersManager.h */; }; - C6CF62CF17532514006398B9 /* MCONetService.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6CF62B6175324CE006398B9 /* MCONetService.h */; }; - C6CF62D017532521006398B9 /* MCOProvider.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6CF62B8175324CE006398B9 /* MCOProvider.h */; }; C6CF62D117532527006398B9 /* MCMailProvider.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6CF62C0175324F0006398B9 /* MCMailProvider.h */; }; C6CF62D21753252A006398B9 /* MCMailProvidersManager.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6CF62C2175324F0006398B9 /* MCMailProvidersManager.h */; }; C6CF62D31753252F006398B9 /* MCNetService.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6CF62C4175324F0006398B9 /* MCNetService.h */; }; C6CF62D417532531006398B9 /* MCProvider.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6CF62C5175324F0006398B9 /* MCProvider.h */; }; - C6CF62D5175325BB006398B9 /* MCOMailProvider.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6CF62B2175324CE006398B9 /* MCOMailProvider.h */; }; - C6CF62D6175325BD006398B9 /* MCOMailProvidersManager.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6CF62B4175324CE006398B9 /* MCOMailProvidersManager.h */; }; - C6CF62D7175325BF006398B9 /* MCONetService.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6CF62B6175324CE006398B9 /* MCONetService.h */; }; - C6CF62D8175325C5006398B9 /* MCOProvider.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6CF62B8175324CE006398B9 /* MCOProvider.h */; }; C6CF62D9175325CC006398B9 /* MCMailProvider.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6CF62C0175324F0006398B9 /* MCMailProvider.h */; }; C6CF62DA175325D5006398B9 /* MCMailProvidersManager.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6CF62C2175324F0006398B9 /* MCMailProvidersManager.h */; }; C6CF62DB175325E2006398B9 /* MCNetService.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6CF62C4175324F0006398B9 /* MCNetService.h */; }; C6CF62DC175325F0006398B9 /* MCProvider.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6CF62C5175324F0006398B9 /* MCProvider.h */; }; - C6D42C1D16AE03D6002BB4F9 /* NSData+MCO.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6D42C1A16AE03D6002BB4F9 /* NSData+MCO.mm */; }; - C6D42C1E16AE03D6002BB4F9 /* NSString+MCO.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6D42C1C16AE03D6002BB4F9 /* NSString+MCO.mm */; }; - C6D42C2A16AE0507002BB4F9 /* NSData+MCO.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6D42C1916AE03D6002BB4F9 /* NSData+MCO.h */; }; - C6D42C2C16AE0509002BB4F9 /* NSString+MCO.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6D42C1B16AE03D6002BB4F9 /* NSString+MCO.h */; }; C6D4FD3119FA9E80001F7E01 /* MCNNTPFetchOverviewOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 84CFA98619F7159700FE35D2 /* MCNNTPFetchOverviewOperation.h */; }; C6D4FD3219FA9E8D001F7E01 /* MCNNTPFetchOverviewOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 84CFA98619F7159700FE35D2 /* MCNNTPFetchOverviewOperation.h */; }; - C6D4FD3319FA9EB3001F7E01 /* MCONNTPFetchOverviewOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 84CFA98119F7153B00FE35D2 /* MCONNTPFetchOverviewOperation.h */; }; - C6D4FD3419FA9EB6001F7E01 /* MCONNTPFetchOverviewOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 84CFA98119F7153B00FE35D2 /* MCONNTPFetchOverviewOperation.h */; }; - C6D4FD3519FA9F4D001F7E01 /* MCONNTPFetchServerTimeOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 84CFA99319F725CB00FE35D2 /* MCONNTPFetchServerTimeOperation.h */; }; C6D4FD3619FA9F4F001F7E01 /* MCNNTPFetchServerTimeOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 84CFA98E19F724E500FE35D2 /* MCNNTPFetchServerTimeOperation.h */; }; C6D4FD3719FA9F55001F7E01 /* MCNNTPFetchServerTimeOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 84CFA98E19F724E500FE35D2 /* MCNNTPFetchServerTimeOperation.h */; }; - C6D4FD3819FA9F57001F7E01 /* MCONNTPFetchServerTimeOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 84CFA99319F725CB00FE35D2 /* MCONNTPFetchServerTimeOperation.h */; }; C6D4FD3F19FB7534001F7E01 /* MCMessageParserMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6D4FD3E19FB7534001F7E01 /* MCMessageParserMac.mm */; }; C6D4FD4019FB7786001F7E01 /* MCMessageParserMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6D4FD3E19FB7534001F7E01 /* MCMessageParserMac.mm */; }; C6D4FD4319FB7DAA001F7E01 /* MCDataMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6D4FD4219FB7DAA001F7E01 /* MCDataMac.mm */; }; @@ -1606,305 +1444,158 @@ C6E665BC1796500C0063F2CF /* unzip.c in Sources */ = {isa = PBXBuildFile; fileRef = C6E665B11796500B0063F2CF /* unzip.c */; }; C6E665BD1796500C0063F2CF /* zip.c in Sources */ = {isa = PBXBuildFile; fileRef = C6E665B31796500B0063F2CF /* zip.c */; }; C6E665BE1796500C0063F2CF /* zip.c in Sources */ = {isa = PBXBuildFile; fileRef = C6E665B31796500B0063F2CF /* zip.c */; }; - C6EB30DE16B5B8050091F4F1 /* MCObjC.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6EB30DC16B5B7770091F4F1 /* MCObjC.h */; }; - C6EB30F716B8C9480091F4F1 /* NSDictionary+MCO.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6EB30F616B8C9480091F4F1 /* NSDictionary+MCO.mm */; }; - C6EB30F816B8DED30091F4F1 /* NSDictionary+MCO.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6EB30F516B8C9480091F4F1 /* NSDictionary+MCO.h */; }; - C6EB30FE16B8E50F0091F4F1 /* NSArray+MCO.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6EB30FC16B8E50F0091F4F1 /* NSArray+MCO.mm */; }; - C6EB310116B8E6E60091F4F1 /* NSObject+MCO.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6EB310016B8E6E50091F4F1 /* NSObject+MCO.mm */; }; - C6EB310216B8E7D60091F4F1 /* NSObject+MCO.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6EB30FF16B8E6E50091F4F1 /* NSObject+MCO.h */; }; - C6EB310316B8E7D80091F4F1 /* NSArray+MCO.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6EB30FD16B8E50F0091F4F1 /* NSArray+MCO.h */; }; C6ED6D1A17A1919500A4A14C /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C6ED6D1917A1919500A4A14C /* Security.framework */; }; C6ED6D1B17A191B100A4A14C /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C64EA7B016A00BBB00778456 /* CoreServices.framework */; }; C6ED6D1D17A191BF00A4A14C /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C6ED6D1C17A191BF00A4A14C /* Security.framework */; }; C6EFFBC8182BBF5700CFF656 /* MCIMAPMultiDisconnectOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6EFFBC6182BBF5700CFF656 /* MCIMAPMultiDisconnectOperation.cpp */; }; C6EFFBC9182BBF5700CFF656 /* MCIMAPMultiDisconnectOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6EFFBC6182BBF5700CFF656 /* MCIMAPMultiDisconnectOperation.cpp */; }; - C6EFFBCC1833334900CFF656 /* MCOIMAPMultiDisconnectOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6EFFBCB1833334900CFF656 /* MCOIMAPMultiDisconnectOperation.mm */; }; - C6EFFBCD1833334900CFF656 /* MCOIMAPMultiDisconnectOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6EFFBCB1833334900CFF656 /* MCOIMAPMultiDisconnectOperation.mm */; }; C6F49A8F1C8E96D00087F4B7 /* MCIMAPCheckAccountOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64EA7F716A15A7800778456 /* MCIMAPCheckAccountOperation.h */; }; C6F49A901C8E96D70087F4B7 /* MCIMAPCheckAccountOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64EA7F716A15A7800778456 /* MCIMAPCheckAccountOperation.h */; }; - C6F49A931C8EA1450087F4B7 /* MCOIMAPCheckAccountOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F49A921C8EA1450087F4B7 /* MCOIMAPCheckAccountOperation.mm */; }; - C6F49A941C8EA1450087F4B7 /* MCOIMAPCheckAccountOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F49A921C8EA1450087F4B7 /* MCOIMAPCheckAccountOperation.mm */; }; - C6F5B9E216FEA1E800D9DABD /* MCOIMAPMessage.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F5B9E116FEA1E800D9DABD /* MCOIMAPMessage.mm */; }; - C6F5B9E516FEA27500D9DABD /* MCOIMAPMessagePart.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F5B9E416FEA27500D9DABD /* MCOIMAPMessagePart.mm */; }; - C6F5B9E816FEA28600D9DABD /* MCOIMAPMultipart.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F5B9E716FEA28600D9DABD /* MCOIMAPMultipart.mm */; }; - C6F5B9EB16FEA3B500D9DABD /* MCOIMAPNamespace.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F5B9EA16FEA3B500D9DABD /* MCOIMAPNamespace.mm */; }; - C6F5B9EE16FEA3C400D9DABD /* MCOIMAPNamespaceItem.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F5B9ED16FEA3C400D9DABD /* MCOIMAPNamespaceItem.mm */; }; - C6F5B9F116FEA3D700D9DABD /* MCOIMAPPart.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F5B9F016FEA3D700D9DABD /* MCOIMAPPart.mm */; }; - C6F5B9F416FEAC6C00D9DABD /* MCOIndexSet.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F5B9F316FEAC6C00D9DABD /* MCOIndexSet.mm */; }; - C6F5B9F516FEBB4500D9DABD /* MCOIMAPFolder.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C623C59116FE750D001BBEFC /* MCOIMAPFolder.h */; }; - C6F5B9F616FEBB4900D9DABD /* MCOIMAPMessage.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6F5B9E016FEA1E800D9DABD /* MCOIMAPMessage.h */; }; - C6F5B9F716FEBB4A00D9DABD /* MCOIMAPMessagePart.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6F5B9E316FEA27500D9DABD /* MCOIMAPMessagePart.h */; }; - C6F5B9F816FEBB4C00D9DABD /* MCOIMAPMultipart.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6F5B9E616FEA28600D9DABD /* MCOIMAPMultipart.h */; }; - C6F5B9F916FEBB5900D9DABD /* MCOIMAPNamespace.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6F5B9E916FEA3B500D9DABD /* MCOIMAPNamespace.h */; }; - C6F5B9FA16FEBB6000D9DABD /* MCOIMAPNamespaceItem.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6F5B9EC16FEA3C400D9DABD /* MCOIMAPNamespaceItem.h */; }; - C6F5B9FB16FEBB6200D9DABD /* MCOIMAPPart.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6F5B9EF16FEA3D700D9DABD /* MCOIMAPPart.h */; }; - C6F5B9FE16FED18600D9DABD /* MCOAbstractMessageRendererCallback.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F5B9FC16FED18500D9DABD /* MCOAbstractMessageRendererCallback.mm */; }; - C6F5BA0016FFAF4100D9DABD /* MCOHTMLRendererIMAPDelegate.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6F5B9FF16FED7AB00D9DABD /* MCOHTMLRendererIMAPDelegate.h */; }; - C6F61F7B170169EE0073032E /* MCOIMAPFolderInfoOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F7A170169EE0073032E /* MCOIMAPFolderInfoOperation.mm */; }; - C6F61F7E170169FB0073032E /* MCOIMAPAppendMessageOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F7D170169FB0073032E /* MCOIMAPAppendMessageOperation.mm */; }; - C6F61F8117016A0D0073032E /* MCOIMAPCopyMessagesOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F8017016A0D0073032E /* MCOIMAPCopyMessagesOperation.mm */; }; - C6F61F8417016A200073032E /* MCOIMAPFetchMessagesOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F8317016A200073032E /* MCOIMAPFetchMessagesOperation.mm */; }; - C6F61F8717016AD60073032E /* MCOIMAPFetchContentOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F8617016AD60073032E /* MCOIMAPFetchContentOperation.mm */; }; - C6F61F8A17016AE60073032E /* MCOIMAPSearchOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F8917016AE60073032E /* MCOIMAPSearchOperation.mm */; }; - C6F61F8D17016AFB0073032E /* MCOIMAPIdleOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F8C17016AFA0073032E /* MCOIMAPIdleOperation.mm */; }; - C6F61F9017016B0A0073032E /* MCOIMAPFetchNamespaceOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F8F17016B090073032E /* MCOIMAPFetchNamespaceOperation.mm */; }; - C6F61F9317016B250073032E /* MCOIMAPIdentityOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F9217016B250073032E /* MCOIMAPIdentityOperation.mm */; }; - C6F61F9617016B310073032E /* MCOIMAPCapabilityOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F9517016B310073032E /* MCOIMAPCapabilityOperation.mm */; }; - C6F61F9917016B460073032E /* MCOIMAPSearchExpression.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F9817016B460073032E /* MCOIMAPSearchExpression.mm */; }; - C6F61F9F17016EA10073032E /* MCOIMAPFolderInfo.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F9E17016EA00073032E /* MCOIMAPFolderInfo.mm */; }; - C6F61FA0170187B80073032E /* MCOIMAPFolderInfoOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6F61F79170169EE0073032E /* MCOIMAPFolderInfoOperation.h */; }; - C6F61FA1170187BA0073032E /* MCOIMAPFolderInfo.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6F61F9D17016EA00073032E /* MCOIMAPFolderInfo.h */; }; - C6F61FA2170187BC0073032E /* MCOIMAPAppendMessageOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6F61F7C170169FB0073032E /* MCOIMAPAppendMessageOperation.h */; }; - C6F61FA3170187BD0073032E /* MCOIMAPCopyMessagesOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6F61F7F17016A0D0073032E /* MCOIMAPCopyMessagesOperation.h */; }; - C6F61FA4170187C30073032E /* MCOIMAPFetchMessagesOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6F61F8217016A200073032E /* MCOIMAPFetchMessagesOperation.h */; }; - C6F61FA5170187C50073032E /* MCOIMAPFetchContentOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6F61F8517016AD60073032E /* MCOIMAPFetchContentOperation.h */; }; - C6F61FA6170187C60073032E /* MCOIMAPSearchOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6F61F8817016AE60073032E /* MCOIMAPSearchOperation.h */; }; - C6F61FA7170187C80073032E /* MCOIMAPIdleOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6F61F8B17016AFA0073032E /* MCOIMAPIdleOperation.h */; }; - C6F61FA8170187C90073032E /* MCOIMAPFetchNamespaceOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6F61F8E17016B090073032E /* MCOIMAPFetchNamespaceOperation.h */; }; - C6F61FA9170187CB0073032E /* MCOIMAPIdentityOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6F61F9117016B250073032E /* MCOIMAPIdentityOperation.h */; }; - C6F61FAA170187CC0073032E /* MCOIMAPCapabilityOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6F61F9417016B310073032E /* MCOIMAPCapabilityOperation.h */; }; - C6F61FAB170187CE0073032E /* MCOIMAPSearchExpression.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6F61F9717016B460073032E /* MCOIMAPSearchExpression.h */; }; - C6F61FAD170288610073032E /* MCOAttachment.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB25C16FD4377000DB34C /* MCOAttachment.h */; }; - C6F61FAE170288640073032E /* MCOMessageBuilder.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB25F16FD438F000DB34C /* MCOMessageBuilder.h */; }; - C6F61FAF170288660073032E /* MCOMessageParser.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB26216FD43A1000DB34C /* MCOMessageParser.h */; }; - C6F61FB0170288680073032E /* MCOMessagePart.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB26516FD43E2000DB34C /* MCOMessagePart.h */; }; - C6F61FB1170288690073032E /* MCOMultipart.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB26816FD44C2000DB34C /* MCOMultipart.h */; }; - C6F61FB21702886B0073032E /* MCORFC822.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB26B16FD4C3B000DB34C /* MCORFC822.h */; }; - C6F61FB51702AB340073032E /* MCOIMAPBaseOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61FB41702AB2F0073032E /* MCOIMAPBaseOperation.mm */; }; - C6F61FB61702B5290073032E /* MCOIMAPBaseOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6F61FB31702AB2A0073032E /* MCOIMAPBaseOperation.h */; }; C6F7B19F17A1C15200BE78BB /* MCCertificateUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6F7B19D17A1C15200BE78BB /* MCCertificateUtils.cpp */; }; C6F7B1A017A1C15200BE78BB /* MCCertificateUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6F7B19D17A1C15200BE78BB /* MCCertificateUtils.cpp */; }; C741726475B5D8330D486589 /* MCSizeFormatter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C63CD67D16BDCDD400DB18F1 /* MCSizeFormatter.cpp */; }; - C75DA2E7F93746CCBE0ED16F /* NSObject+MCO.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6EB310016B8E6E50091F4F1 /* NSObject+MCO.mm */; }; C760E846040C96F03B65C1BA /* ucln_in.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7CBC1A70771B0001DCC3 /* ucln_in.cpp */; }; C787961953BEC9FF6FC63FB8 /* MCLog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6AF169E847800778456 /* MCLog.cpp */; }; - C7B17FFEB54335D7D3C9F372 /* MCNetService.h in Headers */ = {isa = PBXBuildFile; fileRef = C6CF62C4175324F0006398B9 /* MCNetService.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C7EBEED33BB065E0176842B1 /* MCNNTPProgressCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D73732199BF754005124E5 /* MCNNTPProgressCallback.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C7B17FFEB54335D7D3C9F372 /* MCNetService.h in Headers */ = {isa = PBXBuildFile; fileRef = C6CF62C4175324F0006398B9 /* MCNetService.h */; }; + C7EBEED33BB065E0176842B1 /* MCNNTPProgressCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D73732199BF754005124E5 /* MCNNTPProgressCallback.h */; }; C82125D34DA7457D9D821383 /* MCArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6A5169E847800778456 /* MCArray.cpp */; }; - C8740C48036772955805B361 /* MCOIMAPMessageRenderingOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA89896C178A47D200F6D90A /* MCOIMAPMessageRenderingOperation.mm */; }; - C8837A701BE1F51907260BA2 /* MCOIMAPPart.h in Headers */ = {isa = PBXBuildFile; fileRef = C6F5B9EF16FEA3D700D9DABD /* MCOIMAPPart.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C93E603FFFA0690E4F68C1AF /* NSArray+MCO.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6EB30FC16B8E50F0091F4F1 /* NSArray+MCO.mm */; }; - C9B8227A90AA7356E367BE08 /* MCONNTPListNewsgroupsOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84D7378A199C0260005124E5 /* MCONNTPListNewsgroupsOperation.mm */; }; C9E80F5628E359E5877E85AD /* csrutf8.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7C711A70771B0001DCC3 /* csrutf8.cpp */; }; CA33C2725EAF707610028644 /* MCIMAPMessage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6C7169E847800778456 /* MCIMAPMessage.cpp */; }; - CA3ACDD8B0008631F9A76B4E /* MCOPOPSession.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6A81BD51706903500882C15 /* MCOPOPSession.mm */; }; CA4271D9DA4EBFC95DB0625A /* MCAutoreleasePool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6A2169E847800778456 /* MCAutoreleasePool.cpp */; }; - CA65236B4570F8ABA6A1816F /* MCOAbstractPart.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB23E16EDAAE1000DB34C /* MCOAbstractPart.mm */; }; - CA854A8216AC9F34E5C2806D /* MCIMAPFetchParsedContentOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8199FBF019FAF1270040BBC3 /* MCIMAPFetchParsedContentOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CA854A8216AC9F34E5C2806D /* MCIMAPFetchParsedContentOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8199FBF019FAF1270040BBC3 /* MCIMAPFetchParsedContentOperation.h */; }; CB9B433B994B9C5C1BEF54DE /* MCNNTPFetchServerTimeOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84CFA98D19F724E500FE35D2 /* MCNNTPFetchServerTimeOperation.cpp */; }; - CBB7B0EDC18CCB42864998E3 /* MCOIMAPNamespaceItem.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F5B9ED16FEA3C400D9DABD /* MCOIMAPNamespaceItem.mm */; }; - CC69356D9463512F75CB7845 /* MCPOPProgressCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6DC169E847800778456 /* MCPOPProgressCallback.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CCA5CD78DEFEEC31E664ABD2 /* MCAsyncPOP.h in Headers */ = {isa = PBXBuildFile; fileRef = C62C6EFD16A7DD0300737497 /* MCAsyncPOP.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CCA787BDAE5037996C0A0CBA /* NSArray+MCO.h in Headers */ = {isa = PBXBuildFile; fileRef = C6EB30FD16B8E50F0091F4F1 /* NSArray+MCO.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CCF2484E668FCF7D2262C579 /* MCOAbstractMessageRendererCallback.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F5B9FC16FED18500D9DABD /* MCOAbstractMessageRendererCallback.mm */; }; - CD5DD0E5979B53708E84B2CE /* MCIMAP.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6C4169E847800778456 /* MCIMAP.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CDB5BC4E7AF5534E4C99A08E /* MCObjC.h in Headers */ = {isa = PBXBuildFile; fileRef = C6EB30DC16B5B7770091F4F1 /* MCObjC.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CE02DBCA9E136368D2107B3F /* MCONetService.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6CF62B7175324CE006398B9 /* MCONetService.mm */; }; - CE68B988487E4B103704283F /* MCOIMAPFetchContentToFileOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 810DB7901C68F50600017B12 /* MCOIMAPFetchContentToFileOperation.mm */; }; - CE7FB5491FB9398C37BE3AEE /* MCONNTPGroupInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D73791199C0511005124E5 /* MCONNTPGroupInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CC69356D9463512F75CB7845 /* MCPOPProgressCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6DC169E847800778456 /* MCPOPProgressCallback.h */; }; + CCA5CD78DEFEEC31E664ABD2 /* MCAsyncPOP.h in Headers */ = {isa = PBXBuildFile; fileRef = C62C6EFD16A7DD0300737497 /* MCAsyncPOP.h */; }; + CD5DD0E5979B53708E84B2CE /* MCIMAP.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6C4169E847800778456 /* MCIMAP.h */; }; CECC9D428F36B6695DFEB100 /* MCIMAPOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA7EF16A15A4D00778456 /* MCIMAPOperation.cpp */; }; - CF287D3BAAE980338EBB8992 /* MCOSMTPOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C6A81BC517068EB000882C15 /* MCOSMTPOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CF46862653BCECA13BA3B83A /* MCOAbstractMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB23316EDAA17000DB34C /* MCOAbstractMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CF8A1210E467225019219A0B /* MCMultipart.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6E9169E847800778456 /* MCMultipart.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D001AE0AA293EA2F5E04BD68 /* MCIMAPFetchNamespaceOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA82B16A2A01400778456 /* MCIMAPFetchNamespaceOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D10C246499923B5F19C5D7FF /* MCAutoreleasePool.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6A3169E847800778456 /* MCAutoreleasePool.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D11BD28C51B2555A4A3B5EF2 /* MCOIMAPMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = C6F5B9E016FEA1E800D9DABD /* MCOIMAPMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D1408D353D4D120815CF164F /* MCOAbstractMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB23316EDAA17000DB34C /* MCOAbstractMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D15156687200D37E077EEF68 /* MCHTMLCleaner.h in Headers */ = {isa = PBXBuildFile; fileRef = C63CD69016BE566E00DB18F1 /* MCHTMLCleaner.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CF8A1210E467225019219A0B /* MCMultipart.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6E9169E847800778456 /* MCMultipart.h */; }; + D001AE0AA293EA2F5E04BD68 /* MCIMAPFetchNamespaceOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA82B16A2A01400778456 /* MCIMAPFetchNamespaceOperation.h */; }; + D10C246499923B5F19C5D7FF /* MCAutoreleasePool.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6A3169E847800778456 /* MCAutoreleasePool.h */; }; + D15156687200D37E077EEF68 /* MCHTMLCleaner.h in Headers */ = {isa = PBXBuildFile; fileRef = C63CD69016BE566E00DB18F1 /* MCHTMLCleaner.h */; }; D1523D8529F92346D5447C31 /* MCPOPFetchHeaderOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C62C6EF016A7C6DE00737497 /* MCPOPFetchHeaderOperation.cpp */; }; - D2101A4E4A1866F49014C00E /* MCONNTPFetchOverviewOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84CFA98219F7153B00FE35D2 /* MCONNTPFetchOverviewOperation.mm */; }; - D22EB249D672F7589FF22E76 /* MCOAttachment.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB25D16FD4377000DB34C /* MCOAttachment.mm */; }; - D281D4C1885762578DF1232F /* MCONNTPPostOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = F38221A21C7AAD8100E00721 /* MCONNTPPostOperation.mm */; }; - D28BC26ED129F34F18B1983B /* MCOIMAPBaseOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61FB41702AB2F0073032E /* MCOIMAPBaseOperation.mm */; }; - D2D4FAE8CA123E914A7ED119 /* NSObject+MCO.h in Headers */ = {isa = PBXBuildFile; fileRef = C6EB30FF16B8E6E50091F4F1 /* NSObject+MCO.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D30894BC748088E5A37BB98A /* MCAddress.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA69D169E847800778456 /* MCAddress.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D30BB30E13D6602990D32521 /* MCICUTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = C6D6F9691720F8F4006F5B28 /* MCICUTypes.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D30894BC748088E5A37BB98A /* MCAddress.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA69D169E847800778456 /* MCAddress.h */; }; + D30BB30E13D6602990D32521 /* MCICUTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = C6D6F9691720F8F4006F5B28 /* MCICUTypes.h */; }; D3A48A829DE8214CC305D72E /* MCCertificateUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6F7B19D17A1C15200BE78BB /* MCCertificateUtils.cpp */; }; - D3B0E96454BA62D15FD3C5DC /* MCIMAPFetchFoldersOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA7FB16A2959700778456 /* MCIMAPFetchFoldersOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D3CCCB401BEF8D3F792A6A6F /* MCORange.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6CCC5C616FFE5190077A5FC /* MCORange.mm */; }; + D3B0E96454BA62D15FD3C5DC /* MCIMAPFetchFoldersOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA7FB16A2959700778456 /* MCIMAPFetchFoldersOperation.h */; }; D40968F57C035F5B4D60DEA3 /* MCIMAPAppendMessageOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA80F16A299EA00778456 /* MCIMAPAppendMessageOperation.cpp */; }; - D40E3CC7F484F98F04054C31 /* MCNNTPPostOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = F382219D1C7A60A800E00721 /* MCNNTPPostOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D40E3CC7F484F98F04054C31 /* MCNNTPPostOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = F382219D1C7A60A800E00721 /* MCNNTPPostOperation.h */; }; D45CE17E4FCECA90C8A0E2F4 /* MCSMTPSession.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6EE169E847800778456 /* MCSMTPSession.cpp */; }; D4B743E9EDC820583D156C34 /* MCIMAPSyncResult.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64BB21F16E34DCA000DB34C /* MCIMAPSyncResult.cpp */; }; D4D1B23C6FFA21A5E56C0334 /* MCPOPDeleteMessagesOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C62C6EF616A7C6F500737497 /* MCPOPDeleteMessagesOperation.cpp */; }; - D4DD69E596EE913E77F1A9F0 /* MCOSMTPOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6A81BC617068EB000882C15 /* MCOSMTPOperation.mm */; }; - D5000E20992521CBEA1D3029 /* MCOIMAPMessageRenderingOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = DA89896B178A47D200F6D90A /* MCOIMAPMessageRenderingOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D5257B3C7C35D0304F28B514 /* MCIMAPMultipart.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6CC169E847800778456 /* MCIMAPMultipart.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D5379E49F93B03C760580ACD /* MCOSMTPSession.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6A81BBE17068E5E00882C15 /* MCOSMTPSession.mm */; }; + D5257B3C7C35D0304F28B514 /* MCIMAPMultipart.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6CC169E847800778456 /* MCIMAPMultipart.h */; }; D56F91E548F795B4B96B72B7 /* MCValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6BA169E847800778456 /* MCValue.cpp */; }; D6178CFB22BE28FC8FAD881C /* MCIMAPExpungeOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA81516A29A8500778456 /* MCIMAPExpungeOperation.cpp */; }; - D6342D4E47B2FB7A8D5FB59F /* MCAbstractPart.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA69B169E847800778456 /* MCAbstractPart.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D6342D4E47B2FB7A8D5FB59F /* MCAbstractPart.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA69B169E847800778456 /* MCAbstractPart.h */; }; D67B97377839C6082AB846E5 /* MCHashMap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6AD169E847800778456 /* MCHashMap.cpp */; }; - D67F7A2874DBBEDB3E06461A /* MCOSMTPSendOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6A81BC217068E9500882C15 /* MCOSMTPSendOperation.mm */; }; - D6E22AA030F56DADE0874E30 /* MCONetService.h in Headers */ = {isa = PBXBuildFile; fileRef = C6CF62B6175324CE006398B9 /* MCONetService.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D74D52AF06E74059053415AE /* MCOIndexSet.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F5B9F316FEAC6C00D9DABD /* MCOIndexSet.mm */; }; - D7660DD964E1A507BD36AA9E /* MCOIMAPIdentityOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F9217016B250073032E /* MCOIMAPIdentityOperation.mm */; }; - D7CFD0B9803CA22FB32B18A5 /* MCONNTPGroupInfo.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84D73792199C0511005124E5 /* MCONNTPGroupInfo.mm */; }; - D7D3A4FCBB113251F27F9531 /* MCAbstractMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA695169E847800778456 /* MCAbstractMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D86938A1F1FF4A614B3E6F34 /* MCNNTP.h in Headers */ = {isa = PBXBuildFile; fileRef = 8491899C18C93F92002063A3 /* MCNNTP.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D86938A1F1FF4A614B3E6F34 /* MCNNTP.h in Headers */ = {isa = PBXBuildFile; fileRef = 8491899C18C93F92002063A3 /* MCNNTP.h */; }; D8741C5A952EDC3B47BFA092 /* uinvchar.c in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7CBF1A70771B0001DCC3 /* uinvchar.c */; }; - D879A2F6CF197642476DDE5B /* MCOPOPFetchHeaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C6A81BD81706903E00882C15 /* MCOPOPFetchHeaderOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; D8D2BD7BA67058075A55F52F /* MCIndexSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64BB22C16E5C1EE000DB34C /* MCIndexSet.cpp */; }; - D8E5F7445B5A9AA13625897A /* MCPOPMessageInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6DB169E847800778456 /* MCPOPMessageInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D8E5F7445B5A9AA13625897A /* MCPOPMessageInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6DB169E847800778456 /* MCPOPMessageInfo.h */; }; D94C008FBB3C84281EAFFCC6 /* MCIMAPCopyMessagesOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA81216A29A0A00778456 /* MCIMAPCopyMessagesOperation.cpp */; }; D95AFD6708C8B854E6D72D5C /* MCDataDecoderUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 811320AE1D02388A004B7ECF /* MCDataDecoderUtils.cpp */; }; D97097DC4E7CAC3960B45D70 /* csrmbcs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7C6E1A70771B0001DCC3 /* csrmbcs.cpp */; }; - D993E1633374DB4406A0C232 /* MCIndexSet.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB22D16E5C1EE000DB34C /* MCIndexSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D993E1633374DB4406A0C232 /* MCIndexSet.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB22D16E5C1EE000DB34C /* MCIndexSet.h */; }; D9BBE9C1F1605FD727C25032 /* MCAutoreleasePoolMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = C668E2CA1735CB8900A2BB47 /* MCAutoreleasePoolMac.mm */; }; DA0F1C7B177C07B300F0D3B4 /* MCIMAPMessageRenderingOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DA0F1C79177C07B300F0D3B4 /* MCIMAPMessageRenderingOperation.cpp */; }; DA0F1C7C177C07B300F0D3B4 /* MCIMAPMessageRenderingOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DA0F1C79177C07B300F0D3B4 /* MCIMAPMessageRenderingOperation.cpp */; }; - DA89896D178A47D200F6D90A /* MCOIMAPMessageRenderingOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA89896C178A47D200F6D90A /* MCOIMAPMessageRenderingOperation.mm */; }; - DA89896E178A47D200F6D90A /* MCOIMAPMessageRenderingOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA89896C178A47D200F6D90A /* MCOIMAPMessageRenderingOperation.mm */; }; DAACAD5117886807000B4517 /* MCHTMLRendererIMAPDataCallback.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DAACAD4F17886807000B4517 /* MCHTMLRendererIMAPDataCallback.cpp */; }; DAACAD5217886807000B4517 /* MCHTMLRendererIMAPDataCallback.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DAACAD4F17886807000B4517 /* MCHTMLRendererIMAPDataCallback.cpp */; }; - DACB446498A58E756E21D839 /* MCOAccountValidator.h in Headers */ = {isa = PBXBuildFile; fileRef = 27478E821A7646F8004AE621 /* MCOAccountValidator.h */; settings = {ATTRIBUTES = (Public, ); }; }; DAD28C8B1783CFFC00F2BB8F /* MCHTMLBodyRendererTemplateCallback.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DAD28C891783CFFC00F2BB8F /* MCHTMLBodyRendererTemplateCallback.cpp */; }; DAD28C8C1783CFFC00F2BB8F /* MCHTMLBodyRendererTemplateCallback.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DAD28C891783CFFC00F2BB8F /* MCHTMLBodyRendererTemplateCallback.cpp */; }; - DAE42E89178F7E1800E0DB8F /* MCOIMAPMessageRenderingOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DA89896B178A47D200F6D90A /* MCOIMAPMessageRenderingOperation.h */; }; - DAE42E8A178F7E2200E0DB8F /* MCOIMAPMessageRenderingOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DA89896B178A47D200F6D90A /* MCOIMAPMessageRenderingOperation.h */; }; DB54F41EC568CBE43CE4AF84 /* csr2022.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7C6C1A70771B0001DCC3 /* csr2022.cpp */; }; - DB5EB05E91908CE4D148EA7C /* MCMessageConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA69E169E847800778456 /* MCMessageConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB5EB05E91908CE4D148EA7C /* MCMessageConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA69E169E847800778456 /* MCMessageConstants.h */; }; DBB6159C2BC8A69649902CD0 /* MCNNTPCheckAccountOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84D73744199BFA8C005124E5 /* MCNNTPCheckAccountOperation.cpp */; }; - DBF8ECBD672038E00812F448 /* MCOIMAPAppendMessageOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F7D170169FB0073032E /* MCOIMAPAppendMessageOperation.mm */; }; DC671EFFBD8F8490B04D4E5F /* MCIMAPIdentityOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C62C6ED216A2A0E600737497 /* MCIMAPIdentityOperation.cpp */; }; DCD2FF551E227414F2934B55 /* MCIMAPSearchOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA82416A29EE000778456 /* MCIMAPSearchOperation.cpp */; }; - DCE8D6E90DF5C39A9F3C2255 /* MCOIMAPSearchOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F8917016AE60073032E /* MCOIMAPSearchOperation.mm */; }; - DD3FBEB84CC28F8A7F03E170 /* MCNNTPSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 849189A018C93FB7002063A3 /* MCNNTPSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DD500FF1B2C7E0F3F9130B35 /* MCOMessageParser.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB26316FD43A1000DB34C /* MCOMessageParser.mm */; }; + DD3FBEB84CC28F8A7F03E170 /* MCNNTPSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 849189A018C93FB7002063A3 /* MCNNTPSession.h */; }; DD9A2D80F9D252DBC985E54E /* MCHTMLRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C63CD67B16BDCDD400DB18F1 /* MCHTMLRenderer.cpp */; }; - DDBB947DB1054A36E7F8B4DA /* MCOPOPFetchMessagesOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C6A81BE41706906C00882C15 /* MCOPOPFetchMessagesOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DDEABC43085EF35411698BEE /* MCNNTPGroupInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 849189AA18C94986002063A3 /* MCNNTPGroupInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DDFE51EDDAD8BF3FA792223F /* MCData.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6AA169E847800778456 /* MCData.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DDEABC43085EF35411698BEE /* MCNNTPGroupInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 849189AA18C94986002063A3 /* MCNNTPGroupInfo.h */; }; + DDFE51EDDAD8BF3FA792223F /* MCData.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6AA169E847800778456 /* MCData.h */; }; DE08D2132E7BD7733CFB7C8D /* MCIMAPMultipart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6CB169E847800778456 /* MCIMAPMultipart.cpp */; }; - DE4B37A0269ACFE0DAE64D7A /* MCIMAPCustomCommandOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 1820E7D41BD403ED00835D1E /* MCIMAPCustomCommandOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DE76C5159271CD03889F8E6F /* MCOProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = C6CF62B8175324CE006398B9 /* MCOProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DE4B37A0269ACFE0DAE64D7A /* MCIMAPCustomCommandOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 1820E7D41BD403ED00835D1E /* MCIMAPCustomCommandOperation.h */; }; DF10DD5B93EAC29A8965701B /* MCValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6BA169E847800778456 /* MCValue.cpp */; }; E02BA87A589C4602DC1BF6D3 /* ConvertUTF.c in Sources */ = {isa = PBXBuildFile; fileRef = BD49963519FEC6DD000945BC /* ConvertUTF.c */; }; - E064C3CC40188A4CED677D4E /* MCOMultipart.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB26816FD44C2000DB34C /* MCOMultipart.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E084950848F43F832B257B84 /* NSData+MCO.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6D42C1A16AE03D6002BB4F9 /* NSData+MCO.mm */; }; E090D52AD355AF74BDCDB3D4 /* MCIMAPMoveMessagesOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8568A4111C610D9800FF4470 /* MCIMAPMoveMessagesOperation.cpp */; }; E0949A07C1FBB50184CF99D0 /* MCIMAPSubscribeFolderOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA80916A299B500778456 /* MCIMAPSubscribeFolderOperation.cpp */; }; - E09987B7913AE132974411F7 /* MCOIMAPFolderStatusOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9EF9AB18175F36600027FA3B /* MCOIMAPFolderStatusOperation.mm */; }; - E0D0B5244479174E2FDE0FEF /* MCONNTPFetchServerTimeOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84CFA99319F725CB00FE35D2 /* MCONNTPFetchServerTimeOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; E0F9288553E52A3008AA4AB6 /* uinvchar.c in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7CBF1A70771B0001DCC3 /* uinvchar.c */; }; E1E2DB71DA4056F1EAE6BFE0 /* MCConnectionLoggerUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C68B2AF517797389005E61EF /* MCConnectionLoggerUtils.cpp */; }; - E1E985D1989D9875D7EF2042 /* MCOIMAPMessagePart.h in Headers */ = {isa = PBXBuildFile; fileRef = C6F5B9E316FEA27500D9DABD /* MCOIMAPMessagePart.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E1F3E33A32BEB2B2DA828F87 /* MCIMAPCopyMessagesOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA81316A29A1000778456 /* MCIMAPCopyMessagesOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E21801E17B7410B529BE0B98 /* MCSMTP.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6EC169E847800778456 /* MCSMTP.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E231D8EDE90B3BFA038CCCED /* MCIMAPOperationCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA7F416A15A6300778456 /* MCIMAPOperationCallback.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E25D4D73E09AED4671445F53 /* MCOMessageParser.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB26216FD43A1000DB34C /* MCOMessageParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E278C821C115C45FCF2AA061 /* MCAsyncNNTP.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D73729199BF63F005124E5 /* MCAsyncNNTP.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E369178ED36FF70A63AD97D2 /* MCOIMAPFetchParsedContentOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8199FBE819FAEA440040BBC3 /* MCOIMAPFetchParsedContentOperation.mm */; }; + E1F3E33A32BEB2B2DA828F87 /* MCIMAPCopyMessagesOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA81316A29A1000778456 /* MCIMAPCopyMessagesOperation.h */; }; + E21801E17B7410B529BE0B98 /* MCSMTP.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6EC169E847800778456 /* MCSMTP.h */; }; + E231D8EDE90B3BFA038CCCED /* MCIMAPOperationCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA7F416A15A6300778456 /* MCIMAPOperationCallback.h */; }; + E278C821C115C45FCF2AA061 /* MCAsyncNNTP.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D73729199BF63F005124E5 /* MCAsyncNNTP.h */; }; E3833896CBAB914223D0C770 /* MCIMAPStoreLabelsOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA82116A29E4F00778456 /* MCIMAPStoreLabelsOperation.cpp */; }; - E39F4C58F1EAB625CFA590D0 /* MCOIMAPFolderStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EF9AB06175F2EC60027FA3B /* MCOIMAPFolderStatus.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E3A3AEC9263725A938A466F5 /* MCPOP.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6D9169E847800778456 /* MCPOP.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E3A40B332CB95855F7A3566A /* MCNNTPListNewsgroupsOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D7375B199BFDCA005124E5 /* MCNNTPListNewsgroupsOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E3A3AEC9263725A938A466F5 /* MCPOP.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6D9169E847800778456 /* MCPOP.h */; }; + E3A40B332CB95855F7A3566A /* MCNNTPListNewsgroupsOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D7375B199BFDCA005124E5 /* MCNNTPListNewsgroupsOperation.h */; }; E3DE9F2A66E4012DA85E8FFE /* MCIMAPFetchNamespaceOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA82A16A29FAA00778456 /* MCIMAPFetchNamespaceOperation.cpp */; }; E41F3979096D48B949D3EEEA /* MCJSON.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6D6F7F7171E595D006F5B28 /* MCJSON.cpp */; }; - E4A203ED8C5A642D105B6DBF /* MCOPOPFetchMessageOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6A81BDD1706904800882C15 /* MCOPOPFetchMessageOperation.mm */; }; - E511CE6229D2B0369D32CEEB /* MCONNTPFetchAllArticlesOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D73773199C00AB005124E5 /* MCONNTPFetchAllArticlesOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; E561F2B9C70CB9FA580C45E1 /* ucsdet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7CE91A7077680001DCC3 /* ucsdet.cpp */; }; - E573C2BD2D2C73A4DD35FD08 /* NSValue+MCO.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB25116FC2848000DB34C /* NSValue+MCO.mm */; }; - E5889F3AC3D9F2EC8707DC61 /* MCIMAPQuotaOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B3C1BE017ABF4BC008BBF4C /* MCIMAPQuotaOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E5D0FA1EB656AF537CB66E67 /* NSError+MCO.h in Headers */ = {isa = PBXBuildFile; fileRef = C07AD44B013BB42A240B4F04 /* NSError+MCO.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E5889F3AC3D9F2EC8707DC61 /* MCIMAPQuotaOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B3C1BE017ABF4BC008BBF4C /* MCIMAPQuotaOperation.h */; }; E5EAACD5A925246D74292137 /* ConvertUTF.c in Sources */ = {isa = PBXBuildFile; fileRef = BD49963519FEC6DD000945BC /* ConvertUTF.c */; }; E64305426C38E02194E0D0BA /* MCAccountValidator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 27478E7E1A764698004AE621 /* MCAccountValidator.cpp */; }; - E643FCDDB5B23CCA2C109C48 /* MCPOPOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C62C6EFA16A7C94000737497 /* MCPOPOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E6D77958E27EC4C5FC5701F5 /* MCOIMAPMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = C6F5B9E016FEA1E800D9DABD /* MCOIMAPMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E643FCDDB5B23CCA2C109C48 /* MCPOPOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C62C6EFA16A7C94000737497 /* MCPOPOperation.h */; }; E7845959586EF0ACC94E37AE /* MCIMAPAsyncConnection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA7FD16A295B500778456 /* MCIMAPAsyncConnection.cpp */; }; - E7CB648B1D3F948FBBED8B67 /* MCOMessageParser.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB26316FD43A1000DB34C /* MCOMessageParser.mm */; }; - E7E6ADDE88B647A7B5959DEB /* MCOMailProvidersManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6CF62B5175324CE006398B9 /* MCOMailProvidersManager.mm */; }; E8096C33A031E2A6BC44621B /* MCSMTPAsyncSession.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA68F169E847800778456 /* MCSMTPAsyncSession.cpp */; }; - E8661A5DA85C79EA61C0BC61 /* NSError+MCO.mm in Sources */ = {isa = PBXBuildFile; fileRef = C07ADFE43E22B38EFF23ADB5 /* NSError+MCO.mm */; }; - E880564364D7039E276870F3 /* MCOMailProvidersManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C6CF62B4175324CE006398B9 /* MCOMailProvidersManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E89DB38B8A1B9A5ADBE2C30A /* MCOMailProvidersManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6CF62B5175324CE006398B9 /* MCOMailProvidersManager.mm */; }; - E96992DCFAE762CA19D5884D /* MCORFC822.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB26B16FD4C3B000DB34C /* MCORFC822.h */; settings = {ATTRIBUTES = (Public, ); }; }; E99B78DF6A385BBEA6BF339F /* MCMainThreadMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6BD169E847800778456 /* MCMainThreadMac.mm */; }; E9A444F64FC1A907BB4E45DB /* MCIMAPCustomCommandOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1820E7D31BD403ED00835D1E /* MCIMAPCustomCommandOperation.cpp */; }; EA0A6F02FAEF34FB6D954CC2 /* MCNNTPListNewsgroupsOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84D7375A199BFDCA005124E5 /* MCNNTPListNewsgroupsOperation.cpp */; }; - EA941A6041E9BE93363DF269 /* MCOPOPFetchMessagesOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C6A81BE41706906C00882C15 /* MCOPOPFetchMessagesOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; EA9F51ED9039F90E5598DCEE /* MCIMAPCheckAccountOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA7F616A15A7800778456 /* MCIMAPCheckAccountOperation.cpp */; }; - EB55D749DA27944ADF357519 /* MCICUTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = C6D6F9691720F8F4006F5B28 /* MCICUTypes.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EB5D3EE80E7339FB39D2E9B2 /* MCOSMTP.h in Headers */ = {isa = PBXBuildFile; fileRef = C6A81BE81706A6B300882C15 /* MCOSMTP.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EC14DA4CAD7640A38DCEE52C /* MCIMAPMoveMessagesOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8568A4121C610D9800FF4470 /* MCIMAPMoveMessagesOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EC8F7A75442E276BE3D5611E /* MCLog.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6B0169E847800778456 /* MCLog.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ED2A55E73927AFD48D412ABB /* MCOSMTPSendOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C6A81BC117068E9500882C15 /* MCOSMTPSendOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EB55D749DA27944ADF357519 /* MCICUTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = C6D6F9691720F8F4006F5B28 /* MCICUTypes.h */; }; + EC14DA4CAD7640A38DCEE52C /* MCIMAPMoveMessagesOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8568A4121C610D9800FF4470 /* MCIMAPMoveMessagesOperation.h */; }; + EC8F7A75442E276BE3D5611E /* MCLog.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6B0169E847800778456 /* MCLog.h */; }; ED380ED7FC4ABD64D3EEF0BA /* MCIMAPAsyncSession.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C62C6F0816A8F57000737497 /* MCIMAPAsyncSession.cpp */; }; - ED4BA7EA708C2886EF10F98E /* MCIMAPMultipart.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6CC169E847800778456 /* MCIMAPMultipart.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ED75C98B2549334C5E0B85BB /* MCOIMAPSession.h in Headers */ = {isa = PBXBuildFile; fileRef = F8EA941416BAED6E0011AC6F /* MCOIMAPSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; + ED4BA7EA708C2886EF10F98E /* MCIMAPMultipart.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6CC169E847800778456 /* MCIMAPMultipart.h */; }; EDAC14A8132C097CAD4DDF08 /* csrucode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7C701A70771B0001DCC3 /* csrucode.cpp */; }; - EDC26412B247F71D5565D7BC /* NSString+MCO.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6D42C1C16AE03D6002BB4F9 /* NSString+MCO.mm */; }; EE447F0391248A0BED44DC6D /* MCSMTPNoopOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B639E117F279BB003B5BA2 /* MCSMTPNoopOperation.cpp */; }; EE57D9B5BA6B4A704F8C83EE /* csmatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7C6B1A70771B0001DCC3 /* csmatch.cpp */; }; - EEA31A44BB279E45E6634543 /* MCBaseTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6A4169E847800778456 /* MCBaseTypes.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EED9D8AB123FA473B591E42D /* MCPOPOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C62C6EFA16A7C94000737497 /* MCPOPOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EEA31A44BB279E45E6634543 /* MCBaseTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6A4169E847800778456 /* MCBaseTypes.h */; }; + EED9D8AB123FA473B591E42D /* MCPOPOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C62C6EFA16A7C94000737497 /* MCPOPOperation.h */; }; EF22293B161ED77407798380 /* MCIMAPFetchParsedContentOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8199FBEF19FAF1270040BBC3 /* MCIMAPFetchParsedContentOperation.cpp */; }; - EF2A3DD113C8EEDC56F6D56C /* MCHTMLRendererCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = C63CD68516BE148B00DB18F1 /* MCHTMLRendererCallback.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EF2A3DD113C8EEDC56F6D56C /* MCHTMLRendererCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = C63CD68516BE148B00DB18F1 /* MCHTMLRendererCallback.h */; }; F068D3FBA077CA88AF63476C /* MCNNTPFetchAllArticlesOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84D73740199BF963005124E5 /* MCNNTPFetchAllArticlesOperation.cpp */; }; - F0D3A829A77BDD5A0FA78650 /* MCMessageParser.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6E5169E847800778456 /* MCMessageParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F0D3A829A77BDD5A0FA78650 /* MCMessageParser.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6E5169E847800778456 /* MCMessageParser.h */; }; F0E1093EA9094DBBF1BE57FE /* utrace.c in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7CC21A70771B0001DCC3 /* utrace.c */; }; - F1098BF352E4ADC9B4AE09D1 /* NSIndexSet+MCO.h in Headers */ = {isa = PBXBuildFile; fileRef = C69BA85917DEFCCB00D601B7 /* NSIndexSet+MCO.h */; settings = {ATTRIBUTES = (Public, ); }; }; F1911E8987CA5287C13C1821 /* MCIMAPCopyMessagesOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA81216A29A0A00778456 /* MCIMAPCopyMessagesOperation.cpp */; }; F1FF4A91ACA778557482F3CC /* MCIMAPNoopOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B639EB17F280F3003B5BA2 /* MCIMAPNoopOperation.cpp */; }; - F208F99072B44F6F9FA36C0D /* MCSMTPAsyncSession.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA690169E847800778456 /* MCSMTPAsyncSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F34876CCDC19E877B964CDA9 /* MCArray.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6A6169E847800778456 /* MCArray.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F208F99072B44F6F9FA36C0D /* MCSMTPAsyncSession.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA690169E847800778456 /* MCSMTPAsyncSession.h */; }; + F34876CCDC19E877B964CDA9 /* MCArray.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6A6169E847800778456 /* MCArray.h */; }; F349C205E0481B42303DD0D0 /* MCLibetpan.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BD637139177DFF080094121B /* MCLibetpan.cpp */; }; - F35AA1CEBFA6EC2BA451D17A /* MCOHTMLRendererDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = C623C58B16FE52C0001BBEFC /* MCOHTMLRendererDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F36BAD2E1F8ACCD84913B768 /* MCOPOPMessageInfo.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6A81BFF1707CEE500882C15 /* MCOPOPMessageInfo.mm */; }; F382219F1C7A626700E00721 /* MCNNTPPostOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F382219E1C7A626700E00721 /* MCNNTPPostOperation.cpp */; }; F38221A01C7A626700E00721 /* MCNNTPPostOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F382219E1C7A626700E00721 /* MCNNTPPostOperation.cpp */; }; - F38221A31C7AAD8100E00721 /* MCONNTPPostOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = F38221A21C7AAD8100E00721 /* MCONNTPPostOperation.mm */; }; - F38221A41C7AAD8100E00721 /* MCONNTPPostOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = F38221A21C7AAD8100E00721 /* MCONNTPPostOperation.mm */; }; F38221A51C7B629B00E00721 /* MCNNTPPostOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = F382219D1C7A60A800E00721 /* MCNNTPPostOperation.h */; }; - F38221A61C7B62E900E00721 /* MCONNTPPostOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = F38221A11C7AAD8100E00721 /* MCONNTPPostOperation.h */; }; F38221A71C7B638200E00721 /* MCNNTPPostOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = F382219D1C7A60A800E00721 /* MCNNTPPostOperation.h */; }; - F38221A81C7B63E500E00721 /* MCONNTPPostOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = F38221A11C7AAD8100E00721 /* MCONNTPPostOperation.h */; }; - F3B08CFB60208C1C25314092 /* MCIMAPFolder.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6C6169E847800778456 /* MCIMAPFolder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F44A4A1760AB495C3365A118 /* MCOIMAPIdentity.h in Headers */ = {isa = PBXBuildFile; fileRef = C63D316017C92D8300A4D993 /* MCOIMAPIdentity.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F4B2AF31150B3DB1A6ECD0BC /* MCProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = C6CF62C5175324F0006398B9 /* MCProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3B08CFB60208C1C25314092 /* MCIMAPFolder.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6C6169E847800778456 /* MCIMAPFolder.h */; }; + F4B2AF31150B3DB1A6ECD0BC /* MCProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = C6CF62C5175324F0006398B9 /* MCProvider.h */; }; F4B4641FC39D47DE75F2A762 /* csmatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7C6B1A70771B0001DCC3 /* csmatch.cpp */; }; - F4CCD55F6DFDD6858E6BB848 /* MCOObjectWrapper.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64FF39016B3C13000F8C162 /* MCOObjectWrapper.mm */; }; - F4D001D423C50FD1F127A951 /* MCSMTPNoopOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84B639E217F279BB003B5BA2 /* MCSMTPNoopOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F4D001D423C50FD1F127A951 /* MCSMTPNoopOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84B639E217F279BB003B5BA2 /* MCSMTPNoopOperation.h */; }; F5053416B933489D20A020A2 /* MCNNTPFetchOverviewOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84CFA98519F7159700FE35D2 /* MCNNTPFetchOverviewOperation.cpp */; }; F5BA1F1C2F150A484726B921 /* uenum.c in Sources */ = {isa = PBXBuildFile; fileRef = BDCD7CBE1A70771B0001DCC3 /* uenum.c */; }; - F5F1D859C30C063189E826CE /* MCOSMTPNoopOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8416A99C17F284F400B3C7DA /* MCOSMTPNoopOperation.mm */; }; - F6E7C83028F8E623B3643F64 /* MCIMAPCapabilityOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB22A16E5C0A3000DB34C /* MCIMAPCapabilityOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F794DF4DF1BE570D2EBED933 /* MCOPOPFetchHeaderOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6A81BD91706903E00882C15 /* MCOPOPFetchHeaderOperation.mm */; }; + F6E7C83028F8E623B3643F64 /* MCIMAPCapabilityOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB22A16E5C0A3000DB34C /* MCIMAPCapabilityOperation.h */; }; F7C7910765AE6B8C568A3CFA /* MCIMAPQuotaOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B3C1BDF17ABF4BB008BBF4C /* MCIMAPQuotaOperation.cpp */; }; - F7D46F5FD7375DCDB597C940 /* MCJSON.h in Headers */ = {isa = PBXBuildFile; fileRef = C6D6F7F8171E595D006F5B28 /* MCJSON.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F81F279E14748A734360332E /* MCOIMAPNamespaceItem.h in Headers */ = {isa = PBXBuildFile; fileRef = C6F5B9EC16FEA3C400D9DABD /* MCOIMAPNamespaceItem.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F8646A26920120178209E76F /* MCOMessageBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB25F16FD438F000DB34C /* MCOMessageBuilder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F87F190C16BB62B00012652F /* MCOIMAPFetchFoldersOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = F87F190B16BB62B00012652F /* MCOIMAPFetchFoldersOperation.mm */; }; - F89E65CC7C706E961329FDA7 /* MCONNTPSession.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84D73763199BFFC7005124E5 /* MCONNTPSession.mm */; }; - F8BEC0B5E1B550E354F4A3E6 /* MCOAbstractMultipart.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB23B16EDAAC7000DB34C /* MCOAbstractMultipart.mm */; }; - F8DCBCEC6F0A48F92E827FED /* MCMessageBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6E3169E847800778456 /* MCMessageBuilder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F8EA941716BB1C9D0011AC6F /* MCOIMAPSession.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = F8EA941416BAED6E0011AC6F /* MCOIMAPSession.h */; }; + F7D46F5FD7375DCDB597C940 /* MCJSON.h in Headers */ = {isa = PBXBuildFile; fileRef = C6D6F7F8171E595D006F5B28 /* MCJSON.h */; }; + F8DCBCEC6F0A48F92E827FED /* MCMessageBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6E3169E847800778456 /* MCMessageBuilder.h */; }; F948024B2C96BFB5B86B049D /* MCIMAPExpungeOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA81516A29A8500778456 /* MCIMAPExpungeOperation.cpp */; }; - F94BC14E64FFA818BF8F996A /* MCOIMAPFolderStatus.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9EF9AB07175F2EC60027FA3B /* MCOIMAPFolderStatus.mm */; }; - F9B9A1F3289117088924E1C8 /* MCOConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB26D16FD63F6000DB34C /* MCOConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FA0964410C32F307B02242B8 /* MCAutoreleasePool.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6A3169E847800778456 /* MCAutoreleasePool.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FA1EB2752E916FF386FCD3DD /* MCIMAPAppendMessageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA81016A299EB00778456 /* MCIMAPAppendMessageOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FA0964410C32F307B02242B8 /* MCAutoreleasePool.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA6A3169E847800778456 /* MCAutoreleasePool.h */; }; + FA1EB2752E916FF386FCD3DD /* MCIMAPAppendMessageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA81016A299EB00778456 /* MCIMAPAppendMessageOperation.h */; }; FA59FC79FD386E420BFA138A /* MCIMAPSubscribeFolderOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA80916A299B500778456 /* MCIMAPSubscribeFolderOperation.cpp */; }; - FB151E555B32CB9823541450 /* NSDictionary+MCO.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6EB30F616B8C9480091F4F1 /* NSDictionary+MCO.mm */; }; - FB29EF78E53370FFBB151956 /* MCIMAPIdentityOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C62C6ED316A2A0E600737497 /* MCIMAPIdentityOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FB3AF3E32CAEF57DEC732CC8 /* MCPOPFetchMessageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C62C6EF416A7C6E900737497 /* MCPOPFetchMessageOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FB78CB6B361B88DBE70B7C57 /* MCOIMAPOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C623C58E16FE6B45001BBEFC /* MCOIMAPOperation.mm */; }; + FB29EF78E53370FFBB151956 /* MCIMAPIdentityOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C62C6ED316A2A0E600737497 /* MCIMAPIdentityOperation.h */; }; + FB3AF3E32CAEF57DEC732CC8 /* MCPOPFetchMessageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C62C6EF416A7C6E900737497 /* MCPOPFetchMessageOperation.h */; }; FC2E4E860688FEC5315FA904 /* MCData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64EA6A9169E847800778456 /* MCData.cpp */; }; - FC6E25B0B716CFA16397D5FD /* MCSMTPAsyncSession.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA690169E847800778456 /* MCSMTPAsyncSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FCE25496BA858F94CDA7158E /* MCONNTPGroupInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D73791199C0511005124E5 /* MCONNTPGroupInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FD98CE73B8B5A9581AB0F6CC /* MCIMAPAppendMessageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA81016A299EB00778456 /* MCIMAPAppendMessageOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FDD607D0EA8E061DF7851F47 /* MCOPOPOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C6A81BE01706905600882C15 /* MCOPOPOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FDE7B740BE15EEC185EDA343 /* MCOPOPFetchMessageOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6A81BDD1706904800882C15 /* MCOPOPFetchMessageOperation.mm */; }; - FDFC8B4CA1048E6EA1D6F266 /* MCIMAPFolderInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = C673EBEC1A46B41000A53F7F /* MCIMAPFolderInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FED09C5DEB5AF6D3B1B540B6 /* MCOIMAPIdleOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6F61F8C17016AFA0073032E /* MCOIMAPIdleOperation.mm */; }; - FF0DCFB615637D565E459980 /* MCConnectionLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = C68B2AEB1778A589005E61EF /* MCConnectionLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FF6A697C1F52F4ECB9C03942 /* MCOIMAPFetchParsedContentOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8199FBE719FAEA440040BBC3 /* MCOIMAPFetchParsedContentOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FC6E25B0B716CFA16397D5FD /* MCSMTPAsyncSession.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA690169E847800778456 /* MCSMTPAsyncSession.h */; }; + FD98CE73B8B5A9581AB0F6CC /* MCIMAPAppendMessageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C64EA81016A299EB00778456 /* MCIMAPAppendMessageOperation.h */; }; + FDFC8B4CA1048E6EA1D6F266 /* MCIMAPFolderInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = C673EBEC1A46B41000A53F7F /* MCIMAPFolderInfo.h */; }; + FF0DCFB615637D565E459980 /* MCConnectionLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = C68B2AEB1778A589005E61EF /* MCConnectionLogger.h */; }; FFAEEC4A7D538769F7D1289C /* MCIndexSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64BB22C16E5C1EE000DB34C /* MCIndexSet.cpp */; }; - FFCCBEBD335DF617401B4AB8 /* MCOConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = C64BB26D16FD63F6000DB34C /* MCOConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FFE5601D3A885140098DB014 /* MCPOPFetchHeaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C62C6EF116A7C6DE00737497 /* MCPOPFetchHeaderOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FFE5601D3A885140098DB014 /* MCPOPFetchHeaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C62C6EF116A7C6DE00737497 /* MCPOPFetchHeaderOperation.h */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ + 841E65001F683440007BB736 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = C64EA52E169E772200778456 /* Project object */; + proxyType = 1; + remoteGlobalIDString = C6BD288C170BD71100A91AC1; + remoteInfo = "mailcore osx"; + }; C600B61E1A244BD8000728F1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = C64EA52E169E772200778456 /* Project object */; @@ -1936,6 +1627,16 @@ /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ + 84F7B4931D916CE7005F83E8 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; C600B6121A242C3F000728F1 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; @@ -1951,58 +1652,38 @@ dstPath = include/MailCore; dstSubfolderSpec = 16; files = ( - F38221A81C7B63E500E00721 /* MCONNTPPostOperation.h in CopyFiles */, + 84C36C381F62ECA5003E1399 /* MCDefines.h in CopyFiles */, + 84C36C361F62EC8B003E1399 /* MCOperationQueueCallback.h in CopyFiles */, F38221A71C7B638200E00721 /* MCNNTPPostOperation.h in CopyFiles */, - 817FA5291C69037B006146BD /* MCOIMAPFetchContentToFileOperation.h in CopyFiles */, 817FA5281C69016A006146BD /* MCIMAPFetchContentToFileOperation.h in CopyFiles */, C6BEC1AB1B1256C100546519 /* MCHTMLCleaner.h in CopyFiles */, 27E91D601A80D3F4005A3244 /* MCMXRecordResolverOperation.h in CopyFiles */, - 27478E861A76475F004AE621 /* MCOAccountValidator.h in CopyFiles */, 27478E871A76475F004AE621 /* MCAccountValidator.h in CopyFiles */, C6F49A901C8E96D70087F4B7 /* MCIMAPCheckAccountOperation.h in CopyFiles */, C673EBF01A46B45300A53F7F /* MCIMAPFolderInfo.h in CopyFiles */, C6181D3319FE0F8D0088FBBC /* MCIMAPFetchParsedContentOperation.h in CopyFiles */, - C6181D3219FE0F8A0088FBBC /* MCOIMAPFetchParsedContentOperation.h in CopyFiles */, - C6D4FD3819FA9F57001F7E01 /* MCONNTPFetchServerTimeOperation.h in CopyFiles */, C6D4FD3719FA9F55001F7E01 /* MCNNTPFetchServerTimeOperation.h in CopyFiles */, - C6D4FD3419FA9EB6001F7E01 /* MCONNTPFetchOverviewOperation.h in CopyFiles */, C6D4FD3119FA9E80001F7E01 /* MCNNTPFetchOverviewOperation.h in CopyFiles */, 849189A318C94023002063A3 /* MCNNTP.h in CopyFiles */, 18707E211BE24DEA00B494C3 /* MCIMAPCustomCommandOperation.h in CopyFiles */, 849189A418C94023002063A3 /* MCNNTPSession.h in CopyFiles */, - 84B639F317F2839C003B5BA2 /* MCOPOPNoopOperation.h in CopyFiles */, - 184805451BE751BD001B80AA /* MCOIMAPCustomCommandOperation.h in CopyFiles */, 84B639F417F2839C003B5BA2 /* MCIMAPNoopOperation.h in CopyFiles */, - 84D7377B199C00F5005124E5 /* MCONNTP.h in CopyFiles */, 84B639F517F2839C003B5BA2 /* MCPOPNoopOperation.h in CopyFiles */, 84D7374B199BFB94005124E5 /* MCAsyncNNTP.h in CopyFiles */, - 84D7377E199C0100005124E5 /* MCONNTPSession.h in CopyFiles */, 84B639F617F2839C003B5BA2 /* MCSMTPNoopOperation.h in CopyFiles */, 84E65535199BE2C300EC8CC4 /* MCNNTPGroupInfo.h in CopyFiles */, 943F1AA017D9736100F0C798 /* MCIMAPConnectOperation.h in CopyFiles */, 4BE4029217B548D900ECC5E4 /* MCIMAPQuotaOperation.h in CopyFiles */, - 84391342199C3AA800FEFCDD /* MCONNTPListNewsgroupsOperation.h in CopyFiles */, - 4BE4029117B548B900ECC5E4 /* MCOIMAPQuotaOperation.h in CopyFiles */, 84D7374C199BFB9C005124E5 /* MCNNTPFetchHeaderOperation.h in CopyFiles */, - 84391345199C3AB400FEFCDD /* MCONNTPDisconnectOperation.h in CopyFiles */, - C69BA85E17DEFD9F00D601B7 /* NSIndexSet+MCO.h in CopyFiles */, - 84391346199C3ABB00FEFCDD /* MCONNTPGroupInfo.h in CopyFiles */, 84D7373A199BF81D005124E5 /* MCNNTPOperation.h in CopyFiles */, 84D73748199BFACA005124E5 /* MCNNTPAsyncSession.h in CopyFiles */, 84D7375F199BFF38005124E5 /* MCNNTPListNewsgroupsOperation.h in CopyFiles */, C6E665001790963E0063F2CF /* MCIMAPMessageRenderingOperation.h in CopyFiles */, - DAE42E89178F7E1800E0DB8F /* MCOIMAPMessageRenderingOperation.h in CopyFiles */, - C63D316617C997B400A4D993 /* MCOIMAPIdentity.h in CopyFiles */, 84D73754199BFBEC005124E5 /* MCNNTPOperationCallback.h in CopyFiles */, C63D315E17C9279700A4D993 /* MCIMAPIdentity.h in CopyFiles */, 9E774D8C1767CD490065EB9B /* MCIMAPFolderStatus.h in CopyFiles */, 9EF9AB24175F409D0027FA3B /* MCIMAPFolderStatusOperation.h in CopyFiles */, - 9EF9AB22175F406D0027FA3B /* MCOIMAPFolderStatus.h in CopyFiles */, 84D73733199BF7A7005124E5 /* MCNNTPProgressCallback.h in CopyFiles */, - 9EF9AB23175F406D0027FA3B /* MCOIMAPFolderStatusOperation.h in CopyFiles */, - C6CF62CD1753250E006398B9 /* MCOMailProvider.h in CopyFiles */, - C6CF62CE17532510006398B9 /* MCOMailProvidersManager.h in CopyFiles */, - C6CF62D017532521006398B9 /* MCOProvider.h in CopyFiles */, C68B2AEE1778A865005E61EF /* MCConnectionLogger.h in CopyFiles */, C6CF62D117532527006398B9 /* MCMailProvider.h in CopyFiles */, C6CF62D417532531006398B9 /* MCProvider.h in CopyFiles */, @@ -2010,91 +1691,24 @@ C6CF62D21753252A006398B9 /* MCMailProvidersManager.h in CopyFiles */, C6AC113417124D0600B715B7 /* MCLibetpanTypes.h in CopyFiles */, C63CD68C16BE1BC800DB18F1 /* MCHTMLRendererCallback.h in CopyFiles */, - C6A81BFC1707821F00882C15 /* MCOPOP.h in CopyFiles */, - C6A81BEB1707805E00882C15 /* MCOPOPFetchMessageOperation.h in CopyFiles */, C6D6F97017211173006F5B28 /* MCIterator.h in CopyFiles */, - C6A81BEC1707805F00882C15 /* MCOPOPOperation.h in CopyFiles */, - C6A81BE91707805B00882C15 /* MCOPOPSession.h in CopyFiles */, - C6F61FB1170288690073032E /* MCOMultipart.h in CopyFiles */, - C6A81BFA1707811D00882C15 /* MCOSMTP.h in CopyFiles */, C6A81C05170A82F600882C15 /* MCIMAPSyncResult.h in CopyFiles */, - C6A81BEE1707806500882C15 /* MCOSMTPSession.h in CopyFiles */, - C6A81BF01707806800882C15 /* MCOSMTPOperation.h in CopyFiles */, - C6A81BED1707806100882C15 /* MCOPOPFetchMessagesOperation.h in CopyFiles */, C6D6F96B1720F92D006F5B28 /* MCICUTypes.h in CopyFiles */, - 8B5764371A00E1B0004868C0 /* MCOSMTPLoginOperation.h in CopyFiles */, - C6A81BEF1707806600882C15 /* MCOSMTPSendOperation.h in CopyFiles */, C63CD68916BE1BC100DB18F1 /* MCDateFormatter.h in CopyFiles */, - C6F61FAE170288640073032E /* MCOMessageBuilder.h in CopyFiles */, - C6CF62CF17532514006398B9 /* MCONetService.h in CopyFiles */, - C6F61FB61702B5290073032E /* MCOIMAPBaseOperation.h in CopyFiles */, - C6F61FB21702886B0073032E /* MCORFC822.h in CopyFiles */, - C623C58616FD6A50001BBEFC /* MCOConstants.h in CopyFiles */, - C6F61FAD170288610073032E /* MCOAttachment.h in CopyFiles */, - C6F61FAF170288660073032E /* MCOMessageParser.h in CopyFiles */, - C6F61FB0170288680073032E /* MCOMessagePart.h in CopyFiles */, - 84D7377F199C0104005124E5 /* MCONNTPOperation.h in CopyFiles */, - 84D73780199C0107005124E5 /* MCONNTPFetchHeaderOperation.h in CopyFiles */, C6D6F959171E5D5E006F5B28 /* MCMD5.h in CopyFiles */, - C6F61FA0170187B80073032E /* MCOIMAPFolderInfoOperation.h in CopyFiles */, - C6F61FA4170187C30073032E /* MCOIMAPFetchMessagesOperation.h in CopyFiles */, - 84D73781199C010A005124E5 /* MCONNTPFetchArticleOperation.h in CopyFiles */, - 84D73782199C010B005124E5 /* MCONNTPFetchAllArticlesOperation.h in CopyFiles */, - C6F61FA3170187BD0073032E /* MCOIMAPCopyMessagesOperation.h in CopyFiles */, - 8568A41D1C61169000FF4470 /* MCOIMAPMoveMessagesOperation.h in CopyFiles */, C6D6F95A171E5D60006F5B28 /* MCJSON.h in CopyFiles */, - C6F61FA2170187BC0073032E /* MCOIMAPAppendMessageOperation.h in CopyFiles */, C6D6F958171E5D5C006F5B28 /* MCNull.h in CopyFiles */, - C6F61FAB170187CE0073032E /* MCOIMAPSearchExpression.h in CopyFiles */, - C6F61FA5170187C50073032E /* MCOIMAPFetchContentOperation.h in CopyFiles */, - C6CCC5CA16FFEA090077A5FC /* MCOIndexSet.h in CopyFiles */, - C6F61FA8170187C90073032E /* MCOIMAPFetchNamespaceOperation.h in CopyFiles */, - C6F61FA7170187C80073032E /* MCOIMAPIdleOperation.h in CopyFiles */, - C6F61FA6170187C60073032E /* MCOIMAPSearchOperation.h in CopyFiles */, - C6F61FA9170187CB0073032E /* MCOIMAPIdentityOperation.h in CopyFiles */, - C6F5B9F716FEBB4A00D9DABD /* MCOIMAPMessagePart.h in CopyFiles */, - C6F61FAA170187CC0073032E /* MCOIMAPCapabilityOperation.h in CopyFiles */, - C6F61FA1170187BA0073032E /* MCOIMAPFolderInfo.h in CopyFiles */, - C623C58716FD6A61001BBEFC /* MCOOperation.h in CopyFiles */, - C6F5B9F916FEBB5900D9DABD /* MCOIMAPNamespace.h in CopyFiles */, - C6F5B9FA16FEBB6000D9DABD /* MCOIMAPNamespaceItem.h in CopyFiles */, - C6CCC5C916FFEA070077A5FC /* MCORange.h in CopyFiles */, - C6F5B9F816FEBB4C00D9DABD /* MCOIMAPMultipart.h in CopyFiles */, - C623C58C16FE54C9001BBEFC /* MCOHTMLRendererDelegate.h in CopyFiles */, - C6F5BA0016FFAF4100D9DABD /* MCOHTMLRendererIMAPDelegate.h in CopyFiles */, - C6F5B9FB16FEBB6200D9DABD /* MCOIMAPPart.h in CopyFiles */, - C63CD68E16BE324100DB18F1 /* MCOIMAPFetchFoldersOperation.h in CopyFiles */, - C6F5B9F516FEBB4500D9DABD /* MCOIMAPFolder.h in CopyFiles */, - C623C59016FE71B2001BBEFC /* MCOIMAPOperation.h in CopyFiles */, - C6F5B9F616FEBB4900D9DABD /* MCOIMAPMessage.h in CopyFiles */, 84D73750199BFBD9005124E5 /* MCNNTPFetchArticleOperation.h in CopyFiles */, 84D7374F199BFBC8005124E5 /* MCNNTPFetchAllArticlesOperation.h in CopyFiles */, - C623C58916FD8B71001BBEFC /* MCOUtils.h in CopyFiles */, C64EA74F169E859600778456 /* MCAbstractMessage.h in CopyFiles */, - C623C58816FD6DF6001BBEFC /* NSValue+MCO.h in CopyFiles */, C63CD68816BE1BBF00DB18F1 /* MCAddressDisplay.h in CopyFiles */, C63CD68D16BE1BCA00DB18F1 /* MCRenderer.h in CopyFiles */, C64BB22F16E885C3000DB34C /* MCIndexSet.h in CopyFiles */, C64BB23016E8876F000DB34C /* MCIMAPCapabilityOperation.h in CopyFiles */, C62C6EE016A696AB00737497 /* MCAsyncIMAP.h in CopyFiles */, C63CD68A16BE1BC400DB18F1 /* MCSizeFormatter.h in CopyFiles */, - C64BB24C16EEFCC2000DB34C /* MCOAddress.h in CopyFiles */, - C64BB25616FD333C000DB34C /* MCOAbstractMessage.h in CopyFiles */, - C64BB24716EEFCB9000DB34C /* MCOAbstract.h in CopyFiles */, - C64BB24A16EEFCBF000DB34C /* MCOAbstractMultipart.h in CopyFiles */, - C64BB24916EEFCBE000DB34C /* MCOAbstractMessagePart.h in CopyFiles */, - C64BB24D16EEFCC4000DB34C /* MCOMessageHeader.h in CopyFiles */, - C64BB24B16EEFCC1000DB34C /* MCOAbstractPart.h in CopyFiles */, - C6EB30DE16B5B8050091F4F1 /* MCObjC.h in CopyFiles */, - C6EB310216B8E7D60091F4F1 /* NSObject+MCO.h in CopyFiles */, - C6EB310316B8E7D80091F4F1 /* NSArray+MCO.h in CopyFiles */, - C64FF39316B3C25200F8C162 /* MCOObjectWrapper.h in CopyFiles */, - C6EB30F816B8DED30091F4F1 /* NSDictionary+MCO.h in CopyFiles */, C64EA74E169E859600778456 /* MCAbstract.h in CopyFiles */, - C6D42C2A16AE0507002BB4F9 /* NSData+MCO.h in CopyFiles */, - C64BB25516FD32FB000DB34C /* MCOIMAP.h in CopyFiles */, C62C6F0016A7E32800737497 /* MCPOPFetchHeaderOperation.h in CopyFiles */, - C6D42C2C16AE0509002BB4F9 /* NSString+MCO.h in CopyFiles */, C62C6EE216A696B400737497 /* MCIMAPFetchFoldersOperation.h in CopyFiles */, C64EA7E516A14A5400778456 /* MCAsync.h in CopyFiles */, C64EA750169E859600778456 /* MCAbstractMessagePart.h in CopyFiles */, @@ -2158,10 +1772,8 @@ C64EA774169E859600778456 /* MCPOPMessageInfo.h in CopyFiles */, C64EA775169E859600778456 /* MCPOPProgressCallback.h in CopyFiles */, C64EA776169E859600778456 /* MCPOPSession.h in CopyFiles */, - C6A81BEA1707805C00882C15 /* MCOPOPFetchHeaderOperation.h in CopyFiles */, C62C6F0716A7E7CC00737497 /* MCPOPFetchMessagesOperation.h in CopyFiles */, C64EA777169E859600778456 /* MCAttachment.h in CopyFiles */, - C6A81C031707D96500882C15 /* MCOPOPMessageInfo.h in CopyFiles */, C64EA7DC16A13A4C00778456 /* MCSMTPOperation.h in CopyFiles */, C64EA74D169E859600778456 /* MCSMTPAsyncSession.h in CopyFiles */, C64EA778169E859600778456 /* MCMessageBuilder.h in CopyFiles */, @@ -2172,8 +1784,6 @@ C64EA77D169E859600778456 /* MCSMTP.h in CopyFiles */, C64EA77E169E859600778456 /* MCSMTPProgressCallback.h in CopyFiles */, C64EA77F169E859600778456 /* MCSMTPSession.h in CopyFiles */, - F8EA941716BB1C9D0011AC6F /* MCOIMAPSession.h in CopyFiles */, - C07AD5D7FD82F8ACAB576231 /* NSError+MCO.h in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2192,141 +1802,57 @@ dstPath = include/MailCore; dstSubfolderSpec = 16; files = ( - F38221A61C7B62E900E00721 /* MCONNTPPostOperation.h in CopyFiles */, + 84C36C391F62ECAC003E1399 /* MCDefines.h in CopyFiles */, + 84C36C371F62EC93003E1399 /* MCOperationQueueCallback.h in CopyFiles */, F38221A51C7B629B00E00721 /* MCNNTPPostOperation.h in CopyFiles */, - 817FA52A1C69038F006146BD /* MCOIMAPFetchContentToFileOperation.h in CopyFiles */, 817FA5271C69013C006146BD /* MCIMAPFetchContentToFileOperation.h in CopyFiles */, C6BEC1AA1B1256BA00546519 /* MCHTMLCleaner.h in CopyFiles */, - 27478E881A7647AC004AE621 /* MCOAccountValidator.h in CopyFiles */, 27478E891A7647AC004AE621 /* MCAccountValidator.h in CopyFiles */, C673EBEF1A46B44E00A53F7F /* MCIMAPFolderInfo.h in CopyFiles */, C6F49A8F1C8E96D00087F4B7 /* MCIMAPCheckAccountOperation.h in CopyFiles */, - 8199FBF719FAF3AF0040BBC3 /* MCOIMAPFetchParsedContentOperation.h in CopyFiles */, 8199FBF819FAF3AF0040BBC3 /* MCIMAPFetchParsedContentOperation.h in CopyFiles */, C6D4FD3619FA9F4F001F7E01 /* MCNNTPFetchServerTimeOperation.h in CopyFiles */, - C6D4FD3519FA9F4D001F7E01 /* MCONNTPFetchServerTimeOperation.h in CopyFiles */, - C6D4FD3319FA9EB3001F7E01 /* MCONNTPFetchOverviewOperation.h in CopyFiles */, C6D4FD3219FA9E8D001F7E01 /* MCNNTPFetchOverviewOperation.h in CopyFiles */, - 184805441BE751AF001B80AA /* MCOIMAPCustomCommandOperation.h in CopyFiles */, 18707E221BE24E0800B494C3 /* MCIMAPCustomCommandOperation.h in CopyFiles */, 84915BB8199C4B0400EDDED9 /* MCNNTP.h in CopyFiles */, - 84D7377C199C00F7005124E5 /* MCONNTP.h in CopyFiles */, 84D7374A199BFB92005124E5 /* MCAsyncNNTP.h in CopyFiles */, - 84D73784199C0114005124E5 /* MCONNTPOperation.h in CopyFiles */, - 84D7377D199C00FE005124E5 /* MCONNTPSession.h in CopyFiles */, 4B3C1BE417AC0156008BBF4C /* MCIMAPQuotaOperation.h in CopyFiles */, 84E65534199BE2BF00EC8CC4 /* MCNNTPGroupInfo.h in CopyFiles */, - 84D73785199C0117005124E5 /* MCONNTPFetchHeaderOperation.h in CopyFiles */, 84D73739199BF81A005124E5 /* MCNNTPOperation.h in CopyFiles */, - 84D73787199C011A005124E5 /* MCONNTPFetchAllArticlesOperation.h in CopyFiles */, - 84391343199C3AAA00FEFCDD /* MCONNTPListNewsgroupsOperation.h in CopyFiles */, - 84D73786199C0118005124E5 /* MCONNTPFetchArticleOperation.h in CopyFiles */, - 84391347199C3ABD00FEFCDD /* MCONNTPGroupInfo.h in CopyFiles */, 84D73749199BFACF005124E5 /* MCNNTPAsyncSession.h in CopyFiles */, - 4B3C1BE217ABFF7C008BBF4C /* MCOIMAPQuotaOperation.h in CopyFiles */, 84D7374E199BFBBA005124E5 /* MCNNTPFetchHeaderOperation.h in CopyFiles */, 84D7375E199BFF34005124E5 /* MCNNTPListNewsgroupsOperation.h in CopyFiles */, - C63D316717C997BA00A4D993 /* MCOIMAPIdentity.h in CopyFiles */, 84D7374D199BFB9F005124E5 /* MCNNTPFetchArticleOperation.h in CopyFiles */, - DAE42E8A178F7E2200E0DB8F /* MCOIMAPMessageRenderingOperation.h in CopyFiles */, C6E6652F1791B2530063F2CF /* MCIMAPMessageRenderingOperation.h in CopyFiles */, 84D73751199BFBDF005124E5 /* MCNNTPFetchAllArticlesOperation.h in CopyFiles */, 9E774D8B1767CD3C0065EB9B /* MCIMAPFolderStatus.h in CopyFiles */, 84D73755199BFBF2005124E5 /* MCNNTPOperationCallback.h in CopyFiles */, 9EF9AB25175F40C70027FA3B /* MCIMAPFolderStatusOperation.h in CopyFiles */, - 9EF9AB20175F3FD10027FA3B /* MCOIMAPFolderStatus.h in CopyFiles */, - 9EF9AB21175F3FD10027FA3B /* MCOIMAPFolderStatusOperation.h in CopyFiles */, - C6CF62D5175325BB006398B9 /* MCOMailProvider.h in CopyFiles */, - C6CF62D6175325BD006398B9 /* MCOMailProvidersManager.h in CopyFiles */, C63D315F17C9279D00A4D993 /* MCIMAPIdentity.h in CopyFiles */, 84D73734199BF7A9005124E5 /* MCNNTPProgressCallback.h in CopyFiles */, - C6CF62D7175325BF006398B9 /* MCONetService.h in CopyFiles */, - C6CF62D8175325C5006398B9 /* MCOProvider.h in CopyFiles */, C68B2AEF1778A869005E61EF /* MCConnectionLogger.h in CopyFiles */, C6CF62D9175325CC006398B9 /* MCMailProvider.h in CopyFiles */, C6AC113517124D0A00B715B7 /* MCLibetpanTypes.h in CopyFiles */, C6BA2B0C1705F4E6003F0E9E /* MCHTMLRendererCallback.h in CopyFiles */, - C6BA2B0D1705F4E6003F0E9E /* MCOMultipart.h in CopyFiles */, - C6BA2B0E1705F4E6003F0E9E /* MCOMessageBuilder.h in CopyFiles */, C6D6F97117211177006F5B28 /* MCIterator.h in CopyFiles */, 84E65533199BE15500EC8CC4 /* MCNNTPSession.h in CopyFiles */, - C6A81BF1170780EC00882C15 /* MCOPOPSession.h in CopyFiles */, C6A81C04170A82F300882C15 /* MCIMAPSyncResult.h in CopyFiles */, - C6BA2B0F1705F4E6003F0E9E /* MCOIMAPBaseOperation.h in CopyFiles */, C6BA2B3E1705F4E6003F0E9E /* MCDateFormatter.h in CopyFiles */, - C6A81BF2170780F900882C15 /* MCOPOPOperation.h in CopyFiles */, C6D6F96A1720F92B006F5B28 /* MCICUTypes.h in CopyFiles */, - C6A81BF51707810C00882C15 /* MCOPOPFetchMessagesOperation.h in CopyFiles */, - C6A81BF41707810900882C15 /* MCOPOPFetchMessageOperation.h in CopyFiles */, - C6A81BF61707810E00882C15 /* MCOSMTP.h in CopyFiles */, - C6BA2B101705F4E6003F0E9E /* MCORFC822.h in CopyFiles */, - C6A81BFD1707822200882C15 /* MCOPOP.h in CopyFiles */, C6CF62DA175325D5006398B9 /* MCMailProvidersManager.h in CopyFiles */, C6CF62DB175325E2006398B9 /* MCNetService.h in CopyFiles */, - C6A81BF91707811500882C15 /* MCOSMTPOperation.h in CopyFiles */, - C6A81BF81707811100882C15 /* MCOSMTPSendOperation.h in CopyFiles */, - C6BA2B111705F4E6003F0E9E /* MCOConstants.h in CopyFiles */, - C6A81BF71707811000882C15 /* MCOSMTPSession.h in CopyFiles */, - C6BA2B121705F4E6003F0E9E /* MCOAttachment.h in CopyFiles */, - C6BA2B131705F4E6003F0E9E /* MCOMessageParser.h in CopyFiles */, - C6BA2B141705F4E6003F0E9E /* MCOMessagePart.h in CopyFiles */, C6D6F95C171E5D65006F5B28 /* MCJSON.h in CopyFiles */, - C6BA2B151705F4E6003F0E9E /* MCOIMAPFolderInfoOperation.h in CopyFiles */, - C69BA85D17DEFD9A00D601B7 /* NSIndexSet+MCO.h in CopyFiles */, - C6BA2B161705F4E6003F0E9E /* MCOIMAPFetchMessagesOperation.h in CopyFiles */, - C6BA2B171705F4E6003F0E9E /* MCOIMAPCopyMessagesOperation.h in CopyFiles */, - 8568A41E1C61169A00FF4470 /* MCOIMAPMoveMessagesOperation.h in CopyFiles */, C6D6F95D171E5D67006F5B28 /* MCMD5.h in CopyFiles */, - C6BA2B181705F4E6003F0E9E /* MCOIMAPAppendMessageOperation.h in CopyFiles */, C6D6F95B171E5D63006F5B28 /* MCNull.h in CopyFiles */, - C6BA2B191705F4E6003F0E9E /* MCOIMAPSearchExpression.h in CopyFiles */, - C6BA2B1A1705F4E6003F0E9E /* MCOIMAPFetchContentOperation.h in CopyFiles */, - C6BA2B1B1705F4E6003F0E9E /* MCOIndexSet.h in CopyFiles */, - C6BA2B1C1705F4E6003F0E9E /* MCOIMAPFetchNamespaceOperation.h in CopyFiles */, - C6BA2B1D1705F4E6003F0E9E /* MCOIMAPIdleOperation.h in CopyFiles */, - C6BA2B1E1705F4E6003F0E9E /* MCOIMAPSearchOperation.h in CopyFiles */, - C6BA2B1F1705F4E6003F0E9E /* MCOIMAPIdentityOperation.h in CopyFiles */, - C6BA2B201705F4E6003F0E9E /* MCOIMAPMessagePart.h in CopyFiles */, - C6BA2B211705F4E6003F0E9E /* MCOIMAPCapabilityOperation.h in CopyFiles */, - C6BA2B221705F4E6003F0E9E /* MCOIMAPFolderInfo.h in CopyFiles */, - C6BA2B231705F4E6003F0E9E /* MCOOperation.h in CopyFiles */, - C6BA2B241705F4E6003F0E9E /* MCOIMAPNamespace.h in CopyFiles */, - C6BA2B251705F4E6003F0E9E /* MCOIMAPNamespaceItem.h in CopyFiles */, - C6BA2B261705F4E6003F0E9E /* MCORange.h in CopyFiles */, - C6BA2B271705F4E6003F0E9E /* MCOIMAPMultipart.h in CopyFiles */, - C6BA2B281705F4E6003F0E9E /* MCOHTMLRendererDelegate.h in CopyFiles */, - C6BA2B2A1705F4E6003F0E9E /* MCOHTMLRendererIMAPDelegate.h in CopyFiles */, C6CF62DC175325F0006398B9 /* MCProvider.h in CopyFiles */, - C6BA2B2B1705F4E6003F0E9E /* MCOIMAPPart.h in CopyFiles */, - C6BA2B2C1705F4E6003F0E9E /* MCOIMAPFetchFoldersOperation.h in CopyFiles */, - C6BA2B2D1705F4E6003F0E9E /* MCOIMAPFolder.h in CopyFiles */, - C6BA2B2E1705F4E6003F0E9E /* MCOIMAPOperation.h in CopyFiles */, - C6BA2B2F1705F4E6003F0E9E /* MCOIMAPMessage.h in CopyFiles */, - C6BA2B301705F4E6003F0E9E /* MCOUtils.h in CopyFiles */, C6BA2B311705F4E6003F0E9E /* MCAbstractMessage.h in CopyFiles */, - C6BA2B321705F4E6003F0E9E /* NSValue+MCO.h in CopyFiles */, C6BA2B331705F4E6003F0E9E /* MCAddressDisplay.h in CopyFiles */, C6BA2B341705F4E6003F0E9E /* MCRenderer.h in CopyFiles */, C6BA2B351705F4E6003F0E9E /* MCIndexSet.h in CopyFiles */, C6BA2B361705F4E6003F0E9E /* MCIMAPCapabilityOperation.h in CopyFiles */, C6BA2B371705F4E6003F0E9E /* MCAsyncIMAP.h in CopyFiles */, - C6BA2B3A1705F4E6003F0E9E /* MCOAddress.h in CopyFiles */, - C6BA2B3B1705F4E6003F0E9E /* MCOAbstractMessage.h in CopyFiles */, - C6BA2B3C1705F4E6003F0E9E /* MCOAbstract.h in CopyFiles */, - C6BA2B3D1705F4E6003F0E9E /* MCOAbstractMultipart.h in CopyFiles */, - C6BA2B3F1705F4E6003F0E9E /* MCOAbstractMessagePart.h in CopyFiles */, - C6BA2B401705F4E6003F0E9E /* MCOMessageHeader.h in CopyFiles */, - C6BA2B411705F4E6003F0E9E /* MCOAbstractPart.h in CopyFiles */, - C6BA2B421705F4E6003F0E9E /* MCObjC.h in CopyFiles */, - C6BA2B431705F4E6003F0E9E /* NSObject+MCO.h in CopyFiles */, - C6BA2B441705F4E6003F0E9E /* NSArray+MCO.h in CopyFiles */, - C6BA2B451705F4E6003F0E9E /* MCOObjectWrapper.h in CopyFiles */, - C6BA2B461705F4E6003F0E9E /* NSDictionary+MCO.h in CopyFiles */, C6BA2B471705F4E6003F0E9E /* MCAbstract.h in CopyFiles */, - C6BA2B481705F4E6003F0E9E /* NSData+MCO.h in CopyFiles */, - C6BA2B491705F4E6003F0E9E /* MCOIMAP.h in CopyFiles */, C6BA2B4A1705F4E6003F0E9E /* MCPOPFetchHeaderOperation.h in CopyFiles */, - C6BA2B4B1705F4E6003F0E9E /* NSString+MCO.h in CopyFiles */, C6BA2B4C1705F4E6003F0E9E /* MCIMAPFetchFoldersOperation.h in CopyFiles */, C6BA2B4D1705F4E6003F0E9E /* MCAsync.h in CopyFiles */, C6BA2B4E1705F4E6003F0E9E /* MCAbstractMessagePart.h in CopyFiles */, @@ -2387,12 +1913,10 @@ C6BA2B851705F4E6003F0E9E /* MCIMAPSession.h in CopyFiles */, C6BA2B861705F4E6003F0E9E /* MCPOP.h in CopyFiles */, C6BA2B871705F4E6003F0E9E /* MCPOPMessageInfo.h in CopyFiles */, - C6A81BF3170780FB00882C15 /* MCOPOPFetchHeaderOperation.h in CopyFiles */, C6BA2B881705F4E6003F0E9E /* MCPOPProgressCallback.h in CopyFiles */, C6BA2B891705F4E6003F0E9E /* MCPOPSession.h in CopyFiles */, C6BA2B8A1705F4E6003F0E9E /* MCPOPFetchMessagesOperation.h in CopyFiles */, C6BA2B8B1705F4E6003F0E9E /* MCAttachment.h in CopyFiles */, - C6A81C021707D96200882C15 /* MCOPOPMessageInfo.h in CopyFiles */, C6BA2B8C1705F4E6003F0E9E /* MCSMTPOperation.h in CopyFiles */, C6BA2B8D1705F4E6003F0E9E /* MCSMTPAsyncSession.h in CopyFiles */, C6BA2B8E1705F4E6003F0E9E /* MCMessageBuilder.h in CopyFiles */, @@ -2403,8 +1927,6 @@ C6BA2B931705F4E6003F0E9E /* MCSMTP.h in CopyFiles */, C6BA2B941705F4E6003F0E9E /* MCSMTPProgressCallback.h in CopyFiles */, C6BA2B951705F4E6003F0E9E /* MCSMTPSession.h in CopyFiles */, - C6BA2B961705F4E6003F0E9E /* MCOIMAPSession.h in CopyFiles */, - C6BA2B971705F4E6003F0E9E /* NSError+MCO.h in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2413,61 +1935,310 @@ /* Begin PBXFileReference section */ 1820E7D31BD403ED00835D1E /* MCIMAPCustomCommandOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCIMAPCustomCommandOperation.cpp; sourceTree = ""; }; 1820E7D41BD403ED00835D1E /* MCIMAPCustomCommandOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCIMAPCustomCommandOperation.h; sourceTree = ""; }; - 1845356E1BE23FBD000B0D87 /* MCOIMAPCustomCommandOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOIMAPCustomCommandOperation.h; sourceTree = ""; }; - 1845356F1BE23FBD000B0D87 /* MCOIMAPCustomCommandOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOIMAPCustomCommandOperation.mm; sourceTree = ""; }; 2744B1681A7A4637009E9E67 /* MCMXRecordResolverOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCMXRecordResolverOperation.cpp; sourceTree = ""; }; 2744B1691A7A4637009E9E67 /* MCMXRecordResolverOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCMXRecordResolverOperation.h; sourceTree = ""; }; 27478E7E1A764698004AE621 /* MCAccountValidator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCAccountValidator.cpp; sourceTree = ""; }; 27478E7F1A764698004AE621 /* MCAccountValidator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCAccountValidator.h; sourceTree = ""; }; - 27478E821A7646F8004AE621 /* MCOAccountValidator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOAccountValidator.h; sourceTree = ""; }; - 27478E831A7646F8004AE621 /* MCOAccountValidator.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOAccountValidator.mm; sourceTree = ""; }; 27780C3A19CF9CD100C77E44 /* MailCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MailCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 27780C3C19CF9D9800C77E44 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.0.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; 27780D3419CFA19500C77E44 /* libstdc++.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libstdc++.dylib"; path = "Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.0.sdk/usr/lib/libstdc++.dylib"; sourceTree = DEVELOPER_DIR; }; - 4B3C1BDC17ABF306008BBF4C /* MCOIMAPQuotaOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOIMAPQuotaOperation.h; sourceTree = ""; }; - 4B3C1BDD17ABF307008BBF4C /* MCOIMAPQuotaOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOIMAPQuotaOperation.mm; sourceTree = ""; }; 4B3C1BDF17ABF4BB008BBF4C /* MCIMAPQuotaOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCIMAPQuotaOperation.cpp; sourceTree = ""; }; 4B3C1BE017ABF4BC008BBF4C /* MCIMAPQuotaOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCIMAPQuotaOperation.h; sourceTree = ""; }; + 8029D8C51F96408900BF5BC4 /* NSObjectCompat.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = NSObjectCompat.swift; path = swift/utils/NSObjectCompat.swift; sourceTree = ""; }; 802A99211ECF837800FFF0AB /* MailCore.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MailCore.h; path = OSX/MailCore.h; sourceTree = ""; }; 802A99221ECF838D00FFF0AB /* MailCore.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MailCore.h; path = iOS/MailCore.h; sourceTree = ""; }; 810DB78B1C68F4E200017B12 /* MCIMAPFetchContentToFileOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCIMAPFetchContentToFileOperation.cpp; sourceTree = ""; }; 810DB78C1C68F4E200017B12 /* MCIMAPFetchContentToFileOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCIMAPFetchContentToFileOperation.h; sourceTree = ""; }; - 810DB78F1C68F50600017B12 /* MCOIMAPFetchContentToFileOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOIMAPFetchContentToFileOperation.h; sourceTree = ""; }; - 810DB7901C68F50600017B12 /* MCOIMAPFetchContentToFileOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOIMAPFetchContentToFileOperation.mm; sourceTree = ""; }; 811320AD1D0235F5004B7ECF /* MCDataDecoderUtils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MCDataDecoderUtils.h; sourceTree = ""; }; 811320AE1D02388A004B7ECF /* MCDataDecoderUtils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCDataDecoderUtils.cpp; sourceTree = ""; }; 81416BDC1CF8BB17000A4299 /* MCDataStreamDecoder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCDataStreamDecoder.cpp; sourceTree = ""; }; 81416BDD1CF8BB17000A4299 /* MCDataStreamDecoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCDataStreamDecoder.h; sourceTree = ""; }; - 8199FBE719FAEA440040BBC3 /* MCOIMAPFetchParsedContentOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOIMAPFetchParsedContentOperation.h; sourceTree = ""; }; - 8199FBE819FAEA440040BBC3 /* MCOIMAPFetchParsedContentOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOIMAPFetchParsedContentOperation.mm; sourceTree = ""; }; 8199FBEF19FAF1270040BBC3 /* MCIMAPFetchParsedContentOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCIMAPFetchParsedContentOperation.cpp; sourceTree = ""; }; 8199FBF019FAF1270040BBC3 /* MCIMAPFetchParsedContentOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCIMAPFetchParsedContentOperation.h; sourceTree = ""; }; - 8416A99B17F284F400B3C7DA /* MCOSMTPNoopOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOSMTPNoopOperation.h; sourceTree = ""; }; - 8416A99C17F284F400B3C7DA /* MCOSMTPNoopOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOSMTPNoopOperation.mm; sourceTree = ""; }; - 8416A99F17F2871D00B3C7DA /* MCOIMAPNoopOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOIMAPNoopOperation.h; sourceTree = ""; }; - 8416A9A017F2871D00B3C7DA /* MCOIMAPNoopOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOIMAPNoopOperation.mm; sourceTree = ""; }; + 8408C6DE1F26345C0003A816 /* MCOIndexSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MCOIndexSet.h; path = objc/utils/MCOIndexSet.h; sourceTree = ""; }; + 8408C6DF1F26345C0003A816 /* MCOIndexSet.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOIndexSet.mm; path = objc/utils/MCOIndexSet.mm; sourceTree = ""; }; + 8408C6E01F26345C0003A816 /* MCOIndexSet+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "MCOIndexSet+Private.h"; path = "objc/utils/MCOIndexSet+Private.h"; sourceTree = ""; }; + 8408C6E11F26345C0003A816 /* MCORange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MCORange.h; path = objc/utils/MCORange.h; sourceTree = ""; }; + 8408C6E21F26345C0003A816 /* MCORange.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MCORange.mm; path = objc/utils/MCORange.mm; sourceTree = ""; }; + 8408C6E31F26345C0003A816 /* NSArray+MCO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSArray+MCO.h"; path = "objc/utils/NSArray+MCO.h"; sourceTree = ""; }; + 8408C6E41F26345C0003A816 /* NSArray+MCO.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = "NSArray+MCO.mm"; path = "objc/utils/NSArray+MCO.mm"; sourceTree = ""; }; + 8408C6E51F26345C0003A816 /* NSData+MCO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSData+MCO.h"; path = "objc/utils/NSData+MCO.h"; sourceTree = ""; }; + 8408C6E61F26345C0003A816 /* NSData+MCO.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = "NSData+MCO.mm"; path = "objc/utils/NSData+MCO.mm"; sourceTree = ""; }; + 8408C6E71F26345C0003A816 /* NSDictionary+MCO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSDictionary+MCO.h"; path = "objc/utils/NSDictionary+MCO.h"; sourceTree = ""; }; + 8408C6E81F26345C0003A816 /* NSDictionary+MCO.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = "NSDictionary+MCO.mm"; path = "objc/utils/NSDictionary+MCO.mm"; sourceTree = ""; }; + 8408C6E91F26345C0003A816 /* NSError+MCO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSError+MCO.h"; path = "objc/utils/NSError+MCO.h"; sourceTree = ""; }; + 8408C6EA1F26345C0003A816 /* NSError+MCO.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = "NSError+MCO.mm"; path = "objc/utils/NSError+MCO.mm"; sourceTree = ""; }; + 8408C6EB1F26345C0003A816 /* NSIndexSet+MCO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSIndexSet+MCO.h"; path = "objc/utils/NSIndexSet+MCO.h"; sourceTree = ""; }; + 8408C6EC1F26345C0003A816 /* NSIndexSet+MCO.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSIndexSet+MCO.m"; path = "objc/utils/NSIndexSet+MCO.m"; sourceTree = ""; }; + 8408C6ED1F26345C0003A816 /* NSObject+MCO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSObject+MCO.h"; path = "objc/utils/NSObject+MCO.h"; sourceTree = ""; }; + 8408C6EE1F26345C0003A816 /* NSObject+MCO.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = "NSObject+MCO.mm"; path = "objc/utils/NSObject+MCO.mm"; sourceTree = ""; }; + 8408C6EF1F26345C0003A816 /* NSSet+MCO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSSet+MCO.h"; path = "objc/utils/NSSet+MCO.h"; sourceTree = ""; }; + 8408C6F01F26345C0003A816 /* NSSet+MCO.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = "NSSet+MCO.mm"; path = "objc/utils/NSSet+MCO.mm"; sourceTree = ""; }; + 8408C6F11F26345C0003A816 /* NSString+MCO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSString+MCO.h"; path = "objc/utils/NSString+MCO.h"; sourceTree = ""; }; + 8408C6F21F26345C0003A816 /* NSString+MCO.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = "NSString+MCO.mm"; path = "objc/utils/NSString+MCO.mm"; sourceTree = ""; }; + 8408C6F31F26345C0003A816 /* NSValue+MCO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSValue+MCO.h"; path = "objc/utils/NSValue+MCO.h"; sourceTree = ""; }; + 8408C6F41F26345C0003A816 /* NSValue+MCO.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = "NSValue+MCO.mm"; path = "objc/utils/NSValue+MCO.mm"; sourceTree = ""; }; + 8408C7F81F26378D0003A816 /* CAttachment.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CAttachment.cpp; path = c/rfc822/CAttachment.cpp; sourceTree = ""; }; + 8408C7F91F26378D0003A816 /* CAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CAttachment.h; path = c/rfc822/CAttachment.h; sourceTree = ""; }; + 8408C7FA1F26378D0003A816 /* CMessageBuilder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CMessageBuilder.cpp; path = c/rfc822/CMessageBuilder.cpp; sourceTree = ""; }; + 8408C7FB1F26378D0003A816 /* CMessageBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = CMessageBuilder.h; path = c/rfc822/CMessageBuilder.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 8408C7FC1F26378D0003A816 /* CMessageParser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CMessageParser.cpp; path = c/rfc822/CMessageParser.cpp; sourceTree = ""; }; + 8408C7FD1F26378D0003A816 /* CMessageParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = CMessageParser.h; path = c/rfc822/CMessageParser.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 8408C80B1F2637B50003A816 /* Attachment.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Attachment.swift; path = swift/rfc822/Attachment.swift; sourceTree = ""; }; + 8408C80C1F2637B50003A816 /* MessageBuilder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MessageBuilder.swift; path = swift/rfc822/MessageBuilder.swift; sourceTree = ""; }; + 8408C80D1F2637B50003A816 /* MessageParser.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MessageParser.swift; path = swift/rfc822/MessageParser.swift; sourceTree = ""; }; + 840CB4501F274AD60068E8E6 /* CIMAPSearchOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CIMAPSearchOperation.cpp; path = c/imap/CIMAPSearchOperation.cpp; sourceTree = ""; }; + 840CB4511F274AD60068E8E6 /* CIMAPSearchOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = CIMAPSearchOperation.h; path = c/imap/CIMAPSearchOperation.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 841E64FA1F683440007BB736 /* MailCoreTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MailCoreTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 841E64FE1F683440007BB736 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 841E65051F683481007BB736 /* data */ = {isa = PBXFileReference; lastKnownFileType = folder; name = data; path = ../../unittest/data; sourceTree = ""; }; + 841E65061F68348B007BB736 /* unittest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = unittest.swift; path = ../../unittest/unittest.swift; sourceTree = ""; }; + 842D79991DF801AE00F9424C /* CIMAPFetchParsedContentOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CIMAPFetchParsedContentOperation.cpp; path = c/imap/CIMAPFetchParsedContentOperation.cpp; sourceTree = ""; }; + 842D799A1DF801AE00F9424C /* CIMAPFetchParsedContentOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = CIMAPFetchParsedContentOperation.h; path = c/imap/CIMAPFetchParsedContentOperation.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 842D799D1DF8033100F9424C /* CIMAPMessageRenderingOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CIMAPMessageRenderingOperation.cpp; path = c/imap/CIMAPMessageRenderingOperation.cpp; sourceTree = ""; }; + 842D799E1DF8033100F9424C /* CIMAPMessageRenderingOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = CIMAPMessageRenderingOperation.h; path = c/imap/CIMAPMessageRenderingOperation.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 842D79A11DF8049D00F9424C /* CIMAPMoveMessagesOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CIMAPMoveMessagesOperation.cpp; path = c/imap/CIMAPMoveMessagesOperation.cpp; sourceTree = ""; }; + 842D79A21DF8049D00F9424C /* CIMAPMoveMessagesOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = CIMAPMoveMessagesOperation.h; path = c/imap/CIMAPMoveMessagesOperation.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 842D79A51DF8080200F9424C /* CIMAPQuotaOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CIMAPQuotaOperation.cpp; path = c/imap/CIMAPQuotaOperation.cpp; sourceTree = ""; }; + 842D79A61DF8080200F9424C /* CIMAPQuotaOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = CIMAPQuotaOperation.h; path = c/imap/CIMAPQuotaOperation.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 842D79A91DF80C7E00F9424C /* IMAPFetchParsedContentOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = IMAPFetchParsedContentOperation.swift; path = swift/imap/IMAPFetchParsedContentOperation.swift; sourceTree = ""; }; + 842D79AB1DF817B300F9424C /* IMAPMessageRenderingOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = IMAPMessageRenderingOperation.swift; path = swift/imap/IMAPMessageRenderingOperation.swift; sourceTree = ""; }; + 842D79AD1DF81EDF00F9424C /* IMAPMoveMessagesOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = IMAPMoveMessagesOperation.swift; path = swift/imap/IMAPMoveMessagesOperation.swift; sourceTree = ""; }; + 842D79B11DF81FA800F9424C /* IMAPQuotaOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = IMAPQuotaOperation.swift; path = swift/imap/IMAPQuotaOperation.swift; sourceTree = ""; }; + 842D79B31DF876B600F9424C /* CIMAPIdentity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CIMAPIdentity.cpp; path = c/imap/CIMAPIdentity.cpp; sourceTree = ""; }; + 842D79B41DF876B600F9424C /* CIMAPIdentity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = CIMAPIdentity.h; path = c/imap/CIMAPIdentity.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 842D79B71DF87A2B00F9424C /* IMAPIdentity.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = IMAPIdentity.swift; path = swift/imap/IMAPIdentity.swift; sourceTree = ""; }; + 842D79B91DF881A000F9424C /* CIMAPIdentityOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CIMAPIdentityOperation.cpp; path = c/imap/CIMAPIdentityOperation.cpp; sourceTree = ""; }; + 842D79BA1DF881A000F9424C /* CIMAPIdentityOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = CIMAPIdentityOperation.h; path = c/imap/CIMAPIdentityOperation.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 842D79BD1DF882A100F9424C /* IMAPIdentityOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = IMAPIdentityOperation.swift; path = swift/imap/IMAPIdentityOperation.swift; sourceTree = ""; }; + 843AFCD31D9579F30086FB46 /* AbstractMessage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = AbstractMessage.swift; path = swift/abstract/AbstractMessage.swift; sourceTree = ""; }; + 843AFCD41D9579F30086FB46 /* AbstractMessagePart.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = AbstractMessagePart.swift; path = swift/abstract/AbstractMessagePart.swift; sourceTree = ""; }; + 843AFCD51D9579F30086FB46 /* AbstractMultipart.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = AbstractMultipart.swift; path = swift/abstract/AbstractMultipart.swift; sourceTree = ""; }; + 843AFCD61D9579F30086FB46 /* AbstractPart.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = AbstractPart.swift; path = swift/abstract/AbstractPart.swift; sourceTree = ""; }; + 843AFCD71D9579F30086FB46 /* Address.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Address.swift; path = swift/abstract/Address.swift; sourceTree = ""; }; + 843AFCD81D9579F30086FB46 /* MessageHeader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MessageHeader.swift; path = swift/abstract/MessageHeader.swift; sourceTree = ""; }; + 843E49FB1F2F9A4700D78022 /* ConnectionLoggerHelper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ConnectionLoggerHelper.swift; path = swift/utils/ConnectionLoggerHelper.swift; sourceTree = ""; }; + 843E4A081F306D5100D78022 /* MCOAbstract.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOAbstract.h; path = objc/abstract/MCOAbstract.h; sourceTree = ""; }; + 843E4A091F306D5100D78022 /* MCOAbstractMessage.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOAbstractMessage.h; path = objc/abstract/MCOAbstractMessage.h; sourceTree = ""; }; + 843E4A0A1F306D5100D78022 /* MCOAbstractMessage.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOAbstractMessage.mm; path = objc/abstract/MCOAbstractMessage.mm; sourceTree = ""; }; + 843E4A0B1F306D5100D78022 /* MCOAbstractMessagePart.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOAbstractMessagePart.h; path = objc/abstract/MCOAbstractMessagePart.h; sourceTree = ""; }; + 843E4A0C1F306D5100D78022 /* MCOAbstractMessagePart.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOAbstractMessagePart.mm; path = objc/abstract/MCOAbstractMessagePart.mm; sourceTree = ""; }; + 843E4A0D1F306D5100D78022 /* MCOAbstractMessageRendererCallback.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOAbstractMessageRendererCallback.h; path = objc/abstract/MCOAbstractMessageRendererCallback.h; sourceTree = ""; }; + 843E4A0E1F306D5100D78022 /* MCOAbstractMessageRendererCallback.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOAbstractMessageRendererCallback.mm; path = objc/abstract/MCOAbstractMessageRendererCallback.mm; sourceTree = ""; }; + 843E4A0F1F306D5100D78022 /* MCOAbstractMultipart.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOAbstractMultipart.h; path = objc/abstract/MCOAbstractMultipart.h; sourceTree = ""; }; + 843E4A101F306D5100D78022 /* MCOAbstractMultipart.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOAbstractMultipart.mm; path = objc/abstract/MCOAbstractMultipart.mm; sourceTree = ""; }; + 843E4A111F306D5100D78022 /* MCOAbstractPart.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOAbstractPart.h; path = objc/abstract/MCOAbstractPart.h; sourceTree = ""; }; + 843E4A121F306D5100D78022 /* MCOAbstractPart.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOAbstractPart.mm; path = objc/abstract/MCOAbstractPart.mm; sourceTree = ""; }; + 843E4A131F306D5100D78022 /* MCOAddress.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOAddress.h; path = objc/abstract/MCOAddress.h; sourceTree = ""; }; + 843E4A141F306D5100D78022 /* MCOAddress.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOAddress.mm; path = objc/abstract/MCOAddress.mm; sourceTree = ""; }; + 843E4A151F306D5100D78022 /* MCOAddress+Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "MCOAddress+Private.h"; path = "objc/abstract/MCOAddress+Private.h"; sourceTree = ""; }; + 843E4A161F306D5100D78022 /* MCOConstants.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOConstants.h; path = objc/abstract/MCOConstants.h; sourceTree = ""; }; + 843E4A171F306D5100D78022 /* MCOHTMLRendererDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOHTMLRendererDelegate.h; path = objc/abstract/MCOHTMLRendererDelegate.h; sourceTree = ""; }; + 843E4A181F306D5100D78022 /* MCOHTMLRendererIMAPDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOHTMLRendererIMAPDelegate.h; path = objc/abstract/MCOHTMLRendererIMAPDelegate.h; sourceTree = ""; }; + 843E4A191F306D5100D78022 /* MCOMessageHeader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOMessageHeader.h; path = objc/abstract/MCOMessageHeader.h; sourceTree = ""; }; + 843E4A1A1F306D5100D78022 /* MCOMessageHeader.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOMessageHeader.mm; path = objc/abstract/MCOMessageHeader.mm; sourceTree = ""; }; + 843E4A1B1F306D5100D78022 /* MCOMessageHeader+Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "MCOMessageHeader+Private.h"; path = "objc/abstract/MCOMessageHeader+Private.h"; sourceTree = ""; }; + 843E4A1D1F306D6F00D78022 /* MCOIMAP.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOIMAP.h; path = objc/imap/MCOIMAP.h; sourceTree = ""; }; + 843E4A1E1F306D6F00D78022 /* MCOIMAPAppendMessageOperation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOIMAPAppendMessageOperation.h; path = objc/imap/MCOIMAPAppendMessageOperation.h; sourceTree = ""; }; + 843E4A1F1F306D6F00D78022 /* MCOIMAPAppendMessageOperation.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOIMAPAppendMessageOperation.mm; path = objc/imap/MCOIMAPAppendMessageOperation.mm; sourceTree = ""; }; + 843E4A201F306D6F00D78022 /* MCOIMAPBaseOperation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOIMAPBaseOperation.h; path = objc/imap/MCOIMAPBaseOperation.h; sourceTree = ""; }; + 843E4A211F306D6F00D78022 /* MCOIMAPBaseOperation.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOIMAPBaseOperation.mm; path = objc/imap/MCOIMAPBaseOperation.mm; sourceTree = ""; }; + 843E4A221F306D6F00D78022 /* MCOIMAPBaseOperation+Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "MCOIMAPBaseOperation+Private.h"; path = "objc/imap/MCOIMAPBaseOperation+Private.h"; sourceTree = ""; }; + 843E4A231F306D6F00D78022 /* MCOIMAPCapabilityOperation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOIMAPCapabilityOperation.h; path = objc/imap/MCOIMAPCapabilityOperation.h; sourceTree = ""; }; + 843E4A241F306D6F00D78022 /* MCOIMAPCapabilityOperation.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOIMAPCapabilityOperation.mm; path = objc/imap/MCOIMAPCapabilityOperation.mm; sourceTree = ""; }; + 843E4A251F306D6F00D78022 /* MCOIMAPCheckAccountOperation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOIMAPCheckAccountOperation.h; path = objc/imap/MCOIMAPCheckAccountOperation.h; sourceTree = ""; }; + 843E4A261F306D6F00D78022 /* MCOIMAPCheckAccountOperation.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOIMAPCheckAccountOperation.mm; path = objc/imap/MCOIMAPCheckAccountOperation.mm; sourceTree = ""; }; + 843E4A271F306D6F00D78022 /* MCOIMAPCopyMessagesOperation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOIMAPCopyMessagesOperation.h; path = objc/imap/MCOIMAPCopyMessagesOperation.h; sourceTree = ""; }; + 843E4A281F306D6F00D78022 /* MCOIMAPCopyMessagesOperation.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOIMAPCopyMessagesOperation.mm; path = objc/imap/MCOIMAPCopyMessagesOperation.mm; sourceTree = ""; }; + 843E4A291F306D6F00D78022 /* MCOIMAPCustomCommandOperation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOIMAPCustomCommandOperation.h; path = objc/imap/MCOIMAPCustomCommandOperation.h; sourceTree = ""; }; + 843E4A2A1F306D6F00D78022 /* MCOIMAPCustomCommandOperation.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOIMAPCustomCommandOperation.mm; path = objc/imap/MCOIMAPCustomCommandOperation.mm; sourceTree = ""; }; + 843E4A2B1F306D6F00D78022 /* MCOIMAPFetchContentOperation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOIMAPFetchContentOperation.h; path = objc/imap/MCOIMAPFetchContentOperation.h; sourceTree = ""; }; + 843E4A2C1F306D6F00D78022 /* MCOIMAPFetchContentOperation.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOIMAPFetchContentOperation.mm; path = objc/imap/MCOIMAPFetchContentOperation.mm; sourceTree = ""; }; + 843E4A2D1F306D6F00D78022 /* MCOIMAPFetchContentToFileOperation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOIMAPFetchContentToFileOperation.h; path = objc/imap/MCOIMAPFetchContentToFileOperation.h; sourceTree = ""; }; + 843E4A2E1F306D6F00D78022 /* MCOIMAPFetchContentToFileOperation.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOIMAPFetchContentToFileOperation.mm; path = objc/imap/MCOIMAPFetchContentToFileOperation.mm; sourceTree = ""; }; + 843E4A2F1F306D6F00D78022 /* MCOIMAPFetchFoldersOperation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOIMAPFetchFoldersOperation.h; path = objc/imap/MCOIMAPFetchFoldersOperation.h; sourceTree = ""; }; + 843E4A301F306D6F00D78022 /* MCOIMAPFetchFoldersOperation.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOIMAPFetchFoldersOperation.mm; path = objc/imap/MCOIMAPFetchFoldersOperation.mm; sourceTree = ""; }; + 843E4A311F306D6F00D78022 /* MCOIMAPFetchMessagesOperation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOIMAPFetchMessagesOperation.h; path = objc/imap/MCOIMAPFetchMessagesOperation.h; sourceTree = ""; }; + 843E4A321F306D6F00D78022 /* MCOIMAPFetchMessagesOperation.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOIMAPFetchMessagesOperation.mm; path = objc/imap/MCOIMAPFetchMessagesOperation.mm; sourceTree = ""; }; + 843E4A331F306D6F00D78022 /* MCOIMAPFetchNamespaceOperation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOIMAPFetchNamespaceOperation.h; path = objc/imap/MCOIMAPFetchNamespaceOperation.h; sourceTree = ""; }; + 843E4A341F306D6F00D78022 /* MCOIMAPFetchNamespaceOperation.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOIMAPFetchNamespaceOperation.mm; path = objc/imap/MCOIMAPFetchNamespaceOperation.mm; sourceTree = ""; }; + 843E4A351F306D6F00D78022 /* MCOIMAPFetchParsedContentOperation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOIMAPFetchParsedContentOperation.h; path = objc/imap/MCOIMAPFetchParsedContentOperation.h; sourceTree = ""; }; + 843E4A361F306D6F00D78022 /* MCOIMAPFetchParsedContentOperation.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOIMAPFetchParsedContentOperation.mm; path = objc/imap/MCOIMAPFetchParsedContentOperation.mm; sourceTree = ""; }; + 843E4A371F306D6F00D78022 /* MCOIMAPFolder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOIMAPFolder.h; path = objc/imap/MCOIMAPFolder.h; sourceTree = ""; }; + 843E4A381F306D6F00D78022 /* MCOIMAPFolder.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOIMAPFolder.mm; path = objc/imap/MCOIMAPFolder.mm; sourceTree = ""; }; + 843E4A391F306D6F00D78022 /* MCOIMAPFolderInfo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOIMAPFolderInfo.h; path = objc/imap/MCOIMAPFolderInfo.h; sourceTree = ""; }; + 843E4A3A1F306D6F00D78022 /* MCOIMAPFolderInfo.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOIMAPFolderInfo.mm; path = objc/imap/MCOIMAPFolderInfo.mm; sourceTree = ""; }; + 843E4A3B1F306D6F00D78022 /* MCOIMAPFolderInfoOperation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOIMAPFolderInfoOperation.h; path = objc/imap/MCOIMAPFolderInfoOperation.h; sourceTree = ""; }; + 843E4A3C1F306D6F00D78022 /* MCOIMAPFolderInfoOperation.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOIMAPFolderInfoOperation.mm; path = objc/imap/MCOIMAPFolderInfoOperation.mm; sourceTree = ""; }; + 843E4A3D1F306D6F00D78022 /* MCOIMAPFolderStatus.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOIMAPFolderStatus.h; path = objc/imap/MCOIMAPFolderStatus.h; sourceTree = ""; }; + 843E4A3E1F306D6F00D78022 /* MCOIMAPFolderStatus.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOIMAPFolderStatus.mm; path = objc/imap/MCOIMAPFolderStatus.mm; sourceTree = ""; }; + 843E4A3F1F306D6F00D78022 /* MCOIMAPFolderStatusOperation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOIMAPFolderStatusOperation.h; path = objc/imap/MCOIMAPFolderStatusOperation.h; sourceTree = ""; }; + 843E4A401F306D6F00D78022 /* MCOIMAPFolderStatusOperation.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOIMAPFolderStatusOperation.mm; path = objc/imap/MCOIMAPFolderStatusOperation.mm; sourceTree = ""; }; + 843E4A411F306D6F00D78022 /* MCOIMAPIdentity.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOIMAPIdentity.h; path = objc/imap/MCOIMAPIdentity.h; sourceTree = ""; }; + 843E4A421F306D6F00D78022 /* MCOIMAPIdentity.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOIMAPIdentity.mm; path = objc/imap/MCOIMAPIdentity.mm; sourceTree = ""; }; + 843E4A431F306D6F00D78022 /* MCOIMAPIdentityOperation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOIMAPIdentityOperation.h; path = objc/imap/MCOIMAPIdentityOperation.h; sourceTree = ""; }; + 843E4A441F306D6F00D78022 /* MCOIMAPIdentityOperation.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOIMAPIdentityOperation.mm; path = objc/imap/MCOIMAPIdentityOperation.mm; sourceTree = ""; }; + 843E4A451F306D6F00D78022 /* MCOIMAPIdleOperation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOIMAPIdleOperation.h; path = objc/imap/MCOIMAPIdleOperation.h; sourceTree = ""; }; + 843E4A461F306D6F00D78022 /* MCOIMAPIdleOperation.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOIMAPIdleOperation.mm; path = objc/imap/MCOIMAPIdleOperation.mm; sourceTree = ""; }; + 843E4A471F306D6F00D78022 /* MCOIMAPMessage.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOIMAPMessage.h; path = objc/imap/MCOIMAPMessage.h; sourceTree = ""; }; + 843E4A481F306D6F00D78022 /* MCOIMAPMessage.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOIMAPMessage.mm; path = objc/imap/MCOIMAPMessage.mm; sourceTree = ""; }; + 843E4A491F306D6F00D78022 /* MCOIMAPMessagePart.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOIMAPMessagePart.h; path = objc/imap/MCOIMAPMessagePart.h; sourceTree = ""; }; + 843E4A4A1F306D6F00D78022 /* MCOIMAPMessagePart.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOIMAPMessagePart.mm; path = objc/imap/MCOIMAPMessagePart.mm; sourceTree = ""; }; + 843E4A4B1F306D6F00D78022 /* MCOIMAPMessageRenderingOperation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOIMAPMessageRenderingOperation.h; path = objc/imap/MCOIMAPMessageRenderingOperation.h; sourceTree = ""; }; + 843E4A4C1F306D6F00D78022 /* MCOIMAPMessageRenderingOperation.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOIMAPMessageRenderingOperation.mm; path = objc/imap/MCOIMAPMessageRenderingOperation.mm; sourceTree = ""; }; + 843E4A4D1F306D6F00D78022 /* MCOIMAPMoveMessagesOperation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOIMAPMoveMessagesOperation.h; path = objc/imap/MCOIMAPMoveMessagesOperation.h; sourceTree = ""; }; + 843E4A4E1F306D6F00D78022 /* MCOIMAPMoveMessagesOperation.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOIMAPMoveMessagesOperation.mm; path = objc/imap/MCOIMAPMoveMessagesOperation.mm; sourceTree = ""; }; + 843E4A4F1F306D6F00D78022 /* MCOIMAPMultiDisconnectOperation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOIMAPMultiDisconnectOperation.h; path = objc/imap/MCOIMAPMultiDisconnectOperation.h; sourceTree = ""; }; + 843E4A501F306D6F00D78022 /* MCOIMAPMultiDisconnectOperation.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOIMAPMultiDisconnectOperation.mm; path = objc/imap/MCOIMAPMultiDisconnectOperation.mm; sourceTree = ""; }; + 843E4A511F306D6F00D78022 /* MCOIMAPMultipart.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOIMAPMultipart.h; path = objc/imap/MCOIMAPMultipart.h; sourceTree = ""; }; + 843E4A521F306D6F00D78022 /* MCOIMAPMultipart.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOIMAPMultipart.mm; path = objc/imap/MCOIMAPMultipart.mm; sourceTree = ""; }; + 843E4A531F306D6F00D78022 /* MCOIMAPNamespace.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOIMAPNamespace.h; path = objc/imap/MCOIMAPNamespace.h; sourceTree = ""; }; + 843E4A541F306D6F00D78022 /* MCOIMAPNamespace.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOIMAPNamespace.mm; path = objc/imap/MCOIMAPNamespace.mm; sourceTree = ""; }; + 843E4A551F306D6F00D78022 /* MCOIMAPNamespaceItem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOIMAPNamespaceItem.h; path = objc/imap/MCOIMAPNamespaceItem.h; sourceTree = ""; }; + 843E4A561F306D6F00D78022 /* MCOIMAPNamespaceItem.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOIMAPNamespaceItem.mm; path = objc/imap/MCOIMAPNamespaceItem.mm; sourceTree = ""; }; + 843E4A571F306D6F00D78022 /* MCOIMAPNoopOperation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOIMAPNoopOperation.h; path = objc/imap/MCOIMAPNoopOperation.h; sourceTree = ""; }; + 843E4A581F306D6F00D78022 /* MCOIMAPNoopOperation.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOIMAPNoopOperation.mm; path = objc/imap/MCOIMAPNoopOperation.mm; sourceTree = ""; }; + 843E4A591F306D6F00D78022 /* MCOIMAPOperation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOIMAPOperation.h; path = objc/imap/MCOIMAPOperation.h; sourceTree = ""; }; + 843E4A5A1F306D6F00D78022 /* MCOIMAPOperation.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOIMAPOperation.mm; path = objc/imap/MCOIMAPOperation.mm; sourceTree = ""; }; + 843E4A5B1F306D6F00D78022 /* MCOIMAPPart.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOIMAPPart.h; path = objc/imap/MCOIMAPPart.h; sourceTree = ""; }; + 843E4A5C1F306D6F00D78022 /* MCOIMAPPart.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOIMAPPart.mm; path = objc/imap/MCOIMAPPart.mm; sourceTree = ""; }; + 843E4A5D1F306D6F00D78022 /* MCOIMAPQuotaOperation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOIMAPQuotaOperation.h; path = objc/imap/MCOIMAPQuotaOperation.h; sourceTree = ""; }; + 843E4A5E1F306D6F00D78022 /* MCOIMAPQuotaOperation.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOIMAPQuotaOperation.mm; path = objc/imap/MCOIMAPQuotaOperation.mm; sourceTree = ""; }; + 843E4A5F1F306D6F00D78022 /* MCOIMAPSearchExpression.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOIMAPSearchExpression.h; path = objc/imap/MCOIMAPSearchExpression.h; sourceTree = ""; }; + 843E4A601F306D6F00D78022 /* MCOIMAPSearchExpression.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOIMAPSearchExpression.mm; path = objc/imap/MCOIMAPSearchExpression.mm; sourceTree = ""; }; + 843E4A611F306D6F00D78022 /* MCOIMAPSearchOperation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOIMAPSearchOperation.h; path = objc/imap/MCOIMAPSearchOperation.h; sourceTree = ""; }; + 843E4A621F306D6F00D78022 /* MCOIMAPSearchOperation.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOIMAPSearchOperation.mm; path = objc/imap/MCOIMAPSearchOperation.mm; sourceTree = ""; }; + 843E4A631F306D6F00D78022 /* MCOIMAPSession.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOIMAPSession.h; path = objc/imap/MCOIMAPSession.h; sourceTree = ""; }; + 843E4A641F306D6F00D78022 /* MCOIMAPSession.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOIMAPSession.mm; path = objc/imap/MCOIMAPSession.mm; sourceTree = ""; }; + 843E4A661F306D8D00D78022 /* MCOAccountValidator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOAccountValidator.h; path = objc/provider/MCOAccountValidator.h; sourceTree = ""; }; + 843E4A671F306D8D00D78022 /* MCOAccountValidator.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOAccountValidator.mm; path = objc/provider/MCOAccountValidator.mm; sourceTree = ""; }; + 843E4A681F306D8D00D78022 /* MCOMailProvider.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOMailProvider.h; path = objc/provider/MCOMailProvider.h; sourceTree = ""; }; + 843E4A691F306D8D00D78022 /* MCOMailProvider.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOMailProvider.mm; path = objc/provider/MCOMailProvider.mm; sourceTree = ""; }; + 843E4A6A1F306D8D00D78022 /* MCOMailProvidersManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOMailProvidersManager.h; path = objc/provider/MCOMailProvidersManager.h; sourceTree = ""; }; + 843E4A6B1F306D8D00D78022 /* MCOMailProvidersManager.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOMailProvidersManager.mm; path = objc/provider/MCOMailProvidersManager.mm; sourceTree = ""; }; + 843E4A6C1F306D8D00D78022 /* MCONetService.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCONetService.h; path = objc/provider/MCONetService.h; sourceTree = ""; }; + 843E4A6D1F306D8D00D78022 /* MCONetService.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCONetService.mm; path = objc/provider/MCONetService.mm; sourceTree = ""; }; + 843E4A6E1F306D8D00D78022 /* MCOProvider.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOProvider.h; path = objc/provider/MCOProvider.h; sourceTree = ""; }; + 843E4A701F306DA300D78022 /* MCOAttachment.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOAttachment.h; path = objc/rfc822/MCOAttachment.h; sourceTree = ""; }; + 843E4A711F306DA300D78022 /* MCOAttachment.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOAttachment.mm; path = objc/rfc822/MCOAttachment.mm; sourceTree = ""; }; + 843E4A721F306DA300D78022 /* MCOMessageBuilder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOMessageBuilder.h; path = objc/rfc822/MCOMessageBuilder.h; sourceTree = ""; }; + 843E4A731F306DA300D78022 /* MCOMessageBuilder.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOMessageBuilder.mm; path = objc/rfc822/MCOMessageBuilder.mm; sourceTree = ""; }; + 843E4A741F306DA300D78022 /* MCOMessageParser.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOMessageParser.h; path = objc/rfc822/MCOMessageParser.h; sourceTree = ""; }; + 843E4A751F306DA300D78022 /* MCOMessageParser.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOMessageParser.mm; path = objc/rfc822/MCOMessageParser.mm; sourceTree = ""; }; + 843E4A761F306DA300D78022 /* MCOMessagePart.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOMessagePart.h; path = objc/rfc822/MCOMessagePart.h; sourceTree = ""; }; + 843E4A771F306DA300D78022 /* MCOMessagePart.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOMessagePart.mm; path = objc/rfc822/MCOMessagePart.mm; sourceTree = ""; }; + 843E4A781F306DA300D78022 /* MCOMultipart.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOMultipart.h; path = objc/rfc822/MCOMultipart.h; sourceTree = ""; }; + 843E4A791F306DA300D78022 /* MCOMultipart.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOMultipart.mm; path = objc/rfc822/MCOMultipart.mm; sourceTree = ""; }; + 843E4A7A1F306DA300D78022 /* MCORFC822.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCORFC822.h; path = objc/rfc822/MCORFC822.h; sourceTree = ""; }; + 843E4A7B1F306E0900D78022 /* MCOOperation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOOperation.h; path = objc/utils/MCOOperation.h; sourceTree = ""; }; + 843E4A7C1F306E0900D78022 /* MCOOperation.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOOperation.mm; path = objc/utils/MCOOperation.mm; sourceTree = ""; }; + 843E4A7D1F306E0900D78022 /* MCOOperation+Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "MCOOperation+Private.h"; path = "objc/utils/MCOOperation+Private.h"; sourceTree = ""; }; + 843E4A7E1F306F2600D78022 /* MCOObjectWrapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOObjectWrapper.h; path = objc/utils/MCOObjectWrapper.h; sourceTree = ""; }; + 843E4A7F1F306F2600D78022 /* MCOObjectWrapper.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MCOObjectWrapper.mm; path = objc/utils/MCOObjectWrapper.mm; sourceTree = ""; }; + 843E4A801F306F3D00D78022 /* MCOUtils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MCOUtils.h; path = objc/utils/MCOUtils.h; sourceTree = ""; }; + 843E4A851F30838500D78022 /* MailCoreString.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MailCoreString.cpp; path = c/basetypes/MailCoreString.cpp; sourceTree = ""; }; + 843E4A861F30838500D78022 /* MailCoreString.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MailCoreString.h; path = c/basetypes/MailCoreString.h; sourceTree = ""; }; + 843E58141F6927D900AE681B /* DispatchQueue+Mailcore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = "DispatchQueue+Mailcore.swift"; path = "swift/utils/DispatchQueue+Mailcore.swift"; sourceTree = ""; }; + 843EA47B1F795A5400861123 /* LibetpanHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = LibetpanHelper.swift; path = swift/utils/LibetpanHelper.swift; sourceTree = ""; }; + 843EA47E1F7966A400861123 /* LibetpanHelperTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = LibetpanHelperTests.swift; path = ../../unittest/LibetpanHelperTests.swift; sourceTree = ""; }; + 844D9CDE1F28F1F500E470A8 /* CMessagePart.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CMessagePart.cpp; path = c/rfc822/CMessagePart.cpp; sourceTree = ""; }; + 844D9CDF1F28F1F500E470A8 /* CMessagePart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CMessagePart.h; path = c/rfc822/CMessagePart.h; sourceTree = ""; }; + 84501D0C1DA511A400A9FF4D /* MCOIndexSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MCOIndexSet.swift; path = swift/basetypes/MCOIndexSet.swift; sourceTree = ""; }; + 845FB8401F29031400A29DA8 /* CMailProvidersManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CMailProvidersManager.cpp; path = c/provider/CMailProvidersManager.cpp; sourceTree = ""; }; + 845FB8411F29031400A29DA8 /* CMailProvidersManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = CMailProvidersManager.h; path = c/provider/CMailProvidersManager.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 845FB8461F29057A00A29DA8 /* CNetService.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CNetService.cpp; path = c/provider/CNetService.cpp; sourceTree = ""; }; + 845FB8471F29057A00A29DA8 /* CNetService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = CNetService.h; path = c/provider/CNetService.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 845FB84C1F2909A000A29DA8 /* CMailProvider.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CMailProvider.cpp; path = c/provider/CMailProvider.cpp; sourceTree = ""; }; + 845FB84D1F2909A000A29DA8 /* CMailProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CMailProvider.h; path = c/provider/CMailProvider.h; sourceTree = ""; }; + 845FB8561F290CF000A29DA8 /* NetService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = NetService.swift; path = swift/provider/NetService.swift; sourceTree = ""; }; + 845FB8591F2910D700A29DA8 /* MailProvider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MailProvider.swift; path = swift/provider/MailProvider.swift; sourceTree = ""; }; + 845FB85C1F2914D200A29DA8 /* MailProvidersManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MailProvidersManager.swift; path = swift/provider/MailProvidersManager.swift; sourceTree = ""; }; + 846693041F6829A90020C6C9 /* MessagePart.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = MessagePart.swift; path = swift/rfc822/MessagePart.swift; sourceTree = ""; }; + 847530611F2230B30011100D /* CBase+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "CBase+Private.h"; path = "c/CBase+Private.h"; sourceTree = ""; }; + 848F95371D9D568B00058351 /* UInt32+Mailcore.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "UInt32+Mailcore.swift"; path = "swift/basetypes/UInt32+Mailcore.swift"; sourceTree = ""; }; 8491899C18C93F92002063A3 /* MCNNTP.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MCNNTP.h; path = nntp/MCNNTP.h; sourceTree = ""; }; 8491899F18C93FB7002063A3 /* MCNNTPSession.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MCNNTPSession.cpp; path = nntp/MCNNTPSession.cpp; sourceTree = ""; }; 849189A018C93FB7002063A3 /* MCNNTPSession.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MCNNTPSession.h; path = nntp/MCNNTPSession.h; sourceTree = ""; }; 849189A918C94986002063A3 /* MCNNTPGroupInfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MCNNTPGroupInfo.cpp; path = nntp/MCNNTPGroupInfo.cpp; sourceTree = ""; }; 849189AA18C94986002063A3 /* MCNNTPGroupInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MCNNTPGroupInfo.h; path = nntp/MCNNTPGroupInfo.h; sourceTree = ""; }; + 8491BB5F1DF6E66F00E6D679 /* IMAPCapabilityOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = IMAPCapabilityOperation.swift; path = swift/imap/IMAPCapabilityOperation.swift; sourceTree = ""; }; + 8491BB611DF6E74800E6D679 /* CIMAPCapabilityOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CIMAPCapabilityOperation.cpp; path = c/imap/CIMAPCapabilityOperation.cpp; sourceTree = ""; }; + 8491BB621DF6E74800E6D679 /* CIMAPCapabilityOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CIMAPCapabilityOperation.h; path = c/imap/CIMAPCapabilityOperation.h; sourceTree = ""; }; + 8491BB651DF6F64400E6D679 /* CIMAPCheckAccountOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CIMAPCheckAccountOperation.cpp; path = c/imap/CIMAPCheckAccountOperation.cpp; sourceTree = ""; }; + 8491BB661DF6F64400E6D679 /* CIMAPCheckAccountOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CIMAPCheckAccountOperation.h; path = c/imap/CIMAPCheckAccountOperation.h; sourceTree = ""; }; + 8491BB691DF6FA5000E6D679 /* IMAPCheckAccountOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = IMAPCheckAccountOperation.swift; path = swift/imap/IMAPCheckAccountOperation.swift; sourceTree = ""; }; + 8491BB6B1DF7028C00E6D679 /* CIMAPCustomCommandOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CIMAPCustomCommandOperation.cpp; path = c/imap/CIMAPCustomCommandOperation.cpp; sourceTree = ""; }; + 8491BB6C1DF7028C00E6D679 /* CIMAPCustomCommandOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CIMAPCustomCommandOperation.h; path = c/imap/CIMAPCustomCommandOperation.h; sourceTree = ""; }; + 8491BB6F1DF7057800E6D679 /* IMAPCustomCommandOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = IMAPCustomCommandOperation.swift; path = swift/imap/IMAPCustomCommandOperation.swift; sourceTree = ""; }; + 8494D6CF1D9C03BB009EEE5E /* CIMAPPart.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CIMAPPart.cpp; path = c/imap/CIMAPPart.cpp; sourceTree = ""; }; + 8494D6D01D9C03BB009EEE5E /* CIMAPPart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = CIMAPPart.h; path = c/imap/CIMAPPart.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 8494D6D31D9C06F5009EEE5E /* IMAPPart.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = IMAPPart.swift; path = swift/imap/IMAPPart.swift; sourceTree = ""; }; + 8494D6D51D9C082E009EEE5E /* CIMAPFolderInfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CIMAPFolderInfo.cpp; path = c/imap/CIMAPFolderInfo.cpp; sourceTree = ""; }; + 8494D6D61D9C082E009EEE5E /* CIMAPFolderInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CIMAPFolderInfo.h; path = c/imap/CIMAPFolderInfo.h; sourceTree = ""; }; + 8494D6DB1D9C0DE8009EEE5E /* IMAPFolderInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = IMAPFolderInfo.swift; path = swift/imap/IMAPFolderInfo.swift; sourceTree = ""; }; + 8494D6DD1D9C0FE9009EEE5E /* CIMAPFolderStatus.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CIMAPFolderStatus.cpp; path = c/imap/CIMAPFolderStatus.cpp; sourceTree = ""; }; + 8494D6DE1D9C0FE9009EEE5E /* CIMAPFolderStatus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CIMAPFolderStatus.h; path = c/imap/CIMAPFolderStatus.h; sourceTree = ""; }; + 8494D6E11D9C11C7009EEE5E /* IMAPFolderStatus.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = IMAPFolderStatus.swift; path = swift/imap/IMAPFolderStatus.swift; sourceTree = ""; }; + 8494D6E31D9C2253009EEE5E /* IMAPSearchExpression.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = IMAPSearchExpression.swift; path = swift/imap/IMAPSearchExpression.swift; sourceTree = ""; }; + 8494D6E51D9C2274009EEE5E /* CIMAPSearchExpression.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CIMAPSearchExpression.cpp; path = c/imap/CIMAPSearchExpression.cpp; sourceTree = ""; }; + 8494D6E61D9C2274009EEE5E /* CIMAPSearchExpression.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CIMAPSearchExpression.h; path = c/imap/CIMAPSearchExpression.h; sourceTree = ""; }; + 8498CCAA1D9511FC0074217C /* CAbstractMessage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CAbstractMessage.cpp; path = c/abstract/CAbstractMessage.cpp; sourceTree = ""; }; + 8498CCAB1D9511FC0074217C /* CAbstractMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CAbstractMessage.h; path = c/abstract/CAbstractMessage.h; sourceTree = ""; }; + 8498CCAD1D9519B40074217C /* CAbstractMessagePart.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CAbstractMessagePart.cpp; path = c/abstract/CAbstractMessagePart.cpp; sourceTree = ""; }; + 8498CCAE1D9519B40074217C /* CAbstractMessagePart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CAbstractMessagePart.h; path = c/abstract/CAbstractMessagePart.h; sourceTree = ""; }; + 8498CCB01D9520660074217C /* CAbstractMultipart.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CAbstractMultipart.cpp; path = c/abstract/CAbstractMultipart.cpp; sourceTree = ""; }; + 8498CCB11D9520660074217C /* CAbstractMultipart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CAbstractMultipart.h; path = c/abstract/CAbstractMultipart.h; sourceTree = ""; }; + 849EA1741D9928CE000E4E4D /* String+Mailcore.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "String+Mailcore.swift"; path = "swift/basetypes/String+Mailcore.swift"; sourceTree = ""; }; + 84A929111DA7B5BB0020205B /* HTMLRendererDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = HTMLRendererDelegate.swift; path = swift/abstract/HTMLRendererDelegate.swift; sourceTree = ""; }; + 84A929131DA7B8480020205B /* HTMLRendererImapDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = HTMLRendererImapDelegate.swift; path = swift/abstract/HTMLRendererImapDelegate.swift; sourceTree = ""; }; + 84A929151DA7B9790020205B /* AbstractMessageRendererCallback.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = AbstractMessageRendererCallback.swift; path = swift/abstract/AbstractMessageRendererCallback.swift; sourceTree = ""; }; + 84A929171DA7BABF0020205B /* CAbstractMessageRendererCallback.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CAbstractMessageRendererCallback.cpp; path = c/abstract/CAbstractMessageRendererCallback.cpp; sourceTree = ""; }; + 84A929181DA7BABF0020205B /* CAbstractMessageRendererCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CAbstractMessageRendererCallback.h; path = c/abstract/CAbstractMessageRendererCallback.h; sourceTree = ""; }; + 84AC02E91F6A9A0100519B08 /* CMailCore.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CMailCore.h; path = CMailCore/CMailCore.h; sourceTree = ""; }; + 84AC02EA1F6A9A0200519B08 /* module.modulemap */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.module-map"; name = module.modulemap; path = CMailCore/module.modulemap; sourceTree = ""; }; + 84AD848F1F435DEB000361A3 /* CMultipart.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CMultipart.cpp; path = c/rfc822/CMultipart.cpp; sourceTree = ""; }; + 84AD84901F435DEB000361A3 /* CMultipart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CMultipart.h; path = c/rfc822/CMultipart.h; sourceTree = ""; }; + 84AD84951F435F9A000361A3 /* Multipart.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Multipart.swift; path = swift/rfc822/Multipart.swift; sourceTree = ""; }; 84AF9E7D172DBAF600E60AA3 /* providers.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = providers.json; path = ../resources/providers.json; sourceTree = ""; }; + 84B110A41D928E1D0079C769 /* IMAPIdleOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = IMAPIdleOperation.swift; path = swift/imap/IMAPIdleOperation.swift; sourceTree = ""; }; + 84B110A71D92924C0079C769 /* COperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = COperation.cpp; path = c/utils/COperation.cpp; sourceTree = ""; }; + 84B110A81D92924C0079C769 /* COperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = COperation.h; path = c/utils/COperation.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 84B110AF1D929B560079C769 /* CIMAPBaseOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CIMAPBaseOperation.cpp; path = c/imap/CIMAPBaseOperation.cpp; sourceTree = ""; }; + 84B110B01D929B560079C769 /* CIMAPBaseOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CIMAPBaseOperation.h; path = c/imap/CIMAPBaseOperation.h; sourceTree = ""; }; 84B639E117F279BB003B5BA2 /* MCSMTPNoopOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCSMTPNoopOperation.cpp; sourceTree = ""; }; 84B639E217F279BB003B5BA2 /* MCSMTPNoopOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCSMTPNoopOperation.h; sourceTree = ""; }; 84B639E617F27EBD003B5BA2 /* MCPOPNoopOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCPOPNoopOperation.cpp; sourceTree = ""; }; 84B639E717F27EBD003B5BA2 /* MCPOPNoopOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCPOPNoopOperation.h; sourceTree = ""; }; 84B639EB17F280F3003B5BA2 /* MCIMAPNoopOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCIMAPNoopOperation.cpp; sourceTree = ""; }; 84B639EC17F280F3003B5BA2 /* MCIMAPNoopOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCIMAPNoopOperation.h; sourceTree = ""; }; - 84B639EF17F282B4003B5BA2 /* MCOPOPNoopOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOPOPNoopOperation.h; sourceTree = ""; }; - 84B639F017F282B4003B5BA2 /* MCOPOPNoopOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOPOPNoopOperation.mm; sourceTree = ""; }; - 84CFA98119F7153B00FE35D2 /* MCONNTPFetchOverviewOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCONNTPFetchOverviewOperation.h; sourceTree = ""; }; - 84CFA98219F7153B00FE35D2 /* MCONNTPFetchOverviewOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCONNTPFetchOverviewOperation.mm; sourceTree = ""; }; + 84B8920E1DA268F8008FD1C4 /* CSMTPSession.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CSMTPSession.cpp; path = c/smtp/CSMTPSession.cpp; sourceTree = ""; }; + 84B8920F1DA268F8008FD1C4 /* CSMTPSession.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = CSMTPSession.h; path = c/smtp/CSMTPSession.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 84B892121DA27A54008FD1C4 /* CSMTPOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CSMTPOperation.cpp; path = c/smtp/CSMTPOperation.cpp; sourceTree = ""; }; + 84B892131DA27A54008FD1C4 /* CSMTPOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = CSMTPOperation.h; path = c/smtp/CSMTPOperation.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 84B892171DA27FDD008FD1C4 /* SMTPSession.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SMTPSession.swift; path = swift/smtp/SMTPSession.swift; sourceTree = ""; }; + 84B892191DA28121008FD1C4 /* SMTPOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SMTPOperation.swift; path = swift/smtp/SMTPOperation.swift; sourceTree = ""; }; + 84B8921F1DA29A3B008FD1C4 /* SMTPSendOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SMTPSendOperation.swift; path = swift/smtp/SMTPSendOperation.swift; sourceTree = ""; }; + 84C18948223808A3001430F3 /* CAutoreleasePool.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CAutoreleasePool.cpp; path = c/utils/CAutoreleasePool.cpp; sourceTree = ""; }; + 84C18949223808A3001430F3 /* CAutoreleasePool.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAutoreleasePool.h; path = c/utils/CAutoreleasePool.h; sourceTree = ""; }; + 84C95C1D1F3208580056A543 /* CAbstractMessageRendererCallbackWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CAbstractMessageRendererCallbackWrapper.h; path = c/abstract/CAbstractMessageRendererCallbackWrapper.h; sourceTree = ""; }; + 84CD9BDC1D9BE3AF000622CB /* CIMAPMultipart.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CIMAPMultipart.cpp; path = c/imap/CIMAPMultipart.cpp; sourceTree = ""; }; + 84CD9BDD1D9BE3AF000622CB /* CIMAPMultipart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CIMAPMultipart.h; path = c/imap/CIMAPMultipart.h; sourceTree = ""; }; + 84CD9BDF1D9BE514000622CB /* IMAPMultipart.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = IMAPMultipart.swift; path = swift/imap/IMAPMultipart.swift; sourceTree = ""; }; + 84CD9BE11D9BFB37000622CB /* CIMAPNamespaceItem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CIMAPNamespaceItem.cpp; path = c/imap/CIMAPNamespaceItem.cpp; sourceTree = ""; }; + 84CD9BE21D9BFB37000622CB /* CIMAPNamespaceItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = CIMAPNamespaceItem.h; path = c/imap/CIMAPNamespaceItem.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 84CD9BE51D9C0039000622CB /* IMAPNamespaceItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = IMAPNamespaceItem.swift; path = swift/imap/IMAPNamespaceItem.swift; sourceTree = ""; }; 84CFA98519F7159700FE35D2 /* MCNNTPFetchOverviewOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCNNTPFetchOverviewOperation.cpp; sourceTree = ""; }; 84CFA98619F7159700FE35D2 /* MCNNTPFetchOverviewOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCNNTPFetchOverviewOperation.h; sourceTree = ""; }; 84CFA98D19F724E500FE35D2 /* MCNNTPFetchServerTimeOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCNNTPFetchServerTimeOperation.cpp; sourceTree = ""; }; 84CFA98E19F724E500FE35D2 /* MCNNTPFetchServerTimeOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCNNTPFetchServerTimeOperation.h; sourceTree = ""; }; - 84CFA99319F725CB00FE35D2 /* MCONNTPFetchServerTimeOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCONNTPFetchServerTimeOperation.h; sourceTree = ""; }; - 84CFA99419F725CB00FE35D2 /* MCONNTPFetchServerTimeOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCONNTPFetchServerTimeOperation.mm; sourceTree = ""; }; + 84D344D91DF7090700B81A94 /* CIMAPFetchContentToFileOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CIMAPFetchContentToFileOperation.cpp; path = c/imap/CIMAPFetchContentToFileOperation.cpp; sourceTree = ""; }; + 84D344DA1DF7090700B81A94 /* CIMAPFetchContentToFileOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CIMAPFetchContentToFileOperation.h; path = c/imap/CIMAPFetchContentToFileOperation.h; sourceTree = ""; }; + 84D344DD1DF70DB600B81A94 /* IMAPFetchContentToFileOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = IMAPFetchContentToFileOperation.swift; path = swift/imap/IMAPFetchContentToFileOperation.swift; sourceTree = ""; }; + 84D344DF1DF712D500B81A94 /* CIMAPFetchNamespaceOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CIMAPFetchNamespaceOperation.cpp; path = c/imap/CIMAPFetchNamespaceOperation.cpp; sourceTree = ""; }; + 84D344E01DF712D500B81A94 /* CIMAPFetchNamespaceOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CIMAPFetchNamespaceOperation.h; path = c/imap/CIMAPFetchNamespaceOperation.h; sourceTree = ""; }; + 84D344E31DF7151D00B81A94 /* IMAPFetchNamespaceOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = IMAPFetchNamespaceOperation.swift; path = swift/imap/IMAPFetchNamespaceOperation.swift; sourceTree = ""; }; + 84D72F1B1F32161800F570BC /* CData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CData.cpp; path = c/basetypes/CData.cpp; sourceTree = ""; }; + 84D72F1C1F32161800F570BC /* CData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CData.h; path = c/basetypes/CData.h; sourceTree = ""; }; 84D73729199BF63F005124E5 /* MCAsyncNNTP.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = MCAsyncNNTP.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; 84D7372A199BF66C005124E5 /* MCNNTPAsyncSession.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; path = MCNNTPAsyncSession.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; 84D7372B199BF66C005124E5 /* MCNNTPAsyncSession.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCNNTPAsyncSession.h; sourceTree = ""; }; @@ -2487,43 +2258,86 @@ 84D73757199BFC8A005124E5 /* MCNNTPDisconnectOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCNNTPDisconnectOperation.h; sourceTree = ""; }; 84D7375A199BFDCA005124E5 /* MCNNTPListNewsgroupsOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCNNTPListNewsgroupsOperation.cpp; sourceTree = ""; }; 84D7375B199BFDCA005124E5 /* MCNNTPListNewsgroupsOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCNNTPListNewsgroupsOperation.h; sourceTree = ""; }; - 84D73761199BFF80005124E5 /* MCONNTP.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCONNTP.h; sourceTree = ""; }; - 84D73762199BFFC7005124E5 /* MCONNTPSession.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCONNTPSession.h; sourceTree = ""; }; - 84D73763199BFFC7005124E5 /* MCONNTPSession.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; lineEnding = 0; path = MCONNTPSession.mm; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - 84D73766199BFFFC005124E5 /* MCONNTPOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCONNTPOperation.h; sourceTree = ""; }; - 84D73767199BFFFC005124E5 /* MCONNTPOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCONNTPOperation.mm; sourceTree = ""; }; - 84D7376A199C0014005124E5 /* MCONNTPOperation+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MCONNTPOperation+Private.h"; sourceTree = ""; }; - 84D7376B199C005A005124E5 /* MCONNTPFetchHeaderOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCONNTPFetchHeaderOperation.h; sourceTree = ""; }; - 84D7376C199C005A005124E5 /* MCONNTPFetchHeaderOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCONNTPFetchHeaderOperation.mm; sourceTree = ""; }; - 84D7376F199C007E005124E5 /* MCONNTPFetchArticleOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCONNTPFetchArticleOperation.h; sourceTree = ""; }; - 84D73770199C007E005124E5 /* MCONNTPFetchArticleOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCONNTPFetchArticleOperation.mm; sourceTree = ""; }; - 84D73773199C00AB005124E5 /* MCONNTPFetchAllArticlesOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCONNTPFetchAllArticlesOperation.h; sourceTree = ""; }; - 84D73774199C00AB005124E5 /* MCONNTPFetchAllArticlesOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; lineEnding = 0; path = MCONNTPFetchAllArticlesOperation.mm; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - 84D73789199C0260005124E5 /* MCONNTPListNewsgroupsOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCONNTPListNewsgroupsOperation.h; sourceTree = ""; }; - 84D7378A199C0260005124E5 /* MCONNTPListNewsgroupsOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCONNTPListNewsgroupsOperation.mm; sourceTree = ""; }; - 84D7378D199C02A8005124E5 /* MCONNTPDisconnectOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCONNTPDisconnectOperation.h; sourceTree = ""; }; - 84D7378E199C02A8005124E5 /* MCONNTPDisconnectOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCONNTPDisconnectOperation.mm; sourceTree = ""; }; - 84D73791199C0511005124E5 /* MCONNTPGroupInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCONNTPGroupInfo.h; sourceTree = ""; }; - 84D73792199C0511005124E5 /* MCONNTPGroupInfo.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCONNTPGroupInfo.mm; sourceTree = ""; }; + 84E1E0251DF5D33B00D45A31 /* CIMAPFetchFoldersOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CIMAPFetchFoldersOperation.cpp; path = c/imap/CIMAPFetchFoldersOperation.cpp; sourceTree = ""; }; + 84E1E0261DF5D33B00D45A31 /* CIMAPFetchFoldersOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CIMAPFetchFoldersOperation.h; path = c/imap/CIMAPFetchFoldersOperation.h; sourceTree = ""; }; + 84E1E0291DF5D4E500D45A31 /* IMAPFetchFoldersOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = IMAPFetchFoldersOperation.swift; path = swift/imap/IMAPFetchFoldersOperation.swift; sourceTree = ""; }; + 84E3DB331D997D32003B598F /* Operation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Operation.swift; path = swift/utils/Operation.swift; sourceTree = ""; }; + 84E3DB351D9A7059003B598F /* IMAPBaseOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = IMAPBaseOperation.swift; path = swift/imap/IMAPBaseOperation.swift; sourceTree = ""; }; + 84E3DB371D9A7C93003B598F /* CIMAPIdleOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CIMAPIdleOperation.cpp; path = c/imap/CIMAPIdleOperation.cpp; sourceTree = ""; }; + 84E3DB381D9A7C93003B598F /* CIMAPIdleOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = CIMAPIdleOperation.h; path = c/imap/CIMAPIdleOperation.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 84E3DB3B1D9A8459003B598F /* MailCoreError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MailCoreError.swift; path = swift/utils/MailCoreError.swift; sourceTree = ""; }; + 84E3DB3D1D9AA56A003B598F /* Dictionary+Mailcore.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "Dictionary+Mailcore.swift"; path = "swift/basetypes/Dictionary+Mailcore.swift"; sourceTree = ""; }; + 84E3DB3F1D9AA676003B598F /* CDictionary.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CDictionary.cpp; path = c/basetypes/CDictionary.cpp; sourceTree = ""; }; + 84E3DB401D9AA676003B598F /* CDictionary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDictionary.h; path = c/basetypes/CDictionary.h; sourceTree = ""; }; + 84E3DB431D9ABDCC003B598F /* Data+Mailcore.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "Data+Mailcore.swift"; path = "swift/basetypes/Data+Mailcore.swift"; sourceTree = ""; }; + 84E3DB451D9AC3A6003B598F /* Array+Mailcore.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "Array+Mailcore.swift"; path = "swift/basetypes/Array+Mailcore.swift"; sourceTree = ""; }; + 84E3DB471D9BB29E003B598F /* CIMAPFolder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CIMAPFolder.cpp; path = c/imap/CIMAPFolder.cpp; sourceTree = ""; }; + 84E3DB481D9BB29E003B598F /* CIMAPFolder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CIMAPFolder.h; path = c/imap/CIMAPFolder.h; sourceTree = ""; }; + 84E3DB4B1D9BB9F7003B598F /* IMAPFolder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = IMAPFolder.swift; path = swift/imap/IMAPFolder.swift; sourceTree = ""; }; + 84E3DB4D1D9BBDAD003B598F /* CIMAPMessage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CIMAPMessage.cpp; path = c/imap/CIMAPMessage.cpp; sourceTree = ""; }; + 84E3DB4E1D9BBDAD003B598F /* CIMAPMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = CIMAPMessage.h; path = c/imap/CIMAPMessage.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 84E3DB511D9BCEED003B598F /* IMAPMessage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = IMAPMessage.swift; path = swift/imap/IMAPMessage.swift; sourceTree = ""; }; + 84E3DB531D9BDB41003B598F /* CIMAPMessagePart.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CIMAPMessagePart.cpp; path = c/imap/CIMAPMessagePart.cpp; sourceTree = ""; }; + 84E3DB541D9BDB41003B598F /* CIMAPMessagePart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CIMAPMessagePart.h; path = c/imap/CIMAPMessagePart.h; sourceTree = ""; }; + 84E3DB571D9BDD62003B598F /* IMAPMessagePart.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = IMAPMessagePart.swift; path = swift/imap/IMAPMessagePart.swift; sourceTree = ""; }; + 84E52F6D1F3350CA00233DA3 /* Object.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Object.swift; path = swift/basetypes/Object.swift; sourceTree = ""; }; + 84ECAD761D93E9CD006261FD /* CAbstractPart.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CAbstractPart.cpp; path = c/abstract/CAbstractPart.cpp; sourceTree = ""; }; + 84ECAD771D93E9CD006261FD /* CAbstractPart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CAbstractPart.h; path = c/abstract/CAbstractPart.h; sourceTree = ""; }; + 84ECAD7A1D93FF9E006261FD /* CMessageHeader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CMessageHeader.cpp; path = c/abstract/CMessageHeader.cpp; sourceTree = ""; }; + 84ECAD7B1D93FF9E006261FD /* CMessageHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = CMessageHeader.h; path = c/abstract/CMessageHeader.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 84ECAD7E1D943B11006261FD /* CAddress.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CAddress.cpp; path = c/abstract/CAddress.cpp; sourceTree = ""; }; + 84ECAD7F1D943B11006261FD /* CAddress.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CAddress.h; path = c/abstract/CAddress.h; sourceTree = ""; }; + 84F7B40D1D915985005F83E8 /* CBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = CBase.h; path = c/CBase.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 84F7B40E1D915985005F83E8 /* CCore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CCore.h; path = c/CCore.h; sourceTree = ""; }; + 84F7B4101D915997005F83E8 /* CArray.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CArray.cpp; path = c/basetypes/CArray.cpp; sourceTree = ""; }; + 84F7B4111D915997005F83E8 /* CArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = CArray.h; path = c/basetypes/CArray.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 84F7B4121D915997005F83E8 /* CIndexSet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CIndexSet.cpp; path = c/basetypes/CIndexSet.cpp; sourceTree = ""; }; + 84F7B4131D915997005F83E8 /* CIndexSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = CIndexSet.h; path = c/basetypes/CIndexSet.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 84F7B4141D915997005F83E8 /* CObject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CObject.cpp; path = c/basetypes/CObject.cpp; sourceTree = ""; }; + 84F7B4151D915997005F83E8 /* CObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = CObject.h; path = c/basetypes/CObject.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 84F7B43D1D9159E9005F83E8 /* CMessageConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CMessageConstants.h; path = c/abstract/CMessageConstants.h; sourceTree = ""; }; + 84F7B45A1D915D88005F83E8 /* CIMAPAppendMessageOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CIMAPAppendMessageOperation.cpp; path = c/imap/CIMAPAppendMessageOperation.cpp; sourceTree = ""; }; + 84F7B45B1D915D88005F83E8 /* CIMAPAppendMessageOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CIMAPAppendMessageOperation.h; path = c/imap/CIMAPAppendMessageOperation.h; sourceTree = ""; }; + 84F7B45C1D915D88005F83E8 /* CIMAPAsyncSession.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CIMAPAsyncSession.cpp; path = c/imap/CIMAPAsyncSession.cpp; sourceTree = ""; }; + 84F7B45D1D915D88005F83E8 /* CIMAPAsyncSession.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CIMAPAsyncSession.h; path = c/imap/CIMAPAsyncSession.h; sourceTree = ""; }; + 84F7B45E1D915D88005F83E8 /* CIMAPCopyMessagesOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CIMAPCopyMessagesOperation.cpp; path = c/imap/CIMAPCopyMessagesOperation.cpp; sourceTree = ""; }; + 84F7B45F1D915D88005F83E8 /* CIMAPCopyMessagesOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CIMAPCopyMessagesOperation.h; path = c/imap/CIMAPCopyMessagesOperation.h; sourceTree = ""; }; + 84F7B4601D915D88005F83E8 /* CIMAPFetchContentOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CIMAPFetchContentOperation.cpp; path = c/imap/CIMAPFetchContentOperation.cpp; sourceTree = ""; }; + 84F7B4611D915D88005F83E8 /* CIMAPFetchContentOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CIMAPFetchContentOperation.h; path = c/imap/CIMAPFetchContentOperation.h; sourceTree = ""; }; + 84F7B4621D915D88005F83E8 /* CIMAPFetchMessagesOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CIMAPFetchMessagesOperation.cpp; path = c/imap/CIMAPFetchMessagesOperation.cpp; sourceTree = ""; }; + 84F7B4631D915D88005F83E8 /* CIMAPFetchMessagesOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CIMAPFetchMessagesOperation.h; path = c/imap/CIMAPFetchMessagesOperation.h; sourceTree = ""; }; + 84F7B4641D915D88005F83E8 /* CIMAPFolderInfoOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CIMAPFolderInfoOperation.cpp; path = c/imap/CIMAPFolderInfoOperation.cpp; sourceTree = ""; }; + 84F7B4651D915D88005F83E8 /* CIMAPFolderInfoOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = CIMAPFolderInfoOperation.h; path = c/imap/CIMAPFolderInfoOperation.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 84F7B4661D915D88005F83E8 /* CIMAPFolderStatusOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CIMAPFolderStatusOperation.cpp; path = c/imap/CIMAPFolderStatusOperation.cpp; sourceTree = ""; }; + 84F7B4671D915D88005F83E8 /* CIMAPFolderStatusOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = CIMAPFolderStatusOperation.h; path = c/imap/CIMAPFolderStatusOperation.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 84F7B4681D915D88005F83E8 /* CIMAPNamespace.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = CIMAPNamespace.h; path = c/imap/CIMAPNamespace.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 84F7B4891D916CE7005F83E8 /* swiftmailcore2.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = swiftmailcore2.h; sourceTree = ""; }; + 84F7B48A1D916CE7005F83E8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 84F7B4961D916D0B005F83E8 /* Convertible.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Convertible.swift; path = swift/basetypes/Convertible.swift; sourceTree = ""; }; + 84F7B49D1D916D4A005F83E8 /* IMAPAppendMessageOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = IMAPAppendMessageOperation.swift; path = swift/imap/IMAPAppendMessageOperation.swift; sourceTree = ""; }; + 84F7B49E1D916D4A005F83E8 /* IMAPCopyMessagesOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = IMAPCopyMessagesOperation.swift; path = swift/imap/IMAPCopyMessagesOperation.swift; sourceTree = ""; }; + 84F7B49F1D916D4A005F83E8 /* IMAPFetchContentOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = IMAPFetchContentOperation.swift; path = swift/imap/IMAPFetchContentOperation.swift; sourceTree = ""; }; + 84F7B4A01D916D4A005F83E8 /* IMAPFetchMessagesOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = IMAPFetchMessagesOperation.swift; path = swift/imap/IMAPFetchMessagesOperation.swift; sourceTree = ""; }; + 84F7B4A11D916D4A005F83E8 /* IMAPFolderInfoOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = IMAPFolderInfoOperation.swift; path = swift/imap/IMAPFolderInfoOperation.swift; sourceTree = ""; }; + 84F7B4A21D916D4A005F83E8 /* IMAPFolderStatusOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = IMAPFolderStatusOperation.swift; path = swift/imap/IMAPFolderStatusOperation.swift; sourceTree = ""; }; + 84F7B4A31D916D4A005F83E8 /* IMAPNamespace.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = IMAPNamespace.swift; path = swift/imap/IMAPNamespace.swift; sourceTree = ""; }; + 84F7B4A41D916D4A005F83E8 /* IMAPOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = IMAPOperation.swift; path = swift/imap/IMAPOperation.swift; sourceTree = ""; }; + 84F7B4A61D916D4A005F83E8 /* IMAPSearchOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = IMAPSearchOperation.swift; path = swift/imap/IMAPSearchOperation.swift; sourceTree = ""; }; + 84F7B4A71D916D4A005F83E8 /* IMAPSession.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = IMAPSession.swift; path = swift/imap/IMAPSession.swift; sourceTree = ""; }; + 84F7B4BD1D9178D3005F83E8 /* CIMAPNamespace.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CIMAPNamespace.cpp; path = c/imap/CIMAPNamespace.cpp; sourceTree = ""; }; + 84F7B4C11D917B1D005F83E8 /* libc++.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libc++.tbd"; path = "Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk/usr/lib/libc++.tbd"; sourceTree = DEVELOPER_DIR; }; + 84FEDEC21F28979900A9E88C /* MessageConstants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MessageConstants.swift; path = swift/abstract/MessageConstants.swift; sourceTree = ""; }; 851682AC1C6A2484005B86C4 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = ""; }; 8568A4111C610D9800FF4470 /* MCIMAPMoveMessagesOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCIMAPMoveMessagesOperation.cpp; sourceTree = ""; }; 8568A4121C610D9800FF4470 /* MCIMAPMoveMessagesOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCIMAPMoveMessagesOperation.h; sourceTree = ""; }; - 8568A4181C610F6600FF4470 /* MCOIMAPMoveMessagesOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOIMAPMoveMessagesOperation.h; sourceTree = ""; }; - 8568A4191C610F6600FF4470 /* MCOIMAPMoveMessagesOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOIMAPMoveMessagesOperation.mm; sourceTree = ""; }; 8B0095C71A00DDC500F84BC0 /* MCSMTPLoginOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCSMTPLoginOperation.cpp; sourceTree = ""; }; 8B0095C81A00DDC500F84BC0 /* MCSMTPLoginOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCSMTPLoginOperation.h; sourceTree = ""; }; - 8B0095CA1A00DDE700F84BC0 /* MCOSMTPLoginOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOSMTPLoginOperation.h; sourceTree = ""; }; - 8B0095CB1A00DDE700F84BC0 /* MCOSMTPLoginOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOSMTPLoginOperation.mm; sourceTree = ""; }; 943F1A9817D964F600F0C798 /* MCIMAPConnectOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCIMAPConnectOperation.cpp; sourceTree = ""; }; 943F1A9917D964F600F0C798 /* MCIMAPConnectOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCIMAPConnectOperation.h; sourceTree = ""; }; 9E774D871767C54E0065EB9B /* MCIMAPFolderStatus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCIMAPFolderStatus.h; sourceTree = ""; }; 9E774D881767C7F60065EB9B /* MCIMAPFolderStatus.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCIMAPFolderStatus.cpp; sourceTree = ""; }; - 9EF9AB06175F2EC60027FA3B /* MCOIMAPFolderStatus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOIMAPFolderStatus.h; sourceTree = ""; }; - 9EF9AB07175F2EC60027FA3B /* MCOIMAPFolderStatus.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOIMAPFolderStatus.mm; sourceTree = ""; }; 9EF9AB0E175F30C20027FA3B /* MCIMAPFolderStatusOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCIMAPFolderStatusOperation.h; sourceTree = ""; }; 9EF9AB10175F319A0027FA3B /* MCIMAPFolderStatusOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCIMAPFolderStatusOperation.cpp; sourceTree = ""; }; - 9EF9AB16175F35C60027FA3B /* MCOIMAPFolderStatusOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOIMAPFolderStatusOperation.h; sourceTree = ""; }; - 9EF9AB18175F36600027FA3B /* MCOIMAPFolderStatusOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOIMAPFolderStatusOperation.mm; sourceTree = ""; }; BD49963519FEC6DD000945BC /* ConvertUTF.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ConvertUTF.c; sourceTree = ""; }; BD49963619FEC6DD000945BC /* ConvertUTF.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConvertUTF.h; sourceTree = ""; }; BD6272961A13FF2A00129AA8 /* test-all-mac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "test-all-mac.mm"; sourceTree = ""; }; @@ -2627,25 +2441,14 @@ BDCD7CE91A7077680001DCC3 /* ucsdet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ucsdet.cpp; sourceTree = ""; }; BDCD7CEC1A7079300001DCC3 /* cmemory.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cmemory.c; sourceTree = ""; }; BDCD7CED1A7079300001DCC3 /* umutex.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = umutex.cpp; sourceTree = ""; }; - C07AD057D3C8FBDC7AC95733 /* MCOIMAPSession.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOIMAPSession.mm; sourceTree = ""; }; - C07AD44B013BB42A240B4F04 /* NSError+MCO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSError+MCO.h"; sourceTree = ""; }; - C07ADFE43E22B38EFF23ADB5 /* NSError+MCO.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "NSError+MCO.mm"; sourceTree = ""; }; C600B6141A242C3F000728F1 /* unittestcpp */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = unittestcpp; sourceTree = BUILT_PRODUCTS_DIR; }; C600B61B1A242C6A000728F1 /* unittest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = unittest.cpp; sourceTree = ""; }; C600B6221A244CC3000728F1 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = System/Library/Frameworks/CFNetwork.framework; sourceTree = SDKROOT; }; - C60136941776B96600A5AF45 /* MCOSMTPOperation+Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "MCOSMTPOperation+Private.h"; sourceTree = ""; }; - C60136951776C31000A5AF45 /* MCOPOPOperation+Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "MCOPOPOperation+Private.h"; sourceTree = ""; }; C608167317759967001F1018 /* MCSMTPDisconnectOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCSMTPDisconnectOperation.cpp; sourceTree = ""; }; C608167417759967001F1018 /* MCSMTPDisconnectOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCSMTPDisconnectOperation.h; sourceTree = ""; }; C6081678177625AD001F1018 /* MCOperationQueueCallback.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MCOperationQueueCallback.h; sourceTree = ""; }; C6081679177635D2001F1018 /* MCIMAPDisconnectOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCIMAPDisconnectOperation.cpp; sourceTree = ""; }; C608167A177635D2001F1018 /* MCIMAPDisconnectOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCIMAPDisconnectOperation.h; sourceTree = ""; }; - C608167F17766FC5001F1018 /* MCOIMAPBaseOperation+Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "MCOIMAPBaseOperation+Private.h"; sourceTree = ""; }; - C623C58B16FE52C0001BBEFC /* MCOHTMLRendererDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MCOHTMLRendererDelegate.h; sourceTree = ""; }; - C623C58D16FE6B45001BBEFC /* MCOIMAPOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOIMAPOperation.h; sourceTree = ""; }; - C623C58E16FE6B45001BBEFC /* MCOIMAPOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOIMAPOperation.mm; sourceTree = ""; }; - C623C59116FE750D001BBEFC /* MCOIMAPFolder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOIMAPFolder.h; sourceTree = ""; }; - C623C59216FE750E001BBEFC /* MCOIMAPFolder.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOIMAPFolder.mm; sourceTree = ""; }; C62C6ED216A2A0E600737497 /* MCIMAPIdentityOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCIMAPIdentityOperation.cpp; sourceTree = ""; }; C62C6ED316A2A0E600737497 /* MCIMAPIdentityOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCIMAPIdentityOperation.h; sourceTree = ""; }; C62C6ED616A398FA00737497 /* MCIMAPFolderInfoOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCIMAPFolderInfoOperation.cpp; sourceTree = ""; }; @@ -2682,51 +2485,13 @@ C63CD69016BE566E00DB18F1 /* MCHTMLCleaner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCHTMLCleaner.h; sourceTree = ""; }; C63D315A17C9155C00A4D993 /* MCIMAPIdentity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCIMAPIdentity.cpp; sourceTree = ""; }; C63D315B17C9155C00A4D993 /* MCIMAPIdentity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCIMAPIdentity.h; sourceTree = ""; }; - C63D316017C92D8300A4D993 /* MCOIMAPIdentity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOIMAPIdentity.h; sourceTree = ""; }; - C63D316117C92D8300A4D993 /* MCOIMAPIdentity.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOIMAPIdentity.mm; sourceTree = ""; }; - C643F490189A3D59007EA2F7 /* NSSet+MCO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSSet+MCO.h"; sourceTree = ""; }; - C643F491189A3D59007EA2F7 /* NSSet+MCO.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "NSSet+MCO.mm"; sourceTree = ""; }; C64BB21F16E34DCA000DB34C /* MCIMAPSyncResult.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCIMAPSyncResult.cpp; sourceTree = ""; }; C64BB22016E34DCB000DB34C /* MCIMAPSyncResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCIMAPSyncResult.h; sourceTree = ""; }; C64BB22916E5C0A3000DB34C /* MCIMAPCapabilityOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCIMAPCapabilityOperation.cpp; sourceTree = ""; }; C64BB22A16E5C0A3000DB34C /* MCIMAPCapabilityOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCIMAPCapabilityOperation.h; sourceTree = ""; }; C64BB22C16E5C1EE000DB34C /* MCIndexSet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCIndexSet.cpp; sourceTree = ""; }; C64BB22D16E5C1EE000DB34C /* MCIndexSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCIndexSet.h; sourceTree = ""; }; - C64BB23316EDAA17000DB34C /* MCOAbstractMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOAbstractMessage.h; sourceTree = ""; }; - C64BB23416EDAA17000DB34C /* MCOAbstractMessage.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOAbstractMessage.mm; sourceTree = ""; }; - C64BB23616EDAA2B000DB34C /* MCOAbstract.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MCOAbstract.h; sourceTree = ""; }; - C64BB23716EDAA3F000DB34C /* MCOAbstractMessagePart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOAbstractMessagePart.h; sourceTree = ""; }; - C64BB23816EDAA3F000DB34C /* MCOAbstractMessagePart.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOAbstractMessagePart.mm; sourceTree = ""; }; - C64BB23A16EDAAC7000DB34C /* MCOAbstractMultipart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOAbstractMultipart.h; sourceTree = ""; }; - C64BB23B16EDAAC7000DB34C /* MCOAbstractMultipart.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOAbstractMultipart.mm; sourceTree = ""; }; - C64BB23D16EDAAE0000DB34C /* MCOAbstractPart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOAbstractPart.h; sourceTree = ""; }; - C64BB23E16EDAAE1000DB34C /* MCOAbstractPart.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOAbstractPart.mm; sourceTree = ""; }; - C64BB24016EDAAF3000DB34C /* MCOAddress.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOAddress.h; sourceTree = ""; }; - C64BB24116EDAAF3000DB34C /* MCOAddress.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOAddress.mm; sourceTree = ""; }; - C64BB24316EDAAFD000DB34C /* MCOMessageHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOMessageHeader.h; sourceTree = ""; }; - C64BB24416EDAAFE000DB34C /* MCOMessageHeader.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOMessageHeader.mm; sourceTree = ""; }; - C64BB24616EEF89D000DB34C /* MCOAddress+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MCOAddress+Private.h"; sourceTree = ""; }; - C64BB24E16EEFFE2000DB34C /* MCOMessageHeader+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MCOMessageHeader+Private.h"; sourceTree = ""; }; - C64BB25016FC2846000DB34C /* NSValue+MCO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSValue+MCO.h"; sourceTree = ""; }; - C64BB25116FC2848000DB34C /* NSValue+MCO.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "NSValue+MCO.mm"; sourceTree = ""; }; C64BB25316FC2AA0000DB34C /* MCValuePrivate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MCValuePrivate.h; sourceTree = ""; }; - C64BB25416FD32A0000DB34C /* MCOIMAP.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MCOIMAP.h; sourceTree = ""; }; - C64BB25716FD3BC2000DB34C /* MCOOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOOperation.h; sourceTree = ""; }; - C64BB25816FD3BC5000DB34C /* MCOOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOOperation.mm; sourceTree = ""; }; - C64BB25916FD3BC8000DB34C /* MCOOperation+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MCOOperation+Private.h"; sourceTree = ""; }; - C64BB25C16FD4377000DB34C /* MCOAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOAttachment.h; sourceTree = ""; }; - C64BB25D16FD4377000DB34C /* MCOAttachment.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOAttachment.mm; sourceTree = ""; }; - C64BB25F16FD438F000DB34C /* MCOMessageBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOMessageBuilder.h; sourceTree = ""; }; - C64BB26016FD438F000DB34C /* MCOMessageBuilder.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOMessageBuilder.mm; sourceTree = ""; }; - C64BB26216FD43A1000DB34C /* MCOMessageParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOMessageParser.h; sourceTree = ""; }; - C64BB26316FD43A1000DB34C /* MCOMessageParser.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOMessageParser.mm; sourceTree = ""; }; - C64BB26516FD43E2000DB34C /* MCOMessagePart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOMessagePart.h; sourceTree = ""; }; - C64BB26616FD43E2000DB34C /* MCOMessagePart.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOMessagePart.mm; sourceTree = ""; }; - C64BB26816FD44C2000DB34C /* MCOMultipart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOMultipart.h; sourceTree = ""; }; - C64BB26916FD44C2000DB34C /* MCOMultipart.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOMultipart.mm; sourceTree = ""; }; - C64BB26B16FD4C3B000DB34C /* MCORFC822.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MCORFC822.h; sourceTree = ""; }; - C64BB26C16FD62FB000DB34C /* MCOUtils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MCOUtils.h; sourceTree = ""; }; - C64BB26D16FD63F6000DB34C /* MCOConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOConstants.h; sourceTree = ""; }; C64EA537169E772200778456 /* libMailCore.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libMailCore.a; sourceTree = BUILT_PRODUCTS_DIR; }; C64EA68C169E847800778456 /* MCIMAPAsyncConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCIMAPAsyncConnection.h; sourceTree = ""; }; C64EA68F169E847800778456 /* MCSMTPAsyncSession.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCSMTPAsyncSession.cpp; sourceTree = ""; }; @@ -2871,8 +2636,6 @@ C64EA82816A29F0300778456 /* MCIMAPIdleOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCIMAPIdleOperation.h; sourceTree = ""; }; C64EA82A16A29FAA00778456 /* MCIMAPFetchNamespaceOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCIMAPFetchNamespaceOperation.cpp; sourceTree = ""; }; C64EA82B16A2A01400778456 /* MCIMAPFetchNamespaceOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCIMAPFetchNamespaceOperation.h; sourceTree = ""; }; - C64FF38F16B3C13000F8C162 /* MCOObjectWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOObjectWrapper.h; sourceTree = ""; }; - C64FF39016B3C13000F8C162 /* MCOObjectWrapper.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOObjectWrapper.mm; sourceTree = ""; }; C668E2C51735C8D500A2BB47 /* MCObjectMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCObjectMac.mm; sourceTree = ""; }; C668E2CA1735CB8900A2BB47 /* MCAutoreleasePoolMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCAutoreleasePoolMac.mm; sourceTree = ""; }; C673EBEB1A46B41000A53F7F /* MCIMAPFolderInfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCIMAPFolderInfo.cpp; sourceTree = ""; }; @@ -2882,8 +2645,6 @@ C68B2AEB1778A589005E61EF /* MCConnectionLogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCConnectionLogger.h; sourceTree = ""; }; C68B2AF517797389005E61EF /* MCConnectionLoggerUtils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCConnectionLoggerUtils.cpp; sourceTree = ""; }; C68B2AF617797389005E61EF /* MCConnectionLoggerUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCConnectionLoggerUtils.h; sourceTree = ""; }; - C69BA85917DEFCCB00D601B7 /* NSIndexSet+MCO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSIndexSet+MCO.h"; sourceTree = ""; }; - C69BA85A17DEFCCB00D601B7 /* NSIndexSet+MCO.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSIndexSet+MCO.m"; sourceTree = ""; }; C6A81B911706840C00882C15 /* test-ios.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "test-ios.app"; sourceTree = BUILT_PRODUCTS_DIR; }; C6A81B921706840C00882C15 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; C6A81B951706840C00882C15 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; @@ -2894,26 +2655,6 @@ C6A81BB717068C0600882C15 /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = AppDelegate.mm; sourceTree = ""; }; C6A81BB817068C0600882C15 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; C6A81BB917068C0600882C15 /* tests-ios-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "tests-ios-Info.plist"; sourceTree = ""; }; - C6A81BBD17068E5E00882C15 /* MCOSMTPSession.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOSMTPSession.h; sourceTree = ""; }; - C6A81BBE17068E5E00882C15 /* MCOSMTPSession.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOSMTPSession.mm; sourceTree = ""; }; - C6A81BC117068E9500882C15 /* MCOSMTPSendOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOSMTPSendOperation.h; sourceTree = ""; }; - C6A81BC217068E9500882C15 /* MCOSMTPSendOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOSMTPSendOperation.mm; sourceTree = ""; }; - C6A81BC517068EB000882C15 /* MCOSMTPOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOSMTPOperation.h; sourceTree = ""; }; - C6A81BC617068EB000882C15 /* MCOSMTPOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOSMTPOperation.mm; sourceTree = ""; }; - C6A81BD41706903500882C15 /* MCOPOPSession.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOPOPSession.h; sourceTree = ""; }; - C6A81BD51706903500882C15 /* MCOPOPSession.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOPOPSession.mm; sourceTree = ""; }; - C6A81BD81706903E00882C15 /* MCOPOPFetchHeaderOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOPOPFetchHeaderOperation.h; sourceTree = ""; }; - C6A81BD91706903E00882C15 /* MCOPOPFetchHeaderOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOPOPFetchHeaderOperation.mm; sourceTree = ""; }; - C6A81BDC1706904800882C15 /* MCOPOPFetchMessageOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOPOPFetchMessageOperation.h; sourceTree = ""; }; - C6A81BDD1706904800882C15 /* MCOPOPFetchMessageOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOPOPFetchMessageOperation.mm; sourceTree = ""; }; - C6A81BE01706905600882C15 /* MCOPOPOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOPOPOperation.h; sourceTree = ""; }; - C6A81BE11706905600882C15 /* MCOPOPOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOPOPOperation.mm; sourceTree = ""; }; - C6A81BE41706906C00882C15 /* MCOPOPFetchMessagesOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOPOPFetchMessagesOperation.h; sourceTree = ""; }; - C6A81BE51706906C00882C15 /* MCOPOPFetchMessagesOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOPOPFetchMessagesOperation.mm; sourceTree = ""; }; - C6A81BE81706A6B300882C15 /* MCOSMTP.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MCOSMTP.h; sourceTree = ""; }; - C6A81BFB170781BC00882C15 /* MCOPOP.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOPOP.h; sourceTree = ""; }; - C6A81BFE1707CEE400882C15 /* MCOPOPMessageInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOPOPMessageInfo.h; sourceTree = ""; }; - C6A81BFF1707CEE500882C15 /* MCOPOPMessageInfo.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOPOPMessageInfo.mm; sourceTree = ""; }; C6AC10FE17114DAF00B715B7 /* MCPOPCheckAccountOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCPOPCheckAccountOperation.cpp; sourceTree = ""; }; C6AC10FF17114DAF00B715B7 /* MCPOPCheckAccountOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCPOPCheckAccountOperation.h; sourceTree = ""; }; C6AC1131171249DF00B715B7 /* MCLibetpanTypes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MCLibetpanTypes.h; sourceTree = ""; }; @@ -2932,16 +2673,6 @@ C6BD28A2170BD79D00A91AC1 /* framework-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "framework-Info.plist"; sourceTree = ""; }; C6BD28A8170BDB6B00A91AC1 /* MCOFramework.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOFramework.h; sourceTree = ""; }; C6BD28A9170BDB6B00A91AC1 /* MCOFramework.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOFramework.mm; sourceTree = ""; }; - C6CCC5C616FFE5190077A5FC /* MCORange.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCORange.mm; sourceTree = ""; }; - C6CCC5C816FFE54F0077A5FC /* MCORange.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MCORange.h; sourceTree = ""; }; - C6CCC5CB16FFF7B50077A5FC /* MCOIndexSet+Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "MCOIndexSet+Private.h"; sourceTree = ""; }; - C6CF62B2175324CE006398B9 /* MCOMailProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOMailProvider.h; sourceTree = ""; }; - C6CF62B3175324CE006398B9 /* MCOMailProvider.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOMailProvider.mm; sourceTree = ""; }; - C6CF62B4175324CE006398B9 /* MCOMailProvidersManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOMailProvidersManager.h; sourceTree = ""; }; - C6CF62B5175324CE006398B9 /* MCOMailProvidersManager.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOMailProvidersManager.mm; sourceTree = ""; }; - C6CF62B6175324CE006398B9 /* MCONetService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCONetService.h; sourceTree = ""; }; - C6CF62B7175324CE006398B9 /* MCONetService.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCONetService.mm; sourceTree = ""; }; - C6CF62B8175324CE006398B9 /* MCOProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOProvider.h; sourceTree = ""; }; C6CF62BF175324F0006398B9 /* MCMailProvider.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCMailProvider.cpp; sourceTree = ""; }; C6CF62C0175324F0006398B9 /* MCMailProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCMailProvider.h; sourceTree = ""; }; C6CF62C1175324F0006398B9 /* MCMailProvidersManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCMailProvidersManager.cpp; sourceTree = ""; }; @@ -2949,10 +2680,6 @@ C6CF62C3175324F0006398B9 /* MCNetService.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCNetService.cpp; sourceTree = ""; }; C6CF62C4175324F0006398B9 /* MCNetService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCNetService.h; sourceTree = ""; }; C6CF62C5175324F0006398B9 /* MCProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCProvider.h; sourceTree = ""; }; - C6D42C1916AE03D6002BB4F9 /* NSData+MCO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSData+MCO.h"; sourceTree = ""; }; - C6D42C1A16AE03D6002BB4F9 /* NSData+MCO.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "NSData+MCO.mm"; sourceTree = ""; }; - C6D42C1B16AE03D6002BB4F9 /* NSString+MCO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+MCO.h"; sourceTree = ""; }; - C6D42C1C16AE03D6002BB4F9 /* NSString+MCO.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "NSString+MCO.mm"; sourceTree = ""; }; C6D4FD3E19FB7534001F7E01 /* MCMessageParserMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCMessageParserMac.mm; sourceTree = ""; }; C6D4FD4219FB7DAA001F7E01 /* MCDataMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCDataMac.mm; sourceTree = ""; }; C6D6F7F7171E595D006F5B28 /* MCJSON.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCJSON.cpp; sourceTree = ""; }; @@ -2973,81 +2700,20 @@ C6E665B21796500B0063F2CF /* unzip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = unzip.h; sourceTree = ""; }; C6E665B31796500B0063F2CF /* zip.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip.c; sourceTree = ""; }; C6E665B41796500B0063F2CF /* zip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = zip.h; sourceTree = ""; }; - C6EB30DC16B5B7770091F4F1 /* MCObjC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCObjC.h; sourceTree = ""; }; - C6EB30F516B8C9480091F4F1 /* NSDictionary+MCO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDictionary+MCO.h"; sourceTree = ""; }; - C6EB30F616B8C9480091F4F1 /* NSDictionary+MCO.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "NSDictionary+MCO.mm"; sourceTree = ""; }; - C6EB30FC16B8E50F0091F4F1 /* NSArray+MCO.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "NSArray+MCO.mm"; sourceTree = ""; }; - C6EB30FD16B8E50F0091F4F1 /* NSArray+MCO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+MCO.h"; sourceTree = ""; }; - C6EB30FF16B8E6E50091F4F1 /* NSObject+MCO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+MCO.h"; sourceTree = ""; }; - C6EB310016B8E6E50091F4F1 /* NSObject+MCO.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "NSObject+MCO.mm"; sourceTree = ""; }; C6ED6D1917A1919500A4A14C /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; C6ED6D1C17A191BF00A4A14C /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; C6EFFBC6182BBF5700CFF656 /* MCIMAPMultiDisconnectOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCIMAPMultiDisconnectOperation.cpp; sourceTree = ""; }; C6EFFBC7182BBF5700CFF656 /* MCIMAPMultiDisconnectOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCIMAPMultiDisconnectOperation.h; sourceTree = ""; }; - C6EFFBCA1833334900CFF656 /* MCOIMAPMultiDisconnectOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOIMAPMultiDisconnectOperation.h; sourceTree = ""; }; - C6EFFBCB1833334900CFF656 /* MCOIMAPMultiDisconnectOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOIMAPMultiDisconnectOperation.mm; sourceTree = ""; }; - C6F49A911C8EA1450087F4B7 /* MCOIMAPCheckAccountOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOIMAPCheckAccountOperation.h; sourceTree = ""; }; - C6F49A921C8EA1450087F4B7 /* MCOIMAPCheckAccountOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOIMAPCheckAccountOperation.mm; sourceTree = ""; }; - C6F5B9E016FEA1E800D9DABD /* MCOIMAPMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOIMAPMessage.h; sourceTree = ""; }; - C6F5B9E116FEA1E800D9DABD /* MCOIMAPMessage.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOIMAPMessage.mm; sourceTree = ""; }; - C6F5B9E316FEA27500D9DABD /* MCOIMAPMessagePart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOIMAPMessagePart.h; sourceTree = ""; }; - C6F5B9E416FEA27500D9DABD /* MCOIMAPMessagePart.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOIMAPMessagePart.mm; sourceTree = ""; }; - C6F5B9E616FEA28600D9DABD /* MCOIMAPMultipart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOIMAPMultipart.h; sourceTree = ""; }; - C6F5B9E716FEA28600D9DABD /* MCOIMAPMultipart.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOIMAPMultipart.mm; sourceTree = ""; }; - C6F5B9E916FEA3B500D9DABD /* MCOIMAPNamespace.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOIMAPNamespace.h; sourceTree = ""; }; - C6F5B9EA16FEA3B500D9DABD /* MCOIMAPNamespace.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOIMAPNamespace.mm; sourceTree = ""; }; - C6F5B9EC16FEA3C400D9DABD /* MCOIMAPNamespaceItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOIMAPNamespaceItem.h; sourceTree = ""; }; - C6F5B9ED16FEA3C400D9DABD /* MCOIMAPNamespaceItem.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOIMAPNamespaceItem.mm; sourceTree = ""; }; - C6F5B9EF16FEA3D700D9DABD /* MCOIMAPPart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOIMAPPart.h; sourceTree = ""; }; - C6F5B9F016FEA3D700D9DABD /* MCOIMAPPart.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOIMAPPart.mm; sourceTree = ""; }; - C6F5B9F216FEAC6C00D9DABD /* MCOIndexSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOIndexSet.h; sourceTree = ""; }; - C6F5B9F316FEAC6C00D9DABD /* MCOIndexSet.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOIndexSet.mm; sourceTree = ""; }; - C6F5B9FC16FED18500D9DABD /* MCOAbstractMessageRendererCallback.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOAbstractMessageRendererCallback.mm; sourceTree = ""; }; - C6F5B9FD16FED18500D9DABD /* MCOAbstractMessageRendererCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOAbstractMessageRendererCallback.h; sourceTree = ""; }; - C6F5B9FF16FED7AB00D9DABD /* MCOHTMLRendererIMAPDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MCOHTMLRendererIMAPDelegate.h; sourceTree = ""; }; - C6F61F79170169EE0073032E /* MCOIMAPFolderInfoOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOIMAPFolderInfoOperation.h; sourceTree = ""; }; - C6F61F7A170169EE0073032E /* MCOIMAPFolderInfoOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOIMAPFolderInfoOperation.mm; sourceTree = ""; }; - C6F61F7C170169FB0073032E /* MCOIMAPAppendMessageOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOIMAPAppendMessageOperation.h; sourceTree = ""; }; - C6F61F7D170169FB0073032E /* MCOIMAPAppendMessageOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOIMAPAppendMessageOperation.mm; sourceTree = ""; }; - C6F61F7F17016A0D0073032E /* MCOIMAPCopyMessagesOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOIMAPCopyMessagesOperation.h; sourceTree = ""; }; - C6F61F8017016A0D0073032E /* MCOIMAPCopyMessagesOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOIMAPCopyMessagesOperation.mm; sourceTree = ""; }; - C6F61F8217016A200073032E /* MCOIMAPFetchMessagesOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOIMAPFetchMessagesOperation.h; sourceTree = ""; }; - C6F61F8317016A200073032E /* MCOIMAPFetchMessagesOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOIMAPFetchMessagesOperation.mm; sourceTree = ""; }; - C6F61F8517016AD60073032E /* MCOIMAPFetchContentOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOIMAPFetchContentOperation.h; sourceTree = ""; }; - C6F61F8617016AD60073032E /* MCOIMAPFetchContentOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOIMAPFetchContentOperation.mm; sourceTree = ""; }; - C6F61F8817016AE60073032E /* MCOIMAPSearchOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOIMAPSearchOperation.h; sourceTree = ""; }; - C6F61F8917016AE60073032E /* MCOIMAPSearchOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOIMAPSearchOperation.mm; sourceTree = ""; }; - C6F61F8B17016AFA0073032E /* MCOIMAPIdleOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOIMAPIdleOperation.h; sourceTree = ""; }; - C6F61F8C17016AFA0073032E /* MCOIMAPIdleOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOIMAPIdleOperation.mm; sourceTree = ""; }; - C6F61F8E17016B090073032E /* MCOIMAPFetchNamespaceOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOIMAPFetchNamespaceOperation.h; sourceTree = ""; }; - C6F61F8F17016B090073032E /* MCOIMAPFetchNamespaceOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOIMAPFetchNamespaceOperation.mm; sourceTree = ""; }; - C6F61F9117016B250073032E /* MCOIMAPIdentityOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOIMAPIdentityOperation.h; sourceTree = ""; }; - C6F61F9217016B250073032E /* MCOIMAPIdentityOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOIMAPIdentityOperation.mm; sourceTree = ""; }; - C6F61F9417016B310073032E /* MCOIMAPCapabilityOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOIMAPCapabilityOperation.h; sourceTree = ""; }; - C6F61F9517016B310073032E /* MCOIMAPCapabilityOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOIMAPCapabilityOperation.mm; sourceTree = ""; }; - C6F61F9717016B460073032E /* MCOIMAPSearchExpression.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOIMAPSearchExpression.h; sourceTree = ""; }; - C6F61F9817016B460073032E /* MCOIMAPSearchExpression.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOIMAPSearchExpression.mm; sourceTree = ""; }; - C6F61F9D17016EA00073032E /* MCOIMAPFolderInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOIMAPFolderInfo.h; sourceTree = ""; }; - C6F61F9E17016EA00073032E /* MCOIMAPFolderInfo.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOIMAPFolderInfo.mm; sourceTree = ""; }; - C6F61FB31702AB2A0073032E /* MCOIMAPBaseOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOIMAPBaseOperation.h; sourceTree = ""; }; - C6F61FB41702AB2F0073032E /* MCOIMAPBaseOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOIMAPBaseOperation.mm; sourceTree = ""; }; C6F7B19D17A1C15200BE78BB /* MCCertificateUtils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCCertificateUtils.cpp; sourceTree = ""; }; C6F7B19E17A1C15200BE78BB /* MCCertificateUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCCertificateUtils.h; sourceTree = ""; }; DA0F1C79177C07B300F0D3B4 /* MCIMAPMessageRenderingOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCIMAPMessageRenderingOperation.cpp; sourceTree = ""; }; DA0F1C7A177C07B300F0D3B4 /* MCIMAPMessageRenderingOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCIMAPMessageRenderingOperation.h; sourceTree = ""; }; - DA89896B178A47D200F6D90A /* MCOIMAPMessageRenderingOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOIMAPMessageRenderingOperation.h; sourceTree = ""; }; - DA89896C178A47D200F6D90A /* MCOIMAPMessageRenderingOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOIMAPMessageRenderingOperation.mm; sourceTree = ""; }; DAACAD4F17886807000B4517 /* MCHTMLRendererIMAPDataCallback.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCHTMLRendererIMAPDataCallback.cpp; sourceTree = ""; }; DAACAD5017886807000B4517 /* MCHTMLRendererIMAPDataCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCHTMLRendererIMAPDataCallback.h; sourceTree = ""; }; DAD28C891783CFFC00F2BB8F /* MCHTMLBodyRendererTemplateCallback.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCHTMLBodyRendererTemplateCallback.cpp; sourceTree = ""; }; DAD28C8A1783CFFC00F2BB8F /* MCHTMLBodyRendererTemplateCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCHTMLBodyRendererTemplateCallback.h; sourceTree = ""; }; F382219D1C7A60A800E00721 /* MCNNTPPostOperation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MCNNTPPostOperation.h; sourceTree = ""; }; F382219E1C7A626700E00721 /* MCNNTPPostOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCNNTPPostOperation.cpp; sourceTree = ""; }; - F38221A11C7AAD8100E00721 /* MCONNTPPostOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCONNTPPostOperation.h; sourceTree = ""; }; - F38221A21C7AAD8100E00721 /* MCONNTPPostOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCONNTPPostOperation.mm; sourceTree = ""; }; - F87F190816BB62690012652F /* MCOIMAPFetchFoldersOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOIMAPFetchFoldersOperation.h; sourceTree = ""; }; - F87F190B16BB62B00012652F /* MCOIMAPFetchFoldersOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOIMAPFetchFoldersOperation.mm; sourceTree = ""; }; - F8EA941416BAED6E0011AC6F /* MCOIMAPSession.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOIMAPSession.h; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -3060,6 +2726,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 841E64F71F683440007BB736 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 841E64FF1F683440007BB736 /* MailCore.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; C600B6111A242C3F000728F1 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -3145,6 +2819,257 @@ name = OSX; sourceTree = ""; }; + 8408C6D81F26340F0003A816 /* objc */ = { + isa = PBXGroup; + children = ( + 843E4A071F306D4600D78022 /* abstract */, + 843E4A1C1F306D5A00D78022 /* imap */, + 843E4A651F306D7E00D78022 /* provider */, + 843E4A6F1F306D9700D78022 /* rfc822 */, + 8408C6D91F2634190003A816 /* utils */, + ); + name = objc; + sourceTree = ""; + }; + 8408C6D91F2634190003A816 /* utils */ = { + isa = PBXGroup; + children = ( + 8408C6DE1F26345C0003A816 /* MCOIndexSet.h */, + 8408C6DF1F26345C0003A816 /* MCOIndexSet.mm */, + 8408C6E01F26345C0003A816 /* MCOIndexSet+Private.h */, + 843E4A7E1F306F2600D78022 /* MCOObjectWrapper.h */, + 843E4A7F1F306F2600D78022 /* MCOObjectWrapper.mm */, + 843E4A7B1F306E0900D78022 /* MCOOperation.h */, + 843E4A7C1F306E0900D78022 /* MCOOperation.mm */, + 843E4A7D1F306E0900D78022 /* MCOOperation+Private.h */, + 8408C6E11F26345C0003A816 /* MCORange.h */, + 8408C6E21F26345C0003A816 /* MCORange.mm */, + 843E4A801F306F3D00D78022 /* MCOUtils.h */, + 8408C6E31F26345C0003A816 /* NSArray+MCO.h */, + 8408C6E41F26345C0003A816 /* NSArray+MCO.mm */, + 8408C6E51F26345C0003A816 /* NSData+MCO.h */, + 8408C6E61F26345C0003A816 /* NSData+MCO.mm */, + 8408C6E71F26345C0003A816 /* NSDictionary+MCO.h */, + 8408C6E81F26345C0003A816 /* NSDictionary+MCO.mm */, + 8408C6E91F26345C0003A816 /* NSError+MCO.h */, + 8408C6EA1F26345C0003A816 /* NSError+MCO.mm */, + 8408C6EB1F26345C0003A816 /* NSIndexSet+MCO.h */, + 8408C6EC1F26345C0003A816 /* NSIndexSet+MCO.m */, + 8408C6ED1F26345C0003A816 /* NSObject+MCO.h */, + 8408C6EE1F26345C0003A816 /* NSObject+MCO.mm */, + 8408C6EF1F26345C0003A816 /* NSSet+MCO.h */, + 8408C6F01F26345C0003A816 /* NSSet+MCO.mm */, + 8408C6F11F26345C0003A816 /* NSString+MCO.h */, + 8408C6F21F26345C0003A816 /* NSString+MCO.mm */, + 8408C6F31F26345C0003A816 /* NSValue+MCO.h */, + 8408C6F41F26345C0003A816 /* NSValue+MCO.mm */, + ); + name = utils; + sourceTree = ""; + }; + 8408C7F71F26377E0003A816 /* rfc822 */ = { + isa = PBXGroup; + children = ( + 8408C7F81F26378D0003A816 /* CAttachment.cpp */, + 8408C7F91F26378D0003A816 /* CAttachment.h */, + 8408C7FA1F26378D0003A816 /* CMessageBuilder.cpp */, + 8408C7FB1F26378D0003A816 /* CMessageBuilder.h */, + 8408C7FC1F26378D0003A816 /* CMessageParser.cpp */, + 8408C7FD1F26378D0003A816 /* CMessageParser.h */, + 844D9CDE1F28F1F500E470A8 /* CMessagePart.cpp */, + 844D9CDF1F28F1F500E470A8 /* CMessagePart.h */, + 84AD848F1F435DEB000361A3 /* CMultipart.cpp */, + 84AD84901F435DEB000361A3 /* CMultipart.h */, + ); + name = rfc822; + sourceTree = ""; + }; + 8408C80A1F26379D0003A816 /* rfc822 */ = { + isa = PBXGroup; + children = ( + 8408C80B1F2637B50003A816 /* Attachment.swift */, + 8408C80C1F2637B50003A816 /* MessageBuilder.swift */, + 8408C80D1F2637B50003A816 /* MessageParser.swift */, + 846693041F6829A90020C6C9 /* MessagePart.swift */, + 84AD84951F435F9A000361A3 /* Multipart.swift */, + ); + name = rfc822; + sourceTree = ""; + }; + 841E64FB1F683440007BB736 /* MailCoreTests */ = { + isa = PBXGroup; + children = ( + 841E65051F683481007BB736 /* data */, + 841E65061F68348B007BB736 /* unittest.swift */, + 843EA47E1F7966A400861123 /* LibetpanHelperTests.swift */, + 841E64FE1F683440007BB736 /* Info.plist */, + ); + path = MailCoreTests; + sourceTree = ""; + }; + 843E4A071F306D4600D78022 /* abstract */ = { + isa = PBXGroup; + children = ( + 843E4A081F306D5100D78022 /* MCOAbstract.h */, + 843E4A091F306D5100D78022 /* MCOAbstractMessage.h */, + 843E4A0A1F306D5100D78022 /* MCOAbstractMessage.mm */, + 843E4A0B1F306D5100D78022 /* MCOAbstractMessagePart.h */, + 843E4A0C1F306D5100D78022 /* MCOAbstractMessagePart.mm */, + 843E4A0D1F306D5100D78022 /* MCOAbstractMessageRendererCallback.h */, + 843E4A0E1F306D5100D78022 /* MCOAbstractMessageRendererCallback.mm */, + 843E4A0F1F306D5100D78022 /* MCOAbstractMultipart.h */, + 843E4A101F306D5100D78022 /* MCOAbstractMultipart.mm */, + 843E4A111F306D5100D78022 /* MCOAbstractPart.h */, + 843E4A121F306D5100D78022 /* MCOAbstractPart.mm */, + 843E4A131F306D5100D78022 /* MCOAddress.h */, + 843E4A141F306D5100D78022 /* MCOAddress.mm */, + 843E4A151F306D5100D78022 /* MCOAddress+Private.h */, + 843E4A161F306D5100D78022 /* MCOConstants.h */, + 843E4A171F306D5100D78022 /* MCOHTMLRendererDelegate.h */, + 843E4A181F306D5100D78022 /* MCOHTMLRendererIMAPDelegate.h */, + 843E4A191F306D5100D78022 /* MCOMessageHeader.h */, + 843E4A1A1F306D5100D78022 /* MCOMessageHeader.mm */, + 843E4A1B1F306D5100D78022 /* MCOMessageHeader+Private.h */, + ); + name = abstract; + sourceTree = ""; + }; + 843E4A1C1F306D5A00D78022 /* imap */ = { + isa = PBXGroup; + children = ( + 843E4A1D1F306D6F00D78022 /* MCOIMAP.h */, + 843E4A1E1F306D6F00D78022 /* MCOIMAPAppendMessageOperation.h */, + 843E4A1F1F306D6F00D78022 /* MCOIMAPAppendMessageOperation.mm */, + 843E4A201F306D6F00D78022 /* MCOIMAPBaseOperation.h */, + 843E4A211F306D6F00D78022 /* MCOIMAPBaseOperation.mm */, + 843E4A221F306D6F00D78022 /* MCOIMAPBaseOperation+Private.h */, + 843E4A231F306D6F00D78022 /* MCOIMAPCapabilityOperation.h */, + 843E4A241F306D6F00D78022 /* MCOIMAPCapabilityOperation.mm */, + 843E4A251F306D6F00D78022 /* MCOIMAPCheckAccountOperation.h */, + 843E4A261F306D6F00D78022 /* MCOIMAPCheckAccountOperation.mm */, + 843E4A271F306D6F00D78022 /* MCOIMAPCopyMessagesOperation.h */, + 843E4A281F306D6F00D78022 /* MCOIMAPCopyMessagesOperation.mm */, + 843E4A291F306D6F00D78022 /* MCOIMAPCustomCommandOperation.h */, + 843E4A2A1F306D6F00D78022 /* MCOIMAPCustomCommandOperation.mm */, + 843E4A2B1F306D6F00D78022 /* MCOIMAPFetchContentOperation.h */, + 843E4A2C1F306D6F00D78022 /* MCOIMAPFetchContentOperation.mm */, + 843E4A2D1F306D6F00D78022 /* MCOIMAPFetchContentToFileOperation.h */, + 843E4A2E1F306D6F00D78022 /* MCOIMAPFetchContentToFileOperation.mm */, + 843E4A2F1F306D6F00D78022 /* MCOIMAPFetchFoldersOperation.h */, + 843E4A301F306D6F00D78022 /* MCOIMAPFetchFoldersOperation.mm */, + 843E4A311F306D6F00D78022 /* MCOIMAPFetchMessagesOperation.h */, + 843E4A321F306D6F00D78022 /* MCOIMAPFetchMessagesOperation.mm */, + 843E4A331F306D6F00D78022 /* MCOIMAPFetchNamespaceOperation.h */, + 843E4A341F306D6F00D78022 /* MCOIMAPFetchNamespaceOperation.mm */, + 843E4A351F306D6F00D78022 /* MCOIMAPFetchParsedContentOperation.h */, + 843E4A361F306D6F00D78022 /* MCOIMAPFetchParsedContentOperation.mm */, + 843E4A371F306D6F00D78022 /* MCOIMAPFolder.h */, + 843E4A381F306D6F00D78022 /* MCOIMAPFolder.mm */, + 843E4A391F306D6F00D78022 /* MCOIMAPFolderInfo.h */, + 843E4A3A1F306D6F00D78022 /* MCOIMAPFolderInfo.mm */, + 843E4A3B1F306D6F00D78022 /* MCOIMAPFolderInfoOperation.h */, + 843E4A3C1F306D6F00D78022 /* MCOIMAPFolderInfoOperation.mm */, + 843E4A3D1F306D6F00D78022 /* MCOIMAPFolderStatus.h */, + 843E4A3E1F306D6F00D78022 /* MCOIMAPFolderStatus.mm */, + 843E4A3F1F306D6F00D78022 /* MCOIMAPFolderStatusOperation.h */, + 843E4A401F306D6F00D78022 /* MCOIMAPFolderStatusOperation.mm */, + 843E4A411F306D6F00D78022 /* MCOIMAPIdentity.h */, + 843E4A421F306D6F00D78022 /* MCOIMAPIdentity.mm */, + 843E4A431F306D6F00D78022 /* MCOIMAPIdentityOperation.h */, + 843E4A441F306D6F00D78022 /* MCOIMAPIdentityOperation.mm */, + 843E4A451F306D6F00D78022 /* MCOIMAPIdleOperation.h */, + 843E4A461F306D6F00D78022 /* MCOIMAPIdleOperation.mm */, + 843E4A471F306D6F00D78022 /* MCOIMAPMessage.h */, + 843E4A481F306D6F00D78022 /* MCOIMAPMessage.mm */, + 843E4A491F306D6F00D78022 /* MCOIMAPMessagePart.h */, + 843E4A4A1F306D6F00D78022 /* MCOIMAPMessagePart.mm */, + 843E4A4B1F306D6F00D78022 /* MCOIMAPMessageRenderingOperation.h */, + 843E4A4C1F306D6F00D78022 /* MCOIMAPMessageRenderingOperation.mm */, + 843E4A4D1F306D6F00D78022 /* MCOIMAPMoveMessagesOperation.h */, + 843E4A4E1F306D6F00D78022 /* MCOIMAPMoveMessagesOperation.mm */, + 843E4A4F1F306D6F00D78022 /* MCOIMAPMultiDisconnectOperation.h */, + 843E4A501F306D6F00D78022 /* MCOIMAPMultiDisconnectOperation.mm */, + 843E4A511F306D6F00D78022 /* MCOIMAPMultipart.h */, + 843E4A521F306D6F00D78022 /* MCOIMAPMultipart.mm */, + 843E4A531F306D6F00D78022 /* MCOIMAPNamespace.h */, + 843E4A541F306D6F00D78022 /* MCOIMAPNamespace.mm */, + 843E4A551F306D6F00D78022 /* MCOIMAPNamespaceItem.h */, + 843E4A561F306D6F00D78022 /* MCOIMAPNamespaceItem.mm */, + 843E4A571F306D6F00D78022 /* MCOIMAPNoopOperation.h */, + 843E4A581F306D6F00D78022 /* MCOIMAPNoopOperation.mm */, + 843E4A591F306D6F00D78022 /* MCOIMAPOperation.h */, + 843E4A5A1F306D6F00D78022 /* MCOIMAPOperation.mm */, + 843E4A5B1F306D6F00D78022 /* MCOIMAPPart.h */, + 843E4A5C1F306D6F00D78022 /* MCOIMAPPart.mm */, + 843E4A5D1F306D6F00D78022 /* MCOIMAPQuotaOperation.h */, + 843E4A5E1F306D6F00D78022 /* MCOIMAPQuotaOperation.mm */, + 843E4A5F1F306D6F00D78022 /* MCOIMAPSearchExpression.h */, + 843E4A601F306D6F00D78022 /* MCOIMAPSearchExpression.mm */, + 843E4A611F306D6F00D78022 /* MCOIMAPSearchOperation.h */, + 843E4A621F306D6F00D78022 /* MCOIMAPSearchOperation.mm */, + 843E4A631F306D6F00D78022 /* MCOIMAPSession.h */, + 843E4A641F306D6F00D78022 /* MCOIMAPSession.mm */, + ); + name = imap; + sourceTree = ""; + }; + 843E4A651F306D7E00D78022 /* provider */ = { + isa = PBXGroup; + children = ( + 843E4A661F306D8D00D78022 /* MCOAccountValidator.h */, + 843E4A671F306D8D00D78022 /* MCOAccountValidator.mm */, + 843E4A681F306D8D00D78022 /* MCOMailProvider.h */, + 843E4A691F306D8D00D78022 /* MCOMailProvider.mm */, + 843E4A6A1F306D8D00D78022 /* MCOMailProvidersManager.h */, + 843E4A6B1F306D8D00D78022 /* MCOMailProvidersManager.mm */, + 843E4A6C1F306D8D00D78022 /* MCONetService.h */, + 843E4A6D1F306D8D00D78022 /* MCONetService.mm */, + 843E4A6E1F306D8D00D78022 /* MCOProvider.h */, + ); + name = provider; + sourceTree = ""; + }; + 843E4A6F1F306D9700D78022 /* rfc822 */ = { + isa = PBXGroup; + children = ( + 843E4A701F306DA300D78022 /* MCOAttachment.h */, + 843E4A711F306DA300D78022 /* MCOAttachment.mm */, + 843E4A721F306DA300D78022 /* MCOMessageBuilder.h */, + 843E4A731F306DA300D78022 /* MCOMessageBuilder.mm */, + 843E4A741F306DA300D78022 /* MCOMessageParser.h */, + 843E4A751F306DA300D78022 /* MCOMessageParser.mm */, + 843E4A761F306DA300D78022 /* MCOMessagePart.h */, + 843E4A771F306DA300D78022 /* MCOMessagePart.mm */, + 843E4A781F306DA300D78022 /* MCOMultipart.h */, + 843E4A791F306DA300D78022 /* MCOMultipart.mm */, + 843E4A7A1F306DA300D78022 /* MCORFC822.h */, + ); + name = rfc822; + sourceTree = ""; + }; + 845FB83F1F2902F000A29DA8 /* provider */ = { + isa = PBXGroup; + children = ( + 845FB84C1F2909A000A29DA8 /* CMailProvider.cpp */, + 845FB84D1F2909A000A29DA8 /* CMailProvider.h */, + 845FB8401F29031400A29DA8 /* CMailProvidersManager.cpp */, + 845FB8411F29031400A29DA8 /* CMailProvidersManager.h */, + 845FB8461F29057A00A29DA8 /* CNetService.cpp */, + 845FB8471F29057A00A29DA8 /* CNetService.h */, + ); + name = provider; + sourceTree = ""; + }; + 845FB8521F290CC500A29DA8 /* provider */ = { + isa = PBXGroup; + children = ( + 845FB8591F2910D700A29DA8 /* MailProvider.swift */, + 845FB85C1F2914D200A29DA8 /* MailProvidersManager.swift */, + 845FB8561F290CF000A29DA8 /* NetService.swift */, + ); + name = provider; + sourceTree = ""; + }; 8491899A18C93F6E002063A3 /* nntp */ = { isa = PBXGroup; children = ( @@ -3158,6 +3083,32 @@ name = nntp; sourceTree = ""; }; + 8498CCB31D9523C90074217C /* abstract */ = { + isa = PBXGroup; + children = ( + 843AFCD31D9579F30086FB46 /* AbstractMessage.swift */, + 843AFCD41D9579F30086FB46 /* AbstractMessagePart.swift */, + 84A929151DA7B9790020205B /* AbstractMessageRendererCallback.swift */, + 843AFCD51D9579F30086FB46 /* AbstractMultipart.swift */, + 843AFCD61D9579F30086FB46 /* AbstractPart.swift */, + 843AFCD71D9579F30086FB46 /* Address.swift */, + 84A929111DA7B5BB0020205B /* HTMLRendererDelegate.swift */, + 84A929131DA7B8480020205B /* HTMLRendererImapDelegate.swift */, + 84FEDEC21F28979900A9E88C /* MessageConstants.swift */, + 843AFCD81D9579F30086FB46 /* MessageHeader.swift */, + ); + name = abstract; + sourceTree = ""; + }; + 84AC02E81F6A99EA00519B08 /* CMailCore */ = { + isa = PBXGroup; + children = ( + 84AC02E91F6A9A0100519B08 /* CMailCore.h */, + 84AC02EA1F6A9A0200519B08 /* module.modulemap */, + ); + name = CMailCore; + sourceTree = ""; + }; 84AF9E72172DACC900E60AA3 /* provider */ = { isa = PBXGroup; children = ( @@ -3176,20 +3127,36 @@ path = provider; sourceTree = ""; }; - 84AF9E84172DBC1000E60AA3 /* provider */ = { + 84B110A61D92923F0079C769 /* utils */ = { isa = PBXGroup; children = ( - 27478E821A7646F8004AE621 /* MCOAccountValidator.h */, - 27478E831A7646F8004AE621 /* MCOAccountValidator.mm */, - C6CF62B2175324CE006398B9 /* MCOMailProvider.h */, - C6CF62B3175324CE006398B9 /* MCOMailProvider.mm */, - C6CF62B4175324CE006398B9 /* MCOMailProvidersManager.h */, - C6CF62B5175324CE006398B9 /* MCOMailProvidersManager.mm */, - C6CF62B6175324CE006398B9 /* MCONetService.h */, - C6CF62B7175324CE006398B9 /* MCONetService.mm */, - C6CF62B8175324CE006398B9 /* MCOProvider.h */, + 84B110A71D92924C0079C769 /* COperation.cpp */, + 84B110A81D92924C0079C769 /* COperation.h */, + 84C18948223808A3001430F3 /* CAutoreleasePool.cpp */, + 84C18949223808A3001430F3 /* CAutoreleasePool.h */, ); - path = provider; + name = utils; + sourceTree = ""; + }; + 84B8920D1DA26893008FD1C4 /* smtp */ = { + isa = PBXGroup; + children = ( + 84B892121DA27A54008FD1C4 /* CSMTPOperation.cpp */, + 84B892131DA27A54008FD1C4 /* CSMTPOperation.h */, + 84B8920E1DA268F8008FD1C4 /* CSMTPSession.cpp */, + 84B8920F1DA268F8008FD1C4 /* CSMTPSession.h */, + ); + name = smtp; + sourceTree = ""; + }; + 84B892161DA27FA1008FD1C4 /* smtp */ = { + isa = PBXGroup; + children = ( + 84B892191DA28121008FD1C4 /* SMTPOperation.swift */, + 84B8921F1DA29A3B008FD1C4 /* SMTPSendOperation.swift */, + 84B892171DA27FDD008FD1C4 /* SMTPSession.swift */, + ); + name = smtp; sourceTree = ""; }; 84D73728199BF61B005124E5 /* nntp */ = { @@ -3223,35 +3190,226 @@ path = nntp; sourceTree = ""; }; - 84D73760199BFF6A005124E5 /* nntp */ = { + 84E3DB321D997D04003B598F /* utils */ = { isa = PBXGroup; children = ( - 84D73761199BFF80005124E5 /* MCONNTP.h */, - 84D73762199BFFC7005124E5 /* MCONNTPSession.h */, - 84D73763199BFFC7005124E5 /* MCONNTPSession.mm */, - 84D73766199BFFFC005124E5 /* MCONNTPOperation.h */, - 84D7376A199C0014005124E5 /* MCONNTPOperation+Private.h */, - 84D73767199BFFFC005124E5 /* MCONNTPOperation.mm */, - 84D7376B199C005A005124E5 /* MCONNTPFetchHeaderOperation.h */, - 84D7376C199C005A005124E5 /* MCONNTPFetchHeaderOperation.mm */, - 84D7376F199C007E005124E5 /* MCONNTPFetchArticleOperation.h */, - 84D73770199C007E005124E5 /* MCONNTPFetchArticleOperation.mm */, - 84D73789199C0260005124E5 /* MCONNTPListNewsgroupsOperation.h */, - 84D7378A199C0260005124E5 /* MCONNTPListNewsgroupsOperation.mm */, - 84CFA98119F7153B00FE35D2 /* MCONNTPFetchOverviewOperation.h */, - 84CFA98219F7153B00FE35D2 /* MCONNTPFetchOverviewOperation.mm */, - 84D73773199C00AB005124E5 /* MCONNTPFetchAllArticlesOperation.h */, - 84D73774199C00AB005124E5 /* MCONNTPFetchAllArticlesOperation.mm */, - 84CFA99319F725CB00FE35D2 /* MCONNTPFetchServerTimeOperation.h */, - 84CFA99419F725CB00FE35D2 /* MCONNTPFetchServerTimeOperation.mm */, - 84D7378D199C02A8005124E5 /* MCONNTPDisconnectOperation.h */, - 84D7378E199C02A8005124E5 /* MCONNTPDisconnectOperation.mm */, - 84D73791199C0511005124E5 /* MCONNTPGroupInfo.h */, - 84D73792199C0511005124E5 /* MCONNTPGroupInfo.mm */, - F38221A11C7AAD8100E00721 /* MCONNTPPostOperation.h */, - F38221A21C7AAD8100E00721 /* MCONNTPPostOperation.mm */, + 843E49FB1F2F9A4700D78022 /* ConnectionLoggerHelper.swift */, + 84E3DB3B1D9A8459003B598F /* MailCoreError.swift */, + 84E3DB331D997D32003B598F /* Operation.swift */, + 843E58141F6927D900AE681B /* DispatchQueue+Mailcore.swift */, + 843EA47B1F795A5400861123 /* LibetpanHelper.swift */, + 8029D8C51F96408900BF5BC4 /* NSObjectCompat.swift */, ); - path = nntp; + name = utils; + sourceTree = ""; + }; + 84F7B4081D915971005F83E8 /* c */ = { + isa = PBXGroup; + children = ( + 84F7B43C1D9159E0005F83E8 /* abstract */, + 84F7B40F1D91598B005F83E8 /* basetypes */, + 84F7B40D1D915985005F83E8 /* CBase.h */, + 847530611F2230B30011100D /* CBase+Private.h */, + 84F7B40E1D915985005F83E8 /* CCore.h */, + 84F7B41E1D9159C6005F83E8 /* imap */, + 845FB83F1F2902F000A29DA8 /* provider */, + 8408C7F71F26377E0003A816 /* rfc822 */, + 84B8920D1DA26893008FD1C4 /* smtp */, + 84B110A61D92923F0079C769 /* utils */, + ); + name = c; + sourceTree = ""; + }; + 84F7B40F1D91598B005F83E8 /* basetypes */ = { + isa = PBXGroup; + children = ( + 84F7B4101D915997005F83E8 /* CArray.cpp */, + 84F7B4111D915997005F83E8 /* CArray.h */, + 84D72F1B1F32161800F570BC /* CData.cpp */, + 84D72F1C1F32161800F570BC /* CData.h */, + 84E3DB3F1D9AA676003B598F /* CDictionary.cpp */, + 84E3DB401D9AA676003B598F /* CDictionary.h */, + 84F7B4121D915997005F83E8 /* CIndexSet.cpp */, + 84F7B4131D915997005F83E8 /* CIndexSet.h */, + 84F7B4141D915997005F83E8 /* CObject.cpp */, + 84F7B4151D915997005F83E8 /* CObject.h */, + 843E4A851F30838500D78022 /* MailCoreString.cpp */, + 843E4A861F30838500D78022 /* MailCoreString.h */, + ); + name = basetypes; + sourceTree = ""; + }; + 84F7B41E1D9159C6005F83E8 /* imap */ = { + isa = PBXGroup; + children = ( + 84F7B45A1D915D88005F83E8 /* CIMAPAppendMessageOperation.cpp */, + 84F7B45B1D915D88005F83E8 /* CIMAPAppendMessageOperation.h */, + 84F7B45C1D915D88005F83E8 /* CIMAPAsyncSession.cpp */, + 84F7B45D1D915D88005F83E8 /* CIMAPAsyncSession.h */, + 84B110AF1D929B560079C769 /* CIMAPBaseOperation.cpp */, + 84B110B01D929B560079C769 /* CIMAPBaseOperation.h */, + 8491BB611DF6E74800E6D679 /* CIMAPCapabilityOperation.cpp */, + 8491BB621DF6E74800E6D679 /* CIMAPCapabilityOperation.h */, + 8491BB651DF6F64400E6D679 /* CIMAPCheckAccountOperation.cpp */, + 8491BB661DF6F64400E6D679 /* CIMAPCheckAccountOperation.h */, + 84F7B45E1D915D88005F83E8 /* CIMAPCopyMessagesOperation.cpp */, + 84F7B45F1D915D88005F83E8 /* CIMAPCopyMessagesOperation.h */, + 8491BB6B1DF7028C00E6D679 /* CIMAPCustomCommandOperation.cpp */, + 8491BB6C1DF7028C00E6D679 /* CIMAPCustomCommandOperation.h */, + 84F7B4601D915D88005F83E8 /* CIMAPFetchContentOperation.cpp */, + 84F7B4611D915D88005F83E8 /* CIMAPFetchContentOperation.h */, + 84D344D91DF7090700B81A94 /* CIMAPFetchContentToFileOperation.cpp */, + 84D344DA1DF7090700B81A94 /* CIMAPFetchContentToFileOperation.h */, + 84E1E0251DF5D33B00D45A31 /* CIMAPFetchFoldersOperation.cpp */, + 84E1E0261DF5D33B00D45A31 /* CIMAPFetchFoldersOperation.h */, + 84F7B4621D915D88005F83E8 /* CIMAPFetchMessagesOperation.cpp */, + 84F7B4631D915D88005F83E8 /* CIMAPFetchMessagesOperation.h */, + 84D344DF1DF712D500B81A94 /* CIMAPFetchNamespaceOperation.cpp */, + 84D344E01DF712D500B81A94 /* CIMAPFetchNamespaceOperation.h */, + 842D79991DF801AE00F9424C /* CIMAPFetchParsedContentOperation.cpp */, + 842D799A1DF801AE00F9424C /* CIMAPFetchParsedContentOperation.h */, + 84E3DB471D9BB29E003B598F /* CIMAPFolder.cpp */, + 84E3DB481D9BB29E003B598F /* CIMAPFolder.h */, + 8494D6D51D9C082E009EEE5E /* CIMAPFolderInfo.cpp */, + 8494D6D61D9C082E009EEE5E /* CIMAPFolderInfo.h */, + 84F7B4641D915D88005F83E8 /* CIMAPFolderInfoOperation.cpp */, + 84F7B4651D915D88005F83E8 /* CIMAPFolderInfoOperation.h */, + 8494D6DD1D9C0FE9009EEE5E /* CIMAPFolderStatus.cpp */, + 8494D6DE1D9C0FE9009EEE5E /* CIMAPFolderStatus.h */, + 84F7B4661D915D88005F83E8 /* CIMAPFolderStatusOperation.cpp */, + 84F7B4671D915D88005F83E8 /* CIMAPFolderStatusOperation.h */, + 842D79B31DF876B600F9424C /* CIMAPIdentity.cpp */, + 842D79B41DF876B600F9424C /* CIMAPIdentity.h */, + 842D79B91DF881A000F9424C /* CIMAPIdentityOperation.cpp */, + 842D79BA1DF881A000F9424C /* CIMAPIdentityOperation.h */, + 84E3DB371D9A7C93003B598F /* CIMAPIdleOperation.cpp */, + 84E3DB381D9A7C93003B598F /* CIMAPIdleOperation.h */, + 84E3DB4D1D9BBDAD003B598F /* CIMAPMessage.cpp */, + 84E3DB4E1D9BBDAD003B598F /* CIMAPMessage.h */, + 84E3DB531D9BDB41003B598F /* CIMAPMessagePart.cpp */, + 84E3DB541D9BDB41003B598F /* CIMAPMessagePart.h */, + 842D799D1DF8033100F9424C /* CIMAPMessageRenderingOperation.cpp */, + 842D799E1DF8033100F9424C /* CIMAPMessageRenderingOperation.h */, + 842D79A11DF8049D00F9424C /* CIMAPMoveMessagesOperation.cpp */, + 842D79A21DF8049D00F9424C /* CIMAPMoveMessagesOperation.h */, + 84CD9BDC1D9BE3AF000622CB /* CIMAPMultipart.cpp */, + 84CD9BDD1D9BE3AF000622CB /* CIMAPMultipart.h */, + 84F7B4BD1D9178D3005F83E8 /* CIMAPNamespace.cpp */, + 84F7B4681D915D88005F83E8 /* CIMAPNamespace.h */, + 84CD9BE11D9BFB37000622CB /* CIMAPNamespaceItem.cpp */, + 84CD9BE21D9BFB37000622CB /* CIMAPNamespaceItem.h */, + 8494D6CF1D9C03BB009EEE5E /* CIMAPPart.cpp */, + 8494D6D01D9C03BB009EEE5E /* CIMAPPart.h */, + 842D79A51DF8080200F9424C /* CIMAPQuotaOperation.cpp */, + 842D79A61DF8080200F9424C /* CIMAPQuotaOperation.h */, + 8494D6E51D9C2274009EEE5E /* CIMAPSearchExpression.cpp */, + 8494D6E61D9C2274009EEE5E /* CIMAPSearchExpression.h */, + 840CB4501F274AD60068E8E6 /* CIMAPSearchOperation.cpp */, + 840CB4511F274AD60068E8E6 /* CIMAPSearchOperation.h */, + ); + name = imap; + sourceTree = ""; + }; + 84F7B43C1D9159E0005F83E8 /* abstract */ = { + isa = PBXGroup; + children = ( + 8498CCAA1D9511FC0074217C /* CAbstractMessage.cpp */, + 8498CCAB1D9511FC0074217C /* CAbstractMessage.h */, + 8498CCAD1D9519B40074217C /* CAbstractMessagePart.cpp */, + 8498CCAE1D9519B40074217C /* CAbstractMessagePart.h */, + 84A929171DA7BABF0020205B /* CAbstractMessageRendererCallback.cpp */, + 84A929181DA7BABF0020205B /* CAbstractMessageRendererCallback.h */, + 84C95C1D1F3208580056A543 /* CAbstractMessageRendererCallbackWrapper.h */, + 8498CCB01D9520660074217C /* CAbstractMultipart.cpp */, + 8498CCB11D9520660074217C /* CAbstractMultipart.h */, + 84ECAD761D93E9CD006261FD /* CAbstractPart.cpp */, + 84ECAD771D93E9CD006261FD /* CAbstractPart.h */, + 84ECAD7E1D943B11006261FD /* CAddress.cpp */, + 84ECAD7F1D943B11006261FD /* CAddress.h */, + 84F7B43D1D9159E9005F83E8 /* CMessageConstants.h */, + 84ECAD7A1D93FF9E006261FD /* CMessageHeader.cpp */, + 84ECAD7B1D93FF9E006261FD /* CMessageHeader.h */, + ); + name = abstract; + sourceTree = ""; + }; + 84F7B4881D916CE7005F83E8 /* swiftmailcore2-framework */ = { + isa = PBXGroup; + children = ( + 84F7B4891D916CE7005F83E8 /* swiftmailcore2.h */, + 84F7B48A1D916CE7005F83E8 /* Info.plist */, + ); + name = "swiftmailcore2-framework"; + path = swiftmailcore2; + sourceTree = ""; + }; + 84F7B4941D916CF0005F83E8 /* swift */ = { + isa = PBXGroup; + children = ( + 8498CCB31D9523C90074217C /* abstract */, + 84F7B4951D916CFB005F83E8 /* basetypes */, + 84F7B49C1D916D37005F83E8 /* imap */, + 845FB8521F290CC500A29DA8 /* provider */, + 8408C80A1F26379D0003A816 /* rfc822 */, + 84B892161DA27FA1008FD1C4 /* smtp */, + 84E3DB321D997D04003B598F /* utils */, + ); + name = swift; + sourceTree = ""; + }; + 84F7B4951D916CFB005F83E8 /* basetypes */ = { + isa = PBXGroup; + children = ( + 84E3DB451D9AC3A6003B598F /* Array+Mailcore.swift */, + 84F7B4961D916D0B005F83E8 /* Convertible.swift */, + 84E3DB431D9ABDCC003B598F /* Data+Mailcore.swift */, + 84E3DB3D1D9AA56A003B598F /* Dictionary+Mailcore.swift */, + 84501D0C1DA511A400A9FF4D /* MCOIndexSet.swift */, + 84E52F6D1F3350CA00233DA3 /* Object.swift */, + 849EA1741D9928CE000E4E4D /* String+Mailcore.swift */, + 848F95371D9D568B00058351 /* UInt32+Mailcore.swift */, + ); + name = basetypes; + sourceTree = ""; + }; + 84F7B49C1D916D37005F83E8 /* imap */ = { + isa = PBXGroup; + children = ( + 84F7B49D1D916D4A005F83E8 /* IMAPAppendMessageOperation.swift */, + 84E3DB351D9A7059003B598F /* IMAPBaseOperation.swift */, + 8491BB5F1DF6E66F00E6D679 /* IMAPCapabilityOperation.swift */, + 8491BB691DF6FA5000E6D679 /* IMAPCheckAccountOperation.swift */, + 84F7B49E1D916D4A005F83E8 /* IMAPCopyMessagesOperation.swift */, + 8491BB6F1DF7057800E6D679 /* IMAPCustomCommandOperation.swift */, + 84F7B49F1D916D4A005F83E8 /* IMAPFetchContentOperation.swift */, + 84D344DD1DF70DB600B81A94 /* IMAPFetchContentToFileOperation.swift */, + 84E1E0291DF5D4E500D45A31 /* IMAPFetchFoldersOperation.swift */, + 84F7B4A01D916D4A005F83E8 /* IMAPFetchMessagesOperation.swift */, + 84D344E31DF7151D00B81A94 /* IMAPFetchNamespaceOperation.swift */, + 842D79A91DF80C7E00F9424C /* IMAPFetchParsedContentOperation.swift */, + 84E3DB4B1D9BB9F7003B598F /* IMAPFolder.swift */, + 8494D6DB1D9C0DE8009EEE5E /* IMAPFolderInfo.swift */, + 84F7B4A11D916D4A005F83E8 /* IMAPFolderInfoOperation.swift */, + 8494D6E11D9C11C7009EEE5E /* IMAPFolderStatus.swift */, + 84F7B4A21D916D4A005F83E8 /* IMAPFolderStatusOperation.swift */, + 842D79B71DF87A2B00F9424C /* IMAPIdentity.swift */, + 842D79BD1DF882A100F9424C /* IMAPIdentityOperation.swift */, + 84B110A41D928E1D0079C769 /* IMAPIdleOperation.swift */, + 84E3DB511D9BCEED003B598F /* IMAPMessage.swift */, + 84E3DB571D9BDD62003B598F /* IMAPMessagePart.swift */, + 842D79AB1DF817B300F9424C /* IMAPMessageRenderingOperation.swift */, + 842D79AD1DF81EDF00F9424C /* IMAPMoveMessagesOperation.swift */, + 84CD9BDF1D9BE514000622CB /* IMAPMultipart.swift */, + 84F7B4A31D916D4A005F83E8 /* IMAPNamespace.swift */, + 84CD9BE51D9C0039000622CB /* IMAPNamespaceItem.swift */, + 84F7B4A41D916D4A005F83E8 /* IMAPOperation.swift */, + 8494D6D31D9C06F5009EEE5E /* IMAPPart.swift */, + 842D79B11DF81FA800F9424C /* IMAPQuotaOperation.swift */, + 8494D6E31D9C2253009EEE5E /* IMAPSearchExpression.swift */, + 84F7B4A61D916D4A005F83E8 /* IMAPSearchOperation.swift */, + 84F7B4A71D916D4A005F83E8 /* IMAPSession.swift */, + ); + name = imap; sourceTree = ""; }; BDCD7C691A70771B0001DCC3 /* icu-ucsdet */ = { @@ -3389,60 +3547,17 @@ path = renderer; sourceTree = ""; }; - C64BB23216EDA9E8000DB34C /* abstract */ = { - isa = PBXGroup; - children = ( - C64BB23616EDAA2B000DB34C /* MCOAbstract.h */, - C64BB23316EDAA17000DB34C /* MCOAbstractMessage.h */, - C64BB23416EDAA17000DB34C /* MCOAbstractMessage.mm */, - C64BB23716EDAA3F000DB34C /* MCOAbstractMessagePart.h */, - C64BB23816EDAA3F000DB34C /* MCOAbstractMessagePart.mm */, - C64BB23A16EDAAC7000DB34C /* MCOAbstractMultipart.h */, - C64BB23B16EDAAC7000DB34C /* MCOAbstractMultipart.mm */, - C64BB23D16EDAAE0000DB34C /* MCOAbstractPart.h */, - C64BB23E16EDAAE1000DB34C /* MCOAbstractPart.mm */, - C64BB24016EDAAF3000DB34C /* MCOAddress.h */, - C64BB24616EEF89D000DB34C /* MCOAddress+Private.h */, - C64BB24116EDAAF3000DB34C /* MCOAddress.mm */, - C64BB26D16FD63F6000DB34C /* MCOConstants.h */, - C64BB24316EDAAFD000DB34C /* MCOMessageHeader.h */, - C64BB24E16EEFFE2000DB34C /* MCOMessageHeader+Private.h */, - C64BB24416EDAAFE000DB34C /* MCOMessageHeader.mm */, - C623C58B16FE52C0001BBEFC /* MCOHTMLRendererDelegate.h */, - C6F5B9FF16FED7AB00D9DABD /* MCOHTMLRendererIMAPDelegate.h */, - C6F5B9FC16FED18500D9DABD /* MCOAbstractMessageRendererCallback.mm */, - C6F5B9FD16FED18500D9DABD /* MCOAbstractMessageRendererCallback.h */, - ); - path = abstract; - sourceTree = ""; - }; - C64BB25B16FD3E98000DB34C /* rfc822 */ = { - isa = PBXGroup; - children = ( - C64BB25C16FD4377000DB34C /* MCOAttachment.h */, - C64BB25D16FD4377000DB34C /* MCOAttachment.mm */, - C64BB25F16FD438F000DB34C /* MCOMessageBuilder.h */, - C64BB26016FD438F000DB34C /* MCOMessageBuilder.mm */, - C64BB26216FD43A1000DB34C /* MCOMessageParser.h */, - C64BB26316FD43A1000DB34C /* MCOMessageParser.mm */, - C64BB26516FD43E2000DB34C /* MCOMessagePart.h */, - C64BB26616FD43E2000DB34C /* MCOMessagePart.mm */, - C64BB26816FD44C2000DB34C /* MCOMultipart.h */, - C64BB26916FD44C2000DB34C /* MCOMultipart.mm */, - C64BB26B16FD4C3B000DB34C /* MCORFC822.h */, - ); - path = rfc822; - sourceTree = ""; - }; C64EA52C169E772200778456 = { isa = PBXGroup; children = ( 851682AC1C6A2484005B86C4 /* Default-568h@2x.png */, + 84F7B4881D916CE7005F83E8 /* swiftmailcore2-framework */, C6BD28A1170BD78E00A91AC1 /* mailcore-framework */, C64EA545169E78B100778456 /* src */, C64EA7A916A00AF400778456 /* tests */, C6A81BB517068C0600882C15 /* tests-ios */, C6B5AE0319F630B3001352A6 /* unittest */, + 841E64FB1F683440007BB736 /* MailCoreTests */, C64EA78E169F259200778456 /* Frameworks */, C64EA538169E772200778456 /* Products */, ); @@ -3459,6 +3574,7 @@ 27780C3A19CF9CD100C77E44 /* MailCore.framework */, C6B5AE0219F630B3001352A6 /* unittest.xctest */, C600B6141A242C3F000728F1 /* unittestcpp */, + 841E64FA1F683440007BB736 /* MailCoreTests.xctest */, ); name = Products; sourceTree = ""; @@ -3466,7 +3582,9 @@ C64EA545169E78B100778456 /* src */ = { isa = PBXGroup; children = ( - C6D42C0016ADF5AF002BB4F9 /* objc */, + 8408C6D81F26340F0003A816 /* objc */, + 84F7B4941D916CF0005F83E8 /* swift */, + 84F7B4081D915971005F83E8 /* c */, C64EA68A169E847800778456 /* async */, C64EA691169E847800778456 /* core */, C64EA7A4169F2A3E00778456 /* MailCore.h */, @@ -3811,6 +3929,7 @@ C64EA78E169F259200778456 /* Frameworks */ = { isa = PBXGroup; children = ( + 84F7B4C11D917B1D005F83E8 /* libc++.tbd */, C600B6221A244CC3000728F1 /* CFNetwork.framework */, C6B5AE1119F63496001352A6 /* Foundation.framework */, C6B5AE0F19F6347C001352A6 /* Security.framework */, @@ -3887,6 +4006,7 @@ C6BD28A1170BD78E00A91AC1 /* mailcore-framework */ = { isa = PBXGroup; children = ( + 84AC02E81F6A99EA00519B08 /* CMailCore */, 802A99201ECF82E900FFF0AB /* OSX */, 802A991F1ECF82E100FFF0AB /* iOS */, 84AF9E7D172DBAF600E60AA3 /* providers.json */, @@ -3897,58 +4017,6 @@ name = "mailcore-framework"; sourceTree = ""; }; - C6D42C0016ADF5AF002BB4F9 /* objc */ = { - isa = PBXGroup; - children = ( - C6F61F771701420A0073032E /* pop */, - C6F61F781701420A0073032E /* smtp */, - 84D73760199BFF6A005124E5 /* nntp */, - C64BB23216EDA9E8000DB34C /* abstract */, - F8EA941316BAED500011AC6F /* imap */, - C64BB25B16FD3E98000DB34C /* rfc822 */, - C6D42C1816AE03D6002BB4F9 /* utils */, - 84AF9E84172DBC1000E60AA3 /* provider */, - C6EB30DC16B5B7770091F4F1 /* MCObjC.h */, - ); - path = objc; - sourceTree = ""; - }; - C6D42C1816AE03D6002BB4F9 /* utils */ = { - isa = PBXGroup; - children = ( - C64FF38F16B3C13000F8C162 /* MCOObjectWrapper.h */, - C64FF39016B3C13000F8C162 /* MCOObjectWrapper.mm */, - C64BB25716FD3BC2000DB34C /* MCOOperation.h */, - C64BB25916FD3BC8000DB34C /* MCOOperation+Private.h */, - C64BB25816FD3BC5000DB34C /* MCOOperation.mm */, - C64BB26C16FD62FB000DB34C /* MCOUtils.h */, - C6EB30FD16B8E50F0091F4F1 /* NSArray+MCO.h */, - C6EB30FC16B8E50F0091F4F1 /* NSArray+MCO.mm */, - C6D42C1916AE03D6002BB4F9 /* NSData+MCO.h */, - C6D42C1A16AE03D6002BB4F9 /* NSData+MCO.mm */, - C6EB30F516B8C9480091F4F1 /* NSDictionary+MCO.h */, - C6EB30F616B8C9480091F4F1 /* NSDictionary+MCO.mm */, - C07AD44B013BB42A240B4F04 /* NSError+MCO.h */, - C07ADFE43E22B38EFF23ADB5 /* NSError+MCO.mm */, - C6EB30FF16B8E6E50091F4F1 /* NSObject+MCO.h */, - C6EB310016B8E6E50091F4F1 /* NSObject+MCO.mm */, - C6D42C1B16AE03D6002BB4F9 /* NSString+MCO.h */, - C6D42C1C16AE03D6002BB4F9 /* NSString+MCO.mm */, - C64BB25016FC2846000DB34C /* NSValue+MCO.h */, - C64BB25116FC2848000DB34C /* NSValue+MCO.mm */, - C6F5B9F216FEAC6C00D9DABD /* MCOIndexSet.h */, - C6CCC5CB16FFF7B50077A5FC /* MCOIndexSet+Private.h */, - C6F5B9F316FEAC6C00D9DABD /* MCOIndexSet.mm */, - C6CCC5C616FFE5190077A5FC /* MCORange.mm */, - C6CCC5C816FFE54F0077A5FC /* MCORange.h */, - C69BA85917DEFCCB00D601B7 /* NSIndexSet+MCO.h */, - C69BA85A17DEFCCB00D601B7 /* NSIndexSet+MCO.m */, - C643F490189A3D59007EA2F7 /* NSSet+MCO.h */, - C643F491189A3D59007EA2F7 /* NSSet+MCO.mm */, - ); - path = utils; - sourceTree = ""; - }; C6E665A91796500B0063F2CF /* zip */ = { isa = PBXGroup; children = ( @@ -3974,48 +4042,6 @@ path = MiniZip; sourceTree = ""; }; - C6F61F771701420A0073032E /* pop */ = { - isa = PBXGroup; - children = ( - C6A81BFB170781BC00882C15 /* MCOPOP.h */, - C6A81BD41706903500882C15 /* MCOPOPSession.h */, - C6A81BD51706903500882C15 /* MCOPOPSession.mm */, - C6A81BE01706905600882C15 /* MCOPOPOperation.h */, - C60136951776C31000A5AF45 /* MCOPOPOperation+Private.h */, - C6A81BE11706905600882C15 /* MCOPOPOperation.mm */, - C6A81BD81706903E00882C15 /* MCOPOPFetchHeaderOperation.h */, - C6A81BD91706903E00882C15 /* MCOPOPFetchHeaderOperation.mm */, - C6A81BDC1706904800882C15 /* MCOPOPFetchMessageOperation.h */, - C6A81BDD1706904800882C15 /* MCOPOPFetchMessageOperation.mm */, - C6A81BE41706906C00882C15 /* MCOPOPFetchMessagesOperation.h */, - C6A81BE51706906C00882C15 /* MCOPOPFetchMessagesOperation.mm */, - 84B639EF17F282B4003B5BA2 /* MCOPOPNoopOperation.h */, - 84B639F017F282B4003B5BA2 /* MCOPOPNoopOperation.mm */, - C6A81BFE1707CEE400882C15 /* MCOPOPMessageInfo.h */, - C6A81BFF1707CEE500882C15 /* MCOPOPMessageInfo.mm */, - ); - path = pop; - sourceTree = ""; - }; - C6F61F781701420A0073032E /* smtp */ = { - isa = PBXGroup; - children = ( - C6A81BE81706A6B300882C15 /* MCOSMTP.h */, - C6A81BBD17068E5E00882C15 /* MCOSMTPSession.h */, - C6A81BBE17068E5E00882C15 /* MCOSMTPSession.mm */, - 8B0095CA1A00DDE700F84BC0 /* MCOSMTPLoginOperation.h */, - 8B0095CB1A00DDE700F84BC0 /* MCOSMTPLoginOperation.mm */, - C6A81BC117068E9500882C15 /* MCOSMTPSendOperation.h */, - C6A81BC217068E9500882C15 /* MCOSMTPSendOperation.mm */, - 8416A99B17F284F400B3C7DA /* MCOSMTPNoopOperation.h */, - 8416A99C17F284F400B3C7DA /* MCOSMTPNoopOperation.mm */, - C6A81BC517068EB000882C15 /* MCOSMTPOperation.h */, - C60136941776B96600A5AF45 /* MCOSMTPOperation+Private.h */, - C6A81BC617068EB000882C15 /* MCOSMTPOperation.mm */, - ); - path = smtp; - sourceTree = ""; - }; C6F7B19C17A1C11F00BE78BB /* security */ = { isa = PBXGroup; children = ( @@ -4025,85 +4051,6 @@ path = security; sourceTree = ""; }; - F8EA941316BAED500011AC6F /* imap */ = { - isa = PBXGroup; - children = ( - C64BB25416FD32A0000DB34C /* MCOIMAP.h */, - F8EA941416BAED6E0011AC6F /* MCOIMAPSession.h */, - C07AD057D3C8FBDC7AC95733 /* MCOIMAPSession.mm */, - C623C59116FE750D001BBEFC /* MCOIMAPFolder.h */, - C623C59216FE750E001BBEFC /* MCOIMAPFolder.mm */, - C6F5B9E016FEA1E800D9DABD /* MCOIMAPMessage.h */, - C6F5B9E116FEA1E800D9DABD /* MCOIMAPMessage.mm */, - C6F5B9E316FEA27500D9DABD /* MCOIMAPMessagePart.h */, - C6F5B9E416FEA27500D9DABD /* MCOIMAPMessagePart.mm */, - C6F5B9E616FEA28600D9DABD /* MCOIMAPMultipart.h */, - C6F5B9E716FEA28600D9DABD /* MCOIMAPMultipart.mm */, - C6F5B9E916FEA3B500D9DABD /* MCOIMAPNamespace.h */, - C6F5B9EA16FEA3B500D9DABD /* MCOIMAPNamespace.mm */, - C6F5B9EC16FEA3C400D9DABD /* MCOIMAPNamespaceItem.h */, - C6F5B9ED16FEA3C400D9DABD /* MCOIMAPNamespaceItem.mm */, - C6F5B9EF16FEA3D700D9DABD /* MCOIMAPPart.h */, - C6F5B9F016FEA3D700D9DABD /* MCOIMAPPart.mm */, - C6F61F9D17016EA00073032E /* MCOIMAPFolderInfo.h */, - C6F61F9E17016EA00073032E /* MCOIMAPFolderInfo.mm */, - F87F190816BB62690012652F /* MCOIMAPFetchFoldersOperation.h */, - F87F190B16BB62B00012652F /* MCOIMAPFetchFoldersOperation.mm */, - C623C58D16FE6B45001BBEFC /* MCOIMAPOperation.h */, - C623C58E16FE6B45001BBEFC /* MCOIMAPOperation.mm */, - C6F61F79170169EE0073032E /* MCOIMAPFolderInfoOperation.h */, - C6F61F7A170169EE0073032E /* MCOIMAPFolderInfoOperation.mm */, - C6F61FB31702AB2A0073032E /* MCOIMAPBaseOperation.h */, - C608167F17766FC5001F1018 /* MCOIMAPBaseOperation+Private.h */, - C6F61FB41702AB2F0073032E /* MCOIMAPBaseOperation.mm */, - C6F61F7C170169FB0073032E /* MCOIMAPAppendMessageOperation.h */, - C6F61F7D170169FB0073032E /* MCOIMAPAppendMessageOperation.mm */, - C6F61F7F17016A0D0073032E /* MCOIMAPCopyMessagesOperation.h */, - C6F61F8017016A0D0073032E /* MCOIMAPCopyMessagesOperation.mm */, - 8568A4181C610F6600FF4470 /* MCOIMAPMoveMessagesOperation.h */, - 8568A4191C610F6600FF4470 /* MCOIMAPMoveMessagesOperation.mm */, - C6F61F8217016A200073032E /* MCOIMAPFetchMessagesOperation.h */, - C6F61F8317016A200073032E /* MCOIMAPFetchMessagesOperation.mm */, - C6F61F8517016AD60073032E /* MCOIMAPFetchContentOperation.h */, - C6F61F8617016AD60073032E /* MCOIMAPFetchContentOperation.mm */, - 810DB78F1C68F50600017B12 /* MCOIMAPFetchContentToFileOperation.h */, - 810DB7901C68F50600017B12 /* MCOIMAPFetchContentToFileOperation.mm */, - 8199FBE719FAEA440040BBC3 /* MCOIMAPFetchParsedContentOperation.h */, - 8199FBE819FAEA440040BBC3 /* MCOIMAPFetchParsedContentOperation.mm */, - C6F61F8817016AE60073032E /* MCOIMAPSearchOperation.h */, - C6F61F8917016AE60073032E /* MCOIMAPSearchOperation.mm */, - C6F61F8B17016AFA0073032E /* MCOIMAPIdleOperation.h */, - C6F61F8C17016AFA0073032E /* MCOIMAPIdleOperation.mm */, - C6F61F8E17016B090073032E /* MCOIMAPFetchNamespaceOperation.h */, - C6F61F8F17016B090073032E /* MCOIMAPFetchNamespaceOperation.mm */, - C6F61F9117016B250073032E /* MCOIMAPIdentityOperation.h */, - C6F61F9217016B250073032E /* MCOIMAPIdentityOperation.mm */, - C6F61F9417016B310073032E /* MCOIMAPCapabilityOperation.h */, - C6F61F9517016B310073032E /* MCOIMAPCapabilityOperation.mm */, - 4B3C1BDC17ABF306008BBF4C /* MCOIMAPQuotaOperation.h */, - 4B3C1BDD17ABF307008BBF4C /* MCOIMAPQuotaOperation.mm */, - C6F61F9717016B460073032E /* MCOIMAPSearchExpression.h */, - C6F61F9817016B460073032E /* MCOIMAPSearchExpression.mm */, - 9EF9AB06175F2EC60027FA3B /* MCOIMAPFolderStatus.h */, - 9EF9AB07175F2EC60027FA3B /* MCOIMAPFolderStatus.mm */, - 9EF9AB16175F35C60027FA3B /* MCOIMAPFolderStatusOperation.h */, - 9EF9AB18175F36600027FA3B /* MCOIMAPFolderStatusOperation.mm */, - DA89896B178A47D200F6D90A /* MCOIMAPMessageRenderingOperation.h */, - DA89896C178A47D200F6D90A /* MCOIMAPMessageRenderingOperation.mm */, - 8416A99F17F2871D00B3C7DA /* MCOIMAPNoopOperation.h */, - 8416A9A017F2871D00B3C7DA /* MCOIMAPNoopOperation.mm */, - C63D316017C92D8300A4D993 /* MCOIMAPIdentity.h */, - C63D316117C92D8300A4D993 /* MCOIMAPIdentity.mm */, - C6EFFBCA1833334900CFF656 /* MCOIMAPMultiDisconnectOperation.h */, - C6EFFBCB1833334900CFF656 /* MCOIMAPMultiDisconnectOperation.mm */, - 1845356E1BE23FBD000B0D87 /* MCOIMAPCustomCommandOperation.h */, - 1845356F1BE23FBD000B0D87 /* MCOIMAPCustomCommandOperation.mm */, - C6F49A911C8EA1450087F4B7 /* MCOIMAPCheckAccountOperation.h */, - C6F49A921C8EA1450087F4B7 /* MCOIMAPCheckAccountOperation.mm */, - ); - path = imap; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ @@ -4111,151 +4058,124 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( + 8408C8041F26378D0003A816 /* CMessageBuilder.h in Headers */, + 845FB8501F2909A000A29DA8 /* CMailProvider.h in Headers */, + 8408C8001F26378D0003A816 /* CAttachment.h in Headers */, + 8408C8081F26378D0003A816 /* CMessageParser.h in Headers */, + 8408C7E11F2637220003A816 /* CIMAPCheckAccountOperation.h in Headers */, + 8408C7E41F2637220003A816 /* CIMAPFetchContentToFileOperation.h in Headers */, + 8408C7E61F2637220003A816 /* CIMAPFetchNamespaceOperation.h in Headers */, + 8408C7EC1F2637220003A816 /* CIMAPIdentity.h in Headers */, + 8408C7ED1F2637220003A816 /* CIMAPIdentityOperation.h in Headers */, + 8408C7EE1F2637220003A816 /* CSMTPSession.h in Headers */, + 8408C7EF1F2637220003A816 /* CSMTPOperation.h in Headers */, + 840CB4541F274AD60068E8E6 /* CIMAPSearchOperation.h in Headers */, + 8408C7DE1F2637220003A816 /* CIMAPFetchFoldersOperation.h in Headers */, + 8408C7EB1F2637220003A816 /* CIMAPQuotaOperation.h in Headers */, + 8408C7E91F2637220003A816 /* CIMAPMessageRenderingOperation.h in Headers */, + 8408C7E81F2637220003A816 /* CIMAPFetchParsedContentOperation.h in Headers */, + 84C36C3C1F62F02F003E1399 /* MCOperationQueueCallback.h in Headers */, + 8408C7EA1F2637220003A816 /* CIMAPMoveMessagesOperation.h in Headers */, + 8408C7E21F2637220003A816 /* CIMAPCustomCommandOperation.h in Headers */, + 8408C7DF1F2637220003A816 /* CIMAPCapabilityOperation.h in Headers */, + 843E4A891F30838500D78022 /* MailCoreString.h in Headers */, + 8408C7D81F2637220003A816 /* CIMAPFolderStatusOperation.h in Headers */, + 8408C7D71F2637220003A816 /* CIMAPFolderInfoOperation.h in Headers */, + 8408C7D21F2637220003A816 /* CIMAPCopyMessagesOperation.h in Headers */, + 84AD84931F435DEB000361A3 /* CMultipart.h in Headers */, + 8408C7D61F2637220003A816 /* CIMAPFetchMessagesOperation.h in Headers */, + 8408C7D41F2637220003A816 /* CIMAPFetchContentOperation.h in Headers */, + 8408C7D11F2637220003A816 /* CIMAPAppendMessageOperation.h in Headers */, + 8408C7DC1F2637220003A816 /* CIMAPAsyncSession.h in Headers */, + 8408C7CF1F2637220003A816 /* CIMAPSearchExpression.h in Headers */, + 8408C7CD1F2637220003A816 /* CIMAPFolderStatus.h in Headers */, + 8408C7CC1F2637220003A816 /* CIMAPFolderInfo.h in Headers */, + 8408C7CA1F2637220003A816 /* CIMAPNamespaceItem.h in Headers */, + 8408C7C91F2637220003A816 /* CIMAPNamespace.h in Headers */, + 8408C7C81F2637220003A816 /* CIMAPMultipart.h in Headers */, + 8408C7C71F2637220003A816 /* CIMAPMessagePart.h in Headers */, + 8408C7C61F2637220003A816 /* CIMAPMessage.h in Headers */, + 8408C7C51F2637220003A816 /* CIMAPFolder.h in Headers */, + 8408C7DB1F2637220003A816 /* CIMAPIdleOperation.h in Headers */, + 8408C7D01F2637220003A816 /* CIMAPBaseOperation.h in Headers */, + 8408C7BB1F2637220003A816 /* COperation.h in Headers */, + 8408C7CB1F2637220003A816 /* CIMAPPart.h in Headers */, + 8408C7F31F2637220003A816 /* CDictionary.h in Headers */, + 8408C7C41F2637220003A816 /* CAbstractMessageRendererCallback.h in Headers */, + 8408C7C01F2637220003A816 /* CAddress.h in Headers */, + 8408C7BE1F2637220003A816 /* CAbstractMultipart.h in Headers */, + 8408C7BD1F2637220003A816 /* CAbstractMessagePart.h in Headers */, + 8408C7BF1F2637220003A816 /* CMessageConstants.h in Headers */, + 8408C7C11F2637220003A816 /* CAbstractPart.h in Headers */, + 8408C7C31F2637220003A816 /* CMessageHeader.h in Headers */, + 8408C7BC1F2637220003A816 /* CAbstractMessage.h in Headers */, + 8408C7F21F2637220003A816 /* CObject.h in Headers */, + 8408C7F01F2637220003A816 /* CArray.h in Headers */, + 8408C7F41F2637220003A816 /* CBase.h in Headers */, + 8408C7F11F2637220003A816 /* CIndexSet.h in Headers */, 802A99241ECF83E900FFF0AB /* MailCore.h in Headers */, - 13FE38B1086D2D6C023B8AEF /* MCONNTPPostOperation.h in Headers */, B60E7F7B892BE16A4C1222A3 /* MCNNTPPostOperation.h in Headers */, - B403E11D79BD3C16BDE4A134 /* MCOIMAPFetchContentToFileOperation.h in Headers */, + 84C1894C223808A3001430F3 /* CAutoreleasePool.h in Headers */, AA830E979F6BFDC40649265E /* MCIMAPFetchContentToFileOperation.h in Headers */, + 36A952AB0AB7A7E7370AC019 /* MCMessageHeader.h in Headers */, D15156687200D37E077EEF68 /* MCHTMLCleaner.h in Headers */, 8AEA6CFEDE772561B10D77A2 /* MCMXRecordResolverOperation.h in Headers */, - 4A7601BE03DD863B1330D521 /* MCOAccountValidator.h in Headers */, + 84C87A221F41DD000018398E /* MCIMAPSearchOperation.h in Headers */, + 84C87A211F41DCEC0018398E /* MCAbstractMessage.h in Headers */, 56668306EDC2255654BF7CF2 /* MCAccountValidator.h in Headers */, 0BB3B1BDD6665F07D09DF42A /* MCIMAPCheckAccountOperation.h in Headers */, 9DAB085A9E14C50F0D96F8AA /* MCIMAPFolderInfo.h in Headers */, CA854A8216AC9F34E5C2806D /* MCIMAPFetchParsedContentOperation.h in Headers */, - 99D2B618A7C9BEF1DBB0EAC9 /* MCOIMAPFetchParsedContentOperation.h in Headers */, - 17F4EB7E2E70F577BC95D868 /* MCONNTPFetchServerTimeOperation.h in Headers */, 36C730260AC040622F91CFE0 /* MCNNTPFetchServerTimeOperation.h in Headers */, - C24D11DA1DDEA511F46D59A7 /* MCONNTPFetchOverviewOperation.h in Headers */, AA62B1999E009E0FE4814FCF /* MCNNTPFetchOverviewOperation.h in Headers */, + 843568501F45A2F200FCFF33 /* CAbstractMessageRendererCallbackWrapper.h in Headers */, 5EB30CEC902B4F8DB2633B42 /* MCNNTP.h in Headers */, DE4B37A0269ACFE0DAE64D7A /* MCIMAPCustomCommandOperation.h in Headers */, DD3FBEB84CC28F8A7F03E170 /* MCNNTPSession.h in Headers */, - 97F4A1DB58D6C077AF1FCE56 /* MCOPOPNoopOperation.h in Headers */, - 7612CCA03BDC33A1FA75B647 /* MCOIMAPCustomCommandOperation.h in Headers */, 93D509F7FAE001720B9AFBB8 /* MCIMAPNoopOperation.h in Headers */, - 831007A88AD8D070D172012D /* MCONNTP.h in Headers */, 5B71C571BA37F70BF2C94D5D /* MCPOPNoopOperation.h in Headers */, E278C821C115C45FCF2AA061 /* MCAsyncNNTP.h in Headers */, - C0E9FF4524465885E9E255AA /* MCONNTPSession.h in Headers */, F4D001D423C50FD1F127A951 /* MCSMTPNoopOperation.h in Headers */, DDEABC43085EF35411698BEE /* MCNNTPGroupInfo.h in Headers */, 793CD139BFC584B6D74026E6 /* MCIMAPConnectOperation.h in Headers */, + 843EA4801F79730400861123 /* MCLibetpan.h in Headers */, E5889F3AC3D9F2EC8707DC61 /* MCIMAPQuotaOperation.h in Headers */, - 369A72559CC81BDCE72A1F8D /* MCONNTPListNewsgroupsOperation.h in Headers */, - BE4DD0EFF70EE6C29E681457 /* MCOIMAPQuotaOperation.h in Headers */, 37CABFE41284A99A7B5C536C /* MCNNTPFetchHeaderOperation.h in Headers */, - 55FC99630CA7C7F8EBEEBF19 /* MCONNTPDisconnectOperation.h in Headers */, - F1098BF352E4ADC9B4AE09D1 /* NSIndexSet+MCO.h in Headers */, - FCE25496BA858F94CDA7158E /* MCONNTPGroupInfo.h in Headers */, 4B711609CF722B1A49132323 /* MCNNTPOperation.h in Headers */, 32032AFB325A68BBDC17E2A9 /* MCNNTPAsyncSession.h in Headers */, E3A40B332CB95855F7A3566A /* MCNNTPListNewsgroupsOperation.h in Headers */, 17E7E295C3F508352AC45B4E /* MCIMAPMessageRenderingOperation.h in Headers */, - D5000E20992521CBEA1D3029 /* MCOIMAPMessageRenderingOperation.h in Headers */, - 5C60F482DB2CFE116BB94ED5 /* MCOIMAPIdentity.h in Headers */, 6D6A34E4C03FACA811040B10 /* MCNNTPOperationCallback.h in Headers */, + 84C36C3E1F62F078003E1399 /* MCHTMLRenderer.h in Headers */, 27AA5A2F27A4C3B9C8B7332F /* MCIMAPIdentity.h in Headers */, 6F24645831A68DD3C7324610 /* MCIMAPFolderStatus.h in Headers */, 70A24CB346F979125CD6A125 /* MCIMAPFolderStatusOperation.h in Headers */, - 2822FB6434F1EF57699936A4 /* MCOIMAPFolderStatus.h in Headers */, C7EBEED33BB065E0176842B1 /* MCNNTPProgressCallback.h in Headers */, - A243079A0AEA1353E041D767 /* MCOIMAPFolderStatusOperation.h in Headers */, - 878C7C293710F029A32295D0 /* MCOMailProvider.h in Headers */, - E880564364D7039E276870F3 /* MCOMailProvidersManager.h in Headers */, - A0F47559BD447B029EB2DD82 /* MCOProvider.h in Headers */, FF0DCFB615637D565E459980 /* MCConnectionLogger.h in Headers */, 0783C68E08E739D7B781E56B /* MCMailProvider.h in Headers */, A533D6485454C01302AEFFB7 /* MCProvider.h in Headers */, 78E7B733CB813DC82C65364B /* MCNetService.h in Headers */, 920C3F811C04A8DA655F794B /* MCMailProvidersManager.h in Headers */, + 84D72F1F1F32161800F570BC /* CData.h in Headers */, 0687DC326F72F66453ABBB4D /* MCLibetpanTypes.h in Headers */, EF2A3DD113C8EEDC56F6D56C /* MCHTMLRendererCallback.h in Headers */, - 76267B6C00281A721D111065 /* MCOPOP.h in Headers */, - 1B191E78D6ECE4A50001E216 /* MCOPOPFetchMessageOperation.h in Headers */, 9516EA863A64491B2C847078 /* MCIterator.h in Headers */, - A00E3DFF008A7697C79E7677 /* MCOPOPOperation.h in Headers */, - B30AC8720D220554CC50BB23 /* MCOPOPSession.h in Headers */, - E064C3CC40188A4CED677D4E /* MCOMultipart.h in Headers */, - EB5D3EE80E7339FB39D2E9B2 /* MCOSMTP.h in Headers */, 0CF163C3A514931EA15A94F1 /* MCIMAPSyncResult.h in Headers */, - 14FC9C3913E43C2B294ABDE3 /* MCOSMTPSession.h in Headers */, - 8AB02FFE114F257EB58B90F4 /* MCOSMTPOperation.h in Headers */, - EA941A6041E9BE93363DF269 /* MCOPOPFetchMessagesOperation.h in Headers */, EB55D749DA27944ADF357519 /* MCICUTypes.h in Headers */, - 56D89C9C666108D51690179A /* MCOSMTPLoginOperation.h in Headers */, - ED2A55E73927AFD48D412ABB /* MCOSMTPSendOperation.h in Headers */, 449B1115F410D11E124F7CF3 /* MCDateFormatter.h in Headers */, - B1D7FD0CAB3A7FB81DBB21C6 /* MCOMessageBuilder.h in Headers */, - D6E22AA030F56DADE0874E30 /* MCONetService.h in Headers */, - B6689354330CE0C39D31DDDC /* MCOIMAPBaseOperation.h in Headers */, - 1C507ED4AF446C98EAC7EA95 /* MCORFC822.h in Headers */, - FFCCBEBD335DF617401B4AB8 /* MCOConstants.h in Headers */, - BEDEAFB54CC76AB321EE1F9A /* MCOAttachment.h in Headers */, - E25D4D73E09AED4671445F53 /* MCOMessageParser.h in Headers */, - C2C312F3395D11A3DA69A17C /* MCOMessagePart.h in Headers */, - B03DA9FB94C6C44AF4D84907 /* MCONNTPOperation.h in Headers */, - 3062195FCDDB0EA2FBEF6DB6 /* MCONNTPFetchHeaderOperation.h in Headers */, 0B4D4247DCCA355F647485D3 /* MCMD5.h in Headers */, - 6B7FFE3EFE648D64BB96D067 /* MCOIMAPFolderInfoOperation.h in Headers */, - A01585743857B33FB99DAB99 /* MCOIMAPFetchMessagesOperation.h in Headers */, - 470D511F350C5738DD5B9C53 /* MCONNTPFetchArticleOperation.h in Headers */, - E511CE6229D2B0369D32CEEB /* MCONNTPFetchAllArticlesOperation.h in Headers */, - 01196CFEA30A43178EC65FE9 /* MCOIMAPCopyMessagesOperation.h in Headers */, - C1DA4495CDAE3F61ADC94119 /* MCOIMAPMoveMessagesOperation.h in Headers */, 3AE87C548E91C091F13FE013 /* MCJSON.h in Headers */, - 3F552AC432E15FB6A5FDDEBD /* MCOIMAPAppendMessageOperation.h in Headers */, 84EDC6D3C8B582B4BDA39B3F /* MCNull.h in Headers */, - 65DAF237BAE3238FAAC5977D /* MCOIMAPSearchExpression.h in Headers */, - 1105BD4F65B1FC74D942C475 /* MCOIMAPFetchContentOperation.h in Headers */, - 569DF27CBDFF0B1E02274C10 /* MCOIndexSet.h in Headers */, - 9E15EE187EDC0EDD52E672CF /* MCOIMAPFetchNamespaceOperation.h in Headers */, - 4630415C571B6EE5B52D85FA /* MCOIMAPIdleOperation.h in Headers */, - 5194E2A305743C7BB52D45A9 /* MCOIMAPSearchOperation.h in Headers */, - 2ED5033A9BFC3E74DB3D9ED6 /* MCOIMAPIdentityOperation.h in Headers */, - 585D1BA5ACBA63ADC5FD0701 /* MCOIMAPMessagePart.h in Headers */, - 183F31F9017DB5C9BFD59279 /* MCOIMAPCapabilityOperation.h in Headers */, - 71547D85D5F9A7138E3119D6 /* MCOIMAPFolderInfo.h in Headers */, - 39EE13C78A82A0C92DD2AC1D /* MCOOperation.h in Headers */, - 34D1CDF076F0C97BFFF2F410 /* MCOIMAPNamespace.h in Headers */, - F81F279E14748A734360332E /* MCOIMAPNamespaceItem.h in Headers */, - 1031EDE66FAC10A66B24633B /* MCORange.h in Headers */, - 5C31890ECB836A78BA8F4A6B /* MCOIMAPMultipart.h in Headers */, - 5EC6CD790AD21C4A79C2C09D /* MCOHTMLRendererDelegate.h in Headers */, - A0E39142E03B9BDE5738B179 /* MCOHTMLRendererIMAPDelegate.h in Headers */, - C8837A701BE1F51907260BA2 /* MCOIMAPPart.h in Headers */, - 5350425DE37B8D63971FA631 /* MCOIMAPFetchFoldersOperation.h in Headers */, - 60CA4D8048CBB2E7FA93085F /* MCOIMAPFolder.h in Headers */, - 981E2815BEBDEBB3FD9E348E /* MCOIMAPOperation.h in Headers */, - E6D77958E27EC4C5FC5701F5 /* MCOIMAPMessage.h in Headers */, 3701F6C365000E9D6F4087F8 /* MCNNTPFetchArticleOperation.h in Headers */, 2505AB6A90F7484D3CE0B8CB /* MCNNTPFetchAllArticlesOperation.h in Headers */, - 11714C5A62FC483074173837 /* MCOUtils.h in Headers */, - D7D3A4FCBB113251F27F9531 /* MCAbstractMessage.h in Headers */, - 89F641DF9343A7F89B3210DD /* NSValue+MCO.h in Headers */, 59E4B8AC8383595C973A8270 /* MCAddressDisplay.h in Headers */, 1AD0E83FAC5BF79037F26F63 /* MCRenderer.h in Headers */, D993E1633374DB4406A0C232 /* MCIndexSet.h in Headers */, C3F2619662467DE55B14619B /* MCIMAPCapabilityOperation.h in Headers */, 38ED0CA1511DD942B00B6DE5 /* MCAsyncIMAP.h in Headers */, B2ECBB6C8357FE5DF87E2E8F /* MCSizeFormatter.h in Headers */, - 03CD6B1A40432026A0CF8FF4 /* MCOAddress.h in Headers */, - D1408D353D4D120815CF164F /* MCOAbstractMessage.h in Headers */, - 9161ECD867E352B780AA36A2 /* MCOAbstract.h in Headers */, - 6092BF2908DA21353A3CD290 /* MCOAbstractMultipart.h in Headers */, - A5E1D6302C5C5585030086E7 /* MCOAbstractMessagePart.h in Headers */, - B861E6E66A83DE69F974843A /* MCOMessageHeader.h in Headers */, - A1196034473C65866C2E49B2 /* MCOAbstractPart.h in Headers */, - CDB5BC4E7AF5534E4C99A08E /* MCObjC.h in Headers */, - D2D4FAE8CA123E914A7ED119 /* NSObject+MCO.h in Headers */, - CCA787BDAE5037996C0A0CBA /* NSArray+MCO.h in Headers */, - 9FBC69484783555390502CFF /* MCOObjectWrapper.h in Headers */, - 4D56CD6B3E41F22FC3B4D892 /* NSDictionary+MCO.h in Headers */, 0F58BD3A93B79D70A72BAB38 /* MCAbstract.h in Headers */, - 7DFD919902CB3E8722EDE260 /* NSData+MCO.h in Headers */, - 91D70C9B39074553FA57C2DC /* MCOIMAP.h in Headers */, FFE5601D3A885140098DB014 /* MCPOPFetchHeaderOperation.h in Headers */, - 15E69ED1D4D38AB6D6CAC829 /* NSString+MCO.h in Headers */, 590FBDEE991AAA6DDE8C9156 /* MCIMAPFetchFoldersOperation.h in Headers */, A009D0B9C2A026D48A9EB564 /* MCAsync.h in Headers */, AAEB91E93571116AF7B755D5 /* MCAbstractMessagePart.h in Headers */, @@ -4267,7 +4187,6 @@ 00C58A9AA11F95A5499671DA /* MCPOPAsyncSession.h in Headers */, 3ABAFBB958CBDE353E5B057A /* MCIMAPFolderInfoOperation.h in Headers */, 70CF9C6A42EE4CFD9F0CE1D2 /* MCIMAPFetchMessagesOperation.h in Headers */, - 3B7A4C0C03E2097CF55E0C63 /* MCIMAPSearchOperation.h in Headers */, 7B0B78FF7316D63CB2FB15D2 /* MCIMAPFetchContentOperation.h in Headers */, 915157868D0F017A7A1629CD /* MCIMAPIdentityOperation.h in Headers */, FD98CE73B8B5A9581AB0F6CC /* MCIMAPAppendMessageOperation.h in Headers */, @@ -4279,7 +4198,6 @@ EC14DA4CAD7640A38DCEE52C /* MCIMAPMoveMessagesOperation.h in Headers */, D30894BC748088E5A37BB98A /* MCAddress.h in Headers */, DB5EB05E91908CE4D148EA7C /* MCMessageConstants.h in Headers */, - 36A952AB0AB7A7E7370AC019 /* MCMessageHeader.h in Headers */, FA0964410C32F307B02242B8 /* MCAutoreleasePool.h in Headers */, 406D21F6F7ACED90BCA795EB /* MCBaseTypes.h in Headers */, F34876CCDC19E877B964CDA9 /* MCArray.h in Headers */, @@ -4289,6 +4207,7 @@ 27EE03BBC916FB16424F9CF9 /* MCHashMap.h in Headers */, 602DB41F397CBB627B421C7D /* MCLog.h in Headers */, 4A5ECD2D2F77DFB1F3F6BF11 /* MCObject.h in Headers */, + 84C36C3A1F62EE87003E1399 /* MCDefines.h in Headers */, 576F048DA0BFAC3086A5E508 /* MCRange.h in Headers */, 20FAC3A40837DDE7B117A58B /* MCSet.h in Headers */, 9AF0FDF184E1FF511D288E61 /* MCString.h in Headers */, @@ -4299,6 +4218,7 @@ 8F6991D1F5D47C1EE53E0144 /* MCOperation.h in Headers */, AE5F1F0F75CB25015A0F3F11 /* MCOperationCallback.h in Headers */, 2A072B0DF7CE10C882876F13 /* MCOperationQueue.h in Headers */, + 845FB84A1F29057A00A29DA8 /* CNetService.h in Headers */, 3BA824E083E9A950365D795D /* MCIMAP.h in Headers */, F3B08CFB60208C1C25314092 /* MCIMAPFolder.h in Headers */, 9E7F63C23A73DE9951AB6082 /* MCIMAPMessage.h in Headers */, @@ -4306,22 +4226,25 @@ D5257B3C7C35D0304F28B514 /* MCIMAPMultipart.h in Headers */, B1E68F3C5C04001AA7D7C012 /* MCIMAPNamespace.h in Headers */, A3740975B467CCB6E8B45BF4 /* MCIMAPNamespaceItem.h in Headers */, + 844D9CE21F28F1F500E470A8 /* CMessagePart.h in Headers */, 7408F42E99C35541080C11DB /* MCIMAPPart.h in Headers */, 4AB9BCB20EEC0AE915B9C236 /* MCIMAPProgressCallback.h in Headers */, 565A6ADC6EB2168A57C85958 /* MCIMAPSearchExpression.h in Headers */, 58CE4104E99120870C50B1C7 /* MCAsyncPOP.h in Headers */, 532ACF171DBC91AEA85C1C67 /* MCPOPOperationCallback.h in Headers */, + 8408C7F51F2637220003A816 /* CBase+Private.h in Headers */, + 8408C7F61F2637220003A816 /* CCore.h in Headers */, FB3AF3E32CAEF57DEC732CC8 /* MCPOPFetchMessageOperation.h in Headers */, 5E99F64225ADE38144D22CAC /* MCIMAPAsyncSession.h in Headers */, 52B5AAA92CA3DF9321990EA2 /* MCIMAPSession.h in Headers */, 97A2356B6CB23A5CD859CF0D /* MCPOP.h in Headers */, 8CAFD77E7A692C20D31A8BAF /* MCPOPMessageInfo.h in Headers */, + 84C36C401F62F087003E1399 /* MCHTMLBodyRendererTemplateCallback.h in Headers */, + 845FB8441F29031400A29DA8 /* CMailProvidersManager.h in Headers */, CC69356D9463512F75CB7845 /* MCPOPProgressCallback.h in Headers */, 896A300E021C118CCD4DA8FC /* MCPOPSession.h in Headers */, - D879A2F6CF197642476DDE5B /* MCOPOPFetchHeaderOperation.h in Headers */, B271EA628771A97A43AEAAEB /* MCPOPFetchMessagesOperation.h in Headers */, 591F15D7F28AEE54A96AB497 /* MCAttachment.h in Headers */, - 079BC8C0C4622F536D2E5707 /* MCOPOPMessageInfo.h in Headers */, 15B9D86694481EAF7D3629B6 /* MCSMTPOperation.h in Headers */, F208F99072B44F6F9FA36C0D /* MCSMTPAsyncSession.h in Headers */, F8DCBCEC6F0A48F92E827FED /* MCMessageBuilder.h in Headers */, @@ -4332,8 +4255,7 @@ 47FC8F983AFFF98F5BC72B38 /* MCSMTP.h in Headers */, AE2E1DE7529590DE128A1143 /* MCSMTPProgressCallback.h in Headers */, 856A0FD349772C0508B70517 /* MCSMTPSession.h in Headers */, - 37AB9F00B2E9B5AC9F1E7F1A /* MCOIMAPSession.h in Headers */, - E5D0FA1EB656AF537CB66E67 /* NSError+MCO.h in Headers */, + 8458F9531F3F505E0066C70C /* MCOObjectWrapper.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4342,141 +4264,190 @@ buildActionMask = 2147483647; files = ( 802A99231ECF83E500FFF0AB /* MailCore.h in Headers */, - 1C1DEA7565C8B2226EEDC83D /* MCONNTPPostOperation.h in Headers */, + 843E4A821F30716300D78022 /* MCOObjectWrapper.h in Headers */, + 840CB4551F274AD60068E8E6 /* CIMAPSearchOperation.h in Headers */, + 845FB84B1F29057A00A29DA8 /* CNetService.h in Headers */, + 845FB8451F29031400A29DA8 /* CMailProvidersManager.h in Headers */, + 844D9CE31F28F1F500E470A8 /* CMessagePart.h in Headers */, + 845FB8511F2909A000A29DA8 /* CMailProvider.h in Headers */, + 8408C8011F26378D0003A816 /* CAttachment.h in Headers */, + 8408C8091F26378D0003A816 /* CMessageParser.h in Headers */, + 84DBBEFB1F26413600F03A5F /* COperation.h in Headers */, + 84DBBEFC1F26413600F03A5F /* CAbstractMessage.h in Headers */, + 84DBBEFD1F26413600F03A5F /* CAbstractMessagePart.h in Headers */, + 84DBBEFE1F26413600F03A5F /* CAbstractMultipart.h in Headers */, + 84DBBEFF1F26413600F03A5F /* CMessageConstants.h in Headers */, + 84DBBF001F26413600F03A5F /* CAddress.h in Headers */, + 84C36C3D1F62F030003E1399 /* MCOperationQueueCallback.h in Headers */, + 84DBBF011F26413600F03A5F /* CAbstractPart.h in Headers */, + 84DBBF021F26413600F03A5F /* CMessageHeader.h in Headers */, + 84DBBF031F26413600F03A5F /* CAbstractMessageRendererCallback.h in Headers */, + 84DBBF041F26413600F03A5F /* CIMAPFolder.h in Headers */, + 84DBBF051F26413600F03A5F /* CIMAPMessage.h in Headers */, + 84DBBF061F26413600F03A5F /* CIMAPMessagePart.h in Headers */, + 84AD84941F435DEB000361A3 /* CMultipart.h in Headers */, + 84DBBF071F26413600F03A5F /* CIMAPMultipart.h in Headers */, + 84DBBF081F26413600F03A5F /* CIMAPNamespace.h in Headers */, + 84DBBF091F26413600F03A5F /* CIMAPNamespaceItem.h in Headers */, + 84DBBF0A1F26413600F03A5F /* CIMAPPart.h in Headers */, + 84DBBF0B1F26413600F03A5F /* CIMAPFolderInfo.h in Headers */, + 84DBBF0C1F26413600F03A5F /* CIMAPFolderStatus.h in Headers */, + 84DBBF0D1F26413600F03A5F /* CIMAPSearchExpression.h in Headers */, + 84DBBF0E1F26413600F03A5F /* CIMAPBaseOperation.h in Headers */, + 84DBBF0F1F26413600F03A5F /* CIMAPAppendMessageOperation.h in Headers */, + 84DBBF101F26413600F03A5F /* CIMAPCopyMessagesOperation.h in Headers */, + 84DBBF111F26413600F03A5F /* CIMAPFetchContentOperation.h in Headers */, + 84DBBF121F26413600F03A5F /* CIMAPFetchMessagesOperation.h in Headers */, + 84DBBF131F26413600F03A5F /* CIMAPFolderInfoOperation.h in Headers */, + 84DBBF141F26413600F03A5F /* CIMAPFolderStatusOperation.h in Headers */, + 84DBBF161F26413600F03A5F /* CIMAPIdleOperation.h in Headers */, + 84DBBF171F26413600F03A5F /* CIMAPAsyncSession.h in Headers */, + 84DBBF181F26413600F03A5F /* CIMAPFetchFoldersOperation.h in Headers */, + 84DBBF191F26413600F03A5F /* CIMAPCapabilityOperation.h in Headers */, + 84D72F201F32161800F570BC /* CData.h in Headers */, + 84DBBF1A1F26413600F03A5F /* CIMAPCheckAccountOperation.h in Headers */, + 84DBBF1B1F26413600F03A5F /* CIMAPCustomCommandOperation.h in Headers */, + 84DBBF1C1F26413600F03A5F /* CIMAPFetchContentToFileOperation.h in Headers */, + 84DBBF1D1F26413600F03A5F /* CIMAPFetchNamespaceOperation.h in Headers */, + 84DBBF1E1F26413600F03A5F /* CIMAPFetchParsedContentOperation.h in Headers */, + 84DBBF1F1F26413600F03A5F /* CIMAPMessageRenderingOperation.h in Headers */, + 84DBBF201F26413600F03A5F /* CIMAPMoveMessagesOperation.h in Headers */, + 84DBBF211F26413600F03A5F /* CIMAPQuotaOperation.h in Headers */, + 84DBBF221F26413600F03A5F /* CIMAPIdentity.h in Headers */, + 84DBBF231F26413600F03A5F /* CIMAPIdentityOperation.h in Headers */, + 84DBBF241F26413600F03A5F /* CSMTPSession.h in Headers */, + 84DBBF251F26413600F03A5F /* CSMTPOperation.h in Headers */, + 84DBBF261F26413600F03A5F /* CArray.h in Headers */, + 84DBBF271F26413600F03A5F /* CIndexSet.h in Headers */, + 84DBBF281F26413600F03A5F /* CObject.h in Headers */, + 84DBBF291F26413600F03A5F /* CDictionary.h in Headers */, + 84C1894D223808A3001430F3 /* CAutoreleasePool.h in Headers */, + 84DBBF2A1F26413600F03A5F /* CBase.h in Headers */, + 84C87A231F41DFCF0018398E /* CCore.h in Headers */, + 8408C8051F26378D0003A816 /* CMessageBuilder.h in Headers */, + 84DBBF2B1F26413600F03A5F /* CBase+Private.h in Headers */, + 843E4A8A1F30838500D78022 /* MailCoreString.h in Headers */, + 5D7BAE3BF9AF302A46460729 /* MCIMAPSession.h in Headers */, + E3A3AEC9263725A938A466F5 /* MCPOP.h in Headers */, + D8E5F7445B5A9AA13625897A /* MCPOPMessageInfo.h in Headers */, + A59ECA8DDE5FD9BB200E2D9E /* MCPOPProgressCallback.h in Headers */, + 8408C71D1F2635210003A816 /* NSSet+MCO.h in Headers */, + 8435684F1F45A2F200FCFF33 /* CAbstractMessageRendererCallbackWrapper.h in Headers */, + 8408C7151F26350D0003A816 /* NSDictionary+MCO.h in Headers */, + 8408C71F1F2635250003A816 /* NSString+MCO.h in Headers */, + 8408C71B1F26351C0003A816 /* NSObject+MCO.h in Headers */, + 8408C7131F2635090003A816 /* NSData+MCO.h in Headers */, + 8408C7111F2635030003A816 /* NSArray+MCO.h in Headers */, + 8408C7211F26352A0003A816 /* NSValue+MCO.h in Headers */, + 33418C6B4CBA051E587F9A11 /* MCPOPSession.h in Headers */, + 3BD69427581B268E89557F81 /* MCPOPFetchMessagesOperation.h in Headers */, + 52516BFEB3739590E779F6F5 /* MCAttachment.h in Headers */, + C166A8DA9CF7B11F5CFD6AA9 /* MCSMTPOperation.h in Headers */, + 843EA4811F79730500861123 /* MCLibetpan.h in Headers */, + FC6E25B0B716CFA16397D5FD /* MCSMTPAsyncSession.h in Headers */, + 2CCB64F93013A0B4A5D86A8D /* MCMessageBuilder.h in Headers */, + C1F4B4B5A8F425EE2E7DCA66 /* MCMessageParser.h in Headers */, + ACBE12776961DBE96F6E88CF /* MCMessagePart.h in Headers */, + CF8A1210E467225019219A0B /* MCMultipart.h in Headers */, + 456E8A4046BFB656BF170DA3 /* MCRFC822.h in Headers */, + 84C36C3F1F62F078003E1399 /* MCHTMLRenderer.h in Headers */, + E21801E17B7410B529BE0B98 /* MCSMTP.h in Headers */, + 366F0B2B1441B6B76913C90D /* MCSMTPProgressCallback.h in Headers */, + 7A5D6C8936879398260E5B7B /* MCSMTPSession.h in Headers */, + FB29EF78E53370FFBB151956 /* MCIMAPIdentityOperation.h in Headers */, + FA1EB2752E916FF386FCD3DD /* MCIMAPAppendMessageOperation.h in Headers */, + A0A1ACAB18472711AC5704F5 /* MCSMTPOperationCallback.h in Headers */, + 6FD6BF3896CE4A2B2DB624EF /* MCAsyncSMTP.h in Headers */, + 3ABFC3DE00F422C0866FD2B6 /* MCIMAPFetchNamespaceOperation.h in Headers */, + C59D601A5C291B3652174757 /* MCIMAPIdleOperation.h in Headers */, + E1F3E33A32BEB2B2DA828F87 /* MCIMAPCopyMessagesOperation.h in Headers */, + 35A4FE25031081ADFD4C0698 /* MCIMAPMoveMessagesOperation.h in Headers */, + 05A17F9F27B495ED0F667572 /* MCAddress.h in Headers */, + 41502E4B6A93898EF53D2C21 /* MCMessageConstants.h in Headers */, + 21426C6F22B5AD733A79661A /* MCMessageHeader.h in Headers */, + D10C246499923B5F19C5D7FF /* MCAutoreleasePool.h in Headers */, + EEA31A44BB279E45E6634543 /* MCBaseTypes.h in Headers */, + 3CE14B7C1892222E114AC11E /* MCArray.h in Headers */, + 3F610FE6FE6D4C7721ECCC1B /* MCAssert.h in Headers */, + DDFE51EDDAD8BF3FA792223F /* MCData.h in Headers */, + 1BDFDBC9E01906D5BEEBE995 /* MCHash.h in Headers */, + 6ABB980C406E247553A1C522 /* MCHashMap.h in Headers */, + EC8F7A75442E276BE3D5611E /* MCLog.h in Headers */, + 07121054A1A84C9D546096FC /* MCObject.h in Headers */, + 1FC6C22810924CE89B4E155A /* MCRange.h in Headers */, + 2B157B8E7F3A915667ADE7C6 /* MCSet.h in Headers */, + 0C6EE4C007B5FE22293F1844 /* MCString.h in Headers */, + 328F2F0668D2477E714CD275 /* MCUtils.h in Headers */, + A7D0A4BB5B7D25809B33B723 /* MCValue.h in Headers */, + BDA9FE8E7500DD007A2C6EF8 /* MCCore.h in Headers */, + 2E992ED3E1EB08DA6494509C /* MCOperation.h in Headers */, + 3A4EB6F1A1968F090A3712DA /* MCOperationCallback.h in Headers */, + 6DD55EC284E7CBF7413FAD92 /* MCOperationQueue.h in Headers */, + CD5DD0E5979B53708E84B2CE /* MCIMAP.h in Headers */, + A2821BEC0F171D2C7B1786A2 /* MCIMAPFolder.h in Headers */, + 78A69024E148BE5615D38666 /* MCIMAPMessage.h in Headers */, + 900337F01B5DD13ABB63BCC6 /* MCIMAPMessagePart.h in Headers */, + ED4BA7EA708C2886EF10F98E /* MCIMAPMultipart.h in Headers */, + 9018BECB2B8C0DF224A15132 /* MCIMAPNamespace.h in Headers */, + B617849103B64FEBA30975E9 /* MCIMAPNamespaceItem.h in Headers */, + 20995A38C1A7C39FC9C4EA0D /* MCIMAPPart.h in Headers */, + BD8A849CDEC40C3C98CECBA3 /* MCIMAPProgressCallback.h in Headers */, + 3E349E56ABA9E31B301CC9A4 /* MCIMAPSearchExpression.h in Headers */, + CCA5CD78DEFEEC31E664ABD2 /* MCAsyncPOP.h in Headers */, + 91F8E8ED4014B8C26821D247 /* MCPOPOperationCallback.h in Headers */, + 138571845D3FB15CED01175B /* MCPOPFetchMessageOperation.h in Headers */, + 5642B88645291DCD5372E5FF /* MCIMAPAsyncSession.h in Headers */, D40E3CC7F484F98F04054C31 /* MCNNTPPostOperation.h in Headers */, - 14A20BA5965894DC10C3DC9B /* MCOIMAPFetchContentToFileOperation.h in Headers */, 8D96BE9CABB92A9E4CA3228F /* MCIMAPFetchContentToFileOperation.h in Headers */, 5FEF7A557A99C90EDF9E5287 /* MCHTMLCleaner.h in Headers */, - DACB446498A58E756E21D839 /* MCOAccountValidator.h in Headers */, 70008CC60AFB9D72874FEE6F /* MCAccountValidator.h in Headers */, FDFC8B4CA1048E6EA1D6F266 /* MCIMAPFolderInfo.h in Headers */, 59A56DD29C2F2E36EBFB090E /* MCIMAPCheckAccountOperation.h in Headers */, - FF6A697C1F52F4ECB9C03942 /* MCOIMAPFetchParsedContentOperation.h in Headers */, 2AB202A1680EBDDC41BC8853 /* MCIMAPFetchParsedContentOperation.h in Headers */, 4DDA46346C360015991B7B83 /* MCNNTPFetchServerTimeOperation.h in Headers */, - E0D0B5244479174E2FDE0FEF /* MCONNTPFetchServerTimeOperation.h in Headers */, - 81766D65616D98E143BA8DA7 /* MCONNTPFetchOverviewOperation.h in Headers */, 2470AD3233C41BE5D914FDE3 /* MCNNTPFetchOverviewOperation.h in Headers */, - 18019B9132C80AEF852B0CEB /* MCOIMAPCustomCommandOperation.h in Headers */, 3206FD3ED89515925DA9BF3D /* MCIMAPCustomCommandOperation.h in Headers */, D86938A1F1FF4A614B3E6F34 /* MCNNTP.h in Headers */, - 1E50BEEF674E4A4DCE9A0FDE /* MCONNTP.h in Headers */, AF2B2DA5B20B882750859E34 /* MCAsyncNNTP.h in Headers */, - 3763528492FDC9622F28BD93 /* MCONNTPOperation.h in Headers */, - 326FD8772C077BB0ECA1CECB /* MCONNTPSession.h in Headers */, 5CBAB2ECE15269A85DE903A2 /* MCIMAPQuotaOperation.h in Headers */, 748671E304E26CDF65B3C234 /* MCNNTPGroupInfo.h in Headers */, - 52C6B23AC49D49D0F0B6E16C /* MCONNTPFetchHeaderOperation.h in Headers */, + 84C36C3B1F62EE88003E1399 /* MCDefines.h in Headers */, 1BDBD4A8C43EE9E7536E021E /* MCNNTPOperation.h in Headers */, - ADBE865F69A3ECAFCFF6064C /* MCONNTPFetchAllArticlesOperation.h in Headers */, - 50E957CF0372C5AF4937FF2D /* MCONNTPListNewsgroupsOperation.h in Headers */, - 0D8CAB6E664B79AD034036C3 /* MCONNTPFetchArticleOperation.h in Headers */, - CE7FB5491FB9398C37BE3AEE /* MCONNTPGroupInfo.h in Headers */, 9AC1190D35512F25DC179E6A /* MCNNTPAsyncSession.h in Headers */, - 87A98537B7D111209AFDA9E3 /* MCOIMAPQuotaOperation.h in Headers */, 80F639615326DC9F0CE40382 /* MCNNTPFetchHeaderOperation.h in Headers */, 1B952DBD5162F09260779A41 /* MCNNTPListNewsgroupsOperation.h in Headers */, - F44A4A1760AB495C3365A118 /* MCOIMAPIdentity.h in Headers */, 482B491DC7FE3462B881899E /* MCNNTPFetchArticleOperation.h in Headers */, - 10B237C1986B5D2E25171A14 /* MCOIMAPMessageRenderingOperation.h in Headers */, AD63521F7FED2DCD76765F00 /* MCIMAPMessageRenderingOperation.h in Headers */, 8EF93A43DF9F8B859852D0CB /* MCNNTPFetchAllArticlesOperation.h in Headers */, B7CC1BBDE98AB1841FF4D4BC /* MCIMAPFolderStatus.h in Headers */, 54388E630085133508D68A96 /* MCNNTPOperationCallback.h in Headers */, 3055EB3D5ABB36F4CCA25468 /* MCIMAPFolderStatusOperation.h in Headers */, - E39F4C58F1EAB625CFA590D0 /* MCOIMAPFolderStatus.h in Headers */, - 1C6433DDC4431C1AE105D869 /* MCOIMAPFolderStatusOperation.h in Headers */, - C18D3307A8DE8216E52217F8 /* MCOMailProvider.h in Headers */, - 7849DD2AAF0039824EAB4C9F /* MCOMailProvidersManager.h in Headers */, 095E03511D3D3D7BB782BB6C /* MCIMAPIdentity.h in Headers */, 2F9167A79FDC31E51FD7C2BD /* MCNNTPProgressCallback.h in Headers */, - B79FDB53A9025A12340633E8 /* MCONetService.h in Headers */, - DE76C5159271CD03889F8E6F /* MCOProvider.h in Headers */, 44BFF1BFC4DA9635C093FC4D /* MCConnectionLogger.h in Headers */, 89BFF372F06F06EE43F601EE /* MCMailProvider.h in Headers */, BAF3C3BA29851FF65EA8510E /* MCLibetpanTypes.h in Headers */, BF3FF231FF86423816F5A8E3 /* MCHTMLRendererCallback.h in Headers */, - 9A6B2DF110BCA6CC55E71E97 /* MCOMultipart.h in Headers */, - F8646A26920120178209E76F /* MCOMessageBuilder.h in Headers */, 8123CA50FD8A349DE24C197E /* MCIterator.h in Headers */, B895E6DA3DB2C9094513F376 /* MCNNTPSession.h in Headers */, - 482BC520550F5A3CBC966922 /* MCOPOPSession.h in Headers */, A15C9FF7C392424E08ADC54E /* MCIMAPSyncResult.h in Headers */, - 32EEFB1A52E629C101C8815F /* MCOIMAPBaseOperation.h in Headers */, 7FF10DB1E9A6A55DC8DF1FFF /* MCDateFormatter.h in Headers */, - FDD607D0EA8E061DF7851F47 /* MCOPOPOperation.h in Headers */, D30BB30E13D6602990D32521 /* MCICUTypes.h in Headers */, - DDBB947DB1054A36E7F8B4DA /* MCOPOPFetchMessagesOperation.h in Headers */, - 1F20A2FBF8E65CE73B4B4802 /* MCOPOPFetchMessageOperation.h in Headers */, - 48BDC6E2F7C7E7DA9E66DB52 /* MCOSMTP.h in Headers */, - E96992DCFAE762CA19D5884D /* MCORFC822.h in Headers */, - 093B8ED020FC6AE9F9DFEF78 /* MCOPOP.h in Headers */, 560304E655EADF6B709B6C6C /* MCMailProvidersManager.h in Headers */, C7B17FFEB54335D7D3C9F372 /* MCNetService.h in Headers */, - CF287D3BAAE980338EBB8992 /* MCOSMTPOperation.h in Headers */, - 35EF5E32EA062362C8CDE42B /* MCOSMTPSendOperation.h in Headers */, - F9B9A1F3289117088924E1C8 /* MCOConstants.h in Headers */, - C5B3A9357C94190330504521 /* MCOSMTPSession.h in Headers */, - 2BCAC2A9C080808A6CAED24A /* MCOAttachment.h in Headers */, - A5BB29FB218B4B4AECAB2532 /* MCOMessageParser.h in Headers */, - 1E59801F0C6E3553BFE22320 /* MCOMessagePart.h in Headers */, F7D46F5FD7375DCDB597C940 /* MCJSON.h in Headers */, - 417D14B87112F7074B466CED /* MCOIMAPFolderInfoOperation.h in Headers */, - 049613B0B276CC49D60E18C5 /* NSIndexSet+MCO.h in Headers */, - 7C91217FF23875F0DF406EC4 /* MCOIMAPFetchMessagesOperation.h in Headers */, - 8E5F1123F7348274D161A883 /* MCOIMAPCopyMessagesOperation.h in Headers */, - 402B217D2FDA0705FA80EA37 /* MCOIMAPMoveMessagesOperation.h in Headers */, 86826D824CA11A9D07E506CC /* MCMD5.h in Headers */, - 76D0ED6B0A023CD8C429A7CE /* MCOIMAPAppendMessageOperation.h in Headers */, AB594B926AA4F81F3F7545FC /* MCNull.h in Headers */, - 2909DA08A1469B46DEFC2DEB /* MCOIMAPSearchExpression.h in Headers */, - 271FB4CA4C7371157E73F95A /* MCOIMAPFetchContentOperation.h in Headers */, - 27581A33396A0DFA89DBDD20 /* MCOIndexSet.h in Headers */, - 044FC1F9E419A2DA57A68F96 /* MCOIMAPFetchNamespaceOperation.h in Headers */, - 302F0D954AC56A108413B736 /* MCOIMAPIdleOperation.h in Headers */, - 58573A7F69BC56D50B7FF131 /* MCOIMAPSearchOperation.h in Headers */, - 2AF748035111C741663A6B67 /* MCOIMAPIdentityOperation.h in Headers */, - E1E985D1989D9875D7EF2042 /* MCOIMAPMessagePart.h in Headers */, - 5F890CECD69F936D7BE6261B /* MCOIMAPCapabilityOperation.h in Headers */, - 5AF2114BF777016AD8E49BE9 /* MCOIMAPFolderInfo.h in Headers */, - 145C8FE3A7EC3593E1A33517 /* MCOOperation.h in Headers */, - 2EA8FAA76470C3D16F34CD86 /* MCOIMAPNamespace.h in Headers */, - 59F51DE4F3C1041A832317D1 /* MCOIMAPNamespaceItem.h in Headers */, - C4E42086490E64BD83ACBBA3 /* MCORange.h in Headers */, - 7A1E0824EDBAF10EE11DB6A7 /* MCOIMAPMultipart.h in Headers */, - F35AA1CEBFA6EC2BA451D17A /* MCOHTMLRendererDelegate.h in Headers */, - 313E695471BC9A477B677BDE /* MCOHTMLRendererIMAPDelegate.h in Headers */, F4B2AF31150B3DB1A6ECD0BC /* MCProvider.h in Headers */, - B8982E581E0D7A44D84E18D7 /* MCOIMAPPart.h in Headers */, - 67027A677E0D4220451ECCED /* MCOIMAPFetchFoldersOperation.h in Headers */, - 35630AABCF7F7895C249F86E /* MCOIMAPFolder.h in Headers */, - 5E2860A01BBD8B59F38BFEFE /* MCOIMAPOperation.h in Headers */, - D11BD28C51B2555A4A3B5EF2 /* MCOIMAPMessage.h in Headers */, - 0285143A54170BFBE20CF583 /* MCOUtils.h in Headers */, 2470565C009E610B456AEBD9 /* MCAbstractMessage.h in Headers */, - 0FCC7057D298389470514E39 /* NSValue+MCO.h in Headers */, 937170C4694EDF6630CC4DDA /* MCAddressDisplay.h in Headers */, BA9EE0254B07D265D628EB0D /* MCRenderer.h in Headers */, 7F796F927EF5CDFB3BB43E38 /* MCIndexSet.h in Headers */, + 84C36C411F62F087003E1399 /* MCHTMLBodyRendererTemplateCallback.h in Headers */, F6E7C83028F8E623B3643F64 /* MCIMAPCapabilityOperation.h in Headers */, 0BF2B23FB724081E007CB7D8 /* MCAsyncIMAP.h in Headers */, - 843A6E1A891EE36B451FDED8 /* MCOAddress.h in Headers */, - CF46862653BCECA13BA3B83A /* MCOAbstractMessage.h in Headers */, - 2B8D8E5B6EF1FF9E2CB0A9FE /* MCOAbstract.h in Headers */, - 110673744CECCFD4C1F67272 /* MCOAbstractMultipart.h in Headers */, - 0EEB9FC38BC4CB05C917DCDF /* MCOAbstractMessagePart.h in Headers */, - 67C8A8E80F5E9396C813C4A0 /* MCOMessageHeader.h in Headers */, - 8A33AE1E339C800A921CE2DF /* MCOAbstractPart.h in Headers */, - BB326E032A5839CD18A90E3D /* MCObjC.h in Headers */, - 7C1D9BDC4BAF244EC85FD7F6 /* NSObject+MCO.h in Headers */, - 936CA0E6259664A60BA684B2 /* NSArray+MCO.h in Headers */, - 29A1D8460C55E89BE051E63F /* MCOObjectWrapper.h in Headers */, - 574149F83EDABAAD4D520BFB /* NSDictionary+MCO.h in Headers */, 3974E4AC43E9CC45C843E100 /* MCAbstract.h in Headers */, - 50B141837659C00AC6A0D2A9 /* NSData+MCO.h in Headers */, - 90678C5B9D575E73304D461E /* MCOIMAP.h in Headers */, 8B39E1B92970F8B2B206BE33 /* MCPOPFetchHeaderOperation.h in Headers */, - 35FC3A62359EF9E81BF698D5 /* NSString+MCO.h in Headers */, D3B0E96454BA62D15FD3C5DC /* MCIMAPFetchFoldersOperation.h in Headers */, 07DE281343371AAAB7375DF2 /* MCAsync.h in Headers */, B2156F4CF16BF378D4F26B83 /* MCAbstractMessagePart.h in Headers */, @@ -4490,70 +4461,6 @@ 6D695BAAFE4012D4C3F3A03C /* MCIMAPFetchMessagesOperation.h in Headers */, 7EE9C6F64230E5B718679ABC /* MCIMAPSearchOperation.h in Headers */, 69880E44DFC638E391CA8840 /* MCIMAPFetchContentOperation.h in Headers */, - FB29EF78E53370FFBB151956 /* MCIMAPIdentityOperation.h in Headers */, - FA1EB2752E916FF386FCD3DD /* MCIMAPAppendMessageOperation.h in Headers */, - A0A1ACAB18472711AC5704F5 /* MCSMTPOperationCallback.h in Headers */, - 6FD6BF3896CE4A2B2DB624EF /* MCAsyncSMTP.h in Headers */, - 3ABFC3DE00F422C0866FD2B6 /* MCIMAPFetchNamespaceOperation.h in Headers */, - C59D601A5C291B3652174757 /* MCIMAPIdleOperation.h in Headers */, - E1F3E33A32BEB2B2DA828F87 /* MCIMAPCopyMessagesOperation.h in Headers */, - 35A4FE25031081ADFD4C0698 /* MCIMAPMoveMessagesOperation.h in Headers */, - 05A17F9F27B495ED0F667572 /* MCAddress.h in Headers */, - 41502E4B6A93898EF53D2C21 /* MCMessageConstants.h in Headers */, - 21426C6F22B5AD733A79661A /* MCMessageHeader.h in Headers */, - D10C246499923B5F19C5D7FF /* MCAutoreleasePool.h in Headers */, - EEA31A44BB279E45E6634543 /* MCBaseTypes.h in Headers */, - 3CE14B7C1892222E114AC11E /* MCArray.h in Headers */, - 3F610FE6FE6D4C7721ECCC1B /* MCAssert.h in Headers */, - DDFE51EDDAD8BF3FA792223F /* MCData.h in Headers */, - 1BDFDBC9E01906D5BEEBE995 /* MCHash.h in Headers */, - 6ABB980C406E247553A1C522 /* MCHashMap.h in Headers */, - EC8F7A75442E276BE3D5611E /* MCLog.h in Headers */, - 07121054A1A84C9D546096FC /* MCObject.h in Headers */, - 1FC6C22810924CE89B4E155A /* MCRange.h in Headers */, - 2B157B8E7F3A915667ADE7C6 /* MCSet.h in Headers */, - 0C6EE4C007B5FE22293F1844 /* MCString.h in Headers */, - 328F2F0668D2477E714CD275 /* MCUtils.h in Headers */, - A7D0A4BB5B7D25809B33B723 /* MCValue.h in Headers */, - BDA9FE8E7500DD007A2C6EF8 /* MCCore.h in Headers */, - 2E992ED3E1EB08DA6494509C /* MCOperation.h in Headers */, - 3A4EB6F1A1968F090A3712DA /* MCOperationCallback.h in Headers */, - 6DD55EC284E7CBF7413FAD92 /* MCOperationQueue.h in Headers */, - CD5DD0E5979B53708E84B2CE /* MCIMAP.h in Headers */, - A2821BEC0F171D2C7B1786A2 /* MCIMAPFolder.h in Headers */, - 78A69024E148BE5615D38666 /* MCIMAPMessage.h in Headers */, - 900337F01B5DD13ABB63BCC6 /* MCIMAPMessagePart.h in Headers */, - ED4BA7EA708C2886EF10F98E /* MCIMAPMultipart.h in Headers */, - 9018BECB2B8C0DF224A15132 /* MCIMAPNamespace.h in Headers */, - B617849103B64FEBA30975E9 /* MCIMAPNamespaceItem.h in Headers */, - 20995A38C1A7C39FC9C4EA0D /* MCIMAPPart.h in Headers */, - BD8A849CDEC40C3C98CECBA3 /* MCIMAPProgressCallback.h in Headers */, - 3E349E56ABA9E31B301CC9A4 /* MCIMAPSearchExpression.h in Headers */, - CCA5CD78DEFEEC31E664ABD2 /* MCAsyncPOP.h in Headers */, - 91F8E8ED4014B8C26821D247 /* MCPOPOperationCallback.h in Headers */, - 138571845D3FB15CED01175B /* MCPOPFetchMessageOperation.h in Headers */, - 5642B88645291DCD5372E5FF /* MCIMAPAsyncSession.h in Headers */, - 5D7BAE3BF9AF302A46460729 /* MCIMAPSession.h in Headers */, - E3A3AEC9263725A938A466F5 /* MCPOP.h in Headers */, - D8E5F7445B5A9AA13625897A /* MCPOPMessageInfo.h in Headers */, - 6CAA68845098E4C116E7AAD7 /* MCOPOPFetchHeaderOperation.h in Headers */, - A59ECA8DDE5FD9BB200E2D9E /* MCPOPProgressCallback.h in Headers */, - 33418C6B4CBA051E587F9A11 /* MCPOPSession.h in Headers */, - 3BD69427581B268E89557F81 /* MCPOPFetchMessagesOperation.h in Headers */, - 52516BFEB3739590E779F6F5 /* MCAttachment.h in Headers */, - C362FB4DBE7A407450FB5AAE /* MCOPOPMessageInfo.h in Headers */, - C166A8DA9CF7B11F5CFD6AA9 /* MCSMTPOperation.h in Headers */, - FC6E25B0B716CFA16397D5FD /* MCSMTPAsyncSession.h in Headers */, - 2CCB64F93013A0B4A5D86A8D /* MCMessageBuilder.h in Headers */, - C1F4B4B5A8F425EE2E7DCA66 /* MCMessageParser.h in Headers */, - ACBE12776961DBE96F6E88CF /* MCMessagePart.h in Headers */, - CF8A1210E467225019219A0B /* MCMultipart.h in Headers */, - 456E8A4046BFB656BF170DA3 /* MCRFC822.h in Headers */, - E21801E17B7410B529BE0B98 /* MCSMTP.h in Headers */, - 366F0B2B1441B6B76913C90D /* MCSMTPProgressCallback.h in Headers */, - 7A5D6C8936879398260E5B7B /* MCSMTPSession.h in Headers */, - ED75C98B2549334C5E0B85BB /* MCOIMAPSession.h in Headers */, - 1629F9D1A5BF128A37B149F2 /* NSError+MCO.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4579,6 +4486,24 @@ productReference = 27780C3A19CF9CD100C77E44 /* MailCore.framework */; productType = "com.apple.product-type.framework"; }; + 841E64F91F683440007BB736 /* MailCoreTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 841E65021F683440007BB736 /* Build configuration list for PBXNativeTarget "MailCoreTests" */; + buildPhases = ( + 841E64F61F683440007BB736 /* Sources */, + 841E64F71F683440007BB736 /* Frameworks */, + 841E64F81F683440007BB736 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 841E65011F683440007BB736 /* PBXTargetDependency */, + ); + name = MailCoreTests; + productName = MailCoreTests; + productReference = 841E64FA1F683440007BB736 /* MailCoreTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; C600B6131A242C3F000728F1 /* unittestcpp */ = { isa = PBXNativeTarget; buildConfigurationList = C600B61A1A242C3F000728F1 /* Build configuration list for PBXNativeTarget "unittestcpp" */; @@ -4641,6 +4566,7 @@ C6A81B8D1706840C00882C15 /* Sources */, C6A81B8E1706840C00882C15 /* Frameworks */, C6A81B8F1706840C00882C15 /* Resources */, + 84F7B4931D916CE7005F83E8 /* Embed Frameworks */, ); buildRules = ( ); @@ -4714,14 +4640,29 @@ C64EA52E169E772200778456 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0700; + LastSwiftUpdateCheck = 0900; + LastUpgradeCheck = 0800; ORGANIZATIONNAME = MailCore; TargetAttributes = { + 27780C2A19CF9CD100C77E44 = { + LastSwiftMigration = 0830; + }; + 841E64F91F683440007BB736 = { + CreatedOnToolsVersion = 9.0; + ProvisioningStyle = Automatic; + }; C600B6131A242C3F000728F1 = { CreatedOnToolsVersion = 6.0; }; + C64EA536169E772200778456 = { + LastSwiftMigration = 0800; + }; C6B5AE0119F630B3001352A6 = { CreatedOnToolsVersion = 6.0; + LastSwiftMigration = 0900; + }; + C6BD288C170BD71100A91AC1 = { + ProvisioningStyle = Automatic; }; }; }; @@ -4730,6 +4671,7 @@ developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( + English, en, ); mainGroup = C64EA52C169E772200778456; @@ -4745,6 +4687,7 @@ 27780C2A19CF9CD100C77E44 /* mailcore ios */, C6B5AE0119F630B3001352A6 /* unittest */, C600B6131A242C3F000728F1 /* unittestcpp */, + 841E64F91F683440007BB736 /* MailCoreTests */, ); }; /* End PBXProject section */ @@ -4758,6 +4701,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 841E64F81F683440007BB736 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 843E58171F69554300AE681B /* data in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 84AF9E7F172DBB0000E60AA3 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -4785,6 +4736,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 841E64F51F6833EA007BB736 /* MailCore.framework in Resources */, C6B5B09119F6359B001352A6 /* data in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -4860,7 +4812,116 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 27780C2E19CF9CD100C77E44 /* MCOFramework.mm in Sources */, + 84DBBEC21F26411500F03A5F /* Attachment.swift in Sources */, + 84DBBEC31F26411500F03A5F /* MessageBuilder.swift in Sources */, + 84DBBEC41F26411500F03A5F /* MessageParser.swift in Sources */, + 84DBBEC51F26411500F03A5F /* Operation.swift in Sources */, + 84DBBEC61F26411500F03A5F /* MailCoreError.swift in Sources */, + 84DBBEC71F26411500F03A5F /* AbstractMessage.swift in Sources */, + 84DBBEC81F26411500F03A5F /* AbstractMessagePart.swift in Sources */, + 84DBBEC91F26411500F03A5F /* AbstractMultipart.swift in Sources */, + 84DBBECA1F26411500F03A5F /* AbstractPart.swift in Sources */, + 84DBBECB1F26411500F03A5F /* Address.swift in Sources */, + 84DBBECC1F26411500F03A5F /* MessageHeader.swift in Sources */, + 84DBBECD1F26411500F03A5F /* HTMLRendererDelegate.swift in Sources */, + 84DBBECE1F26411500F03A5F /* HTMLRendererImapDelegate.swift in Sources */, + 84DBBECF1F26411500F03A5F /* AbstractMessageRendererCallback.swift in Sources */, + 84DBBED01F26411500F03A5F /* Convertible.swift in Sources */, + 84DBBED11F26411500F03A5F /* String+Mailcore.swift in Sources */, + 84DBBED21F26411500F03A5F /* Dictionary+Mailcore.swift in Sources */, + 845FB84F1F2909A000A29DA8 /* CMailProvider.cpp in Sources */, + 84DBBED31F26411500F03A5F /* Data+Mailcore.swift in Sources */, + 84DBBED41F26411500F03A5F /* Array+Mailcore.swift in Sources */, + 84DBBED51F26411500F03A5F /* UInt32+Mailcore.swift in Sources */, + 84DBBED61F26411500F03A5F /* MCOIndexSet.swift in Sources */, + 84DBBED71F26411500F03A5F /* IMAPFolder.swift in Sources */, + 84DBBED81F26411500F03A5F /* IMAPMessage.swift in Sources */, + 844D9CE11F28F1F500E470A8 /* CMessagePart.cpp in Sources */, + 84DBBED91F26411500F03A5F /* IMAPMessagePart.swift in Sources */, + 84DBBEDA1F26411500F03A5F /* IMAPMultipart.swift in Sources */, + 84DBBEDB1F26411500F03A5F /* IMAPNamespace.swift in Sources */, + 84DBBEDC1F26411500F03A5F /* IMAPNamespaceItem.swift in Sources */, + 84DBBEDD1F26411500F03A5F /* IMAPPart.swift in Sources */, + 84DBBEDE1F26411500F03A5F /* IMAPFolderInfo.swift in Sources */, + 84DBBEDF1F26411500F03A5F /* IMAPFolderStatus.swift in Sources */, + 84DBBEE01F26411500F03A5F /* IMAPSearchExpression.swift in Sources */, + 84DBBEE11F26411500F03A5F /* IMAPBaseOperation.swift in Sources */, + 843EA47D1F795A5400861123 /* LibetpanHelper.swift in Sources */, + 84DBBEE21F26411500F03A5F /* IMAPOperation.swift in Sources */, + 84DBBEE31F26411500F03A5F /* IMAPAppendMessageOperation.swift in Sources */, + 84DBBEE41F26411500F03A5F /* IMAPCopyMessagesOperation.swift in Sources */, + 84DBBEE51F26411500F03A5F /* IMAPFetchContentOperation.swift in Sources */, + 84DBBEE61F26411500F03A5F /* IMAPFetchMessagesOperation.swift in Sources */, + 84DBBEE71F26411500F03A5F /* IMAPFolderInfoOperation.swift in Sources */, + 84DBBEE81F26411500F03A5F /* IMAPFolderStatusOperation.swift in Sources */, + 84DBBEE91F26411500F03A5F /* IMAPSearchOperation.swift in Sources */, + 84DBBEEA1F26411500F03A5F /* IMAPIdleOperation.swift in Sources */, + 84DBBEEB1F26411500F03A5F /* IMAPSession.swift in Sources */, + 84DBBEEC1F26411500F03A5F /* IMAPFetchFoldersOperation.swift in Sources */, + 84DBBEED1F26411500F03A5F /* IMAPCapabilityOperation.swift in Sources */, + 84DBBEEE1F26411500F03A5F /* IMAPCheckAccountOperation.swift in Sources */, + 84DBBEEF1F26411500F03A5F /* IMAPCustomCommandOperation.swift in Sources */, + 84DBBEF01F26411500F03A5F /* IMAPFetchContentToFileOperation.swift in Sources */, + 84DBBEF11F26411500F03A5F /* IMAPFetchNamespaceOperation.swift in Sources */, + 84DBBEF21F26411500F03A5F /* IMAPFetchParsedContentOperation.swift in Sources */, + 84DBBEF31F26411500F03A5F /* IMAPMessageRenderingOperation.swift in Sources */, + 84DBBEF41F26411500F03A5F /* IMAPMoveMessagesOperation.swift in Sources */, + 84DBBEF51F26411500F03A5F /* IMAPQuotaOperation.swift in Sources */, + 84DBBEF61F26411500F03A5F /* IMAPIdentity.swift in Sources */, + 84C1894B223808A3001430F3 /* CAutoreleasePool.cpp in Sources */, + 84DBBEF71F26411500F03A5F /* IMAPIdentityOperation.swift in Sources */, + 84DBBEF81F26411500F03A5F /* SMTPSession.swift in Sources */, + 84DBBEF91F26411500F03A5F /* SMTPOperation.swift in Sources */, + 84DBBEFA1F26411500F03A5F /* SMTPSendOperation.swift in Sources */, + 846693051F6829AA0020C6C9 /* MessagePart.swift in Sources */, + 8408C81F1F263AD50003A816 /* COperation.cpp in Sources */, + 8408C8201F263AD50003A816 /* CAbstractMessage.cpp in Sources */, + 8408C8211F263AD50003A816 /* CAbstractMessagePart.cpp in Sources */, + 8408C8221F263AD50003A816 /* CAbstractMultipart.cpp in Sources */, + 8408C8231F263AD50003A816 /* CAddress.cpp in Sources */, + 8408C8241F263AD50003A816 /* CAbstractPart.cpp in Sources */, + 8408C8251F263AD50003A816 /* CMessageHeader.cpp in Sources */, + 8408C8261F263AD50003A816 /* CAbstractMessageRendererCallback.cpp in Sources */, + 8408C8271F263AD50003A816 /* CIMAPFolder.cpp in Sources */, + 8408C8281F263AD50003A816 /* CIMAPMessage.cpp in Sources */, + 8408C8291F263AD50003A816 /* CIMAPMessagePart.cpp in Sources */, + 8408C82A1F263AD50003A816 /* CIMAPMultipart.cpp in Sources */, + 8408C82B1F263AD50003A816 /* CIMAPNamespace.cpp in Sources */, + 8408C82C1F263AD50003A816 /* CIMAPNamespaceItem.cpp in Sources */, + 8408C82D1F263AD50003A816 /* CIMAPPart.cpp in Sources */, + 84AD84921F435DEB000361A3 /* CMultipart.cpp in Sources */, + 8408C82E1F263AD50003A816 /* CIMAPFolderInfo.cpp in Sources */, + 8408C82F1F263AD50003A816 /* CIMAPFolderStatus.cpp in Sources */, + 8408C8301F263AD50003A816 /* CIMAPSearchExpression.cpp in Sources */, + 84E52F6F1F3350CA00233DA3 /* Object.swift in Sources */, + 8408C8311F263AD50003A816 /* CIMAPBaseOperation.cpp in Sources */, + 8408C8321F263AD50003A816 /* CIMAPAppendMessageOperation.cpp in Sources */, + 8408C8331F263AD50003A816 /* CIMAPCopyMessagesOperation.cpp in Sources */, + 8408C8341F263AD50003A816 /* CIMAPFetchContentOperation.cpp in Sources */, + 843E4A881F30838500D78022 /* MailCoreString.cpp in Sources */, + 8408C8351F263AD50003A816 /* CIMAPFetchMessagesOperation.cpp in Sources */, + 8408C8361F263AD50003A816 /* CIMAPFolderInfoOperation.cpp in Sources */, + 8408C8371F263AD50003A816 /* CIMAPFolderStatusOperation.cpp in Sources */, + 8408C8391F263AD50003A816 /* CIMAPIdleOperation.cpp in Sources */, + 8408C83A1F263AD50003A816 /* CIMAPAsyncSession.cpp in Sources */, + 8408C83B1F263AD50003A816 /* CIMAPFetchFoldersOperation.cpp in Sources */, + 8408C83C1F263AD50003A816 /* CIMAPCapabilityOperation.cpp in Sources */, + 8408C83D1F263AD50003A816 /* CIMAPCheckAccountOperation.cpp in Sources */, + 8408C83E1F263AD50003A816 /* CIMAPCustomCommandOperation.cpp in Sources */, + 8408C83F1F263AD50003A816 /* CIMAPFetchContentToFileOperation.cpp in Sources */, + 8408C8401F263AD50003A816 /* CIMAPFetchNamespaceOperation.cpp in Sources */, + 8408C8411F263AD50003A816 /* CIMAPFetchParsedContentOperation.cpp in Sources */, + 8408C8421F263AD50003A816 /* CIMAPMessageRenderingOperation.cpp in Sources */, + 8408C8431F263AD50003A816 /* CIMAPMoveMessagesOperation.cpp in Sources */, + 8408C8441F263AD50003A816 /* CIMAPQuotaOperation.cpp in Sources */, + 8408C8451F263AD50003A816 /* CIMAPIdentity.cpp in Sources */, + 8408C8461F263AD50003A816 /* CIMAPIdentityOperation.cpp in Sources */, + 8408C8471F263AD50003A816 /* CSMTPSession.cpp in Sources */, + 8408C8481F263AD50003A816 /* CSMTPOperation.cpp in Sources */, + 8408C8491F263AD50003A816 /* CArray.cpp in Sources */, + 8408C84A1F263AD50003A816 /* CIndexSet.cpp in Sources */, + 8408C84B1F263AD50003A816 /* CObject.cpp in Sources */, + 8408C84C1F263AD50003A816 /* CDictionary.cpp in Sources */, 2BA05A32764F85A07627EFB1 /* MCNNTPFetchArticleOperation.cpp in Sources */, C437A833C190907BC1C5BA8F /* MCAbstractMessage.cpp in Sources */, 5D380253F1CC55BD97B01520 /* MCAbstractMessagePart.cpp in Sources */, @@ -4868,17 +4929,18 @@ F1FF4A91ACA778557482F3CC /* MCIMAPNoopOperation.cpp in Sources */, 1FF2CDE08DD91C05320CD8CF /* MCAbstractMultipart.cpp in Sources */, 633CDD225927A838258C68C4 /* MCAbstractPart.cpp in Sources */, + 843E49FD1F2F9A4700D78022 /* ConnectionLoggerHelper.swift in Sources */, B6DAF3A5BC75C3131A3E5BB7 /* MCAddress.cpp in Sources */, 3AD29E8C23C53793D5AD6437 /* MCMessageHeader.cpp in Sources */, 1AE39966A02FFB7FB1F11512 /* MCAutoreleasePool.cpp in Sources */, + 845FB8431F29031400A29DA8 /* CMailProvidersManager.cpp in Sources */, + 845FB85E1F2914D200A29DA8 /* MailProvidersManager.swift in Sources */, 5D03952E13B7236BD60534BE /* MCArray.cpp in Sources */, 4C87BB31E2E17DDA01C657E4 /* MCZip.cpp in Sources */, EE447F0391248A0BED44DC6D /* MCSMTPNoopOperation.cpp in Sources */, - D2101A4E4A1866F49014C00E /* MCONNTPFetchOverviewOperation.mm in Sources */, - 857358F7C8D0843E5A84D4F3 /* MCOIMAPFetchParsedContentOperation.mm in Sources */, 052AAA74C5D3B28F3167F974 /* MCAssert.c in Sources */, - D7CFD0B9803CA22FB32B18A5 /* MCONNTPGroupInfo.mm in Sources */, 4A4A96DDCA43E40CA772C52C /* MCData.cpp in Sources */, + 843E58151F6927DA00AE681B /* DispatchQueue+Mailcore.swift in Sources */, 9FE4A7EADDB2DEB7EF72D156 /* MCHash.cpp in Sources */, 63808A80CC695018058077F4 /* MCHashMap.cpp in Sources */, C787961953BEC9FF6FC63FB8 /* MCLog.cpp in Sources */, @@ -4894,8 +4956,6 @@ 17AE4024ABC69FAFF4C5E581 /* MCIMAPFolder.cpp in Sources */, 323CA434D479B1DA1065DBAE /* MCIMAPMessage.cpp in Sources */, A623909AAA8C23264EEF776E /* MCIMAPMessagePart.cpp in Sources */, - 3DF4B51E06CD755E6405F6AB /* MCONNTPFetchAllArticlesOperation.mm in Sources */, - A805BC4801E78224A75CC196 /* MCONNTPFetchServerTimeOperation.mm in Sources */, A849B8D51A28615EEF2EABE3 /* MCIMAPMultipart.cpp in Sources */, 8742EDE467A07D548A294318 /* MCIMAPNamespace.cpp in Sources */, 26CA50680EBC1B1A27F9051E /* MCIMAPNamespaceItem.cpp in Sources */, @@ -4914,10 +4974,9 @@ 66662CF33D7C3F991F69AF32 /* MCMessageBuilder.cpp in Sources */, B067722112DC35F007BDEC7A /* MCMessageParser.cpp in Sources */, B877A3CFE9A48A87DDDDE151 /* MCMessagePart.cpp in Sources */, - C9B8227A90AA7356E367BE08 /* MCONNTPListNewsgroupsOperation.mm in Sources */, + 845FB8491F29057A00A29DA8 /* CNetService.cpp in Sources */, 246C6256FB3D2D45C060531C /* MCMultipart.cpp in Sources */, 258E3EB3B06E71D29AF6A4E1 /* MCSMTPSession.cpp in Sources */, - C3B67CB2EC956397234D6958 /* MCOIMAPNoopOperation.mm in Sources */, C0C6F07E9BC4EBA836D41A1A /* MCSMTPAsyncSession.cpp in Sources */, 4895FCEAD620719B0F44579E /* MCCertificateUtils.cpp in Sources */, 153444EFB4CCB86F2CABAA6C /* MCSMTPLoginOperation.cpp in Sources */, @@ -4932,7 +4991,6 @@ A42D0D576E54917ED0F730D8 /* MCIMAPFetchFoldersOperation.cpp in Sources */, BB68B0C5AAB589D806F35438 /* MCIMAPRenameFolderOperation.cpp in Sources */, E02BA87A589C4602DC1BF6D3 /* ConvertUTF.c in Sources */, - B60487ACA616A809B944A0F2 /* MCOIMAPCustomCommandOperation.mm in Sources */, 867DF395CFCFC98C9A692CA0 /* MCIMAPDeleteFolderOperation.cpp in Sources */, 77B4DC9F890092853F645F08 /* MCIMAPIdentity.cpp in Sources */, 454BB4D0CF639EACC8915385 /* MCNNTPFetchAllArticlesOperation.cpp in Sources */, @@ -4942,16 +5000,16 @@ 42DB7BAB14B996C711359336 /* MCNNTPAsyncSession.cpp in Sources */, A108EE056AE49B51447D52C7 /* MCIMAPMoveMessagesOperation.cpp in Sources */, D40968F57C035F5B4D60DEA3 /* MCIMAPAppendMessageOperation.cpp in Sources */, + 845FB85B1F2910D700A29DA8 /* MailProvider.swift in Sources */, D94C008FBB3C84281EAFFCC6 /* MCIMAPCopyMessagesOperation.cpp in Sources */, A549CD214B203F1620CC0F77 /* uobject.cpp in Sources */, F948024B2C96BFB5B86B049D /* MCIMAPExpungeOperation.cpp in Sources */, - 30D4517EC9261CE038E73D23 /* NSIndexSet+MCO.m in Sources */, 51FA844FCC46F6322814574A /* MCIMAPFetchMessagesOperation.cpp in Sources */, + 840CB4531F274AD60068E8E6 /* CIMAPSearchOperation.cpp in Sources */, 5A20312A0E17B134BFB8A03B /* MCIMAPFetchContentOperation.cpp in Sources */, DBB6159C2BC8A69649902CD0 /* MCNNTPCheckAccountOperation.cpp in Sources */, 230552946325FBC6CE50CD05 /* MCIMAPStoreFlagsOperation.cpp in Sources */, E3833896CBAB914223D0C770 /* MCIMAPStoreLabelsOperation.cpp in Sources */, - 85FBB90565A47732E22118B5 /* NSSet+MCO.mm in Sources */, DCD2FF551E227414F2934B55 /* MCIMAPSearchOperation.cpp in Sources */, 3DDB33D31ECC11E0B0A49CC1 /* zip.c in Sources */, A11FA879FB152E0A5AA3E21B /* MCIMAPIdleOperation.cpp in Sources */, @@ -4967,150 +5025,89 @@ 13C7C4080CC5DF60AC79E003 /* MCPOPAsyncSession.cpp in Sources */, D1523D8529F92346D5447C31 /* MCPOPFetchHeaderOperation.cpp in Sources */, 49117180689B3BCDD3D3D898 /* MCPOPFetchMessageOperation.cpp in Sources */, + 8408C8071F26378D0003A816 /* CMessageParser.cpp in Sources */, D4D1B23C6FFA21A5E56C0334 /* MCPOPDeleteMessagesOperation.cpp in Sources */, 7D7DD58E4ED5A38350C0D90A /* MCPOPOperation.cpp in Sources */, 6E851F1A1D71DDA3D29FBBC8 /* MCPOPFetchMessagesOperation.cpp in Sources */, 2740D3722F3FB8E43C9927B3 /* udataswp.c in Sources */, 90A45B4FD6198433333A19CA /* cstring.c in Sources */, ED380ED7FC4ABD64D3EEF0BA /* MCIMAPAsyncSession.cpp in Sources */, - E084950848F43F832B257B84 /* NSData+MCO.mm in Sources */, - 41ED5C763019329EC6C9E74E /* NSString+MCO.mm in Sources */, - F4CCD55F6DFDD6858E6BB848 /* MCOObjectWrapper.mm in Sources */, 1A47ED20F1693DE237671B75 /* MCNNTPFetchHeaderOperation.cpp in Sources */, - 56262E142C519E59E8E49E0C /* MCONNTPFetchHeaderOperation.mm in Sources */, 6E419468F107A702054A3EA2 /* inputext.cpp in Sources */, E561F2B9C70CB9FA580C45E1 /* ucsdet.cpp in Sources */, 3A3BC9EA3B314CB8185D1E11 /* ioapi.c in Sources */, B697AA487FD38113BDCAD094 /* utrace.c in Sources */, - 47E641E8E45B0F1F16EA8EE9 /* MCOIMAPSession.mm in Sources */, - E8661A5DA85C79EA61C0BC61 /* NSError+MCO.mm in Sources */, - 89FB57A7347B1506AD2B5573 /* MCOIMAPFetchFoldersOperation.mm in Sources */, - 9E56607BBA51478E92FA5F14 /* MCOPOPNoopOperation.mm in Sources */, 378720EB8B04256FE0E8BFE9 /* MCIMAPFetchParsedContentOperation.cpp in Sources */, - ADC0ECFD26C9139D2EAB9A4E /* NSDictionary+MCO.mm in Sources */, - C93E603FFFA0690E4F68C1AF /* NSArray+MCO.mm in Sources */, 5E764A9567D410F3E3522A6D /* uenum.c in Sources */, - 07C92C13F3A8373454C45ECA /* NSObject+MCO.mm in Sources */, 29E9736A4C4A3129ECA6F9C5 /* MCAddressDisplay.cpp in Sources */, 4632239A398A018B5896D5F3 /* MCDateFormatter.cpp in Sources */, + 843E4A841F30716600D78022 /* MCOObjectWrapper.mm in Sources */, DD9A2D80F9D252DBC985E54E /* MCHTMLRenderer.cpp in Sources */, C741726475B5D8330D486589 /* MCSizeFormatter.cpp in Sources */, BE1BAA5139A95198A6F67BE5 /* MCNNTPFetchServerTimeOperation.cpp in Sources */, 3686A6EC7B3B16D6CF073851 /* MCHTMLRendererCallback.cpp in Sources */, AC6F99B5ECC7D61FE83BDE4E /* MCHTMLCleaner.cpp in Sources */, + 8408C7FF1F26378D0003A816 /* CAttachment.cpp in Sources */, 31B494515F08125DC498E33E /* MCIMAPSyncResult.cpp in Sources */, 8DE9F4E340CF1C374E516148 /* MCIMAPCustomCommandOperation.cpp in Sources */, 42290C063351F439A7431B97 /* MCIMAPCapabilityOperation.cpp in Sources */, D8D2BD7BA67058075A55F52F /* MCIndexSet.cpp in Sources */, - 8C76A926F70726C194F51198 /* MCOIMAPCheckAccountOperation.mm in Sources */, - F89E65CC7C706E961329FDA7 /* MCONNTPSession.mm in Sources */, 19BD82EAC8F47FAEB79E6D6B /* ustring.cpp in Sources */, - 516946BDC01C07D115717286 /* MCOAbstractMessage.mm in Sources */, 8F8203937E43E84F3B71ADB1 /* MCDataDecoderUtils.cpp in Sources */, - BEB528F53B82259229703F11 /* MCOAbstractMessagePart.mm in Sources */, - 6FDF04F9ED8DCD86A5369918 /* MCOIMAPMoveMessagesOperation.mm in Sources */, 16C8E3A0A7EA58FE8155E49E /* uarrsort.c in Sources */, - 0FDDF57D7053BA455E9BDD64 /* MCDataMac.mm in Sources */, - A560E64FE3F78355FFEA0B90 /* MCOAbstractMultipart.mm in Sources */, - 37BD93476D0CF9CD2CECBB5F /* MCOAbstractPart.mm in Sources */, - 9BCD85B21C0BC2A200CA2B02 /* MCOAddress.mm in Sources */, - 94FCD8C87C6487357A2B7C12 /* MCOAccountValidator.mm in Sources */, - 3DE7EA2084774624AE33D931 /* MCOMessageHeader.mm in Sources */, - 875270C82497EF2D85294525 /* NSValue+MCO.mm in Sources */, - 0F0D905C01C04151E50BE0E9 /* MCOOperation.mm in Sources */, - 8941EA189E618AD5FA281FE3 /* MCOAttachment.mm in Sources */, - 810C1B6B1F0CD8D65A5AF339 /* MCOMessageBuilder.mm in Sources */, 43E821EF0A9372B944A45782 /* csrsbcs.cpp in Sources */, - E7CB648B1D3F948FBBED8B67 /* MCOMessageParser.mm in Sources */, - 9941A41F649705E26179A96C /* MCOMessagePart.mm in Sources */, - A68E58803899E2416FC35EBC /* MCOMultipart.mm in Sources */, - B39712FEC0FF79FDDF201282 /* MCOIMAPOperation.mm in Sources */, - C5A789A09FB3E6611A3D5D07 /* MCOIMAPFolder.mm in Sources */, A0BF12275D4256FD6DAFBD3C /* MCBase64.c in Sources */, - 1AD29FDC262D05AEECCE0F47 /* MCOIMAPMessage.mm in Sources */, - 14758EE20D3A3D7A8AC39B3A /* MCOIMAPMessagePart.mm in Sources */, - BDDFF64B6753ECDD32E875AC /* MCOIMAPMultipart.mm in Sources */, - 39805787350CC39EDA29BCA5 /* MCOIMAPNamespace.mm in Sources */, - 55AB302F89157418B44BB17E /* MCOIMAPNamespaceItem.mm in Sources */, - 26CA94ECE6FD13B61CF3E7EF /* MCOIMAPPart.mm in Sources */, - 2F7CC3DBAD8EE06FAC638672 /* MCOIndexSet.mm in Sources */, 6D087B36C2DEEBC1B737C044 /* MCNNTPGroupInfo.cpp in Sources */, - 4F8A2E85CAA953605FCA0989 /* MCOAbstractMessageRendererCallback.mm in Sources */, - D3CCCB401BEF8D3F792A6A6F /* MCORange.mm in Sources */, - 943C21F93A500A02B9044F05 /* MCOIMAPIdentity.mm in Sources */, 9834D71F64B088E0C5E86BC5 /* csdetect.cpp in Sources */, 64E2562DC1EAFBB6728EDC9D /* csrucode.cpp in Sources */, - 05919E99B3B3C69116584CBF /* MCOIMAPFolderInfoOperation.mm in Sources */, - 84661F22525AB3AA3D5FD9D1 /* MCOIMAPAppendMessageOperation.mm in Sources */, - 6C942DED6FB84C7127ADA216 /* MCOIMAPCopyMessagesOperation.mm in Sources */, 3001DB3E3907C83825A16F48 /* MCIMAPMessageRenderingOperation.cpp in Sources */, - 0666C5FF629C919979C80006 /* MCOIMAPFetchMessagesOperation.mm in Sources */, - BB8DD5F98108DDE2E260D3A1 /* MCOIMAPFetchContentOperation.mm in Sources */, - DCE8D6E90DF5C39A9F3C2255 /* MCOIMAPSearchOperation.mm in Sources */, - 1EC4C20E18BD0208FF3EDE41 /* MCOIMAPIdleOperation.mm in Sources */, - 9904168CD37AB9E8EA3BE559 /* MCOIMAPFetchNamespaceOperation.mm in Sources */, - D7660DD964E1A507BD36AA9E /* MCOIMAPIdentityOperation.mm in Sources */, - 8BF8C9B751CDE6BF45D42610 /* MCOIMAPCapabilityOperation.mm in Sources */, 645D6A98256EB8375F6CCADF /* unzip.c in Sources */, - 8F25E7F5171C475696E1C07B /* MCOIMAPSearchExpression.mm in Sources */, - 6E9EF73E21D281C9E21F5A0B /* MCMessageParserMac.mm in Sources */, - D281D4C1885762578DF1232F /* MCONNTPPostOperation.mm in Sources */, - 41A6D9505A39EE5EEA6372E9 /* MCOIMAPFolderInfo.mm in Sources */, - A51B28DF8F2B471070FDA7EA /* MCOIMAPBaseOperation.mm in Sources */, BC47B8DB9BDE862640B003D4 /* MCSMTPDisconnectOperation.cpp in Sources */, DB54F41EC568CBE43CE4AF84 /* csr2022.cpp in Sources */, + 84AD84971F435F9A000361A3 /* Multipart.swift in Sources */, + 84FEDEC41F28979900A9E88C /* MessageConstants.swift in Sources */, 1A108F3A843C2059F3382AC3 /* MCIMAPFolderInfo.cpp in Sources */, - C4DF9C4E264035D4CFA44ED8 /* MCOSMTPSession.mm in Sources */, - 70A2D5C73554888BAB4BE590 /* MCOSMTPLoginOperation.mm in Sources */, - B7626C784C6E4A64FA1BDA03 /* MCOSMTPSendOperation.mm in Sources */, - D4DD69E596EE913E77F1A9F0 /* MCOSMTPOperation.mm in Sources */, - 471D6ED2D54281AFDBC8A191 /* MCOSMTPNoopOperation.mm in Sources */, - CA3ACDD8B0008631F9A76B4E /* MCOPOPSession.mm in Sources */, 17D0AB66F5601442684FA08D /* MCIMAPMultiDisconnectOperation.cpp in Sources */, - 354C1F7185CA4790ABB6E503 /* MCOPOPFetchHeaderOperation.mm in Sources */, 15FBB468AE17AD7D04FF74DC /* MCIMAPDisconnectOperation.cpp in Sources */, - E4A203ED8C5A642D105B6DBF /* MCOPOPFetchMessageOperation.mm in Sources */, 4361111B61E83434F97AFD5B /* MCNNTPOperation.cpp in Sources */, - 36E5924B80F52437FF4A0BC3 /* MCOPOPOperation.mm in Sources */, - 1D00C02F96F71F11785EEC8A /* MCOPOPFetchMessagesOperation.mm in Sources */, - F36BAD2E1F8ACCD84913B768 /* MCOPOPMessageInfo.mm in Sources */, 17EE5F85CDACBCF56AEBB4E6 /* ucln_cmn.cpp in Sources */, 7F417BA25150166CC1ABAA1C /* MCPOPCheckAccountOperation.cpp in Sources */, 10904693FA93BED3FF76253E /* MCJSON.cpp in Sources */, 241A93AE76901E8241F1BB18 /* MCMD5.cpp in Sources */, 185FEAE317F302182E28433D /* cmemory.c in Sources */, 3F4516DAD95F1046385A2A53 /* csrecog.cpp in Sources */, + 8408C8031F26378D0003A816 /* CMessageBuilder.cpp in Sources */, 583938F86AAC3065CF7852C3 /* MCNull.cpp in Sources */, + 84D72F1E1F32161800F570BC /* CData.cpp in Sources */, BE2643CC426804B08970F9AC /* MCErrorMessage.cpp in Sources */, 8CF5E712E3690395D0D51516 /* MCNNTPFetchOverviewOperation.cpp in Sources */, 11C045EAE412D0EA3713DE5C /* MCJSONParser.cpp in Sources */, - 67A039B761C989C3D0EAF0BD /* MCONNTPOperation.mm in Sources */, + 845FB8581F290CF000A29DA8 /* NetService.swift in Sources */, 05B449A377A3B80C86BD140F /* MCObjectMac.mm in Sources */, 8AB02545973F92F1FFECDAE6 /* MCAutoreleasePoolMac.mm in Sources */, - 6C978625C1AAB0BCB5EC0528 /* MCOMailProvider.mm in Sources */, - E89DB38B8A1B9A5ADBE2C30A /* MCOMailProvidersManager.mm in Sources */, 404AB08B392A7DBF7E220FBF /* MCZipMac.mm in Sources */, - A1C646D1BEF0C245A0C891E2 /* MCONNTPDisconnectOperation.mm in Sources */, - CE68B988487E4B103704283F /* MCOIMAPFetchContentToFileOperation.mm in Sources */, - 677E7BA4DDA151109DC61505 /* MCONetService.mm in Sources */, - 415A82AD8267E8915A32AD84 /* MCOIMAPMultiDisconnectOperation.mm in Sources */, + 8029D8C71F96409000BF5BC4 /* NSObjectCompat.swift in Sources */, 73314F9F8391B02F4EA41A20 /* MCMailProvider.cpp in Sources */, 3BE174E097F4B40946B905CD /* MCMailProvidersManager.cpp in Sources */, 722BEC743188F66A40E621EE /* MCNetService.cpp in Sources */, - 83138173490554374D150833 /* MCOIMAPFolderStatus.mm in Sources */, 5B74DAAA466655CF34F48703 /* MCIMAPFolderStatusOperation.cpp in Sources */, 8B63FD72E8E31ABB1942FC95 /* MCNNTPPostOperation.cpp in Sources */, - E09987B7913AE132974411F7 /* MCOIMAPFolderStatusOperation.mm in Sources */, 6BEB2FA271B26274752D0E8B /* MCIMAPFolderStatus.cpp in Sources */, 4704D4CDBEEE261C18482F22 /* MCHTMLBodyRendererTemplateCallback.cpp in Sources */, 22B4886524CCC93C1B72108D /* MCHTMLRendererIMAPDataCallback.cpp in Sources */, - 0E64019FFCF885376D848CB0 /* MCOIMAPMessageRenderingOperation.mm in Sources */, - 418716951105D169B36A835A /* MCONNTPFetchArticleOperation.mm in Sources */, - 5A3567771FB532760005BF97 /* MCOIMAPQuotaOperation.mm in Sources */, 39A2E4CB28AE666834D20E60 /* MCIMAPQuotaOperation.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; + 841E64F61F683440007BB736 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 846021D81F6BE26D0032EF37 /* unittest.swift in Sources */, + 843EA47F1F7966A500861123 /* LibetpanHelperTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; C600B6101A242C3F000728F1 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -5136,10 +5133,7 @@ C64EA704169E847800778456 /* MCArray.cpp in Sources */, C6E665B51796500B0063F2CF /* MCZip.cpp in Sources */, 84B639E317F279BB003B5BA2 /* MCSMTPNoopOperation.cpp in Sources */, - 84CFA98319F7153B00FE35D2 /* MCONNTPFetchOverviewOperation.mm in Sources */, - 8199FBEB19FAEA440040BBC3 /* MCOIMAPFetchParsedContentOperation.mm in Sources */, C64EA706169E847800778456 /* MCAssert.c in Sources */, - 84D73793199C0511005124E5 /* MCONNTPGroupInfo.mm in Sources */, C64EA708169E847800778456 /* MCData.cpp in Sources */, C64EA70A169E847800778456 /* MCHash.cpp in Sources */, C64EA70C169E847800778456 /* MCHashMap.cpp in Sources */, @@ -5155,9 +5149,7 @@ C64EA723169E847800778456 /* MCIMAPFolder.cpp in Sources */, C64EA725169E847800778456 /* MCIMAPMessage.cpp in Sources */, C64EA727169E847800778456 /* MCIMAPMessagePart.cpp in Sources */, - 84D73775199C00AB005124E5 /* MCONNTPFetchAllArticlesOperation.mm in Sources */, C64EA729169E847800778456 /* MCIMAPMultipart.cpp in Sources */, - 84CFA99519F725CB00FE35D2 /* MCONNTPFetchServerTimeOperation.mm in Sources */, C64EA72B169E847800778456 /* MCIMAPNamespace.cpp in Sources */, C64EA72D169E847800778456 /* MCIMAPNamespaceItem.cpp in Sources */, C64EA72F169E847800778456 /* MCIMAPPart.cpp in Sources */, @@ -5175,10 +5167,8 @@ C64EA73E169E847800778456 /* MCMessageBuilder.cpp in Sources */, C64EA740169E847800778456 /* MCMessageParser.cpp in Sources */, C64EA742169E847800778456 /* MCMessagePart.cpp in Sources */, - 84D7378B199C0260005124E5 /* MCONNTPListNewsgroupsOperation.mm in Sources */, C64EA744169E847800778456 /* MCMultipart.cpp in Sources */, C64EA781169E89F600778456 /* MCSMTPSession.cpp in Sources */, - 8416A9A117F2871D00B3C7DA /* MCOIMAPNoopOperation.mm in Sources */, C64EA784169F24E400778456 /* MCSMTPAsyncSession.cpp in Sources */, C6F7B19F17A1C15200BE78BB /* MCCertificateUtils.cpp in Sources */, 8B0095C91A00DDC500F84BC0 /* MCSMTPLoginOperation.cpp in Sources */, @@ -5205,13 +5195,11 @@ 8568A4131C610D9800FF4470 /* MCIMAPMoveMessagesOperation.cpp in Sources */, C64EA81716A29A8700778456 /* MCIMAPExpungeOperation.cpp in Sources */, BDCD7CE31A70771B0001DCC3 /* uobject.cpp in Sources */, - C69BA85B17DEFCCB00D601B7 /* NSIndexSet+MCO.m in Sources */, C64EA81A16A29AF200778456 /* MCIMAPFetchMessagesOperation.cpp in Sources */, C64EA81D16A29DC500778456 /* MCIMAPFetchContentOperation.cpp in Sources */, 84D73746199BFA8C005124E5 /* MCNNTPCheckAccountOperation.cpp in Sources */, C64EA82016A29E4100778456 /* MCIMAPStoreFlagsOperation.cpp in Sources */, C64EA82316A29E5300778456 /* MCIMAPStoreLabelsOperation.cpp in Sources */, - C643F492189A3D59007EA2F7 /* NSSet+MCO.mm in Sources */, C64EA82616A29EE500778456 /* MCIMAPSearchOperation.cpp in Sources */, C6E665BD1796500C0063F2CF /* zip.c in Sources */, C64EA82916A29F2200778456 /* MCIMAPIdleOperation.cpp in Sources */, @@ -5233,23 +5221,12 @@ C62C6F0A16A8F58000737497 /* MCIMAPAsyncSession.cpp in Sources */, BDCD7CDD1A70771B0001DCC3 /* udataswp.c in Sources */, BDCD7CD31A70771B0001DCC3 /* cstring.c in Sources */, - C6D42C1D16AE03D6002BB4F9 /* NSData+MCO.mm in Sources */, - C6D42C1E16AE03D6002BB4F9 /* NSString+MCO.mm in Sources */, - C64FF39116B3C13000F8C162 /* MCOObjectWrapper.mm in Sources */, 84D73737199BF7F2005124E5 /* MCNNTPFetchHeaderOperation.cpp in Sources */, - 84D7376D199C005A005124E5 /* MCONNTPFetchHeaderOperation.mm in Sources */, C6E665B71796500B0063F2CF /* ioapi.c in Sources */, BDCD7CD51A70771B0001DCC3 /* inputext.cpp in Sources */, BDCD7CEA1A7077680001DCC3 /* ucsdet.cpp in Sources */, - C07ADC28B83E7959BF114D46 /* MCOIMAPSession.mm in Sources */, BDCD7CE71A70771B0001DCC3 /* utrace.c in Sources */, - C07AD99B2E2054C684DB8FF6 /* NSError+MCO.mm in Sources */, - F87F190C16BB62B00012652F /* MCOIMAPFetchFoldersOperation.mm in Sources */, - 84B639F117F282B4003B5BA2 /* MCOPOPNoopOperation.mm in Sources */, - C6EB30F716B8C9480091F4F1 /* NSDictionary+MCO.mm in Sources */, 8199FBF119FAF1270040BBC3 /* MCIMAPFetchParsedContentOperation.cpp in Sources */, - C6EB30FE16B8E50F0091F4F1 /* NSArray+MCO.mm in Sources */, - C6EB310116B8E6E60091F4F1 /* NSObject+MCO.mm in Sources */, BDCD7CDF1A70771B0001DCC3 /* uenum.c in Sources */, C63CD67F16BDCDD400DB18F1 /* MCAddressDisplay.cpp in Sources */, C63CD68016BDCDD400DB18F1 /* MCDateFormatter.cpp in Sources */, @@ -5262,79 +5239,25 @@ C64BB22B16E5C0A4000DB34C /* MCIMAPCapabilityOperation.cpp in Sources */, 1820E7D51BD403ED00835D1E /* MCIMAPCustomCommandOperation.cpp in Sources */, C64BB22E16E5C1EE000DB34C /* MCIndexSet.cpp in Sources */, - 84D73764199BFFC7005124E5 /* MCONNTPSession.mm in Sources */, - C64BB23516EDAA17000DB34C /* MCOAbstractMessage.mm in Sources */, - C6F49A931C8EA1450087F4B7 /* MCOIMAPCheckAccountOperation.mm in Sources */, BDCD7CE51A70771B0001DCC3 /* ustring.cpp in Sources */, - C64BB23916EDAA3F000DB34C /* MCOAbstractMessagePart.mm in Sources */, - C64BB23C16EDAAC7000DB34C /* MCOAbstractMultipart.mm in Sources */, 811320AF1D02388A004B7ECF /* MCDataDecoderUtils.cpp in Sources */, BDCD7CD71A70771B0001DCC3 /* uarrsort.c in Sources */, - 8568A41A1C610F6600FF4470 /* MCOIMAPMoveMessagesOperation.mm in Sources */, C6D4FD4319FB7DAA001F7E01 /* MCDataMac.mm in Sources */, - C64BB23F16EDAAE1000DB34C /* MCOAbstractPart.mm in Sources */, - C64BB24216EDAAF4000DB34C /* MCOAddress.mm in Sources */, - C64BB24516EDAAFE000DB34C /* MCOMessageHeader.mm in Sources */, - 27478E841A7646F8004AE621 /* MCOAccountValidator.mm in Sources */, - C64BB25216FC284A000DB34C /* NSValue+MCO.mm in Sources */, - C64BB25A16FD3BCB000DB34C /* MCOOperation.mm in Sources */, - C64BB25E16FD4377000DB34C /* MCOAttachment.mm in Sources */, - C64BB26116FD4390000DB34C /* MCOMessageBuilder.mm in Sources */, - C64BB26416FD43A1000DB34C /* MCOMessageParser.mm in Sources */, BDCD7CCD1A70771B0001DCC3 /* csrsbcs.cpp in Sources */, - C64BB26716FD43E2000DB34C /* MCOMessagePart.mm in Sources */, - C64BB26A16FD44C2000DB34C /* MCOMultipart.mm in Sources */, - C623C58F16FE6B45001BBEFC /* MCOIMAPOperation.mm in Sources */, - C623C59316FE750E001BBEFC /* MCOIMAPFolder.mm in Sources */, C67597C217A8D65000DA69DF /* MCBase64.c in Sources */, - C6F5B9E216FEA1E800D9DABD /* MCOIMAPMessage.mm in Sources */, - C6F5B9E516FEA27500D9DABD /* MCOIMAPMessagePart.mm in Sources */, - C6F5B9E816FEA28600D9DABD /* MCOIMAPMultipart.mm in Sources */, - C6F5B9EB16FEA3B500D9DABD /* MCOIMAPNamespace.mm in Sources */, - C6F5B9EE16FEA3C400D9DABD /* MCOIMAPNamespaceItem.mm in Sources */, - 184535701BE23FBD000B0D87 /* MCOIMAPCustomCommandOperation.mm in Sources */, - C6F5B9F116FEA3D700D9DABD /* MCOIMAPPart.mm in Sources */, - C6F5B9F416FEAC6C00D9DABD /* MCOIndexSet.mm in Sources */, 849189AB18C94986002063A3 /* MCNNTPGroupInfo.cpp in Sources */, - C6F5B9FE16FED18600D9DABD /* MCOAbstractMessageRendererCallback.mm in Sources */, - C6CCC5C716FFE5190077A5FC /* MCORange.mm in Sources */, - C63D316217C92D8300A4D993 /* MCOIMAPIdentity.mm in Sources */, - C6F61F7B170169EE0073032E /* MCOIMAPFolderInfoOperation.mm in Sources */, BDCD7CC31A70771B0001DCC3 /* csdetect.cpp in Sources */, BDCD7CCF1A70771B0001DCC3 /* csrucode.cpp in Sources */, - C6F61F7E170169FB0073032E /* MCOIMAPAppendMessageOperation.mm in Sources */, - C6F61F8117016A0D0073032E /* MCOIMAPCopyMessagesOperation.mm in Sources */, DA0F1C7B177C07B300F0D3B4 /* MCIMAPMessageRenderingOperation.cpp in Sources */, - C6F61F8417016A200073032E /* MCOIMAPFetchMessagesOperation.mm in Sources */, - C6F61F8717016AD60073032E /* MCOIMAPFetchContentOperation.mm in Sources */, - C6F61F8A17016AE60073032E /* MCOIMAPSearchOperation.mm in Sources */, - C6F61F8D17016AFB0073032E /* MCOIMAPIdleOperation.mm in Sources */, - C6F61F9017016B0A0073032E /* MCOIMAPFetchNamespaceOperation.mm in Sources */, - C6F61F9317016B250073032E /* MCOIMAPIdentityOperation.mm in Sources */, - C6F61F9617016B310073032E /* MCOIMAPCapabilityOperation.mm in Sources */, C6E665BB1796500C0063F2CF /* unzip.c in Sources */, - C6F61F9917016B460073032E /* MCOIMAPSearchExpression.mm in Sources */, - C6F61F9F17016EA10073032E /* MCOIMAPFolderInfo.mm in Sources */, C6D4FD3F19FB7534001F7E01 /* MCMessageParserMac.mm in Sources */, - F38221A31C7AAD8100E00721 /* MCONNTPPostOperation.mm in Sources */, - C6F61FB51702AB340073032E /* MCOIMAPBaseOperation.mm in Sources */, C608167517759967001F1018 /* MCSMTPDisconnectOperation.cpp in Sources */, - C6A81BBF17068E5E00882C15 /* MCOSMTPSession.mm in Sources */, BDCD7CC71A70771B0001DCC3 /* csr2022.cpp in Sources */, C673EBED1A46B41000A53F7F /* MCIMAPFolderInfo.cpp in Sources */, - 8B0095CC1A00DDE700F84BC0 /* MCOSMTPLoginOperation.mm in Sources */, - C6A81BC317068E9500882C15 /* MCOSMTPSendOperation.mm in Sources */, - C6A81BC717068EB000882C15 /* MCOSMTPOperation.mm in Sources */, - 8416A99D17F284F400B3C7DA /* MCOSMTPNoopOperation.mm in Sources */, - C6A81BD61706903500882C15 /* MCOPOPSession.mm in Sources */, C6EFFBC8182BBF5700CFF656 /* MCIMAPMultiDisconnectOperation.cpp in Sources */, - C6A81BDA1706903E00882C15 /* MCOPOPFetchHeaderOperation.mm in Sources */, C608167B177635D2001F1018 /* MCIMAPDisconnectOperation.cpp in Sources */, - C6A81BDE1706904800882C15 /* MCOPOPFetchMessageOperation.mm in Sources */, + 84CD9BDE1D9BE3AF000622CB /* CIMAPMultipart.cpp in Sources */, 84D73730199BF704005124E5 /* MCNNTPOperation.cpp in Sources */, - C6A81BE21706905600882C15 /* MCOPOPOperation.mm in Sources */, - C6A81BE61706906D00882C15 /* MCOPOPFetchMessagesOperation.mm in Sources */, - C6A81C001707CEE600882C15 /* MCOPOPMessageInfo.mm in Sources */, C6AC110017114DAF00B715B7 /* MCPOPCheckAccountOperation.cpp in Sources */, BDCD7CD91A70771B0001DCC3 /* ucln_cmn.cpp in Sources */, C6D6F7F9171E595D006F5B28 /* MCJSON.cpp in Sources */, @@ -5345,30 +5268,18 @@ C6D6F967171FCF9F006F5B28 /* MCJSONParser.cpp in Sources */, BDCD7C5B1A5B1C2C0001DCC3 /* MCErrorMessage.cpp in Sources */, 84CFA98719F7159700FE35D2 /* MCNNTPFetchOverviewOperation.cpp in Sources */, - 84D73768199BFFFC005124E5 /* MCONNTPOperation.mm in Sources */, C668E2C71735C8D500A2BB47 /* MCObjectMac.mm in Sources */, C668E2CC1735CB8900A2BB47 /* MCAutoreleasePoolMac.mm in Sources */, - C6CF62B9175324CE006398B9 /* MCOMailProvider.mm in Sources */, - C6CF62BB175324CE006398B9 /* MCOMailProvidersManager.mm in Sources */, - 84D7378F199C02A8005124E5 /* MCONNTPDisconnectOperation.mm in Sources */, BD7C0F461B545CE2003337DF /* MCZipMac.mm in Sources */, - C6CF62BD175324CE006398B9 /* MCONetService.mm in Sources */, - 810DB7911C68F50600017B12 /* MCOIMAPFetchContentToFileOperation.mm in Sources */, - C6EFFBCC1833334900CFF656 /* MCOIMAPMultiDisconnectOperation.mm in Sources */, C6CF62C6175324F0006398B9 /* MCMailProvider.cpp in Sources */, C6CF62C8175324F0006398B9 /* MCMailProvidersManager.cpp in Sources */, C6CF62CA175324F0006398B9 /* MCNetService.cpp in Sources */, - 9EF9AB09175F2EC60027FA3B /* MCOIMAPFolderStatus.mm in Sources */, 9EF9AB11175F319A0027FA3B /* MCIMAPFolderStatusOperation.cpp in Sources */, - 9EF9AB19175F36600027FA3B /* MCOIMAPFolderStatusOperation.mm in Sources */, F382219F1C7A626700E00721 /* MCNNTPPostOperation.cpp in Sources */, 9E774D891767C7F60065EB9B /* MCIMAPFolderStatus.cpp in Sources */, DAD28C8B1783CFFC00F2BB8F /* MCHTMLBodyRendererTemplateCallback.cpp in Sources */, BD63713B177DFF080094121B /* MCLibetpan.cpp in Sources */, DAACAD5117886807000B4517 /* MCHTMLRendererIMAPDataCallback.cpp in Sources */, - DA89896D178A47D200F6D90A /* MCOIMAPMessageRenderingOperation.mm in Sources */, - 84D73771199C007E005124E5 /* MCONNTPFetchArticleOperation.mm in Sources */, - 4B3C1BDE17ABF309008BBF4C /* MCOIMAPQuotaOperation.mm in Sources */, 4B3C1BE117ABF4BC008BBF4C /* MCIMAPQuotaOperation.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -5398,7 +5309,6 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - C6B5AE0719F630B3001352A6 /* unittest.mm in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -5419,10 +5329,7 @@ C6BA2BA01705F4E6003F0E9E /* MCArray.cpp in Sources */, C6E665B61796500B0063F2CF /* MCZip.cpp in Sources */, 84B639E417F279BB003B5BA2 /* MCSMTPNoopOperation.cpp in Sources */, - 84CFA98419F7153B00FE35D2 /* MCONNTPFetchOverviewOperation.mm in Sources */, - 8199FBEC19FAEA440040BBC3 /* MCOIMAPFetchParsedContentOperation.mm in Sources */, C6BA2BA11705F4E6003F0E9E /* MCAssert.c in Sources */, - 84D73794199C0511005124E5 /* MCONNTPGroupInfo.mm in Sources */, C6BA2BA21705F4E6003F0E9E /* MCData.cpp in Sources */, C6BA2BA31705F4E6003F0E9E /* MCHash.cpp in Sources */, C6BA2BA41705F4E6003F0E9E /* MCHashMap.cpp in Sources */, @@ -5439,8 +5346,6 @@ C6BA2BAE1705F4E6003F0E9E /* MCIMAPFolder.cpp in Sources */, C6BA2BAF1705F4E6003F0E9E /* MCIMAPMessage.cpp in Sources */, C6BA2BB01705F4E6003F0E9E /* MCIMAPMessagePart.cpp in Sources */, - 84D73776199C00AB005124E5 /* MCONNTPFetchAllArticlesOperation.mm in Sources */, - 84CFA99619F725CB00FE35D2 /* MCONNTPFetchServerTimeOperation.mm in Sources */, C6BA2BB11705F4E6003F0E9E /* MCIMAPMultipart.cpp in Sources */, C6BA2BB21705F4E6003F0E9E /* MCIMAPNamespace.cpp in Sources */, C6BA2BB31705F4E6003F0E9E /* MCIMAPNamespaceItem.cpp in Sources */, @@ -5459,10 +5364,8 @@ C6BA2BBA1705F4E6003F0E9E /* MCMessageBuilder.cpp in Sources */, C6BA2BBB1705F4E6003F0E9E /* MCMessageParser.cpp in Sources */, C6BA2BBC1705F4E6003F0E9E /* MCMessagePart.cpp in Sources */, - 84D7378C199C0260005124E5 /* MCONNTPListNewsgroupsOperation.mm in Sources */, C6BA2BBD1705F4E6003F0E9E /* MCMultipart.cpp in Sources */, C6BA2BBE1705F4E6003F0E9E /* MCSMTPSession.cpp in Sources */, - 8416A9A217F2871D00B3C7DA /* MCOIMAPNoopOperation.mm in Sources */, C6BA2BBF1705F4E6003F0E9E /* MCSMTPAsyncSession.cpp in Sources */, C6F7B1A017A1C15200BE78BB /* MCCertificateUtils.cpp in Sources */, 8B0095CF1A00DE7700F84BC0 /* MCSMTPLoginOperation.cpp in Sources */, @@ -5477,7 +5380,6 @@ C6BA2BC51705F4E6003F0E9E /* MCIMAPFetchFoldersOperation.cpp in Sources */, C6BA2BC61705F4E6003F0E9E /* MCIMAPRenameFolderOperation.cpp in Sources */, BD49963819FEC6DD000945BC /* ConvertUTF.c in Sources */, - 184535711BE23FCF000B0D87 /* MCOIMAPCustomCommandOperation.mm in Sources */, C6BA2BC71705F4E6003F0E9E /* MCIMAPDeleteFolderOperation.cpp in Sources */, C63D315D17C9155C00A4D993 /* MCIMAPIdentity.cpp in Sources */, 84D73743199BF963005124E5 /* MCNNTPFetchAllArticlesOperation.cpp in Sources */, @@ -5490,13 +5392,11 @@ C6BA2BCB1705F4E6003F0E9E /* MCIMAPCopyMessagesOperation.cpp in Sources */, BDCD7CE41A70771B0001DCC3 /* uobject.cpp in Sources */, C6BA2BCC1705F4E6003F0E9E /* MCIMAPExpungeOperation.cpp in Sources */, - C69BA85C17DEFCCB00D601B7 /* NSIndexSet+MCO.m in Sources */, C6BA2BCD1705F4E6003F0E9E /* MCIMAPFetchMessagesOperation.cpp in Sources */, C6BA2BCE1705F4E6003F0E9E /* MCIMAPFetchContentOperation.cpp in Sources */, 84D73747199BFA8C005124E5 /* MCNNTPCheckAccountOperation.cpp in Sources */, C6BA2BCF1705F4E6003F0E9E /* MCIMAPStoreFlagsOperation.cpp in Sources */, C6BA2BD01705F4E6003F0E9E /* MCIMAPStoreLabelsOperation.cpp in Sources */, - C643F493189A3D59007EA2F7 /* NSSet+MCO.mm in Sources */, C6BA2BD11705F4E6003F0E9E /* MCIMAPSearchOperation.cpp in Sources */, C6E665BE1796500C0063F2CF /* zip.c in Sources */, C6BA2BD21705F4E6003F0E9E /* MCIMAPIdleOperation.cpp in Sources */, @@ -5518,24 +5418,13 @@ BDCD7CDE1A70771B0001DCC3 /* udataswp.c in Sources */, BDCD7CD41A70771B0001DCC3 /* cstring.c in Sources */, C6BA2BDD1705F4E6003F0E9E /* MCIMAPAsyncSession.cpp in Sources */, - C6BA2BDE1705F4E6003F0E9E /* NSData+MCO.mm in Sources */, - C6BA2BDF1705F4E6003F0E9E /* NSString+MCO.mm in Sources */, - C6BA2BE01705F4E6003F0E9E /* MCOObjectWrapper.mm in Sources */, 84D73738199BF7F2005124E5 /* MCNNTPFetchHeaderOperation.cpp in Sources */, - 84D7376E199C005A005124E5 /* MCONNTPFetchHeaderOperation.mm in Sources */, BDCD7CD61A70771B0001DCC3 /* inputext.cpp in Sources */, BDCD7CEB1A7077680001DCC3 /* ucsdet.cpp in Sources */, C6E665B81796500B0063F2CF /* ioapi.c in Sources */, BDCD7CE81A70771B0001DCC3 /* utrace.c in Sources */, - C6BA2BE11705F4E6003F0E9E /* MCOIMAPSession.mm in Sources */, - C6BA2BE21705F4E6003F0E9E /* NSError+MCO.mm in Sources */, - C6BA2BE31705F4E6003F0E9E /* MCOIMAPFetchFoldersOperation.mm in Sources */, - 84B639F217F282B4003B5BA2 /* MCOPOPNoopOperation.mm in Sources */, 8199FBF219FAF1270040BBC3 /* MCIMAPFetchParsedContentOperation.cpp in Sources */, - C6BA2BE41705F4E6003F0E9E /* NSDictionary+MCO.mm in Sources */, - C6BA2BE51705F4E6003F0E9E /* NSArray+MCO.mm in Sources */, BDCD7CE01A70771B0001DCC3 /* uenum.c in Sources */, - C6BA2BE61705F4E6003F0E9E /* NSObject+MCO.mm in Sources */, C6BA2BE71705F4E6003F0E9E /* MCAddressDisplay.cpp in Sources */, C6BA2BE81705F4E6003F0E9E /* MCDateFormatter.cpp in Sources */, C6BA2BE91705F4E6003F0E9E /* MCHTMLRenderer.cpp in Sources */, @@ -5547,78 +5436,24 @@ 1820E7D61BD403ED00835D1E /* MCIMAPCustomCommandOperation.cpp in Sources */, C6BA2BEE1705F4E6003F0E9E /* MCIMAPCapabilityOperation.cpp in Sources */, C6BA2BEF1705F4E6003F0E9E /* MCIndexSet.cpp in Sources */, - C6F49A941C8EA1450087F4B7 /* MCOIMAPCheckAccountOperation.mm in Sources */, - 84D73765199BFFC7005124E5 /* MCONNTPSession.mm in Sources */, BDCD7CE61A70771B0001DCC3 /* ustring.cpp in Sources */, - C6BA2BF01705F4E6003F0E9E /* MCOAbstractMessage.mm in Sources */, 811320B01D02388A004B7ECF /* MCDataDecoderUtils.cpp in Sources */, - C6BA2BF11705F4E6003F0E9E /* MCOAbstractMessagePart.mm in Sources */, - 8568A41B1C610F6600FF4470 /* MCOIMAPMoveMessagesOperation.mm in Sources */, BDCD7CD81A70771B0001DCC3 /* uarrsort.c in Sources */, C6D4FD4419FB7DB2001F7E01 /* MCDataMac.mm in Sources */, - C6BA2BF21705F4E6003F0E9E /* MCOAbstractMultipart.mm in Sources */, - C6BA2BF31705F4E6003F0E9E /* MCOAbstractPart.mm in Sources */, - C6BA2BF41705F4E6003F0E9E /* MCOAddress.mm in Sources */, - 27478E851A7646F8004AE621 /* MCOAccountValidator.mm in Sources */, - C6BA2BF51705F4E6003F0E9E /* MCOMessageHeader.mm in Sources */, - C6BA2BF61705F4E6003F0E9E /* NSValue+MCO.mm in Sources */, - C6BA2BF71705F4E6003F0E9E /* MCOOperation.mm in Sources */, - C6BA2BF81705F4E6003F0E9E /* MCOAttachment.mm in Sources */, - C6BA2BF91705F4E6003F0E9E /* MCOMessageBuilder.mm in Sources */, BDCD7CCE1A70771B0001DCC3 /* csrsbcs.cpp in Sources */, - C6BA2BFA1705F4E6003F0E9E /* MCOMessageParser.mm in Sources */, - C6BA2BFB1705F4E6003F0E9E /* MCOMessagePart.mm in Sources */, - C6BA2BFC1705F4E6003F0E9E /* MCOMultipart.mm in Sources */, - C6BA2BFD1705F4E6003F0E9E /* MCOIMAPOperation.mm in Sources */, - C6BA2BFE1705F4E6003F0E9E /* MCOIMAPFolder.mm in Sources */, C67597C317A8D65000DA69DF /* MCBase64.c in Sources */, - C6BA2BFF1705F4E6003F0E9E /* MCOIMAPMessage.mm in Sources */, - C6BA2C001705F4E6003F0E9E /* MCOIMAPMessagePart.mm in Sources */, - C6BA2C011705F4E6003F0E9E /* MCOIMAPMultipart.mm in Sources */, - C6BA2C021705F4E6003F0E9E /* MCOIMAPNamespace.mm in Sources */, - C6BA2C031705F4E6003F0E9E /* MCOIMAPNamespaceItem.mm in Sources */, - C6BA2C041705F4E6003F0E9E /* MCOIMAPPart.mm in Sources */, - C6BA2C051705F4E6003F0E9E /* MCOIndexSet.mm in Sources */, 849189AC18C94986002063A3 /* MCNNTPGroupInfo.cpp in Sources */, - C6BA2C061705F4E6003F0E9E /* MCOAbstractMessageRendererCallback.mm in Sources */, - C6BA2C071705F4E6003F0E9E /* MCORange.mm in Sources */, - C63D316317C92D8300A4D993 /* MCOIMAPIdentity.mm in Sources */, BDCD7CC41A70771B0001DCC3 /* csdetect.cpp in Sources */, BDCD7CD01A70771B0001DCC3 /* csrucode.cpp in Sources */, - C6BA2C081705F4E6003F0E9E /* MCOIMAPFolderInfoOperation.mm in Sources */, - C6BA2C091705F4E6003F0E9E /* MCOIMAPAppendMessageOperation.mm in Sources */, - C6BA2C0A1705F4E6003F0E9E /* MCOIMAPCopyMessagesOperation.mm in Sources */, DA0F1C7C177C07B300F0D3B4 /* MCIMAPMessageRenderingOperation.cpp in Sources */, - C6BA2C0B1705F4E6003F0E9E /* MCOIMAPFetchMessagesOperation.mm in Sources */, - C6BA2C0C1705F4E6003F0E9E /* MCOIMAPFetchContentOperation.mm in Sources */, - C6BA2C0D1705F4E6003F0E9E /* MCOIMAPSearchOperation.mm in Sources */, - C6BA2C0E1705F4E6003F0E9E /* MCOIMAPIdleOperation.mm in Sources */, - C6BA2C0F1705F4E6003F0E9E /* MCOIMAPFetchNamespaceOperation.mm in Sources */, - C6BA2C101705F4E6003F0E9E /* MCOIMAPIdentityOperation.mm in Sources */, - C6BA2C111705F4E6003F0E9E /* MCOIMAPCapabilityOperation.mm in Sources */, C6E665BC1796500C0063F2CF /* unzip.c in Sources */, - C6BA2C121705F4E6003F0E9E /* MCOIMAPSearchExpression.mm in Sources */, C6D4FD4019FB7786001F7E01 /* MCMessageParserMac.mm in Sources */, - F38221A41C7AAD8100E00721 /* MCONNTPPostOperation.mm in Sources */, - C6BA2C131705F4E6003F0E9E /* MCOIMAPFolderInfo.mm in Sources */, - C6BA2C141705F4E6003F0E9E /* MCOIMAPBaseOperation.mm in Sources */, C608167617759968001F1018 /* MCSMTPDisconnectOperation.cpp in Sources */, BDCD7CC81A70771B0001DCC3 /* csr2022.cpp in Sources */, C673EBEE1A46B41000A53F7F /* MCIMAPFolderInfo.cpp in Sources */, - C6A81BC017068E5E00882C15 /* MCOSMTPSession.mm in Sources */, - 8B0095CE1A00DE7700F84BC0 /* MCOSMTPLoginOperation.mm in Sources */, - C6A81BC417068E9500882C15 /* MCOSMTPSendOperation.mm in Sources */, - C6A81BC817068EB000882C15 /* MCOSMTPOperation.mm in Sources */, - 8416A99E17F284F400B3C7DA /* MCOSMTPNoopOperation.mm in Sources */, - C6A81BD71706903500882C15 /* MCOPOPSession.mm in Sources */, C6EFFBC9182BBF5700CFF656 /* MCIMAPMultiDisconnectOperation.cpp in Sources */, - C6A81BDB1706903E00882C15 /* MCOPOPFetchHeaderOperation.mm in Sources */, C608167C177635D2001F1018 /* MCIMAPDisconnectOperation.cpp in Sources */, - C6A81BDF1706904800882C15 /* MCOPOPFetchMessageOperation.mm in Sources */, 84D73731199BF704005124E5 /* MCNNTPOperation.cpp in Sources */, - C6A81BE31706905600882C15 /* MCOPOPOperation.mm in Sources */, - C6A81BE71706906D00882C15 /* MCOPOPFetchMessagesOperation.mm in Sources */, - C6A81C011707CEE600882C15 /* MCOPOPMessageInfo.mm in Sources */, BDCD7CDA1A70771B0001DCC3 /* ucln_cmn.cpp in Sources */, C6AC110117114DAF00B715B7 /* MCPOPCheckAccountOperation.cpp in Sources */, C6D6F7FA171E595D006F5B28 /* MCJSON.cpp in Sources */, @@ -5629,29 +5464,17 @@ BDCD7C5C1A5B1C2C0001DCC3 /* MCErrorMessage.cpp in Sources */, 84CFA98819F7159700FE35D2 /* MCNNTPFetchOverviewOperation.cpp in Sources */, C6D6F968171FCF9F006F5B28 /* MCJSONParser.cpp in Sources */, - 84D73769199BFFFC005124E5 /* MCONNTPOperation.mm in Sources */, C668E2C81735C8D500A2BB47 /* MCObjectMac.mm in Sources */, C668E2CD1735CB8900A2BB47 /* MCAutoreleasePoolMac.mm in Sources */, - C6CF62BA175324CE006398B9 /* MCOMailProvider.mm in Sources */, - C6CF62BC175324CE006398B9 /* MCOMailProvidersManager.mm in Sources */, BD7C0F471B545CE2003337DF /* MCZipMac.mm in Sources */, - 84D73790199C02A8005124E5 /* MCONNTPDisconnectOperation.mm in Sources */, - 810DB7921C68F50B00017B12 /* MCOIMAPFetchContentToFileOperation.mm in Sources */, - C6CF62BE175324CE006398B9 /* MCONetService.mm in Sources */, - C6EFFBCD1833334900CFF656 /* MCOIMAPMultiDisconnectOperation.mm in Sources */, C6CF62C7175324F0006398B9 /* MCMailProvider.cpp in Sources */, C6CF62C9175324F0006398B9 /* MCMailProvidersManager.cpp in Sources */, C6CF62CB175324F0006398B9 /* MCNetService.cpp in Sources */, - 9EF9AB0A175F2EC60027FA3B /* MCOIMAPFolderStatus.mm in Sources */, 9EF9AB12175F319A0027FA3B /* MCIMAPFolderStatusOperation.cpp in Sources */, F38221A01C7A626700E00721 /* MCNNTPPostOperation.cpp in Sources */, - 9EF9AB1A175F36600027FA3B /* MCOIMAPFolderStatusOperation.mm in Sources */, 9E774D8A1767C7F60065EB9B /* MCIMAPFolderStatus.cpp in Sources */, DAD28C8C1783CFFC00F2BB8F /* MCHTMLBodyRendererTemplateCallback.cpp in Sources */, DAACAD5217886807000B4517 /* MCHTMLRendererIMAPDataCallback.cpp in Sources */, - DA89896E178A47D200F6D90A /* MCOIMAPMessageRenderingOperation.mm in Sources */, - 84D73772199C007E005124E5 /* MCONNTPFetchArticleOperation.mm in Sources */, - 4B3C1BE317ABFF91008BBF4C /* MCOIMAPQuotaOperation.mm in Sources */, 4B3C1BE517AC0176008BBF4C /* MCIMAPQuotaOperation.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -5660,24 +5483,137 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - C6BD28AB170BDB6B00A91AC1 /* MCOFramework.mm in Sources */, + 84424A7E1F274CBA009B953B /* CIMAPSearchOperation.cpp in Sources */, + 84DBBE891F26400E00F03A5F /* Attachment.swift in Sources */, + 84DBBE8A1F26400E00F03A5F /* MessageBuilder.swift in Sources */, + 84DBBE8B1F26400E00F03A5F /* MessageParser.swift in Sources */, + 84DBBE8C1F26400E00F03A5F /* Operation.swift in Sources */, + 84DBBE8D1F26400E00F03A5F /* MailCoreError.swift in Sources */, + 84DBBE8E1F26400E00F03A5F /* AbstractMessage.swift in Sources */, + 84DBBE8F1F26400E00F03A5F /* AbstractMessagePart.swift in Sources */, + 84DBBE901F26400E00F03A5F /* AbstractMultipart.swift in Sources */, + 84DBBE911F26400E00F03A5F /* AbstractPart.swift in Sources */, + 84DBBE921F26400E00F03A5F /* Address.swift in Sources */, + 84DBBE931F26400E00F03A5F /* MessageHeader.swift in Sources */, + 84DBBE941F26400E00F03A5F /* HTMLRendererDelegate.swift in Sources */, + 84DBBE951F26400E00F03A5F /* HTMLRendererImapDelegate.swift in Sources */, + 84DBBE961F26400E00F03A5F /* AbstractMessageRendererCallback.swift in Sources */, + 84DBBE971F26400E00F03A5F /* Convertible.swift in Sources */, + 84DBBE981F26400E00F03A5F /* String+Mailcore.swift in Sources */, + 845FB84E1F2909A000A29DA8 /* CMailProvider.cpp in Sources */, + 84DBBE991F26400E00F03A5F /* Dictionary+Mailcore.swift in Sources */, + 84DBBE9A1F26400E00F03A5F /* Data+Mailcore.swift in Sources */, + 84DBBE9B1F26400E00F03A5F /* Array+Mailcore.swift in Sources */, + 84DBBE9C1F26400E00F03A5F /* UInt32+Mailcore.swift in Sources */, + 84DBBE9D1F26400E00F03A5F /* MCOIndexSet.swift in Sources */, + 84DBBE9E1F26400E00F03A5F /* IMAPFolder.swift in Sources */, + 844D9CE01F28F1F500E470A8 /* CMessagePart.cpp in Sources */, + 84DBBE9F1F26400E00F03A5F /* IMAPMessage.swift in Sources */, + 84DBBEA01F26400E00F03A5F /* IMAPMessagePart.swift in Sources */, + 84DBBEA11F26400E00F03A5F /* IMAPMultipart.swift in Sources */, + 84DBBEA21F26400E00F03A5F /* IMAPNamespace.swift in Sources */, + 84DBBEA31F26400E00F03A5F /* IMAPNamespaceItem.swift in Sources */, + 84DBBEA41F26400E00F03A5F /* IMAPPart.swift in Sources */, + 84DBBEA51F26400E00F03A5F /* IMAPFolderInfo.swift in Sources */, + 84DBBEA61F26400E00F03A5F /* IMAPFolderStatus.swift in Sources */, + 84DBBEA71F26400E00F03A5F /* IMAPSearchExpression.swift in Sources */, + 843EA47C1F795A5400861123 /* LibetpanHelper.swift in Sources */, + 84DBBEA81F26400E00F03A5F /* IMAPBaseOperation.swift in Sources */, + 84DBBEA91F26400E00F03A5F /* IMAPOperation.swift in Sources */, + 84DBBEAA1F26400E00F03A5F /* IMAPAppendMessageOperation.swift in Sources */, + 84DBBEAB1F26400E00F03A5F /* IMAPCopyMessagesOperation.swift in Sources */, + 84DBBEAC1F26400E00F03A5F /* IMAPFetchContentOperation.swift in Sources */, + 84DBBEAD1F26400E00F03A5F /* IMAPFetchMessagesOperation.swift in Sources */, + 84DBBEAE1F26400E00F03A5F /* IMAPFolderInfoOperation.swift in Sources */, + 84DBBEAF1F26400E00F03A5F /* IMAPFolderStatusOperation.swift in Sources */, + 84DBBEB01F26400E00F03A5F /* IMAPSearchOperation.swift in Sources */, + 84DBBEB11F26400E00F03A5F /* IMAPIdleOperation.swift in Sources */, + 84DBBEB21F26400E00F03A5F /* IMAPSession.swift in Sources */, + 84DBBEB31F26400E00F03A5F /* IMAPFetchFoldersOperation.swift in Sources */, + 84DBBEB41F26400E00F03A5F /* IMAPCapabilityOperation.swift in Sources */, + 84DBBEB51F26400E00F03A5F /* IMAPCheckAccountOperation.swift in Sources */, + 84DBBEB61F26400E00F03A5F /* IMAPCustomCommandOperation.swift in Sources */, + 84DBBEB71F26400E00F03A5F /* IMAPFetchContentToFileOperation.swift in Sources */, + 84DBBEB81F26400E00F03A5F /* IMAPFetchNamespaceOperation.swift in Sources */, + 84DBBEB91F26400E00F03A5F /* IMAPFetchParsedContentOperation.swift in Sources */, + 84DBBEBA1F26400E00F03A5F /* IMAPMessageRenderingOperation.swift in Sources */, + 84DBBEBB1F26400E00F03A5F /* IMAPMoveMessagesOperation.swift in Sources */, + 84DBBEBC1F26400E00F03A5F /* IMAPQuotaOperation.swift in Sources */, + 84C1894A223808A3001430F3 /* CAutoreleasePool.cpp in Sources */, + 84DBBEBD1F26400E00F03A5F /* IMAPIdentity.swift in Sources */, + 84DBBEBE1F26400E00F03A5F /* IMAPIdentityOperation.swift in Sources */, + 84DBBEBF1F26400E00F03A5F /* SMTPSession.swift in Sources */, + 84DBBEC01F26400E00F03A5F /* SMTPOperation.swift in Sources */, + 846693061F6829AA0020C6C9 /* MessagePart.swift in Sources */, + 84DBBEC11F26400E00F03A5F /* SMTPSendOperation.swift in Sources */, + 8408C8061F26378D0003A816 /* CMessageParser.cpp in Sources */, + 8408C7251F2635930003A816 /* COperation.cpp in Sources */, + 8408C7271F2635930003A816 /* CAbstractMessage.cpp in Sources */, + 8408C7291F2635930003A816 /* CAbstractMessagePart.cpp in Sources */, + 8408C7FE1F26378D0003A816 /* CAttachment.cpp in Sources */, + 8408C72B1F2635930003A816 /* CAbstractMultipart.cpp in Sources */, + 8408C72E1F2635930003A816 /* CAddress.cpp in Sources */, + 8408C7301F2635930003A816 /* CAbstractPart.cpp in Sources */, + 8408C7321F2635930003A816 /* CMessageHeader.cpp in Sources */, + 8408C7341F2635930003A816 /* CAbstractMessageRendererCallback.cpp in Sources */, + 8408C7361F2635930003A816 /* CIMAPFolder.cpp in Sources */, + 8408C7381F2635930003A816 /* CIMAPMessage.cpp in Sources */, + 8408C73A1F2635930003A816 /* CIMAPMessagePart.cpp in Sources */, + 8408C73C1F2635930003A816 /* CIMAPMultipart.cpp in Sources */, + 84AD84911F435DEB000361A3 /* CMultipart.cpp in Sources */, + 8408C73E1F2635930003A816 /* CIMAPNamespace.cpp in Sources */, + 8408C7401F2635930003A816 /* CIMAPNamespaceItem.cpp in Sources */, + 8408C7421F2635930003A816 /* CIMAPPart.cpp in Sources */, + 84E52F6E1F3350CA00233DA3 /* Object.swift in Sources */, + 8408C7441F2635930003A816 /* CIMAPFolderInfo.cpp in Sources */, + 8408C7461F2635930003A816 /* CIMAPFolderStatus.cpp in Sources */, + 8408C7481F2635930003A816 /* CIMAPSearchExpression.cpp in Sources */, + 8408C74A1F2635930003A816 /* CIMAPBaseOperation.cpp in Sources */, + 843E4A871F30838500D78022 /* MailCoreString.cpp in Sources */, + 8408C74C1F2635930003A816 /* CIMAPAppendMessageOperation.cpp in Sources */, + 8408C74E1F2635930003A816 /* CIMAPCopyMessagesOperation.cpp in Sources */, + 8408C7501F2635930003A816 /* CIMAPFetchContentOperation.cpp in Sources */, + 8408C7521F2635930003A816 /* CIMAPFetchMessagesOperation.cpp in Sources */, + 8408C7541F2635930003A816 /* CIMAPFolderInfoOperation.cpp in Sources */, + 8408C7561F2635930003A816 /* CIMAPFolderStatusOperation.cpp in Sources */, + 8408C75A1F2635930003A816 /* CIMAPIdleOperation.cpp in Sources */, + 8408C75C1F2635930003A816 /* CIMAPAsyncSession.cpp in Sources */, + 8408C75E1F2635930003A816 /* CIMAPFetchFoldersOperation.cpp in Sources */, + 8408C7601F2635930003A816 /* CIMAPCapabilityOperation.cpp in Sources */, + 8408C7621F2635930003A816 /* CIMAPCheckAccountOperation.cpp in Sources */, + 8408C7641F2635930003A816 /* CIMAPCustomCommandOperation.cpp in Sources */, + 8408C7661F2635930003A816 /* CIMAPFetchContentToFileOperation.cpp in Sources */, + 8408C7681F2635930003A816 /* CIMAPFetchNamespaceOperation.cpp in Sources */, + 8408C76A1F2635930003A816 /* CIMAPFetchParsedContentOperation.cpp in Sources */, + 8408C76C1F2635930003A816 /* CIMAPMessageRenderingOperation.cpp in Sources */, + 8408C76E1F2635930003A816 /* CIMAPMoveMessagesOperation.cpp in Sources */, + 8408C7701F2635930003A816 /* CIMAPQuotaOperation.cpp in Sources */, + 8408C7721F2635930003A816 /* CIMAPIdentity.cpp in Sources */, + 8408C7741F2635930003A816 /* CIMAPIdentityOperation.cpp in Sources */, + 8408C7761F2635930003A816 /* CSMTPSession.cpp in Sources */, + 8408C7781F2635930003A816 /* CSMTPOperation.cpp in Sources */, + 8408C77A1F2635930003A816 /* CArray.cpp in Sources */, + 8408C77C1F2635930003A816 /* CIndexSet.cpp in Sources */, + 8408C77E1F2635930003A816 /* CObject.cpp in Sources */, + 8408C7801F2635930003A816 /* CDictionary.cpp in Sources */, A9D52459D38E9DFFBFFD3530 /* MCNNTPFetchArticleOperation.cpp in Sources */, 2F864B35BD689A4500E0D43B /* MCAbstractMessage.cpp in Sources */, 18CBF5741BB4755A6C3871AE /* MCAbstractMessagePart.cpp in Sources */, 0B0829A867DE7C3A26599328 /* umutex.cpp in Sources */, 8044EF5EB5A7CBF984D536C8 /* MCIMAPNoopOperation.cpp in Sources */, + 843E49FC1F2F9A4700D78022 /* ConnectionLoggerHelper.swift in Sources */, 08B778137CC1EEB8B7C4ABC1 /* MCAbstractMultipart.cpp in Sources */, 35A95B39787BF973CF69C225 /* MCAbstractPart.cpp in Sources */, 22509B3CE33E5FF1F02C578A /* MCAddress.cpp in Sources */, + 845FB8421F29031400A29DA8 /* CMailProvidersManager.cpp in Sources */, + 845FB85D1F2914D200A29DA8 /* MailProvidersManager.swift in Sources */, 8FCB2EF3AB3714C3988A1125 /* MCMessageHeader.cpp in Sources */, CA4271D9DA4EBFC95DB0625A /* MCAutoreleasePool.cpp in Sources */, C82125D34DA7457D9D821383 /* MCArray.cpp in Sources */, 0E4EAA748969A74A2F8AC40B /* MCZip.cpp in Sources */, + 843E58161F6927DA00AE681B /* DispatchQueue+Mailcore.swift in Sources */, 69C47A83A8E38FC5A0E09D6B /* MCSMTPNoopOperation.cpp in Sources */, - B6D79A51A86764B5C75FCB50 /* MCONNTPFetchOverviewOperation.mm in Sources */, - E369178ED36FF70A63AD97D2 /* MCOIMAPFetchParsedContentOperation.mm in Sources */, 55DBD5240FC44C606C7DCECC /* MCAssert.c in Sources */, - 7D9809C0EFFD01D562B7208D /* MCONNTPGroupInfo.mm in Sources */, FC2E4E860688FEC5315FA904 /* MCData.cpp in Sources */, A82FCADB37B75DC40B2F69AE /* MCHash.cpp in Sources */, D67B97377839C6082AB846E5 /* MCHashMap.cpp in Sources */, @@ -5693,9 +5629,7 @@ 49168C0ECE85D17C4DCA6E78 /* MCIMAPFolder.cpp in Sources */, CA33C2725EAF707610028644 /* MCIMAPMessage.cpp in Sources */, 8019C3E16545C2DD0B0762FA /* MCIMAPMessagePart.cpp in Sources */, - 4EAD4BA39FC8799BD288A9E9 /* MCONNTPFetchAllArticlesOperation.mm in Sources */, DE08D2132E7BD7733CFB7C8D /* MCIMAPMultipart.cpp in Sources */, - 0A83EAF2F76D5DBA030C3D35 /* MCONNTPFetchServerTimeOperation.mm in Sources */, 3BE2F2913A0998DD751EEAD9 /* MCIMAPNamespace.cpp in Sources */, 5E44C7C9D4447966F536A182 /* MCIMAPNamespaceItem.cpp in Sources */, 3796429D231DB0384468F3A5 /* MCIMAPPart.cpp in Sources */, @@ -5709,19 +5643,19 @@ 152BD5E7A7548C7AE07AF6DD /* MCPOPSession.cpp in Sources */, BCC9CBF3618E6376F3D9B7DA /* MCAccountValidator.cpp in Sources */, 89DAEABAF1BE96FDBECEDE15 /* MCNNTPListNewsgroupsOperation.cpp in Sources */, + 845FB8481F29057A00A29DA8 /* CNetService.cpp in Sources */, 478FBDA7C6B9C6AA0BC38E97 /* MCAttachment.cpp in Sources */, 00922FC3F11869C3F7AB0A8A /* MCMessageBuilder.cpp in Sources */, 1EE1E1DAFC696AFE4785F52D /* MCMessageParser.cpp in Sources */, 63214A7A1F87DD8668505C2C /* MCMessagePart.cpp in Sources */, - BBC9F0FBE0D1C014C133D3E9 /* MCONNTPListNewsgroupsOperation.mm in Sources */, 2ED1344CB8D0D3778D1DBE30 /* MCMultipart.cpp in Sources */, D45CE17E4FCECA90C8A0E2F4 /* MCSMTPSession.cpp in Sources */, - 79B8D92B571C7941FD9A259C /* MCOIMAPNoopOperation.mm in Sources */, E8096C33A031E2A6BC44621B /* MCSMTPAsyncSession.cpp in Sources */, D3A48A829DE8214CC305D72E /* MCCertificateUtils.cpp in Sources */, 83D255B1AC1A46181454B02A /* MCSMTPLoginOperation.cpp in Sources */, 808B7BCFF308BB35D00D46DB /* MCSMTPSendWithDataOperation.cpp in Sources */, 4F5C26CE37EF893A2E87131A /* MCSMTPOperation.cpp in Sources */, + 8458F9521F3F505B0066C70C /* MCOObjectWrapper.mm in Sources */, 6B478AC5B81BFD9620DDCC79 /* MCSMTPCheckAccountOperation.cpp in Sources */, CECC9D428F36B6695DFEB100 /* MCIMAPOperation.cpp in Sources */, 23C66560403223DCA116BA68 /* MCMXRecordResolverOperation.cpp in Sources */, @@ -5738,18 +5672,17 @@ EE57D9B5BA6B4A704F8C83EE /* csmatch.cpp in Sources */, E0949A07C1FBB50184CF99D0 /* MCIMAPSubscribeFolderOperation.cpp in Sources */, 5A9F19CAE4AE38D92DA6E6FD /* MCNNTPAsyncSession.cpp in Sources */, + 845FB85A1F2910D700A29DA8 /* MailProvider.swift in Sources */, 1F4A7597FB8A313E685CB80A /* MCIMAPAppendMessageOperation.cpp in Sources */, F1911E8987CA5287C13C1821 /* MCIMAPCopyMessagesOperation.cpp in Sources */, E090D52AD355AF74BDCDB3D4 /* MCIMAPMoveMessagesOperation.cpp in Sources */, D6178CFB22BE28FC8FAD881C /* MCIMAPExpungeOperation.cpp in Sources */, B9D5748BDAB56CC85D8728FD /* uobject.cpp in Sources */, - BC674766811CC380212CFC5B /* NSIndexSet+MCO.m in Sources */, 17228CB8E98A85819D6A70FD /* MCIMAPFetchMessagesOperation.cpp in Sources */, 04738A6E274B7A530F34452C /* MCIMAPFetchContentOperation.cpp in Sources */, 17E6289FBAC69CD514148080 /* MCNNTPCheckAccountOperation.cpp in Sources */, 4FDE7B5B08312093D99ACF0A /* MCIMAPStoreFlagsOperation.cpp in Sources */, AAA1D2EBA7ACD7A7408B95B8 /* MCIMAPStoreLabelsOperation.cpp in Sources */, - 5B167A135C0B7B2AF8D22E73 /* NSSet+MCO.mm in Sources */, 347C957CA245D0BA62CA9D1B /* MCIMAPSearchOperation.cpp in Sources */, 60B5C74F1F7D19F7DFD1C378 /* zip.c in Sources */, 10B11B475533B0C7AD21CD90 /* MCIMAPIdleOperation.cpp in Sources */, @@ -5771,23 +5704,12 @@ 7456401F6548E5F97E373D2F /* MCIMAPAsyncSession.cpp in Sources */, 4E37EDB145EED5003D1E3BEF /* udataswp.c in Sources */, 9927A59231F681695C392F45 /* cstring.c in Sources */, - 3B735D299B1A25CFC3E62410 /* NSData+MCO.mm in Sources */, - EDC26412B247F71D5565D7BC /* NSString+MCO.mm in Sources */, - 81B98D805260F395BDE27767 /* MCOObjectWrapper.mm in Sources */, 0B87684F911F754579375354 /* MCNNTPFetchHeaderOperation.cpp in Sources */, - 946090F1BB6898E345104F0D /* MCONNTPFetchHeaderOperation.mm in Sources */, 0EBCD5964A48085343093B7E /* ioapi.c in Sources */, 1FD0A71D29FFD452A3E2ACAC /* inputext.cpp in Sources */, 9E8EE4564C84443EE6FA23C9 /* ucsdet.cpp in Sources */, - 3E40BEDF19DACB39AD070E2B /* MCOIMAPSession.mm in Sources */, F0E1093EA9094DBBF1BE57FE /* utrace.c in Sources */, - 7F5B37D909E9B13DD1ECFF42 /* NSError+MCO.mm in Sources */, - 304363D446243048FD03183A /* MCOIMAPFetchFoldersOperation.mm in Sources */, - 8C1FD6CFD00F8F45A40FEFA6 /* MCOPOPNoopOperation.mm in Sources */, - FB151E555B32CB9823541450 /* NSDictionary+MCO.mm in Sources */, EF22293B161ED77407798380 /* MCIMAPFetchParsedContentOperation.cpp in Sources */, - 73FE9FD5A62AE63B2C2D0A4F /* NSArray+MCO.mm in Sources */, - C75DA2E7F93746CCBE0ED16F /* NSObject+MCO.mm in Sources */, F5BA1F1C2F150A484726B921 /* uenum.c in Sources */, 5D4230E93B57B396DDE289F8 /* MCAddressDisplay.cpp in Sources */, 4E07E0264EB5E2ADC903B326 /* MCDateFormatter.cpp in Sources */, @@ -5800,79 +5722,24 @@ B19960FEAC7C297D67F11FA4 /* MCIMAPCapabilityOperation.cpp in Sources */, E9A444F64FC1A907BB4E45DB /* MCIMAPCustomCommandOperation.cpp in Sources */, FFAEEC4A7D538769F7D1289C /* MCIndexSet.cpp in Sources */, - C36A64976A9890F0C0222286 /* MCONNTPSession.mm in Sources */, - B303C50210301040BCD28892 /* MCOAbstractMessage.mm in Sources */, - 8C817A3F795D557A26E4337F /* MCOIMAPCheckAccountOperation.mm in Sources */, 912A5DAAE7352F9C53F2C15F /* ustring.cpp in Sources */, - C2E4444D61778074E3496FFF /* MCOAbstractMessagePart.mm in Sources */, - F8BEC0B5E1B550E354F4A3E6 /* MCOAbstractMultipart.mm in Sources */, D95AFD6708C8B854E6D72D5C /* MCDataDecoderUtils.cpp in Sources */, 9F89C826D347517A53EFB827 /* uarrsort.c in Sources */, - 2CF42E31FCE464508C0E91EC /* MCOIMAPMoveMessagesOperation.mm in Sources */, - 8F58AC8081D4161832402EBE /* MCDataMac.mm in Sources */, - CA65236B4570F8ABA6A1816F /* MCOAbstractPart.mm in Sources */, - 599DC18774D1FC23DD044B46 /* MCOAddress.mm in Sources */, - 5C04EF7E088400E3A968D349 /* MCOMessageHeader.mm in Sources */, - 07F3D618E79C7D184FAEBFBB /* MCOAccountValidator.mm in Sources */, - E573C2BD2D2C73A4DD35FD08 /* NSValue+MCO.mm in Sources */, - 0A4BB933452EA824BA4EDF9C /* MCOOperation.mm in Sources */, - D22EB249D672F7589FF22E76 /* MCOAttachment.mm in Sources */, - 98A6E1C1284BD3C994F6A2E9 /* MCOMessageBuilder.mm in Sources */, - DD500FF1B2C7E0F3F9130B35 /* MCOMessageParser.mm in Sources */, 73AEEB3582E3E1D89998FF91 /* csrsbcs.cpp in Sources */, - 172012590990B17B8DC13D85 /* MCOMessagePart.mm in Sources */, - 050614C2A1FA0BBA1E280CA6 /* MCOMultipart.mm in Sources */, - FB78CB6B361B88DBE70B7C57 /* MCOIMAPOperation.mm in Sources */, - B697FE5DC80481D97694C290 /* MCOIMAPFolder.mm in Sources */, 3A78E3333C03F1EE466F8B61 /* MCBase64.c in Sources */, - 02A14B5B2B8CF3623AA0160E /* MCOIMAPMessage.mm in Sources */, - 2812062627EDC1F0DD99CE79 /* MCOIMAPMessagePart.mm in Sources */, - 2E5BF6F27ED81C4BC6E16549 /* MCOIMAPMultipart.mm in Sources */, - BE22EDD9A9B615C5050CEED8 /* MCOIMAPNamespace.mm in Sources */, - CBB7B0EDC18CCB42864998E3 /* MCOIMAPNamespaceItem.mm in Sources */, - 03E7C868113F88DC90F6B0A7 /* MCOIMAPCustomCommandOperation.mm in Sources */, - C33A20EE3C1DACBF5E02A953 /* MCOIMAPPart.mm in Sources */, - D74D52AF06E74059053415AE /* MCOIndexSet.mm in Sources */, 9C95572790276F512AEFDF23 /* MCNNTPGroupInfo.cpp in Sources */, - CCF2484E668FCF7D2262C579 /* MCOAbstractMessageRendererCallback.mm in Sources */, - A4A303F4AF7BB01CC915449E /* MCORange.mm in Sources */, - 84C389E8CC06C8FAFEF2D650 /* MCOIMAPIdentity.mm in Sources */, - 69FD95825496869A6E8CFB2D /* MCOIMAPFolderInfoOperation.mm in Sources */, 5BD9B883B3E4CAEBB43CD509 /* csdetect.cpp in Sources */, EDAC14A8132C097CAD4DDF08 /* csrucode.cpp in Sources */, - DBF8ECBD672038E00812F448 /* MCOIMAPAppendMessageOperation.mm in Sources */, - 55E72C7B9CC5334114B662BE /* MCOIMAPCopyMessagesOperation.mm in Sources */, 5361C01715EBFC70E99717D1 /* MCIMAPMessageRenderingOperation.cpp in Sources */, - 271338E576D2B669BA0A0A49 /* MCOIMAPFetchMessagesOperation.mm in Sources */, - 1857AE722E29E86F12E9D064 /* MCOIMAPFetchContentOperation.mm in Sources */, - C39079BA900BB23AB3CA44BA /* MCOIMAPSearchOperation.mm in Sources */, - FED09C5DEB5AF6D3B1B540B6 /* MCOIMAPIdleOperation.mm in Sources */, - 7DA3ECA876B858E0CA74C7C4 /* MCOIMAPFetchNamespaceOperation.mm in Sources */, - 0F263E601A76E4E7C5D97AFB /* MCOIMAPIdentityOperation.mm in Sources */, - ABAF7343AC8408EEA9819D6C /* MCOIMAPCapabilityOperation.mm in Sources */, 541318FB813F89BD5DC444BC /* unzip.c in Sources */, - A4866F6D49E4EBB355275A1C /* MCOIMAPSearchExpression.mm in Sources */, - 2EC6D69D8B2DBD43D0E2088F /* MCOIMAPFolderInfo.mm in Sources */, - 5AA24015F0C189BF2B629098 /* MCMessageParserMac.mm in Sources */, - C39100857B52E84008763451 /* MCONNTPPostOperation.mm in Sources */, - D28BC26ED129F34F18B1983B /* MCOIMAPBaseOperation.mm in Sources */, 52D9CF5450D8FD99DF6C860A /* MCSMTPDisconnectOperation.cpp in Sources */, - D5379E49F93B03C760580ACD /* MCOSMTPSession.mm in Sources */, BC2E7B751D3A26C80F40E3B2 /* csr2022.cpp in Sources */, 75DEED198A8C6658D671516D /* MCIMAPFolderInfo.cpp in Sources */, - 6A05182A90EFE09B29C46FAA /* MCOSMTPLoginOperation.mm in Sources */, - D67F7A2874DBBEDB3E06461A /* MCOSMTPSendOperation.mm in Sources */, - 092DDA8C0C188B7F99426174 /* MCOSMTPOperation.mm in Sources */, - F5F1D859C30C063189E826CE /* MCOSMTPNoopOperation.mm in Sources */, - A9AC247A8C5B4CCED04F6B1A /* MCOPOPSession.mm in Sources */, + 84AD84961F435F9A000361A3 /* Multipart.swift in Sources */, + 84FEDEC31F28979900A9E88C /* MessageConstants.swift in Sources */, 3D18DC5F6995DD39AA69C0D4 /* MCIMAPMultiDisconnectOperation.cpp in Sources */, - F794DF4DF1BE570D2EBED933 /* MCOPOPFetchHeaderOperation.mm in Sources */, A3FA0952984E9F27D395EC6E /* MCIMAPDisconnectOperation.cpp in Sources */, - FDE7B740BE15EEC185EDA343 /* MCOPOPFetchMessageOperation.mm in Sources */, 3BA5DC055EE2FA934545729D /* MCNNTPOperation.cpp in Sources */, - 53A986F57B061F3C22C8E904 /* MCOPOPOperation.mm in Sources */, - C045B2CD73B56E8B22E1FEDF /* MCOPOPFetchMessagesOperation.mm in Sources */, - 608F4B10E2EED58C7E22D054 /* MCOPOPMessageInfo.mm in Sources */, 5EB97FBAB7A58914351460B9 /* MCPOPCheckAccountOperation.cpp in Sources */, 07E0E590A13DD46EFF9D22D4 /* ucln_cmn.cpp in Sources */, E41F3979096D48B949D3EEEA /* MCJSON.cpp in Sources */, @@ -5881,32 +5748,24 @@ 5DD54C9EBF93E9EF57E9120A /* cmemory.c in Sources */, 1B2A94D60BE845DAA517B22E /* csrecog.cpp in Sources */, 739596D31ABFE8BAB028CD84 /* MCJSONParser.cpp in Sources */, + 8408C8021F26378D0003A816 /* CMessageBuilder.cpp in Sources */, 79450C97F762FED8C62ED18F /* MCErrorMessage.cpp in Sources */, + 84D72F1D1F32161800F570BC /* CData.cpp in Sources */, F5053416B933489D20A020A2 /* MCNNTPFetchOverviewOperation.cpp in Sources */, - 6133B24FC61208B6D6709E10 /* MCONNTPOperation.mm in Sources */, 5B39622D77ACA866E930893F /* MCObjectMac.mm in Sources */, D9BBE9C1F1605FD727C25032 /* MCAutoreleasePoolMac.mm in Sources */, - 9D2A8FB8A0073172A23A119E /* MCOMailProvider.mm in Sources */, - E7E6ADDE88B647A7B5959DEB /* MCOMailProvidersManager.mm in Sources */, - 8699027A4BD3AE23A8B04EE5 /* MCONNTPDisconnectOperation.mm in Sources */, + 845FB8571F290CF000A29DA8 /* NetService.swift in Sources */, 621178ADBAA0EE724603D62B /* MCZipMac.mm in Sources */, - CE02DBCA9E136368D2107B3F /* MCONetService.mm in Sources */, - A959C39DF6ABC747BDEB5247 /* MCOIMAPFetchContentToFileOperation.mm in Sources */, - B68A2D70B3DE86BEB46B5D19 /* MCOIMAPMultiDisconnectOperation.mm in Sources */, 177AA97E353774F3A3AD1013 /* MCMailProvider.cpp in Sources */, + 8029D8C61F96408F00BF5BC4 /* NSObjectCompat.swift in Sources */, 5BE2AE83FAB9CCCC11F9976A /* MCMailProvidersManager.cpp in Sources */, 05907892CA96447EAB5C53E7 /* MCNetService.cpp in Sources */, - F94BC14E64FFA818BF8F996A /* MCOIMAPFolderStatus.mm in Sources */, 43364FD8A53BC23C4522A2F1 /* MCIMAPFolderStatusOperation.cpp in Sources */, - 0992A9E9A705EF5ECBF47E78 /* MCOIMAPFolderStatusOperation.mm in Sources */, B808A967FC94D0E43BE4D183 /* MCNNTPPostOperation.cpp in Sources */, 605FD6AE213EF24708EB67D2 /* MCIMAPFolderStatus.cpp in Sources */, 6AAC56D01B8C460F481A7E2D /* MCHTMLBodyRendererTemplateCallback.cpp in Sources */, 9360BE7A652078955C7AE4C6 /* MCLibetpan.cpp in Sources */, 3EEA57840839BAE3BCC1088F /* MCHTMLRendererIMAPDataCallback.cpp in Sources */, - C8740C48036772955805B361 /* MCOIMAPMessageRenderingOperation.mm in Sources */, - 38367DEDB34A294DF192D7C5 /* MCONNTPFetchArticleOperation.mm in Sources */, - 423FC92F53CD31D0175130A0 /* MCOIMAPQuotaOperation.mm in Sources */, F7C7910765AE6B8C568A3CFA /* MCIMAPQuotaOperation.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -5914,6 +5773,11 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ + 841E65011F683440007BB736 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = C6BD288C170BD71100A91AC1 /* mailcore osx */; + targetProxy = 841E65001F683440007BB736 /* PBXContainerItemProxy */; + }; C600B61F1A244BD8000728F1 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = C64EA536169E772200778456 /* static mailcore2 osx */; @@ -5944,7 +5808,7 @@ CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES; CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; COMBINE_HIDPI_IMAGES = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; @@ -5954,6 +5818,8 @@ INFOPLIST_FILE = "framework-Info.plist"; INSTALL_PATH = "@executable_path/../Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)"; OTHER_LDFLAGS = ( "-lctemplate-ios", "-letpan-ios", @@ -5968,6 +5834,11 @@ PRODUCT_BUNDLE_IDENTIFIER = "com.libmailcore.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = MailCore; SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_INCLUDE_PATHS = "${SRCROOT}/CMailCore"; + SWIFT_OBJC_BRIDGING_HEADER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.0; WRAPPER_EXTENSION = framework; }; name = Debug; @@ -5979,7 +5850,7 @@ CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES; CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; COMBINE_HIDPI_IMAGES = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; @@ -5989,6 +5860,8 @@ INFOPLIST_FILE = "framework-Info.plist"; INSTALL_PATH = "@executable_path/../Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)"; OTHER_LDFLAGS = ( "-lctemplate-ios", "-letpan-ios", @@ -6003,10 +5876,93 @@ PRODUCT_BUNDLE_IDENTIFIER = "com.libmailcore.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = MailCore; SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = ""; + SWIFT_INCLUDE_PATHS = "${SRCROOT}/CMailCore"; + SWIFT_OBJC_BRIDGING_HEADER = ""; + SWIFT_VERSION = 4.0; WRAPPER_EXTENSION = framework; }; name = Release; }; + 841E65031F683440007BB736 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + INFOPLIST_FILE = MailCoreTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.12; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_BUNDLE_IDENTIFIER = readdle.MailCoreTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.0; + }; + name = Debug; + }; + 841E65041F683440007BB736 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = NO; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + INFOPLIST_FILE = MailCoreTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.12; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_BUNDLE_IDENTIFIER = readdle.MailCoreTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + SWIFT_VERSION = 4.0; + }; + name = Release; + }; C600B6181A242C3F000728F1 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -6041,8 +5997,6 @@ "-lc++", "-stdlib=libc++", "-ObjC", - "-lcrypto", - "-lssl", "-lresolv", ); PRODUCT_NAME = "$(TARGET_NAME)"; @@ -6081,8 +6035,6 @@ "-lc++", "-stdlib=libc++", "-ObjC", - "-lcrypto", - "-lssl", "-lresolv", ); PRODUCT_NAME = "$(TARGET_NAME)"; @@ -6097,12 +6049,21 @@ CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_OBJC_ARC = NO; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", @@ -6112,7 +6073,9 @@ GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( "\"$(SRCROOT)/../Externals/libetpan/include\"", @@ -6148,15 +6111,26 @@ CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_OBJC_ARC = NO; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_NO_COMMON_BLOCKS = YES; GCC_PREPROCESSOR_DEFINITIONS = "U_COMMON_IMPLEMENTATION=1"; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( "\"$(SRCROOT)/../Externals/libetpan/include\"", @@ -6181,28 +6155,37 @@ "LIBRARY_SEARCH_PATHS[sdk=macosx*]" = "$(OSX_LIBRARY_SEARCH_PATHS)"; OSX_HEADERS_SEARCH_PATHS = "\"$(SRCROOT)/../src/core/basetypes/icu-ucsdet/include\" \"$(SRCROOT)/../Externals/libetpan-osx/include\" \"$(SRCROOT)/../Externals/ctemplate-osx/include\" /usr/include/tidy /usr/include/libxml2"; OSX_LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../Externals/libetpan-osx/lib\" \"$(SRCROOT)/../Externals/ctemplate-osx/lib\""; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; }; name = Release; }; C64EA53C169E772200778456 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_ENABLE_MODULES = YES; COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_PREFIX = lib; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.8; + OTHER_CFLAGS = "-DLEGACY_OBJC_RUNTIME"; PRODUCT_NAME = MailCore; SDKROOT = macosx; + SKIP_INSTALL = YES; }; name = Debug; }; C64EA53D169E772200778456 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_ENABLE_MODULES = YES; COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_PREFIX = lib; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.8; + OTHER_CFLAGS = "-DLEGACY_OBJC_RUNTIME"; PRODUCT_NAME = MailCore; SDKROOT = macosx; + SKIP_INSTALL = YES; }; name = Release; }; @@ -6227,6 +6210,7 @@ C6A81BAA1706840C00882C15 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; @@ -6237,6 +6221,7 @@ "\"$(SYSTEM_APPS_DIR)/Xcode.app/Contents/Developer/Library/Frameworks\"", ); INFOPLIST_FILE = "../tests-ios/tests-ios-Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; ONLY_ACTIVE_ARCH = NO; OTHER_LDFLAGS = ( "-lctemplate-ios", @@ -6260,6 +6245,7 @@ C6A81BAB1706840C00882C15 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; @@ -6270,6 +6256,7 @@ "\"$(SYSTEM_APPS_DIR)/Xcode.app/Contents/Developer/Library/Frameworks\"", ); INFOPLIST_FILE = "../tests-ios/tests-ios-Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; ONLY_ACTIVE_ARCH = NO; OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; OTHER_LDFLAGS = ( @@ -6294,6 +6281,7 @@ C6B5AE0819F630B3001352A6 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -6323,12 +6311,15 @@ PRODUCT_BUNDLE_IDENTIFIER = "com.libmailcore.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 3.0; }; name = Debug; }; C6B5AE0919F630B3001352A6 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -6355,6 +6346,7 @@ PRODUCT_BUNDLE_IDENTIFIER = "com.libmailcore.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; + SWIFT_VERSION = 3.0; VALIDATE_PRODUCT = YES; }; name = Release; @@ -6362,12 +6354,12 @@ C6BA2C171705F4E6003F0E9E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = YES; DEAD_CODE_STRIPPING = NO; ENABLE_BITCODE = YES; EXECUTABLE_PREFIX = lib; IPHONEOS_DEPLOYMENT_TARGET = 8.0; ONLY_ACTIVE_ARCH = NO; + OTHER_CFLAGS = "-DLEGACY_OBJC_RUNTIME"; PRODUCT_NAME = "MailCore-ios"; SDKROOT = iphoneos; SKIP_INSTALL = YES; @@ -6377,12 +6369,12 @@ C6BA2C181705F4E6003F0E9E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = YES; DEAD_CODE_STRIPPING = NO; ENABLE_BITCODE = YES; EXECUTABLE_PREFIX = lib; IPHONEOS_DEPLOYMENT_TARGET = 8.0; ONLY_ACTIVE_ARCH = NO; + OTHER_CFLAGS = "-DLEGACY_OBJC_RUNTIME"; PRODUCT_NAME = "MailCore-ios"; SDKROOT = iphoneos; SKIP_INSTALL = YES; @@ -6392,18 +6384,24 @@ C6BD289E170BD71100A91AC1 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; APPLICATION_EXTENSION_API_ONLY = YES; CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_VERSION = A; INFOPLIST_FILE = "framework-Info.plist"; INSTALL_PATH = "@executable_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.8; + MACOSX_DEPLOYMENT_TARGET = 10.9; + OTHER_CFLAGS = ""; + OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)"; OTHER_LDFLAGS = ( "-lctemplate", "-letpan", @@ -6417,7 +6415,12 @@ ); PRODUCT_BUNDLE_IDENTIFIER = "com.libmailcore.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = MailCore; + PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_INCLUDE_PATHS = "${SRCROOT}/CMailCore"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.0; WRAPPER_EXTENSION = framework; }; name = Debug; @@ -6425,18 +6428,24 @@ C6BD289F170BD71100A91AC1 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; APPLICATION_EXTENSION_API_ONLY = YES; CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_VERSION = A; INFOPLIST_FILE = "framework-Info.plist"; INSTALL_PATH = "@executable_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.8; + MACOSX_DEPLOYMENT_TARGET = 10.9; + OTHER_CFLAGS = ""; + OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)"; OTHER_LDFLAGS = ( "-lctemplate", "-letpan", @@ -6450,7 +6459,11 @@ ); PRODUCT_BUNDLE_IDENTIFIER = "com.libmailcore.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = MailCore; + PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = ""; + SWIFT_INCLUDE_PATHS = "${SRCROOT}/CMailCore"; + SWIFT_VERSION = 4.0; WRAPPER_EXTENSION = framework; }; name = Release; @@ -6467,6 +6480,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 841E65021F683440007BB736 /* Build configuration list for PBXNativeTarget "MailCoreTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 841E65031F683440007BB736 /* Debug */, + 841E65041F683440007BB736 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; C600B61A1A242C3F000728F1 /* Build configuration list for PBXNativeTarget "unittestcpp" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/build-mac/mailcore2.xcodeproj/xcshareddata/xcschemes/MailCoreTests.xcscheme b/build-mac/mailcore2.xcodeproj/xcshareddata/xcschemes/MailCoreTests.xcscheme new file mode 100644 index 000000000..0f7e67614 --- /dev/null +++ b/build-mac/mailcore2.xcodeproj/xcshareddata/xcschemes/MailCoreTests.xcscheme @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build-mac/mailcore2.xcodeproj/xcshareddata/xcschemes/mailcore ios.xcscheme b/build-mac/mailcore2.xcodeproj/xcshareddata/xcschemes/mailcore ios.xcscheme index 9c07b944a..62dd292bc 100644 --- a/build-mac/mailcore2.xcodeproj/xcshareddata/xcschemes/mailcore ios.xcscheme +++ b/build-mac/mailcore2.xcodeproj/xcshareddata/xcschemes/mailcore ios.xcscheme @@ -1,6 +1,6 @@ + language = "en" + region = "US" + shouldUseLaunchSchemeArgsEnv = "NO"> + + + + + + + + + + + + @@ -36,6 +64,7 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + language = "" launchStyle = "0" useCustomWorkingDirectory = "NO" ignoresPersistentStateOnLaunch = "NO" @@ -60,6 +89,15 @@ savedToolIdentifier = "" useCustomWorkingDirectory = "NO" debugDocumentVersioning = "YES"> + + + + diff --git a/build-mac/mailcore2.xcodeproj/xcshareddata/xcschemes/static mailcore2 ios.xcscheme b/build-mac/mailcore2.xcodeproj/xcshareddata/xcschemes/static mailcore2 ios.xcscheme index 789bc5da0..f4781a49a 100644 --- a/build-mac/mailcore2.xcodeproj/xcshareddata/xcschemes/static mailcore2 ios.xcscheme +++ b/build-mac/mailcore2.xcodeproj/xcshareddata/xcschemes/static mailcore2 ios.xcscheme @@ -1,6 +1,6 @@ + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + NSPrincipalClass + + + diff --git a/build-mac/swiftmailcore2/swiftmailcore2.h b/build-mac/swiftmailcore2/swiftmailcore2.h new file mode 100644 index 000000000..a37b6f7e5 --- /dev/null +++ b/build-mac/swiftmailcore2/swiftmailcore2.h @@ -0,0 +1,19 @@ +// +// swiftmailcore2.h +// swiftmailcore2 +// +// Created by Andrew on 9/20/16. +// Copyright © 2016 MailCore. All rights reserved. +// + +#import + +//! Project version number for swiftmailcore2. +FOUNDATION_EXPORT double swiftmailcore2VersionNumber; + +//! Project version string for swiftmailcore2. +FOUNDATION_EXPORT const unsigned char swiftmailcore2VersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/build-scripts/test-android.sh b/build-scripts/test-android.sh new file mode 100755 index 000000000..d68bc9413 --- /dev/null +++ b/build-scripts/test-android.sh @@ -0,0 +1,66 @@ +#!/bin/bash + +set -ex + +# Create variables +export SWIFT_ANDROID_API_LEVEL=29 + +# Emulator +export BUILD_ANDROID=1 +export EMULATOR_PORT=5558 +export EMULATOR_SDK_VERSION=36 +export EMULATOR_NAME=ci-test-$EMULATOR_SDK_VERSION-$EMULATOR_PORT +export ANDROID_SERIAL=emulator-$EMULATOR_PORT +export EMULATOR_ARCH=arm64-v8a +export EMULATOR_PACKAGE="system-images;android-$EMULATOR_SDK_VERSION;google_apis;$EMULATOR_ARCH" +export EMULATOR_ABI=google_apis/$EMULATOR_ARCH + +function finish { + exit_code=$? + adb -s $ANDROID_SERIAL emu kill + exit $exit_code +} +trap finish EXIT + +# Delete emulator if needed +if $ANDROID_HOME/emulator/emulator -list-avds | grep -q $EMULATOR_NAME +then + avdmanager delete avd --name $EMULATOR_NAME +fi + +# Just in case +rm -rf ~/.android/avd/$EMULATOR_NAME.avd + +$ANDROID_HOME/cmdline-tools/latest/bin/avdmanager create avd -n $EMULATOR_NAME -k "$EMULATOR_PACKAGE" -d "pixel" --abi $EMULATOR_ABI + +# Start adb server +adb start-server + +# Start emulator +$ANDROID_HOME/emulator/emulator -no-window -avd $EMULATOR_NAME -noaudio -port $EMULATOR_PORT -partition-size 4000 > /dev/null & + +# Wait until enmulator actually started +adb -s emulator-$EMULATOR_PORT wait-for-any-device; + +# Clear logcat from previous sessions +bash -c "adb logcat -c || true" + +# Create reports folder +mkdir -p .build/reports + +# Start write adb logcat to file +mkdir -p .build/debug +adb logcat | ndk-stack -sym .build/debug > .build/reports/ndk-stack.log & + +swift-android test --deploy -Xbuild -Xcc -Xbuild -DUNIT_TESTS + +# Test +swift-android test --just-run --isolate | tee .build/reports/test.log +return_code=${PIPESTATUS[0]} + +cat .build/reports/test.log | xcbeautify --report junit --report-path .build/reports + +cat .build/reports/ndk-stack.log + +# return code +exit ${return_code} diff --git a/build-scripts/test-ios.sh b/build-scripts/test-ios.sh new file mode 100755 index 000000000..0ed707d3d --- /dev/null +++ b/build-scripts/test-ios.sh @@ -0,0 +1,18 @@ +#!/bin/bash +set -ex + +# Create reports folder +mkdir -p .build-ios/reports + +# Test +MANIFEST_TARGET_PLATFORM=iOS \ + xcodebuild test -scheme MailCore \ + -destination "OS=26.2,name=iPhone 17" \ + -derivedDataPath ./.build-ios | tee .build-ios/reports/test.log +return_code=${PIPESTATUS[0]} + +# Generate junit report +cat .build-ios/reports/test.log | xcpretty --report junit --output .build-ios/reports/junit.xml + +# return code +exit ${return_code} diff --git a/build-scripts/test-macos.sh b/build-scripts/test-macos.sh new file mode 100755 index 000000000..80706b9bb --- /dev/null +++ b/build-scripts/test-macos.sh @@ -0,0 +1,15 @@ +#!/bin/bash +set -ex + +# Create reports folder +mkdir -p .build/reports + +# Test +swift test -Xcc -DUNIT_TESTS | tee .build/reports/test.log +return_code=${PIPESTATUS[0]} + +# Generate junit report +cat .build/reports/test.log | xcpretty --report junit --output .build/reports/junit.xml + +# return code +exit ${return_code} diff --git a/build-windows-5.10/Build-Mailcore2.bat b/build-windows-5.10/Build-Mailcore2.bat new file mode 100644 index 000000000..0f6e6c947 --- /dev/null +++ b/build-windows-5.10/Build-Mailcore2.bat @@ -0,0 +1,3 @@ +@echo off +powershell -ExecutionPolicy Bypass .\Build-Mailcore2.ps1 %* +pause diff --git a/build-windows-5.10/Build-Mailcore2.ps1 b/build-windows-5.10/Build-Mailcore2.ps1 new file mode 100644 index 000000000..5111aefa9 --- /dev/null +++ b/build-windows-5.10/Build-Mailcore2.ps1 @@ -0,0 +1,229 @@ +Param( + [string]$DependenciesPath, + [string]$InstallPath, + [switch]$Install = $false +) + +Import-Module RDBuildCMake +Import-Module RDBuildMSVC +Import-Module RDDependency + +. "$PSScriptRoot\Prebuilt-Common.ps1" + +$ProjectRoot = "$(Resolve-Path ""$PSScriptRoot\..\"")" +if (-Not $DependenciesPath) { + $DependenciesPath = "$ProjectRoot\.build\Dependencies" +} +if (-Not $InstallPath) { + $InstallPath = "$ProjectRoot\.build\install" +} + +$BinDir = "$InstallPath\bin" +$IncludeDir = "$InstallPath\include" +$LibDir = "$InstallPath\lib" + +$IcuVersionMajor = "69" +$IcuVersion = "$IcuVersionMajor.1" +$LibXml2Version = "2.11.5" +$IcuPath = "C:\Library\icu-$IcuVersion\usr" +$LibXml2Path = "C:\Library\libxml2-$LibXml2Version\usr" + +$CTemplateDependencyDir = "CTemplate" +$CTemplateDependencyPath = "$DependenciesPath\$CTemplateDependencyDir" +$LibEtPanDependencyDir = "LibEtPan" +$LibEtPanDependencyPath = "$DependenciesPath\$LibEtPanDependencyDir" +$TidyDependencyDir = "TidyHTML5" +$TidyDependencyPath = "$DependenciesPath\$TidyDependencyDir" +# openssl, sasl and zlib used to come from the spark-prebuilt-binaries S3 bucket, one zip each, +# behind SPARK_PREBUILT_KEY. They are the same binaries, now carried by a single public asset on +# the prebuilt release, so no credential is involved. ICU and libxml2 never came from S3 and are +# unchanged: they arrive with the toolchain, under C:\Library. +$PrebuiltDependenciesRoot = "$DependenciesPath\mailcore2-windows-deps" +$ZlibDependencyPath = "$PrebuiltDependenciesRoot\zlib" +$SaslDependencyPath = "$PrebuiltDependenciesRoot\sasl" +$OpenSslDependencyPath = "$PrebuiltDependenciesRoot\openssl" + +$Dependencies = @( + @{ Name = "CTemplate"; GitUrl = "git@github.com:readdle/ctemplate.git"; GitBranch = "master"; Directory = $CTemplateDependencyDir; } + @{ Name = "LibEtPan"; GitUrl = "git@github.com:readdle/libetpan.git"; GitRevision = "master"; Directory = $LibEtPanDependencyDir; } + @{ Name = "Tidy HTML5"; GitUrl = "git@github.com:readdle/tidy-html5.git"; GitBranch = "spark2"; Directory = $TidyDependencyDir; } +) + +Push-Task -Name "mailcore2" -ScriptBlock { + Push-Task -Name "Initialize" -ScriptBlock { + Write-TaskLog "Working in $ProjectRoot" + Push-Location -Path $ProjectRoot + } + + try { + $SwiftSDKPath = $Env:SDKROOT + if (-not (Test-Path $SwiftSDKPath)) { + throw "SDK path is not set or invalid. Make sure you have SDKROOT environment variable specified correctly." + } + Write-TaskLog "Found Swift SDK: $SwiftSDKPath" + + Initialize-Dependencies -Path $Script:DependenciesPath -Dependencies $Script:Dependencies + Push-Task -Name "Fetch binary dependencies" -ScriptBlock { + $archive = Get-MailcoreDependenciesArchive -WorkPath $DependenciesPath + # A tree left by an older archive must not survive: files it no longer contains + # would otherwise still be picked up. + if (Test-Path -LiteralPath $PrebuiltDependenciesRoot) { + Remove-Item -LiteralPath $PrebuiltDependenciesRoot -Recurse -Force + } + Write-TaskLog "Extracting $archive" + Expand-Archive -Path $archive -DestinationPath $DependenciesPath -Force + } + + Push-Task -Name "Prepare Build Environment" -ScriptBlock { + Test-Directory $IcuPath -SuccessMessage "Found ICU at $IcuPath" -FailMessage "ICU not found at $IcuPath" + Test-Directory $LibXml2Path -SuccessMessage "Found LibXml2 at $LibXml2Path" -FailMessage "ICU not found at $LibXml2Path" + + Write-TaskLog "Configuring VS environment" + Invoke-VsDevCmd -Version "2022" + Initialize-Toolchain + } + + Push-Task -Name "Build Tidy HTML5" -ScriptBlock { + $CMakeArgs = + "-G Ninja", + "-DCMAKE_BUILD_TYPE=RelWithDebInfo", + "-DCMAKE_INSTALL_PREFIX=$TidyDependencyPath", + "-DCMAKE_PDB_OUTPUT_DIRECTORY=$TidyDependencyPath\bin", + "-DCMAKE_C_COMPILER=cl.exe", + "-DCMAKE_CXX_COMPILER=cl.exe" -join " " + + Invoke-CMakeTasks -WorkingDir $TidyDependencyPath -CMakeArgs $CMakeArgs + } + + Push-Task -Name "Setup LibEtPan Dependencies" -ScriptBlock { + Copy-Item "$ProjectRoot\build-windows-5.10\vs\libetpan\libetpan.vcxproj" -Destination "$LibEtPanDependencyPath\build-windows\libetpan" -Force -ErrorAction Stop + + $ExternalsPath = "$LibEtPanDependencyPath\third-party" + if (-Not (Test-Path "$ExternalsPath\include")) { + New-Item -Path "$ExternalsPath\include" -ItemType Directory -ErrorAction Stop + } + + if (-Not (Test-Path "$ExternalsPath\lib64")) { + New-Item -Path "$ExternalsPath\lib64" -ItemType Directory -ErrorAction Stop + } + + Copy-Item -Path "$ZlibDependencyPath\include" -Destination $ExternalsPath -Recurse -Force -ErrorAction Stop + Copy-Item -Path "$ZlibDependencyPath\lib64" -Destination $ExternalsPath -Recurse -Force -ErrorAction Stop + Copy-Item -Path "$SaslDependencyPath\include" -Destination $ExternalsPath -Recurse -Force -ErrorAction Stop + Copy-Item -Path "$SaslDependencyPath\lib64" -Destination $ExternalsPath -Recurse -Force -ErrorAction Stop + Copy-Item -Path "$OpenSslDependencyPath\include" -Destination $ExternalsPath -Recurse -Force -ErrorAction Stop + Copy-Item -Path "$OpenSslDependencyPath\lib64" -Destination $ExternalsPath -Recurse -Force -ErrorAction Stop + } + + Push-Task -Name "Build LibEtPan" -ScriptBlock { + MSBuild "$LibEtPanDependencyPath\build-windows\libetpan.sln" /t:libetpan /p:Configuration="Release" /p:Platform="x64" /p:DebugSymbols=true /p:DebugType=pdbonl + } + + Push-Task -Name "Build CTemplate" -ScriptBlock { + Copy-Item -Path "$ProjectRoot\build-windows-5.10\vs\ctemplate\libctemplate.vcxproj" -Destination "$CTemplateDependencyPath\vsprojects\libctemplate" -Force -ErrorAction Stop | Write-Host + MSBuild "$CTemplateDependencyPath\ctemplate.sln" /t:libctemplate /p:Configuration="Release" /p:Platform="x64" /p:DebugSymbols=true /p:DebugType=pdbonly + } + + Push-Task -Name "Setup CMailcore Dependencies" -ScriptBlock { + $ExternalsPath = "$ProjectRoot\Externals" + if (-Not (Test-Path "$ExternalsPath\include")) { + New-Item -Path "$ExternalsPath\include" -ItemType Directory -ErrorAction Stop + } + + if (-Not (Test-Path "$ExternalsPath\lib64")) { + New-Item -Path "$ExternalsPath\lib64" -ItemType Directory -ErrorAction Stop + } + + Copy-Item -Path "$ZlibDependencyPath\include" -Destination $ExternalsPath -Recurse -Force -ErrorAction Stop -PassThru | Write-Host + Copy-Item -Path "$ZlibDependencyPath\lib64" -Destination $ExternalsPath -Exclude "*.dll" -Recurse -Force -ErrorAction Stop -PassThru | Write-Host + Copy-Item -Path "$SaslDependencyPath\include" -Destination $ExternalsPath -Recurse -Force -ErrorAction Stop -PassThru | Write-Host + Copy-Item -Path "$SaslDependencyPath\lib64" -Destination $ExternalsPath -Exclude "*.dll" -Recurse -Force -ErrorAction Stop -PassThru | Write-Host + Copy-Item -Path "$OpenSslDependencyPath\include" -Destination $ExternalsPath -Recurse -Force -ErrorAction Stop -PassThru | Write-Host + Copy-Item -Path "$OpenSslDependencyPath\lib64" -Destination $ExternalsPath -Recurse -Force -ErrorAction Stop -PassThru | Write-Host + Copy-Item -Path "$CTemplateDependencyPath\src\windows\include\ctemplate" -Destination "$ExternalsPath\include" -Recurse -Force -ErrorAction Stop -PassThru | Write-Host + Copy-Item -Path "$CTemplateDependencyPath\x64\Release\*" -Destination "$ExternalsPath\lib64" -Exclude "*.dll" -Recurse -Force -ErrorAction Stop -PassThru | Write-Host + Copy-Item -Path "$LibEtPanDependencyPath\build-windows\include" -Destination $ExternalsPath -Recurse -Force -ErrorAction Stop -PassThru | Write-Host + Copy-Item -Path "$LibEtPanDependencyPath\build-windows\x64\Release\*" -Destination "$ExternalsPath\lib64" -Exclude "*.dll" -Recurse -Force -ErrorAction Stop -PassThru | Write-Host + Copy-Item -Path "$TidyDependencyPath\include" -Destination "$ExternalsPath\include\tidy" -Recurse -Force -ErrorAction Stop -PassThru | Write-Host + Copy-Item -Path "$TidyDependencyPath\rdtidy.lib" -Destination "$ExternalsPath\lib64" -Force -ErrorAction Stop -PassThru | Write-Host + + Copy-Item -Path "$ProjectRoot\build-windows-5.10\vs\ctemplate\include\template_cache.h" -Destination "$ExternalsPath\include\ctemplate" -Force -ErrorAction Stop | Write-Host + Copy-Item -Path "$ProjectRoot\build-windows-5.10\vs\ctemplate\include\template_string.h" -Destination "$ExternalsPath\include\ctemplate" -Force -ErrorAction Stop | Write-Host + } + + if ($Install) { + Push-Task -Name "Install CMailcore Dependencies" -ScriptBlock { + Install-File "$OpenSslDependencyPath\bin\libssl-1_1-x64.dll" -Destination $BinDir + Install-File "$OpenSslDependencyPath\bin\libssl-1_1-x64.pdb" -Destination $BinDir + Install-File "$OpenSslDependencyPath\bin\libcrypto-1_1-x64.dll" -Destination $BinDir + Install-File "$OpenSslDependencyPath\bin\libcrypto-1_1-x64.pdb" -Destination $BinDir + + Install-File "$CTemplateDependencyPath\x64\Release\libctemplate.dll" -Destination $BinDir + Install-File "$CTemplateDependencyPath\x64\Release\libctemplate.pdb" -Destination $BinDir + + Install-File "$SaslDependencyPath\bin\sasl2.dll" -Destination $BinDir + Install-File "$SaslDependencyPath\bin\sasl2.pdb" -Destination $BinDir + + Install-File "$PSScriptRoot\bin\msvcp120.dll" -Destination $BinDir + Install-File "$PSScriptRoot\bin\msvcr120.dll" -Destination $BinDir + + Install-File "$ZlibDependencyPath\lib64\zlib.dll" -Destination $BinDir + Install-File "$ZlibDependencyPath\lib64\zlib.pdb" -Destination $BinDir + Install-File "$ZlibDependencyPath\include\zlib.h" -Destination $IncludeDir + Install-File "$ZlibDependencyPath\include\zconf.h" -Destination $IncludeDir + Install-File "$ZlibDependencyPath\lib64\zlib.lib" -Destination $LibDir + + Install-File "$TidyDependencyPath\bin\rdtidy.dll" -Destination $BinDir + Install-File "$TidyDependencyPath\bin\rdtidy.pdb" -Destination $BinDir + Install-File "$TidyDependencyPath\include\buffio.h" -Destination "$IncludeDir\tidy" + Install-File "$TidyDependencyPath\include\platform.h" -Destination "$IncludeDir\tidy" + Install-File "$TidyDependencyPath\include\tidy.h" -Destination "$IncludeDir\tidy" + Install-File "$TidyDependencyPath\include\tidybuffio.h" -Destination "$IncludeDir\tidy" + Install-File "$TidyDependencyPath\include\tidyenum.h" -Destination "$IncludeDir\tidy" + Install-File "$TidyDependencyPath\include\tidyplatform.h" -Destination "$IncludeDir\tidy" + Install-File "$TidyDependencyPath\lib\rdtidy.lib" -Destination $LibDir + + Install-Directory "$LibEtPanDependencyPath\build-windows\include\libetpan" -Destination "$IncludeDir\libetpan" + Install-File "$LibEtPanDependencyPath\build-windows\x64\Release\libetpan.dll" -Destination $BinDir + Install-File "$LibEtPanDependencyPath\build-windows\x64\Release\libetpan.pdb" -Destination $BinDir + Install-File "$LibEtPanDependencyPath\build-windows\x64\Release\libetpan.lib" -Destination $LibDir + } + } + + Push-Task -Name "Build mailcore2/CMailCore" -ScriptBlock { + $CMakeArgs = + "-G Ninja", + $ProjectRoot, + "-DCMAKE_BUILD_TYPE=RelWithDebInfo", + "-DCMAKE_INSTALL_PREFIX=$InstallPath", + $(if ($Install) { "-DCMAKE_PDB_OUTPUT_DIRECTORY=$InstallPath\bin"} else { "" }), + "-DCMAKE_C_COMPILER=clang-cl.exe", + "-DCMAKE_CXX_COMPILER=clang-cl.exe", + "-DLIBXML_INCLUDE_DIR=$LibXml2Path\include", + "-DLIBXML_LIBRARY=$LibXml2Path\lib\x64\\libxml2s.lib", + "-DICU4C_INCLUDE_DIR=$IcuPath\include", + "-DICU4C_UC_LIBRARY=$IcuPath\lib\x64\icuuc$IcuVersionMajor.lib", + "-DICU4C_IN_LIBRARY=$IcuPath\lib\x64\icuin$IcuVersionMajor.lib", + "-DDISPATCH_INCLUDE_DIR=$SwiftSDKPath\usr\include", + "-DDISPATCH_LIBRARY=$SwiftSDKPath\usr\lib\swift\windows\x86_64\dispatch.lib", + "-DDISPATCH_BLOCKS_LIBRARY=$SwiftSDKPath\usr\lib\swift\windows\x86_64\BlocksRuntime.lib" -join " " + + Invoke-CMakeTasks -WorkingDir "$ProjectRoot\.build\mailcore2" -CMakeArgs $CMakeArgs -NoInstall:$(-not $Install) + } + + if ($Install) { + Push-Task -Name "Collect Git Revision Data" -ScriptBlock { + New-Item -Path "$InstallPath\etc" -ItemType Directory -ErrorAction Ignore + git -C "$CTemplateDependencyPath" rev-parse HEAD > "$InstallPath\etc\ctemplate-git-rev" + git -C "$LibEtPanDependencyPath" rev-parse HEAD > "$InstallPath\etc\libetpan-git-rev" + git -C "$TidyDependencyPath" rev-parse HEAD > "$InstallPath\etc\tidy-html5-git-rev" + git rev-parse HEAD > "$InstallPath\etc\mailcore2-git-rev" + } + } + } + finally { + Push-Task -Name "Shutdown" -ScriptBlock { + Pop-Location + } + } +} diff --git a/build-windows-5.10/Build-SwiftMailcore.bat b/build-windows-5.10/Build-SwiftMailcore.bat new file mode 100644 index 000000000..53b178041 --- /dev/null +++ b/build-windows-5.10/Build-SwiftMailcore.bat @@ -0,0 +1,3 @@ +@echo off +powershell -ExecutionPolicy Bypass .\Build-SwiftMailcore.ps1 %* +pause diff --git a/build-windows-5.10/Build-SwiftMailcore.ps1 b/build-windows-5.10/Build-SwiftMailcore.ps1 new file mode 100644 index 000000000..121774133 --- /dev/null +++ b/build-windows-5.10/Build-SwiftMailcore.ps1 @@ -0,0 +1,90 @@ +Param( + [string]$DependenciesPath, + [string]$InstallPath, + [switch]$Install = $false, + [switch]$BuildMailcore2 = $false +) + +$ProjectRoot = "$(Resolve-Path ""$PSScriptRoot\..\"")" + +$SourceFiles = Get-ChildItem -Path "$ProjectRoot\src\swift\*.swift" -Recurse -File +$ResourcesPath = "$ProjectRoot\resources" + +$ModuleName = "MailCore" +$IntermediatesPath = "$ProjectRoot\.build\$ModuleName\Intermediates" +$ProductsPath = "$ProjectRoot\.build\$ModuleName" +if (-Not $InstallPath) { + $InstallPath = "$ProjectRoot\.build\install" +} + +$BinDir = "$InstallPath\bin" +$IncludeDir = "$InstallPath\include" +$LibDir = "$InstallPath\lib" +$BundleResourcesDir = "$BinDir\$ModuleName.resources" + +$IcuVersionMajor = "69" +$IcuVersion = "$IcuVersionMajor.1" +$LibXml2Version = "2.11.5" +$IcuPath = "C:\Library\icu-$IcuVersion\usr" +$LibXml2Path = "C:\Library\libxml2-$LibXml2Version\usr" + +$SwiftIncludePaths = + "$InstallPath\include" + +$HeaderSearchPaths = + "$ProjectRoot\Externals\include", + "$IcuPath\include" + +$LibrarySearchPaths = + "$ProjectRoot\Externals\lib64", + "$InstallPath\lib" + +$Configuration = @{ + ModuleName = $ModuleName + + WorkPath = $ProjectRoot + + IntermediatesPath = $IntermediatesPath + ProductsPath = $ProductsPath + + SwiftVersion = 5 + EnableTesting = $false + BuildType = "Release" + + SwiftIncludePaths = $SwiftIncludePaths + HeaderSearchPaths = $HeaderSearchPaths + LibrarySearchPaths = $LibrarySearchPaths + + SourceFiles = $SourceFiles + + Libraries = "libetpan" +} + +Push-Task -Name $ModuleName -ScriptBlock { + Push-Task -Name "Initialize" -ScriptBlock { + Invoke-VsDevCmd -Version "2022" + + Initialize-SDK + Initialize-Toolchain + } + + if ($BuildMailcore2) { + & $PSScriptRoot\Build-Mailcore2.ps1 -InstallPath $InstallPath -DependenciesPath $DependenciesPath -Install + } + else { + & $PSScriptRoot\Get-Mailcore2.ps1 -InstallPath $InstallPath + } + + Invoke-BuildModuleTarget -Configuration $Script:Configuration + + if ($Install) { + Push-Task -Name "Install" -ScriptBlock { + Copy-Item -Path "$ProductsPath\$ModuleName.lib" -Destination $LibDir -Force -ErrorAction Stop + Copy-Item -Path "$ProductsPath\$ModuleName.swiftdoc" -Destination $IncludeDir -Force -ErrorAction Stop + Copy-Item -Path "$ProductsPath\$ModuleName.swiftmodule" -Destination $IncludeDir -Force -ErrorAction Stop + Copy-Item -Path "$ProductsPath\$ModuleName.dll" -Destination $BinDir -Force -ErrorAction Stop + Install-File "$ResourcesPath\providers.json" -Destination $BundleResourcesDir + } + } + +} diff --git a/build-windows-5.10/Check-PrebuiltPublished.ps1 b/build-windows-5.10/Check-PrebuiltPublished.ps1 new file mode 100644 index 000000000..74dea635c --- /dev/null +++ b/build-windows-5.10/Check-PrebuiltPublished.ps1 @@ -0,0 +1,74 @@ +# Answers one question: do the C/C++ sources in this checkout have a published Windows prebuilt? +# +# This is what the Windows pull-request check runs. It builds nothing and needs no Windows - the +# digest is a hash of git tree entries, identical on every platform - so a Linux runner answers +# in seconds. + +Param( + # Defaults to whatever is checked out, which on a pull request is the merge result: that is + # what lands on the base branch and gets tagged. + [string]$Ref = "HEAD" +) + +$ErrorActionPreference = "Stop" + +. "$PSScriptRoot\Prebuilt-Common.ps1" + +$ProjectRoot = "$(Resolve-Path ""$PSScriptRoot\..\"")" +$Readme = "https://github.com/$Script:MailcorePrebuiltRepo/blob/spark2/README.md#windows-prebuilt" + +function Get-ArchiveFor { + param([string]$AtRef) + return Get-MailcorePrebuiltArchiveName -Digest (Get-MailcoreSourceDigest -RepoRoot $ProjectRoot -Ref $AtRef) +} + +if (-not (Test-MailcorePrebuiltRelease)) { + Write-Host "" + Write-Host $Script:MailcoreReleaseSetupHelp -ForegroundColor Red + Write-Host "" + Write-Host "::error title=Windows prebuilt release missing::The $Script:MailcorePrebuiltReleaseTag release does not exist. It is created once, by hand." + exit 1 +} + +$Archive = Get-ArchiveFor -AtRef $Ref +$Published = Get-MailcoreReleaseAssetNames + +Write-Host "" +Write-Host " commit : $((& git -C $ProjectRoot rev-parse $Ref).Trim())" -ForegroundColor Cyan +Write-Host " archive : $Archive" -ForegroundColor Cyan +Write-Host "" + +if ($Published -contains $Archive) { + Write-Host "Published. These sources have a Windows prebuilt." -ForegroundColor Green + Write-Host "" + exit 0 +} + +Write-Host "There is no Windows prebuilt for these sources: $Archive" -ForegroundColor Red +Write-Host "Have you built and uploaded it yet?" -ForegroundColor Red +Write-Host "" + +# On a merge commit the second parent is the pull request head - what a developer would have +# published from. When the two differ the base has moved, and saying so beats an unexplained red. +$parentLine = (& git -C $ProjectRoot rev-list --parents -n 1 $Ref 2>$null) +$parents = @("$parentLine".Trim() -split "\s+" | Where-Object { $_ }) +$headArchive = if ($parents.Count -ge 3) { Get-ArchiveFor -AtRef $parents[2] } else { $Archive } + +if ($headArchive -ne $Archive -and ($Published -contains $headArchive)) { + Write-Host "Your branch head has one ($headArchive), so the base branch moved after you" -ForegroundColor Yellow + Write-Host "published. Rebase onto the base branch and publish again from the rebased head." -ForegroundColor Yellow +} +else { + Write-Host "If not: on the Windows build machine, in a checkout of this branch," -ForegroundColor Yellow + Write-Host "" + Write-Host " .\build-windows-5.10\Publish-Mailcore2Prebuilt.ps1" + Write-Host "" + Write-Host "and re-run this check. Publishing commits nothing - the archive is named after the" -ForegroundColor Yellow + Write-Host "sources, so this revision will find it." -ForegroundColor Yellow +} + +Write-Host "" +Write-Host "How this works: $Readme" -ForegroundColor DarkGray +Write-Host "" +Write-Host "::error title=Windows prebuilt missing::No $Archive published - have you built and uploaded it yet? See $Readme" +exit 1 diff --git a/build-windows-5.10/Get-Mailcore2.ps1 b/build-windows-5.10/Get-Mailcore2.ps1 new file mode 100644 index 000000000..44bc23113 --- /dev/null +++ b/build-windows-5.10/Get-Mailcore2.ps1 @@ -0,0 +1,81 @@ +Param( + [string]$InstallPath +) + +. "$PSScriptRoot\Prebuilt-Common.ps1" + +$ProjectRoot = "$(Resolve-Path ""$PSScriptRoot\..\"")" + +if (-Not $InstallPath) { + $InstallPath = "$ProjectRoot\.build\install" +} + +# The archive is named after the content of the C/C++ sources, so this checkout already knows +# which one it needs - there is no version to keep in step. It is a public release asset, so +# downloading it takes no credential. +$PrebuiltMailcoreDigest = Get-MailcoreSourceDigest -RepoRoot $ProjectRoot +$PrebuiltMailcoreArchive = Get-MailcorePrebuiltArchiveName -Digest $PrebuiltMailcoreDigest +$PrebuiltMailcoreUrl = Get-MailcorePrebuiltUrl -ArchiveName $PrebuiltMailcoreArchive + +Push-Task -Name "mailcore2" -ScriptBlock { + Push-Task -Name "Initialize" -ScriptBlock { + Write-TaskLog "Working in $ProjectRoot" + Push-Location -Path $ProjectRoot + } + + try { + $TempDir = [System.IO.Path]::GetTempFileName() + Remove-Item $TempDir + + $TempFile = "$TempDir.zip" + + Write-TaskLog "Downloading $PrebuiltMailcoreUrl to $TempFile" + + try { + Invoke-RestMethod -Uri $PrebuiltMailcoreUrl -OutFile $TempFile + } + catch { + # Only a 404 means "nobody published this yet". Anything else - a proxy, a dropped + # connection, a 5xx - must not be reported as a missing archive. + $Status = Get-MailcoreHttpStatus -ErrorRecord $_ + if ($Status -ne 404) { + throw "Could not download $PrebuiltMailcoreUrl$(if ($Status) { " (HTTP $Status)" }). $($_.Exception.Message)" + } + throw @" +Prebuilt MailCore not found: $PrebuiltMailcoreArchive +Have you built and uploaded it yet? + +These C/C++ sources (digest $PrebuiltMailcoreDigest) have no published Windows prebuilt. +On a Windows build machine, in a checkout at this exact revision, run: + + .\build-windows-5.10\Publish-Mailcore2Prebuilt.ps1 + +Nothing needs to be committed afterwards - the archive is named after the sources, so this +revision will find it. To build the C++ from source instead, pass -BuildMailcore2 to +Build-SwiftMailcore.ps1. +"@ + } + Remove-Item $TempDir -Force -Recurse -ErrorAction Ignore + New-Item -ItemType Directory $TempDir + Write-TaskLog "Extracting $TempFile to $TempDir" + tar -C "$TempDir" -xf "$TempFile" + + $ArchiveDigest = Get-MailcoreArchiveDigest -UnpackedPath "$TempDir\mailcore2-all" + if ($ArchiveDigest -ne $PrebuiltMailcoreDigest) { + throw "Prebuilt $PrebuiltMailcoreArchive was built from sources with digest '$ArchiveDigest', expected '$PrebuiltMailcoreDigest'. The published asset does not match its name." + } + + New-Item -Path $InstallPath -ItemType Directory -ErrorAction Ignore + Get-ChildItem -Path "$TempDir\mailcore2-all" | Copy-Item -Destination $InstallPath -Recurse -Container -PassThru -Force | Write-Host + + Write-TaskLog "Deleting $TempFile" + Remove-Item $TempFile -Force + Write-TaskLog "Deleting $TempDir" + Remove-Item $TempDir -Force -Recurse + } + finally { + Push-Task -Name "Shutdown" -ScriptBlock { + Pop-Location + } + } +} diff --git a/build-windows-5.10/Prebuilt-Common.ps1 b/build-windows-5.10/Prebuilt-Common.ps1 new file mode 100644 index 000000000..e5e5a15c7 --- /dev/null +++ b/build-windows-5.10/Prebuilt-Common.ps1 @@ -0,0 +1,173 @@ +# Shared by the scripts that deal with the prebuilt archives: where they live, and how the C/C++ +# sources they were built from are identified. +# +# The archive name is derived from the content of the sources, not from a version number, so +# there is nothing to bump and nothing to forget: sources that were never built simply have no +# archive, and the build says so. +# +# Nothing here touches the build itself. Build-Mailcore2.ps1 works exactly as it always has; the +# only reason it dot-sources this file is to fetch its binary dependencies from the release +# instead of from S3. + +$Script:MailcorePrebuiltRepo = "readdle/mailcore2" +$Script:MailcorePrebuiltReleaseTag = "windows-prebuilt" +$Script:MailcorePrebuiltUrlBase = "https://github.com/$Script:MailcorePrebuiltRepo/releases/download/$Script:MailcorePrebuiltReleaseTag" + +# The binaries this build links against. It sits in a digested file, so replacing the archive +# changes the digest and every consumer asks for a rebuilt prebuilt - which is right, because +# these three libraries end up inside it. +$Script:MailcoreDependenciesArchive = "mailcore2-windows-deps-1.zip" + +# Everything that determines the content of the prebuilt binaries: the C/C++ sources (Swift is +# compiled from source at build time, so src/swift is excluded), the top-level CMakeLists, and +# this directory - the scripts decide what gets compiled, which project files and redistributables +# get copied in, and what ends up in the package. +# +# Including the scripts costs an occasional rebuild for a change that could not have altered a +# byte - a reworded message, a fix to the pull-request check. That is the safe direction to err +# in: the alternative is an archive whose contents changed under a name that did not. +function Get-MailcoreDigestPathSpec { + return @("src", "CMakeLists.txt", "build-windows-5.10") +} + +# A digest of git's own tree entries, not of file bytes: git already stores a hash per blob, so +# this is instant and, more importantly, identical on every platform - core.autocrlf cannot +# change it, unlike hashing working-tree content. +function Get-MailcoreSourceDigest { + param( + [Parameter(Mandatory = $true)][string]$RepoRoot, + # Anything git resolves to a tree. Only HEAD can be checked for local edits, so only + # HEAD is; other refs are read straight out of the object store. + [string]$Ref = "HEAD" + ) + + $paths = Get-MailcoreDigestPathSpec + + # src/swift is outside the digest, so a dirty file there must not block it either. + $status = @(& git -C $RepoRoot status --porcelain -- @paths | Where-Object { $_ -notmatch " src/swift/" }) + if ($LASTEXITCODE -ne 0) { throw "Not a git checkout: $RepoRoot" } + if ($Ref -eq "HEAD" -and $status) { + throw "Uncommitted changes under $($paths -join ', '): the digest describes HEAD, so it would not match what is built. Commit them, or build from source with -BuildMailcore2.`n$($status -join "`n")" + } + + $lines = & git -C $RepoRoot ls-tree -r $Ref -- @paths + if ($LASTEXITCODE -ne 0) { throw "git ls-tree failed for $Ref in $RepoRoot" } + $lines = $lines | Where-Object { $_ -notmatch "`tsrc/swift/" } + if (-not $lines) { throw "No source entries found at $Ref in $RepoRoot - wrong directory?" } + + # Canonical listing: git's own order, LF endings, UTF-8 without BOM. Written to a file + # rather than piped, because PowerShell re-encodes text between processes. + $text = ($lines -join "`n") + "`n" + $tempFile = [IO.Path]::GetTempFileName() + try { + [IO.File]::WriteAllText($tempFile, $text, (New-Object Text.UTF8Encoding $false)) + $digest = & git -C $RepoRoot hash-object --no-filters $tempFile + if ($LASTEXITCODE -ne 0) { throw "git hash-object failed" } + } + finally { + Remove-Item -LiteralPath $tempFile -Force -ErrorAction Ignore + } + + return $digest.Trim() +} + +function Get-MailcorePrebuiltArchiveName { + param([Parameter(Mandatory = $true)][string]$Digest) + return "mailcore2-windows-$($Digest.Substring(0, 12)).zip" +} + +# The HTTP status behind a failed Invoke-RestMethod / Invoke-WebRequest, or $null when the +# request never got a response at all - DNS, proxy, a dropped connection. Windows PowerShell +# raises WebException and PowerShell 7 raises HttpResponseException; both expose .Response with +# a .StatusCode, so this works on either. +function Get-MailcoreHttpStatus { + param([Parameter(Mandatory = $true)]$ErrorRecord) + $response = $ErrorRecord.Exception.Response + if (-not $response) { return $null } + try { return [int]$response.StatusCode } catch { return $null } +} + +function Get-MailcorePrebuiltUrl { + param([Parameter(Mandatory = $true)][string]$ArchiveName) + return "$Script:MailcorePrebuiltUrlBase/$ArchiveName" +} + +# The digest of the sources an unpacked archive was built from. +function Get-MailcoreArchiveDigest { + param([Parameter(Mandatory = $true)][string]$UnpackedPath) + $stamp = Join-Path $UnpackedPath "etc\mailcore2-source-digest" + if (-not (Test-Path -LiteralPath $stamp)) { return $null } + return (Get-Content -LiteralPath $stamp -Raw).Trim() +} + +# --- The release -------------------------------------------------------------------------------- + +# The release is a permanent container for binaries, set up once by hand. Nothing here creates it; +# the scripts only add archives to it. +$Script:MailcoreReleaseSetupHelp = @" +The $Script:MailcorePrebuiltReleaseTag release does not exist, or is not visible to this token. +It is created once, by hand: + + 1. https://github.com/$Script:MailcorePrebuiltRepo/releases/new?tag=$Script:MailcorePrebuiltReleaseTag + Tag $Script:MailcorePrebuiltReleaseTag, marked as a pre-release. + 2. Attach the dependency archive to it, under the name Prebuilt-Common.ps1 gives it. +"@ + +function Test-MailcorePrebuiltRelease { + & gh release view $Script:MailcorePrebuiltReleaseTag --repo $Script:MailcorePrebuiltRepo --json tagName 2>$null | Out-Null + return ($LASTEXITCODE -eq 0) +} + +function Assert-MailcorePrebuiltRelease { + if (-not (Test-MailcorePrebuiltRelease)) { throw $Script:MailcoreReleaseSetupHelp } +} + +# Names of every asset on the release, or an empty array when there is no release. Needs gh on +# PATH and authenticated (GH_TOKEN is enough in CI). +function Get-MailcoreReleaseAssetNames { + $assets = & gh release view $Script:MailcorePrebuiltReleaseTag --repo $Script:MailcorePrebuiltRepo --json assets --jq ".assets[].name" 2>$null + if ($LASTEXITCODE -ne 0) { return @() } + return @($assets) +} + +function Test-MailcoreReleaseAsset { + param([Parameter(Mandatory = $true)][string]$AssetName) + return ((Get-MailcoreReleaseAssetNames) -contains $AssetName) +} + +# --- The dependency archive --------------------------------------------------------------------- + +# openssl, sasl and zlib: the three binaries that used to be fetched from S3, one zip each, with +# SPARK_PREBUILT_KEY. They now travel as one public asset on the release, unchanged, under a +# single top-level mailcore2-windows-deps directory. Nothing else moved: ICU and libxml2 come +# with the toolchain and were never in that bucket. +# +# Returns a local path, downloading the archive when there is not one already. +function Get-MailcoreDependenciesArchive { + param([Parameter(Mandatory = $true)][string]$WorkPath) + + $name = $Script:MailcoreDependenciesArchive + $path = Join-Path $WorkPath $name + if (Test-Path -LiteralPath $path) { return $path } + + New-Item -ItemType Directory -Path $WorkPath -Force | Out-Null + $url = Get-MailcorePrebuiltUrl -ArchiveName $name + Write-Host "Downloading $name" + try { + Invoke-WebRequest -Uri $url -OutFile $path -UseBasicParsing + } + catch { + Remove-Item -LiteralPath $path -Force -ErrorAction Ignore + $status = Get-MailcoreHttpStatus -ErrorRecord $_ + if ($status -ne 404) { + throw "Could not download the dependency archive $name from $url$(if ($status) { " (HTTP $status)" }). $($_.Exception.Message)" + } + throw @" +The dependency archive $name is not on the $Script:MailcorePrebuiltReleaseTag release. + +It carries openssl, sasl and zlib, and is attached by hand, once. Attach it, or drop a copy at +$path and it will be used as is. +"@ + } + return $path +} diff --git a/build-windows-5.10/Publish-Mailcore2Prebuilt.ps1 b/build-windows-5.10/Publish-Mailcore2Prebuilt.ps1 new file mode 100644 index 000000000..4d4f44129 --- /dev/null +++ b/build-windows-5.10/Publish-Mailcore2Prebuilt.ps1 @@ -0,0 +1,173 @@ +Param( + [string]$WorkPath, + # Rebuild and overwrite an archive that is already published. Same digest means the same + # sources, so this replaces like with like. + [switch]$Force, + [switch]$SkipUpload +) + +$ErrorActionPreference = "Stop" + +. "$PSScriptRoot\Prebuilt-Common.ps1" + +$ProjectRoot = "$(Resolve-Path ""$PSScriptRoot\..\"")" +if (-Not $WorkPath) { + $WorkPath = "$ProjectRoot\.build\prebuilt" +} + +function Assert-GitHubCli { + if (-not (Get-Command gh -ErrorAction SilentlyContinue)) { + throw "GitHub CLI is required to publish. Install it once with: winget install --id GitHub.cli" + } + & gh auth status 2>&1 | Out-Null + if ($LASTEXITCODE -ne 0) { + throw "GitHub CLI is not authenticated. Run: gh auth login" + } +} + +# Adds one asset to the release, which is set up once by hand and never created here. +function Publish-ReleaseAsset { + param([Parameter(Mandatory = $true)][string]$Path, [switch]$Clobber) + Assert-MailcorePrebuiltRelease + $uploadArgs = @($Script:MailcorePrebuiltReleaseTag, $Path, "--repo", $Script:MailcorePrebuiltRepo) + if ($Clobber) { $uploadArgs += "--clobber" } + & gh release upload @uploadArgs + if ($LASTEXITCODE -ne 0) { throw "Failed to upload $Path" } +} + +# --- Preflight ------------------------------------------------------------------------------ + +if (-not $SkipUpload) { + Assert-GitHubCli + Assert-MailcorePrebuiltRelease +} + + +# Throws when the digested paths are dirty: the archive must correspond to a committed state. +$Digest = Get-MailcoreSourceDigest -RepoRoot $ProjectRoot +$ArchiveName = Get-MailcorePrebuiltArchiveName -Digest $Digest +$GitRev = (& git -C $ProjectRoot rev-parse HEAD).Trim() + +Write-Host "" +Write-Host " source digest : $Digest" -ForegroundColor Cyan +Write-Host " archive : $ArchiveName" -ForegroundColor Cyan +Write-Host " git revision : $GitRev" -ForegroundColor Cyan +Write-Host "" + +$AlreadyPublished = (-not $SkipUpload) -and (Test-MailcoreReleaseAsset -AssetName $ArchiveName) +if ($AlreadyPublished -and -not $Force) { + Write-Host "These sources already have a published prebuilt ($ArchiveName) - nothing to do." -ForegroundColor Green + Write-Host "Pass -Force to rebuild and overwrite it." -ForegroundColor DarkGray + return +} + +# --- Dependency archive --------------------------------------------------------------------- + +$DependenciesPath = "$WorkPath\build-dependencies" +$InstallPath = "$WorkPath\mailcore2-install" +$StagePath = "$WorkPath\mailcore2-all" +$ArchivePath = "$WorkPath\$ArchiveName" + +New-Item -ItemType Directory -Path $WorkPath -Force | Out-Null + +# --- Build ------------------------------------------------------------------------------------ + +# A publish must package only what this build produced. The CMake binary directory matters as +# much as the install tree: src/CMakeLists.txt stages the public headers into it with file(COPY), +# which adds but never prunes, so a header from an earlier build on this machine would be +# packaged even though this revision does not declare it public. +Push-Task -Name "Clean previous build output" -ScriptBlock { + foreach ($stale in $InstallPath, $StagePath, "$ProjectRoot\.build\mailcore2") { + if (Test-Path -LiteralPath $stale) { + Write-TaskLog "Removing $stale" + Remove-Item -LiteralPath $stale -Recurse -Force + } + } +} + +Push-Task -Name "Build mailcore2" -ScriptBlock { + & "$PSScriptRoot\Build-Mailcore2.ps1" ` + -DependenciesPath $DependenciesPath ` + -InstallPath $InstallPath ` + -Install +} + +Push-Task -Name "Stamp source digest" -ScriptBlock { + New-Item -ItemType Directory -Path "$InstallPath\etc" -Force | Out-Null + [IO.File]::WriteAllText("$InstallPath\etc\mailcore2-source-digest", "$Digest`n", (New-Object Text.UTF8Encoding $false)) + + $builtRev = (Get-Content -LiteralPath "$InstallPath\etc\mailcore2-git-rev" -Raw).Trim() + if ($builtRev -ne $GitRev) { + throw "The install tree reports revision $builtRev but the checkout is at $GitRev" + } + } + +Push-Task -Name "Package $ArchiveName" -ScriptBlock { + # The artifact must run without a separately installed VC redistributable. + $vcRedistRoot = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\2022\BuildTools\VC\Redist\MSVC" + $vcCrt = Get-ChildItem $vcRedistRoot -Filter msvcp140.dll -File -Recurse | + Where-Object FullName -Match '\\x64\\Microsoft\.VC143\.CRT\\' | + Sort-Object FullName -Descending | + Select-Object -First 1 -ExpandProperty DirectoryName + if (-not $vcCrt) { throw "VC143 x64 redistributable DLLs not found under $vcRedistRoot" } + Copy-Item "$vcCrt\*.dll" (Join-Path $InstallPath "bin") -Force + + # A clean staging directory: copying onto an existing one would nest it on the second run. + if (Test-Path $StagePath) { Remove-Item $StagePath -Recurse -Force } + if (Test-Path $ArchivePath) { Remove-Item $ArchivePath -Force } + Copy-Item $InstallPath $StagePath -Recurse + tar.exe -a -cf $ArchivePath -C $WorkPath mailcore2-all + if ($LASTEXITCODE -ne 0) { throw "Packaging failed" } +} + +Push-Task -Name "Verify $ArchiveName" -ScriptBlock { + $checkDir = "$WorkPath\verify" + if (Test-Path $checkDir) { Remove-Item $checkDir -Recurse -Force } + New-Item -ItemType Directory -Path $checkDir -Force | Out-Null + tar.exe -C $checkDir -xf $ArchivePath + if (-not (Test-Path -LiteralPath "$checkDir\mailcore2-all")) { + throw "The archive must contain exactly one root directory named mailcore2-all" + } + + $unpackedDigest = Get-MailcoreArchiveDigest -UnpackedPath "$checkDir\mailcore2-all" + if ($unpackedDigest -ne $Digest) { + throw "The packaged archive carries digest '$unpackedDigest', expected '$Digest'" + } + + # Direct non-system dependencies: a missing one only shows up at load time otherwise. + $required = @( + "mailcore2.dll", "CMailCore.dll", + "libetpan.dll", "libctemplate.dll", "rdtidy.dll", + "libcrypto-1_1-x64.dll", "libssl-1_1-x64.dll", "zlib.dll", "sasl2.dll", + "msvcp120.dll", "msvcr120.dll" + ) + $missing = $required | Where-Object { -not (Test-Path -LiteralPath "$checkDir\mailcore2-all\bin\$_") } + if ($missing) { throw "The archive is missing: $($missing -join ', ')" } + + # A header public-headers.cmake has always declared, so this stays true of older revisions. + $requiredHeaders = @("include\MailCore\MailCore.h") + $missingHeaders = $requiredHeaders | Where-Object { -not (Test-Path -LiteralPath "$checkDir\mailcore2-all\$_") } + if ($missingHeaders) { throw "The archive is missing headers: $($missingHeaders -join ', ')" } + + Remove-Item $checkDir -Recurse -Force + Write-TaskLog "Archive verified" +} + +if ($SkipUpload) { + Write-Host "" + Write-Host "Built and verified (upload skipped): $ArchivePath" -ForegroundColor Green + return +} + +Push-Task -Name "Upload $ArchiveName" -ScriptBlock { + Publish-ReleaseAsset -Path $ArchivePath -Clobber:$AlreadyPublished +} + +Write-Host "" +Write-Host "Published $ArchiveName" -ForegroundColor Green +Write-Host " sources : $Digest" -ForegroundColor Green +Write-Host " revision: $GitRev" -ForegroundColor Green +Write-Host " sha256 : $((Get-FileHash $ArchivePath -Algorithm SHA256).Hash)" -ForegroundColor Green +Write-Host "" +Write-Host "Nothing needs to be committed to mailcore2: the archive is named after these sources," -ForegroundColor Green +Write-Host "so any checkout of them finds it. Carry on with the commit, PR and tag as usual." -ForegroundColor Green diff --git a/build-windows-5.10/bin/msvcp120.dll b/build-windows-5.10/bin/msvcp120.dll new file mode 100644 index 000000000..4ea1efa73 Binary files /dev/null and b/build-windows-5.10/bin/msvcp120.dll differ diff --git a/build-windows-5.10/bin/msvcr120.dll b/build-windows-5.10/bin/msvcr120.dll new file mode 100644 index 000000000..d711c9223 Binary files /dev/null and b/build-windows-5.10/bin/msvcr120.dll differ diff --git a/build-windows-5.10/build_headers.bat b/build-windows-5.10/build_headers.bat new file mode 100644 index 000000000..df456d8d8 --- /dev/null +++ b/build-windows-5.10/build_headers.bat @@ -0,0 +1,4 @@ +@mkdir include +@mkdir include\MailCore +@for /F "delims=" %%a in (build_headers.list) do @copy "..\%%a" include\MailCore +@echo "done" >_headers_depends diff --git a/build-windows-5.10/build_headers.list b/build-windows-5.10/build_headers.list new file mode 100644 index 000000000..afdb61c6c --- /dev/null +++ b/build-windows-5.10/build_headers.list @@ -0,0 +1,126 @@ +src\MailCore.h +src\core\MCCore.h +src\core\abstract\MCAbstract.h +src\core\abstract\MCAbstractMessage.h +src\core\basetypes\MCBaseTypes.h +src\core\basetypes\MCBasicLock.h +src\core\basetypes\MCAutoreleasePool.h +src\core\basetypes\MCObject.h +src\core\basetypes\MCUtils.h +src\core\basetypes\MCValue.h +src\core\basetypes\MCString.h +src\core\basetypes\MCRange.h +src\core\basetypes\MCICUTypes.h +src\core\basetypes\MCData.h +src\core\basetypes\MCDataDecoderUtils.h +src\core\basetypes\MCDataStreamDecoder.h +src\core\abstract\MCMessageConstants.h +src\core\basetypes\MCArray.h +src\core\basetypes\MCHashMap.h +src\core\basetypes\MCJSON.h +src\core\basetypes\MCMD5.h +src\core\basetypes\MCNull.h +src\core\basetypes\MCSet.h +src\core\basetypes\MCHash.h +src\core\basetypes\MCLog.h +src\core\basetypes\MCAssert.h +src\core\basetypes\MCIndexSet.h +src\core\basetypes\MCOperation.h +src\core\basetypes\MCOperationQueue.h +src\core\basetypes\MCLibetpanTypes.h +src\core\basetypes\MCOperationCallback.h +src\core\basetypes\MCIterator.h +src\core\basetypes\MCConnectionLogger.h +src\core\basetypes\MCHTMLCleaner.h +src\core\abstract\MCAbstractMessagePart.h +src\core\abstract\MCAbstractPart.h +src\core\abstract\MCAbstractMultipart.h +src\core\abstract\MCAddress.h +src\core\abstract\MCMessageHeader.h +src\core\imap\MCIMAP.h +src\core\imap\MCIMAPFolder.h +src\core\imap\MCIMAPMessage.h +src\core\imap\MCIMAPMessagePart.h +src\core\imap\MCIMAPMultipart.h +src\core\imap\MCIMAPNamespace.h +src\core\imap\MCIMAPNamespaceItem.h +src\core\imap\MCIMAPPart.h +src\core\imap\MCIMAPProgressCallback.h +src\core\imap\MCIMAPSearchExpression.h +src\core\imap\MCIMAPSession.h +src\core\imap\MCIMAPSyncResult.h +src\core\imap\MCIMAPFolderStatus.h +src\core\imap\MCIMAPIdentity.h +src\core\pop\MCPOP.h +src\core\pop\MCPOPMessageInfo.h +src\core\pop\MCPOPProgressCallback.h +src\core\pop\MCPOPSession.h +src\core\nntp\MCNNTP.h +src\core\nntp\MCNNTPGroupInfo.h +src\core\nntp\MCNNTPProgressCallback.h +src\core\nntp\MCNNTPSession.h +src\core\rfc822\MCRFC822.h +src\core\rfc822\MCAttachment.h +src\core\rfc822\MCMessageBuilder.h +src\core\rfc822\MCMessageParser.h +src\core\rfc822\MCMessagePart.h +src\core\rfc822\MCMultipart.h +src\core\smtp\MCSMTP.h +src\core\smtp\MCSMTPProgressCallback.h +src\core\smtp\MCSMTPSession.h +src\core\renderer\MCRenderer.h +src\core\renderer\MCHTMLRendererCallback.h +src\core\renderer\MCDateFormatter.h +src\core\renderer\MCAddressDisplay.h +src\core\provider\MCProvider.h +src\core\provider\MCMailProvidersManager.h +src\core\provider\MCMailProvider.h +src\core\provider\MCNetService.h +src\core\provider\MCAccountValidator.h +src\async\MCAsync.h +src\async\smtp\MCAsyncSMTP.h +src\async\smtp\MCSMTPAsyncSession.h +src\async\smtp\MCSMTPOperation.h +src\async\smtp\MCSMTPOperationCallback.h +src\async\imap\MCAsyncIMAP.h +src\async\imap\MCIMAPAsyncSession.h +src\async\imap\MCIMAPOperation.h +src\async\imap\MCIMAPFetchFoldersOperation.h +src\async\imap\MCIMAPAppendMessageOperation.h +src\async\imap\MCIMAPCopyMessagesOperation.h +src\async\imap\MCIMAPMoveMessagesOperation.h +src\async\imap\MCIMAPFetchMessagesOperation.h +src\async\imap\MCIMAPFetchContentOperation.h +src\async\imap\MCIMAPFetchContentToFileOperation.h +src\async\imap\MCIMAPFetchParsedContentOperation.h +src\async\imap\MCIMAPIdleOperation.h +src\async\imap\MCIMAPFolderInfo.h +src\async\imap\MCIMAPFolderInfoOperation.h +src\async\imap\MCIMAPFolderStatusOperation.h +src\async\imap\MCIMAPSearchOperation.h +src\async\imap\MCIMAPFetchNamespaceOperation.h +src\async\imap\MCIMAPIdentityOperation.h +src\async\imap\MCIMAPCapabilityOperation.h +src\async\imap\MCIMAPQuotaOperation.h +src\async\imap\MCIMAPOperationCallback.h +src\async\imap\MCIMAPMessageRenderingOperation.h +src\async\imap\MCIMAPCustomCommandOperation.h +src\async\imap\MCIMAPCheckAccountOperation.h +src\async\pop\MCAsyncPOP.h +src\async\pop\MCPOPAsyncSession.h +src\async\pop\MCPOPOperation.h +src\async\pop\MCPOPFetchHeaderOperation.h +src\async\pop\MCPOPFetchMessageOperation.h +src\async\pop\MCPOPFetchMessagesOperation.h +src\async\pop\MCPOPOperationCallback.h +src\async\nntp\MCAsyncNNTP.h +src\async\nntp\MCNNTPAsyncSession.h +src\async\nntp\MCNNTPOperation.h +src\async\nntp\MCNNTPFetchHeaderOperation.h +src\async\nntp\MCNNTPFetchArticleOperation.h +src\async\nntp\MCNNTPFetchAllArticlesOperation.h +src\async\nntp\MCNNTPListNewsgroupsOperation.h +src\async\nntp\MCNNTPFetchOverviewOperation.h +src\async\nntp\MCNNTPFetchServerTimeOperation.h +src\async\nntp\MCNNTPPostOperation.h +src\async\nntp\MCNNTPOperationCallback.h diff --git a/build-windows-5.10/mailcore2/mailcore2.sln b/build-windows-5.10/mailcore2/mailcore2.sln new file mode 100644 index 000000000..1c696388d --- /dev/null +++ b/build-windows-5.10/mailcore2/mailcore2.sln @@ -0,0 +1,41 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.31101.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mailcore2", "mailcore2\mailcore2.vcxproj", "{AAD35E01-77E4-43CB-BBB4-F7F6692EA829}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test", "test\test.vcxproj", "{99C4CB64-C4BB-45CA-B66B-CD0A22B93BE4}" + ProjectSection(ProjectDependencies) = postProject + {AAD35E01-77E4-43CB-BBB4-F7F6692EA829} = {AAD35E01-77E4-43CB-BBB4-F7F6692EA829} + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {AAD35E01-77E4-43CB-BBB4-F7F6692EA829}.Debug|Win32.ActiveCfg = Debug|Win32 + {AAD35E01-77E4-43CB-BBB4-F7F6692EA829}.Debug|Win32.Build.0 = Debug|Win32 + {AAD35E01-77E4-43CB-BBB4-F7F6692EA829}.Debug|x64.ActiveCfg = Debug|x64 + {AAD35E01-77E4-43CB-BBB4-F7F6692EA829}.Debug|x64.Build.0 = Debug|x64 + {AAD35E01-77E4-43CB-BBB4-F7F6692EA829}.Release|Win32.ActiveCfg = Release|Win32 + {AAD35E01-77E4-43CB-BBB4-F7F6692EA829}.Release|Win32.Build.0 = Release|Win32 + {AAD35E01-77E4-43CB-BBB4-F7F6692EA829}.Release|x64.ActiveCfg = Release|x64 + {AAD35E01-77E4-43CB-BBB4-F7F6692EA829}.Release|x64.Build.0 = Release|x64 + {99C4CB64-C4BB-45CA-B66B-CD0A22B93BE4}.Debug|Win32.ActiveCfg = Debug|Win32 + {99C4CB64-C4BB-45CA-B66B-CD0A22B93BE4}.Debug|Win32.Build.0 = Debug|Win32 + {99C4CB64-C4BB-45CA-B66B-CD0A22B93BE4}.Debug|x64.ActiveCfg = Debug|x64 + {99C4CB64-C4BB-45CA-B66B-CD0A22B93BE4}.Debug|x64.Build.0 = Debug|x64 + {99C4CB64-C4BB-45CA-B66B-CD0A22B93BE4}.Release|Win32.ActiveCfg = Release|Win32 + {99C4CB64-C4BB-45CA-B66B-CD0A22B93BE4}.Release|Win32.Build.0 = Release|Win32 + {99C4CB64-C4BB-45CA-B66B-CD0A22B93BE4}.Release|x64.ActiveCfg = Release|x64 + {99C4CB64-C4BB-45CA-B66B-CD0A22B93BE4}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/build-windows-5.10/mailcore2/mailcore2/mailcore2.vcxproj b/build-windows-5.10/mailcore2/mailcore2/mailcore2.vcxproj new file mode 100644 index 000000000..d187fe7eb --- /dev/null +++ b/build-windows-5.10/mailcore2/mailcore2/mailcore2.vcxproj @@ -0,0 +1,471 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {AAD35E01-77E4-43CB-BBB4-F7F6692EA829} + Win32Proj + mailcore2 + + + + DynamicLibrary + true + v142 + Unicode + + + DynamicLibrary + true + v142 + Unicode + + + DynamicLibrary + false + v142 + true + Unicode + + + DynamicLibrary + false + v142 + true + Unicode + + + + + + + + + + + + + + + + + + + true + + + true + C:\Library\libxml2-development\usr\include\libxml2;C:\Library\icu-64\usr\include;C:\Library\Developer\Platforms\Windows.platform\Developer\SDKs\Windows.sdk\usr\lib\swift;..\..\include;$(IncludePath) + + + false + + + false + C:\Library\libxml2-development\usr\include\libxml2;C:\Library\icu-64\usr\include;C:\Library\Developer\Platforms\Windows.platform\Developer\SDKs\Windows.sdk\usr\lib\swift;..\..\include;$(IncludePath) + + + + NotUsing + Level3 + Disabled + MAILCORE_DLL;ZLIB_DLL;_WINDLL;%(PreprocessorDefinitions) + true + %(AdditionalIncludeDirectories);$(MSBuildThisFileDirectory);..\..\include;..\..\..\Externals\include;..\..\..\src\core\basetypes;..\..\..\src\core\zip;..\..\..\src\core\zip\minizip;..\..\..\src\core\renderer;..\..\..\src\core/rfc822;..\..\..\src\core/imap;..\..\..\src\core\abstract;..\..\..\src\core\security;..\..\..\src\core\imap;..\..\..\src\core\pop;..\..\..\src\core\nntp;..\..\..\src\core\smtp + + + Windows + true + Crypt32.lib;libtidy.lib;libxml2.lib;ssleay32MD.lib;libeay32MD.lib;zlib.lib;User32.lib;Ws2_32.lib;libctemplate.lib;kernel32.lib;libetpan.lib;pthreadVC2.lib;icudt.lib;icuin.lib;icuio.lib;icule.lib;iculx.lib;icuuc.lib;%(AdditionalDependencies) + ..\..\..\Externals\lib;..\..\..\Externals\lib\x86 + + + + + NotUsing + Level3 + Disabled + MAILCORE_DLL;ZLIB_DLL;_WINDLL;_CRT_SECURE_NO_WARNINGS;_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS;TIDY_STATIC;%(PreprocessorDefinitions) + true + %(AdditionalIncludeDirectories);..\..\..\Externals\include;..\..\..\src\core\basetypes;..\..\..\src\core\zip;..\..\..\src\core\zip\minizip;..\..\..\src\core\renderer;..\..\..\src\core\rfc822;..\..\..\src\core\imap;..\..\..\src\core\abstract;..\..\..\src\core\security;..\..\..\src\core\pop;..\..\..\src\core\nntp;..\..\..\src\core\smtp;..\..\..\src\async\imap;..\..\..\src\async\smtp;..\..\..\src\async\pop + + + Windows + true + Crypt32.lib;rdtidys.lib;libxml2s.lib;libeay32MD.lib;zlib.lib;Ws2_32.lib;libctemplate.lib;libetpan.lib;icudt64.lib;icuuc64.lib;icuin64.lib;%(AdditionalDependencies) + C:\Library\icu-64\usr\lib;C:\Library\libxml2-development\usr\lib;..\..\..\Externals\lib64;..\..\..\Externals\lib\x64 + + + + + Level3 + NotUsing + MaxSpeed + true + true + MAILCORE_DLL;ZLIB_DLL;_WINDLL;%(PreprocessorDefinitions) + true + %(AdditionalIncludeDirectories);$(MSBuildThisFileDirectory);..\..\include;..\..\..\Externals\include;..\..\..\src\core\basetypes;..\..\..\src\core\zip;..\..\..\src\core\zip\minizip;..\..\..\src\core\renderer;..\..\..\src\core/rfc822;..\..\..\src\core/imap;..\..\..\src\core\abstract;..\..\..\src\core\security;..\..\..\src\core\imap;..\..\..\src\core\pop;..\..\..\src\core\nntp;..\..\..\src\core\smtp + + + Windows + true + true + true + Crypt32.lib;libtidy.lib;libxml2.lib;ssleay32MD.lib;libeay32MD.lib;zlib.lib;User32.lib;Ws2_32.lib;libctemplate.lib;kernel32.lib;libetpan.lib;pthreadVC2.lib;icudt.lib;icuin.lib;icuio.lib;icule.lib;iculx.lib;icuuc.lib;%(AdditionalDependencies) + ..\..\..\Externals\lib;..\..\..\Externals\lib\x86 + + + + + Level3 + NotUsing + MaxSpeed + true + true + MAILCORE_DLL;ZLIB_DLL;_CRT_SECURE_NO_WARNINGS;_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS;TIDY_STATIC;%(PreprocessorDefinitions) + true + %(AdditionalIncludeDirectories);..\..\..\Externals\include;..\..\..\src\core\basetypes;..\..\..\src\core\zip;..\..\..\src\core\zip\minizip;..\..\..\src\core\renderer;..\..\..\src\core\rfc822;..\..\..\src\core\imap;..\..\..\src\core\abstract;..\..\..\src\core\security;..\..\..\src\core\pop;..\..\..\src\core\nntp;..\..\..\src\core\smtp;..\..\..\src\async\imap;..\..\..\src\async\smtp;..\..\..\src\async\pop + + + Windows + true + true + true + Crypt32.lib;rdtidys.lib;libxml2s.lib;libeay32MD.lib;zlib.lib;Ws2_32.lib;libctemplate.lib;libetpan.lib;icudt64.lib;icuuc64.lib;icuin64.lib;%(AdditionalDependencies) + C:\Library\icu-64\usr\lib;C:\Library\libxml2-development\usr\lib;..\..\..\Externals\lib64;..\..\..\Externals\lib\x64 + + + + + + \ No newline at end of file diff --git a/build-windows-5.10/mailcore2/mailcore2/mailcore2.vcxproj.filters b/build-windows-5.10/mailcore2/mailcore2/mailcore2.vcxproj.filters new file mode 100644 index 000000000..936c9db69 --- /dev/null +++ b/build-windows-5.10/mailcore2/mailcore2/mailcore2.vcxproj.filters @@ -0,0 +1,995 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {1826bc5c-297b-4ba7-96f8-051ae4b5e7e7} + + + {ed15cbb1-0930-42ca-9c90-d3d2af7f86e1} + + + {71537cef-6ee0-4bcc-aedd-1715ffb4310c} + + + {4f57c1aa-4ddb-4983-ae38-c12aa493a473} + + + {e3b641cb-08cf-411d-bbfd-12d497f28cf9} + + + {cd9399c6-90ef-4383-833c-5054a21ccb71} + + + {8074348e-f4c8-44fd-85b1-80bba2057f4a} + + + {07aa6807-c3fa-4d17-ac67-1baff0947b3e} + + + {51a582cb-0aeb-4156-a6e0-a7228566fbb8} + + + {9dfe3068-b318-4143-b718-94df738d2a26} + + + {a9cda156-07be-4771-bcbe-6912ad902d1a} + + + {6f34a2b3-0c43-42c3-ae71-f17ef9206c5e} + + + {114ac68e-a7f0-48b3-8fee-eca0cf2c8e30} + + + {7bcac4dc-e0b6-4a2a-b867-3502e8cb7b82} + + + {a5bb3047-fe25-477e-8f97-73c1be099ad7} + + + {b6501fb9-8395-478e-8955-538cd13a5e0a} + + + {a9e89d80-bf19-41f6-a5c8-b73ead0d6c7e} + + + + + Source Files\core\abstract + + + Source Files\core\abstract + + + Source Files\core\abstract + + + Source Files\core\abstract + + + Source Files\core\abstract + + + Source Files\core\abstract + + + Source Files\core\abstract + + + Source Files\core\abstract + + + Source Files\core\abstract + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\imap + + + Source Files\core\imap + + + Source Files\core\imap + + + Source Files\core\imap + + + Source Files\core\imap + + + Source Files\core\imap + + + Source Files\core\imap + + + Source Files\core\imap + + + Source Files\core\imap + + + Source Files\core\imap + + + Source Files\core\imap + + + Source Files\core\imap + + + Source Files\core\imap + + + Source Files\core\imap + + + Source Files\core\smtp + + + Source Files\core\smtp + + + Source Files\core\smtp + + + Source Files\core\nntp + + + Source Files\core\nntp + + + Source Files\core\nntp + + + Source Files\core\nntp + + + Source Files\core\provider + + + Source Files\core\provider + + + Source Files\core\provider + + + Source Files\core\provider + + + Source Files\core\rfc822 + + + Source Files\core\rfc822 + + + Source Files\core\rfc822 + + + Source Files\core\rfc822 + + + Source Files\core\rfc822 + + + Source Files\core\rfc822 + + + Source Files\core\renderer + + + Source Files\core\renderer + + + Source Files\core\renderer + + + Source Files\core\renderer + + + Source Files\core\renderer + + + Source Files\core\renderer + + + Source Files\core\renderer + + + Source Files\core\renderer + + + Source Files\core\pop + + + Source Files\core\pop + + + Source Files\core\pop + + + Source Files\core\pop + + + Source Files\core\zip + + + Source Files\core\zip + + + Source Files\core\zip + + + Source Files\core\zip + + + Source Files\core\zip + + + Source Files\core\zip + + + Source Files\core\security + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\pop + + + Source Files\async\pop + + + Source Files\async\pop + + + Source Files\async\pop + + + Source Files\async\pop + + + Source Files\async\pop + + + Source Files\async\pop + + + Source Files\async\pop + + + Source Files\async\pop + + + Source Files\async\pop + + + Source Files\async\smtp + + + Source Files\async\smtp + + + Source Files\async\smtp + + + Source Files\async\smtp + + + Source Files\async\smtp + + + Source Files\async\smtp + + + Source Files\async\smtp + + + Source Files\async\smtp + + + Source Files\async\smtp + + + Source Files\async\nntp + + + Source Files\async\nntp + + + Source Files\async\nntp + + + Source Files\async\nntp + + + Source Files\async\nntp + + + Source Files\async\nntp + + + Source Files\async\nntp + + + Source Files\async\nntp + + + Source Files\async\nntp + + + Source Files\async\nntp + + + Source Files\async\nntp + + + Source Files\async\nntp + + + Source Files\async\nntp + + + Source Files\core\abstract + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\core\provider + + + Source Files\core\provider + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + + + Source Files\core\abstract + + + Source Files\core\abstract + + + Source Files\core\abstract + + + Source Files\core\abstract + + + Source Files\core\abstract + + + Source Files\core\abstract + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\basetypes + + + Source Files\core\imap + + + Source Files\core\imap + + + Source Files\core\imap + + + Source Files\core\imap + + + Source Files\core\imap + + + Source Files\core\imap + + + Source Files\core\imap + + + Source Files\core\imap + + + Source Files\core\imap + + + Source Files\core\imap + + + Source Files\core\imap + + + Source Files\core\imap + + + Source Files\core\smtp + + + Source Files\core\nntp + + + Source Files\core\nntp + + + Source Files\core\provider + + + Source Files\core\provider + + + Source Files\core\provider + + + Source Files\core\rfc822 + + + Source Files\core\rfc822 + + + Source Files\core\rfc822 + + + Source Files\core\rfc822 + + + Source Files\core\rfc822 + + + Source Files\core\renderer + + + Source Files\core\renderer + + + Source Files\core\renderer + + + Source Files\core\renderer + + + Source Files\core\renderer + + + Source Files\core\renderer + + + Source Files\core\renderer + + + Source Files\core\pop + + + Source Files\core\pop + + + Source Files\core\zip + + + Source Files\core\zip + + + Source Files\core\zip + + + Source Files\core\zip + + + Source Files\core\zip + + + Source Files\core\security + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\async\pop + + + Source Files\async\pop + + + Source Files\async\pop + + + Source Files\async\pop + + + Source Files\async\pop + + + Source Files\async\pop + + + Source Files\async\pop + + + Source Files\async\pop + + + Source Files\async\smtp + + + Source Files\async\smtp + + + Source Files\async\smtp + + + Source Files\async\smtp + + + Source Files\async\smtp + + + Source Files\async\smtp + + + Source Files\async\smtp + + + Source Files\async\nntp + + + Source Files\async\nntp + + + Source Files\async\nntp + + + Source Files\async\nntp + + + Source Files\async\nntp + + + Source Files\async\nntp + + + Source Files\async\nntp + + + Source Files\async\nntp + + + Source Files\async\nntp + + + Source Files\async\nntp + + + Source Files\async\nntp + + + Source Files\core\abstract + + + Source Files\async\imap + + + Source Files\async\imap + + + Source Files\core\provider + + + Source Files\core\provider + + + + + Source Files\core\rfc822 + + + \ No newline at end of file diff --git a/build-windows-5.10/mailcore2/test/test.vcxproj b/build-windows-5.10/mailcore2/test/test.vcxproj new file mode 100644 index 000000000..f53f85e48 --- /dev/null +++ b/build-windows-5.10/mailcore2/test/test.vcxproj @@ -0,0 +1,166 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {99C4CB64-C4BB-45CA-B66B-CD0A22B93BE4} + Win32Proj + test + + + + Application + true + v120 + Unicode + + + Application + true + v120 + Unicode + + + Application + false + v120 + true + Unicode + + + Application + false + v120 + true + Unicode + + + + + + + + + + + + + + + + + + + true + + + true + + + false + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) + ..\..\include;..\..\..\Externals\include + + + Console + true + libetpan.lib;mailcore2.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + ..\..\..\Externals\lib;..\..\..\Externals\lib\x86;$(TargetDir) + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) + ..\..\include;..\..\..\Externals\include + + + Console + true + libetpan.lib;mailcore2.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + ..\..\..\Externals\lib64;..\..\..\Externals\lib\x64;$(TargetDir) + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) + ..\..\include;..\..\..\Externals\include + + + Console + true + true + true + libetpan.lib;mailcore2.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + ..\..\..\Externals\lib;..\..\..\Externals\lib\x86;$(TargetDir) + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) + ..\..\include;..\..\..\Externals\include + + + Console + true + true + true + libetpan.lib;mailcore2.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + ..\..\..\Externals\lib64;..\..\..\Externals\lib\x64;$(TargetDir) + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/build-windows-5.10/mailcore2/test/test.vcxproj.filters b/build-windows-5.10/mailcore2/test/test.vcxproj.filters new file mode 100644 index 000000000..023dca128 --- /dev/null +++ b/build-windows-5.10/mailcore2/test/test.vcxproj.filters @@ -0,0 +1,33 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + + + + Source Files + + + Source Files + + + + + Source Files + + + \ No newline at end of file diff --git a/build-windows-5.10/mailcore2/test/test.vcxproj.user b/build-windows-5.10/mailcore2/test/test.vcxproj.user new file mode 100644 index 000000000..89d245247 --- /dev/null +++ b/build-windows-5.10/mailcore2/test/test.vcxproj.user @@ -0,0 +1,6 @@ + + + + false + + \ No newline at end of file diff --git a/build-windows-5.10/vs/ctemplate/include/template_cache.h b/build-windows-5.10/vs/ctemplate/include/template_cache.h new file mode 100644 index 000000000..6971d2af4 --- /dev/null +++ b/build-windows-5.10/vs/ctemplate/include/template_cache.h @@ -0,0 +1,381 @@ +// Copyright (c) 2009, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// +// This file implements the Template Cache used to store templates. + +#ifndef TEMPLATE_TEMPLATE_CACHE_H_ +#define TEMPLATE_TEMPLATE_CACHE_H_ + +#include // for stdext::hash_map<> +#include // for string +#include // for pair +#include // for vector<> +#include // for ExpandEmitter, etc +#include // for Strip +#include +#include +namespace ctemplate { +class FileStat; +} +class Mutex; +class TemplateCacheUnittest; + +// NOTE: if you are statically linking the template library into your binary +// (rather than using the template .dll), set '/D CTEMPLATE_DLL_DECL=' +// as a compiler flag in your project file to turn off the dllimports. +#ifndef CTEMPLATE_DLL_DECL +# define CTEMPLATE_DLL_DECL __declspec(dllimport) +#endif + +// #ifdef CTEMPLATE_DLL_DECL +// extern template class __declspec(dllimport) std::allocator; +// extern template class __declspec(dllimport) std::vector; +// #else +// template class __declspec(dllexport) std::allocator; +// template class __declspec(dllexport) std::vector; +// #endif + +namespace ctemplate { + +class PerExpandData; +class Template; +class TemplateCachePeer; +class TemplateDictionaryInterface; + +// A cache to store parsed templates. +class CTEMPLATE_DLL_DECL TemplateCache { + public: + TemplateCache(); + ~TemplateCache(); + + // ---- CREATING A TEMPLATE OBJECT ------- + // LoadTemplate + // StringToTemplateCache + + // Attempts to load the template object stored under its filename, + // into the template cache. It first checks if the object is already + // in the cache. Any object retrieved from the cache is then + // checked to see if its status is marked for "reload if changed." + // If so, ReloadIfChanged is called on the retrieved object. Returns + // true if the object is loaded. Also returns true if the object + // already exists, and no reload was required. + // + // When it fails to retrieve one from the cache, it creates a new + // template object, passing the filename and 'strip' values to the + // constructor. (See constructor below for the meaning of the + // flags.) If it succeeds in creating an object, including loading + // and parsing the associated template file, the object is stored in + // the cache, and the method returns true. + // + // If it fails in loading and parsing the template file, either + // because the file was not found or it contained syntax errors, + // then the newly created object is deleted and the method returns + // false. (NOTE: This description is much longer and less precise + // and probably harder to understand than the method itself. Read + // the code.) + // + // To enable Auto-Escape on that template, place the corresponding + // AUTOESCAPE pragma at the top of the template file. The template + // will then be Auto-Escaped independently of the template it may be + // included from or the templates it may include. + // + // 'Strip' indicates how to handle whitespace when expanding the + // template. DO_NOT_STRIP keeps the template exactly as-is. + // STRIP_BLANK_LINES elides all blank lines in the template. + // STRIP_WHITESPACE elides all blank lines, and also all whitespace + // at either the beginning or end of a line. See template constructor + // for more details. + bool LoadTemplate(const TemplateString& filename, Strip strip); + + // Parses the string as a template file (e.g. "Hello {{WORLD}}"), + // and inserts it into the parsed template cache, so it can later be + // used by the user. The user specifies a key and a strip, which are + // later passed in to expand the template. + // Returns true if the template was successfully parsed and + // inserted to the template cache, or false otherwise. In particular, + // we return false if a string was already cached with the given key. + // NOTE: to include this template from within another template (via + // "{{>TEMPLATE_THAT_COMES_FROM_A_STRING}}"), the argument you pass + // to TemplateDictionary::SetFilename() is the key you used to register + // the string-template. + bool StringToTemplateCache(const TemplateString& key, + const TemplateString& content, + Strip strip); + bool StringToTemplateCache(const TemplateString& key, + const char* content, + size_t content_len, + Strip strip) { + return StringToTemplateCache(key, + TemplateString(content, content_len), + strip); + } + + // ---- EXPANDING A TEMPLATE ------- + // ExpandWithData + // ExpandFrozen + + // This returns false if the expand failed for some reason: filename + // could not be found on disk (and isn't already in the cache), or + // the template is mal-formed, or a sub-included template couldn't + // be found. Note that even if it returns false, it may have emitted + // some output to ExpandEmitter, before it noticed the problem. + bool ExpandWithData(const TemplateString& filename, Strip strip, + const TemplateDictionaryInterface *dictionary, + PerExpandData* per_expand_data, + ExpandEmitter* output); + bool ExpandWithData(const TemplateString& filename, Strip strip, + const TemplateDictionaryInterface* dictionary, + PerExpandData* per_expand_data, + std::string* output_buffer) { + if (output_buffer == NULL) return false; + StringEmitter e(output_buffer); + return ExpandWithData(filename, strip, dictionary, per_expand_data, &e); + } + + // Const version of ExpandWithData, intended for use with frozen + // caches. This method returns false if the requested + // template-filename is not found in the cache, rather than fetching + // the template from disk and continuing, as ExpandWithData does. + // (That is why the method can be const.) Likewise, it will return + // false, rather than fetch, if any sub-included template filename + // is not found in the cache. + // Unfortunately, the only way to enforce this last requirement at + // the moment is to have the template-cache be Frozen(). So that + // is a pre-requisite for calling this method. It may be relaxed + // in the future (if we rewrite the control flow to pass around the + // necessary state). + // Like ExpandWithData(), this may write partial results into output + // even if it returns false (due to template error or file not found). + bool ExpandNoLoad(const TemplateString& filename, Strip strip, + const TemplateDictionaryInterface *dictionary, + PerExpandData* per_expand_data, + ExpandEmitter* output) const; + bool ExpandNoLoad(const TemplateString& filename, Strip strip, + const TemplateDictionaryInterface* dictionary, + PerExpandData* per_expand_data, + std::string* output_buffer) const { + if (output_buffer == NULL) return false; + StringEmitter e(output_buffer); + return ExpandNoLoad(filename, strip, dictionary, per_expand_data, &e); + } + + // ---- FINDING A TEMPLATE FILE ------- + + // Sets the root directory for all templates used by the program. + // After calling this method, the filename passed to GetTemplate may + // be a relative pathname (no leading '/'), in which case this + // root-directory is prepended to the filename. This clears the old + // 'main' root directory, and also all alternate root directories + // that may had been added previously. + bool SetTemplateRootDirectory(const std::string& directory); + + // Adds an additional search path for all templates used by the + // program. You may call this multiple times. + bool AddAlternateTemplateRootDirectory(const std::string& directory); + + // Returns the 'main' root directory set by SetTemplateRootDirectory(). + std::string template_root_directory() const; + + // Given an unresolved filename, look through the template search + // path to see if the template can be found. If so, return the path + // of the resolved filename, otherwise return an empty string. + std::string FindTemplateFilename(const std::string& unresolved) + const; + + // ---- MANAGING THE CACHE ------- + // Freeze + // Delete + // ClearCache + // ReloadAllIfChanged + // Clone + + // Marks the template cache as immutable. After this method is called, + // the cache can no longer be modified by loading new templates or + // reloading existing templates. During expansion only cached + // included templates will be used, they won't be loaded on-demand. + void Freeze(); + + // Delete + // Deletes one template object from the cache, if it exists. + // This can be used for either file- or string-based templates. + // Returns true if the object was deleted, false otherwise. + bool Delete(const TemplateString& key); + + // ClearCache + // Deletes all the template objects in the cache and all raw + // contents cached from StringToTemplateCache. This should only + // be done once, just before exiting the program and after all + // template expansions are completed. (If you want to refresh the + // cache, the correct method to use is ReloadAllIfChanged, not + // this one.) Note: this method is not necessary unless you are + // testing for memory leaks. Calling this before exiting the + // program will prevent unnecessary reporting in that case. + void ClearCache(); + + // ReloadAllIfChanged + // If IMMEDIATE_RELOAD, reloads and parses all templates right away, + // if the corresponding template files have changed. + // If LAZY_RELOAD, then sets the reload bit on all templates. + // Subsequent call to GetTemplate() checks if file has changed, and if so + // reloads and parses the file into the cache. + // + // IMMEDIATE_RELOAD gives a more consistent snapshot of the current + // templates, since all templates in the cache are reloaded at + // (approximately) the same time. On the other hand, LAZY_RELOAD + // causes less of a latency spike, since it does not require + // loading lots of templates from disk at the same time. If in + // doubt, LAZY_RELOAD is probably a better choice. + + // If a file with the same name as an existing template-file, is added + // in another search path, ReloadAllIfChanged will pick up the file in the + // earlier search-path. + enum ReloadType { LAZY_RELOAD, IMMEDIATE_RELOAD }; + void ReloadAllIfChanged(ReloadType reload_tyle); + + // Clone + // Returns a copy of the cache. It makes a shallow copy of the + // parsed_template_cache_, incrementing refcount of templates. + // The caller is responsible for deallocating the returned TemplateCache. + // NOTE(user): Annotalysis expects this method to have a lock for + // a TemplateCache instance local to the method, but we + // know that no other threads will have access to the + // instance, so ignore thread safety errors. + TemplateCache* Clone() const; + + // ---- INSPECTING THE CACHE ------- + // Dump + // DumpToString + // TODO(csilvers): implement these? + + private: + // TODO(csilvers): nix Template friend once Template::ReloadIfChanged is gone + friend class Template; // for ResolveTemplateFilename + friend class TemplateTemplateNode; // for ExpandLocked + friend class TemplateCachePeer; // for unittests + friend class ::TemplateCacheUnittest; // for unittests + + class RefcountedTemplate; + struct CachedTemplate; + class TemplateCacheHash; + class RefTplPtrHash; + // due to a bug(?) in MSVC, TemplateCachePeer won't compile unless this + // particular typedef is public. Ugh. + public: + typedef std::pair TemplateCacheKey; + private: + typedef stdext::hash_map + TemplateMap; + typedef stdext::hash_map TemplateCallMap; + // Where to search for files. + typedef std::vector TemplateSearchPath; + + // GetTemplate + // This method is deprecated. It exists here because it is called by + // Template::GetTemplate. Also this is used in tests. + const Template* GetTemplate(const TemplateString& key, Strip strip); + + bool ResolveTemplateFilename(const std::string& unresolved, + std::string* resolved, + FileStat* statbuf) const; + + // This is used only for internal (recursive) calls to Expand due + // to internal template-includes. It doesn't try to acquire the + // global template_lock again, in template.cc. + // TODO(csilvers): remove this when template.cc's g_template_lock goes away. + bool ExpandLocked(const TemplateString& filename, Strip strip, + ExpandEmitter* output, + const TemplateDictionaryInterface *dictionary, + PerExpandData* per_expand_data); + + bool AddAlternateTemplateRootDirectoryHelper( + const std::string& directory, + bool clear_template_search_path); + + // DoneWithGetTemplatePtrs + // For historical reasons, GetTemplate() returns a raw Template + // pointer rather than a refcounted pointer. So it's impossible + // for the user to call DecRef on the template when it's done + // using it. To make up for that, we provide this routine, which + // says "call DecRef()" on *all* Templates ever used by + // GetTemplate(). It's safe for the client to call this when it's + // done using all templates it's ever retrieved before (via + // GetTemplate). Most likely, the user will call this indirectly, + // via ClearCache(). + // TODO(panicker): Consider making this method public. + void DoneWithGetTemplatePtrs(); + + // ValidTemplateFilename + // Validates the user provided filename before constructing the template + bool IsValidTemplateFilename(const std::string& filename, + std::string* resolved_filename, + FileStat* statbuf) const; + + // GetTemplateLocked + // Internal version of GetTemplate. It's used when the function already + // has a write-lock on mutex_. It returns a pointer to a refcounted + // template (in the cache), or NULL if the template is not found. + // Its used by GetTemplate & ForceReloadAllIfChanged. + RefcountedTemplate* GetTemplateLocked( + const TemplateString& filename, + Strip strip, + const TemplateCacheKey& key); + + // Refcount + // Testing only. Returns the refcount of a template, given its cache key. + int Refcount(const TemplateCacheKey template_cache_key) const; + + // GetCachedTemplate + // Debug only. Returns whether the cache key is in the parsed cache. + bool TemplateIsCached(const TemplateCacheKey template_cache_key) const; + + TemplateMap* parsed_template_cache_; + bool is_frozen_; + TemplateSearchPath search_path_; + + // Since GetTemplate() returns a raw pointer, it's impossible for + // the caller to call DecRef() on the returned template when it's + // done using it. To make up for that, we store each retval of + // GetTemplate in this data structure. Then the user can call + // DecRef() on all of them at once, via a DoneWithGetTemplatePtrs() + // (which they will probably get at via a call to ClearCache()). + TemplateCallMap* get_template_calls_; + + Mutex* const mutex_; + Mutex* const search_path_mutex_; + + // Can't invoke copy constructor or assignment operator + TemplateCache(const TemplateCache&); + void operator=(const TemplateCache &); +}; + +} + +#endif // TEMPLATE_TEMPLATE_CACHE_H_ diff --git a/build-windows-5.10/vs/ctemplate/include/template_string.h b/build-windows-5.10/vs/ctemplate/include/template_string.h new file mode 100644 index 000000000..2d3762859 --- /dev/null +++ b/build-windows-5.10/vs/ctemplate/include/template_string.h @@ -0,0 +1,363 @@ +// Copyright (c) 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// --- +// Author: csilvers@google.com (Craig Silerstein) + +#ifndef TEMPLATE_TEMPLATE_STRING_H_ +#define TEMPLATE_TEMPLATE_STRING_H_ + +#include // for memcmp() and size_t +#include +#include +#include + +#include +#if 0 +#include // one place @ac_cv_unit64@ might live +#endif +#if 0 +#include // another place @ac_cv_unit64@ might live +#endif +#include // final place @ac_cv_unit64@ might live + +class TemplateStringTest; // needed for friendship declaration +class StaticTemplateStringTest; + +#if 0 +extern char _start[] __attribute__((weak)); // linker emits: start of .text +extern char data_start[] __attribute__((weak)); // start of .data +#endif + +// NOTE: if you are statically linking the template library into your binary +// (rather than using the template .dll), set '/D CTEMPLATE_DLL_DECL=' +// as a compiler flag in your project file to turn off the dllimports. +#ifndef CTEMPLATE_DLL_DECL +# define CTEMPLATE_DLL_DECL __declspec(dllimport) +#endif + +namespace ctemplate { + +// Most methods of TemplateDictionary take a TemplateString rather than a +// C++ string. This is for efficiency: it can avoid extra string copies. +// For any argument that takes a TemplateString, you can pass in any of: +// * A C++ string +// * A char* +// * A StringPiece +// * TemplateString(char*, length) +// The last of these is the most efficient, though it requires more work +// on the call site (you have to create the TemplateString explicitly). +class TemplateString; + +// If you have a string constant (e.g. the string literal "foo") that +// you need to pass into template routines repeatedly, it is more +// efficient if you convert it into a TemplateString only once. The +// way to do this is to use a global StaticTemplateString via STS_INIT +// (note: do this at global scope *only*!): +// static const StaticTemplateString kMyVar = STS_INIT(kMyVar, "MY_VALUE"); +struct StaticTemplateString; + +#define STS_INIT(name, str) STS_INIT_WITH_HASH(name, str, 0) + +// Let's define a convenient hash_compare function for hashing 'normal' +// strings: char* and string. We'll use MurmurHash, which is probably +// better than the STL default. We don't include TemplateString or +// StaticTemplateString here, since they are hashed more efficiently +// based on their id. +struct CTEMPLATE_DLL_DECL StringHash { + inline size_t operator()(const char* s) const { + return Hash(s, strlen(s)); + }; + + inline size_t operator()(const std::string& s) const { + return Hash(s.data(), s.size()); + } + + inline bool operator()(const char* a, const char* b) const { + return (a != b) && (strcmp(a, b) < 0); // <, for MSVC + } + + inline bool operator()(const std::string& a, const std::string& b) const { + return a < b; + } + + static const size_t bucket_size = 4; // These are required by MSVC + static const size_t min_buckets = 8; // 4 and 8 are the defaults + private: + size_t Hash(const char* s, size_t slen) const; +}; + +// ----------------------- THE CLASSES ------------------------------- + +typedef unsigned __int64 TemplateId; + +const TemplateId kIllegalTemplateId = 0; + +struct CTEMPLATE_DLL_DECL StaticTemplateString { + // Do not define a constructor! We use only brace-initialization, + // so the data is constructed at static-initialization time. + // Anything you want to put in a constructor, put in + // StaticTemplateStringInitializer instead. + + // These members shouldn't be accessed directly, except in the + // internals of the template code. They are public because that is + // the only way we can brace-initialize them. NOTE: MSVC (at least + // up to 8.0) has a bug where it ignores 'mutable' when it's buried + // in an internal struct. To fix that, we have to make this whole + // internal struct mutable. We only do this on MSVC, so on other + // compilers we get the full constness we want. +#ifdef _MSC_VER + mutable +#endif + struct { + const char* ptr_; + size_t length_; + mutable TemplateId id_; // sometimes lazily-initialized. + } do_not_use_directly_; + + // This class is a good hash_compare functor to pass in as the third + // argument to stdext::hash_map<>, when creating a map whose keys are + // StaticTemplateString. NOTE: This class isn't that safe to use, + // because it requires that StaticTemplateStringInitializer has done + // its job. Unfortunately, even when you use the STS_INIT macro + // (which is always, right??), dynamic initialiation does not happen + // in a particular order, and objects in different .cc files may + // reference a StaticTemplateString before the corresponding + // StaticTemplateStringInitializer sets the id. + struct Hasher { + inline size_t operator()(const StaticTemplateString& sts) const; + inline bool operator()(const StaticTemplateString& a, // <, for MSVC + const StaticTemplateString& b) const; + static const size_t bucket_size = 4; // These are required by MSVC + static const size_t min_buckets = 8; // 4 and 8 are the defaults + }; + + inline bool empty() const { + return do_not_use_directly_.length_ == 0; + } + + // Allows comparisons of StaticTemplateString objects as if they were + // strings. This is useful for STL. + inline bool operator==(const StaticTemplateString& x) const; +}; + +class CTEMPLATE_DLL_DECL TemplateString { + public: + TemplateString(const char* s) + : ptr_(s ? s : ""), length_(strlen(ptr_)), + is_immutable_(InTextSegment(ptr_)), id_(kIllegalTemplateId) { + } + TemplateString(const std::string& s) + : ptr_(s.data()), length_(s.size()), + is_immutable_(false), id_(kIllegalTemplateId) { + } + TemplateString(const char* s, size_t slen) + : ptr_(s), length_(slen), + is_immutable_(InTextSegment(s)), id_(kIllegalTemplateId) { + } + TemplateString(const StaticTemplateString& s) + : ptr_(s.do_not_use_directly_.ptr_), + length_(s.do_not_use_directly_.length_), + is_immutable_(true), id_(s.do_not_use_directly_.id_) { + } + + const char* begin() const { + return ptr_; + } + + const char* end() const { + return ptr_ + length_; + } + + const char* data() const { + return ptr_; + } + + size_t size() const { + return length_; + } + + inline bool empty() const { + return length_ == 0; + }; + + inline bool is_immutable() const { + return is_immutable_; + } + + // STL requires this to be public for hash_map, though I'd rather not. + inline bool operator==(const TemplateString& x) const { + return GetGlobalId() == x.GetGlobalId(); + } + + private: + // Only TemplateDictionaries and template expansion code can read these. + friend class TemplateDictionary; + friend class TemplateCache; // for GetGlobalId + friend class StaticTemplateStringInitializer; // for AddToGlo... + friend struct TemplateStringHasher; // for GetGlobalId + friend TemplateId GlobalIdForTest(const char* ptr, int len); + friend TemplateId GlobalIdForSTS_INIT(const TemplateString& s); + + TemplateString(const char* s, size_t slen, bool is_immutable, TemplateId id) + : ptr_(s), length_(slen), is_immutable_(is_immutable), id_(id) { + } + + // This returns true if s is in the .text segment of the binary. + // (Note this only checks .text of the main executable, not of + // shared libraries. So it may not be all that useful.) + // This requires the gnu linker (and probably elf), to define + // _start and data_start. + static bool InTextSegment(const char* s) { +#if 0 + return (s >= _start && s < data_start); // in .text +#else + return false; // the conservative choice: assume it's not static memory +#endif + } + + protected: + inline void CacheGlobalId() { // used by HashedTemplateString + id_ = GetGlobalId(); + }; + + private: + // Returns the global id, computing it for the first time if + // necessary. Note that since this is a const method, we don't + // store the computed value in id_, even if id_ is 0. + TemplateId GetGlobalId() const; + // Adds this TemplateString to the map from global-id to name. + void AddToGlobalIdToNameMap(); + + // Use sparingly. Converting to a string loses information about the + // id of the template string, making operations require extra hash_compare + // computations. + std::string ToString() const { return std::string(ptr_, length_); } + + // Does the reverse map from TemplateId to TemplateString contents. + // Returns a TemplateString(kStsEmpty) if id isn't found. Note that + // the TemplateString returned is not necessarily NUL terminated. + static TemplateString IdToString(TemplateId id); + + const char* ptr_; + size_t length_; + // Do we need to manage memory for this string? + bool is_immutable_; + // Id for hash_compare lookups. If 0, we don't have one and it should be + // computed as-needed. + TemplateId id_; +}; + +// ----------------------- THE CODE ------------------------------- + +// Use the low-bit from TemplateId as the "initialized" flag. Note +// that since all initialized TemplateId have the lower bit set, it's +// safe to have used 0 for kIllegalTemplateId, as we did above. +const TemplateId kTemplateStringInitializedFlag = 1; + +inline bool IsTemplateIdInitialized(TemplateId id) { + return id & kTemplateStringInitializedFlag; +} + +// This is a helper struct used in TemplateString::Hasher/TemplateStringHasher +struct TemplateIdHasher { + size_t operator()(TemplateId id) const { + // The shift has two effects: it randomizes the "initialized" flag, + // and slightly improves the randomness of the low bits. This is + // slightly useful when size_t is 32 bits, or when using a small + // hash_compare tables with power-of-2 sizes. + return static_cast(id ^ (id >> 33)); + } + bool operator()(TemplateId a, TemplateId b) const { // <, for MSVC + return a < b; + } + static const size_t bucket_size = 4; // These are required by MSVC + static const size_t min_buckets = 8; // 4 and 8 are the defaults +}; + + +inline size_t StaticTemplateString::Hasher::operator()( + const StaticTemplateString& sts) const { + TemplateId id = sts.do_not_use_directly_.id_; + assert(IsTemplateIdInitialized(id)); + return TemplateIdHasher()(id); +} + +inline bool StaticTemplateString::Hasher::operator()( + const StaticTemplateString& a, const StaticTemplateString& b) const { + TemplateId id_a = a.do_not_use_directly_.id_; + TemplateId id_b = b.do_not_use_directly_.id_; + assert(IsTemplateIdInitialized(id_a)); + assert(IsTemplateIdInitialized(id_b)); + return TemplateIdHasher()(id_a, id_b); +} + +inline bool StaticTemplateString::operator==( + const StaticTemplateString& x) const { + return (do_not_use_directly_.length_ == x.do_not_use_directly_.length_ && + (do_not_use_directly_.ptr_ == x.do_not_use_directly_.ptr_ || + memcmp(do_not_use_directly_.ptr_, x.do_not_use_directly_.ptr_, + do_not_use_directly_.length_) == 0)); +} + +// We set up as much of StaticTemplateString as we can at +// static-initialization time (using brace-initialization), but some +// things can't be set up then. This class is for those things; it +// runs at dynamic-initialization time. If you add logic here, only +// do so as an optimization: this may be called rather late (though +// before main), so other code should not depend on this being called +// before them. +class CTEMPLATE_DLL_DECL StaticTemplateStringInitializer { + public: + // This constructor operates on a const StaticTemplateString - we should + // only change those things that are mutable. + explicit StaticTemplateStringInitializer(const StaticTemplateString* sts); +}; + +// Don't use this. This is used only in auto-generated .varnames.h files. +#define STS_INIT_WITH_HASH(name, str, hash_compare) \ + { { str, sizeof("" str "")-1, hash_compare } }; \ + namespace ctemplate_sts_init { \ + static const ctemplate::StaticTemplateStringInitializer name##_init(&name); \ + } + +// We computed this hash_compare value for the empty string online. In debug +// mode, we verify it's correct during runtime (that is, that we +// verify the hash_compare function used by make_tpl_varnames_h hasn't changed +// since we computed this number). Note this struct is logically +// static, but since it's in a .h file, we don't say 'static' but +// instead rely on the linker to provide the POD-with-internal-linkage +// magic. +const StaticTemplateString kStsEmpty = + STS_INIT_WITH_HASH(kStsEmpty, "", 1457976849674613049ULL); + +} + + +#endif // TEMPLATE_TEMPLATE_STRING_H_ diff --git a/build-windows-5.10/vs/ctemplate/libctemplate.vcxproj b/build-windows-5.10/vs/ctemplate/libctemplate.vcxproj new file mode 100644 index 000000000..27e18fa72 --- /dev/null +++ b/build-windows-5.10/vs/ctemplate/libctemplate.vcxproj @@ -0,0 +1,331 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {FB27FBDB-E6C0-4D00-A7F8-1EEEF1B48ABC} + libctemplate + Win32Proj + + + + DynamicLibrary + v143 + MultiByte + + + DynamicLibrary + v143 + MultiByte + + + DynamicLibrary + v143 + MultiByte + + + DynamicLibrary + v143 + MultiByte + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>12.0.30501.0 + + + $(SolutionDir)$(Configuration)\ + $(Configuration)\ + true + + + true + + + $(SolutionDir)$(Configuration)\ + $(Configuration)\ + false + + + false + + + + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBCTEMPLATE_EXPORTS;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + + Level3 + EditAndContinue + ../../src/windows/include;../../src/windows + + + $(OutDir)libctemplate-debug.dll + true + $(OutDir)libctemplate-debug.pdb + Windows + $(OutDir)libctemplate-debug.lib + MachineX86 + + + + + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBCTEMPLATE_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + ProgramDatabase + ../../src/windows/include;../../src/windows + + + $(OutDir)libctemplate-debug.dll + true + $(OutDir)libctemplate-debug.pdb + Windows + $(OutDir)libctemplate-debug.lib + + + + + WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBCTEMPLATE_EXPORTS;%(PreprocessorDefinitions) + MultiThreaded + + Level3 + ProgramDatabase + ../../src/windows/include;../../src/windows + + + $(OutDir)libctemplate.dll + true + Windows + true + true + $(OutDir)libctemplate.lib + MachineX86 + + + + + WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBCTEMPLATE_EXPORTS;%(PreprocessorDefinitions) + MultiThreaded + + + Level3 + ProgramDatabase + ../../src/windows/include;../../src/windows + + + $(OutDir)libctemplate.dll + true + Windows + true + true + $(OutDir)libctemplate.lib + + + + + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDebugDLL + MultiThreadedDebugDLL + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDLL + MultiThreadedDLL + + + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDebugDLL + MultiThreadedDebugDLL + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDLL + MultiThreadedDLL + + + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDebugDLL + MultiThreadedDebugDLL + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDLL + MultiThreadedDLL + + + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDebugDLL + MultiThreadedDebugDLL + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDLL + MultiThreadedDLL + + + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDebugDLL + MultiThreadedDebugDLL + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDLL + MultiThreadedDLL + + + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDebugDLL + MultiThreadedDebugDLL + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDLL + MultiThreadedDLL + + + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDebugDLL + MultiThreadedDebugDLL + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDLL + MultiThreadedDLL + + + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDebugDLL + MultiThreadedDebugDLL + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDLL + MultiThreadedDLL + + + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDebugDLL + MultiThreadedDebugDLL + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDLL + MultiThreadedDLL + + + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDebugDLL + MultiThreadedDebugDLL + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDLL + MultiThreadedDLL + + + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDebugDLL + MultiThreadedDebugDLL + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDLL + MultiThreadedDLL + + + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDebugDLL + MultiThreadedDebugDLL + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDLL + MultiThreadedDLL + + + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDebugDLL + MultiThreadedDebugDLL + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDLL + MultiThreadedDLL + + + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDebugDLL + MultiThreadedDebugDLL + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDLL + MultiThreadedDLL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/build-windows-5.10/vs/libetpan/libetpan.vcxproj b/build-windows-5.10/vs/libetpan/libetpan.vcxproj new file mode 100644 index 000000000..bdbf8c5ce --- /dev/null +++ b/build-windows-5.10/vs/libetpan/libetpan.vcxproj @@ -0,0 +1,614 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {BA4DED3C-E56F-4484-BFC3-9C13E461A1BE} + libetpan + Win32Proj + + + + DynamicLibrary + v143 + MultiByte + + + DynamicLibrary + v143 + MultiByte + + + DynamicLibrary + v143 + MultiByte + + + DynamicLibrary + v143 + MultiByte + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>12.0.30501.0 + + + true + + + true + + + true + + + true + + + + Disabled + Default + ../../src/data-types;../../src/driver;../../src/driver/interface;../../src/driver/tools;../../src/low-level/feed;../../src/low-level/imap;../../src/low-level/imf;../../src/low-level/maildir;../../src/low-level/mbox;../../src/low-level/mh;../../src/low-level/mime;../../src/low-level/nntp;../../src/low-level/pop3;../../src/low-level/smtp;../../src/windows;../../src/main;..;../include;../../src/driver/implementation/pop3;../../third-party/include;%(AdditionalIncludeDirectories) + HAVE_ZLIB;USE_SASL;USE_SSL;WIN32;_WINDOWS;_USRDLL;LIBETPAN_DLL;USE_SSL;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + NotUsing + Level3 + EditAndContinue + CompileAsC + 4996; 4267;%(DisableSpecificWarnings) + ../StdAfx.h;%(ForcedIncludeFiles) + + + + /DLL %(AdditionalOptions) + sasl2.lib;zlib.lib;Ws2_32.lib;libssl.lib;libcrypto.lib;%(AdditionalDependencies) + true + ../../third-party/lib;%(AdditionalLibraryDirectories) + C;%(IgnoreSpecificDefaultLibraries) + + true + $(OutDir)libetpan.pdb + true + NotSet + false + + MachineX86 + + + + + Disabled + Default + ../../src/data-types;../../src/driver;../../src/driver/interface;../../src/driver/tools;../../src/low-level/feed;../../src/low-level/imap;../../src/low-level/imf;../../src/low-level/maildir;../../src/low-level/mbox;../../src/low-level/mh;../../src/low-level/mime;../../src/low-level/nntp;../../src/low-level/pop3;../../src/low-level/smtp;../../src/windows;../../src/main;..;../include;../../src/driver/implementation/pop3;../../third-party/include;%(AdditionalIncludeDirectories) + HAVE_ZLIB;USE_SASL;USE_SSL;WIN32;_WINDOWS;_USRDLL;LIBETPAN_DLL;USE_SSL;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebugDLL + NotUsing + Level3 + ProgramDatabase + CompileAsC + 4996; 4267;%(DisableSpecificWarnings) + ../StdAfx.h;%(ForcedIncludeFiles) + + + + /DLL %(AdditionalOptions) + sasl2.lib;zlib.lib;Ws2_32.lib;libssl.lib;libcrypto.lib;%(AdditionalDependencies) + true + ../../third-party/lib64;%(AdditionalLibraryDirectories) + C;%(IgnoreSpecificDefaultLibraries) + + + true + $(OutDir)libetpan.pdb + true + NotSet + false + + + + + + + ../../src/data-types;../../src/driver;../../src/driver/interface;../../src/driver/tools;../../src/low-level/feed;../../src/low-level/imap;../../src/low-level/imf;../../src/low-level/maildir;../../src/low-level/mbox;../../src/low-level/mh;../../src/low-level/mime;../../src/low-level/nntp;../../src/low-level/pop3;../../src/low-level/smtp;../../src/windows;../../src/main;..;../include;../../src/driver/implementation/pop3;../../third-party/include;%(AdditionalIncludeDirectories) + HAVE_ZLIB;USE_SASL;USE_SSL;WIN32;_WINDOWS;_USRDLL;LIBETPAN_DLL;USE_SSL;%(PreprocessorDefinitions) + MultiThreadedDLL + NotUsing + Level3 + + CompileAsC + 4996; 4267;%(DisableSpecificWarnings) + ../StdAfx.h;%(ForcedIncludeFiles) + + + + /DLL %(AdditionalOptions) + sasl2.lib;zlib.lib;Ws2_32.lib;libssl.lib;libcrypto.lib;%(AdditionalDependencies) + ../../third-party/lib;%(AdditionalLibraryDirectories) + C;%(IgnoreSpecificDefaultLibraries) + true + $(OutDir)libetpan.pdb + NotSet + true + true + false + + MachineX86 + + + + + ../../src/data-types;../../src/driver;../../src/driver/interface;../../src/driver/tools;../../src/low-level/feed;../../src/low-level/imap;../../src/low-level/imf;../../src/low-level/maildir;../../src/low-level/mbox;../../src/low-level/mh;../../src/low-level/mime;../../src/low-level/nntp;../../src/low-level/pop3;../../src/low-level/smtp;../../src/windows;../../src/main;..;../include;../../src/driver/implementation/pop3;../../third-party/include;%(AdditionalIncludeDirectories) + HAVE_ZLIB;USE_SASL;USE_SSL;WIN32;_WINDOWS;_USRDLL;LIBETPAN_DLL;USE_SSL;%(PreprocessorDefinitions) + MultiThreadedDLL + NotUsing + Level3 + + + CompileAsC + 4996; 4267;%(DisableSpecificWarnings) + ../StdAfx.h;%(ForcedIncludeFiles) + + + + /DLL %(AdditionalOptions) + sasl2.lib;zlib.lib;Ws2_32.lib;libssl.lib;libcrypto.lib;%(AdditionalDependencies) + ../../third-party/lib64;%(AdditionalLibraryDirectories) + C;%(IgnoreSpecificDefaultLibraries) + true + $(OutDir)libetpan.pdb + NotSet + true + true + false + + + + + + + cd .. +build_headers.bat + + cd .. +build_headers.bat + + %(RootDir)%(Directory)\_headers_depends;%(Outputs) + %(RootDir)%(Directory)\_headers_depends;%(Outputs) + cd .. +build_headers.bat + + cd .. +build_headers.bat + + %(RootDir)%(Directory)\_headers_depends;%(Outputs) + %(RootDir)%(Directory)\_headers_depends;%(Outputs) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CompileAsCpp + CompileAsCpp + CompileAsCpp + CompileAsCpp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/build-windows/Build-Mailcore2.bat b/build-windows/Build-Mailcore2.bat new file mode 100644 index 000000000..4b42df784 --- /dev/null +++ b/build-windows/Build-Mailcore2.bat @@ -0,0 +1,3 @@ +@echo off +powershell -ExecutionPolicy Bypass .\Build-Mailcore2.ps1 %* +pause \ No newline at end of file diff --git a/build-windows/Build-Mailcore2.ps1 b/build-windows/Build-Mailcore2.ps1 new file mode 100644 index 000000000..97ed2dacf --- /dev/null +++ b/build-windows/Build-Mailcore2.ps1 @@ -0,0 +1,226 @@ +Param( + [string]$DependenciesPath, + [string]$InstallPath, + [switch]$Install = $false +) + +Import-Module RDBuildCMake +Import-Module RDBuildMSVC +Import-Module RDDependency + +$ProjectRoot = "$(Resolve-Path ""$PSScriptRoot\..\"")" +if (-Not $DependenciesPath) { + $DependenciesPath = "$ProjectRoot\.build\Dependencies" +} +if (-Not $InstallPath) { + $InstallPath = "$ProjectRoot\.build\install" +} + +$BinDir = "$InstallPath\bin" +$IncludeDir = "$InstallPath\include" +$LibDir = "$InstallPath\lib" + +$IcuVersion = 69 +$IcuPath = "C:\Library\icu-$IcuVersion\usr" +$LibXml2Path = "C:\Library\libxml2-development\usr" + +$CTemplateDependencyDir = "CTemplate" +$CTemplateDependencyPath = "$DependenciesPath\$CTemplateDependencyDir" +$LibEtPanDependencyDir = "LibEtPan" +$LibEtPanDependencyPath = "$DependenciesPath\$LibEtPanDependencyDir" +$TidyDependencyDir = "TidyHTML5" +$TidyDependencyPath = "$DependenciesPath\$TidyDependencyDir" +$ZlibDependencySourceUrl = "https://spark-prebuilt-binaries.s3.amazonaws.com/zlib.zip" +$ZlibDependencyDir = "zlib" +$ZlibDependencyPath = "$DependenciesPath\$ZlibDependencyDir\zlib-win32-1" +$SaslDependencySourceUrl = "https://spark-prebuilt-binaries.s3.amazonaws.com/sasl.zip" +$SaslDependencyDir = "SASL" +$SaslDependencyPath = "$DependenciesPath\$SaslDependencyDir\cyrus-sasl-win32" +$OpenSslDependencySourceUrl = "https://spark-prebuilt-binaries.s3.amazonaws.com/openssl.zip" +$OpenSslDependencyDir = "OpenSSL" +$OpenSslDependencyPath = "$DependenciesPath\$OpenSslDependencyDir\openssl-win32" + +$S3Key = $env:SPARK_PREBUILT_KEY +if (!$S3Key) { + throw "Spark prebuilt storage key(SPARK_PREBUILT_KEY) is required" +} + +$Dependencies = @( + @{ Name = "CTemplate"; GitUrl = "git@github.com:readdle/ctemplate.git"; GitBranch = "master"; Directory = $CTemplateDependencyDir; } + @{ Name = "LibEtPan"; GitUrl = "git@github.com:readdle/libetpan.git"; GitRevision = "280a11f4250d67c1c6f74210ae9b1dfe4fadd248"; Directory = $LibEtPanDependencyDir; } + @{ Name = "Tidy HTML5"; GitUrl = "git@github.com:readdle/tidy-html5.git"; GitBranch = "spark2"; Directory = $TidyDependencyDir; } +) + +Push-Task -Name "mailcore2" -ScriptBlock { + Push-Task -Name "Initialize" -ScriptBlock { + Write-TaskLog "Working in $ProjectRoot" + Push-Location -Path $ProjectRoot + } + + try { + Initialize-Dependencies -Path $Script:DependenciesPath -Dependencies $Script:Dependencies + Invoke-RestMethod -Uri $OpenSslDependencySourceUrl -OutFile "$DependenciesPath\OpenSsl.zip" -UserAgent $S3Key + Invoke-RestMethod -Uri $SaslDependencySourceUrl -OutFile "$DependenciesPath\SASL.zip" -UserAgent $S3Key + Invoke-RestMethod -Uri $ZlibDependencySourceUrl -OutFile "$DependenciesPath\zlib.zip" -UserAgent $S3Key + Expand-Archive -Path "$DependenciesPath\OpenSsl.zip" -DestinationPath $OpenSslDependencyPath -Force + Expand-Archive -Path "$DependenciesPath\SASL.zip" -DestinationPath $SaslDependencyPath -Force + Expand-Archive -Path "$DependenciesPath\zlib.zip" -DestinationPath $ZlibDependencyPath -Force + + Push-Task -Name "Prepare Build Environment" -ScriptBlock { + Test-Directory $IcuPath -SuccessMessage "Found ICU at $IcuPath" -FailMessage "ICU not found at $IcuPath" + Test-Directory $LibXml2Path -SuccessMessage "Found LibXml2 at $LibXml2Path" -FailMessage "ICU not found at $LibXml2Path" + + Write-TaskLog "Configuring VS environment" + Invoke-VsDevCmd -Version "2019" + Initialize-Toolchain + + Test-VCModules + } + + Push-Task -Name "Build Tidy HTML5" -ScriptBlock { + $CMakeArgs = + "-G Ninja", + "-DCMAKE_BUILD_TYPE=RelWithDebInfo", + "-DCMAKE_INSTALL_PREFIX=$TidyDependencyPath", + "-DCMAKE_PDB_OUTPUT_DIRECTORY=$TidyDependencyPath\bin", + "-DCMAKE_C_COMPILER=cl.exe", + "-DCMAKE_CXX_COMPILER=cl.exe" -join " " + + Invoke-CMakeTasks -WorkingDir $TidyDependencyPath -CMakeArgs $CMakeArgs + } + + Push-Task -Name "Setup LibEtPan Dependencies" -ScriptBlock { + Copy-Item "$ProjectRoot\build-windows\vs2019\libetpan\libetpan.vcxproj" -Destination "$LibEtPanDependencyPath\build-windows\libetpan" -Force -ErrorAction Stop + + $ExternalsPath = "$LibEtPanDependencyPath\third-party" + if (-Not (Test-Path "$ExternalsPath\include")) { + New-Item -Path "$ExternalsPath\include" -ItemType Directory -ErrorAction Stop + } + + if (-Not (Test-Path "$ExternalsPath\lib64")) { + New-Item -Path "$ExternalsPath\lib64" -ItemType Directory -ErrorAction Stop + } + + Copy-Item -Path "$ZlibDependencyPath\include" -Destination $ExternalsPath -Recurse -Force -ErrorAction Stop + Copy-Item -Path "$ZlibDependencyPath\lib64" -Destination $ExternalsPath -Recurse -Force -ErrorAction Stop + Copy-Item -Path "$SaslDependencyPath\include" -Destination $ExternalsPath -Recurse -Force -ErrorAction Stop + Copy-Item -Path "$SaslDependencyPath\lib64" -Destination $ExternalsPath -Recurse -Force -ErrorAction Stop + Copy-Item -Path "$OpenSslDependencyPath\include" -Destination $ExternalsPath -Recurse -Force -ErrorAction Stop + Copy-Item -Path "$OpenSslDependencyPath\lib64" -Destination $ExternalsPath -Recurse -Force -ErrorAction Stop + } + + Push-Task -Name "Build LibEtPan" -ScriptBlock { + MSBuild "$LibEtPanDependencyPath\build-windows\libetpan.sln" /t:libetpan /p:Configuration="Release" /p:Platform="x64" /p:DebugSymbols=true /p:DebugType=pdbonly + } + + Push-Task -Name "Build CTemplate" -ScriptBlock { + MSBuild "$CTemplateDependencyPath\ctemplate.sln" /t:libctemplate /p:Configuration="Release" /p:Platform="x64" /p:DebugSymbols=true /p:DebugType=pdbonly + } + + Push-Task -Name "Setup CMailcore Dependencies" -ScriptBlock { + $ExternalsPath = "$ProjectRoot\Externals" + if (-Not (Test-Path "$ExternalsPath\include")) { + New-Item -Path "$ExternalsPath\include" -ItemType Directory -ErrorAction Stop + } + + if (-Not (Test-Path "$ExternalsPath\lib64")) { + New-Item -Path "$ExternalsPath\lib64" -ItemType Directory -ErrorAction Stop + } + + Copy-Item -Path "$ZlibDependencyPath\include" -Destination $ExternalsPath -Recurse -Force -ErrorAction Stop -PassThru | Write-Host + Copy-Item -Path "$ZlibDependencyPath\lib64" -Destination $ExternalsPath -Exclude "*.dll" -Recurse -Force -ErrorAction Stop -PassThru | Write-Host + Copy-Item -Path "$SaslDependencyPath\include" -Destination $ExternalsPath -Recurse -Force -ErrorAction Stop -PassThru | Write-Host + Copy-Item -Path "$SaslDependencyPath\lib64" -Destination $ExternalsPath -Exclude "*.dll" -Recurse -Force -ErrorAction Stop -PassThru | Write-Host + Copy-Item -Path "$OpenSslDependencyPath\include" -Destination $ExternalsPath -Recurse -Force -ErrorAction Stop -PassThru | Write-Host + Copy-Item -Path "$OpenSslDependencyPath\lib64" -Destination $ExternalsPath -Recurse -Force -ErrorAction Stop -PassThru | Write-Host + Copy-Item -Path "$CTemplateDependencyPath\src\windows\include\ctemplate" -Destination "$ExternalsPath\include" -Recurse -Force -ErrorAction Stop -PassThru | Write-Host + Copy-Item -Path "$CTemplateDependencyPath\x64\Release\*" -Destination "$ExternalsPath\lib64" -Exclude "*.dll" -Recurse -Force -ErrorAction Stop -PassThru | Write-Host + Copy-Item -Path "$LibEtPanDependencyPath\build-windows\include" -Destination $ExternalsPath -Recurse -Force -ErrorAction Stop -PassThru | Write-Host + Copy-Item -Path "$LibEtPanDependencyPath\build-windows\x64\Release\*" -Destination "$ExternalsPath\lib64" -Exclude "*.dll" -Recurse -Force -ErrorAction Stop -PassThru | Write-Host + Copy-Item -Path "$TidyDependencyPath\include" -Destination "$ExternalsPath\include\tidy" -Recurse -Force -ErrorAction Stop -PassThru | Write-Host + Copy-Item -Path "$TidyDependencyPath\rdtidy.lib" -Destination "$ExternalsPath\lib64" -Force -ErrorAction Stop -PassThru | Write-Host + Copy-Item -Path "$TidyDependencyPath\rdtidy.exp" -Destination "$ExternalsPath\lib64" -Force -ErrorAction Stop -PassThru | Write-Host + + Copy-Item -Path "$ProjectRoot\build-windows\vs2019\ctemplate\include\template_cache.h" -Destination "$ExternalsPath\include\ctemplate" -Force -ErrorAction Stop | Write-Host + Copy-Item -Path "$ProjectRoot\build-windows\vs2019\ctemplate\include\template_string.h" -Destination "$ExternalsPath\include\ctemplate" -Force -ErrorAction Stop | Write-Host + } + + if ($Install) { + Push-Task -Name "Install CMailcore Dependencies" -ScriptBlock { + Install-File "$OpenSslDependencyPath\bin\libssl-1_1-x64.dll" -Destination $BinDir + Install-File "$OpenSslDependencyPath\bin\libssl-1_1-x64.pdb" -Destination $BinDir + Install-File "$OpenSslDependencyPath\bin\libcrypto-1_1-x64.dll" -Destination $BinDir + Install-File "$OpenSslDependencyPath\bin\libcrypto-1_1-x64.pdb" -Destination $BinDir + + Install-File "$CTemplateDependencyPath\x64\Release\libctemplate.dll" -Destination $BinDir + Install-File "$CTemplateDependencyPath\x64\Release\libctemplate.pdb" -Destination $BinDir + + Install-File "$SaslDependencyPath\bin\sasl2.dll" -Destination $BinDir + Install-File "$SaslDependencyPath\bin\sasl2.pdb" -Destination $BinDir + + Install-File "$PSScriptRoot\bin\msvcp120.dll" -Destination $BinDir + Install-File "$PSScriptRoot\bin\msvcr120.dll" -Destination $BinDir + + Install-File "$ZlibDependencyPath\lib64\zlib.dll" -Destination $BinDir + Install-File "$ZlibDependencyPath\lib64\zlib.pdb" -Destination $BinDir + Install-File "$ZlibDependencyPath\include\zlib.h" -Destination $IncludeDir + Install-File "$ZlibDependencyPath\include\zconf.h" -Destination $IncludeDir + Install-File "$ZlibDependencyPath\lib64\zlib.lib" -Destination $LibDir + Install-File "$ZlibDependencyPath\lib64\zlib.exp" -Destination $LibDir + + Install-File "$TidyDependencyPath\bin\rdtidy.dll" -Destination $BinDir + Install-File "$TidyDependencyPath\bin\rdtidy.pdb" -Destination $BinDir + Install-File "$TidyDependencyPath\include\buffio.h" -Destination "$IncludeDir\tidy" + Install-File "$TidyDependencyPath\include\platform.h" -Destination "$IncludeDir\tidy" + Install-File "$TidyDependencyPath\include\tidy.h" -Destination "$IncludeDir\tidy" + Install-File "$TidyDependencyPath\include\tidybuffio.h" -Destination "$IncludeDir\tidy" + Install-File "$TidyDependencyPath\include\tidyenum.h" -Destination "$IncludeDir\tidy" + Install-File "$TidyDependencyPath\include\tidyplatform.h" -Destination "$IncludeDir\tidy" + Install-File "$TidyDependencyPath\rdtidy.exp" -Destination $LibDir + Install-File "$TidyDependencyPath\lib\rdtidy.lib" -Destination $LibDir + + Install-Directory "$LibEtPanDependencyPath\build-windows\include\libetpan" -Destination "$IncludeDir\libetpan" + Install-File "$LibEtPanDependencyPath\build-windows\x64\Release\libetpan.dll" -Destination $BinDir + Install-File "$LibEtPanDependencyPath\build-windows\x64\Release\libetpan.pdb" -Destination $BinDir + Install-File "$LibEtPanDependencyPath\build-windows\x64\Release\libetpan.exp" -Destination $LibDir + Install-File "$LibEtPanDependencyPath\build-windows\x64\Release\libetpan.lib" -Destination $LibDir + } + } + + Push-Task -Name "Build mailcore2/CMailCore" -ScriptBlock { + $CMakeArgs = + "-G Ninja", + $ProjectRoot, + "-DCMAKE_BUILD_TYPE=RelWithDebInfo", + "-DCMAKE_INSTALL_PREFIX=$InstallPath", + $(if ($Install) { "-DCMAKE_PDB_OUTPUT_DIRECTORY=$InstallPath\bin"} else { "" }), + "-DCMAKE_C_COMPILER=clang-cl.exe", + "-DCMAKE_CXX_COMPILER=clang-cl.exe", + "-DLIBXML_INCLUDE_DIR=C:\Library\libxml2-development\usr\include", + "-DLIBXML_LIBRARY=C:\Library\libxml2-development\usr\lib\libxml2s.lib", + "-DICU4C_INCLUDE_DIR=$IcuPath\include", + "-DICU4C_UC_LIBRARY=$IcuPath\lib\icuuc$IcuVersion.lib", + "-DICU4C_IN_LIBRARY=$IcuPath\lib\icuin$IcuVersion.lib", + "-DDISPATCH_INCLUDE_DIR=C:\Library\Developer\Platforms\Windows.platform\Developer\SDKs\Windows.sdk\usr\lib\swift", + "-DDISPATCH_LIBRARY=C:\Library\Developer\Platforms\Windows.platform\Developer\SDKs\Windows.sdk\usr\lib\swift\windows\dispatch.lib", + "-DDISPATCH_BLOCKS_LIBRARY=C:\Library\Developer\Platforms\Windows.platform\Developer\SDKs\Windows.sdk\usr\lib\swift\windows\BlocksRuntime.lib" -join " " + + Invoke-CMakeTasks -WorkingDir "$ProjectRoot\.build\mailcore2" -CMakeArgs $CMakeArgs -NoInstall:$(-not $Install) + } + + if ($Install) { + Push-Task -Name "Collect Git Revision Data" -ScriptBlock { + New-Item -Path "$InstallPath\etc" -ItemType Directory -ErrorAction Ignore + git -C "$CTemplateDependencyPath" rev-parse HEAD > "$InstallPath\etc\ctemplate-git-rev" + git -C "$LibEtPanDependencyPath" rev-parse HEAD > "$InstallPath\etc\libetpan-git-rev" + git -C "$TidyDependencyPath" rev-parse HEAD > "$InstallPath\etc\tidy-html5-git-rev" + git rev-parse HEAD > "$InstallPath\etc\mailcore2-git-rev" + } + } + } + finally { + Push-Task -Name "Shutdown" -ScriptBlock { + Pop-Location + } + } +} diff --git a/build-windows/Build-SwiftMailcore.bat b/build-windows/Build-SwiftMailcore.bat new file mode 100644 index 000000000..c6911342f --- /dev/null +++ b/build-windows/Build-SwiftMailcore.bat @@ -0,0 +1,3 @@ +@echo off +powershell -ExecutionPolicy Bypass .\Build-SwiftMailcore.ps1 +pause \ No newline at end of file diff --git a/build-windows/Build-SwiftMailcore.ps1 b/build-windows/Build-SwiftMailcore.ps1 new file mode 100644 index 000000000..f1256d981 --- /dev/null +++ b/build-windows/Build-SwiftMailcore.ps1 @@ -0,0 +1,93 @@ +Param( + [string]$DependenciesPath, + [string]$InstallPath, + [switch]$Install = $false, + [switch]$BuildMailcore2 = $false +) + +$ProjectRoot = "$(Resolve-Path ""$PSScriptRoot\..\"")" + +$SourceFiles = Get-ChildItem -Path "$ProjectRoot\src\swift\*.swift" -Recurse -File +$ResourcesPath = "$ProjectRoot\resources" + +$ModuleName = "MailCore" +$IntermediatesPath = "$ProjectRoot\.build\$ModuleName\Intermediates" +$ProductsPath = "$ProjectRoot\.build\$ModuleName" +if (-Not $InstallPath) { + $InstallPath = "$ProjectRoot\.build\install" +} + +$BinDir = "$InstallPath\bin" +$IncludeDir = "$InstallPath\include" +$LibDir = "$InstallPath\lib" +$BundleResourcesDir = "$BinDir\$ModuleName.resources" + +$IcuVersion = 69 +$IcuPath = "C:\Library\icu-$IcuVersion\usr" + +$SwiftIncludePaths = + "$InstallPath\include" + +$HeaderSearchPaths = + "$ProjectRoot\Externals\include", + "$IcuPath\include" + +$LibrarySearchPaths = + "$ProjectRoot\Externals\lib64", + "$InstallPath\lib" + +$Configuration = @{ + ToolchainPath = "C:\Library\Developer\Toolchains\unknown-Asserts-development.xctoolchain" + SDKPath = "C:\Library\Developer\Platforms\Windows.platform\Developer\SDKs\Windows.sdk" + + ModuleName = $ModuleName + + WorkPath = $ProjectRoot + + IntermediatesPath = $IntermediatesPath + ProductsPath = $ProductsPath + + SwiftVersion = 5 + EnableTesting = $false + BuildType = "Release" + + SwiftIncludePaths = $SwiftIncludePaths + HeaderSearchPaths = $HeaderSearchPaths + LibrarySearchPaths = $LibrarySearchPaths + + SourceFiles = $SourceFiles + + Libraries = "libetpan" + OtherCFlags = @() + # OtherSwiftFlags = "-DDEBUG" +} + +Push-Task -Name $ModuleName -ScriptBlock { + Push-Task -Name "Initialize" -ScriptBlock { + Invoke-VsDevCmd -Version "2019" + + Initialize-SDK + Initialize-Toolchain + } + + if ($BuildMailcore2) { + & $PSScriptRoot\Build-Mailcore2.ps1 -InstallPath $InstallPath -DependenciesPath $DependenciesPath -Install + } + else { + & $PSScriptRoot\Get-Mailcore2.ps1 -InstallPath $InstallPath + } + + Invoke-BuildModuleTarget -Configuration $Script:Configuration + + if ($Install) { + Push-Task -Name "Install" -ScriptBlock { + Copy-Item -Path "$ProductsPath\$ModuleName.lib" -Destination $LibDir -Force -ErrorAction Stop + Copy-Item -Path "$ProductsPath\$ModuleName.exp" -Destination $LibDir -Force -ErrorAction Stop + Copy-Item -Path "$ProductsPath\$ModuleName.swiftdoc" -Destination $IncludeDir -Force -ErrorAction Stop + Copy-Item -Path "$ProductsPath\$ModuleName.swiftmodule" -Destination $IncludeDir -Force -ErrorAction Stop + Copy-Item -Path "$ProductsPath\$ModuleName.dll" -Destination $BinDir -Force -ErrorAction Stop + Install-File "$ResourcesPath\providers.json" -Destination $BundleResourcesDir + } + } + +} diff --git a/build-windows/Get-Mailcore2.ps1 b/build-windows/Get-Mailcore2.ps1 new file mode 100644 index 000000000..dfb3401f9 --- /dev/null +++ b/build-windows/Get-Mailcore2.ps1 @@ -0,0 +1,50 @@ +Param( + [string]$InstallPath +) + +$ProjectRoot = "$(Resolve-Path ""$PSScriptRoot\..\"")" + +if (-Not $InstallPath) { + $InstallPath = "$ProjectRoot\.build\install" +} + +$PrebuiltMailcoreVersion = 2 +$PrebuiltMailcoreArchive = "mailcore2-all-$PrebuiltMailcoreVersion.zip" +$PrebuiltMailcoreUrl = "https://spark-prebuilt-binaries.s3.amazonaws.com/$PrebuiltMailcoreArchive" + +$S3Key = $env:SPARK_PREBUILT_KEY +if (!$S3Key) { + throw "Spark prebuilt storage key(SPARK_PREBUILT_KEY) is required" +} + +Push-Task -Name "mailcore2" -ScriptBlock { + Push-Task -Name "Initialize" -ScriptBlock { + Write-TaskLog "Working in $ProjectRoot" + Push-Location -Path $ProjectRoot + } + + try { + $TempDir = [System.IO.Path]::GetTempFileName() + Remove-Item $TempDir + + $TempFile = "$TempDir.zip" + + Write-TaskLog "Downloading $PrebuiltMailcoreUrl to $TempFile" + + Invoke-RestMethod -Uri $PrebuiltMailcoreUrl -OutFile $TempFile -UserAgent $S3Key + Expand-Archive -Path $TempFile -DestinationPath $TempDir -Force + + New-Item -Path $InstallPath -ItemType Directory + Get-ChildItem -Path "$TempDir\mailcore2-all" | Copy-Item -Destination $InstallPath -Recurse -Container -PassThru | Write-Host + + Write-TaskLog "Deleting $TempFile" + Remove-Item $TempFile -Force + Write-TaskLog "Deleting $TempDir" + Remove-Item $TempDir -Force -Recurse + } + finally { + Push-Task -Name "Shutdown" -ScriptBlock { + Pop-Location + } + } +} diff --git a/build-windows/bin/msvcp120.dll b/build-windows/bin/msvcp120.dll new file mode 100644 index 000000000..4ea1efa73 Binary files /dev/null and b/build-windows/bin/msvcp120.dll differ diff --git a/build-windows/bin/msvcr120.dll b/build-windows/bin/msvcr120.dll new file mode 100644 index 000000000..d711c9223 Binary files /dev/null and b/build-windows/bin/msvcr120.dll differ diff --git a/build-windows/build_headers.list b/build-windows/build_headers.list index 4662e54c7..afdb61c6c 100644 --- a/build-windows/build_headers.list +++ b/build-windows/build_headers.list @@ -3,6 +3,7 @@ src\core\MCCore.h src\core\abstract\MCAbstract.h src\core\abstract\MCAbstractMessage.h src\core\basetypes\MCBaseTypes.h +src\core\basetypes\MCBasicLock.h src\core\basetypes\MCAutoreleasePool.h src\core\basetypes\MCObject.h src\core\basetypes\MCUtils.h @@ -103,6 +104,8 @@ src\async\imap\MCIMAPCapabilityOperation.h src\async\imap\MCIMAPQuotaOperation.h src\async\imap\MCIMAPOperationCallback.h src\async\imap\MCIMAPMessageRenderingOperation.h +src\async\imap\MCIMAPCustomCommandOperation.h +src\async\imap\MCIMAPCheckAccountOperation.h src\async\pop\MCAsyncPOP.h src\async\pop\MCPOPAsyncSession.h src\async\pop\MCPOPOperation.h @@ -121,92 +124,3 @@ src\async\nntp\MCNNTPFetchOverviewOperation.h src\async\nntp\MCNNTPFetchServerTimeOperation.h src\async\nntp\MCNNTPPostOperation.h src\async\nntp\MCNNTPOperationCallback.h -src\objc\MCObjC.h -src\objc\utils\MCOUtils.h -src\objc\utils\MCOObjectWrapper.h -src\objc\utils\NSData+MCO.h -src\objc\utils\NSString+MCO.h -src\objc\utils\NSDictionary+MCO.h -src\objc\utils\NSArray+MCO.h -src\objc\utils\NSObject+MCO.h -src\objc\utils\NSError+MCO.h -src\objc\utils\NSValue+MCO.h -src\objc\utils\MCOOperation.h -src\objc\abstract\MCOConstants.h -src\objc\utils\MCOIndexSet.h -src\objc\utils\MCORange.h -src\objc\utils\NSIndexSet+MCO.h -src\objc\abstract\MCOAbstract.h -src\objc\abstract\MCOAbstractMessage.h -src\objc\abstract\MCOAbstractMessagePart.h -src\objc\abstract\MCOAbstractPart.h -src\objc\abstract\MCOAbstractMultipart.h -src\objc\abstract\MCOAddress.h -src\objc\abstract\MCOMessageHeader.h -src\objc\abstract\MCOHTMLRendererDelegate.h -src\objc\abstract\MCOHTMLRendererIMAPDelegate.h -src\objc\imap\MCOIMAP.h -src\objc\imap\MCOIMAPSession.h -src\objc\imap\MCOIMAPOperation.h -src\objc\imap\MCOIMAPBaseOperation.h -src\objc\imap\MCOIMAPFetchFoldersOperation.h -src\objc\imap\MCOIMAPFolder.h -src\objc\imap\MCOIMAPMessage.h -src\objc\imap\MCOIMAPMessagePart.h -src\objc\imap\MCOIMAPMultipart.h -src\objc\imap\MCOIMAPNamespace.h -src\objc\imap\MCOIMAPNamespaceItem.h -src\objc\imap\MCOIMAPIdentity.h -src\objc\imap\MCOIMAPPart.h -src\objc\imap\MCOIMAPFolderInfoOperation.h -src\objc\imap\MCOIMAPFolderInfo.h -src\objc\imap\MCOIMAPFolderStatusOperation.h -src\objc\imap\MCOIMAPFolderStatus.h -src\objc\imap\MCOIMAPAppendMessageOperation.h -src\objc\imap\MCOIMAPCopyMessagesOperation.h -src\objc\imap\MCOIMAPMoveMessagesOperation.h -src\objc\imap\MCOIMAPFetchMessagesOperation.h -src\objc\imap\MCOIMAPFetchContentOperation.h -src\objc\imap\MCOIMAPFetchContentToFileOperation.h -src\objc\imap\MCOIMAPFetchParsedContentOperation.h -src\objc\imap\MCOIMAPSearchOperation.h -src\objc\imap\MCOIMAPIdleOperation.h -src\objc\imap\MCOIMAPFetchNamespaceOperation.h -src\objc\imap\MCOIMAPIdentityOperation.h -src\objc\imap\MCOIMAPCapabilityOperation.h -src\objc\imap\MCOIMAPQuotaOperation.h -src\objc\imap\MCOIMAPSearchExpression.h -src\objc\imap\MCOIMAPMessageRenderingOperation.h -src\objc\rfc822\MCORFC822.h -src\objc\rfc822\MCOAttachment.h -src\objc\rfc822\MCOMessageBuilder.h -src\objc\rfc822\MCOMessageParser.h -src\objc\rfc822\MCOMessagePart.h -src\objc\rfc822\MCOMultipart.h -src\objc\pop\MCOPOP.h -src\objc\pop\MCOPOPSession.h -src\objc\pop\MCOPOPOperation.h -src\objc\pop\MCOPOPFetchHeaderOperation.h -src\objc\pop\MCOPOPFetchMessageOperation.h -src\objc\pop\MCOPOPFetchMessagesOperation.h -src\objc\pop\MCOPOPMessageInfo.h -src\objc\smtp\MCOSMTP.h -src\objc\smtp\MCOSMTPSession.h -src\objc\smtp\MCOSMTPSendOperation.h -src\objc\smtp\MCOSMTPOperation.h -src\objc\nntp\MCONNTP.h -src\objc\nntp\MCONNTPSession.h -src\objc\nntp\MCONNTPOperation.h -src\objc\nntp\MCONNTPFetchHeaderOperation.h -src\objc\nntp\MCONNTPFetchArticleOperation.h -src\objc\nntp\MCONNTPFetchAllArticlesOperation.h -src\objc\nntp\MCONNTPListNewsgroupsOperation.h -src\objc\nntp\MCONNTPFetchOverviewOperation.h -src\objc\nntp\MCONNTPFetchServerTimeOperation.h -src\objc\nntp\MCONNTPPostOperation.h -src\objc\nntp\MCONNTPGroupInfo.h -src\objc\provider\MCOProvider.h -src\objc\provider\MCONetService.h -src\objc\provider\MCOMailProvider.h -src\objc\provider\MCOMailProvidersManager.h -src\objc\provider\MCOAccountValidator.h diff --git a/build-windows/mailcore2/mailcore2/mailcore2.vcxproj b/build-windows/mailcore2/mailcore2/mailcore2.vcxproj index 040d7fe4e..d187fe7eb 100644 --- a/build-windows/mailcore2/mailcore2/mailcore2.vcxproj +++ b/build-windows/mailcore2/mailcore2/mailcore2.vcxproj @@ -27,6 +27,7 @@ + @@ -101,6 +102,7 @@ + @@ -117,6 +119,7 @@ + @@ -156,8 +159,10 @@ + + @@ -193,6 +198,7 @@ + @@ -297,8 +303,10 @@ + + @@ -332,26 +340,26 @@ DynamicLibrary true - v120 + v142 Unicode DynamicLibrary true - v120 + v142 Unicode DynamicLibrary false - v120 + v142 true Unicode DynamicLibrary false - v120 + v142 true Unicode @@ -376,12 +384,14 @@ true + C:\Library\libxml2-development\usr\include\libxml2;C:\Library\icu-64\usr\include;C:\Library\Developer\Platforms\Windows.platform\Developer\SDKs\Windows.sdk\usr\lib\swift;..\..\include;$(IncludePath) false false + C:\Library\libxml2-development\usr\include\libxml2;C:\Library\icu-64\usr\include;C:\Library\Developer\Platforms\Windows.platform\Developer\SDKs\Windows.sdk\usr\lib\swift;..\..\include;$(IncludePath) @@ -404,15 +414,15 @@ NotUsing Level3 Disabled - MAILCORE_DLL;ZLIB_DLL;_WINDLL;%(PreprocessorDefinitions) + MAILCORE_DLL;ZLIB_DLL;_WINDLL;_CRT_SECURE_NO_WARNINGS;_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS;TIDY_STATIC;%(PreprocessorDefinitions) true - %(AdditionalIncludeDirectories);$(MSBuildThisFileDirectory);..\..\include;..\..\..\Externals\include;..\..\..\src\core\basetypes;..\..\..\src\core\zip;..\..\..\src\core\zip\minizip;..\..\..\src\core\renderer;..\..\..\src\core/rfc822;..\..\..\src\core/imap;..\..\..\src\core\abstract;..\..\..\src\core\security;..\..\..\src\core\imap;..\..\..\src\core\pop;..\..\..\src\core\nntp;..\..\..\src\core\smtp + %(AdditionalIncludeDirectories);..\..\..\Externals\include;..\..\..\src\core\basetypes;..\..\..\src\core\zip;..\..\..\src\core\zip\minizip;..\..\..\src\core\renderer;..\..\..\src\core\rfc822;..\..\..\src\core\imap;..\..\..\src\core\abstract;..\..\..\src\core\security;..\..\..\src\core\pop;..\..\..\src\core\nntp;..\..\..\src\core\smtp;..\..\..\src\async\imap;..\..\..\src\async\smtp;..\..\..\src\async\pop Windows true - Crypt32.lib;libtidy.lib;libxml2.lib;ssleay32MD.lib;libeay32MD.lib;zlib.lib;User32.lib;Ws2_32.lib;libctemplate.lib;kernel32.lib;libetpan.lib;pthreadVC2.lib;icudt.lib;icuin.lib;icuio.lib;icule.lib;iculx.lib;icuuc.lib;%(AdditionalDependencies) - ..\..\..\Externals\lib64;..\..\..\Externals\lib\x64 + Crypt32.lib;rdtidys.lib;libxml2s.lib;libeay32MD.lib;zlib.lib;Ws2_32.lib;libctemplate.lib;libetpan.lib;icudt64.lib;icuuc64.lib;icuin64.lib;%(AdditionalDependencies) + C:\Library\icu-64\usr\lib;C:\Library\libxml2-development\usr\lib;..\..\..\Externals\lib64;..\..\..\Externals\lib\x64 @@ -442,17 +452,17 @@ MaxSpeed true true - MAILCORE_DLL;ZLIB_DLL;_WINDLL;%(PreprocessorDefinitions) + MAILCORE_DLL;ZLIB_DLL;_CRT_SECURE_NO_WARNINGS;_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS;TIDY_STATIC;%(PreprocessorDefinitions) true - %(AdditionalIncludeDirectories);$(MSBuildThisFileDirectory);..\..\include;..\..\..\Externals\include;..\..\..\src\core\basetypes;..\..\..\src\core\zip;..\..\..\src\core\zip\minizip;..\..\..\src\core\renderer;..\..\..\src\core/rfc822;..\..\..\src\core/imap;..\..\..\src\core\abstract;..\..\..\src\core\security;..\..\..\src\core\imap;..\..\..\src\core\pop;..\..\..\src\core\nntp;..\..\..\src\core\smtp + %(AdditionalIncludeDirectories);..\..\..\Externals\include;..\..\..\src\core\basetypes;..\..\..\src\core\zip;..\..\..\src\core\zip\minizip;..\..\..\src\core\renderer;..\..\..\src\core\rfc822;..\..\..\src\core\imap;..\..\..\src\core\abstract;..\..\..\src\core\security;..\..\..\src\core\pop;..\..\..\src\core\nntp;..\..\..\src\core\smtp;..\..\..\src\async\imap;..\..\..\src\async\smtp;..\..\..\src\async\pop Windows true true true - Crypt32.lib;libtidy.lib;libxml2.lib;ssleay32MD.lib;libeay32MD.lib;zlib.lib;User32.lib;Ws2_32.lib;libctemplate.lib;kernel32.lib;libetpan.lib;pthreadVC2.lib;icudt.lib;icuin.lib;icuio.lib;icule.lib;iculx.lib;icuuc.lib;%(AdditionalDependencies) - ..\..\..\Externals\lib64;..\..\..\Externals\lib\x64 + Crypt32.lib;rdtidys.lib;libxml2s.lib;libeay32MD.lib;zlib.lib;Ws2_32.lib;libctemplate.lib;libetpan.lib;icudt64.lib;icuuc64.lib;icuin64.lib;%(AdditionalDependencies) + C:\Library\icu-64\usr\lib;C:\Library\libxml2-development\usr\lib;..\..\..\Externals\lib64;..\..\..\Externals\lib\x64 diff --git a/build-windows/mailcore2/mailcore2/mailcore2.vcxproj.filters b/build-windows/mailcore2/mailcore2/mailcore2.vcxproj.filters index 8354e6bdc..936c9db69 100644 --- a/build-windows/mailcore2/mailcore2/mailcore2.vcxproj.filters +++ b/build-windows/mailcore2/mailcore2/mailcore2.vcxproj.filters @@ -561,6 +561,21 @@ Source Files\async\imap + + Source Files\async\imap + + + Source Files\core\provider + + + Source Files\core\provider + + + Source Files\core\basetypes + + + Source Files\core\basetypes + @@ -962,6 +977,15 @@ Source Files\async\imap + + Source Files\async\imap + + + Source Files\core\provider + + + Source Files\core\provider + diff --git a/build-windows/vs2019/ctemplate/include/template_cache.h b/build-windows/vs2019/ctemplate/include/template_cache.h new file mode 100644 index 000000000..6971d2af4 --- /dev/null +++ b/build-windows/vs2019/ctemplate/include/template_cache.h @@ -0,0 +1,381 @@ +// Copyright (c) 2009, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// +// This file implements the Template Cache used to store templates. + +#ifndef TEMPLATE_TEMPLATE_CACHE_H_ +#define TEMPLATE_TEMPLATE_CACHE_H_ + +#include // for stdext::hash_map<> +#include // for string +#include // for pair +#include // for vector<> +#include // for ExpandEmitter, etc +#include // for Strip +#include +#include +namespace ctemplate { +class FileStat; +} +class Mutex; +class TemplateCacheUnittest; + +// NOTE: if you are statically linking the template library into your binary +// (rather than using the template .dll), set '/D CTEMPLATE_DLL_DECL=' +// as a compiler flag in your project file to turn off the dllimports. +#ifndef CTEMPLATE_DLL_DECL +# define CTEMPLATE_DLL_DECL __declspec(dllimport) +#endif + +// #ifdef CTEMPLATE_DLL_DECL +// extern template class __declspec(dllimport) std::allocator; +// extern template class __declspec(dllimport) std::vector; +// #else +// template class __declspec(dllexport) std::allocator; +// template class __declspec(dllexport) std::vector; +// #endif + +namespace ctemplate { + +class PerExpandData; +class Template; +class TemplateCachePeer; +class TemplateDictionaryInterface; + +// A cache to store parsed templates. +class CTEMPLATE_DLL_DECL TemplateCache { + public: + TemplateCache(); + ~TemplateCache(); + + // ---- CREATING A TEMPLATE OBJECT ------- + // LoadTemplate + // StringToTemplateCache + + // Attempts to load the template object stored under its filename, + // into the template cache. It first checks if the object is already + // in the cache. Any object retrieved from the cache is then + // checked to see if its status is marked for "reload if changed." + // If so, ReloadIfChanged is called on the retrieved object. Returns + // true if the object is loaded. Also returns true if the object + // already exists, and no reload was required. + // + // When it fails to retrieve one from the cache, it creates a new + // template object, passing the filename and 'strip' values to the + // constructor. (See constructor below for the meaning of the + // flags.) If it succeeds in creating an object, including loading + // and parsing the associated template file, the object is stored in + // the cache, and the method returns true. + // + // If it fails in loading and parsing the template file, either + // because the file was not found or it contained syntax errors, + // then the newly created object is deleted and the method returns + // false. (NOTE: This description is much longer and less precise + // and probably harder to understand than the method itself. Read + // the code.) + // + // To enable Auto-Escape on that template, place the corresponding + // AUTOESCAPE pragma at the top of the template file. The template + // will then be Auto-Escaped independently of the template it may be + // included from or the templates it may include. + // + // 'Strip' indicates how to handle whitespace when expanding the + // template. DO_NOT_STRIP keeps the template exactly as-is. + // STRIP_BLANK_LINES elides all blank lines in the template. + // STRIP_WHITESPACE elides all blank lines, and also all whitespace + // at either the beginning or end of a line. See template constructor + // for more details. + bool LoadTemplate(const TemplateString& filename, Strip strip); + + // Parses the string as a template file (e.g. "Hello {{WORLD}}"), + // and inserts it into the parsed template cache, so it can later be + // used by the user. The user specifies a key and a strip, which are + // later passed in to expand the template. + // Returns true if the template was successfully parsed and + // inserted to the template cache, or false otherwise. In particular, + // we return false if a string was already cached with the given key. + // NOTE: to include this template from within another template (via + // "{{>TEMPLATE_THAT_COMES_FROM_A_STRING}}"), the argument you pass + // to TemplateDictionary::SetFilename() is the key you used to register + // the string-template. + bool StringToTemplateCache(const TemplateString& key, + const TemplateString& content, + Strip strip); + bool StringToTemplateCache(const TemplateString& key, + const char* content, + size_t content_len, + Strip strip) { + return StringToTemplateCache(key, + TemplateString(content, content_len), + strip); + } + + // ---- EXPANDING A TEMPLATE ------- + // ExpandWithData + // ExpandFrozen + + // This returns false if the expand failed for some reason: filename + // could not be found on disk (and isn't already in the cache), or + // the template is mal-formed, or a sub-included template couldn't + // be found. Note that even if it returns false, it may have emitted + // some output to ExpandEmitter, before it noticed the problem. + bool ExpandWithData(const TemplateString& filename, Strip strip, + const TemplateDictionaryInterface *dictionary, + PerExpandData* per_expand_data, + ExpandEmitter* output); + bool ExpandWithData(const TemplateString& filename, Strip strip, + const TemplateDictionaryInterface* dictionary, + PerExpandData* per_expand_data, + std::string* output_buffer) { + if (output_buffer == NULL) return false; + StringEmitter e(output_buffer); + return ExpandWithData(filename, strip, dictionary, per_expand_data, &e); + } + + // Const version of ExpandWithData, intended for use with frozen + // caches. This method returns false if the requested + // template-filename is not found in the cache, rather than fetching + // the template from disk and continuing, as ExpandWithData does. + // (That is why the method can be const.) Likewise, it will return + // false, rather than fetch, if any sub-included template filename + // is not found in the cache. + // Unfortunately, the only way to enforce this last requirement at + // the moment is to have the template-cache be Frozen(). So that + // is a pre-requisite for calling this method. It may be relaxed + // in the future (if we rewrite the control flow to pass around the + // necessary state). + // Like ExpandWithData(), this may write partial results into output + // even if it returns false (due to template error or file not found). + bool ExpandNoLoad(const TemplateString& filename, Strip strip, + const TemplateDictionaryInterface *dictionary, + PerExpandData* per_expand_data, + ExpandEmitter* output) const; + bool ExpandNoLoad(const TemplateString& filename, Strip strip, + const TemplateDictionaryInterface* dictionary, + PerExpandData* per_expand_data, + std::string* output_buffer) const { + if (output_buffer == NULL) return false; + StringEmitter e(output_buffer); + return ExpandNoLoad(filename, strip, dictionary, per_expand_data, &e); + } + + // ---- FINDING A TEMPLATE FILE ------- + + // Sets the root directory for all templates used by the program. + // After calling this method, the filename passed to GetTemplate may + // be a relative pathname (no leading '/'), in which case this + // root-directory is prepended to the filename. This clears the old + // 'main' root directory, and also all alternate root directories + // that may had been added previously. + bool SetTemplateRootDirectory(const std::string& directory); + + // Adds an additional search path for all templates used by the + // program. You may call this multiple times. + bool AddAlternateTemplateRootDirectory(const std::string& directory); + + // Returns the 'main' root directory set by SetTemplateRootDirectory(). + std::string template_root_directory() const; + + // Given an unresolved filename, look through the template search + // path to see if the template can be found. If so, return the path + // of the resolved filename, otherwise return an empty string. + std::string FindTemplateFilename(const std::string& unresolved) + const; + + // ---- MANAGING THE CACHE ------- + // Freeze + // Delete + // ClearCache + // ReloadAllIfChanged + // Clone + + // Marks the template cache as immutable. After this method is called, + // the cache can no longer be modified by loading new templates or + // reloading existing templates. During expansion only cached + // included templates will be used, they won't be loaded on-demand. + void Freeze(); + + // Delete + // Deletes one template object from the cache, if it exists. + // This can be used for either file- or string-based templates. + // Returns true if the object was deleted, false otherwise. + bool Delete(const TemplateString& key); + + // ClearCache + // Deletes all the template objects in the cache and all raw + // contents cached from StringToTemplateCache. This should only + // be done once, just before exiting the program and after all + // template expansions are completed. (If you want to refresh the + // cache, the correct method to use is ReloadAllIfChanged, not + // this one.) Note: this method is not necessary unless you are + // testing for memory leaks. Calling this before exiting the + // program will prevent unnecessary reporting in that case. + void ClearCache(); + + // ReloadAllIfChanged + // If IMMEDIATE_RELOAD, reloads and parses all templates right away, + // if the corresponding template files have changed. + // If LAZY_RELOAD, then sets the reload bit on all templates. + // Subsequent call to GetTemplate() checks if file has changed, and if so + // reloads and parses the file into the cache. + // + // IMMEDIATE_RELOAD gives a more consistent snapshot of the current + // templates, since all templates in the cache are reloaded at + // (approximately) the same time. On the other hand, LAZY_RELOAD + // causes less of a latency spike, since it does not require + // loading lots of templates from disk at the same time. If in + // doubt, LAZY_RELOAD is probably a better choice. + + // If a file with the same name as an existing template-file, is added + // in another search path, ReloadAllIfChanged will pick up the file in the + // earlier search-path. + enum ReloadType { LAZY_RELOAD, IMMEDIATE_RELOAD }; + void ReloadAllIfChanged(ReloadType reload_tyle); + + // Clone + // Returns a copy of the cache. It makes a shallow copy of the + // parsed_template_cache_, incrementing refcount of templates. + // The caller is responsible for deallocating the returned TemplateCache. + // NOTE(user): Annotalysis expects this method to have a lock for + // a TemplateCache instance local to the method, but we + // know that no other threads will have access to the + // instance, so ignore thread safety errors. + TemplateCache* Clone() const; + + // ---- INSPECTING THE CACHE ------- + // Dump + // DumpToString + // TODO(csilvers): implement these? + + private: + // TODO(csilvers): nix Template friend once Template::ReloadIfChanged is gone + friend class Template; // for ResolveTemplateFilename + friend class TemplateTemplateNode; // for ExpandLocked + friend class TemplateCachePeer; // for unittests + friend class ::TemplateCacheUnittest; // for unittests + + class RefcountedTemplate; + struct CachedTemplate; + class TemplateCacheHash; + class RefTplPtrHash; + // due to a bug(?) in MSVC, TemplateCachePeer won't compile unless this + // particular typedef is public. Ugh. + public: + typedef std::pair TemplateCacheKey; + private: + typedef stdext::hash_map + TemplateMap; + typedef stdext::hash_map TemplateCallMap; + // Where to search for files. + typedef std::vector TemplateSearchPath; + + // GetTemplate + // This method is deprecated. It exists here because it is called by + // Template::GetTemplate. Also this is used in tests. + const Template* GetTemplate(const TemplateString& key, Strip strip); + + bool ResolveTemplateFilename(const std::string& unresolved, + std::string* resolved, + FileStat* statbuf) const; + + // This is used only for internal (recursive) calls to Expand due + // to internal template-includes. It doesn't try to acquire the + // global template_lock again, in template.cc. + // TODO(csilvers): remove this when template.cc's g_template_lock goes away. + bool ExpandLocked(const TemplateString& filename, Strip strip, + ExpandEmitter* output, + const TemplateDictionaryInterface *dictionary, + PerExpandData* per_expand_data); + + bool AddAlternateTemplateRootDirectoryHelper( + const std::string& directory, + bool clear_template_search_path); + + // DoneWithGetTemplatePtrs + // For historical reasons, GetTemplate() returns a raw Template + // pointer rather than a refcounted pointer. So it's impossible + // for the user to call DecRef on the template when it's done + // using it. To make up for that, we provide this routine, which + // says "call DecRef()" on *all* Templates ever used by + // GetTemplate(). It's safe for the client to call this when it's + // done using all templates it's ever retrieved before (via + // GetTemplate). Most likely, the user will call this indirectly, + // via ClearCache(). + // TODO(panicker): Consider making this method public. + void DoneWithGetTemplatePtrs(); + + // ValidTemplateFilename + // Validates the user provided filename before constructing the template + bool IsValidTemplateFilename(const std::string& filename, + std::string* resolved_filename, + FileStat* statbuf) const; + + // GetTemplateLocked + // Internal version of GetTemplate. It's used when the function already + // has a write-lock on mutex_. It returns a pointer to a refcounted + // template (in the cache), or NULL if the template is not found. + // Its used by GetTemplate & ForceReloadAllIfChanged. + RefcountedTemplate* GetTemplateLocked( + const TemplateString& filename, + Strip strip, + const TemplateCacheKey& key); + + // Refcount + // Testing only. Returns the refcount of a template, given its cache key. + int Refcount(const TemplateCacheKey template_cache_key) const; + + // GetCachedTemplate + // Debug only. Returns whether the cache key is in the parsed cache. + bool TemplateIsCached(const TemplateCacheKey template_cache_key) const; + + TemplateMap* parsed_template_cache_; + bool is_frozen_; + TemplateSearchPath search_path_; + + // Since GetTemplate() returns a raw pointer, it's impossible for + // the caller to call DecRef() on the returned template when it's + // done using it. To make up for that, we store each retval of + // GetTemplate in this data structure. Then the user can call + // DecRef() on all of them at once, via a DoneWithGetTemplatePtrs() + // (which they will probably get at via a call to ClearCache()). + TemplateCallMap* get_template_calls_; + + Mutex* const mutex_; + Mutex* const search_path_mutex_; + + // Can't invoke copy constructor or assignment operator + TemplateCache(const TemplateCache&); + void operator=(const TemplateCache &); +}; + +} + +#endif // TEMPLATE_TEMPLATE_CACHE_H_ diff --git a/build-windows/vs2019/ctemplate/include/template_string.h b/build-windows/vs2019/ctemplate/include/template_string.h new file mode 100644 index 000000000..2d3762859 --- /dev/null +++ b/build-windows/vs2019/ctemplate/include/template_string.h @@ -0,0 +1,363 @@ +// Copyright (c) 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// --- +// Author: csilvers@google.com (Craig Silerstein) + +#ifndef TEMPLATE_TEMPLATE_STRING_H_ +#define TEMPLATE_TEMPLATE_STRING_H_ + +#include // for memcmp() and size_t +#include +#include +#include + +#include +#if 0 +#include // one place @ac_cv_unit64@ might live +#endif +#if 0 +#include // another place @ac_cv_unit64@ might live +#endif +#include // final place @ac_cv_unit64@ might live + +class TemplateStringTest; // needed for friendship declaration +class StaticTemplateStringTest; + +#if 0 +extern char _start[] __attribute__((weak)); // linker emits: start of .text +extern char data_start[] __attribute__((weak)); // start of .data +#endif + +// NOTE: if you are statically linking the template library into your binary +// (rather than using the template .dll), set '/D CTEMPLATE_DLL_DECL=' +// as a compiler flag in your project file to turn off the dllimports. +#ifndef CTEMPLATE_DLL_DECL +# define CTEMPLATE_DLL_DECL __declspec(dllimport) +#endif + +namespace ctemplate { + +// Most methods of TemplateDictionary take a TemplateString rather than a +// C++ string. This is for efficiency: it can avoid extra string copies. +// For any argument that takes a TemplateString, you can pass in any of: +// * A C++ string +// * A char* +// * A StringPiece +// * TemplateString(char*, length) +// The last of these is the most efficient, though it requires more work +// on the call site (you have to create the TemplateString explicitly). +class TemplateString; + +// If you have a string constant (e.g. the string literal "foo") that +// you need to pass into template routines repeatedly, it is more +// efficient if you convert it into a TemplateString only once. The +// way to do this is to use a global StaticTemplateString via STS_INIT +// (note: do this at global scope *only*!): +// static const StaticTemplateString kMyVar = STS_INIT(kMyVar, "MY_VALUE"); +struct StaticTemplateString; + +#define STS_INIT(name, str) STS_INIT_WITH_HASH(name, str, 0) + +// Let's define a convenient hash_compare function for hashing 'normal' +// strings: char* and string. We'll use MurmurHash, which is probably +// better than the STL default. We don't include TemplateString or +// StaticTemplateString here, since they are hashed more efficiently +// based on their id. +struct CTEMPLATE_DLL_DECL StringHash { + inline size_t operator()(const char* s) const { + return Hash(s, strlen(s)); + }; + + inline size_t operator()(const std::string& s) const { + return Hash(s.data(), s.size()); + } + + inline bool operator()(const char* a, const char* b) const { + return (a != b) && (strcmp(a, b) < 0); // <, for MSVC + } + + inline bool operator()(const std::string& a, const std::string& b) const { + return a < b; + } + + static const size_t bucket_size = 4; // These are required by MSVC + static const size_t min_buckets = 8; // 4 and 8 are the defaults + private: + size_t Hash(const char* s, size_t slen) const; +}; + +// ----------------------- THE CLASSES ------------------------------- + +typedef unsigned __int64 TemplateId; + +const TemplateId kIllegalTemplateId = 0; + +struct CTEMPLATE_DLL_DECL StaticTemplateString { + // Do not define a constructor! We use only brace-initialization, + // so the data is constructed at static-initialization time. + // Anything you want to put in a constructor, put in + // StaticTemplateStringInitializer instead. + + // These members shouldn't be accessed directly, except in the + // internals of the template code. They are public because that is + // the only way we can brace-initialize them. NOTE: MSVC (at least + // up to 8.0) has a bug where it ignores 'mutable' when it's buried + // in an internal struct. To fix that, we have to make this whole + // internal struct mutable. We only do this on MSVC, so on other + // compilers we get the full constness we want. +#ifdef _MSC_VER + mutable +#endif + struct { + const char* ptr_; + size_t length_; + mutable TemplateId id_; // sometimes lazily-initialized. + } do_not_use_directly_; + + // This class is a good hash_compare functor to pass in as the third + // argument to stdext::hash_map<>, when creating a map whose keys are + // StaticTemplateString. NOTE: This class isn't that safe to use, + // because it requires that StaticTemplateStringInitializer has done + // its job. Unfortunately, even when you use the STS_INIT macro + // (which is always, right??), dynamic initialiation does not happen + // in a particular order, and objects in different .cc files may + // reference a StaticTemplateString before the corresponding + // StaticTemplateStringInitializer sets the id. + struct Hasher { + inline size_t operator()(const StaticTemplateString& sts) const; + inline bool operator()(const StaticTemplateString& a, // <, for MSVC + const StaticTemplateString& b) const; + static const size_t bucket_size = 4; // These are required by MSVC + static const size_t min_buckets = 8; // 4 and 8 are the defaults + }; + + inline bool empty() const { + return do_not_use_directly_.length_ == 0; + } + + // Allows comparisons of StaticTemplateString objects as if they were + // strings. This is useful for STL. + inline bool operator==(const StaticTemplateString& x) const; +}; + +class CTEMPLATE_DLL_DECL TemplateString { + public: + TemplateString(const char* s) + : ptr_(s ? s : ""), length_(strlen(ptr_)), + is_immutable_(InTextSegment(ptr_)), id_(kIllegalTemplateId) { + } + TemplateString(const std::string& s) + : ptr_(s.data()), length_(s.size()), + is_immutable_(false), id_(kIllegalTemplateId) { + } + TemplateString(const char* s, size_t slen) + : ptr_(s), length_(slen), + is_immutable_(InTextSegment(s)), id_(kIllegalTemplateId) { + } + TemplateString(const StaticTemplateString& s) + : ptr_(s.do_not_use_directly_.ptr_), + length_(s.do_not_use_directly_.length_), + is_immutable_(true), id_(s.do_not_use_directly_.id_) { + } + + const char* begin() const { + return ptr_; + } + + const char* end() const { + return ptr_ + length_; + } + + const char* data() const { + return ptr_; + } + + size_t size() const { + return length_; + } + + inline bool empty() const { + return length_ == 0; + }; + + inline bool is_immutable() const { + return is_immutable_; + } + + // STL requires this to be public for hash_map, though I'd rather not. + inline bool operator==(const TemplateString& x) const { + return GetGlobalId() == x.GetGlobalId(); + } + + private: + // Only TemplateDictionaries and template expansion code can read these. + friend class TemplateDictionary; + friend class TemplateCache; // for GetGlobalId + friend class StaticTemplateStringInitializer; // for AddToGlo... + friend struct TemplateStringHasher; // for GetGlobalId + friend TemplateId GlobalIdForTest(const char* ptr, int len); + friend TemplateId GlobalIdForSTS_INIT(const TemplateString& s); + + TemplateString(const char* s, size_t slen, bool is_immutable, TemplateId id) + : ptr_(s), length_(slen), is_immutable_(is_immutable), id_(id) { + } + + // This returns true if s is in the .text segment of the binary. + // (Note this only checks .text of the main executable, not of + // shared libraries. So it may not be all that useful.) + // This requires the gnu linker (and probably elf), to define + // _start and data_start. + static bool InTextSegment(const char* s) { +#if 0 + return (s >= _start && s < data_start); // in .text +#else + return false; // the conservative choice: assume it's not static memory +#endif + } + + protected: + inline void CacheGlobalId() { // used by HashedTemplateString + id_ = GetGlobalId(); + }; + + private: + // Returns the global id, computing it for the first time if + // necessary. Note that since this is a const method, we don't + // store the computed value in id_, even if id_ is 0. + TemplateId GetGlobalId() const; + // Adds this TemplateString to the map from global-id to name. + void AddToGlobalIdToNameMap(); + + // Use sparingly. Converting to a string loses information about the + // id of the template string, making operations require extra hash_compare + // computations. + std::string ToString() const { return std::string(ptr_, length_); } + + // Does the reverse map from TemplateId to TemplateString contents. + // Returns a TemplateString(kStsEmpty) if id isn't found. Note that + // the TemplateString returned is not necessarily NUL terminated. + static TemplateString IdToString(TemplateId id); + + const char* ptr_; + size_t length_; + // Do we need to manage memory for this string? + bool is_immutable_; + // Id for hash_compare lookups. If 0, we don't have one and it should be + // computed as-needed. + TemplateId id_; +}; + +// ----------------------- THE CODE ------------------------------- + +// Use the low-bit from TemplateId as the "initialized" flag. Note +// that since all initialized TemplateId have the lower bit set, it's +// safe to have used 0 for kIllegalTemplateId, as we did above. +const TemplateId kTemplateStringInitializedFlag = 1; + +inline bool IsTemplateIdInitialized(TemplateId id) { + return id & kTemplateStringInitializedFlag; +} + +// This is a helper struct used in TemplateString::Hasher/TemplateStringHasher +struct TemplateIdHasher { + size_t operator()(TemplateId id) const { + // The shift has two effects: it randomizes the "initialized" flag, + // and slightly improves the randomness of the low bits. This is + // slightly useful when size_t is 32 bits, or when using a small + // hash_compare tables with power-of-2 sizes. + return static_cast(id ^ (id >> 33)); + } + bool operator()(TemplateId a, TemplateId b) const { // <, for MSVC + return a < b; + } + static const size_t bucket_size = 4; // These are required by MSVC + static const size_t min_buckets = 8; // 4 and 8 are the defaults +}; + + +inline size_t StaticTemplateString::Hasher::operator()( + const StaticTemplateString& sts) const { + TemplateId id = sts.do_not_use_directly_.id_; + assert(IsTemplateIdInitialized(id)); + return TemplateIdHasher()(id); +} + +inline bool StaticTemplateString::Hasher::operator()( + const StaticTemplateString& a, const StaticTemplateString& b) const { + TemplateId id_a = a.do_not_use_directly_.id_; + TemplateId id_b = b.do_not_use_directly_.id_; + assert(IsTemplateIdInitialized(id_a)); + assert(IsTemplateIdInitialized(id_b)); + return TemplateIdHasher()(id_a, id_b); +} + +inline bool StaticTemplateString::operator==( + const StaticTemplateString& x) const { + return (do_not_use_directly_.length_ == x.do_not_use_directly_.length_ && + (do_not_use_directly_.ptr_ == x.do_not_use_directly_.ptr_ || + memcmp(do_not_use_directly_.ptr_, x.do_not_use_directly_.ptr_, + do_not_use_directly_.length_) == 0)); +} + +// We set up as much of StaticTemplateString as we can at +// static-initialization time (using brace-initialization), but some +// things can't be set up then. This class is for those things; it +// runs at dynamic-initialization time. If you add logic here, only +// do so as an optimization: this may be called rather late (though +// before main), so other code should not depend on this being called +// before them. +class CTEMPLATE_DLL_DECL StaticTemplateStringInitializer { + public: + // This constructor operates on a const StaticTemplateString - we should + // only change those things that are mutable. + explicit StaticTemplateStringInitializer(const StaticTemplateString* sts); +}; + +// Don't use this. This is used only in auto-generated .varnames.h files. +#define STS_INIT_WITH_HASH(name, str, hash_compare) \ + { { str, sizeof("" str "")-1, hash_compare } }; \ + namespace ctemplate_sts_init { \ + static const ctemplate::StaticTemplateStringInitializer name##_init(&name); \ + } + +// We computed this hash_compare value for the empty string online. In debug +// mode, we verify it's correct during runtime (that is, that we +// verify the hash_compare function used by make_tpl_varnames_h hasn't changed +// since we computed this number). Note this struct is logically +// static, but since it's in a .h file, we don't say 'static' but +// instead rely on the linker to provide the POD-with-internal-linkage +// magic. +const StaticTemplateString kStsEmpty = + STS_INIT_WITH_HASH(kStsEmpty, "", 1457976849674613049ULL); + +} + + +#endif // TEMPLATE_TEMPLATE_STRING_H_ diff --git a/build-windows/vs2019/ctemplate/libctemplate.vcxproj b/build-windows/vs2019/ctemplate/libctemplate.vcxproj new file mode 100644 index 000000000..27e18fa72 --- /dev/null +++ b/build-windows/vs2019/ctemplate/libctemplate.vcxproj @@ -0,0 +1,331 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {FB27FBDB-E6C0-4D00-A7F8-1EEEF1B48ABC} + libctemplate + Win32Proj + + + + DynamicLibrary + v143 + MultiByte + + + DynamicLibrary + v143 + MultiByte + + + DynamicLibrary + v143 + MultiByte + + + DynamicLibrary + v143 + MultiByte + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>12.0.30501.0 + + + $(SolutionDir)$(Configuration)\ + $(Configuration)\ + true + + + true + + + $(SolutionDir)$(Configuration)\ + $(Configuration)\ + false + + + false + + + + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBCTEMPLATE_EXPORTS;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + + Level3 + EditAndContinue + ../../src/windows/include;../../src/windows + + + $(OutDir)libctemplate-debug.dll + true + $(OutDir)libctemplate-debug.pdb + Windows + $(OutDir)libctemplate-debug.lib + MachineX86 + + + + + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBCTEMPLATE_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + ProgramDatabase + ../../src/windows/include;../../src/windows + + + $(OutDir)libctemplate-debug.dll + true + $(OutDir)libctemplate-debug.pdb + Windows + $(OutDir)libctemplate-debug.lib + + + + + WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBCTEMPLATE_EXPORTS;%(PreprocessorDefinitions) + MultiThreaded + + Level3 + ProgramDatabase + ../../src/windows/include;../../src/windows + + + $(OutDir)libctemplate.dll + true + Windows + true + true + $(OutDir)libctemplate.lib + MachineX86 + + + + + WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBCTEMPLATE_EXPORTS;%(PreprocessorDefinitions) + MultiThreaded + + + Level3 + ProgramDatabase + ../../src/windows/include;../../src/windows + + + $(OutDir)libctemplate.dll + true + Windows + true + true + $(OutDir)libctemplate.lib + + + + + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDebugDLL + MultiThreadedDebugDLL + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDLL + MultiThreadedDLL + + + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDebugDLL + MultiThreadedDebugDLL + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDLL + MultiThreadedDLL + + + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDebugDLL + MultiThreadedDebugDLL + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDLL + MultiThreadedDLL + + + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDebugDLL + MultiThreadedDebugDLL + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDLL + MultiThreadedDLL + + + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDebugDLL + MultiThreadedDebugDLL + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDLL + MultiThreadedDLL + + + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDebugDLL + MultiThreadedDebugDLL + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDLL + MultiThreadedDLL + + + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDebugDLL + MultiThreadedDebugDLL + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDLL + MultiThreadedDLL + + + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDebugDLL + MultiThreadedDebugDLL + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDLL + MultiThreadedDLL + + + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDebugDLL + MultiThreadedDebugDLL + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDLL + MultiThreadedDLL + + + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDebugDLL + MultiThreadedDebugDLL + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDLL + MultiThreadedDLL + + + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDebugDLL + MultiThreadedDebugDLL + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDLL + MultiThreadedDLL + + + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDebugDLL + MultiThreadedDebugDLL + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDLL + MultiThreadedDLL + + + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDebugDLL + MultiThreadedDebugDLL + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDLL + MultiThreadedDLL + + + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDebugDLL + MultiThreadedDebugDLL + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + ..\..\src\windows; ..\..\src;%(AdditionalIncludeDirectories) + MultiThreadedDLL + MultiThreadedDLL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/build-windows/vs2019/libetpan/libetpan.vcxproj b/build-windows/vs2019/libetpan/libetpan.vcxproj new file mode 100644 index 000000000..dc91da535 --- /dev/null +++ b/build-windows/vs2019/libetpan/libetpan.vcxproj @@ -0,0 +1,614 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {BA4DED3C-E56F-4484-BFC3-9C13E461A1BE} + libetpan + Win32Proj + + + + DynamicLibrary + v142 + MultiByte + + + DynamicLibrary + v142 + MultiByte + + + DynamicLibrary + v142 + MultiByte + + + DynamicLibrary + v142 + MultiByte + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>12.0.30501.0 + + + true + + + true + + + true + + + true + + + + Disabled + Default + ../../src/data-types;../../src/driver;../../src/driver/interface;../../src/driver/tools;../../src/low-level/feed;../../src/low-level/imap;../../src/low-level/imf;../../src/low-level/maildir;../../src/low-level/mbox;../../src/low-level/mh;../../src/low-level/mime;../../src/low-level/nntp;../../src/low-level/pop3;../../src/low-level/smtp;../../src/windows;../../src/main;..;../include;../../src/driver/implementation/pop3;../../third-party/include;%(AdditionalIncludeDirectories) + HAVE_ZLIB;USE_SASL;USE_SSL;WIN32;_WINDOWS;_USRDLL;LIBETPAN_DLL;USE_SSL;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + NotUsing + Level3 + EditAndContinue + CompileAsC + 4996; 4267;%(DisableSpecificWarnings) + ../StdAfx.h;%(ForcedIncludeFiles) + + + + /DLL %(AdditionalOptions) + sasl2.lib;zlib.lib;Ws2_32.lib;libssl.lib;libcrypto.lib;%(AdditionalDependencies) + true + ../../third-party/lib;%(AdditionalLibraryDirectories) + C;%(IgnoreSpecificDefaultLibraries) + + true + $(OutDir)libetpan.pdb + true + NotSet + false + + MachineX86 + + + + + Disabled + Default + ../../src/data-types;../../src/driver;../../src/driver/interface;../../src/driver/tools;../../src/low-level/feed;../../src/low-level/imap;../../src/low-level/imf;../../src/low-level/maildir;../../src/low-level/mbox;../../src/low-level/mh;../../src/low-level/mime;../../src/low-level/nntp;../../src/low-level/pop3;../../src/low-level/smtp;../../src/windows;../../src/main;..;../include;../../src/driver/implementation/pop3;../../third-party/include;%(AdditionalIncludeDirectories) + HAVE_ZLIB;USE_SASL;USE_SSL;WIN32;_WINDOWS;_USRDLL;LIBETPAN_DLL;USE_SSL;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebugDLL + NotUsing + Level3 + ProgramDatabase + CompileAsC + 4996; 4267;%(DisableSpecificWarnings) + ../StdAfx.h;%(ForcedIncludeFiles) + + + + /DLL %(AdditionalOptions) + sasl2.lib;zlib.lib;Ws2_32.lib;libssl.lib;libcrypto.lib;%(AdditionalDependencies) + true + ../../third-party/lib64;%(AdditionalLibraryDirectories) + C;%(IgnoreSpecificDefaultLibraries) + + + true + $(OutDir)libetpan.pdb + true + NotSet + false + + + + + + + ../../src/data-types;../../src/driver;../../src/driver/interface;../../src/driver/tools;../../src/low-level/feed;../../src/low-level/imap;../../src/low-level/imf;../../src/low-level/maildir;../../src/low-level/mbox;../../src/low-level/mh;../../src/low-level/mime;../../src/low-level/nntp;../../src/low-level/pop3;../../src/low-level/smtp;../../src/windows;../../src/main;..;../include;../../src/driver/implementation/pop3;../../third-party/include;%(AdditionalIncludeDirectories) + HAVE_ZLIB;USE_SASL;USE_SSL;WIN32;_WINDOWS;_USRDLL;LIBETPAN_DLL;USE_SSL;%(PreprocessorDefinitions) + MultiThreadedDLL + NotUsing + Level3 + + CompileAsC + 4996; 4267;%(DisableSpecificWarnings) + ../StdAfx.h;%(ForcedIncludeFiles) + + + + /DLL %(AdditionalOptions) + sasl2.lib;zlib.lib;Ws2_32.lib;libssl.lib;libcrypto.lib;%(AdditionalDependencies) + ../../third-party/lib;%(AdditionalLibraryDirectories) + C;%(IgnoreSpecificDefaultLibraries) + true + $(OutDir)libetpan.pdb + NotSet + true + true + false + + MachineX86 + + + + + ../../src/data-types;../../src/driver;../../src/driver/interface;../../src/driver/tools;../../src/low-level/feed;../../src/low-level/imap;../../src/low-level/imf;../../src/low-level/maildir;../../src/low-level/mbox;../../src/low-level/mh;../../src/low-level/mime;../../src/low-level/nntp;../../src/low-level/pop3;../../src/low-level/smtp;../../src/windows;../../src/main;..;../include;../../src/driver/implementation/pop3;../../third-party/include;%(AdditionalIncludeDirectories) + HAVE_ZLIB;USE_SASL;USE_SSL;WIN32;_WINDOWS;_USRDLL;LIBETPAN_DLL;USE_SSL;%(PreprocessorDefinitions) + MultiThreadedDLL + NotUsing + Level3 + + + CompileAsC + 4996; 4267;%(DisableSpecificWarnings) + ../StdAfx.h;%(ForcedIncludeFiles) + + + + /DLL %(AdditionalOptions) + sasl2.lib;zlib.lib;Ws2_32.lib;libssl.lib;libcrypto.lib;%(AdditionalDependencies) + ../../third-party/lib64;%(AdditionalLibraryDirectories) + C;%(IgnoreSpecificDefaultLibraries) + true + $(OutDir)libetpan.pdb + NotSet + true + true + false + + + + + + + cd .. +build_headers.bat + + cd .. +build_headers.bat + + %(RootDir)%(Directory)\_headers_depends;%(Outputs) + %(RootDir)%(Directory)\_headers_depends;%(Outputs) + cd .. +build_headers.bat + + cd .. +build_headers.bat + + %(RootDir)%(Directory)\_headers_depends;%(Outputs) + %(RootDir)%(Directory)\_headers_depends;%(Outputs) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CompileAsCpp + CompileAsCpp + CompileAsCpp + CompileAsCpp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/configure-headers.sh b/configure-headers.sh new file mode 100755 index 000000000..a31b71c15 --- /dev/null +++ b/configure-headers.sh @@ -0,0 +1,254 @@ +#!/bin/sh + +set -ex + +cd src + +cp MailCore.h ./include/MailCore + +cp core/MCCore.h ./include/MailCore + +cp core/abstract/MCAbstract.h ./include/MailCore +cp core/abstract/MCAbstractMessage.h ./include/MailCore +cp core/abstract/MCAbstractMessagePart.h ./include/MailCore +cp core/abstract/MCAbstractMultipart.h ./include/MailCore +cp core/abstract/MCAbstractPart.h ./include/MailCore +cp core/abstract/MCAddress.h ./include/MailCore +cp core/abstract/MCMessageConstants.h ./include/MailCore +cp core/abstract/MCMessageHeader.h ./include/MailCore +cp core/abstract/MCErrorMessage.h ./include/MailCore + +cp core/basetypes/MCArray.h ./include/MailCore +cp core/basetypes/MCAssert.h ./include/MailCore +cp core/basetypes/MCAutoreleasePool.h ./include/MailCore +cp core/basetypes/MCBaseTypes.h ./include/MailCore +cp core/basetypes/MCBasicLock.h ./include/MailCore +cp core/basetypes/MCConnectionLogger.h ./include/MailCore +cp core/basetypes/MCData.h ./include/MailCore +cp core/basetypes/MCDataDecoderUtils.h ./include/MailCore +cp core/basetypes/MCHash.h ./include/MailCore +cp core/basetypes/MCHashMap.h ./include/MailCore +cp core/basetypes/MCHTMLCleaner.h ./include/MailCore +cp core/basetypes/MCICUTypes.h ./include/MailCore +cp core/basetypes/MCIndexSet.h ./include/MailCore +cp core/basetypes/MCIterator.h ./include/MailCore +cp core/basetypes/MCJSON.h ./include/MailCore +cp core/basetypes/MCLibetpan.h ./include/MailCore +cp core/basetypes/MCLibetpanTypes.h ./include/MailCore +cp core/basetypes/MCLog.h ./include/MailCore +cp core/basetypes/MCNull.h ./include/MailCore +cp core/basetypes/MCObject.h ./include/MailCore +cp core/basetypes/MCOperation.h ./include/MailCore +cp core/basetypes/MCOperationCallback.h ./include/MailCore +cp core/basetypes/MCOperationQueue.h ./include/MailCore +cp core/basetypes/MCRange.h ./include/MailCore +cp core/basetypes/MCSet.h ./include/MailCore +cp core/basetypes/MCString.h ./include/MailCore +cp core/basetypes/MCUtils.h ./include/MailCore +cp core/basetypes/MCValue.h ./include/MailCore +cp core/basetypes/MCDataStreamDecoder.h ./include/MailCore +cp core/basetypes/MCDefines.h ./include/MailCore +cp core/basetypes/MCMD5.h ./include/MailCore +cp core/basetypes/MCOperationQueueCallback.h ./include/MailCore +cp core/basetypes/MCBase64.h ./include/MailCore +cp core/basetypes/MCLock.h ./include/MailCore +cp core/basetypes/MCMainThread.h ./include/MailCore +cp core/basetypes/MCWin32.h ./include/MailCore + +cp core/imap/MCIMAP.h ./include/MailCore +cp core/imap/MCIMAPFolder.h ./include/MailCore +cp core/imap/MCIMAPFolderStatus.h ./include/MailCore +cp core/imap/MCIMAPIdentity.h ./include/MailCore +cp core/imap/MCIMAPMessage.h ./include/MailCore +cp core/imap/MCIMAPMessagePart.h ./include/MailCore +cp core/imap/MCIMAPMultipart.h ./include/MailCore +cp core/imap/MCIMAPNamespace.h ./include/MailCore +cp core/imap/MCIMAPNamespaceItem.h ./include/MailCore +cp core/imap/MCIMAPPart.h ./include/MailCore +cp core/imap/MCIMAPProgressCallback.h ./include/MailCore +cp core/imap/MCIMAPSearchExpression.h ./include/MailCore +cp core/imap/MCIMAPSession.h ./include/MailCore +cp core/imap/MCIMAPSyncResult.h ./include/MailCore + +cp core/nntp/MCNNTP.h ./include/MailCore +cp core/nntp/MCNNTPGroupInfo.h ./include/MailCore +cp core/nntp/MCNNTPProgressCallback.h ./include/MailCore +cp core/nntp/MCNNTPSession.h ./include/MailCore + +cp core/pop/MCPOP.h ./include/MailCore +cp core/pop/MCPOPMessageInfo.h ./include/MailCore +cp core/pop/MCPOPProgressCallback.h ./include/MailCore +cp core/pop/MCPOPSession.h ./include/MailCore + +cp core/provider/MCAccountValidator.h ./include/MailCore +cp core/provider/MCMailProvider.h ./include/MailCore +cp core/provider/MCMailProvidersManager.h ./include/MailCore +cp core/provider/MCNetService.h ./include/MailCore +cp core/provider/MCProvider.h ./include/MailCore +cp core/provider/MCMXRecordResolverOperation.h ./include/MailCore + +cp core/renderer/MCAddressDisplay.h ./include/MailCore +cp core/renderer/MCDateFormatter.h ./include/MailCore +cp core/renderer/MCHTMLBodyRendererTemplateCallback.h ./include/MailCore +cp core/renderer/MCHTMLRenderer.h ./include/MailCore +cp core/renderer/MCHTMLRendererCallback.h ./include/MailCore +cp core/renderer/MCRenderer.h ./include/MailCore +cp core/renderer/MCHTMLRendererIMAPDataCallback.h ./include/MailCore +cp core/renderer/MCSizeFormatter.h ./include/MailCore + +cp core/rfc822/MCAttachment.h ./include/MailCore +cp core/rfc822/MCMessageBuilder.h ./include/MailCore +cp core/rfc822/MCMessageParser.h ./include/MailCore +cp core/rfc822/MCMessagePart.h ./include/MailCore +cp core/rfc822/MCMultipart.h ./include/MailCore +cp core/rfc822/MCRFC822.h ./include/MailCore + +cp core/smtp/MCSMTP.h ./include/MailCore +cp core/smtp/MCSMTPProgressCallback.h ./include/MailCore +cp core/smtp/MCSMTPSession.h ./include/MailCore + +cp core/zip/MCZip.h ./include/MailCore + +cp async/MCAsync.h ./include/MailCore + +cp async/imap/MCAsyncIMAP.h ./include/MailCore +cp async/imap/MCIMAPAppendMessageOperation.h ./include/MailCore +cp async/imap/MCIMAPAsyncSession.h ./include/MailCore +cp async/imap/MCIMAPCapabilityOperation.h ./include/MailCore +cp async/imap/MCIMAPCheckAccountOperation.h ./include/MailCore +cp async/imap/MCIMAPCopyMessagesOperation.h ./include/MailCore +cp async/imap/MCIMAPCustomCommandOperation.h ./include/MailCore +cp async/imap/MCIMAPFetchContentOperation.h ./include/MailCore +cp async/imap/MCIMAPFetchContentToFileOperation.h ./include/MailCore +cp async/imap/MCIMAPFetchFoldersOperation.h ./include/MailCore +cp async/imap/MCIMAPFetchMessagesOperation.h ./include/MailCore +cp async/imap/MCIMAPFetchNamespaceOperation.h ./include/MailCore +cp async/imap/MCIMAPFetchParsedContentOperation.h ./include/MailCore +cp async/imap/MCIMAPFolderInfo.h ./include/MailCore +cp async/imap/MCIMAPFolderInfoOperation.h ./include/MailCore +cp async/imap/MCIMAPFolderStatusOperation.h ./include/MailCore +cp async/imap/MCIMAPIdentityOperation.h ./include/MailCore +cp async/imap/MCIMAPIdleOperation.h ./include/MailCore +cp async/imap/MCIMAPMessageRenderingOperation.h ./include/MailCore +cp async/imap/MCIMAPMoveMessagesOperation.h ./include/MailCore +cp async/imap/MCIMAPOperation.h ./include/MailCore +cp async/imap/MCIMAPOperationCallback.h ./include/MailCore +cp async/imap/MCIMAPQuotaOperation.h ./include/MailCore +cp async/imap/MCIMAPSearchOperation.h ./include/MailCore +cp async/imap/MCIMAPAsyncConnection.h ./include/MailCore +cp async/imap/MCIMAPConnectOperation.h ./include/MailCore +cp async/imap/MCIMAPCreateFolderOperation.h ./include/MailCore +cp async/imap/MCIMAPDeleteFolderOperation.h ./include/MailCore +cp async/imap/MCIMAPDisconnectOperation.h ./include/MailCore +cp async/imap/MCIMAPExpungeOperation.h ./include/MailCore +cp async/imap/MCIMAPMultiDisconnectOperation.h ./include/MailCore +cp async/imap/MCIMAPNoopOperation.h ./include/MailCore +cp async/imap/MCIMAPRenameFolderOperation.h ./include/MailCore +cp async/imap/MCIMAPStoreFlagsOperation.h ./include/MailCore +cp async/imap/MCIMAPStoreLabelsOperation.h ./include/MailCore +cp async/imap/MCIMAPSubscribeFolderOperation.h ./include/MailCore + +cp async/nntp/MCAsyncNNTP.h ./include/MailCore +cp async/nntp/MCNNTPAsyncSession.h ./include/MailCore +cp async/nntp/MCNNTPFetchAllArticlesOperation.h ./include/MailCore +cp async/nntp/MCNNTPFetchArticleOperation.h ./include/MailCore +cp async/nntp/MCNNTPFetchHeaderOperation.h ./include/MailCore +cp async/nntp/MCNNTPFetchOverviewOperation.h ./include/MailCore +cp async/nntp/MCNNTPFetchServerTimeOperation.h ./include/MailCore +cp async/nntp/MCNNTPListNewsgroupsOperation.h ./include/MailCore +cp async/nntp/MCNNTPOperation.h ./include/MailCore +cp async/nntp/MCNNTPOperationCallback.h ./include/MailCore +cp async/nntp/MCNNTPPostOperation.h ./include/MailCore +cp async/nntp/MCNNTPCheckAccountOperation.h ./include/MailCore +cp async/nntp/MCNNTPDisconnectOperation.h ./include/MailCore + +cp async/pop/MCAsyncPOP.h ./include/MailCore +cp async/pop/MCPOPAsyncSession.h ./include/MailCore +cp async/pop/MCPOPFetchHeaderOperation.h ./include/MailCore +cp async/pop/MCPOPFetchMessageOperation.h ./include/MailCore +cp async/pop/MCPOPFetchMessagesOperation.h ./include/MailCore +cp async/pop/MCPOPOperation.h ./include/MailCore +cp async/pop/MCPOPOperationCallback.h ./include/MailCore +cp async/pop/MCPOPCheckAccountOperation.h ./include/MailCore +cp async/pop/MCPOPDeleteMessagesOperation.h ./include/MailCore +cp async/pop/MCPOPNoopOperation.h ./include/MailCore + +cp async/smtp/MCAsyncSMTP.h ./include/MailCore +cp async/smtp/MCSMTPAsyncSession.h ./include/MailCore +cp async/smtp/MCSMTPOperation.h ./include/MailCore +cp async/smtp/MCSMTPOperationCallback.h ./include/MailCore +cp async/smtp/MCSMTPCheckAccountOperation.h ./include/MailCore +cp async/smtp/MCSMTPDisconnectOperation.h ./include/MailCore +cp async/smtp/MCSMTPLoginOperation.h ./include/MailCore +cp async/smtp/MCSMTPNoopOperation.h ./include/MailCore +cp async/smtp/MCSMTPSendWithDataOperation.h ./include/MailCore + +cp c/CBase.h ./include/MailCore +cp c/CCore.h ./include/MailCore +cp c/CMailCore.h ./include/MailCore + +cp c/abstract/CAbstractMessage.h ./include/MailCore +cp c/abstract/CAbstractMessagePart.h ./include/MailCore +cp c/abstract/CAbstractMessageRendererCallback.h ./include/MailCore +cp c/abstract/CAbstractMessageRendererCallbackWrapper.h ./include/MailCore +cp c/abstract/CAbstractMultipart.h ./include/MailCore +cp c/abstract/CAbstractPart.h ./include/MailCore +cp c/abstract/CAddress.h ./include/MailCore +cp c/abstract/CMessageConstants.h ./include/MailCore +cp c/abstract/CMessageHeader.h ./include/MailCore + +cp c/basetypes/CArray.h ./include/MailCore +cp c/basetypes/CData.h ./include/MailCore +cp c/basetypes/CDictionary.h ./include/MailCore +cp c/basetypes/CIndexSet.h ./include/MailCore +cp c/basetypes/CObject.h ./include/MailCore +cp c/basetypes/MailCoreString.h ./include/MailCore + +cp c/rfc822/CAttachment.h ./include/MailCore +cp c/rfc822/CMessageBuilder.h ./include/MailCore +cp c/rfc822/CMessageParser.h ./include/MailCore +cp c/rfc822/CMessagePart.h ./include/MailCore +cp c/rfc822/CMultipart.h ./include/MailCore + +cp c/provider/CMailProvider.h ./include/MailCore +cp c/provider/CMailProvidersManager.h ./include/MailCore +cp c/provider/CNetService.h ./include/MailCore + +cp c/smtp/CSMTPOperation.h ./include/MailCore +cp c/smtp/CSMTPSession.h ./include/MailCore + +cp c/imap/CIMAPAppendMessageOperation.h ./include/MailCore +cp c/imap/CIMAPAsyncSession.h ./include/MailCore +cp c/imap/CIMAPBaseOperation.h ./include/MailCore +cp c/imap/CIMAPCapabilityOperation.h ./include/MailCore +cp c/imap/CIMAPCheckAccountOperation.h ./include/MailCore +cp c/imap/CIMAPCopyMessagesOperation.h ./include/MailCore +cp c/imap/CIMAPCustomCommandOperation.h ./include/MailCore +cp c/imap/CIMAPFetchContentOperation.h ./include/MailCore +cp c/imap/CIMAPFetchContentToFileOperation.h ./include/MailCore +cp c/imap/CIMAPFetchFoldersOperation.h ./include/MailCore +cp c/imap/CIMAPFetchMessagesOperation.h ./include/MailCore +cp c/imap/CIMAPFetchNamespaceOperation.h ./include/MailCore +cp c/imap/CIMAPFetchParsedContentOperation.h ./include/MailCore +cp c/imap/CIMAPFolder.h ./include/MailCore +cp c/imap/CIMAPFolderInfo.h ./include/MailCore +cp c/imap/CIMAPFolderInfoOperation.h ./include/MailCore +cp c/imap/CIMAPFolderStatus.h ./include/MailCore +cp c/imap/CIMAPFolderStatusOperation.h ./include/MailCore +cp c/imap/CIMAPIdentity.h ./include/MailCore +cp c/imap/CIMAPIdentityOperation.h ./include/MailCore +cp c/imap/CIMAPIdleOperation.h ./include/MailCore +cp c/imap/CIMAPMessage.h ./include/MailCore +cp c/imap/CIMAPMessagePart.h ./include/MailCore +cp c/imap/CIMAPMessageRenderingOperation.h ./include/MailCore +cp c/imap/CIMAPMoveMessagesOperation.h ./include/MailCore +cp c/imap/CIMAPMultipart.h ./include/MailCore +cp c/imap/CIMAPNamespace.h ./include/MailCore +cp c/imap/CIMAPNamespaceItem.h ./include/MailCore +cp c/imap/CIMAPPart.h ./include/MailCore +cp c/imap/CIMAPQuotaOperation.h ./include/MailCore +cp c/imap/CIMAPSearchExpression.h ./include/MailCore +cp c/imap/CIMAPSearchOperation.h ./include/MailCore + +cp c/utils/COperation.h ./include/MailCore +cp c/utils/CAutoreleasePool.h ./include/MailCore diff --git a/mailcore2-ios.podspec.json b/mailcore2-ios.podspec.json index 3fc54d344..1e81e66ee 100644 --- a/mailcore2-ios.podspec.json +++ b/mailcore2-ios.podspec.json @@ -1,9 +1,9 @@ { "name": "mailcore2-ios", - "version": "0.6.4", + "version": "0.6.3", "summary": "Mailcore 2 for iOS", "description": "MailCore 2 provide a simple and asynchronous API to work with e-mail protocols IMAP, POP and SMTP.", - "homepage": "http://libmailcore.com", + "homepage": "https://github.com/MailCore/mailcore2", "license": { "type": "BSD", "file": "LICENSE" @@ -23,4 +23,4 @@ "vendored_libraries": "cocoapods-build/lib/libMailCore-ios.a", "libraries": ["xml2", "iconv", "z", "c++", "resolv"], "prepare_command": "./scripts/build-mailcore2-ios-cocoapod.sh" -} \ No newline at end of file +} diff --git a/mailcore2-osx.podspec.json b/mailcore2-osx.podspec.json index 83ad7cfbc..1258a02cb 100644 --- a/mailcore2-osx.podspec.json +++ b/mailcore2-osx.podspec.json @@ -1,9 +1,9 @@ { "name": "mailcore2-osx", - "version": "0.6.4", + "version": "0.6.3", "summary": "Mailcore 2 for OS X", "description": "MailCore 2 provide a simple and asynchronous API to work with e-mail protocols IMAP, POP and SMTP.", - "homepage": "http://libmailcore.com", + "homepage": "https://github.com/MailCore/mailcore2", "license": { "type": "BSD", "file": "LICENSE" @@ -23,4 +23,4 @@ "vendored_libraries": "cocoapods-build/lib/libMailCore.a", "libraries": ["sasl2", "tidy", "xml2", "iconv", "z", "c++", "crypto", "ssl", "resolv"], "prepare_command": "./scripts/build-mailcore2-osx-cocoapod.sh" -} \ No newline at end of file +} diff --git a/resources/providers.json b/resources/providers.json index 8223e189f..2bf039d34 100644 --- a/resources/providers.json +++ b/resources/providers.json @@ -593,30 +593,15 @@ "imap": [ { "port": 993, - "hostname": "mail.messagingengine.com", + "hostname": "imap.fastmail.com", "ssl": true - }, - { - "port": 143, - "hostname": "mail.messagingengine.com", - "starttls": true } ], "smtp": [ - { - "port": 587, - "hostname": "mail.messagingengine.com", - "starttls": true - }, { "port": 465, - "hostname": "mail.messagingengine.com", + "hostname": "smtp.fastmail.com", "ssl": true - }, - { - "port": 25, - "hostname - 2": "mail.messagingengine.com", - "starttls": true } ] }, @@ -970,12 +955,12 @@ ], "smtp": [ { - "port": 25, + "port": 587, "hostname": "smtp-mail.outlook.com", "starttls": true }, { - "port": 587, + "port": 25, "hostname": "smtp-mail.outlook.com", "starttls": true } @@ -1037,7 +1022,7 @@ "drafts": "Drafts", "allmail": "Archive", "spam": "Junk", - "sentmail": "Sent Messages", + "sentmail": "Sent", "trash": "Deleted" } }, @@ -1417,4 +1402,4 @@ "trash": "Deleted Items" } } -} \ No newline at end of file +} diff --git a/scripts/build-ctemplate-ios.sh b/scripts/build-ctemplate-ios.sh index 43561617d..cf2843d2e 100755 --- a/scripts/build-ctemplate-ios.sh +++ b/scripts/build-ctemplate-ios.sh @@ -12,6 +12,7 @@ name="ctemplate-ios" xcode_target="ctemplate-ios" xcode_project="ctemplate.xcodeproj" library="libctemplate-ios.a" +xcframework="libctemplate-ios.xcframework" embedded_deps="" build_git_ios diff --git a/scripts/build-libetpan-ios.sh b/scripts/build-libetpan-ios.sh index 8134a8c51..988c4d4b3 100755 --- a/scripts/build-libetpan-ios.sh +++ b/scripts/build-libetpan-ios.sh @@ -1,4 +1,5 @@ #!/bin/sh +set -x pushd "`dirname "$0"`" > /dev/null scriptpath="`pwd`" @@ -6,12 +7,13 @@ popd > /dev/null . "$scriptpath/include.sh/build-dep.sh" -url="https://github.com/dinhviethoa/libetpan.git" -rev=5164ba2ebd3c7cbc7a9230aad32bdf8e24e207de +url="git@github.com:readdle/libetpan.git" +rev=3655f4ddfecb663f15d06568b06e01ac5de8986f name="libetpan-ios" xcode_target="libetpan ios" xcode_project="libetpan.xcodeproj" library="libetpan-ios.a" +xcframework="libetpan-ios.xcframework" embedded_deps="libsasl-ios" build_git_ios diff --git a/scripts/build-libetpan-osx.sh b/scripts/build-libetpan-osx.sh index 34bb365b8..c7ebb604d 100755 --- a/scripts/build-libetpan-osx.sh +++ b/scripts/build-libetpan-osx.sh @@ -1,4 +1,5 @@ #!/bin/sh +set -x pushd "`dirname "$0"`" > /dev/null scriptpath="`pwd`" @@ -6,8 +7,8 @@ popd > /dev/null . "$scriptpath/include.sh/build-dep.sh" -url="https://github.com/dinhviethoa/libetpan.git" -rev=5164ba2ebd3c7cbc7a9230aad32bdf8e24e207de +url="git@github.com:readdle/libetpan.git" +rev=3655f4ddfecb663f15d06568b06e01ac5de8986f name="libetpan-osx" xcode_target="static libetpan" xcode_project="libetpan.xcodeproj" diff --git a/scripts/deps-versions.plist b/scripts/deps-versions.plist index 0eedb4ba8..d2b548666 100644 --- a/scripts/deps-versions.plist +++ b/scripts/deps-versions.plist @@ -3,13 +3,13 @@ ctemplate-ios - 4 + 5 ctemplate-osx - 3 + 4 libetpan-ios - 21 + 26 libetpan-osx - 21 + 25 mailcore2-framework-osx 9 mailcore2-ios diff --git a/scripts/get-ios.sh b/scripts/get-ios.sh index 69ba63070..52614d466 100755 --- a/scripts/get-ios.sh +++ b/scripts/get-ios.sh @@ -1,4 +1,5 @@ #!/bin/sh +set -x pushd "`dirname "$0"`" > /dev/null scriptpath="`pwd`" diff --git a/scripts/get-mac.sh b/scripts/get-mac.sh index 7f015eda8..c9b34d82b 100755 --- a/scripts/get-mac.sh +++ b/scripts/get-mac.sh @@ -1,4 +1,5 @@ #!/bin/sh +set -x pushd "`dirname "$0"`" > /dev/null scriptpath="`pwd`" diff --git a/scripts/include.sh/build-dep-cocoapod.sh b/scripts/include.sh/build-dep-cocoapod.sh index 952fa3c54..8bf116d48 100755 --- a/scripts/include.sh/build-dep-cocoapod.sh +++ b/scripts/include.sh/build-dep-cocoapod.sh @@ -1,4 +1,5 @@ #!/bin/sh +set -x build_git_ios() { @@ -135,7 +136,7 @@ build_git_ios() build_git_osx() { - sdk="`xcodebuild -showsdks 2>/dev/null | grep macosx | sed 's/.*macosx\(.*\)/\1/'`" + sdk="`xcodebuild -showsdks 2>/dev/null | grep macosx | grep -v driverkit | sed 's/.*macosx\(.*\)/\1/'`" archs="x86_64" sdkminversion="10.7" @@ -248,7 +249,7 @@ build_git_osx() get_prebuilt_dep() { - url="http://d.etpan.org/mailcore2-deps" + url="https://prebuild.readdle.com/mailcore2-deps" if test "x$name" = x ; then return diff --git a/scripts/include.sh/build-dep.sh b/scripts/include.sh/build-dep.sh index 8d12fcf21..59f6aeb85 100755 --- a/scripts/include.sh/build-dep.sh +++ b/scripts/include.sh/build-dep.sh @@ -1,4 +1,5 @@ #!/bin/sh +set -x build_git_ios() { @@ -6,10 +7,10 @@ build_git_ios() return fi - simarchs="i386 x86_64" - sdkminversion="7.0" - sdkversion="`xcodebuild -showsdks 2>/dev/null | grep iphoneos | sed 's/.*iphoneos\(.*\)/\1/'`" - devicearchs="armv7 armv7s arm64" + simarchs="x86_64 arm64" + sdkminversion="11.0" + sdkversion="`xcodebuild -showsdks 2>/dev/null | grep 'sdk iphoneos' | sed 's/.*iphoneos\(.*\)/\1/'`" + devicearchs="arm64" versions_path="$scriptpath/deps-versions.plist" version="`defaults read "$versions_path" "$name" 2>/dev/null`" @@ -104,9 +105,11 @@ build_git_ios() else mv Release-iphoneos/include "$name-$version/$name" fi - lipo -create "Release-iphoneos/$library" \ - "Release-iphonesimulator/$library" \ - -output "$name-$version/$name/lib/$library" + xcodebuild -create-xcframework \ + -library "Release-iphoneos/$library" \ + -library "Release-iphonesimulator/$library" \ + -output "$name-$version/$name/lib/$xcframework" + for dep in $embedded_deps ; do if test -d "$srcdir/$name/build-mac/$dep" ; then mv "$srcdir/$name/build-mac/$dep" "$name-$version" @@ -155,8 +158,8 @@ build_git_ios() build_git_osx() { - sdk="`xcodebuild -showsdks 2>/dev/null | grep macosx | sed 's/.*macosx\(.*\)/\1/'`" - archs="x86_64" + sdk="`xcodebuild -showsdks 2>/dev/null | grep macosx | grep -v driverkit | sed 's/.*macosx\(.*\)/\1/'`" + archs="x86_64 arm64" sdkminversion="10.7" if test "x$name" = x ; then @@ -289,7 +292,7 @@ build_git_osx() get_prebuilt_dep() { - url="http://d.etpan.org/mailcore2-deps" + url="https://prebuild.readdle.com/mailcore2-deps" if test "x$name" = x ; then return @@ -322,7 +325,12 @@ get_prebuilt_dep() mkdir -p "$tempbuilddir" cd "$tempbuilddir" echo "Downloading $name-$version" - curl -O "$url/$name/$name-$version.zip" + curl --fail -O "$url/$name/$name-$version.zip" + if test x$? != x0 ; then + echo failed + exit 1 + fi + unzip -q "$name-$version.zip" rm -rf "$scriptpath/../Externals/$name" cd "$name-$version" @@ -338,4 +346,4 @@ get_prebuilt_dep() defaults write "$installed_versions_path" "$name" "$version" plutil -convert xml1 "$installed_versions_path" fi -} \ No newline at end of file +} diff --git a/scripts/travis/script.sh b/scripts/travis/script.sh index fb66a5a9d..f63432359 100755 --- a/scripts/travis/script.sh +++ b/scripts/travis/script.sh @@ -2,7 +2,7 @@ set -e IOSSDK="`xcodebuild -showsdks 2>/dev/null | grep iphoneos | sed 's/.*iphoneos\(.*\)/\1/'`" -OSXSDK="`xcodebuild -showsdks 2>/dev/null | grep macosx | sed 's/.*macosx\(.*\)/\1/'`" +OSXSDK="`xcodebuild -showsdks 2>/dev/null | grep macosx | grep -v driverkit | sed 's/.*macosx\(.*\)/\1/'`" IPHONESDK=iphoneos$IOSSDK SIMULATORSDK=iphonesimulator$IOSSDK MACSDK=macosx$OSXSDK @@ -22,22 +22,22 @@ uname if test x"`uname`" = xDarwin ; then echo Building library for iPhoneOS - xctool -project build-mac/mailcore2.xcodeproj -sdk $IPHONESDK -scheme "static mailcore2 ios" build ARCHS="armv7 armv7s arm64" + xcodebuild -project build-mac/mailcore2.xcodeproj -sdk $IPHONESDK -scheme "static mailcore2 ios" build ARCHS="armv7 armv7s arm64" >/dev/null echo Building library for iPhoneSimulator - xctool -project build-mac/mailcore2.xcodeproj -sdk $SIMULATORSDK -scheme "static mailcore2 ios" build ARCHS="i386 x86_64" + xcodebuild -project build-mac/mailcore2.xcodeproj -sdk $SIMULATORSDK -scheme "static mailcore2 ios" build ARCHS="i386 x86_64" >/dev/null #echo Link test for iPhoneOS #xcodebuild -project build-mac/mailcore2.xcodeproj -sdk iphoneos7.1 -target "test-ios" CODE_SIGN_IDENTITY="" build echo Link test for iPhoneSimulator - xctool -project build-mac/mailcore2.xcodeproj -sdk $SIMULATORSDK -scheme "test-ios" build ARCHS="i386 x86_64" + xcodebuild -project build-mac/mailcore2.xcodeproj -sdk $SIMULATORSDK -scheme "test-ios" build ARCHS="i386 x86_64" echo Building library for Mac - xctool -project build-mac/mailcore2.xcodeproj -sdk $MACSDK -scheme "static mailcore2 osx" build + xcodebuild -project build-mac/mailcore2.xcodeproj -sdk $MACSDK -scheme "static mailcore2 osx" build >/dev/null echo Building framework for Mac - xctool -project build-mac/mailcore2.xcodeproj -sdk $MACSDK -scheme "mailcore osx" build + xcodebuild -project build-mac/mailcore2.xcodeproj -sdk $MACSDK -scheme "mailcore osx" build >/dev/null echo Link test for Mac - xctool -project build-mac/mailcore2.xcodeproj -sdk $MACSDK -scheme "tests" build + xcodebuild -project build-mac/mailcore2.xcodeproj -sdk $MACSDK -scheme "tests" build >/dev/null echo Unit Tests for Mac - xctool -project build-mac/mailcore2.xcodeproj -sdk $MACSDK -scheme "unittest" test + xcodebuild -project build-mac/mailcore2.xcodeproj -sdk $MACSDK -scheme "unittest" test >/dev/null fi echo Testing CMake build diff --git a/src/AbstractMessageRendererCallbackWrapper.h b/src/AbstractMessageRendererCallbackWrapper.h new file mode 100644 index 000000000..6504f406a --- /dev/null +++ b/src/AbstractMessageRendererCallbackWrapper.h @@ -0,0 +1,17 @@ +// +// AbstractMessageRendererCallbackWrapper.h +// mailcore2 +// +// Created by Andrew on 8/2/17. +// Copyright © 2017 MailCore. All rights reserved. +// + +#ifndef AbstractMessageRendererCallbackWrapper_h +#define AbstractMessageRendererCallbackWrapper_h +#ifdef __cplusplus +class AbstractMessageRendererCallback : public mailcore::Object, public mailcore::HTMLRendererTemplateCallback, public mailcore::HTMLRendererIMAPCallback { + +} + +#endif +#endif /* AbstractMessageRendererCallbackWrapper_h */ diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 858d796d6..6b2c5a807 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,6 +1,7 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON) -set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") + include(public-headers) include(core) include(async) @@ -24,23 +25,115 @@ SET_SOURCE_FILES_PROPERTIES( PROPERTIES LANGUAGE C ) +set(MAILCORE2_PUBLIC_HEADERS_DIR "${CMAKE_CURRENT_BINARY_DIR}/include") + file(COPY ${public_headers} DESTINATION - "${CMAKE_CURRENT_BINARY_DIR}/include/MailCore" + "${MAILCORE2_PUBLIC_HEADERS_DIR}/MailCore" ) -include_directories("${CMAKE_CURRENT_BINARY_DIR}/include" - ${async_includes} - ${core_includes} - ${objc_includes} +include_directories( ${additional_includes} ${GLIB2_INCLUDE_DIRS} ) -add_library(MailCore +if(WIN32) + set(MAILCORE2_LIB_TARGET mailcore2) +else() + set(MAILCORE2_LIB_TARGET MailCore) +endif() + +add_library(${MAILCORE2_LIB_TARGET} ${core_files} ${async_files} ${objc_files} ) + +target_include_directories(${MAILCORE2_LIB_TARGET} + PUBLIC + ${MAILCORE2_PUBLIC_HEADERS_DIR} + PRIVATE + ${async_includes} + ${core_includes} + ${objc_includes} +) + +if(WIN32) + + # mailcore2 + + target_compile_options(${MAILCORE2_LIB_TARGET} PRIVATE /GS- /Oy /Gw /Gy /GR -fblocks) + target_link_options(${MAILCORE2_LIB_TARGET} PRIVATE /INCREMENTAL:NO) + target_compile_definitions(${MAILCORE2_LIB_TARGET} + PRIVATE + MAILCORE_DLL + ZLIB_DLL + _WINDLL + _CRT_SECURE_NO_WARNINGS + _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS + _UNICODE + UNICODE) + + target_link_libraries(${MAILCORE2_LIB_TARGET} + PRIVATE + ${LIBETPAN_LIBRARY} + ${CTEMPLATE_LIBRARY} + ${TIDY_LIBRARY} + ${LIBXML_LIBRARY} + ${OPENSSL_CRYPTO_LIBRARY} + ${ZLIB_LIBRARY} + ${ICU4C_UC_LIBRARY} + ${ICU4C_IN_LIBRARY} + ${DISPATCH_LIBRARY} + ${DISPATCH_BLOCKS_LIBRARY} + ws2_32 + Crypt32 + ) + + + # CMailCore + + include(cmailcore-public-headers) + include(c) + + add_library(CMailCore ${c_files}) + + target_compile_options(CMailCore PRIVATE /GS- /Oy /Gw /Gy /GR -fblocks) + target_link_options(CMailCore PRIVATE /INCREMENTAL:NO) + target_compile_definitions(CMailCore + PRIVATE + CMAILCORE_DLL + _UNICODE + UNICODE + SWIFT + ) + target_include_directories(CMailCore PRIVATE ${c_includes}) + + target_link_libraries(CMailCore + PRIVATE + ${MAILCORE2_LIB_TARGET} + ${DISPATCH_LIBRARY} + ${DISPATCH_BLOCKS_LIBRARY} + ) + + # Install + + install(DIRECTORY + "${MAILCORE2_PUBLIC_HEADERS_DIR}/MailCore" + DESTINATION + include + ) + + install(TARGETS + ${MAILCORE2_LIB_TARGET} + CMailCore + RUNTIME DESTINATION bin + ARCHIVE DESTINATION lib + ) + + install(FILES ${CMAILCORE_HEADERS} DESTINATION include/CMailCore) + install(FILES ${CMAILCORE_MODULEMAP} DESTINATION include/CMailCore) + +endif() diff --git a/src/MailCore.h b/src/MailCore.h index 8b0897f01..80ec3b2ed 100644 --- a/src/MailCore.h +++ b/src/MailCore.h @@ -12,6 +12,109 @@ #include #include -#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #endif diff --git a/src/async/imap/MCIMAPAppendMessageOperation.cpp b/src/async/imap/MCIMAPAppendMessageOperation.cpp index 69ed5c5fd..ecabbc128 100644 --- a/src/async/imap/MCIMAPAppendMessageOperation.cpp +++ b/src/async/imap/MCIMAPAppendMessageOperation.cpp @@ -67,7 +67,7 @@ void IMAPAppendMessageOperation::setCustomFlags(Array * customFlags) Array * IMAPAppendMessageOperation::customFlags() { - return customFlags(); + return mCustomFlags; } void IMAPAppendMessageOperation::setDate(time_t date) @@ -87,7 +87,7 @@ uint32_t IMAPAppendMessageOperation::createdUID() void IMAPAppendMessageOperation::main() { - ErrorCode error; + ErrorCode error = ErrorNone; if (mMessageFilepath != NULL) { session()->session()->appendMessageWithCustomFlagsAndDate(folder(), mMessageFilepath, mFlags, mCustomFlags, mDate, this, &mCreatedUID, &error); } diff --git a/src/async/imap/MCIMAPAsyncConnection.cpp b/src/async/imap/MCIMAPAsyncConnection.cpp index 4ae633ec7..8b9b07efb 100644 --- a/src/async/imap/MCIMAPAsyncConnection.cpp +++ b/src/async/imap/MCIMAPAsyncConnection.cpp @@ -57,14 +57,18 @@ namespace mailcore { virtual void queueStartRunning() { mConnection->setQueueRunning(true); - mConnection->owner()->operationRunningStateChanged(); + if (mConnection->owner()) { + mConnection->owner()->operationRunningStateChanged(); + } mConnection->queueStartRunning(); } virtual void queueStoppedRunning() { mConnection->setQueueRunning(false); mConnection->tryAutomaticDisconnect(); - mConnection->owner()->operationRunningStateChanged(); + if (mConnection->owner()) { + mConnection->owner()->operationRunningStateChanged(); + } mConnection->queueStoppedRunning(); } @@ -103,7 +107,7 @@ IMAPAsyncConnection::IMAPAsyncConnection() mQueue->setCallback(mQueueCallback); mOwner = NULL; mConnectionLogger = NULL; - pthread_mutex_init(&mConnectionLoggerLock, NULL); + MCB_LOCK_INIT(&mConnectionLoggerLock); mInternalLogger = new IMAPConnectionLogger(this); mAutomaticConfigurationEnabled = true; mQueueRunning = false; @@ -112,12 +116,12 @@ IMAPAsyncConnection::IMAPAsyncConnection() IMAPAsyncConnection::~IMAPAsyncConnection() { -#if __APPLE__ +#if MC_HAS_GCD cancelDelayedPerformMethodOnDispatchQueue((Object::Method) &IMAPAsyncConnection::tryAutomaticDisconnectAfterDelay, NULL, dispatchQueue()); #else cancelDelayedPerformMethod((Object::Method) &IMAPAsyncConnection::tryAutomaticDisconnectAfterDelay, NULL); #endif - pthread_mutex_destroy(&mConnectionLoggerLock); + MCB_LOCK_DESTROY(&mConnectionLoggerLock); MC_SAFE_RELEASE(mInternalLogger); MC_SAFE_RELEASE(mQueueCallback); MC_SAFE_RELEASE(mLastFolder); @@ -227,6 +231,16 @@ bool IMAPAsyncConnection::isVoIPEnabled() return mSession->isVoIPEnabled(); } +void IMAPAsyncConnection::setQResyncCompatible(bool compatible) +{ + mSession->setQResyncCompatible(compatible); +} + +bool IMAPAsyncConnection::isQResyncCompatible() +{ + return mSession->isQResyncCompatible(); +} + void IMAPAsyncConnection::setDefaultNamespace(IMAPNamespace * ns) { mSession->setDefaultNamespace(ns); @@ -277,10 +291,22 @@ void IMAPAsyncConnection::cancelAllOperations() mQueue->cancelAllOperations(); } +bool IMAPAsyncConnection::interruptCurrentCommand(IMAPOperation * operation) +{ + // Only for the operation the queue is executing right now - its command is the one holding this + // connection. A queued operation holds nothing yet, and one that has already finished no longer + // owns the stream, so cancelling on its behalf would cut somebody else's command. The queue + // settles that question and interrupts under its own lock. + // + // Deliberately not scheduled through mQueue as an operation: the point is to unblock the + // operation the queue is running, and a queued request would wait behind that very operation. + return mQueue->interruptRunningOperation(operation); +} + void IMAPAsyncConnection::runOperation(IMAPOperation * operation) { if (mScheduledAutomaticDisconnect) { -#if __APPLE__ +#if MC_HAS_GCD cancelDelayedPerformMethodOnDispatchQueue((Object::Method) &IMAPAsyncConnection::tryAutomaticDisconnectAfterDelay, NULL, dispatchQueue()); #else cancelDelayedPerformMethod((Object::Method) &IMAPAsyncConnection::tryAutomaticDisconnectAfterDelay, NULL); @@ -300,7 +326,7 @@ void IMAPAsyncConnection::tryAutomaticDisconnect() bool scheduledAutomaticDisconnect = mScheduledAutomaticDisconnect; if (scheduledAutomaticDisconnect) { -#if __APPLE__ +#if MC_HAS_GCD cancelDelayedPerformMethodOnDispatchQueue((Object::Method) &IMAPAsyncConnection::tryAutomaticDisconnectAfterDelay, NULL, dispatchQueue()); #else cancelDelayedPerformMethod((Object::Method) &IMAPAsyncConnection::tryAutomaticDisconnectAfterDelay, NULL); @@ -309,7 +335,7 @@ void IMAPAsyncConnection::tryAutomaticDisconnect() mOwner->retain(); mScheduledAutomaticDisconnect = true; -#if __APPLE__ +#if MC_HAS_GCD performMethodOnDispatchQueueAfterDelay((Object::Method) &IMAPAsyncConnection::tryAutomaticDisconnectAfterDelay, NULL, dispatchQueue(), 30); #else performMethodAfterDelay((Object::Method) &IMAPAsyncConnection::tryAutomaticDisconnectAfterDelay, NULL, 30); @@ -364,9 +390,9 @@ IMAPAsyncSession * IMAPAsyncConnection::owner() void IMAPAsyncConnection::setConnectionLogger(ConnectionLogger * logger) { - pthread_mutex_lock(&mConnectionLoggerLock); + MCB_LOCK(&mConnectionLoggerLock); mConnectionLogger = logger; - pthread_mutex_unlock(&mConnectionLoggerLock); + MCB_UNLOCK(&mConnectionLoggerLock); if (logger != NULL) { mSession->setConnectionLogger(mInternalLogger); } @@ -379,20 +405,20 @@ ConnectionLogger * IMAPAsyncConnection::connectionLogger() { ConnectionLogger * result; - pthread_mutex_lock(&mConnectionLoggerLock); + MCB_LOCK(&mConnectionLoggerLock); result = mConnectionLogger; - pthread_mutex_unlock(&mConnectionLoggerLock); + MCB_UNLOCK(&mConnectionLoggerLock); return result; } void IMAPAsyncConnection::logConnection(ConnectionLogType logType, Data * buffer) { - pthread_mutex_lock(&mConnectionLoggerLock); + MCB_LOCK(&mConnectionLoggerLock); if (mConnectionLogger != NULL) { mConnectionLogger->log(this, logType, buffer); } - pthread_mutex_unlock(&mConnectionLoggerLock); + MCB_UNLOCK(&mConnectionLoggerLock); } void IMAPAsyncConnection::setAutomaticConfigurationEnabled(bool enabled) @@ -416,7 +442,7 @@ void IMAPAsyncConnection::setQueueRunning(bool running) mQueueRunning = running; } -#if __APPLE__ +#if MC_HAS_GCD void IMAPAsyncConnection::setDispatchQueue(dispatch_queue_t dispatchQueue) { mQueue->setDispatchQueue(dispatchQueue); diff --git a/src/async/imap/MCIMAPAsyncConnection.h b/src/async/imap/MCIMAPAsyncConnection.h index c665b26d2..41b3ddd2f 100644 --- a/src/async/imap/MCIMAPAsyncConnection.h +++ b/src/async/imap/MCIMAPAsyncConnection.h @@ -69,6 +69,9 @@ namespace mailcore { virtual void setVoIPEnabled(bool enabled); virtual bool isVoIPEnabled(); + + virtual void setQResyncCompatible(bool compatible); + virtual bool isQResyncCompatible(); virtual void setAutomaticConfigurationEnabled(bool enabled); virtual bool isAutomaticConfigurationEnabled(); @@ -83,7 +86,7 @@ namespace mailcore { virtual void setConnectionLogger(ConnectionLogger * logger); virtual ConnectionLogger * connectionLogger(); -#ifdef __APPLE__ +#if MC_HAS_GCD virtual void setDispatchQueue(dispatch_queue_t dispatchQueue); virtual dispatch_queue_t dispatchQueue(); #endif @@ -100,7 +103,7 @@ namespace mailcore { IMAPAsyncSession * mOwner; ConnectionLogger * mConnectionLogger; IMAPConnectionLogger * mInternalLogger; - pthread_mutex_t mConnectionLoggerLock; + MCB_LOCK_TYPE mConnectionLoggerLock; bool mAutomaticConfigurationEnabled; bool mQueueRunning; bool mScheduledAutomaticDisconnect; @@ -112,6 +115,7 @@ namespace mailcore { virtual IMAPSession * session(); virtual void cancelAllOperations(); + virtual bool interruptCurrentCommand(IMAPOperation * operation); virtual unsigned int operationsCount(); virtual void setLastFolder(String * folder); diff --git a/src/async/imap/MCIMAPAsyncSession.cpp b/src/async/imap/MCIMAPAsyncSession.cpp index 58dc0dbb0..d29754e16 100644 --- a/src/async/imap/MCIMAPAsyncSession.cpp +++ b/src/async/imap/MCIMAPAsyncSession.cpp @@ -65,6 +65,7 @@ IMAPAsyncSession::IMAPAsyncSession() mConnectionType = ConnectionTypeClear; mCheckCertificateEnabled = true; mVoIPEnabled = true; + mQResyncCompatible = true; mDefaultNamespace = NULL; mTimeout = 30.; mConnectionLogger = NULL; @@ -72,8 +73,8 @@ IMAPAsyncSession::IMAPAsyncSession() mServerIdentity = new IMAPIdentity(); mClientIdentity = new IMAPIdentity(); mOperationQueueCallback = NULL; -#if __APPLE__ - mDispatchQueue = dispatch_get_main_queue(); +#if MC_HAS_GCD + mDispatchQueue = getMainQueue(); #endif mGmailUserDisplayName = NULL; mQueueRunning = false; @@ -82,7 +83,7 @@ IMAPAsyncSession::IMAPAsyncSession() IMAPAsyncSession::~IMAPAsyncSession() { -#if __APPLE__ +#if MC_HAS_GCD if (mDispatchQueue != NULL) { dispatch_release(mDispatchQueue); } @@ -198,6 +199,16 @@ bool IMAPAsyncSession::isVoIPEnabled() return mVoIPEnabled; } +void IMAPAsyncSession::setQResyncCompatible(bool compatible) +{ + mQResyncCompatible = compatible; +} + +bool IMAPAsyncSession::isQResyncCompatible() +{ + return mQResyncCompatible; +} + IMAPNamespace * IMAPAsyncSession::defaultNamespace() { return mDefaultNamespace; @@ -272,7 +283,7 @@ IMAPAsyncConnection * IMAPAsyncSession::session() session->setVoIPEnabled(mVoIPEnabled); session->setDefaultNamespace(mDefaultNamespace); session->setClientIdentity(mClientIdentity); -#if __APPLE__ +#if MC_HAS_GCD session->setDispatchQueue(mDispatchQueue); #endif #if 0 // should be implemented properly @@ -280,6 +291,7 @@ IMAPAsyncConnection * IMAPAsyncSession::session() session->setAutomaticConfigurationEnabled(false); } #endif + session->setQResyncCompatible(mQResyncCompatible); return session; } @@ -924,7 +936,7 @@ void IMAPAsyncSession::operationRunningStateChanged() } } -#if __APPLE__ +#if MC_HAS_GCD void IMAPAsyncSession::setDispatchQueue(dispatch_queue_t dispatchQueue) { if (mDispatchQueue != NULL) { diff --git a/src/async/imap/MCIMAPAsyncSession.h b/src/async/imap/MCIMAPAsyncSession.h index 054372073..76e8503b3 100644 --- a/src/async/imap/MCIMAPAsyncSession.h +++ b/src/async/imap/MCIMAPAsyncSession.h @@ -82,6 +82,9 @@ namespace mailcore { virtual void setVoIPEnabled(bool enabled); virtual bool isVoIPEnabled(); + virtual void setQResyncCompatible(bool compatible); + virtual bool isQResyncCompatible(); + virtual void setDefaultNamespace(IMAPNamespace * ns); virtual IMAPNamespace * defaultNamespace(); @@ -94,7 +97,7 @@ namespace mailcore { virtual void setConnectionLogger(ConnectionLogger * logger); virtual ConnectionLogger * connectionLogger(); -#ifdef __APPLE__ +#if MC_HAS_GCD virtual void setDispatchQueue(dispatch_queue_t dispatchQueue); virtual dispatch_queue_t dispatchQueue(); #endif @@ -203,6 +206,7 @@ namespace mailcore { ConnectionType mConnectionType; bool mCheckCertificateEnabled; bool mVoIPEnabled; + bool mQResyncCompatible; IMAPNamespace * mDefaultNamespace; time_t mTimeout; bool mAllowsFolderConcurrentAccessEnabled; @@ -213,7 +217,7 @@ namespace mailcore { IMAPIdentity * mClientIdentity; bool mQueueRunning; OperationQueueCallback * mOperationQueueCallback; -#if __APPLE__ +#if MC_HAS_GCD dispatch_queue_t mDispatchQueue; #endif String * mGmailUserDisplayName; @@ -226,7 +230,7 @@ namespace mailcore { virtual IMAPAsyncConnection * matchingSessionForFolder(String * folder); /*! Returns a session with minimum operation queue among already created ones. If @param filterByFolder is true, then function filters sessions with - predicate (lastFolder() EQUALS TO @param folder). In case of @param folder is NULL + predicate ( lastFolder() EQUALS TO @param folder ). In case of param folder is NULL the function would search a session among non-selected ones. */ virtual IMAPAsyncConnection * sessionWithMinQueue(bool filterByFolder, String * folder); /*! Returns existant or new session with empty operation queue, if it can. diff --git a/src/async/imap/MCIMAPCheckAccountOperation.cpp b/src/async/imap/MCIMAPCheckAccountOperation.cpp index 87e6a7050..b5b1cbd34 100644 --- a/src/async/imap/MCIMAPCheckAccountOperation.cpp +++ b/src/async/imap/MCIMAPCheckAccountOperation.cpp @@ -27,7 +27,7 @@ IMAPCheckAccountOperation::~IMAPCheckAccountOperation() void IMAPCheckAccountOperation::main() { - ErrorCode error; + ErrorCode error = ErrorNone; session()->session()->loginIfNeeded(&error); if (error != ErrorNone) { MC_SAFE_REPLACE_COPY(String, mLoginResponse, session()->session()->loginResponse()); diff --git a/src/async/imap/MCIMAPConnectOperation.cpp b/src/async/imap/MCIMAPConnectOperation.cpp index e4f71d035..df2e1d291 100644 --- a/src/async/imap/MCIMAPConnectOperation.cpp +++ b/src/async/imap/MCIMAPConnectOperation.cpp @@ -15,7 +15,7 @@ using namespace mailcore; void IMAPConnectOperation::main() { - ErrorCode error; + ErrorCode error = ErrorNone; session()->session()->connectIfNeeded(&error); setError(error); } diff --git a/src/async/imap/MCIMAPCopyMessagesOperation.cpp b/src/async/imap/MCIMAPCopyMessagesOperation.cpp index 87ef8e20b..87478c641 100644 --- a/src/async/imap/MCIMAPCopyMessagesOperation.cpp +++ b/src/async/imap/MCIMAPCopyMessagesOperation.cpp @@ -54,7 +54,7 @@ String * IMAPCopyMessagesOperation::destFolder() void IMAPCopyMessagesOperation::main() { - ErrorCode error; + ErrorCode error = ErrorNone; session()->session()->copyMessages(folder(), mUids, mDestFolder, &mUidMapping, &error); MC_SAFE_RETAIN(mUidMapping); setError(error); diff --git a/src/async/imap/MCIMAPCreateFolderOperation.cpp b/src/async/imap/MCIMAPCreateFolderOperation.cpp index d4e341fc6..512aa2dbc 100644 --- a/src/async/imap/MCIMAPCreateFolderOperation.cpp +++ b/src/async/imap/MCIMAPCreateFolderOperation.cpp @@ -23,7 +23,7 @@ IMAPCreateFolderOperation::~IMAPCreateFolderOperation() void IMAPCreateFolderOperation::main() { - ErrorCode error; + ErrorCode error = ErrorNone; session()->session()->createFolder(folder(), &error); setError(error); } diff --git a/src/async/imap/MCIMAPCustomCommandOperation.cpp b/src/async/imap/MCIMAPCustomCommandOperation.cpp index 3995d6aa4..4de3566b5 100644 --- a/src/async/imap/MCIMAPCustomCommandOperation.cpp +++ b/src/async/imap/MCIMAPCustomCommandOperation.cpp @@ -37,7 +37,7 @@ String * IMAPCustomCommandOperation::response() void IMAPCustomCommandOperation::main() { - ErrorCode error; + ErrorCode error = ErrorNone; mResponse = session()->session()->customCommand(mCustomCommand, &error); MC_SAFE_RETAIN(mResponse); setError(error); diff --git a/src/async/imap/MCIMAPDeleteFolderOperation.cpp b/src/async/imap/MCIMAPDeleteFolderOperation.cpp index d03bfc884..f36b03920 100644 --- a/src/async/imap/MCIMAPDeleteFolderOperation.cpp +++ b/src/async/imap/MCIMAPDeleteFolderOperation.cpp @@ -23,7 +23,7 @@ IMAPDeleteFolderOperation::~IMAPDeleteFolderOperation() void IMAPDeleteFolderOperation::main() { - ErrorCode error; + ErrorCode error = ErrorNone; session()->session()->deleteFolder(folder(), &error); setError(error); } diff --git a/src/async/imap/MCIMAPExpungeOperation.cpp b/src/async/imap/MCIMAPExpungeOperation.cpp index 141258b4f..356c9ce27 100644 --- a/src/async/imap/MCIMAPExpungeOperation.cpp +++ b/src/async/imap/MCIMAPExpungeOperation.cpp @@ -23,7 +23,7 @@ IMAPExpungeOperation::~IMAPExpungeOperation() void IMAPExpungeOperation::main() { - ErrorCode error; + ErrorCode error = ErrorNone; session()->session()->expunge(folder(), &error); setError(error); } diff --git a/src/async/imap/MCIMAPFetchContentOperation.cpp b/src/async/imap/MCIMAPFetchContentOperation.cpp index 049ac8a76..936fea6ed 100644 --- a/src/async/imap/MCIMAPFetchContentOperation.cpp +++ b/src/async/imap/MCIMAPFetchContentOperation.cpp @@ -75,7 +75,7 @@ Data * IMAPFetchContentOperation::data() void IMAPFetchContentOperation::main() { - ErrorCode error; + ErrorCode error = ErrorNone; if (mUid != 0) { if (mPartID != NULL) { mData = session()->session()->fetchMessageAttachmentByUID(folder(), mUid, mPartID, mEncoding, this, &error); diff --git a/src/async/imap/MCIMAPFetchFoldersOperation.cpp b/src/async/imap/MCIMAPFetchFoldersOperation.cpp index e1f121e8d..dddd30280 100644 --- a/src/async/imap/MCIMAPFetchFoldersOperation.cpp +++ b/src/async/imap/MCIMAPFetchFoldersOperation.cpp @@ -43,7 +43,7 @@ Array * IMAPFetchFoldersOperation::folders() void IMAPFetchFoldersOperation::main() { - ErrorCode error; + ErrorCode error = ErrorNone; if (mFetchSubscribedEnabled) { mFolders = session()->session()->fetchSubscribedFolders(&error); } diff --git a/src/async/imap/MCIMAPFetchMessagesOperation.cpp b/src/async/imap/MCIMAPFetchMessagesOperation.cpp index 480f2c1bf..7b9cb2fbc 100644 --- a/src/async/imap/MCIMAPFetchMessagesOperation.cpp +++ b/src/async/imap/MCIMAPFetchMessagesOperation.cpp @@ -92,7 +92,7 @@ IndexSet * IMAPFetchMessagesOperation::vanishedMessages() void IMAPFetchMessagesOperation::main() { - ErrorCode error; + ErrorCode error = ErrorNone; if (mFetchByUidEnabled) { if (mModSequenceValue != 0) { IMAPSyncResult * syncResult; diff --git a/src/async/imap/MCIMAPFetchNamespaceOperation.cpp b/src/async/imap/MCIMAPFetchNamespaceOperation.cpp index 6851130d0..77e7c055b 100644 --- a/src/async/imap/MCIMAPFetchNamespaceOperation.cpp +++ b/src/async/imap/MCIMAPFetchNamespaceOperation.cpp @@ -25,7 +25,7 @@ IMAPFetchNamespaceOperation::~IMAPFetchNamespaceOperation() void IMAPFetchNamespaceOperation::main() { - ErrorCode error; + ErrorCode error = ErrorNone; mNamespaces = session()->session()->fetchNamespace(&error); setError(error); MC_SAFE_RETAIN(mNamespaces); diff --git a/src/async/imap/MCIMAPFetchParsedContentOperation.cpp b/src/async/imap/MCIMAPFetchParsedContentOperation.cpp index e32112e67..478c26d80 100644 --- a/src/async/imap/MCIMAPFetchParsedContentOperation.cpp +++ b/src/async/imap/MCIMAPFetchParsedContentOperation.cpp @@ -63,7 +63,7 @@ MessageParser * IMAPFetchParsedContentOperation::parser() void IMAPFetchParsedContentOperation::main() { - ErrorCode error; + ErrorCode error = ErrorNone; Data * data; if (mUid != 0) { data = session()->session()->fetchMessageByUID(folder(), mUid, this, &error); diff --git a/src/async/imap/MCIMAPFolderInfoOperation.cpp b/src/async/imap/MCIMAPFolderInfoOperation.cpp index fc4e4462d..d37701adf 100644 --- a/src/async/imap/MCIMAPFolderInfoOperation.cpp +++ b/src/async/imap/MCIMAPFolderInfoOperation.cpp @@ -31,9 +31,12 @@ IMAPFolderInfo * IMAPFolderInfoOperation::info() void IMAPFolderInfoOperation::main() { - ErrorCode error; + ErrorCode error = ErrorNone; session()->session()->loginIfNeeded(&error); + if (this->isCancelled()) { + error = ErrorCanceled; + } if (error != ErrorNone) { setError(error); return; diff --git a/src/async/imap/MCIMAPFolderStatusOperation.cpp b/src/async/imap/MCIMAPFolderStatusOperation.cpp index 22f2797bd..b65f87adc 100644 --- a/src/async/imap/MCIMAPFolderStatusOperation.cpp +++ b/src/async/imap/MCIMAPFolderStatusOperation.cpp @@ -26,9 +26,12 @@ IMAPFolderStatusOperation::~IMAPFolderStatusOperation() void IMAPFolderStatusOperation::main() { - ErrorCode error; + ErrorCode error = ErrorNone; session()->session()->loginIfNeeded(&error); + if (this->isCancelled()) { + error = ErrorCanceled; + } if (error != ErrorNone) { setError(error); return; diff --git a/src/async/imap/MCIMAPIdentityOperation.cpp b/src/async/imap/MCIMAPIdentityOperation.cpp index 0dc035e58..bb2987a23 100644 --- a/src/async/imap/MCIMAPIdentityOperation.cpp +++ b/src/async/imap/MCIMAPIdentityOperation.cpp @@ -43,7 +43,7 @@ IMAPIdentity * IMAPIdentityOperation::serverIdentity() void IMAPIdentityOperation::main() { - ErrorCode error; + ErrorCode error = ErrorNone; mServerIdentity = session()->session()->identity(mClientIdentity, &error); MC_SAFE_RETAIN(mServerIdentity); setError(error); diff --git a/src/async/imap/MCIMAPIdleOperation.cpp b/src/async/imap/MCIMAPIdleOperation.cpp index 7154a9f0d..f911c1ce8 100644 --- a/src/async/imap/MCIMAPIdleOperation.cpp +++ b/src/async/imap/MCIMAPIdleOperation.cpp @@ -18,12 +18,12 @@ IMAPIdleOperation::IMAPIdleOperation() mLastKnownUid = 0; mSetupSuccess = false; mInterrupted = false; - pthread_mutex_init(&mLock, NULL); + MCB_LOCK_INIT(&mLock); } IMAPIdleOperation::~IMAPIdleOperation() { - pthread_mutex_destroy(&mLock); + MCB_LOCK_DESTROY(&mLock); } void IMAPIdleOperation::setLastKnownUID(uint32_t uid) @@ -54,9 +54,9 @@ void IMAPIdleOperation::unprepare(void * data) } bool IMAPIdleOperation::isInterrupted() { - pthread_mutex_lock(&mLock); + MCB_LOCK(&mLock); bool interrupted = mInterrupted; - pthread_mutex_unlock(&mLock); + MCB_UNLOCK(&mLock); return interrupted; } @@ -67,7 +67,7 @@ void IMAPIdleOperation::main() return; } - ErrorCode error; + ErrorCode error = ErrorNone; session()->session()->selectIfNeeded(folder(), &error); if (error != ErrorNone) { setError(error); @@ -88,9 +88,9 @@ void IMAPIdleOperation::main() void IMAPIdleOperation::interruptIdle() { - pthread_mutex_lock(&mLock); + MCB_LOCK(&mLock); mInterrupted = true; - pthread_mutex_unlock(&mLock); + MCB_UNLOCK(&mLock); if (mSetupSuccess) { session()->session()->interruptIdle(); } diff --git a/src/async/imap/MCIMAPIdleOperation.h b/src/async/imap/MCIMAPIdleOperation.h index 5a383bfd9..29bfe7400 100644 --- a/src/async/imap/MCIMAPIdleOperation.h +++ b/src/async/imap/MCIMAPIdleOperation.h @@ -33,7 +33,7 @@ namespace mailcore { uint32_t mLastKnownUid; bool mSetupSuccess; bool mInterrupted; - pthread_mutex_t mLock; + MCB_LOCK_TYPE mLock; void prepare(void * data); void unprepare(void * data); bool isInterrupted(); diff --git a/src/async/imap/MCIMAPMoveMessagesOperation.cpp b/src/async/imap/MCIMAPMoveMessagesOperation.cpp index cc8de9378..ef5a4b72a 100644 --- a/src/async/imap/MCIMAPMoveMessagesOperation.cpp +++ b/src/async/imap/MCIMAPMoveMessagesOperation.cpp @@ -54,7 +54,7 @@ String * IMAPMoveMessagesOperation::destFolder() void IMAPMoveMessagesOperation::main() { - ErrorCode error; + ErrorCode error = ErrorNone; session()->session()->moveMessages(folder(), mUids, mDestFolder, &mUidMapping, &error); MC_SAFE_RETAIN(mUidMapping); setError(error); diff --git a/src/async/imap/MCIMAPMultiDisconnectOperation.cpp b/src/async/imap/MCIMAPMultiDisconnectOperation.cpp index f6d0b180c..6c181b5be 100644 --- a/src/async/imap/MCIMAPMultiDisconnectOperation.cpp +++ b/src/async/imap/MCIMAPMultiDisconnectOperation.cpp @@ -37,7 +37,7 @@ void IMAPMultiDisconnectOperation::start() retain(); mc_foreacharray(IMAPOperation, op, _operations) { -#if __APPLE__ +#if MC_HAS_GCD op->setCallbackDispatchQueue(this->callbackDispatchQueue()); #endif op->setCallback(this); diff --git a/src/async/imap/MCIMAPNoopOperation.cpp b/src/async/imap/MCIMAPNoopOperation.cpp index 19a82883f..49edb0e48 100644 --- a/src/async/imap/MCIMAPNoopOperation.cpp +++ b/src/async/imap/MCIMAPNoopOperation.cpp @@ -23,7 +23,7 @@ IMAPNoopOperation::~IMAPNoopOperation() void IMAPNoopOperation::main() { - ErrorCode error; + ErrorCode error = ErrorNone; session()->session()->noop(&error); setError(error); } diff --git a/src/async/imap/MCIMAPOperation.cpp b/src/async/imap/MCIMAPOperation.cpp index 724c8215e..dc5b56a34 100644 --- a/src/async/imap/MCIMAPOperation.cpp +++ b/src/async/imap/MCIMAPOperation.cpp @@ -37,13 +37,13 @@ IMAPOperation::~IMAPOperation() void IMAPOperation::setSession(IMAPAsyncConnection * session) { MC_SAFE_REPLACE_RETAIN(IMAPAsyncConnection, mSession, session); -#if __APPLE__ +#if MC_HAS_GCD dispatch_queue_t queue; if (session != NULL) { queue = session->dispatchQueue(); } else { - queue = dispatch_get_main_queue(); + queue = getMainQueue(); } setCallbackDispatchQueue(queue); #endif @@ -176,6 +176,26 @@ void IMAPOperation::beforeMain() { } +bool IMAPOperation::interruptCurrentCommand() +{ + if (mSession == NULL) { + return false; + } + + return mSession->interruptCurrentCommand(this); +} + +void IMAPOperation::interrupt() +{ + // Called by the connection's queue while this operation is the one running, so the stream below + // is the one its command is blocked on. + if (mSession == NULL) { + return; + } + + mSession->session()->interruptCurrentCommand(); +} + void IMAPOperation::afterMain() { if (mSession->session()->isAutomaticConfigurationDone()) { diff --git a/src/async/imap/MCIMAPOperation.h b/src/async/imap/MCIMAPOperation.h index a57d74894..8075a733a 100644 --- a/src/async/imap/MCIMAPOperation.h +++ b/src/async/imap/MCIMAPOperation.h @@ -43,6 +43,18 @@ namespace mailcore { virtual void beforeMain(); virtual void afterMain(); + virtual void interrupt(); + + /** Aborts this operation's IMAP command if it is the one currently running on its + connection: the blocked read returns at once instead of waiting out the socket timeout, so + the operations queued behind it (a disconnect, most importantly) run immediately. + Does nothing when the operation is not the one running. + + Teardown of this connection only - it is left unusable and reconnects on next use, so call + it for a command that is being abandoned (cancelled, or given up on), never to hurry up a + command whose result still matters. + Returns whether a command was actually interrupted. */ + virtual bool interruptCurrentCommand(); virtual void start(); diff --git a/src/async/imap/MCIMAPQuotaOperation.cpp b/src/async/imap/MCIMAPQuotaOperation.cpp index 2268a384d..bb45e6f9f 100644 --- a/src/async/imap/MCIMAPQuotaOperation.cpp +++ b/src/async/imap/MCIMAPQuotaOperation.cpp @@ -35,7 +35,7 @@ uint32_t IMAPQuotaOperation::usage() void IMAPQuotaOperation::main() { - ErrorCode error; + ErrorCode error = ErrorNone; session()->session()->loginIfNeeded(&error); if (error != ErrorNone) { setError(error); diff --git a/src/async/imap/MCIMAPRenameFolderOperation.cpp b/src/async/imap/MCIMAPRenameFolderOperation.cpp index 338e02a55..9a90451db 100644 --- a/src/async/imap/MCIMAPRenameFolderOperation.cpp +++ b/src/async/imap/MCIMAPRenameFolderOperation.cpp @@ -35,7 +35,7 @@ String * IMAPRenameFolderOperation::otherName() void IMAPRenameFolderOperation::main() { - ErrorCode error; + ErrorCode error = ErrorNone; session()->session()->renameFolder(folder(), mOtherName, &error); setError(error); } diff --git a/src/async/imap/MCIMAPSearchOperation.cpp b/src/async/imap/MCIMAPSearchOperation.cpp index 6db73f8c6..9ede1e69d 100644 --- a/src/async/imap/MCIMAPSearchOperation.cpp +++ b/src/async/imap/MCIMAPSearchOperation.cpp @@ -66,7 +66,7 @@ IndexSet * IMAPSearchOperation::uids() void IMAPSearchOperation::main() { - ErrorCode error; + ErrorCode error = ErrorNone; if (mExpression != NULL) { mUids = session()->session()->search(folder(), mExpression, &error); } diff --git a/src/async/imap/MCIMAPStoreFlagsOperation.cpp b/src/async/imap/MCIMAPStoreFlagsOperation.cpp index a049333e9..75073110d 100644 --- a/src/async/imap/MCIMAPStoreFlagsOperation.cpp +++ b/src/async/imap/MCIMAPStoreFlagsOperation.cpp @@ -81,7 +81,7 @@ Array * IMAPStoreFlagsOperation::customFlags() void IMAPStoreFlagsOperation::main() { - ErrorCode error; + ErrorCode error = ErrorNone; if (mUids != NULL) { session()->session()->storeFlagsAndCustomFlagsByUID(folder(), mUids, mKind, mFlags, mCustomFlags, &error); } diff --git a/src/async/imap/MCIMAPStoreLabelsOperation.cpp b/src/async/imap/MCIMAPStoreLabelsOperation.cpp index 3ad2212af..54a50767b 100644 --- a/src/async/imap/MCIMAPStoreLabelsOperation.cpp +++ b/src/async/imap/MCIMAPStoreLabelsOperation.cpp @@ -70,7 +70,7 @@ Array * IMAPStoreLabelsOperation::labels() void IMAPStoreLabelsOperation::main() { - ErrorCode error; + ErrorCode error = ErrorNone; if (mUids != NULL) { session()->session()->storeLabelsByUID(folder(), mUids, mKind, mLabels, &error); } diff --git a/src/async/imap/MCIMAPSubscribeFolderOperation.cpp b/src/async/imap/MCIMAPSubscribeFolderOperation.cpp index 1eedad29d..11d6f5afa 100644 --- a/src/async/imap/MCIMAPSubscribeFolderOperation.cpp +++ b/src/async/imap/MCIMAPSubscribeFolderOperation.cpp @@ -34,7 +34,7 @@ bool IMAPSubscribeFolderOperation::isUnsubscribeEnabled() void IMAPSubscribeFolderOperation::main() { - ErrorCode error; + ErrorCode error = ErrorNone; if (mUnsubscribeEnabled) { session()->session()->unsubscribeFolder(folder(), &error); } diff --git a/src/async/nntp/MCNNTPAsyncSession.cpp b/src/async/nntp/MCNNTPAsyncSession.cpp index fdf1165cc..92a79b032 100644 --- a/src/async/nntp/MCNNTPAsyncSession.cpp +++ b/src/async/nntp/MCNNTPAsyncSession.cpp @@ -78,7 +78,7 @@ NNTPAsyncSession::NNTPAsyncSession() mQueueCallback = new NNTPOperationQueueCallback(this); mQueue->setCallback(mQueueCallback); mConnectionLogger = NULL; - pthread_mutex_init(&mConnectionLoggerLock, NULL); + MCB_LOCK_INIT(&mConnectionLoggerLock); mInternalLogger = new NNTPConnectionLogger(this); mSession->setConnectionLogger(mInternalLogger); mOperationQueueCallback = NULL; @@ -87,7 +87,7 @@ NNTPAsyncSession::NNTPAsyncSession() NNTPAsyncSession::~NNTPAsyncSession() { MC_SAFE_RELEASE(mInternalLogger); - pthread_mutex_destroy(&mConnectionLoggerLock); + MCB_LOCK_DESTROY(&mConnectionLoggerLock); MC_SAFE_RELEASE(mQueueCallback); MC_SAFE_RELEASE(mSession); MC_SAFE_RELEASE(mQueue); @@ -283,9 +283,9 @@ void NNTPAsyncSession::runOperation(NNTPOperation * operation) void NNTPAsyncSession::setConnectionLogger(ConnectionLogger * logger) { - pthread_mutex_lock(&mConnectionLoggerLock); + MCB_LOCK(&mConnectionLoggerLock); mConnectionLogger = logger; - pthread_mutex_unlock(&mConnectionLoggerLock); + MCB_UNLOCK(&mConnectionLoggerLock); if (logger != NULL) { mSession->setConnectionLogger(mInternalLogger); } @@ -298,23 +298,23 @@ ConnectionLogger * NNTPAsyncSession::connectionLogger() { ConnectionLogger * result; - pthread_mutex_lock(&mConnectionLoggerLock); + MCB_LOCK(&mConnectionLoggerLock); result = mConnectionLogger; - pthread_mutex_unlock(&mConnectionLoggerLock); + MCB_UNLOCK(&mConnectionLoggerLock); return result; } void NNTPAsyncSession::logConnection(ConnectionLogType logType, Data * buffer) { - pthread_mutex_lock(&mConnectionLoggerLock); + MCB_LOCK(&mConnectionLoggerLock); if (mConnectionLogger != NULL) { mConnectionLogger->log(this, logType, buffer); } - pthread_mutex_unlock(&mConnectionLoggerLock); + MCB_UNLOCK(&mConnectionLoggerLock); } -#if __APPLE__ +#if MC_HAS_GCD void NNTPAsyncSession::setDispatchQueue(dispatch_queue_t dispatchQueue) { mQueue->setDispatchQueue(dispatchQueue); diff --git a/src/async/nntp/MCNNTPAsyncSession.h b/src/async/nntp/MCNNTPAsyncSession.h index eb2531a45..f96f25de2 100644 --- a/src/async/nntp/MCNNTPAsyncSession.h +++ b/src/async/nntp/MCNNTPAsyncSession.h @@ -49,7 +49,7 @@ namespace mailcore { virtual void setConnectionLogger(ConnectionLogger * logger); virtual ConnectionLogger * connectionLogger(); -#ifdef __APPLE__ +#if MC_HAS_GCD virtual void setDispatchQueue(dispatch_queue_t dispatchQueue); virtual dispatch_queue_t dispatchQueue(); #endif @@ -85,7 +85,7 @@ namespace mailcore { OperationQueue * mQueue; NNTPOperationQueueCallback * mQueueCallback; ConnectionLogger * mConnectionLogger; - pthread_mutex_t mConnectionLoggerLock; + MCB_LOCK_TYPE mConnectionLoggerLock; NNTPConnectionLogger * mInternalLogger; OperationQueueCallback * mOperationQueueCallback; diff --git a/src/async/nntp/MCNNTPCheckAccountOperation.cpp b/src/async/nntp/MCNNTPCheckAccountOperation.cpp index 29b050f0c..c754b77e9 100644 --- a/src/async/nntp/MCNNTPCheckAccountOperation.cpp +++ b/src/async/nntp/MCNNTPCheckAccountOperation.cpp @@ -23,7 +23,7 @@ NNTPCheckAccountOperation::~NNTPCheckAccountOperation() void NNTPCheckAccountOperation::main() { - ErrorCode error; + ErrorCode error = ErrorNone; session()->session()->checkAccount(&error); setError(error); diff --git a/src/async/nntp/MCNNTPDisconnectOperation.cpp b/src/async/nntp/MCNNTPDisconnectOperation.cpp index d269904a8..06a77b451 100644 --- a/src/async/nntp/MCNNTPDisconnectOperation.cpp +++ b/src/async/nntp/MCNNTPDisconnectOperation.cpp @@ -23,7 +23,7 @@ NNTPDisconnectOperation::~NNTPDisconnectOperation() void NNTPDisconnectOperation::main() { - ErrorCode error; + ErrorCode error = ErrorNone; session()->session()->checkAccount(&error); setError(error); diff --git a/src/async/nntp/MCNNTPFetchAllArticlesOperation.cpp b/src/async/nntp/MCNNTPFetchAllArticlesOperation.cpp index 044e9e5e0..d0f265035 100644 --- a/src/async/nntp/MCNNTPFetchAllArticlesOperation.cpp +++ b/src/async/nntp/MCNNTPFetchAllArticlesOperation.cpp @@ -42,7 +42,7 @@ IndexSet * NNTPFetchAllArticlesOperation::articles() void NNTPFetchAllArticlesOperation::main() { - ErrorCode error; + ErrorCode error = ErrorNone; mArticles = session()->session()->fetchAllArticles(mGroupName, &error); setError(error); MC_SAFE_RETAIN(mArticles); diff --git a/src/async/nntp/MCNNTPFetchArticleOperation.cpp b/src/async/nntp/MCNNTPFetchArticleOperation.cpp index eedf2fc90..7ab0fc4bb 100644 --- a/src/async/nntp/MCNNTPFetchArticleOperation.cpp +++ b/src/async/nntp/MCNNTPFetchArticleOperation.cpp @@ -61,7 +61,7 @@ Data * NNTPFetchArticleOperation::data() void NNTPFetchArticleOperation::main() { - ErrorCode error; + ErrorCode error = ErrorNone; if (mMessageID == NULL) { mData = session()->session()->fetchArticle(mGroupName, mMessageIndex, this, &error); } else { diff --git a/src/async/nntp/MCNNTPFetchHeaderOperation.cpp b/src/async/nntp/MCNNTPFetchHeaderOperation.cpp index a1ca2b6af..e9453f6de 100644 --- a/src/async/nntp/MCNNTPFetchHeaderOperation.cpp +++ b/src/async/nntp/MCNNTPFetchHeaderOperation.cpp @@ -52,7 +52,7 @@ MessageHeader * NNTPFetchHeaderOperation::header() void NNTPFetchHeaderOperation::main() { - ErrorCode error; + ErrorCode error = ErrorNone; mHeader = session()->session()->fetchHeader(mGroupName, mMessageIndex, &error); if (mHeader != NULL) { mHeader->retain(); diff --git a/src/async/nntp/MCNNTPFetchServerTimeOperation.cpp b/src/async/nntp/MCNNTPFetchServerTimeOperation.cpp index e71d87225..5b60f5084 100644 --- a/src/async/nntp/MCNNTPFetchServerTimeOperation.cpp +++ b/src/async/nntp/MCNNTPFetchServerTimeOperation.cpp @@ -29,7 +29,7 @@ time_t NNTPFetchServerTimeOperation::time() void NNTPFetchServerTimeOperation::main() { - ErrorCode error; + ErrorCode error = ErrorNone; mTime = session()->session()->fetchServerDate(&error); setError(error); } diff --git a/src/async/nntp/MCNNTPListNewsgroupsOperation.cpp b/src/async/nntp/MCNNTPListNewsgroupsOperation.cpp index c00b1cc35..d096bb48c 100644 --- a/src/async/nntp/MCNNTPListNewsgroupsOperation.cpp +++ b/src/async/nntp/MCNNTPListNewsgroupsOperation.cpp @@ -39,7 +39,7 @@ Array * NNTPListNewsgroupsOperation::groups() { void NNTPListNewsgroupsOperation::main() { - ErrorCode error; + ErrorCode error = ErrorNone; if (mListsSuscribed) { mGroups = session()->session()->listDefaultNewsgroups(&error); diff --git a/src/async/nntp/MCNNTPOperation.cpp b/src/async/nntp/MCNNTPOperation.cpp index 3368ba0e7..5298cc04c 100644 --- a/src/async/nntp/MCNNTPOperation.cpp +++ b/src/async/nntp/MCNNTPOperation.cpp @@ -31,13 +31,13 @@ NNTPOperation::~NNTPOperation() void NNTPOperation::setSession(NNTPAsyncSession * session) { MC_SAFE_REPLACE_RETAIN(NNTPAsyncSession, mSession, session); -#if __APPLE__ +#if MC_HAS_GCD dispatch_queue_t queue; if (session != NULL) { queue = session->dispatchQueue(); } else { - queue = dispatch_get_main_queue(); + queue = getMainQueue(); } setCallbackDispatchQueue(queue); #endif diff --git a/src/async/nntp/MCNNTPPostOperation.cpp b/src/async/nntp/MCNNTPPostOperation.cpp index c5b586f5d..2f258a9fa 100644 --- a/src/async/nntp/MCNNTPPostOperation.cpp +++ b/src/async/nntp/MCNNTPPostOperation.cpp @@ -47,7 +47,7 @@ String * NNTPPostOperation::messageFilepath() void NNTPPostOperation::main() { - ErrorCode error; + ErrorCode error = ErrorNone; if (mMessageFilepath != NULL) { session()->session()->postMessage(mMessageFilepath, this, &error); } diff --git a/src/async/pop/MCPOPAsyncSession.cpp b/src/async/pop/MCPOPAsyncSession.cpp index f1897b84b..9635d3540 100644 --- a/src/async/pop/MCPOPAsyncSession.cpp +++ b/src/async/pop/MCPOPAsyncSession.cpp @@ -75,7 +75,7 @@ POPAsyncSession::POPAsyncSession() mQueueCallback = new POPOperationQueueCallback(this); mQueue->setCallback(mQueueCallback); mConnectionLogger = NULL; - pthread_mutex_init(&mConnectionLoggerLock, NULL); + MCB_LOCK_INIT(&mConnectionLoggerLock); mInternalLogger = new POPConnectionLogger(this); mSession->setConnectionLogger(mInternalLogger); mOperationQueueCallback = NULL; @@ -84,7 +84,7 @@ POPAsyncSession::POPAsyncSession() POPAsyncSession::~POPAsyncSession() { MC_SAFE_RELEASE(mInternalLogger); - pthread_mutex_destroy(&mConnectionLoggerLock); + MCB_LOCK_DESTROY(&mConnectionLoggerLock); MC_SAFE_RELEASE(mQueueCallback); MC_SAFE_RELEASE(mSession); MC_SAFE_RELEASE(mQueue); @@ -238,9 +238,9 @@ void POPAsyncSession::runOperation(POPOperation * operation) void POPAsyncSession::setConnectionLogger(ConnectionLogger * logger) { - pthread_mutex_lock(&mConnectionLoggerLock); + MCB_LOCK(&mConnectionLoggerLock); mConnectionLogger = logger; - pthread_mutex_unlock(&mConnectionLoggerLock); + MCB_UNLOCK(&mConnectionLoggerLock); if (logger != NULL) { mSession->setConnectionLogger(mInternalLogger); } @@ -253,23 +253,23 @@ ConnectionLogger * POPAsyncSession::connectionLogger() { ConnectionLogger * result; - pthread_mutex_lock(&mConnectionLoggerLock); + MCB_LOCK(&mConnectionLoggerLock); result = mConnectionLogger; - pthread_mutex_unlock(&mConnectionLoggerLock); + MCB_UNLOCK(&mConnectionLoggerLock); return result; } void POPAsyncSession::logConnection(ConnectionLogType logType, Data * buffer) { - pthread_mutex_lock(&mConnectionLoggerLock); + MCB_LOCK(&mConnectionLoggerLock); if (mConnectionLogger != NULL) { mConnectionLogger->log(this, logType, buffer); } - pthread_mutex_unlock(&mConnectionLoggerLock); + MCB_UNLOCK(&mConnectionLoggerLock); } -#if __APPLE__ +#if MC_HAS_GCD void POPAsyncSession::setDispatchQueue(dispatch_queue_t dispatchQueue) { mQueue->setDispatchQueue(dispatchQueue); diff --git a/src/async/pop/MCPOPAsyncSession.h b/src/async/pop/MCPOPAsyncSession.h index 7dfe79316..2b55e38c5 100644 --- a/src/async/pop/MCPOPAsyncSession.h +++ b/src/async/pop/MCPOPAsyncSession.h @@ -57,7 +57,7 @@ namespace mailcore { virtual void setConnectionLogger(ConnectionLogger * logger); virtual ConnectionLogger * connectionLogger(); -#ifdef __APPLE__ +#if MC_HAS_GCD virtual void setDispatchQueue(dispatch_queue_t dispatchQueue); virtual dispatch_queue_t dispatchQueue(); #endif @@ -87,7 +87,7 @@ namespace mailcore { OperationQueue * mQueue; POPOperationQueueCallback * mQueueCallback; ConnectionLogger * mConnectionLogger; - pthread_mutex_t mConnectionLoggerLock; + MCB_LOCK_TYPE mConnectionLoggerLock; POPConnectionLogger * mInternalLogger; OperationQueueCallback * mOperationQueueCallback; diff --git a/src/async/pop/MCPOPCheckAccountOperation.cpp b/src/async/pop/MCPOPCheckAccountOperation.cpp index f83cd740d..cb064acdb 100644 --- a/src/async/pop/MCPOPCheckAccountOperation.cpp +++ b/src/async/pop/MCPOPCheckAccountOperation.cpp @@ -23,7 +23,7 @@ POPCheckAccountOperation::~POPCheckAccountOperation() void POPCheckAccountOperation::main() { - ErrorCode error; + ErrorCode error = ErrorNone; session()->session()->checkAccount(&error); setError(error); diff --git a/src/async/pop/MCPOPDeleteMessagesOperation.cpp b/src/async/pop/MCPOPDeleteMessagesOperation.cpp index b57a60fac..46f3d1355 100644 --- a/src/async/pop/MCPOPDeleteMessagesOperation.cpp +++ b/src/async/pop/MCPOPDeleteMessagesOperation.cpp @@ -38,7 +38,7 @@ void POPDeleteMessagesOperation::main() if (mMessageIndexes == NULL) return; - ErrorCode error; + ErrorCode error = ErrorNone; mc_foreachindexset(index, mMessageIndexes) { session()->session()->deleteMessage((unsigned int) index, &error); if (error != ErrorNone) { diff --git a/src/async/pop/MCPOPFetchHeaderOperation.cpp b/src/async/pop/MCPOPFetchHeaderOperation.cpp index 60a0e8a61..1ce83cb2e 100644 --- a/src/async/pop/MCPOPFetchHeaderOperation.cpp +++ b/src/async/pop/MCPOPFetchHeaderOperation.cpp @@ -42,7 +42,7 @@ MessageHeader * POPFetchHeaderOperation::header() void POPFetchHeaderOperation::main() { - ErrorCode error; + ErrorCode error = ErrorNone; mHeader = session()->session()->fetchHeader(mMessageIndex, &error); if (mHeader != NULL) { mHeader->retain(); diff --git a/src/async/pop/MCPOPFetchMessageOperation.cpp b/src/async/pop/MCPOPFetchMessageOperation.cpp index ca822a9ef..05dd91ce9 100644 --- a/src/async/pop/MCPOPFetchMessageOperation.cpp +++ b/src/async/pop/MCPOPFetchMessageOperation.cpp @@ -41,7 +41,7 @@ Data * POPFetchMessageOperation::data() void POPFetchMessageOperation::main() { - ErrorCode error; + ErrorCode error = ErrorNone; mData = session()->session()->fetchMessage(mMessageIndex, this, &error); MC_SAFE_RETAIN(mData); setError(error); diff --git a/src/async/pop/MCPOPFetchMessagesOperation.cpp b/src/async/pop/MCPOPFetchMessagesOperation.cpp index 9b7627fa8..d25fddfb5 100644 --- a/src/async/pop/MCPOPFetchMessagesOperation.cpp +++ b/src/async/pop/MCPOPFetchMessagesOperation.cpp @@ -30,7 +30,7 @@ Array * POPFetchMessagesOperation::messages() void POPFetchMessagesOperation::main() { - ErrorCode error; + ErrorCode error = ErrorNone; mMessages = session()->session()->fetchMessages(&error); setError(error); MC_SAFE_RETAIN(mMessages); diff --git a/src/async/pop/MCPOPNoopOperation.cpp b/src/async/pop/MCPOPNoopOperation.cpp index 034b1fa8d..0079fa3b8 100644 --- a/src/async/pop/MCPOPNoopOperation.cpp +++ b/src/async/pop/MCPOPNoopOperation.cpp @@ -23,7 +23,7 @@ POPNoopOperation::~POPNoopOperation() void POPNoopOperation::main() { - ErrorCode error; + ErrorCode error = ErrorNone; session()->session()->noop(&error); setError(error); diff --git a/src/async/pop/MCPOPOperation.cpp b/src/async/pop/MCPOPOperation.cpp index 479876b6c..87aee97c3 100644 --- a/src/async/pop/MCPOPOperation.cpp +++ b/src/async/pop/MCPOPOperation.cpp @@ -31,13 +31,13 @@ POPOperation::~POPOperation() void POPOperation::setSession(POPAsyncSession * session) { MC_SAFE_REPLACE_RETAIN(POPAsyncSession, mSession, session); -#if __APPLE__ +#if MC_HAS_GCD dispatch_queue_t queue; if (session != NULL) { queue = session->dispatchQueue(); } else { - queue = dispatch_get_main_queue(); + queue = getMainQueue(); } setCallbackDispatchQueue(queue); #endif diff --git a/src/async/smtp/MCSMTPAsyncSession.cpp b/src/async/smtp/MCSMTPAsyncSession.cpp index 8ec8e2d46..f8c524447 100644 --- a/src/async/smtp/MCSMTPAsyncSession.cpp +++ b/src/async/smtp/MCSMTPAsyncSession.cpp @@ -68,7 +68,7 @@ SMTPAsyncSession::SMTPAsyncSession() mQueueCallback = new SMTPOperationQueueCallback(this); mQueue->setCallback(mQueueCallback); mConnectionLogger = NULL; - pthread_mutex_init(&mConnectionLoggerLock, NULL); + MCB_LOCK_INIT(&mConnectionLoggerLock); mInternalLogger = new SMTPConnectionLogger(this); mSession->setConnectionLogger(mInternalLogger); mOperationQueueCallback = NULL; @@ -77,7 +77,7 @@ SMTPAsyncSession::SMTPAsyncSession() SMTPAsyncSession::~SMTPAsyncSession() { MC_SAFE_RELEASE(mInternalLogger); - pthread_mutex_destroy(&mConnectionLoggerLock); + MCB_LOCK_DESTROY(&mConnectionLoggerLock); cancelDelayedPerformMethod((Object::Method) &SMTPAsyncSession::tryAutomaticDisconnectAfterDelay, NULL); MC_SAFE_RELEASE(mQueueCallback); MC_SAFE_RELEASE(mQueue); @@ -259,6 +259,15 @@ SMTPOperation * SMTPAsyncSession::checkAccountOperation(Address * from) return (SMTPOperation *) op->autorelease(); } +SMTPOperation * SMTPAsyncSession::checkAccountOperation(Address * from, Address * to) +{ + SMTPCheckAccountOperation * op = new SMTPCheckAccountOperation(); + op->setFrom(from); + op->setTo(to); + op->setSession(this); + return (SMTPOperation *) op->autorelease(); +} + SMTPOperation * SMTPAsyncSession::noopOperation() { SMTPNoopOperation * op = new SMTPNoopOperation(); @@ -275,9 +284,9 @@ SMTPOperation * SMTPAsyncSession::disconnectOperation() void SMTPAsyncSession::setConnectionLogger(ConnectionLogger * logger) { - pthread_mutex_lock(&mConnectionLoggerLock); + MCB_LOCK(&mConnectionLoggerLock); mConnectionLogger = logger; - pthread_mutex_unlock(&mConnectionLoggerLock); + MCB_UNLOCK(&mConnectionLoggerLock); if (logger != NULL) { mSession->setConnectionLogger(mInternalLogger); } @@ -290,23 +299,23 @@ ConnectionLogger * SMTPAsyncSession::connectionLogger() { ConnectionLogger * result; - pthread_mutex_lock(&mConnectionLoggerLock); + MCB_LOCK(&mConnectionLoggerLock); result = mConnectionLogger; - pthread_mutex_unlock(&mConnectionLoggerLock); + MCB_UNLOCK(&mConnectionLoggerLock); return result; } void SMTPAsyncSession::logConnection(ConnectionLogType logType, Data * buffer) { - pthread_mutex_lock(&mConnectionLoggerLock); + MCB_LOCK(&mConnectionLoggerLock); if (mConnectionLogger != NULL) { mConnectionLogger->log(this, logType, buffer); } - pthread_mutex_unlock(&mConnectionLoggerLock); + MCB_UNLOCK(&mConnectionLoggerLock); } -#if __APPLE__ +#if MC_HAS_GCD void SMTPAsyncSession::setDispatchQueue(dispatch_queue_t dispatchQueue) { mQueue->setDispatchQueue(dispatchQueue); diff --git a/src/async/smtp/MCSMTPAsyncSession.h b/src/async/smtp/MCSMTPAsyncSession.h index 961df6eff..f272922a8 100644 --- a/src/async/smtp/MCSMTPAsyncSession.h +++ b/src/async/smtp/MCSMTPAsyncSession.h @@ -54,7 +54,7 @@ namespace mailcore { virtual void setConnectionLogger(ConnectionLogger * logger); virtual ConnectionLogger * connectionLogger(); -#ifdef __APPLE__ +#if MC_HAS_GCD virtual void setDispatchQueue(dispatch_queue_t dispatchQueue); virtual dispatch_queue_t dispatchQueue(); #endif @@ -71,6 +71,7 @@ namespace mailcore { virtual SMTPOperation * sendMessageOperation(Address * from, Array * recipients, String * filename); virtual SMTPOperation * checkAccountOperation(Address * from); + virtual SMTPOperation * checkAccountOperation(Address * from, Address * to); virtual SMTPOperation * noopOperation(); @@ -87,7 +88,7 @@ namespace mailcore { OperationQueue * mQueue; SMTPOperationQueueCallback * mQueueCallback; ConnectionLogger * mConnectionLogger; - pthread_mutex_t mConnectionLoggerLock; + MCB_LOCK_TYPE mConnectionLoggerLock; SMTPConnectionLogger * mInternalLogger; OperationQueueCallback * mOperationQueueCallback; diff --git a/src/async/smtp/MCSMTPCheckAccountOperation.cpp b/src/async/smtp/MCSMTPCheckAccountOperation.cpp index f711c6ecc..9fe77ba08 100644 --- a/src/async/smtp/MCSMTPCheckAccountOperation.cpp +++ b/src/async/smtp/MCSMTPCheckAccountOperation.cpp @@ -16,11 +16,13 @@ using namespace mailcore; SMTPCheckAccountOperation::SMTPCheckAccountOperation() { mFrom = NULL; + mTo = NULL; } SMTPCheckAccountOperation::~SMTPCheckAccountOperation() { MC_SAFE_RELEASE(mFrom); + MC_SAFE_RELEASE(mTo); } void SMTPCheckAccountOperation::setFrom(Address * from) @@ -33,10 +35,26 @@ Address * SMTPCheckAccountOperation::from() return mFrom; } +void SMTPCheckAccountOperation::setTo(Address * to) +{ + MC_SAFE_REPLACE_RETAIN(Address, mTo, to); +} + +Address * SMTPCheckAccountOperation::to() +{ + return mTo; +} + void SMTPCheckAccountOperation::main() { - ErrorCode error; + ErrorCode error = ErrorNone; + + if (mTo) { + session()->session()->checkAccount(mFrom, mTo, &error); + } + else { + session()->session()->checkAccount(mFrom, &error); + } - session()->session()->checkAccount(mFrom, &error); setError(error); } diff --git a/src/async/smtp/MCSMTPCheckAccountOperation.h b/src/async/smtp/MCSMTPCheckAccountOperation.h index ad45d38b8..3aef34637 100644 --- a/src/async/smtp/MCSMTPCheckAccountOperation.h +++ b/src/async/smtp/MCSMTPCheckAccountOperation.h @@ -25,12 +25,15 @@ namespace mailcore { virtual void setFrom(Address * from); virtual Address * from(); + virtual void setTo(Address * to); + virtual Address * to(); + public: // subclass behavior virtual void main(); private: Address * mFrom; - + Address * mTo; }; } diff --git a/src/async/smtp/MCSMTPLoginOperation.cpp b/src/async/smtp/MCSMTPLoginOperation.cpp index 58866df95..0bc8b7a9a 100644 --- a/src/async/smtp/MCSMTPLoginOperation.cpp +++ b/src/async/smtp/MCSMTPLoginOperation.cpp @@ -23,7 +23,7 @@ SMTPLoginOperation::~SMTPLoginOperation() void SMTPLoginOperation::main() { - ErrorCode error; + ErrorCode error = ErrorNone; session()->session()->loginIfNeeded(&error); setError(error); } diff --git a/src/async/smtp/MCSMTPNoopOperation.cpp b/src/async/smtp/MCSMTPNoopOperation.cpp index 310ccb8eb..5e18029ca 100644 --- a/src/async/smtp/MCSMTPNoopOperation.cpp +++ b/src/async/smtp/MCSMTPNoopOperation.cpp @@ -23,7 +23,7 @@ SMTPNoopOperation::~SMTPNoopOperation() void SMTPNoopOperation::main() { - ErrorCode error; + ErrorCode error = ErrorNone; session()->session()->noop(&error); setError(error); } diff --git a/src/async/smtp/MCSMTPOperation.cpp b/src/async/smtp/MCSMTPOperation.cpp index 0b3c8ad8e..8a2269085 100644 --- a/src/async/smtp/MCSMTPOperation.cpp +++ b/src/async/smtp/MCSMTPOperation.cpp @@ -31,13 +31,13 @@ SMTPOperation::~SMTPOperation() void SMTPOperation::setSession(SMTPAsyncSession * session) { MC_SAFE_REPLACE_RETAIN(SMTPAsyncSession, mSession, session); -#if __APPLE__ +#if MC_HAS_GCD dispatch_queue_t queue; if (session != NULL) { queue = session->dispatchQueue(); } else { - queue = dispatch_get_main_queue(); + queue = getMainQueue(); } setCallbackDispatchQueue(queue); #endif diff --git a/src/async/smtp/MCSMTPSendWithDataOperation.cpp b/src/async/smtp/MCSMTPSendWithDataOperation.cpp index 28cc02bf7..55dca9114 100644 --- a/src/async/smtp/MCSMTPSendWithDataOperation.cpp +++ b/src/async/smtp/MCSMTPSendWithDataOperation.cpp @@ -71,7 +71,7 @@ Array * SMTPSendWithDataOperation::recipients() void SMTPSendWithDataOperation::main() { - ErrorCode error; + ErrorCode error = ErrorNone; if (mMessageFilepath != NULL) { session()->session()->sendMessage(mFrom, mRecipients, mMessageFilepath, this, &error); } diff --git a/src/c/CBase+Private.h b/src/c/CBase+Private.h new file mode 100644 index 000000000..b14c696cc --- /dev/null +++ b/src/c/CBase+Private.h @@ -0,0 +1,172 @@ +#ifndef MAILCORE_CBASE_PRIVATE_H +#define MAILCORE_CBASE_PRIVATE_H + +#include "CBase.h" +#include "MailCoreString.h" + +#ifdef __cplusplus +#include +#endif + +#define PASTER(x,y) x ## _ ## y +#define EVALUATOR(x,y) PASTER(x,y) +#define FUNCNAME(fun) EVALUATOR(structName, fun) + +#define C_SYNTHESIZE_SCALAR(cType, mcType, setter, getter) \ +cType FUNCNAME(getter)(structName self){ \ +return self.instance->getter(); \ +} \ +void FUNCNAME(setter)(structName self, cType getter){ \ +self.instance->setter(getter); \ +} + +#define C_SYNTHESIZE_ENUM(cType, mcType, setter, getter) \ +cType FUNCNAME(getter)(structName self){ \ +return static_cast((int)self.instance->getter()); \ +} \ +void FUNCNAME(setter)(structName self, cType getter){ \ +self.instance->setter(static_cast((int)getter)); \ +} + +#define C_SYNTHESIZE_MAILCORE_OBJ(cType, cConstr, setter, getter) \ +cType FUNCNAME(getter)(structName self){ \ +return cConstr(self.instance->getter()); \ +} \ +void FUNCNAME(setter)(structName self, cType getter){ \ +self.instance->setter(getter.instance); \ +} + +#define C_SYNTHESIZE_COBJECT_CAST() \ +CObject FUNCNAME(toCObject)(structName self){ \ +return CObject_new(self.instance); \ +} \ +structName FUNCNAME(newWithCObject)(CObject obj){ \ +return FUNCNAME(new)(reinterpret_cast(obj.instance)); \ +} \ +CData FUNCNAME(mailCoreTypeInfo)(){ \ +return getTypeNameFromObject(&typeid(nativeType)); \ +} \ +CObject FUNCNAME(copy)(structName self) { \ + return CObject_new(self.instance->copy()); \ +} \ + + +//#define C_SYNTHESIZE_COBJECT_CAST_DEFINITION(structName) \ +//CObject FUNCNAME(toCObject)(structName self) \ +//CF_SWIFT_NAME(structName.toCObject(self:)); \ +//structName FUNCNAME(newWithCObject)(CObject obj) \ +//CF_SWIFT_NAME(structName.init(cobject:)); \ + + +//CObject MailCoreString_toCObject(MailCoreString self) +//CF_SWIFT_NAME(MailCoreString.toCObject(self:)); +// +//MailCoreString MailCoreString_newWithCObject(struct CObject cobject) +//CF_SWIFT_NAME(MailCoreString.init(cobject:)); + +#define C_SYNTHESIZE_BOOL(setter, getter) C_SYNTHESIZE_SCALAR(bool, bool, setter, getter) +#define C_SYNTHESIZE_CHAR(setter, getter) C_SYNTHESIZE_SCALAR(char, char, setter, getter) +#define C_SYNTHESIZE_ARRAY(setter, getter) C_SYNTHESIZE_MAILCORE_OBJ(CArray, CArray_new, setter, getter) +#define C_SYNTHESIZE_STRING(setter, getter) C_SYNTHESIZE_MAILCORE_OBJ(MailCoreString, MailCoreString_new, setter, getter) + +#define C_SAFE_RETAIN(o) (o.instance != NULL ? o.instance->retain() : NULL) +#define C_SAFE_COPY(o) (o.instance != NULL ? o.instance->copy() : NULL) + +#define C_SAFE_RELEASE(o) \ +do { \ +if (o != NULL) { \ +o->release(); \ +o = NULL; \ +} \ +} while (0) + +#define C_SYNTHESIZE_CONSTRUCTOR() \ +structName FUNCNAME(new)(nativeType *obj) { \ +structName self; \ +self.instance = obj; \ +return self; \ +} \ +void FUNCNAME(retain)(structName self) { \ +if (self.instance != NULL) { \ +self.instance->retain(); \ +} \ +} \ +void FUNCNAME(release)(structName self) { \ +if (self.instance != NULL) { \ +self.instance->release(); \ +self.instance = NULL; \ +} \ +} \ +int FUNCNAME(retainCount)(structName self) { \ +return self.instance->retainCount(); \ +} \ + +#define C_SYNTHESIZE_FUNC_WITH_OBJ_0(returnType, funcName) \ +returnType FUNCNAME(funcName)(struct structName self) { \ +return EVALUATOR(returnType,new)(self.instance->funcName()); \ +} \ + +#define C_SYNTHESIZE_FUNC_WITH_OBJ_1(returnType, funcName, arg1Type) \ +returnType FUNCNAME(funcName)(struct structName self, arg1Type arg1) { \ +return EVALUATOR(returnType,new)(self.instance->funcName(arg1.instance)); \ +} \ + +#define C_SYNTHESIZE_FUNC_WITH_OBJ_2(returnType, funcName, arg1Type, arg2Type) \ +returnType FUNCNAME(funcName)(struct structName self, arg1Type arg1, arg2Type arg2) { \ +return EVALUATOR(returnType,new)(self.instance->funcName(arg1.instance, arg2.instance)); \ +} \ + +#define C_SYNTHESIZE_FUNC_WITH_OBJ_3(returnType, funcName, arg1Type, arg2Type, arg3Type) \ +returnType FUNCNAME(funcName)(struct structName self, arg1Type arg1, arg2Type arg2, arg3Type arg3) { \ +return EVALUATOR(returnType,new)(self.instance->funcName(arg1.instance, arg2.instance, arg3.instance)); \ +} \ + +#define C_SYNTHESIZE_FUNC_WITH_VOID_0(funcName) \ +void FUNCNAME(funcName)(struct structName self) { \ +self.instance->funcName(); \ +} \ + +#define C_SYNTHESIZE_FUNC_WITH_VOID_1(funcName, arg1Type) \ +void FUNCNAME(funcName)(struct structName self, arg1Type arg1) { \ + self.instance->funcName(arg1.instance); \ +} \ + +#define C_SYNTHESIZE_FUNC_WITH_VOID_2(funcName, arg1Type, arg2Type) \ +void FUNCNAME(funcName)(struct structName self, arg1Type arg1, arg2Type arg2) { \ +self.instance->funcName(arg1.instance, arg2.instance); \ +} \ + +#define C_SYNTHESIZE_FUNC_WITH_SCALAR_0(returnType, funcName) \ +returnType FUNCNAME(funcName)(struct structName self) { \ +return self.instance->funcName(); \ +} \ + +#define C_SYNTHESIZE_FUNC_WITH_SCALAR_1(returnType, funcName, arg1Type) \ +returnType FUNCNAME(funcName)(struct structName self, arg1Type arg1) { \ +return self.instance->funcName(arg1.instance); \ +} \ + +#define C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ_0(returnType, funcName) \ +returnType FUNCNAME(funcName)() { \ +return EVALUATOR(returnType,new)(nativeType::funcName()); \ +} \ + +#define C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ_1(returnType, funcName, arg1Type) \ +returnType FUNCNAME(funcName)(arg1Type arg1) { \ +return EVALUATOR(returnType,new)(nativeType::funcName(arg1.instance)); \ +} \ + +#define C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ_2(returnType, funcName, arg1Type, arg2Type) \ +returnType FUNCNAME(funcName)(arg1Type arg1, arg2Type arg2) { \ +return EVALUATOR(returnType,new)(nativeType::funcName(arg1.instance, arg2.instance)); \ +} \ + +#define C_SYNTHESIZE_FUNC_WITH_OBJ(returnType, funcName,...) __GET_MACRO(_U, _U, _U, _U, ##__VA_ARGS__, C_SYNTHESIZE_FUNC_WITH_OBJ_3, C_SYNTHESIZE_FUNC_WITH_OBJ_2, C_SYNTHESIZE_FUNC_WITH_OBJ_1, C_SYNTHESIZE_FUNC_WITH_OBJ_0)(returnType, funcName, ##__VA_ARGS__) + +#define C_SYNTHESIZE_FUNC_WITH_VOID(funcName,...) __GET_MACRO(_U, _U, _U, _U, ##__VA_ARGS__, C_SYNTHESIZE_FUNC_WITH_VOID_3, C_SYNTHESIZE_FUNC_WITH_VOID_2, C_SYNTHESIZE_FUNC_WITH_VOID_1, C_SYNTHESIZE_FUNC_WITH_VOID_0)(funcName, ##__VA_ARGS__) + +#define C_SYNTHESIZE_FUNC_WITH_SCALAR(returnType, funcName,...) __GET_MACRO(_U, _U, _U, _U, ##__VA_ARGS__, C_SYNTHESIZE_FUNC_WITH_SCALAR_3, C_SYNTHESIZE_FUNC_WITH_SCALAR_2, C_SYNTHESIZE_FUNC_WITH_SCALAR_1, C_SYNTHESIZE_FUNC_WITH_SCALAR_0)(returnType, funcName, ##__VA_ARGS__) + +#define C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ(returnType, funcName,...) __GET_MACRO(_U, _U, _U, _U, ##__VA_ARGS__, C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ_3, C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ_2, C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ_1, C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ_0)(returnType, funcName, ##__VA_ARGS__) + +#endif diff --git a/src/c/CBase.h b/src/c/CBase.h new file mode 100644 index 000000000..f5405b671 --- /dev/null +++ b/src/c/CBase.h @@ -0,0 +1,110 @@ +#ifndef MAILCORE_CBASE_H +#define MAILCORE_CBASE_H + +#include +#include + +//TODO: fix ICUBasetypes +#if defined(_MSC_VER) || defined(ANDROID) +#include +#elif defined(__CHAR16_TYPE__) +typedef __CHAR16_TYPE__ UChar; +#else +typedef uint16_t UChar; +#endif + +#ifdef _MSC_VER +# ifdef CMAILCORE_DLL +# define CMAILCORE_EXPORT __declspec(dllexport) +# else +# define CMAILCORE_EXPORT __declspec(dllimport) +# endif +#else +# define CMAILCORE_EXPORT +#endif + +#if __has_attribute(swift_name) +# define CF_SWIFT_NAME(_name) __attribute__((swift_name(#_name))) +#else +# define CF_SWIFT_NAME(_name) +#endif + +#define __GET_MACRO(_6,_5,_4,_3,_2,_1,_0,NAME,...) NAME + +#ifdef __cplusplus + +#define C_SYNTHESIZE_STRUCT_DEFINITION(structName, nativeType) \ +typedef struct structName { \ +nativeType* instance; \ +} structName; \ +CMAILCORE_EXPORT structName structName##_##new(nativeType *obj); \ +CMAILCORE_EXPORT void structName##_##retain(structName self); \ +CMAILCORE_EXPORT void structName##_##release(structName self); \ +CMAILCORE_EXPORT int structName##_##retainCount(structName self); \ + +#else + +#define C_SYNTHESIZE_STRUCT_DEFINITION(structName, nativeType) \ +typedef struct structName { \ +void* instance; \ +} structName; \ +CMAILCORE_EXPORT void structName##_##retain(structName self) CF_SWIFT_NAME(structName.retain(self:)); \ +CMAILCORE_EXPORT void structName##_##release(structName self) CF_SWIFT_NAME(structName.release(self:)); \ +CMAILCORE_EXPORT int structName##_##retainCount(structName self) CF_SWIFT_NAME(structName.retainCount(self:)); \ + +#endif + +#define C_SYNTHESIZE_COBJECT_CAST_DEFINITION(structName) \ +CMAILCORE_EXPORT CObject structName##_##toCObject(structName self) CF_SWIFT_NAME(structName.toCObject(self:)); \ +CMAILCORE_EXPORT structName structName##_##newWithCObject(CObject obj) CF_SWIFT_NAME(structName.init(cobject:)); \ +CMAILCORE_EXPORT CData structName##_##mailCoreTypeInfo(void); \ +CMAILCORE_EXPORT CObject structName##_##copy(structName self) CF_SWIFT_NAME(structName.copy(self:)); \ + +#define C_SYNTHESIZE_READONLY_PROPERTY_DEFINITION(structName, propertyType, getterName) \ +CMAILCORE_EXPORT propertyType structName##_##getterName(struct structName self) CF_SWIFT_NAME(getter:structName.getterName(self:)); \ + +#define C_SYNTHESIZE_PROPERTY_DEFINITION(structName, propertyType, getterName, setterName) \ +CMAILCORE_EXPORT propertyType structName##_##getterName(struct structName self) CF_SWIFT_NAME(getter:structName.getterName(self:)); \ +CMAILCORE_EXPORT void structName##_##setterName(struct structName self, propertyType port) CF_SWIFT_NAME(setter:structName.getterName(self:newValue:)); \ + +#define C_SYNTHESIZE_FUNC_DEFINITION_0(structName, returnType, funcName) \ +CMAILCORE_EXPORT returnType structName##_##funcName(struct structName self) CF_SWIFT_NAME(structName.funcName(self:)); \ + +#define C_SYNTHESIZE_FUNC_DEFINITION_1(structName, returnType, funcName, arg1Type) \ +CMAILCORE_EXPORT returnType structName##_##funcName(struct structName self, arg1Type arg1) CF_SWIFT_NAME(structName.funcName(self:_:)); \ + +#define C_SYNTHESIZE_FUNC_DEFINITION_2(structName, returnType, funcName, arg1Type, arg2Type) \ +CMAILCORE_EXPORT returnType structName##_##funcName(struct structName self, arg1Type arg1, arg2Type arg2) CF_SWIFT_NAME(structName.funcName(self:_:_:)); \ + +#define C_SYNTHESIZE_FUNC_DEFINITION_3(structName, returnType, funcName, arg1Type, arg2Type, arg3Type) \ +CMAILCORE_EXPORT returnType structName##_##funcName(struct structName self, arg1Type arg1, arg2Type arg2, arg3Type arg3) CF_SWIFT_NAME(structName.funcName(self:_:_:_:)); \ + +#define C_SYNTHESIZE_FUNC_DEFINITION_4(structName, returnType, funcName, arg1Type, arg2Type, arg3Type, argType4) \ +CMAILCORE_EXPORT returnType structName##_##funcName(struct structName self, arg1Type arg1, arg2Type arg2, arg3Type arg3, argType4 arg4) CF_SWIFT_NAME(structName.funcName(self:_:_:_:_:)); \ + +#define C_SYNTHESIZE_FUNC_DEFINITION_5(structName, returnType, funcName, arg1Type, arg2Type, arg3Type, argType4, argType5) \ +CMAILCORE_EXPORT returnType structName##_##funcName(struct structName self, arg1Type arg1, arg2Type arg2, arg3Type arg3, argType4 arg4, argType5 arg5) CF_SWIFT_NAME(structName.funcName(self:_:_:_:_:_:)); \ + +#define C_SYNTHESIZE_FUNC_DEFINITION_6(structName, returnType, funcName, arg1Type, arg2Type, arg3Type, argType4, argType5, argType6) \ +CMAILCORE_EXPORT returnType structName##_##funcName(struct structName self, arg1Type arg1, arg2Type arg2, arg3Type arg3, argType4 arg4, argType5 arg5, argType6 arg6) CF_SWIFT_NAME(structName.funcName(self:_:_:_:_:_:_:)); \ + +#define C_SYNTHESIZE_STATIC_FUNC_DEFINITION_0(structName, returnType, funcName) \ +CMAILCORE_EXPORT returnType structName##_##funcName(void); \ + +#define C_SYNTHESIZE_STATIC_FUNC_DEFINITION_1(structName, returnType, funcName, arg1Type) \ +CMAILCORE_EXPORT returnType structName##_##funcName(arg1Type arg1) CF_SWIFT_NAME(structName.funcName(_:)); \ + +#define C_SYNTHESIZE_STATIC_FUNC_DEFINITION_2(structName, returnType, funcName, arg1Type, arg2Type) \ +CMAILCORE_EXPORT returnType structName##_##funcName(arg1Type arg1, arg2Type arg2) CF_SWIFT_NAME(structName.funcName(_:_:)); \ + +#define C_SYNTHESIZE_STATIC_FUNC_DEFINITION_3(structName, returnType, funcName, arg1Type, arg2Type, arg3Type) \ +CMAILCORE_EXPORT returnType structName##_##funcName(arg1Type arg1, arg2Type arg2, arg3Type arg3) CF_SWIFT_NAME(structName.funcName(_:_:_:)); \ + +#define C_SYNTHESIZE_STATIC_FUNC_DEFINITION_4(structName, returnType, funcName, arg1Type, arg2Type, arg3Type, arg4Type) \ +CMAILCORE_EXPORT returnType structName##_##funcName(arg1Type arg1, arg2Type arg2, arg3Type arg3, arg4Type arg4) CF_SWIFT_NAME(structName.funcName(_:_:_:_:)); \ + +#define C_SYNTHESIZE_FUNC_DEFINITION(structName, returnType, funcName,...) __GET_MACRO(_U, ##__VA_ARGS__,C_SYNTHESIZE_FUNC_DEFINITION_6,C_SYNTHESIZE_FUNC_DEFINITION_5,C_SYNTHESIZE_FUNC_DEFINITION_4,C_SYNTHESIZE_FUNC_DEFINITION_3,C_SYNTHESIZE_FUNC_DEFINITION_2,C_SYNTHESIZE_FUNC_DEFINITION_1,C_SYNTHESIZE_FUNC_DEFINITION_0)(structName, returnType, funcName, ##__VA_ARGS__) + +#define C_SYNTHESIZE_STATIC_FUNC_DEFINITION(structName, returnType, funcName,...) __GET_MACRO(_U, _U, _U, ##__VA_ARGS__, C_SYNTHESIZE_STATIC_FUNC_DEFINITION_4, C_SYNTHESIZE_STATIC_FUNC_DEFINITION_3, C_SYNTHESIZE_STATIC_FUNC_DEFINITION_2, C_SYNTHESIZE_STATIC_FUNC_DEFINITION_1, C_SYNTHESIZE_STATIC_FUNC_DEFINITION_0)(structName, returnType, funcName, ##__VA_ARGS__) + +#endif diff --git a/src/c/CCore.h b/src/c/CCore.h new file mode 100644 index 000000000..968fffb45 --- /dev/null +++ b/src/c/CCore.h @@ -0,0 +1,42 @@ +#ifndef CCore_Bridging_Header_h +#define CCore_Bridging_Header_h + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include + +#include +#include + +#endif /* CCore_Bridging_Header_h */ diff --git a/src/c/CMailCore.h b/src/c/CMailCore.h new file mode 100644 index 000000000..bc9eb8dd5 --- /dev/null +++ b/src/c/CMailCore.h @@ -0,0 +1,16 @@ +// +// CMailCore.h +// CMailCore framework +// +// Copyright (c) 2015 Readdle. All rights reserved. +// + +#include + +extern int mailimap_hack_date_time_parse(char * str, + struct mailimap_date_time ** result, + size_t progr_rate, + progress_function * progr_fun); + +extern time_t MailCoreTimestampFromDate(struct mailimf_date_time * date_time); +extern time_t MailCoreTimestampFromIMAPDate(struct mailimap_date_time * imap_date); \ No newline at end of file diff --git a/src/c/abstract/CAbstractMessage.cpp b/src/c/abstract/CAbstractMessage.cpp new file mode 100644 index 000000000..7214f25db --- /dev/null +++ b/src/c/abstract/CAbstractMessage.cpp @@ -0,0 +1,19 @@ +#include +#include "CAbstractMessage.h" +#include "CMessageHeader.h" +#include "CAbstractPart.h" +#include "CBase+Private.h" + +#define nativeType mailcore::AbstractMessage +#define structName CAbstractMessage + +C_SYNTHESIZE_CONSTRUCTOR() +C_SYNTHESIZE_COBJECT_CAST() + +C_SYNTHESIZE_MAILCORE_OBJ(CMessageHeader, CMessageHeader_new, setHeader, header) + +C_SYNTHESIZE_FUNC_WITH_OBJ(CAbstractPart, partForContentID, MailCoreString) +C_SYNTHESIZE_FUNC_WITH_OBJ(CAbstractPart, partForUniqueID, MailCoreString) +C_SYNTHESIZE_FUNC_WITH_OBJ(CArray, attachments) +C_SYNTHESIZE_FUNC_WITH_OBJ(CArray, htmlInlineAttachments) +C_SYNTHESIZE_FUNC_WITH_OBJ(CArray, requiredPartsForRendering) diff --git a/src/c/abstract/CAbstractMessage.h b/src/c/abstract/CAbstractMessage.h new file mode 100644 index 000000000..a19bc9fed --- /dev/null +++ b/src/c/abstract/CAbstractMessage.h @@ -0,0 +1,36 @@ +#ifndef MAILCORE_CABSTRACT_MESSAGE_H +#define MAILCORE_CABSTRACT_MESSAGE_H + +#include "stdint.h" + +#include "CBase.h" +#include "CArray.h" +#include "CMessageHeader.h" +#include "CAbstractPart.h" + +#ifdef __cplusplus + +namespace mailcore { + class AbstractMessage; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CAbstractMessage, mailcore::AbstractMessage) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CAbstractMessage) + + C_SYNTHESIZE_PROPERTY_DEFINITION(CAbstractMessage, struct CMessageHeader, header, setHeader) + + C_SYNTHESIZE_FUNC_DEFINITION(CAbstractMessage, CAbstractPart, partForContentID, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CAbstractMessage, CAbstractPart, partForUniqueID, MailCoreString) + + C_SYNTHESIZE_FUNC_DEFINITION(CAbstractMessage, CArray, attachments) + C_SYNTHESIZE_FUNC_DEFINITION(CAbstractMessage, CArray, htmlInlineAttachments) + C_SYNTHESIZE_FUNC_DEFINITION(CAbstractMessage, CArray, requiredPartsForRendering) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/c/abstract/CAbstractMessagePart.cpp b/src/c/abstract/CAbstractMessagePart.cpp new file mode 100644 index 000000000..c408452e0 --- /dev/null +++ b/src/c/abstract/CAbstractMessagePart.cpp @@ -0,0 +1,16 @@ +#include +#include "CAbstractMessage.h" +#include "CMessageHeader.h" +#include "CAbstractPart.h" +#include "CAbstractMessagePart.h" +#include "CBase+Private.h" + +#define nativeType mailcore::AbstractMessagePart +#define structName CAbstractMessagePart + +C_SYNTHESIZE_MAILCORE_OBJ(CMessageHeader, CMessageHeader_new, setHeader, header) +C_SYNTHESIZE_MAILCORE_OBJ(CAbstractPart, CAbstractPart_new, setMainPart, mainPart) + +C_SYNTHESIZE_CONSTRUCTOR() +C_SYNTHESIZE_COBJECT_CAST() + diff --git a/src/c/abstract/CAbstractMessagePart.h b/src/c/abstract/CAbstractMessagePart.h new file mode 100644 index 000000000..68391e47d --- /dev/null +++ b/src/c/abstract/CAbstractMessagePart.h @@ -0,0 +1,31 @@ +#ifndef MAILCORE_CABSTRACT_MESSAGE_PART_H +#define MAILCORE_CABSTRACT_MESSAGE_PART_H + +#include "stdint.h" + +#include "CBase.h" +#include "CArray.h" +#include "CAbstractPart.h" +#include "CMessageHeader.h" + +#ifdef __cplusplus + +namespace mailcore { + class AbstractMessagePart; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CAbstractMessagePart, mailcore::AbstractMessagePart) + + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CAbstractMessagePart) + + C_SYNTHESIZE_PROPERTY_DEFINITION(CAbstractMessagePart, CMessageHeader, header, setHeader) + C_SYNTHESIZE_PROPERTY_DEFINITION(CAbstractMessagePart, CAbstractPart, mainPart, setMainPart) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/c/abstract/CAbstractMessageRendererCallback.cpp b/src/c/abstract/CAbstractMessageRendererCallback.cpp new file mode 100644 index 000000000..eb2d6f878 --- /dev/null +++ b/src/c/abstract/CAbstractMessageRendererCallback.cpp @@ -0,0 +1,259 @@ +#include "CAbstractMessageRendererCallback.h" +#include +#include +#include "CData.h" + +#include "CAbstractMessageRendererCallbackWrapper.h" + +AbstractMessageRendererCallback::AbstractMessageRendererCallback(CanPreviewPartBlock canPreviewPartBlock, + ShouldShowPartBlock shouldShowPartBlock, + TemplateValuesForHeaderBlock templateValuesForHeaderBlock, + TemplateValuesForPartBlock templateValuesForPartBlock, + TemplateForMainHeaderBlock templateForMainHeaderBlock, + TemplateForImageBlock templateForImageBlock, + TemplateForAttachmentBlock templateForAttachmentBlock, + TemplateForMessageBlock templateForMessageBlock, + TemplateForEmbeddedMessageBlock templateForEmbeddedMessageBlock, + TemplateForEmbeddedMessageHeaderBlock templateForEmbeddedMessageHeaderBlock, + TemplateForAttachmentSeparatorBlock templateForAttachmentSeparatorBlock, + CleanHTMLForPartBlock cleanHTMLForPartBlock, + FilterHTMLForPartBlock filterHTMLForPartBlock, + FilterHTMLForMessageBlock filterHTMLForMessageBlock, + DataForIMAPPartBlock dataForIMAPPartBlock, + PrefetchAttachmentIMAPPartBlock prefetchAttachmentIMAPPartBlock, + PrefetchImageIMAPPartBlock prefetchImageIMAPPartBlock, + const void* userInfo) { + this->canPreviewPartBlock = canPreviewPartBlock; + this->shouldShowPartBlock = shouldShowPartBlock; + this->templateValuesForHeaderBlock = templateValuesForHeaderBlock; + this->templateValuesForPartBlock = templateValuesForPartBlock; + this->templateForMainHeaderBlock = templateForMainHeaderBlock; + this->templateForImageBlock = templateForImageBlock; + this->templateForAttachmentBlock = templateForAttachmentBlock; + this->templateForMessageBlock = templateForMessageBlock; + this->templateForEmbeddedMessageBlock = templateForEmbeddedMessageBlock; + this->templateForEmbeddedMessageHeaderBlock = templateForEmbeddedMessageHeaderBlock; + this->templateForAttachmentSeparatorBlock = templateForAttachmentSeparatorBlock; + this->cleanHTMLForPartBlock = cleanHTMLForPartBlock; + this->filterHTMLForPartBlock = filterHTMLForPartBlock; + this->filterHTMLForMessageBlock = filterHTMLForMessageBlock; + this->dataForIMAPPartBlock = dataForIMAPPartBlock; + this->prefetchAttachmentIMAPPartBlock = prefetchAttachmentIMAPPartBlock; + this->prefetchImageIMAPPartBlock = prefetchImageIMAPPartBlock; + this->userInfo = userInfo; +} + +bool AbstractMessageRendererCallback::canPreviewPart(mailcore::AbstractPart * part) { + if (canPreviewPartBlock != NULL) { + return canPreviewPartBlock(userInfo, CAbstractPart_new(part)) > 0; + } + return HTMLRendererTemplateCallback::canPreviewPart(part); +} + +bool AbstractMessageRendererCallback::shouldShowPart(mailcore::AbstractPart * part) { + if (shouldShowPartBlock != NULL) { + return shouldShowPartBlock(userInfo, CAbstractPart_new(part)) > 0; + } + return HTMLRendererTemplateCallback::shouldShowPart(part); +} + +mailcore::HashMap * AbstractMessageRendererCallback::templateValuesForHeader(mailcore::MessageHeader * header) { + mailcore::HashMap * result = NULL; + if (templateValuesForHeaderBlock != NULL) { + result = templateValuesForHeaderBlock(userInfo, CMessageHeader_new(header)).instance; + } + if (result == NULL) { + result = HTMLRendererTemplateCallback::templateValuesForHeader(header); + } + return result; +} + +mailcore::HashMap * AbstractMessageRendererCallback::templateValuesForPart(mailcore::AbstractPart * part) { + mailcore::HashMap * result = NULL; + if (templateValuesForPartBlock != NULL) { + result = templateValuesForPartBlock(userInfo, CAbstractPart_new(part)).instance; + } + if (result == NULL) { + result = HTMLRendererTemplateCallback::templateValuesForPart(part); + } + return result; +} + +mailcore::String * AbstractMessageRendererCallback::templateForMainHeader(mailcore::MessageHeader * header) { + mailcore::String * result = NULL; + if (templateForMainHeaderBlock != NULL) { + result = reinterpret_cast(templateForMainHeaderBlock(userInfo, CMessageHeader_new(header)).instance) ; + } + if (result == NULL) { + result = HTMLRendererTemplateCallback::templateForMainHeader(header); + } + return result; +} + +mailcore::String * AbstractMessageRendererCallback::templateForImage(mailcore::AbstractPart * part) { + mailcore::String * result = NULL; + if (templateForImageBlock != NULL) { + result = reinterpret_cast(templateForImageBlock(userInfo, CAbstractPart_new(part)).instance); + } + if (result == NULL) { + result = HTMLRendererTemplateCallback::templateForImage(part); + } + return result; +} + +mailcore::String * AbstractMessageRendererCallback::templateForAttachment(mailcore::AbstractPart * part) { + mailcore::String * result = NULL; + if (templateForAttachmentBlock != NULL) { + result = reinterpret_cast(templateForAttachmentBlock(userInfo, CAbstractPart_new(part)).instance); + } + if (result == NULL) { + result = HTMLRendererTemplateCallback::templateForAttachment(part); + } + return result; +} + +mailcore::String * AbstractMessageRendererCallback::templateForMessage(mailcore::AbstractMessage * message) { + mailcore::String * result = NULL; + if (templateForMessageBlock != NULL) { + result = reinterpret_cast(templateForMessageBlock(userInfo, CAbstractMessage_new(message)).instance); + } + if (result == NULL) { + result = HTMLRendererTemplateCallback::templateForMessage(message); + } + return result; +} + +mailcore::String * AbstractMessageRendererCallback::templateForEmbeddedMessage(mailcore::AbstractMessagePart * part) { + mailcore::String * result = NULL; + if (templateForEmbeddedMessageBlock != NULL) { + result = reinterpret_cast(templateForEmbeddedMessageBlock(userInfo, CAbstractMessagePart_new(part)).instance); + } + if (result == NULL) { + result = HTMLRendererTemplateCallback::templateForEmbeddedMessage(part); + } + return result; +} + +mailcore::String * AbstractMessageRendererCallback::templateForEmbeddedMessageHeader(mailcore::MessageHeader * header) { + mailcore::String * result = NULL; + if (templateForEmbeddedMessageHeaderBlock != NULL) { + result = reinterpret_cast(templateForEmbeddedMessageHeaderBlock(userInfo, CMessageHeader_new(header)).instance); + } + if (result == NULL) { + result = HTMLRendererTemplateCallback::templateForEmbeddedMessageHeader(header); + } + return result; +} + +mailcore::String * AbstractMessageRendererCallback::templateForAttachmentSeparator() { + mailcore::String * result = NULL; + if (templateForAttachmentSeparatorBlock != NULL) { + result = reinterpret_cast(templateForAttachmentSeparatorBlock(userInfo).instance); + } + if (result == NULL) { + result = HTMLRendererTemplateCallback::templateForAttachmentSeparator(); + } + return result; +} + +mailcore::String * AbstractMessageRendererCallback::cleanHTMLForPart(mailcore::String * html) { + mailcore::String * result = NULL; + if (cleanHTMLForPartBlock != NULL) { + result = reinterpret_cast(cleanHTMLForPartBlock(userInfo, MailCoreString_new(html)).instance); + } + if (result == NULL) { + result = HTMLRendererTemplateCallback::cleanHTMLForPart(html); + } + return result; +} + +mailcore::String * AbstractMessageRendererCallback::filterHTMLForPart(mailcore::String * html) { + mailcore::String * result = NULL; + if (filterHTMLForPartBlock != NULL) { + result = reinterpret_cast(filterHTMLForPartBlock(userInfo, MailCoreString_new(html)).instance); + } + if (result == NULL) { + result = HTMLRendererTemplateCallback::filterHTMLForPart(html); + } + return result; +} + +mailcore::String * AbstractMessageRendererCallback::filterHTMLForMessage(mailcore::String * html) { + mailcore::String * result = NULL; + if (filterHTMLForMessageBlock != NULL) { + result = reinterpret_cast(filterHTMLForMessageBlock(userInfo, MailCoreString_new(html)).instance); + } + if (result == NULL) { + result = HTMLRendererTemplateCallback::filterHTMLForMessage(html); + } + return result; +} + +mailcore::Data * AbstractMessageRendererCallback::dataForIMAPPart(mailcore::String * folder, mailcore::IMAPPart * part) { + mailcore::Data * result = NULL; + if (dataForIMAPPartBlock != NULL) { + CData data = dataForIMAPPartBlock(userInfo, MailCoreString_new(folder), CIMAPPart_new(part)); + result = data.instance; + } + return result; +} + +void AbstractMessageRendererCallback::prefetchAttachmentIMAPPart(mailcore::String * folder, mailcore::IMAPPart * part) { + if (prefetchAttachmentIMAPPartBlock != NULL) { + prefetchAttachmentIMAPPartBlock(userInfo, MailCoreString_new(folder), CIMAPPart_new(part)); + } +} + +void AbstractMessageRendererCallback::prefetchImageIMAPPart(mailcore::String * folder, mailcore::IMAPPart * part) { + if (prefetchImageIMAPPartBlock != NULL) { + prefetchImageIMAPPartBlock(userInfo, MailCoreString_new(folder), CIMAPPart_new(part)); + } +} + +CAbstractMessageRendererCallback CAbstractMessageRendererCallback_new(CanPreviewPartBlock canPreviewPartBlock, + ShouldShowPartBlock shouldShowPartBlock, + TemplateValuesForHeaderBlock templateValuesForHeaderBlock, + TemplateValuesForPartBlock templateValuesForPartBlock, + TemplateForMainHeaderBlock templateForMainHeaderBlock, + TemplateForImageBlock templateForImageBlock, + TemplateForAttachmentBlock templateForAttachmentBlock, + TemplateForMessageBlock templateForMessageBlock, + TemplateForEmbeddedMessageBlock templateForEmbeddedMessageBlock, + TemplateForEmbeddedMessageHeaderBlock templateForEmbeddedMessageHeaderBlock, + TemplateForAttachmentSeparatorBlock templateForAttachmentSeparatorBlock, + CleanHTMLForPartBlock cleanHTMLForPartBlock, + FilterHTMLForPartBlock filterHTMLForPartBlock, + FilterHTMLForMessageBlock filterHTMLForMessageBlock, + DataForIMAPPartBlock dataForIMAPPartBlock, + PrefetchAttachmentIMAPPartBlock prefetchAttachmentIMAPPartBlock, + PrefetchImageIMAPPartBlock prefetchImageIMAPPartBlock, + const void* userInfo) { + CAbstractMessageRendererCallback self; + self.callbackBridge = new AbstractMessageRendererCallback(canPreviewPartBlock, + shouldShowPartBlock, + templateValuesForHeaderBlock, + templateValuesForPartBlock, + templateForMainHeaderBlock, + templateForImageBlock, + templateForAttachmentBlock, + templateForMessageBlock, + templateForEmbeddedMessageBlock, + templateForEmbeddedMessageHeaderBlock, + templateForAttachmentSeparatorBlock, + cleanHTMLForPartBlock, + filterHTMLForPartBlock, + filterHTMLForMessageBlock, + dataForIMAPPartBlock, + prefetchAttachmentIMAPPartBlock, + prefetchImageIMAPPartBlock, + userInfo); + return self; +} + +void CAbstractMessageRendererCallback_rerain(CAbstractMessageRendererCallback self) { + self.callbackBridge->retain(); +} + +void CAbstractMessageRendererCallback_release(CAbstractMessageRendererCallback self) { + self.callbackBridge->release(); +} diff --git a/src/c/abstract/CAbstractMessageRendererCallback.h b/src/c/abstract/CAbstractMessageRendererCallback.h new file mode 100644 index 000000000..4df4cdea5 --- /dev/null +++ b/src/c/abstract/CAbstractMessageRendererCallback.h @@ -0,0 +1,80 @@ +#ifndef CAbstractMessageRendererCallback_h +#define CAbstractMessageRendererCallback_h + +#include "CBase.h" +#include "CArray.h" +#include "CMessageConstants.h" +#include "CAbstractPart.h" +#include "CDictionary.h" +#include "CMessageHeader.h" +#include "CAbstractMessage.h" +#include "CAbstractMessagePart.h" +#include "CIMAPPart.h" + + +#ifdef __cplusplus + +class AbstractMessageRendererCallback; + +extern "C" { +#endif + + typedef uint8_t (*CanPreviewPartBlock)(const void* userInfo, CAbstractPart part); + typedef uint8_t (*ShouldShowPartBlock)(const void* userInfo, CAbstractPart part); + typedef CDictionary (*TemplateValuesForHeaderBlock)(const void* userInfo, CMessageHeader header); + typedef CDictionary (*TemplateValuesForPartBlock)(const void* userInfo, CAbstractPart part); + typedef CObject (*TemplateForMainHeaderBlock)(const void* userInfo, CMessageHeader header); + typedef CObject (*TemplateForImageBlock)(const void* userInfo, CAbstractPart part); + typedef CObject (*TemplateForAttachmentBlock)(const void* userInfo, CAbstractPart part); + typedef CObject (*TemplateForMessageBlock)(const void* userInfo, CAbstractMessage message); + typedef CObject (*TemplateForEmbeddedMessageBlock)(const void* userInfo, CAbstractMessagePart part); + typedef CObject (*TemplateForEmbeddedMessageHeaderBlock)(const void* userInfo, CMessageHeader header); + typedef CObject (*TemplateForAttachmentSeparatorBlock)(const void* userInfo); + typedef CObject (*CleanHTMLForPartBlock)(const void* userInfo, MailCoreString html); + typedef CObject (*FilterHTMLForPartBlock)(const void* userInfo, MailCoreString html); + typedef CObject (*FilterHTMLForMessageBlock)(const void* userInfo, MailCoreString html); + + typedef CData (*DataForIMAPPartBlock)(const void* userInfo, MailCoreString folder, CIMAPPart part); + typedef void (*PrefetchAttachmentIMAPPartBlock)(const void* userInfo, MailCoreString folder, CIMAPPart part); + typedef void (*PrefetchImageIMAPPartBlock)(const void* userInfo, MailCoreString folder, CIMAPPart part); + + struct CAbstractMessageRendererCallback { +#ifdef __cplusplus + AbstractMessageRendererCallback* callbackBridge; +#else + void* callbackBridge; +#endif + }; + typedef struct CAbstractMessageRendererCallback CAbstractMessageRendererCallback; + + CMAILCORE_EXPORT CAbstractMessageRendererCallback CAbstractMessageRendererCallback_new(CanPreviewPartBlock canPreviewPartBlock, + ShouldShowPartBlock shouldShowPartBlock, + TemplateValuesForHeaderBlock templateValuesForHeaderBlock, + TemplateValuesForPartBlock templateValuesForPartBlock, + TemplateForMainHeaderBlock templateForMainHeaderBlock, + TemplateForImageBlock templateForImageBlock, + TemplateForAttachmentBlock templateForAttachmentBlock, + TemplateForMessageBlock templateForMessageBlock, + TemplateForEmbeddedMessageBlock templateForEmbeddedMessageBlock, + TemplateForEmbeddedMessageHeaderBlock templateForEmbeddedMessageHeaderBlock, + TemplateForAttachmentSeparatorBlock templateForAttachmentSeparatorBlock, + CleanHTMLForPartBlock cleanHTMLForPartBlock, + FilterHTMLForPartBlock filterHTMLForPartBlock, + FilterHTMLForMessageBlock filterHTMLForMessageBlock, + DataForIMAPPartBlock dataForIMAPPartBlock, + PrefetchAttachmentIMAPPartBlock prefetchAttachmentIMAPPartBlock, + PrefetchImageIMAPPartBlock prefetchImageIMAPPartBlock, + const void* userInfo) + CF_SWIFT_NAME(CAbstractMessageRendererCallback.init(canPreviewPartBlock:shouldShowPartBlock:templateValuesForHeaderBlock:templateValuesForPartBlock:templateForMainHeaderBlock:templateForImageBlock:templateForAttachmentBlock:templateForMessageBlock:templateForEmbeddedMessageBlock:templateForEmbeddedMessageHeaderBlock:templateForAttachmentSeparatorBlock:cleanHTMLForPartBlock:filterHTMLForPartBlock:filterHTMLForMessageBlock:dataForIMAPPartBlock:prefetchAttachmentIMAPPartBlock:prefetchImageIMAPPartBlock:userInfo:)); + + CMAILCORE_EXPORT void CAbstractMessageRendererCallback_retain(CAbstractMessageRendererCallback self) + CF_SWIFT_NAME(CAbstractMessageRendererCallback.retain(self:)); + + CMAILCORE_EXPORT void CAbstractMessageRendererCallback_release(CAbstractMessageRendererCallback self) + CF_SWIFT_NAME(CAbstractMessageRendererCallback.release(self:)); + +#ifdef __cplusplus +} +#endif + +#endif /* CAbstractMessageRendererCallback_h */ diff --git a/src/c/abstract/CAbstractMessageRendererCallbackWrapper.h b/src/c/abstract/CAbstractMessageRendererCallbackWrapper.h new file mode 100644 index 000000000..a14d34955 --- /dev/null +++ b/src/c/abstract/CAbstractMessageRendererCallbackWrapper.h @@ -0,0 +1,106 @@ +// +// CAbstractMessageRendererCallbackWrapper.h +// mailcore2 +// +// Created by Andrew on 8/2/17. +// Copyright © 2017 MailCore. All rights reserved. +// + +#ifndef CAbstractMessageRendererCallbackWrapper_h +#define CAbstractMessageRendererCallbackWrapper_h + + + + +#ifdef __cplusplus + +#include +extern "C" { +#endif + + typedef uint8_t (*CanPreviewPartBlock)(const void* userInfo, CAbstractPart part); + typedef uint8_t (*ShouldShowPartBlock)(const void* userInfo, CAbstractPart part); + typedef CDictionary (*TemplateValuesForHeaderBlock)(const void* userInfo, CMessageHeader header); + typedef CDictionary (*TemplateValuesForPartBlock)(const void* userInfo, CAbstractPart part); + typedef CObject (*TemplateForMainHeaderBlock)(const void* userInfo, CMessageHeader header); + typedef CObject (*TemplateForImageBlock)(const void* userInfo, CAbstractPart part); + typedef CObject (*TemplateForAttachmentBlock)(const void* userInfo, CAbstractPart part); + typedef CObject (*TemplateForMessageBlock)(const void* userInfo, CAbstractMessage message); + typedef CObject (*TemplateForEmbeddedMessageBlock)(const void* userInfo, CAbstractMessagePart part); + typedef CObject (*TemplateForEmbeddedMessageHeaderBlock)(const void* userInfo, CMessageHeader header); + typedef CObject (*TemplateForAttachmentSeparatorBlock)(const void* userInfo); + typedef CObject (*CleanHTMLForPartBlock)(const void* userInfo, MailCoreString html); + typedef CObject (*FilterHTMLForPartBlock)(const void* userInfo, MailCoreString html); + typedef CObject (*FilterHTMLForMessageBlock)(const void* userInfo, MailCoreString html); + + typedef CData (*DataForIMAPPartBlock)(const void* userInfo, MailCoreString folder, CIMAPPart part); + typedef void (*PrefetchAttachmentIMAPPartBlock)(const void* userInfo, MailCoreString folder, CIMAPPart part); + typedef void (*PrefetchImageIMAPPartBlock)(const void* userInfo, MailCoreString folder, CIMAPPart part); + +#ifdef __cplusplus +} + +class AbstractMessageRendererCallback : public mailcore::Object, public mailcore::HTMLRendererTemplateCallback, public mailcore::HTMLRendererIMAPCallback { +public: + AbstractMessageRendererCallback(CanPreviewPartBlock canPreviewPartBlock, + ShouldShowPartBlock shouldShowPartBlock, + TemplateValuesForHeaderBlock templateValuesForHeaderBlock, + TemplateValuesForPartBlock templateValuesForPartBlock, + TemplateForMainHeaderBlock templateForMainHeaderBlock, + TemplateForImageBlock templateForImageBlock, + TemplateForAttachmentBlock templateForAttachmentBlock, + TemplateForMessageBlock templateForMessageBlock, + TemplateForEmbeddedMessageBlock templateForEmbeddedMessageBlock, + TemplateForEmbeddedMessageHeaderBlock templateForEmbeddedMessageHeaderBlock, + TemplateForAttachmentSeparatorBlock templateForAttachmentSeparatorBlock, + CleanHTMLForPartBlock cleanHTMLForPartBlock, + FilterHTMLForPartBlock filterHTMLForPartBlock, + FilterHTMLForMessageBlock filterHTMLForMessageBlock, + DataForIMAPPartBlock dataForIMAPPartBlock, + PrefetchAttachmentIMAPPartBlock prefetchAttachmentIMAPPartBlock, + PrefetchImageIMAPPartBlock prefetchImageIMAPPartBlock, + const void* userInfo); + + virtual bool canPreviewPart(mailcore::AbstractPart * part); + virtual bool shouldShowPart(mailcore::AbstractPart * part); + virtual mailcore::HashMap * templateValuesForHeader(mailcore::MessageHeader * header); + virtual mailcore::HashMap * templateValuesForPart(mailcore::AbstractPart * part); + virtual mailcore::String * templateForMainHeader(mailcore::MessageHeader * header); + virtual mailcore::String * templateForImage(mailcore::AbstractPart * part); + virtual mailcore::String * templateForAttachment(mailcore::AbstractPart * part); + virtual mailcore::String * templateForMessage(mailcore::AbstractMessage * message); + virtual mailcore::String * templateForEmbeddedMessage(mailcore::AbstractMessagePart * part); + virtual mailcore::String * templateForEmbeddedMessageHeader(mailcore::MessageHeader * header); + virtual mailcore::String * templateForAttachmentSeparator(); + virtual mailcore::String * cleanHTMLForPart(mailcore::String * html); + virtual mailcore::String * filterHTMLForPart(mailcore::String * html); + virtual mailcore::String * filterHTMLForMessage(mailcore::String * html); + virtual mailcore::Data * dataForIMAPPart(mailcore::String * folder, mailcore::IMAPPart * part); + virtual void prefetchAttachmentIMAPPart(mailcore::String * folder, mailcore::IMAPPart * part); + virtual void prefetchImageIMAPPart(mailcore::String * folder, mailcore::IMAPPart * part); + +private: + CanPreviewPartBlock canPreviewPartBlock; + ShouldShowPartBlock shouldShowPartBlock; + TemplateValuesForHeaderBlock templateValuesForHeaderBlock; + TemplateValuesForPartBlock templateValuesForPartBlock; + TemplateForMainHeaderBlock templateForMainHeaderBlock; + TemplateForImageBlock templateForImageBlock; + TemplateForAttachmentBlock templateForAttachmentBlock; + TemplateForMessageBlock templateForMessageBlock; + TemplateForEmbeddedMessageBlock templateForEmbeddedMessageBlock; + TemplateForEmbeddedMessageHeaderBlock templateForEmbeddedMessageHeaderBlock; + TemplateForAttachmentSeparatorBlock templateForAttachmentSeparatorBlock; + CleanHTMLForPartBlock cleanHTMLForPartBlock; + FilterHTMLForPartBlock filterHTMLForPartBlock; + FilterHTMLForMessageBlock filterHTMLForMessageBlock; + + DataForIMAPPartBlock dataForIMAPPartBlock; + PrefetchAttachmentIMAPPartBlock prefetchAttachmentIMAPPartBlock; + PrefetchImageIMAPPartBlock prefetchImageIMAPPartBlock; + + const void* userInfo; +}; +#endif + +#endif /* CAbstractMessageRendererCallbackWrapper_h */ diff --git a/src/c/abstract/CAbstractMultipart.cpp b/src/c/abstract/CAbstractMultipart.cpp new file mode 100644 index 000000000..220b56020 --- /dev/null +++ b/src/c/abstract/CAbstractMultipart.cpp @@ -0,0 +1,15 @@ +#include +#include "CAbstractMessage.h" +#include "CMessageHeader.h" +#include "CAbstractPart.h" +#include "CAbstractMultipart.h" +#include "CBase+Private.h" + +#define nativeType mailcore::AbstractMultipart +#define structName CAbstractMultipart + +C_SYNTHESIZE_CONSTRUCTOR() +C_SYNTHESIZE_COBJECT_CAST() + +C_SYNTHESIZE_MAILCORE_OBJ(CArray, CArray_new, setParts, parts) + diff --git a/src/c/abstract/CAbstractMultipart.h b/src/c/abstract/CAbstractMultipart.h new file mode 100644 index 000000000..d55b65597 --- /dev/null +++ b/src/c/abstract/CAbstractMultipart.h @@ -0,0 +1,29 @@ +#ifndef MAILCORE_CABSTRACT_MULTIPART_H +#define MAILCORE_CABSTRACT_MULTIPART_H + +#include "stdint.h" + +#include "CBase.h" +#include "CArray.h" +#include "CMessageHeader.h" +#include "CAbstractPart.h" + +#ifdef __cplusplus + +namespace mailcore { + class AbstractMultipart; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CAbstractMultipart, mailcore::AbstractMultipart) + + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CAbstractMultipart) + C_SYNTHESIZE_PROPERTY_DEFINITION(CAbstractMultipart, CArray, parts, setParts) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/c/abstract/CAbstractPart.cpp b/src/c/abstract/CAbstractPart.cpp new file mode 100644 index 000000000..9472f1bd2 --- /dev/null +++ b/src/c/abstract/CAbstractPart.cpp @@ -0,0 +1,41 @@ +#include +#include "CAbstractPart.h" +#include "CBase+Private.h" +#include "CData.h" + +#define nativeType mailcore::AbstractPart +#define structName CAbstractPart + +C_SYNTHESIZE_STRING(setFilename, filename); +C_SYNTHESIZE_STRING(setMimeType, mimeType); +C_SYNTHESIZE_STRING(setCharset, charset); +C_SYNTHESIZE_STRING(setUniqueID, uniqueID); +C_SYNTHESIZE_STRING(setContentID, contentID); +C_SYNTHESIZE_STRING(setContentLocation, contentLocation); +C_SYNTHESIZE_STRING(setContentDescription, contentDescription); +C_SYNTHESIZE_BOOL(setInlineAttachment, isInlineAttachment); +C_SYNTHESIZE_BOOL(setAttachment, isAttachment); +C_SYNTHESIZE_ENUM(PartType, mailcore::PartType, setPartType, partType) +C_SYNTHESIZE_COBJECT_CAST() + +C_SYNTHESIZE_CONSTRUCTOR() + +C_SYNTHESIZE_FUNC_WITH_OBJ(CAbstractPart, partForContentID, MailCoreString) +C_SYNTHESIZE_FUNC_WITH_OBJ(CAbstractPart, partForUniqueID, MailCoreString) +C_SYNTHESIZE_FUNC_WITH_VOID(setContentTypeParameter, MailCoreString, MailCoreString) +C_SYNTHESIZE_FUNC_WITH_VOID(removeContentTypeParameter, MailCoreString) +C_SYNTHESIZE_FUNC_WITH_OBJ(MailCoreString, contentTypeParameterValueForName, MailCoreString) +C_SYNTHESIZE_FUNC_WITH_OBJ(CArray, allContentTypeParametersNames) + +C_SYNTHESIZE_FUNC_WITH_OBJ(MailCoreString, decodedStringForData, CData) + +CData CAbstractPart_getData(CAbstractPart part) { + mailcore::AbstractPart *mcPart = reinterpret_cast(part.instance); + if (mcPart->className()->isEqual(MCSTR("mailcore::Attachment"))) { + mailcore::Attachment *att = reinterpret_cast(mcPart); + return CData_new(att->data()); + } + return CData_dataWithBytes(NULL, 0); +} + + diff --git a/src/c/abstract/CAbstractPart.h b/src/c/abstract/CAbstractPart.h new file mode 100644 index 000000000..b6337c210 --- /dev/null +++ b/src/c/abstract/CAbstractPart.h @@ -0,0 +1,52 @@ +#ifndef MAILCORE_CABSTRACT_PART_H +#define MAILCORE_CABSTRACT_PART_H + +#include "stdint.h" + +#include "CBase.h" +#include "CArray.h" +#include "CMessageConstants.h" +#include "MailCoreString.h" + +#ifdef __cplusplus + +namespace mailcore { + class AbstractPart; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CAbstractPart, mailcore::AbstractPart) + + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CAbstractPart) + + C_SYNTHESIZE_PROPERTY_DEFINITION(CAbstractPart, PartType, partType, setPartType) + C_SYNTHESIZE_PROPERTY_DEFINITION(CAbstractPart, MailCoreString, filename, setFilename) + C_SYNTHESIZE_PROPERTY_DEFINITION(CAbstractPart, MailCoreString, mimeType, setMimeType) + C_SYNTHESIZE_PROPERTY_DEFINITION(CAbstractPart, MailCoreString, charset, setCharset) + C_SYNTHESIZE_PROPERTY_DEFINITION(CAbstractPart, MailCoreString, uniqueID, setUniqueID) + C_SYNTHESIZE_PROPERTY_DEFINITION(CAbstractPart, MailCoreString, contentID, setContentID) + C_SYNTHESIZE_PROPERTY_DEFINITION(CAbstractPart, MailCoreString, uniqueID, setUniqueID) + C_SYNTHESIZE_PROPERTY_DEFINITION(CAbstractPart, MailCoreString, contentLocation, setContentLocation) + C_SYNTHESIZE_PROPERTY_DEFINITION(CAbstractPart, MailCoreString, contentDescription, setContentDescription) + + C_SYNTHESIZE_PROPERTY_DEFINITION(CAbstractPart, bool, isInlineAttachment, setInlineAttachment) + C_SYNTHESIZE_PROPERTY_DEFINITION(CAbstractPart, bool, isAttachment, setAttachment) + + C_SYNTHESIZE_FUNC_DEFINITION(CAbstractPart, CAbstractPart, partForContentID, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CAbstractPart, CAbstractPart, partForUniqueID, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CAbstractPart, MailCoreString, decodedStringForData, CData) + + C_SYNTHESIZE_FUNC_DEFINITION(CAbstractPart, void, setContentTypeParameter, MailCoreString, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CAbstractPart, void, removeContentTypeParameter, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CAbstractPart, MailCoreString, contentTypeParameterValueForName, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CAbstractPart, CArray, allContentTypeParametersNames) + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CAbstractPart, CData, getData, CAbstractPart) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/c/abstract/CAddress.cpp b/src/c/abstract/CAddress.cpp new file mode 100644 index 000000000..429dec03c --- /dev/null +++ b/src/c/abstract/CAddress.cpp @@ -0,0 +1,32 @@ +#include +#include "CAddress.h" +#include "CBase+Private.h" + +#define nativeType mailcore::Address +#define structName CAddress + +C_SYNTHESIZE_STRING(setDisplayName, displayName); +C_SYNTHESIZE_STRING(setMailbox, mailbox); +C_SYNTHESIZE_COBJECT_CAST() + +C_SYNTHESIZE_CONSTRUCTOR() + +CAddress CAddress_init(){ + return CAddress_new(new mailcore::Address()); +} + +C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ(CAddress, addressWithDisplayName, MailCoreString, MailCoreString) +C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ(CAddress, addressWithMailbox, MailCoreString) +C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ(CAddress, addressWithRFC822String, MailCoreString) +C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ(CAddress, addressWithNonEncodedRFC822String, MailCoreString) +C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ(CArray, addressesWithRFC822String, MailCoreString) +C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ(CArray, addressesWithNonEncodedRFC822String, MailCoreString) + +C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ(MailCoreString, RFC822StringForAddresses, CArray) +C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ(MailCoreString, nonEncodedRFC822StringForAddresses, CArray) + +C_SYNTHESIZE_FUNC_WITH_OBJ(MailCoreString, RFC822String) +C_SYNTHESIZE_FUNC_WITH_OBJ(MailCoreString, nonEncodedRFC822String) + + + diff --git a/src/c/abstract/CAddress.h b/src/c/abstract/CAddress.h new file mode 100644 index 000000000..df7ce28b5 --- /dev/null +++ b/src/c/abstract/CAddress.h @@ -0,0 +1,45 @@ +#ifndef MAILCORE_CADDRESS_H +#define MAILCORE_CADDRESS_H + +#include "stdint.h" + +#include "CBase.h" +#include "CArray.h" +#include "MailCoreString.h" + +#ifdef __cplusplus + +namespace mailcore { + class Address; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CAddress, mailcore::Address) + + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CAddress) + + C_SYNTHESIZE_PROPERTY_DEFINITION(CAddress, MailCoreString, displayName, setDisplayName) + C_SYNTHESIZE_PROPERTY_DEFINITION(CAddress, MailCoreString, mailbox, setMailbox) + + C_SYNTHESIZE_READONLY_PROPERTY_DEFINITION(CAddress, MailCoreString, RFC822String) + C_SYNTHESIZE_READONLY_PROPERTY_DEFINITION(CAddress, MailCoreString, nonEncodedRFC822String) + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CAddress, CAddress, addressWithDisplayName, MailCoreString, MailCoreString) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CAddress, CAddress, addressWithMailbox, MailCoreString) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CAddress, CAddress, addressWithRFC822String, MailCoreString) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CAddress, CAddress, addressWithNonEncodedRFC822String, MailCoreString) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CAddress, CArray, addressesWithRFC822String, MailCoreString) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CAddress, CArray, addressesWithNonEncodedRFC822String, MailCoreString) + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CAddress, MailCoreString, RFC822StringForAddresses, CArray) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CAddress, MailCoreString, nonEncodedRFC822StringForAddresses, CArray) + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CAddress, CAddress, init) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/c/abstract/CMessageConstants.h b/src/c/abstract/CMessageConstants.h new file mode 100644 index 000000000..cbc8d9cf1 --- /dev/null +++ b/src/c/abstract/CMessageConstants.h @@ -0,0 +1,308 @@ +#ifndef MAILCORE_MESSAGE_CONSTANT +#define MAILCORE_MESSAGE_CONSTANT + +#include "CData.h" + +#ifdef __cplusplus +extern "C" { +#endif + + typedef enum { + ConnectionTypeClear = 1 << 0, + ConnectionTypeStartTLS = 1 << 1, + ConnectionTypeTLS = 1 << 2, + } ConnectionType; + + typedef enum { + AuthTypeSASLNone = 0, + AuthTypeSASLCRAMMD5 = 1 << 0, + AuthTypeSASLPlain = 1 << 1, + AuthTypeSASLGSSAPI = 1 << 2, + AuthTypeSASLDIGESTMD5 = 1 << 3, + AuthTypeSASLLogin = 1 << 4, + AuthTypeSASLSRP = 1 << 5, + AuthTypeSASLNTLM = 1 << 6, + AuthTypeSASLKerberosV4 = 1 << 7, + AuthTypeXOAuth2 = 1 << 8, + AuthTypeXOAuth2Outlook = 1 << 9, + }CAuthType; + + typedef enum { + IMAPFolderFlagNone = 0, + IMAPFolderFlagMarked = 1 << 0, + IMAPFolderFlagUnmarked = 1 << 1, + IMAPFolderFlagNoSelect = 1 << 2, + IMAPFolderFlagNoInferiors = 1 << 3, + IMAPFolderFlagInbox = 1 << 4, + IMAPFolderFlagSentMail = 1 << 5, + IMAPFolderFlagStarred = 1 << 6, + IMAPFolderFlagAllMail = 1 << 7, + IMAPFolderFlagTrash = 1 << 8, + IMAPFolderFlagDrafts = 1 << 9, + IMAPFolderFlagSpam = 1 << 10, + IMAPFolderFlagImportant = 1 << 11, + IMAPFolderFlagArchive = 1 << 12, + IMAPFolderFlagAll = IMAPFolderFlagAllMail, + IMAPFolderFlagJunk = IMAPFolderFlagSpam, + IMAPFolderFlagFlagged = IMAPFolderFlagStarred, + IMAPFolderFlagFolderTypeMask = IMAPFolderFlagInbox | IMAPFolderFlagSentMail | IMAPFolderFlagStarred | IMAPFolderFlagAllMail | + IMAPFolderFlagTrash| IMAPFolderFlagDrafts | IMAPFolderFlagSpam | IMAPFolderFlagImportant | IMAPFolderFlagArchive, + }CIMAPFolderFlag; + + typedef enum { + MessageFlagNone = 0, + MessageFlagSeen = 1 << 0, + MessageFlagAnswered = 1 << 1, + MessageFlagFlagged = 1 << 2, + MessageFlagDeleted = 1 << 3, + MessageFlagDraft = 1 << 4, + MessageFlagMDNSent = 1 << 5, + MessageFlagForwarded = 1 << 6, + MessageFlagSubmitPending = 1 << 7, + MessageFlagSubmitted = 1 << 8, + MessageFlagMaskAll = MessageFlagSeen | MessageFlagAnswered | MessageFlagFlagged | + MessageFlagDeleted | MessageFlagDraft | MessageFlagMDNSent | MessageFlagForwarded | + MessageFlagSubmitPending | MessageFlagSubmitted, + }CMessageFlag; + + typedef enum { + IMAPMessagesRequestKindUid = 0, // This is the default and it's always fetched + IMAPMessagesRequestKindFlags = 1 << 0, + IMAPMessagesRequestKindHeaders = 1 << 1, + IMAPMessagesRequestKindStructure = 1 << 2, + IMAPMessagesRequestKindInternalDate = 1 << 3, + IMAPMessagesRequestKindFullHeaders = 1 << 4, + IMAPMessagesRequestKindHeaderSubject = 1 << 5, + IMAPMessagesRequestKindGmailLabels = 1 << 6, + IMAPMessagesRequestKindGmailMessageID = 1 << 7, + IMAPMessagesRequestKindGmailThreadID = 1 << 8, + IMAPMessagesRequestKindExtraHeaders = 1 << 9, + IMAPMessagesRequestKindSize = 1 << 10, + }CIMAPMessagesRequestKind; + + typedef enum { + IMAPFetchRequestTypeUID = 0, + IMAPFetchRequestTypeSequence = 1 + }IMAPFetchRequestType; + + typedef enum { + IMAPStoreFlagsRequestKindAdd, + IMAPStoreFlagsRequestKindRemove, + IMAPStoreFlagsRequestKindSet, + }IMAPStoreFlagsRequestKind; + + typedef enum { + IMAPWorkaroundGmail = 1 << 0, + IMAPWorkaroundYahoo = 1 << 1, + IMAPWorkaroundExchange2003 = 1 << 2, + }IMAPWorkaround; + + typedef enum { + IMAPCapabilityACL, + IMAPCapabilityBinary, + IMAPCapabilityCatenate, + IMAPCapabilityChildren, + IMAPCapabilityCompressDeflate, + IMAPCapabilityCondstore, + IMAPCapabilityEnable, + IMAPCapabilityIdle, + IMAPCapabilityId, + IMAPCapabilityLiteralPlus, + IMAPCapabilityMove, + IMAPCapabilityMultiAppend, + IMAPCapabilityNamespace, + IMAPCapabilityQResync, + IMAPCapabilityQuota, + IMAPCapabilitySort, + IMAPCapabilityStartTLS, + IMAPCapabilityThreadOrderedSubject, + IMAPCapabilityThreadReferences, + IMAPCapabilityUIDPlus, + IMAPCapabilityUnselect, + IMAPCapabilityXList, + IMAPCapabilityAuthAnonymous, + IMAPCapabilityAuthCRAMMD5, + IMAPCapabilityAuthDigestMD5, + IMAPCapabilityAuthExternal, + IMAPCapabilityAuthGSSAPI, + IMAPCapabilityAuthKerberosV4, + IMAPCapabilityAuthLogin, + IMAPCapabilityAuthNTLM, + IMAPCapabilityAuthOTP, + IMAPCapabilityAuthPlain, + IMAPCapabilityAuthSKey, + IMAPCapabilityAuthSRP, + IMAPCapabilityXOAuth2, + IMAPCapabilityXYMHighestModseq, + IMAPCapabilityGmail, + }IMAPCapability; + + typedef enum { + POPCapabilityNone, + POPCapabilityStartTLS, + POPCapabilityTop, + POPCapabilityUser, + POPCapabilityRespCodes, + POPCapabilityPipelining, + POPCapabilityUIDL, + POPCapabilitySASL, + POPCapabilityAuthAnonymous, + POPCapabilityAuthCRAMMD5, + POPCapabilityAuthDigestMD5, + POPCapabilityAuthExternal, + POPCapabilityAuthGSSAPI, + POPCapabilityAuthKerberosV4, + POPCapabilityAuthLogin, + POPCapabilityAuthNTLM, + POPCapabilityAuthOTP, + POPCapabilityAuthPlain, + POPCapabilityAuthSKey, + POPCapabilityAuthSRP, + }POPCapability; + + typedef enum { + Encoding7Bit = 0, // should match MAILIMAP_BODY_FLD_ENC_7BIT + Encoding8Bit = 1, // should match MAILIMAP_BODY_FLD_ENC_8BIT + EncodingBinary = 2, // should match MAILIMAP_BODY_FLD_ENC_BINARY + EncodingBase64 = 3, // should match MAILIMAP_BODY_FLD_ENC_BASE64 + EncodingQuotedPrintable = 4, // should match MAILIMAP_BODY_FLD_ENC_QUOTED_PRINTABLE + EncodingOther = 5, // should match MAILIMAP_BODY_FLD_ENC_OTHER + // negative values should be used for other encoding + EncodingUUEncode = -1 + }Encoding; + + typedef enum { + IMAPSearchKindAll, + IMAPSearchKindNone, + IMAPSearchKindFrom, + IMAPSearchKindTo, + IMAPSearchKindCc, + IMAPSearchKindBcc, + IMAPSearchKindRecipient, // Recipient is the combination of To, Cc and Bcc + IMAPSearchKindSubject, + IMAPSearchKindContent, + IMAPSearchKindBody, + IMAPSearchKindUIDs, + IMAPSearchKindNumbers, + IMAPSearchKindHeader, + IMAPSearchKindRead, + IMAPSearchKindUnread, + IMAPSearchKindFlagged, + IMAPSearchKindUnflagged, + IMAPSearchKindAnswered, + IMAPSearchKindUnanswered, + IMAPSearchKindDraft, + IMAPSearchKindUndraft, + IMAPSearchKindDeleted, + IMAPSearchKindSpam, + IMAPSearchKindBeforeDate, + IMAPSearchKindOnDate, + IMAPSearchKindSinceDate, + IMAPSearchKindBeforeReceivedDate, + IMAPSearchKindOnReceivedDate, + IMAPSearchKindSinceReceivedDate, + IMAPSearchKindSizeLarger, + IMAPSearchKindSizeSmaller, + IMAPSearchKindGmailThreadID, + IMAPSearchKindGmailMessageID, + IMAPSearchKindGmailRaw, + IMAPSearchKindOr, + IMAPSearchKindAnd, + IMAPSearchKindNot, + }IMAPSearchKind; + + typedef enum { + ErrorNone, // 0 + ErrorConnection, + ErrorTLSNotAvailable, + ErrorParse, + ErrorCertificate, + ErrorAuthentication, + ErrorGmailIMAPNotEnabled, + ErrorGmailExceededBandwidthLimit, + ErrorGmailTooManySimultaneousConnections, + ErrorMobileMeMoved, + ErrorYahooUnavailable, // 10 + ErrorNonExistantFolder, + ErrorRename, + ErrorDelete, + ErrorCreate, + ErrorSubscribe, + ErrorAppend, + ErrorCopy, + ErrorExpunge, + ErrorFetch, + ErrorIdle, // 20 + ErrorIdentity, + ErrorNamespace, + ErrorStore, + ErrorCapability, + ErrorStartTLSNotAvailable, + ErrorSendMessageIllegalAttachment, + ErrorStorageLimit, + ErrorSendMessageNotAllowed, + ErrorNeedsConnectToWebmail, + ErrorSendMessage, // 30 + ErrorAuthenticationRequired, + ErrorFetchMessageList, + ErrorDeleteMessage, + ErrorInvalidAccount, + ErrorFile, + ErrorCompression, + ErrorNoSender, + ErrorNoRecipient, + ErrorNoop, + ErrorGmailApplicationSpecificPasswordRequired, // 40 + ErrorServerDate, + ErrorNoValidServerFound, + ErrorCustomCommand, + ErrorYahooSendMessageSpamSuspected, + ErrorYahooSendMessageDailyLimitExceeded, + ErrorOutlookLoginViaWebBrowser, + ErrorTiscaliSimplePassword, + ErrorCanceled, + }ErrorCode; + + typedef enum { + PartTypeSingle, + PartTypeMessage, + PartTypeMultipartMixed, + PartTypeMultipartRelated, + PartTypeMultipartAlternative, + PartTypeMultipartSigned, + }PartType; + + typedef enum ConnectionLogType { + // Received data + ConnectionLogTypeReceived, + // Sent data + ConnectionLogTypeSent, + // Sent private data + ConnectionLogTypeSentPrivate, + // Parse error + ConnectionLogTypeErrorParse, + // Error while receiving data - log() is called with a NULL buffer. + ConnectionLogTypeErrorReceived, + // Error while sending data - log() is called with a NULL buffer. + ConnectionLogTypeErrorSent, + } ConnectionLogType; + + /** + It's called when asynchronous operations stop/start running. + */ + typedef void (*OperationQueueRunningChangeBlock)(void); + + /** + It's a network traffic logger. + @param sender is the identifier of the underlaying network socket. + @param logType is the type of the log. + @param data is the data related to the log. + */ + typedef void (*CConnectionLogger)(void* sender, ConnectionLogType logType, CData data, void* logger); + typedef void (*CConnectionLoggerRelease)(void* logger); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/c/abstract/CMessageHeader.cpp b/src/c/abstract/CMessageHeader.cpp new file mode 100644 index 000000000..bbf60031a --- /dev/null +++ b/src/c/abstract/CMessageHeader.cpp @@ -0,0 +1,56 @@ +#include +#include "CMessageHeader.h" +#include "CBase+Private.h" + +#define nativeType mailcore::MessageHeader +#define structName CMessageHeader + +C_SYNTHESIZE_STRING(setMessageID, messageID); +C_SYNTHESIZE_STRING(setUserAgent, userAgent); +C_SYNTHESIZE_STRING(setSubject, subject); +C_SYNTHESIZE_ARRAY(setReferences, references); +C_SYNTHESIZE_ARRAY(setInReplyTo, inReplyTo); +C_SYNTHESIZE_ARRAY(setTo, to); +C_SYNTHESIZE_ARRAY(setCc, cc); +C_SYNTHESIZE_ARRAY(setBcc, bcc); +C_SYNTHESIZE_ARRAY(setReplyTo, replyTo); +C_SYNTHESIZE_SCALAR(time_t, time_t, setReceivedDate, receivedDate); +C_SYNTHESIZE_SCALAR(time_t, time_t, setDate, date); +C_SYNTHESIZE_MAILCORE_OBJ(CAddress, CAddress_new, setSender, sender); +C_SYNTHESIZE_MAILCORE_OBJ(CAddress, CAddress_new, setFrom, from); +C_SYNTHESIZE_COBJECT_CAST() + +C_SYNTHESIZE_CONSTRUCTOR() + +CMessageHeader CMessageHeader_init(){ + return CMessageHeader_new(new mailcore::MessageHeader()); +} + +C_SYNTHESIZE_FUNC_WITH_SCALAR(bool, isMessageIDAutoGenerated) +C_SYNTHESIZE_FUNC_WITH_VOID(setExtraHeader, MailCoreString, MailCoreString) +C_SYNTHESIZE_FUNC_WITH_OBJ(MailCoreString, extraHeaderValueForName, MailCoreString) +C_SYNTHESIZE_FUNC_WITH_VOID(removeExtraHeader, MailCoreString) +C_SYNTHESIZE_FUNC_WITH_OBJ(CArray, allExtraHeadersNames) +C_SYNTHESIZE_FUNC_WITH_OBJ(MailCoreString, extractedSubject) +C_SYNTHESIZE_FUNC_WITH_OBJ(MailCoreString, partialExtractedSubject) +C_SYNTHESIZE_FUNC_WITH_VOID(importHeadersData, CData) +C_SYNTHESIZE_FUNC_WITH_OBJ(CMessageHeader, forwardHeader) + +CMessageHeader CMessageHeader_replyHeaderWithExcludedRecipients(struct CMessageHeader self, CArray /* MCOAddress */excludedRecipients){ + return CMessageHeader_new(self.instance->replyHeader(false, excludedRecipients.instance)); +} + +struct CMessageHeader CMessageHeader_replyAllHeaderWithExcludedRecipients(struct CMessageHeader self, CArray /* MCOAddress */excludedRecipients){ + return CMessageHeader_new(self.instance->replyHeader(true, excludedRecipients.instance)); +} + + + + + + + + + + + diff --git a/src/c/abstract/CMessageHeader.h b/src/c/abstract/CMessageHeader.h new file mode 100644 index 000000000..779b2ad64 --- /dev/null +++ b/src/c/abstract/CMessageHeader.h @@ -0,0 +1,60 @@ +#ifndef MAILCORE_CMESSAGE_HEADER_H +#define MAILCORE_CMESSAGE_HEADER_H + +#include "stdint.h" +#include + +#include "CBase.h" +#include "CArray.h" +#include "CAddress.h" +#include "MailCoreString.h" + +#ifdef __cplusplus + +namespace mailcore { + class MessageHeader; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CMessageHeader, mailcore::MessageHeader) + + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CMessageHeader) + + C_SYNTHESIZE_PROPERTY_DEFINITION(CMessageHeader, MailCoreString, messageID, setMessageID) + C_SYNTHESIZE_PROPERTY_DEFINITION(CMessageHeader, CArray, references, setReferences) + C_SYNTHESIZE_PROPERTY_DEFINITION(CMessageHeader, CArray, inReplyTo, setInReplyTo) + C_SYNTHESIZE_PROPERTY_DEFINITION(CMessageHeader, CArray, to, setTo) + C_SYNTHESIZE_PROPERTY_DEFINITION(CMessageHeader, CArray, cc, setCc) + C_SYNTHESIZE_PROPERTY_DEFINITION(CMessageHeader, CArray, bcc, setBcc) + C_SYNTHESIZE_PROPERTY_DEFINITION(CMessageHeader, CArray, replyTo, setReplyTo) + C_SYNTHESIZE_PROPERTY_DEFINITION(CMessageHeader, MailCoreString, subject, setSubject) + C_SYNTHESIZE_PROPERTY_DEFINITION(CMessageHeader, MailCoreString, userAgent, setUserAgent) + C_SYNTHESIZE_PROPERTY_DEFINITION(CMessageHeader, time_t, receivedDate, setReceivedDate) + C_SYNTHESIZE_PROPERTY_DEFINITION(CMessageHeader, time_t, date, setDate) + C_SYNTHESIZE_PROPERTY_DEFINITION(CMessageHeader, CAddress, sender, setSender) + C_SYNTHESIZE_PROPERTY_DEFINITION(CMessageHeader, CAddress, from, setFrom) + C_SYNTHESIZE_PROPERTY_DEFINITION(CMessageHeader, CAddress, sender, setSender) + + C_SYNTHESIZE_FUNC_DEFINITION(CMessageHeader, bool, isMessageIDAutoGenerated) + C_SYNTHESIZE_FUNC_DEFINITION(CMessageHeader, void, setExtraHeader, MailCoreString, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CMessageHeader, void, removeExtraHeader, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CMessageHeader, MailCoreString, extraHeaderValueForName, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CMessageHeader, CArray, allExtraHeadersNames) + C_SYNTHESIZE_FUNC_DEFINITION(CMessageHeader, MailCoreString, extractedSubject) + C_SYNTHESIZE_FUNC_DEFINITION(CMessageHeader, MailCoreString, partialExtractedSubject) + + C_SYNTHESIZE_FUNC_DEFINITION(CMessageHeader, void, importHeadersData, CData) + + C_SYNTHESIZE_FUNC_DEFINITION(CMessageHeader, CMessageHeader, replyHeaderWithExcludedRecipients, CArray) + C_SYNTHESIZE_FUNC_DEFINITION(CMessageHeader, CMessageHeader, replyAllHeaderWithExcludedRecipients, CArray) + C_SYNTHESIZE_FUNC_DEFINITION(CMessageHeader, CMessageHeader, forwardHeader) + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CMessageHeader, CMessageHeader, init) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/c/basetypes/CArray.cpp b/src/c/basetypes/CArray.cpp new file mode 100644 index 000000000..03e558a43 --- /dev/null +++ b/src/c/basetypes/CArray.cpp @@ -0,0 +1,33 @@ +#include +#include +#include "CArray.h" +#include "CBase+Private.h" + +#define nativeType mailcore::Array +#define structName CArray + +C_SYNTHESIZE_CONSTRUCTOR() +C_SYNTHESIZE_COBJECT_CAST() + +C_SYNTHESIZE_FUNC_WITH_VOID(addObject, CObject) +C_SYNTHESIZE_FUNC_WITH_SCALAR(uint32_t, count) + +C_SYNTHESIZE_FUNC_WITH_OBJ(MailCoreString, description) + +mailcore::Object* CArray_getObj(struct CArray self, uint32_t index) { + return self.instance->objectAtIndex(index); +} + +CObject CArray_getObject(struct CArray self, uint32_t index) { + mailcore::Object* obj = CArray_getObj(self, index); + return CObject_new(obj); +} + +uint32_t CArray_getUint(struct CArray self, uint32_t index) { + return (reinterpret_cast(self.instance->objectAtIndex(index)))->unsignedIntValue(); +} + +CArray CArray_init() { + return CArray_new(mailcore::Array::array()); +} + diff --git a/src/c/basetypes/CArray.h b/src/c/basetypes/CArray.h new file mode 100644 index 000000000..8a58211b2 --- /dev/null +++ b/src/c/basetypes/CArray.h @@ -0,0 +1,36 @@ +#ifndef MAILCORE_CARRAY_H +#define MAILCORE_CARRAY_H + +#include "stdint.h" +#include "CBase.h" +#include "CObject.h" +#include "CData.h" +#include "MailCoreString.h" + +#ifdef __cplusplus + +namespace mailcore { + class Array; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CArray, mailcore::Array) + CMAILCORE_EXPORT C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CArray) + + C_SYNTHESIZE_READONLY_PROPERTY_DEFINITION(CArray, uint32_t, count) + + C_SYNTHESIZE_FUNC_DEFINITION(CArray, void, addObject, CObject) + C_SYNTHESIZE_FUNC_DEFINITION(CArray, CObject, getObject, uint32_t) + C_SYNTHESIZE_FUNC_DEFINITION(CArray, uint32_t, getUint, uint32_t) + + C_SYNTHESIZE_FUNC_DEFINITION(CArray, MailCoreString, description) + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CArray, CArray, init) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/c/basetypes/CData.cpp b/src/c/basetypes/CData.cpp new file mode 100644 index 000000000..f750452af --- /dev/null +++ b/src/c/basetypes/CData.cpp @@ -0,0 +1,54 @@ +#include "CData.h" +#include "MailCore/MCCore.h" +#include "CBase+Private.h" + +#include + +#define nativeType mailcore::Data +#define structName CData + +C_SYNTHESIZE_CONSTRUCTOR() +C_SYNTHESIZE_COBJECT_CAST() + +CData CData_dataWithBytes(const char* bytes, unsigned int length) { + CData result; + result.instance = mailcore::Data::dataWithBytes(bytes, length); + return result; +} + +C_SYNTHESIZE_FUNC_WITH_SCALAR(const char*, bytes) +C_SYNTHESIZE_FUNC_WITH_SCALAR(unsigned int, length) + +C_SYNTHESIZE_FUNC_WITH_VOID(destructiveDataClear) + +bool CData_externallyAllocatedMemory(CData self) { + return self.instance->externallyAllocatedMemory(); +} + +CBytesDeallocator CData_bytesDeallocator(CData self) { + return self.instance->bytesDeallocator(); +} + +CData Value_mailCoreTypeInfo() { + return getTypeNameFromObject(&typeid(mailcore::Value)); +} + +CData getTypeNameFromObject(CObject obj) { + const std::type_info * info = &typeid(* obj.instance); + return getTypeNameFromObject(info); +} + +CData getTypeNameFromObject(const std::type_info * info) { + CData result; +#ifdef __LIBCPP_TYPEINFO + size_t hash_value = info->hash_code(); + const char* bytes = (char*)&hash_value; + unsigned int length = sizeof(hash_value); + result.instance = mailcore::Data::dataWithBytes(bytes, length); +#else + const char* bytes = info->name(); + unsigned int length = (unsigned int) strlen(info->name()); + result.instance = mailcore::Data::dataWithBytes(bytes, length); +#endif + return result; +} diff --git a/src/c/basetypes/CData.h b/src/c/basetypes/CData.h new file mode 100644 index 000000000..037f745bf --- /dev/null +++ b/src/c/basetypes/CData.h @@ -0,0 +1,41 @@ +#ifndef MAILCORE_CDATA_H +#define MAILCORE_CDATA_H + +#include "stdint.h" +#include "CBase.h" +#include "CObject.h" + +#ifdef __cplusplus + +#include + +namespace mailcore { + class Data; +} + +extern "C" { +#endif + + typedef void (*CBytesDeallocator)(char * bytes, unsigned int length); + + C_SYNTHESIZE_STRUCT_DEFINITION(CData, mailcore::Data) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CData) + + C_SYNTHESIZE_READONLY_PROPERTY_DEFINITION(CData, const char*, bytes) + C_SYNTHESIZE_READONLY_PROPERTY_DEFINITION(CData, unsigned int, length) + C_SYNTHESIZE_READONLY_PROPERTY_DEFINITION(CData, bool, externallyAllocatedMemory) + C_SYNTHESIZE_READONLY_PROPERTY_DEFINITION(CData, CBytesDeallocator, bytesDeallocator) + + C_SYNTHESIZE_FUNC_DEFINITION(CData, void, destructiveDataClear) + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CData, CData, dataWithBytes, const char*, unsigned int) + + CMAILCORE_EXPORT CData Value_mailCoreTypeInfo(void); + CMAILCORE_EXPORT CData getTypeNameFromObject(CObject obj); + +#ifdef __cplusplus +} +CMAILCORE_EXPORT CData getTypeNameFromObject(const std::type_info * info); +#endif + +#endif diff --git a/src/c/basetypes/CDictionary.cpp b/src/c/basetypes/CDictionary.cpp new file mode 100644 index 000000000..044911f65 --- /dev/null +++ b/src/c/basetypes/CDictionary.cpp @@ -0,0 +1,18 @@ +#include + +#include "CDictionary.h" +#include "CBase+Private.h" + +#define nativeType mailcore::HashMap +#define structName CDictionary + +C_SYNTHESIZE_CONSTRUCTOR() +C_SYNTHESIZE_COBJECT_CAST() + +C_SYNTHESIZE_FUNC_WITH_OBJ(CArray, allKeys) +C_SYNTHESIZE_FUNC_WITH_OBJ(CObject, objectForKey, CObject) +C_SYNTHESIZE_FUNC_WITH_VOID(setObjectForKey, CObject, CObject) + +CDictionary CDictionary_init() { + return CDictionary_new(mailcore::HashMap::hashMap()); +} diff --git a/src/c/basetypes/CDictionary.h b/src/c/basetypes/CDictionary.h new file mode 100644 index 000000000..eae03ed3a --- /dev/null +++ b/src/c/basetypes/CDictionary.h @@ -0,0 +1,35 @@ +#ifndef CDictionary_h +#define CDictionary_h + +#include "stdint.h" +#include "CBase.h" +#include "CObject.h" +#include "CArray.h" +#include "CData.h" + +#ifdef __cplusplus + +namespace mailcore { + class HashMap; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CDictionary, mailcore::HashMap) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CDictionary) + + C_SYNTHESIZE_FUNC_DEFINITION(CDictionary, CArray, allKeys) + C_SYNTHESIZE_FUNC_DEFINITION(CDictionary, CObject, objectForKey, CObject) + C_SYNTHESIZE_FUNC_DEFINITION(CDictionary, void, setObjectForKey, CObject, CObject) + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CDictionary, CDictionary, init) + + C_SYNTHESIZE_FUNC_DEFINITION(CObject, CDictionary, serializable); + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CObject, CObject, objectWithSerializable, CDictionary); + +#ifdef __cplusplus +} +#endif + +#endif /* CDictionary_hpp */ diff --git a/src/c/basetypes/CIndexSet.cpp b/src/c/basetypes/CIndexSet.cpp new file mode 100644 index 000000000..792c75681 --- /dev/null +++ b/src/c/basetypes/CIndexSet.cpp @@ -0,0 +1,136 @@ +#include +#include "CIndexSet.h" +#include "CBase+Private.h" + +#define nativeType mailcore::IndexSet +#define structName CIndexSet + +Range RangeEmpty = {UINT64_MAX, 0}; + +Range RangeMake(uint64_t location, uint64_t length) +{ + Range result; + result.location = location; + result.length = length; + return result; +} + +mailcore::Range cast(Range range) +{ + return mailcore::RangeMake(range.location, range.length); +} + +CIndexSet RangeRemoveRange(Range range1, Range range2) +{ + mailcore::Range mcRange1 = cast(range1); + mailcore::Range mcRange2 = cast(range2); + mailcore::IndexSet * indexSet = mailcore::RangeRemoveRange(mcRange1, mcRange2); + return CIndexSet_new(indexSet); +} + +CIndexSet RangeUnion(Range range1, Range range2) +{ + mailcore::Range mcRange1 = cast(range1); + mailcore::Range mcRange2 = cast(range2); + mailcore::IndexSet * indexSet = mailcore::RangeUnion(mcRange1, mcRange2); + return CIndexSet_new(indexSet); +} + +Range RangeWithMCRange(mailcore::Range range) +{ + Range result; + result.location = range.location; + result.length = range.length; + return result; +} + +Range RangeIntersection(Range range1, Range range2) +{ + mailcore::Range mcRange1 = cast(range1); + mailcore::Range mcRange2 = cast(range2); + mailcore::Range mcResult = mailcore::RangeIntersection(mcRange1, mcRange2); + return RangeMake(mcResult.location, mcResult.length); +} + +bool RangeHasIntersection(Range range1, Range range2) +{ + mailcore::Range mcRange1 = cast(range1); + mailcore::Range mcRange2 = cast(range2); + return mailcore::RangeHasIntersection(mcRange1, mcRange2); +} + +uint64_t RangeLeftBound(Range range) +{ + mailcore::Range mcRange = cast(range); + return mailcore::RangeLeftBound(mcRange); +} + +uint64_t RangeRightBound(Range range) +{ + mailcore::Range mcRange = cast(range); + return mailcore::RangeRightBound(mcRange); +} + +CIndexSet CIndexSet_init() { + return CIndexSet_new(new mailcore::IndexSet()); +} + +CIndexSet CIndexSet_new_WithRange(Range range) { + return CIndexSet_new(mailcore::IndexSet::indexSetWithRange(cast(range))); +} + +CIndexSet CIndexSet_new_WithIndex(uint64_t idx) { + return CIndexSet_new(mailcore::IndexSet::indexSetWithIndex(idx)); +} + +C_SYNTHESIZE_CONSTRUCTOR() +C_SYNTHESIZE_COBJECT_CAST() + +uint64_t CIndexSet_count(struct CIndexSet self) { + return self.instance->count(); +} + +void CIndexSet_addIndex(struct CIndexSet self, uint64_t idx) { + return self.instance->addIndex(idx); +} + +void CIndexSet_removeIndex(struct CIndexSet self, uint64_t idx) { + return self.instance->removeIndex(idx); +} + +bool CIndexSet_containsIndex(struct CIndexSet self, uint64_t idx) { + return self.instance->containsIndex(idx); +} + +void CIndexSet_addRange(struct CIndexSet self, Range range) { + return self.instance->addRange(cast(range)); +} + +void CIndexSet_removeRange(struct CIndexSet self, Range range) { + return self.instance->removeRange(cast(range)); +} + +void CIndexSet_intersectsRange(struct CIndexSet self, Range range) { + return self.instance->intersectsRange(cast(range)); +} + +void CIndexSet_addIndexSet(struct CIndexSet self, struct CIndexSet indexSet) { + return self.instance->addIndexSet(indexSet.instance); +} + +void CIndexSet_removeIndexSet(struct CIndexSet self, struct CIndexSet indexSet) { + return self.instance->removeIndexSet(indexSet.instance); +} + +void CIndexSet_intersectsIndexSet(struct CIndexSet self, struct CIndexSet indexSet) { + return self.instance->intersectsIndexSet(indexSet.instance); +} + +Range CIndexSet_range(struct CIndexSet self, unsigned int idx) { + mailcore::Range range = self.instance->allRanges()[idx]; + return RangeMake(range.location, range.length); +} + +unsigned int CIndexSet_rangesCount(struct CIndexSet self) { + return self.instance->rangesCount(); +} diff --git a/src/c/basetypes/CIndexSet.h b/src/c/basetypes/CIndexSet.h new file mode 100644 index 000000000..5f289f294 --- /dev/null +++ b/src/c/basetypes/CIndexSet.h @@ -0,0 +1,64 @@ +#ifndef MAILCORE_CINDEX_SET_H +#define MAILCORE_CINDEX_SET_H + +#include "stdint.h" +#include "CBase.h" +#include "CArray.h" +#include "CData.h" + +#ifdef __cplusplus + +namespace mailcore { + class IndexSet; +} + +extern "C" { +#endif + + struct Range { + /** first integer of the range.*/ + uint64_t location; + + /** length of the range.*/ + uint64_t length; + }; + typedef struct Range Range; + + CMAILCORE_EXPORT extern Range RangeEmpty; + CMAILCORE_EXPORT Range RangeMake(uint64_t location, uint64_t length); + CMAILCORE_EXPORT Range RangeIntersection(Range range1, Range range2); + CMAILCORE_EXPORT bool RangeHasIntersection(Range range1, Range range2); + CMAILCORE_EXPORT uint64_t RangeLeftBound(Range range); + CMAILCORE_EXPORT uint64_t RangeRightBound(Range range); + + C_SYNTHESIZE_STRUCT_DEFINITION(CIndexSet, mailcore::IndexSet) + + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIndexSet) + + C_SYNTHESIZE_READONLY_PROPERTY_DEFINITION(CIndexSet, uint64_t, count) + + C_SYNTHESIZE_FUNC_DEFINITION(CIndexSet, void, addIndex, uint64_t) + C_SYNTHESIZE_FUNC_DEFINITION(CIndexSet, void, removeIndex, uint64_t) + C_SYNTHESIZE_FUNC_DEFINITION(CIndexSet, bool, containsIndex, uint64_t) + C_SYNTHESIZE_FUNC_DEFINITION(CIndexSet, void, addRange, Range) + C_SYNTHESIZE_FUNC_DEFINITION(CIndexSet, void, removeRange, Range) + C_SYNTHESIZE_FUNC_DEFINITION(CIndexSet, void, intersectsRange, Range) + C_SYNTHESIZE_FUNC_DEFINITION(CIndexSet, void, addIndexSet, CIndexSet) + C_SYNTHESIZE_FUNC_DEFINITION(CIndexSet, void, removeIndexSet, CIndexSet) + C_SYNTHESIZE_FUNC_DEFINITION(CIndexSet, void, intersectsIndexSet, CIndexSet) + C_SYNTHESIZE_FUNC_DEFINITION(CIndexSet, Range, range, unsigned int) + C_SYNTHESIZE_FUNC_DEFINITION(CIndexSet, unsigned int, rangesCount) + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIndexSet, CIndexSet, init) + + CMAILCORE_EXPORT CIndexSet CIndexSet_new_WithRange(Range range) + CF_SWIFT_NAME(CIndexSet.init(range:)); + + CMAILCORE_EXPORT CIndexSet CIndexSet_new_WithIndex(uint64_t idx) + CF_SWIFT_NAME(CIndexSet.init(idx:)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/c/basetypes/CObject.cpp b/src/c/basetypes/CObject.cpp new file mode 100644 index 000000000..1743e9b4e --- /dev/null +++ b/src/c/basetypes/CObject.cpp @@ -0,0 +1,38 @@ +#include +#include +#include "CObject.h" +#include "CBase+Private.h" +#include "CDictionary.h" + +#define nativeType mailcore::Object +#define structName CObject + +C_SYNTHESIZE_CONSTRUCTOR() +C_SYNTHESIZE_FUNC_WITH_OBJ(CDictionary, serializable) +C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ(CObject, objectWithSerializable, CDictionary) + +CObject CObject_new_WithUInt32(uint32_t value) { + return CObject_new(mailcore::Value::valueWithUnsignedIntValue(value)); +} + +uint32_t CObject_castToUInt32(struct CObject self) { + return (reinterpret_cast(self.instance))->unsignedIntValue(); +} + +#ifdef __ANDROID__ +void CObject_setMainQueue(dispatch_queue_t mainQueue) { + mailcore::mainQueue = mainQueue; +} +#endif + +void CObject_setMCAssertHandler(MCLogger handler) { + setMCAssertHandler(handler); +} + +void CObject_setLogger(MCLogger logger) { + setMCLogger(logger); +} + +void CObject_setLoggerEnabled(bool enable) { + MCLogEnabled = enable; +} diff --git a/src/c/basetypes/CObject.h b/src/c/basetypes/CObject.h new file mode 100644 index 000000000..086259feb --- /dev/null +++ b/src/c/basetypes/CObject.h @@ -0,0 +1,35 @@ +#ifndef MAILCORE_COBJECT_H +#define MAILCORE_COBJECT_H + +#include "stdint.h" +#include "CBase.h" +#include + +#ifdef __cplusplus + +namespace mailcore { + class Object; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CObject, mailcore::Object) + C_SYNTHESIZE_FUNC_DEFINITION(CObject, uint32_t, castToUInt32); + + #ifdef __ANDROID__ + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CObject, void, setMainQueue, dispatch_queue_t); + #endif + typedef void (*MCLogger)(const char * filename, unsigned int line, const char * message); + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CObject, void, setMCAssertHandler, MCLogger); + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CObject, void, setLogger, MCLogger); + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CObject, void, setLoggerEnabled, bool); + + CMAILCORE_EXPORT CObject CObject_new_WithUInt32(uint32_t string) + CF_SWIFT_NAME(CObject.init(uint32:)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/c/basetypes/MailCoreString.cpp b/src/c/basetypes/MailCoreString.cpp new file mode 100644 index 000000000..886083934 --- /dev/null +++ b/src/c/basetypes/MailCoreString.cpp @@ -0,0 +1,51 @@ +#include "MailCoreString.h" +#include +#include + +#include "CData.h" + +#include "CBase+Private.h" +#include "time.h" + +#define nativeType mailcore::String +#define structName MailCoreString + +C_SYNTHESIZE_CONSTRUCTOR() +C_SYNTHESIZE_COBJECT_CAST() + +MailCoreString MailCoreString_stringWithCharacters(const char* str, unsigned int length) { + return MailCoreString_new(mailcore::String::stringWithCharacters((const UChar*)(str), length)); +} + +C_SYNTHESIZE_FUNC_WITH_SCALAR(const UChar*, unicodeCharacters) +C_SYNTHESIZE_FUNC_WITH_SCALAR(unsigned int, length) + +C_SYNTHESIZE_FUNC_WITH_OBJ(MailCoreString, mUTF7DecodedString) +C_SYNTHESIZE_FUNC_WITH_OBJ(MailCoreString, mUTF7EncodedString) +C_SYNTHESIZE_FUNC_DEFINITION(MailCoreString, bool, isEqual, MailCoreString) + +bool MailCoreString_isEqual(struct MailCoreString self, MailCoreString other) { + return self.instance->isEqual(other.instance); +} + +MailCoreString CData_stringWithDetectedCharset(struct CData self, MailCoreString charset) { + return MailCoreString_new(self.instance->stringWithDetectedCharset(charset.instance, false)); +} + +MailCoreString CData_charsetWithFilteredHTML(struct CData self, bool filterHTML) { + return MailCoreString_new(self.instance->charsetWithFilteredHTML(filterHTML)); +} + +extern "C" { + + CMAILCORE_EXPORT time_t MailCoreTimestampFromDate(struct mailimf_date_time * date_time) { + return mailcore::timestampFromDate(date_time); + } + + CMAILCORE_EXPORT time_t MailCoreTimestampFromIMAPDate(struct mailimap_date_time * imap_date) { + return mailcore::timestampFromIMAPDate(imap_date); + } + +} + + diff --git a/src/c/basetypes/MailCoreString.h b/src/c/basetypes/MailCoreString.h new file mode 100644 index 000000000..34e3dafcb --- /dev/null +++ b/src/c/basetypes/MailCoreString.h @@ -0,0 +1,39 @@ +#ifndef MAILCORE_CSTRING_H +#define MAILCORE_CSTRING_H + +#include "stdint.h" +#include "CBase.h" +#include "CObject.h" +#include "CData.h" + +#ifdef __cplusplus + +namespace mailcore { + class String; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(MailCoreString, mailcore::String) + + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(MailCoreString) + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(MailCoreString, MailCoreString, stringWithCharacters, const char*, unsigned int) + + C_SYNTHESIZE_READONLY_PROPERTY_DEFINITION(MailCoreString, const UChar*, unicodeCharacters) + C_SYNTHESIZE_READONLY_PROPERTY_DEFINITION(MailCoreString, unsigned int, length) + + C_SYNTHESIZE_FUNC_DEFINITION(MailCoreString, MailCoreString, mUTF7DecodedString) + C_SYNTHESIZE_FUNC_DEFINITION(MailCoreString, MailCoreString, mUTF7EncodedString) + + C_SYNTHESIZE_FUNC_DEFINITION(MailCoreString, bool, isEqual, MailCoreString) + + C_SYNTHESIZE_FUNC_DEFINITION(CData, MailCoreString, stringWithDetectedCharset, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CData, MailCoreString, charsetWithFilteredHTML, bool) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/c/imap/CIMAPAppendMessageOperation.cpp b/src/c/imap/CIMAPAppendMessageOperation.cpp new file mode 100644 index 000000000..4ea5c1706 --- /dev/null +++ b/src/c/imap/CIMAPAppendMessageOperation.cpp @@ -0,0 +1,12 @@ +#include "CIMAPAppendMessageOperation.h" +#include "CBase+Private.h" +#include + +#define nativeType mailcore::IMAPAppendMessageOperation +#define structName CIMAPAppendMessageOperation + +C_SYNTHESIZE_CONSTRUCTOR() +C_SYNTHESIZE_COBJECT_CAST() + +C_SYNTHESIZE_SCALAR(time_t, time_t, setDate, date) +C_SYNTHESIZE_FUNC_WITH_SCALAR(uint32_t, createdUID) diff --git a/src/c/imap/CIMAPAppendMessageOperation.h b/src/c/imap/CIMAPAppendMessageOperation.h new file mode 100644 index 000000000..1c4ccb910 --- /dev/null +++ b/src/c/imap/CIMAPAppendMessageOperation.h @@ -0,0 +1,27 @@ +#ifndef MAILCORE_CIMAP_APPEND_MESSAGE_OPERATION_H +#define MAILCORE_CIMAP_APPEND_MESSAGE_OPERATION_H + +#include "CIMAPBaseOperation.h" +#include "stdint.h" +#include "time.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPAppendMessageOperation; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPAppendMessageOperation, mailcore::IMAPAppendMessageOperation) + + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPAppendMessageOperation) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPAppendMessageOperation, time_t, date, setDate) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAppendMessageOperation, uint32_t, createdUID) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/c/imap/CIMAPAsyncSession.cpp b/src/c/imap/CIMAPAsyncSession.cpp new file mode 100644 index 000000000..c76771b26 --- /dev/null +++ b/src/c/imap/CIMAPAsyncSession.cpp @@ -0,0 +1,251 @@ +#include +#include + +#include "CIMAPAsyncSession.h" +#include "CIMAPAppendMessageOperation.h" +#include "CIMAPCopyMessagesOperation.h" +#include "CIMAPFetchContentOperation.h" +#include "CIMAPFolderInfoOperation.h" +#include "CIMAPFolderStatusOperation.h" +#include "CIMAPSearchOperation.h" + +#include "CBase+Private.h" + +#define nativeType mailcore::IMAPAsyncSession +#define structName CIMAPAsyncSession + +C_SYNTHESIZE_STRING(setHostname, hostname) +C_SYNTHESIZE_SCALAR(unsigned int, unsigned int, setPort, port) +C_SYNTHESIZE_STRING(setUsername, username) +C_SYNTHESIZE_STRING(setPassword, password) +C_SYNTHESIZE_ENUM(ConnectionType, mailcore::ConnectionType, setConnectionType, connectionType) +C_SYNTHESIZE_SCALAR(time_t, time_t, setTimeout, timeout) +C_SYNTHESIZE_BOOL(setCheckCertificateEnabled, isCheckCertificateEnabled) +C_SYNTHESIZE_STRING(setOAuth2Token, OAuth2Token) +C_SYNTHESIZE_ENUM(CAuthType, mailcore::AuthType, setAuthType, authType) +C_SYNTHESIZE_SCALAR(unsigned int, unsigned int, setMaximumConnections, maximumConnections) +C_SYNTHESIZE_BOOL(setAllowsFolderConcurrentAccessEnabled, allowsFolderConcurrentAccessEnabled) +C_SYNTHESIZE_MAILCORE_OBJ(CIMAPNamespace, CIMAPNamespace_new, setDefaultNamespace, defaultNamespace) +C_SYNTHESIZE_MAILCORE_OBJ(CIMAPIdentity, CIMAPIdentity_new, setClientIdentity, clientIdentity) +C_SYNTHESIZE_SCALAR(dispatch_queue_t, dispatch_queue_t, setDispatchQueue, dispatchQueue) +C_SYNTHESIZE_BOOL(setQResyncCompatible, isQResyncCompatible) +C_SYNTHESIZE_BOOL(setVoIPEnabled, isVoIPEnabled) + +class CIMAPCallbackBridge : public mailcore::Object, public mailcore::ConnectionLogger, public mailcore::OperationQueueCallback { +public: + CIMAPCallbackBridge(CConnectionLogger logger, CConnectionLoggerRelease releaseLoggerBlock) + { + this->mLogger = logger; + this->mReleaseBlock = releaseLoggerBlock; + } + + virtual void log(void * sender, mailcore::ConnectionLogType logType, mailcore::Data *data) + { + if (mcoLogger != NULL) { + mLogger(sender, static_cast((int)logType), CData_new(data), mcoLogger); + } + } + + virtual void queueStartRunning() + { + if (mQueueRunningChangeBlock != NULL) { + mQueueRunningChangeBlock(); + } + } + + virtual void queueStoppedRunning() + { + if (mQueueRunningChangeBlock != NULL) { + mQueueRunningChangeBlock(); + } + } + + void releaseSwiftLogger() { + this->mReleaseBlock(this->mcoLogger); + this->mcoLogger = NULL; + } + + CConnectionLogger mLogger = NULL; + CConnectionLoggerRelease mReleaseBlock = NULL; + void* mcoLogger = NULL; + OperationQueueRunningChangeBlock mQueueRunningChangeBlock = NULL; +}; + +void CIMAPAsyncSession_setConnectionLogger(struct CIMAPAsyncSession self, void* mcoLogger) { + self._callback->releaseSwiftLogger(); + self._callback->mcoLogger = mcoLogger; + if (mcoLogger != NULL) { + self.instance->setConnectionLogger(self._callback); + } + else { + self.instance->setConnectionLogger(NULL); + } +} + +C_SYNTHESIZE_FUNC_WITH_OBJ(CIMAPIdentity, serverIdentity) +C_SYNTHESIZE_FUNC_WITH_SCALAR(bool, isIdleEnabled) +C_SYNTHESIZE_FUNC_WITH_SCALAR(bool, isOperationQueueRunning) +C_SYNTHESIZE_FUNC_WITH_VOID(cancelAllOperations) +C_SYNTHESIZE_FUNC_WITH_OBJ(CIMAPBaseOperation, subscribeFolderOperation, MailCoreString) +C_SYNTHESIZE_FUNC_WITH_OBJ(CIMAPBaseOperation, unsubscribeFolderOperation, MailCoreString) +C_SYNTHESIZE_FUNC_WITH_OBJ(CIMAPBaseOperation, renameFolderOperation, MailCoreString, MailCoreString) + +C_SYNTHESIZE_FUNC_WITH_OBJ(CIMAPFetchFoldersOperation, fetchSubscribedFoldersOperation) +C_SYNTHESIZE_FUNC_WITH_OBJ(CIMAPFetchNamespaceOperation, fetchNamespaceOperation) + +CIMAPFetchContentToFileOperation CIMAPAsyncSession_fetchMessageAttachmentToFileOperation(struct CIMAPAsyncSession self, MailCoreString folder, uint32_t uid, MailCoreString partID, Encoding encoding, MailCoreString filename, bool urgent){ + return CIMAPFetchContentToFileOperation_new(self.instance->fetchMessageAttachmentToFileByUIDOperation(folder.instance, uid, partID.instance, ((mailcore::Encoding) encoding), filename.instance, urgent)); +} + +CIMAPCustomCommandOperation CIMAPAsyncSession_customCommandOperation(struct CIMAPAsyncSession self, MailCoreString command) { + return CIMAPCustomCommandOperation_new(self.instance->customCommand(command.instance, false)); +} + +C_SYNTHESIZE_FUNC_WITH_OBJ(CIMAPBaseOperation, connectOperation) +C_SYNTHESIZE_FUNC_WITH_OBJ(CIMAPBaseOperation, disconnectOperation) +C_SYNTHESIZE_FUNC_WITH_OBJ(CIMAPBaseOperation, noopOperation) +C_SYNTHESIZE_FUNC_WITH_OBJ(CIMAPCheckAccountOperation, checkAccountOperation) +C_SYNTHESIZE_FUNC_WITH_OBJ(CIMAPCapabilityOperation, capabilityOperation) +C_SYNTHESIZE_FUNC_WITH_OBJ(CIMAPFetchFoldersOperation, fetchAllFoldersOperation) +C_SYNTHESIZE_FUNC_WITH_OBJ(CIMAPBaseOperation, expungeOperation, MailCoreString) +C_SYNTHESIZE_FUNC_WITH_OBJ(CIMAPBaseOperation, createFolderOperation, MailCoreString) +C_SYNTHESIZE_FUNC_WITH_OBJ(CIMAPBaseOperation, deleteFolderOperation, MailCoreString) + +CIMAPBaseOperation CIMAPAsyncSession_storeFlagsByUIDOperation(CIMAPAsyncSession self, MailCoreString folder, CIndexSet set, IMAPStoreFlagsRequestKind kind, CMessageFlag flags, CArray customFlags){ + mailcore::IMAPOperation *imapOperation = self.instance->storeFlagsByUIDOperation(folder.instance, + set.instance, static_cast(kind), static_cast(flags), customFlags.instance); + return CIMAPBaseOperation_new(imapOperation); +} + +CIMAPBaseOperation CIMAPAsyncSession_storeFlagsByNumberOperation(struct CIMAPAsyncSession self, MailCoreString folder, CIndexSet numbers, IMAPStoreFlagsRequestKind kind, CMessageFlag flags, CArray customFlags) { + mailcore::IMAPOperation *imapOperation = self.instance->storeFlagsByNumberOperation(folder.instance, + numbers.instance, static_cast(kind), static_cast(flags), customFlags.instance); + return CIMAPBaseOperation_new(imapOperation); +} + +CIMAPBaseOperation CIMAPAsyncSession_storeLabelsByUIDOperation(struct CIMAPAsyncSession self, MailCoreString folder, CIndexSet uids, IMAPStoreFlagsRequestKind kind, CArray labels) { + mailcore::IMAPOperation *imapOperation = self.instance->storeLabelsByUIDOperation(folder.instance, + uids.instance, static_cast(kind), labels.instance); + return CIMAPBaseOperation_new(imapOperation); +} + +CIMAPBaseOperation CIMAPAsyncSession_storeLabelsByNumberOperation(struct CIMAPAsyncSession self, MailCoreString folder, CIndexSet numbers, IMAPStoreFlagsRequestKind kind, CArray labels) { + mailcore::IMAPOperation *imapOperation = self.instance->storeLabelsByNumberOperation(folder.instance, + numbers.instance, static_cast(kind), labels.instance); + return CIMAPBaseOperation_new(imapOperation); +} + +CIMAPAppendMessageOperation CIMAPAsyncSession_appendMessageOperation(CIMAPAsyncSession self, MailCoreString folder, MailCoreString messagePath, CMessageFlag flags, CArray array){ + mailcore::IMAPAppendMessageOperation *imapOperation = self.instance->appendMessageOperation(folder.instance, messagePath.instance, static_cast(flags), array.instance); + return CIMAPAppendMessageOperation_new(imapOperation); +} + +CIMAPAppendMessageOperation CIMAPAsyncSession_appendMessageOperationWithData(CIMAPAsyncSession self, MailCoreString folder, CData messageData, CMessageFlag flags, CArray array){ + mailcore::IMAPAppendMessageOperation *imapOperation = self.instance->appendMessageOperation(folder.instance, + messageData.instance, + static_cast(flags), array.instance); + return CIMAPAppendMessageOperation_new(imapOperation); +} + +CIMAPFetchMessagesOperation CIMAPAsyncSession_fetchMessagesByNumberOperation(CIMAPAsyncSession self, MailCoreString folder, CIMAPMessagesRequestKind kind, CIndexSet numbers){ + mailcore::IMAPFetchMessagesOperation *imapOperation = self.instance->fetchMessagesByNumberOperation(folder.instance, + static_cast(kind), numbers.instance); + return CIMAPFetchMessagesOperation_new(imapOperation); +} + +CIMAPFetchMessagesOperation CIMAPAsyncSession_fetchMessagesByUIDOperation(CIMAPAsyncSession self, MailCoreString folder, CIMAPMessagesRequestKind kind, CIndexSet uids){ + mailcore::IMAPFetchMessagesOperation *imapOperation = self.instance->fetchMessagesByUIDOperation(folder.instance, + static_cast(kind), uids.instance); + return CIMAPFetchMessagesOperation_new(imapOperation); +} + +CIMAPFetchMessagesOperation CIMAPAsyncSession_syncMessagesByUIDOperation(CIMAPAsyncSession self, MailCoreString folder, CIMAPMessagesRequestKind kind, CIndexSet uids, uint64_t modSeq){ + mailcore::IMAPFetchMessagesOperation *imapOperation = self.instance->syncMessagesByUIDOperation(folder.instance, + static_cast(kind), uids.instance, modSeq); + return CIMAPFetchMessagesOperation_new(imapOperation); +} + +CIMAPFetchContentOperation CIMAPAsyncSession_fetchMessageByUIDOperation(CIMAPAsyncSession self, MailCoreString folder, uint32_t uid, bool urgent){ + mailcore::IMAPFetchContentOperation *imapOperation = self.instance->fetchMessageByUIDOperation(folder.instance, uid, urgent); + return CIMAPFetchContentOperation_new(imapOperation); +} + +CIMAPFetchContentOperation CIMAPAsyncSession_fetchMessageByNumberOperation(struct CIMAPAsyncSession self, MailCoreString folder, uint32_t uid, bool urgent) { + mailcore::IMAPFetchContentOperation *imapOperation = self.instance->fetchMessageByNumberOperation(folder.instance, uid, urgent); + return CIMAPFetchContentOperation_new(imapOperation); +} + +CIMAPFetchContentOperation CIMAPAsyncSession_fetchMessageAttachmentByUIDOperation(CIMAPAsyncSession self, MailCoreString folder, uint32_t uid, MailCoreString partID, Encoding encoding, bool urgent){ + mailcore::IMAPFetchContentOperation *imapOperation = self.instance->fetchMessageAttachmentByUIDOperation(folder.instance, + uid, partID.instance, static_cast(encoding), urgent); + return CIMAPFetchContentOperation_new(imapOperation); +} + +CIMAPFetchContentOperation CIMAPAsyncSession_fetchMessageAttachmentByNumberOperation(struct CIMAPAsyncSession self, MailCoreString folder, uint32_t number, MailCoreString partID, Encoding encoding, bool urgent) { + mailcore::IMAPFetchContentOperation *imapOperation = self.instance->fetchMessageAttachmentByNumberOperation(folder.instance, + number, partID.instance, static_cast(encoding), urgent); + return CIMAPFetchContentOperation_new(imapOperation); +} + +CIMAPSearchOperation CIMAPAsyncSession_searchOperationWithExpression(CIMAPAsyncSession self, MailCoreString folder, CIMAPSearchExpression expr){ + mailcore::IMAPSearchOperation *imapOperation = self.instance->searchOperation(folder.instance, expr.instance); + return CIMAPSearchOperation_new(imapOperation); +} + +CIMAPSearchOperation CIMAPAsyncSession_searchOperation(CIMAPAsyncSession self, MailCoreString folder, IMAPSearchKind kind, MailCoreString str){ + mailcore::IMAPSearchOperation *imapOperation = self.instance->searchOperation(folder.instance, + static_cast(kind), str.instance); + return CIMAPSearchOperation_new(imapOperation); +} + +CIMAPCopyMessagesOperation CIMAPAsyncSession_copyMessagesOperation(CIMAPAsyncSession self, MailCoreString folder, CIndexSet uids,MailCoreString destFolder){ + mailcore::IMAPCopyMessagesOperation *imapOperation = self.instance->copyMessagesOperation(folder.instance, + uids.instance, destFolder.instance); + return CIMAPCopyMessagesOperation_new(imapOperation); +} + +C_SYNTHESIZE_FUNC_WITH_OBJ(CIMAPFolderInfoOperation, folderInfoOperation, MailCoreString) +C_SYNTHESIZE_FUNC_WITH_OBJ(CIMAPFolderStatusOperation, folderStatusOperation, MailCoreString) + +CIMAPIdleOperation CIMAPAsyncSession_idleOperation(struct CIMAPAsyncSession self, MailCoreString folder, uint32_t lastKnownUID){ + return CIMAPIdleOperation_new(self.instance->idleOperation(folder.instance, lastKnownUID)); +} + +C_SYNTHESIZE_FUNC_WITH_OBJ(CIMAPMoveMessagesOperation, moveMessagesOperation, MailCoreString, CIndexSet, MailCoreString) + +CIMAPFetchParsedContentOperation CIMAPAsyncSession_fetchParsedMessageOperationByUIDOperation(struct CIMAPAsyncSession self, MailCoreString folder, uint32_t uid, bool urgent) { + return CIMAPFetchParsedContentOperation_new(self.instance->fetchParsedMessageByUIDOperation(folder.instance, uid)); +} + +CIMAPFetchParsedContentOperation CIMAPAsyncSession_fetchParsedMessageOperationByNumberOperation(struct CIMAPAsyncSession self, MailCoreString folder, uint32_t number, bool urgent) { + return CIMAPFetchParsedContentOperation_new(self.instance->fetchParsedMessageByNumberOperation(folder.instance, number)); +} + +C_SYNTHESIZE_FUNC_WITH_OBJ(CIMAPMessageRenderingOperation, htmlRenderingOperation, CIMAPMessage, MailCoreString) +C_SYNTHESIZE_FUNC_WITH_OBJ(CIMAPIdentityOperation, identityOperation, CIMAPIdentity) +C_SYNTHESIZE_FUNC_WITH_OBJ(CIMAPMessageRenderingOperation, htmlBodyRenderingOperation, CIMAPMessage, MailCoreString) +C_SYNTHESIZE_FUNC_WITH_OBJ(CIMAPMessageRenderingOperation, plainTextRenderingOperation, CIMAPMessage, MailCoreString) + +CIMAPMessageRenderingOperation CIMAPAsyncSession_plainTextBodyRenderingOperation(struct CIMAPAsyncSession self, CIMAPMessage message, MailCoreString folder, bool stripWhitespace) { + return CIMAPMessageRenderingOperation_new(self.instance->plainTextBodyRenderingOperation(message.instance, folder.instance, stripWhitespace)); +} + +C_SYNTHESIZE_FUNC_WITH_OBJ(CIMAPQuotaOperation, quotaOperation) + +CIMAPAsyncSession CIMAPAsyncSession_new(CConnectionLogger logger, CConnectionLoggerRelease releaseLoggerBlock){ + CIMAPAsyncSession session; + session.instance = new mailcore::IMAPAsyncSession(); + session._callback = new CIMAPCallbackBridge(logger, releaseLoggerBlock); + session.instance->setOperationQueueCallback(session._callback); + return session; +} + +void CIMAPAsyncSession_release(CIMAPAsyncSession session){ + session.instance->setConnectionLogger(NULL); + session.instance->setOperationQueueCallback(NULL); + session._callback->releaseSwiftLogger(); + C_SAFE_RELEASE(session._callback); + session.instance->release(); +} + + diff --git a/src/c/imap/CIMAPAsyncSession.h b/src/c/imap/CIMAPAsyncSession.h new file mode 100644 index 000000000..1fc2941e9 --- /dev/null +++ b/src/c/imap/CIMAPAsyncSession.h @@ -0,0 +1,148 @@ +#ifndef MAILCORE_CIMAP_SESSION_H +#define MAILCORE_CIMAP_SESSION_H + +#include +#include +#include + +#include + +#include "CBase.h" +#include "CIndexSet.h" +#include "CArray.h" +#include "MailCoreString.h" +#include "CIMAPNamespace.h" +#include "CIMAPBaseOperation.h" +#include "CIMAPAppendMessageOperation.h" +#include "CIMAPFetchContentOperation.h" +#include "CIMAPFetchMessagesOperation.h" +#include "CIMAPSearchOperation.h" +#include "CIMAPSearchExpression.h" +#include "CIMAPCopyMessagesOperation.h" +#include "CIMAPFolderInfoOperation.h" +#include "CIMAPFolderStatusOperation.h" +#include "CMessageConstants.h" +#include "CIMAPIdleOperation.h" +#include "CIMAPFetchFoldersOperation.h" +#include "CIMAPCapabilityOperation.h" +#include "CIMAPCheckAccountOperation.h" +#include "CIMAPCustomCommandOperation.h" +#include "CIMAPFetchContentToFileOperation.h" +#include "CIMAPFetchNamespaceOperation.h" +#include "CIMAPMoveMessagesOperation.h" +#include "CIMAPFetchParsedContentOperation.h" +#include "CIMAPMessageRenderingOperation.h" +#include "CIMAPQuotaOperation.h" +#include "CIMAPMessage.h" +#include "CIMAPIdentity.h" +#include "CIMAPIdentityOperation.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPAsyncSession; +} + +class CIMAPCallbackBridge; + +extern "C" { +#endif + + typedef void (*MCOConnectionLoggerReleaseBlock)(const void* logger); + + typedef struct CIMAPAsyncSession { +#ifdef __cplusplus + mailcore::IMAPAsyncSession* instance; + CIMAPCallbackBridge* _callback; +#else + void* instance; + void* _callback; +#endif + } CIMAPAsyncSession; + + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPAsyncSession, MailCoreString, hostname, setHostname) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPAsyncSession, unsigned int, port, setPort) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPAsyncSession, MailCoreString, username, setUsername) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPAsyncSession, MailCoreString, password, setPassword) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPAsyncSession, ConnectionType, connectionType, setConnectionType) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPAsyncSession, time_t, timeout, setTimeout) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPAsyncSession, bool, isCheckCertificateEnabled, setCheckCertificateEnabled) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPAsyncSession, MailCoreString, OAuth2Token, setOAuth2Token) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPAsyncSession, CAuthType, authType, setAuthType) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPAsyncSession, unsigned int, maximumConnections, setMaximumConnections) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPAsyncSession, bool, allowsFolderConcurrentAccessEnabled, setAllowsFolderConcurrentAccessEnabled) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPAsyncSession, CIMAPNamespace, defaultNamespace, setDefaultNamespace) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPAsyncSession, CIMAPIdentity, clientIdentity, setClientIdentity) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPAsyncSession, CIMAPIdentity, serverIdentity, setServerIdentity) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPAsyncSession, bool, isQResyncCompatible, setQResyncCompatible) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPAsyncSession, bool, isVoIPEnabled, setVoIPEnabled) + + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, dispatch_queue_t, dispatchQueue) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, void, setDispatchQueue, dispatch_queue_t) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, void, setConnectionLogger, void*) + + C_SYNTHESIZE_READONLY_PROPERTY_DEFINITION(CIMAPAsyncSession, bool, isIdleEnabled) + C_SYNTHESIZE_READONLY_PROPERTY_DEFINITION(CIMAPAsyncSession, bool, isOperationQueueRunning) + + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, void, cancelAllOperations) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPBaseOperation, connectOperation) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPBaseOperation, disconnectOperation) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPBaseOperation, noopOperation) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPBaseOperation, expungeOperation, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPBaseOperation, createFolderOperation, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPBaseOperation, renameFolderOperation, MailCoreString, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPBaseOperation, deleteFolderOperation, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPBaseOperation, storeFlagsByUIDOperation, MailCoreString, CIndexSet, IMAPStoreFlagsRequestKind, CMessageFlag, CArray) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPBaseOperation, storeFlagsByNumberOperation, MailCoreString, CIndexSet, IMAPStoreFlagsRequestKind, CMessageFlag, CArray) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPBaseOperation, storeLabelsByUIDOperation, MailCoreString, CIndexSet, IMAPStoreFlagsRequestKind, CArray) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPBaseOperation, storeLabelsByNumberOperation, MailCoreString, CIndexSet, IMAPStoreFlagsRequestKind, CArray) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPBaseOperation, subscribeFolderOperation, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPBaseOperation, unsubscribeFolderOperation, MailCoreString) + + + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPFetchFoldersOperation, fetchSubscribedFoldersOperation) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPFetchContentToFileOperation, fetchMessageAttachmentToFileOperation, MailCoreString, uint32_t, MailCoreString, Encoding, MailCoreString, bool) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPFetchNamespaceOperation, fetchNamespaceOperation) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPCustomCommandOperation, customCommandOperation, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPCheckAccountOperation, checkAccountOperation) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPCapabilityOperation, capabilityOperation) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPFetchFoldersOperation, fetchAllFoldersOperation) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPAppendMessageOperation, appendMessageOperation, MailCoreString, MailCoreString, CMessageFlag, CArray) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPAppendMessageOperation, appendMessageOperationWithData, MailCoreString, CData, CMessageFlag, CArray) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPFetchMessagesOperation, fetchMessagesByNumberOperation, MailCoreString, CIMAPMessagesRequestKind, CIndexSet) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPFetchMessagesOperation, fetchMessagesByUIDOperation, MailCoreString, CIMAPMessagesRequestKind, CIndexSet) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPFetchMessagesOperation, syncMessagesByUIDOperation, MailCoreString, CIMAPMessagesRequestKind, CIndexSet, uint64_t) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPFetchContentOperation, fetchMessageByUIDOperation, MailCoreString, uint32_t, bool) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPFetchContentOperation, fetchMessageByNumberOperation, MailCoreString, uint32_t, bool) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPFetchContentOperation, fetchMessageAttachmentByUIDOperation, MailCoreString, uint32_t, MailCoreString, Encoding, bool) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPFetchContentOperation, fetchMessageAttachmentByNumberOperation, MailCoreString, uint32_t, MailCoreString, Encoding, bool) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPSearchOperation, searchOperationWithExpression, MailCoreString, CIMAPSearchExpression) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPSearchOperation, searchOperation, MailCoreString, IMAPSearchKind, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPCopyMessagesOperation, copyMessagesOperation, MailCoreString, CIndexSet, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPFolderInfoOperation, folderInfoOperation, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPFolderStatusOperation, folderStatusOperation, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPIdleOperation, idleOperation, MailCoreString, uint32_t) + + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPMoveMessagesOperation, moveMessagesOperation, MailCoreString, CIndexSet, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPFetchParsedContentOperation, fetchParsedMessageOperationByUIDOperation, MailCoreString, uint32_t, bool) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPFetchParsedContentOperation, fetchParsedMessageOperationByNumberOperation, MailCoreString, uint32_t, bool) + + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPMessageRenderingOperation, htmlRenderingOperation, CIMAPMessage, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPMessageRenderingOperation, htmlBodyRenderingOperation, CIMAPMessage, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPMessageRenderingOperation, plainTextRenderingOperation, CIMAPMessage, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPMessageRenderingOperation, plainTextBodyRenderingOperation, CIMAPMessage, MailCoreString, bool) + + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPQuotaOperation, quotaOperation) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPIdentityOperation, identityOperationWithClientIdentity, CIMAPIdentity) + + + CMAILCORE_EXPORT CIMAPAsyncSession CIMAPAsyncSession_new(CConnectionLogger logger, CConnectionLoggerRelease releaseLoggerBlock); + + CMAILCORE_EXPORT void CIMAPAsyncSession_release(CIMAPAsyncSession self) + CF_SWIFT_NAME(CIMAPAsyncSession.release(self:)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/c/imap/CIMAPBaseOperation.cpp b/src/c/imap/CIMAPBaseOperation.cpp new file mode 100644 index 000000000..b6768026b --- /dev/null +++ b/src/c/imap/CIMAPBaseOperation.cpp @@ -0,0 +1,75 @@ +#include "COperation.h" +#include "CIMAPBaseOperation.h" +#include "CBase+Private.h" +#include + +#define nativeType mailcore::IMAPOperation +#define structName CIMAPBaseOperation + +C_SYNTHESIZE_COBJECT_CAST() + +class CIMAPBaseOperationIMAPCallback : public mailcore::IMAPOperationCallback { +public: + CIMAPBaseOperationIMAPCallback(const void* userInfo, CIMAPProgressBlock itemProgressBlock, CIMAPProgressBlock bodyProgressBlock) + { + mUserInfo = userInfo; + mItemProgressBlock = itemProgressBlock; + mBodyProgressBlock = bodyProgressBlock; + } + + virtual ~CIMAPBaseOperationIMAPCallback() + { + mUserInfo = NULL; + mItemProgressBlock = NULL; + mBodyProgressBlock = NULL; + } + + virtual void bodyProgress(mailcore::IMAPOperation * session, unsigned int current, unsigned int maximum) { + mBodyProgressBlock(mUserInfo, current, maximum); + } + + virtual void itemProgress(mailcore::IMAPOperation * session, unsigned int current, unsigned int maximum) { + mItemProgressBlock(mUserInfo, current, maximum); + } + +private: + const void* mUserInfo; + CIMAPProgressBlock mItemProgressBlock; + CIMAPProgressBlock mBodyProgressBlock; +}; + +CIMAPBaseOperation CIMAPBaseOperation_new(mailcore::IMAPOperation* operation) { + CIMAPBaseOperation self; + self.cOperation = COperation_new(operation); + self.instance = operation; + return self; +} + +ErrorCode CIMAPBaseOperation_error(struct CIMAPBaseOperation self) { + return static_cast(self.instance->error()); +} + +C_SYNTHESIZE_FUNC_WITH_SCALAR(bool, interruptCurrentCommand) + +CIMAPBaseOperation CIMAPBaseOperation_setProgressBlocks(struct CIMAPBaseOperation self, CIMAPProgressBlock itemProgressBlock, CIMAPProgressBlock bodyProgressBlock, const void* userInfo) { + CIMAPBaseOperationIMAPCallback *callback = new CIMAPBaseOperationIMAPCallback(userInfo, itemProgressBlock, bodyProgressBlock); + self._callback = callback; + self.instance->setImapCallback(callback); + return self; +} + +void CIMAPBaseOperation_retain(CIMAPBaseOperation operation) { + operation.instance->retain(); +} + +void CIMAPBaseOperation_release(CIMAPBaseOperation self) { + self.instance->setImapCallback(NULL); + self.instance->release(); + if (self._callback != NULL) { + delete self._callback; + } +} + +int CIMAPBaseOperation_retainCount(CIMAPBaseOperation self) { + return self.instance->retainCount(); +} diff --git a/src/c/imap/CIMAPBaseOperation.h b/src/c/imap/CIMAPBaseOperation.h new file mode 100644 index 000000000..ac711dd64 --- /dev/null +++ b/src/c/imap/CIMAPBaseOperation.h @@ -0,0 +1,56 @@ +#ifndef MAILCORE_CIMAP_BASE_OPERATION_H +#define MAILCORE_CIMAP_BASE_OPERATION_H + +#include "COperation.h" + +#ifdef __cplusplus +class CIMAPBaseOperationIMAPCallback; + +namespace mailcore { + class IMAPOperation; +} + +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + typedef void (*CIMAPProgressBlock)(const void* userInfo, unsigned int current, unsigned int maximum); + + typedef struct CIMAPAsyncSession CIMAPAsyncSession; + + struct CIMAPBaseOperation { +#ifdef __cplusplus + mailcore::IMAPOperation* instance; + CIMAPBaseOperationIMAPCallback* _callback; +#else + void* instance; + void* _callback; +#endif + COperation cOperation; + }; + typedef struct CIMAPBaseOperation CIMAPBaseOperation; + + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPBaseOperation) + + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPBaseOperation, ErrorCode, error) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPBaseOperation, bool, interruptCurrentCommand) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPBaseOperation, CIMAPBaseOperation, setProgressBlocks, CIMAPProgressBlock, CIMAPProgressBlock, const void*) + + CMAILCORE_EXPORT void CIMAPBaseOperation_retain(CIMAPBaseOperation operation) + CF_SWIFT_NAME(CIMAPBaseOperation.retain(self:)); + + CMAILCORE_EXPORT void CIMAPBaseOperation_release(CIMAPBaseOperation operation) + CF_SWIFT_NAME(CIMAPBaseOperation.release(self:)); + + CMAILCORE_EXPORT int CIMAPBaseOperation_retainCount(CIMAPBaseOperation self) + CF_SWIFT_NAME(CIMAPBaseOperation.retainCount(self:)); + +#ifdef __cplusplus +} + +CIMAPBaseOperation CIMAPBaseOperation_new(mailcore::IMAPOperation* operation); +#endif + +#endif diff --git a/src/c/imap/CIMAPCapabilityOperation.cpp b/src/c/imap/CIMAPCapabilityOperation.cpp new file mode 100644 index 000000000..7957fdc17 --- /dev/null +++ b/src/c/imap/CIMAPCapabilityOperation.cpp @@ -0,0 +1,10 @@ +#include "CIMAPCapabilityOperation.h" +#include "CBase+Private.h" +#include + +#define nativeType mailcore::IMAPCapabilityOperation +#define structName CIMAPCapabilityOperation + +C_SYNTHESIZE_CONSTRUCTOR() +C_SYNTHESIZE_COBJECT_CAST() +C_SYNTHESIZE_FUNC_WITH_OBJ(CIndexSet, capabilities) diff --git a/src/c/imap/CIMAPCapabilityOperation.h b/src/c/imap/CIMAPCapabilityOperation.h new file mode 100644 index 000000000..819c6e7cd --- /dev/null +++ b/src/c/imap/CIMAPCapabilityOperation.h @@ -0,0 +1,24 @@ +#ifndef CIMAPCapabilityOperation_hpp +#define CIMAPCapabilityOperation_hpp + +#include "CIMAPBaseOperation.h" +#include "CIndexSet.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPCapabilityOperation; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPCapabilityOperation, mailcore::IMAPCapabilityOperation) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPCapabilityOperation) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPCapabilityOperation, CIndexSet, capabilities) + +#ifdef __cplusplus +} +#endif + +#endif /* CIMAPCapabilityOperation_hpp */ diff --git a/src/c/imap/CIMAPCheckAccountOperation.cpp b/src/c/imap/CIMAPCheckAccountOperation.cpp new file mode 100644 index 000000000..af1cca0a1 --- /dev/null +++ b/src/c/imap/CIMAPCheckAccountOperation.cpp @@ -0,0 +1,13 @@ +#include "CIMAPCheckAccountOperation.h" +#include "CBase+Private.h" +#include +#include "CData.h" + +#define nativeType mailcore::IMAPCheckAccountOperation +#define structName CIMAPCheckAccountOperation + +C_SYNTHESIZE_CONSTRUCTOR() +C_SYNTHESIZE_COBJECT_CAST() + +C_SYNTHESIZE_FUNC_WITH_OBJ(MailCoreString, loginResponse) +C_SYNTHESIZE_FUNC_WITH_OBJ(CData, loginUnparsedResponseData) diff --git a/src/c/imap/CIMAPCheckAccountOperation.h b/src/c/imap/CIMAPCheckAccountOperation.h new file mode 100644 index 000000000..c43da5513 --- /dev/null +++ b/src/c/imap/CIMAPCheckAccountOperation.h @@ -0,0 +1,27 @@ +#ifndef CIMAPCheckAccountOperation_hpp +#define CIMAPCheckAccountOperation_hpp + +#include "CIMAPBaseOperation.h" +#include "CBase.h" +#include "MailCoreString.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPCheckAccountOperation; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPCheckAccountOperation, mailcore::IMAPCheckAccountOperation) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPCheckAccountOperation) + + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPCheckAccountOperation, MailCoreString, loginResponse) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPCheckAccountOperation, CData, loginUnparsedResponseData) + +#ifdef __cplusplus +} +#endif + +#endif /* CIMAPCheckAccountOperation_hpp */ diff --git a/src/c/imap/CIMAPCopyMessagesOperation.cpp b/src/c/imap/CIMAPCopyMessagesOperation.cpp new file mode 100644 index 000000000..534acf5cf --- /dev/null +++ b/src/c/imap/CIMAPCopyMessagesOperation.cpp @@ -0,0 +1,10 @@ +#include "CIMAPCopyMessagesOperation.h" +#include "CBase+Private.h" +#include + +#define nativeType mailcore::IMAPCopyMessagesOperation +#define structName CIMAPCopyMessagesOperation + +C_SYNTHESIZE_CONSTRUCTOR() +C_SYNTHESIZE_COBJECT_CAST() +C_SYNTHESIZE_FUNC_WITH_OBJ(CDictionary, uidMapping) diff --git a/src/c/imap/CIMAPCopyMessagesOperation.h b/src/c/imap/CIMAPCopyMessagesOperation.h new file mode 100644 index 000000000..58cfa1f03 --- /dev/null +++ b/src/c/imap/CIMAPCopyMessagesOperation.h @@ -0,0 +1,24 @@ +#ifndef MAILCORE_CIMAP_COPY_MESSAGES_OPERATION_H +#define MAILCORE_CIMAP_COPY_MESSAGES_OPERATION_H + +#include "CIMAPBaseOperation.h" +#include "CDictionary.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPCopyMessagesOperation; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPCopyMessagesOperation, mailcore::IMAPCopyMessagesOperation) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPCopyMessagesOperation) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPCopyMessagesOperation, CDictionary, uidMapping) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/c/imap/CIMAPCustomCommandOperation.cpp b/src/c/imap/CIMAPCustomCommandOperation.cpp new file mode 100644 index 000000000..ef2324ae0 --- /dev/null +++ b/src/c/imap/CIMAPCustomCommandOperation.cpp @@ -0,0 +1,11 @@ +#include "CIMAPCustomCommandOperation.h" +#include "CBase+Private.h" +#include + +#define nativeType mailcore::IMAPCustomCommandOperation +#define structName CIMAPCustomCommandOperation + +C_SYNTHESIZE_CONSTRUCTOR() +C_SYNTHESIZE_COBJECT_CAST() +C_SYNTHESIZE_FUNC_WITH_OBJ(MailCoreString, response) + diff --git a/src/c/imap/CIMAPCustomCommandOperation.h b/src/c/imap/CIMAPCustomCommandOperation.h new file mode 100644 index 000000000..c55c342e4 --- /dev/null +++ b/src/c/imap/CIMAPCustomCommandOperation.h @@ -0,0 +1,25 @@ +#ifndef CIMAPCustomCommandOperation_hpp +#define CIMAPCustomCommandOperation_hpp + +#include "CIMAPBaseOperation.h" +#include "CBase.h" +#include "MailCoreString.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPCustomCommandOperation; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPCustomCommandOperation, mailcore::IMAPCustomCommandOperation) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPCustomCommandOperation) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPCustomCommandOperation, MailCoreString, response) + +#ifdef __cplusplus +} +#endif + +#endif /* CIMAPCustomCommandOperation_hpp */ diff --git a/src/c/imap/CIMAPFetchContentOperation.cpp b/src/c/imap/CIMAPFetchContentOperation.cpp new file mode 100644 index 000000000..5ab1431ea --- /dev/null +++ b/src/c/imap/CIMAPFetchContentOperation.cpp @@ -0,0 +1,10 @@ +#include "CIMAPFetchContentOperation.h" +#include "CBase+Private.h" +#include + +#define nativeType mailcore::IMAPFetchContentOperation +#define structName CIMAPFetchContentOperation + +C_SYNTHESIZE_CONSTRUCTOR() +C_SYNTHESIZE_COBJECT_CAST() +C_SYNTHESIZE_FUNC_WITH_OBJ(CData, data) diff --git a/src/c/imap/CIMAPFetchContentOperation.h b/src/c/imap/CIMAPFetchContentOperation.h new file mode 100644 index 000000000..b6ca13c7d --- /dev/null +++ b/src/c/imap/CIMAPFetchContentOperation.h @@ -0,0 +1,24 @@ +#ifndef MAILCORE_CIMAP_FETCH_CONTENT_OPERATION_H +#define MAILCORE_CIMAP_FETCH_CONTENT_OPERATION_H + +#include "CIMAPBaseOperation.h" +#include "CData.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPFetchContentOperation; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPFetchContentOperation, mailcore::IMAPFetchContentOperation) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPFetchContentOperation) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPFetchContentOperation, CData, data) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/c/imap/CIMAPFetchContentToFileOperation.cpp b/src/c/imap/CIMAPFetchContentToFileOperation.cpp new file mode 100644 index 000000000..8431069ed --- /dev/null +++ b/src/c/imap/CIMAPFetchContentToFileOperation.cpp @@ -0,0 +1,13 @@ +#include "CIMAPFetchContentToFileOperation.h" +#include "CBase+Private.h" +#include + +#define nativeType mailcore::IMAPFetchContentToFileOperation +#define structName CIMAPFetchContentToFileOperation + +C_SYNTHESIZE_CONSTRUCTOR() +C_SYNTHESIZE_COBJECT_CAST() + +C_SYNTHESIZE_SCALAR(bool, bool, setLoadingByChunksEnabled, isLoadingByChunksEnabled) +C_SYNTHESIZE_SCALAR(uint32_t, uint32_t, setChunksSize, chunksSize) +C_SYNTHESIZE_SCALAR(uint32_t, uint32_t, setEstimatedSize, estimatedSize) diff --git a/src/c/imap/CIMAPFetchContentToFileOperation.h b/src/c/imap/CIMAPFetchContentToFileOperation.h new file mode 100644 index 000000000..25e657770 --- /dev/null +++ b/src/c/imap/CIMAPFetchContentToFileOperation.h @@ -0,0 +1,28 @@ +#ifndef CIMAPFetchContentToFileOperation_hpp +#define CIMAPFetchContentToFileOperation_hpp + +#include "CIMAPBaseOperation.h" +#include "CBase.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPFetchContentToFileOperation; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPFetchContentToFileOperation, mailcore::IMAPFetchContentToFileOperation) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPFetchContentToFileOperation) + + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPFetchContentToFileOperation, bool, isLoadingByChunksEnabled, setLoadingByChunksEnabled) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPFetchContentToFileOperation, uint32_t, chunksSize, setChunksSize) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPFetchContentToFileOperation, uint32_t, estimatedSize, setEstimatedSize) + +#ifdef __cplusplus +} +#endif + + +#endif /* CIMAPFetchContentToFileOperation_hpp */ diff --git a/src/c/imap/CIMAPFetchFoldersOperation.cpp b/src/c/imap/CIMAPFetchFoldersOperation.cpp new file mode 100644 index 000000000..9e21cc427 --- /dev/null +++ b/src/c/imap/CIMAPFetchFoldersOperation.cpp @@ -0,0 +1,11 @@ +#include "CIMAPFetchFoldersOperation.h" +#include "CBase+Private.h" +#include + +#define nativeType mailcore::IMAPFetchFoldersOperation +#define structName CIMAPFetchFoldersOperation + +C_SYNTHESIZE_CONSTRUCTOR() +C_SYNTHESIZE_COBJECT_CAST() + +C_SYNTHESIZE_FUNC_WITH_OBJ(CArray, folders) diff --git a/src/c/imap/CIMAPFetchFoldersOperation.h b/src/c/imap/CIMAPFetchFoldersOperation.h new file mode 100644 index 000000000..b44069e1f --- /dev/null +++ b/src/c/imap/CIMAPFetchFoldersOperation.h @@ -0,0 +1,32 @@ +// +// CIMAPFetchFoldersOperation.hpp +// mailcore2 +// +// Created by Andrew on 12/5/16. +// Copyright © 2016 MailCore. All rights reserved. +// + +#ifndef CIMAPFetchFoldersOperation_hpp +#define CIMAPFetchFoldersOperation_hpp + +#include "CIMAPBaseOperation.h" +#include "CArray.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPFetchFoldersOperation; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPFetchFoldersOperation, mailcore::IMAPFetchFoldersOperation) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPFetchFoldersOperation) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPFetchFoldersOperation, CArray, folders) + +#ifdef __cplusplus +} +#endif + +#endif /* CIMAPFetchFoldersOperation_hpp */ diff --git a/src/c/imap/CIMAPFetchMessagesOperation.cpp b/src/c/imap/CIMAPFetchMessagesOperation.cpp new file mode 100644 index 000000000..d7e3b900e --- /dev/null +++ b/src/c/imap/CIMAPFetchMessagesOperation.cpp @@ -0,0 +1,14 @@ +#include "CIMAPFetchMessagesOperation.h" +#include "CBase+Private.h" +#include + +#define nativeType mailcore::IMAPFetchMessagesOperation +#define structName CIMAPFetchMessagesOperation + +C_SYNTHESIZE_CONSTRUCTOR() +C_SYNTHESIZE_COBJECT_CAST() + +C_SYNTHESIZE_MAILCORE_OBJ(CArray, CArray_new, setExtraHeaders, extraHeaders) + +C_SYNTHESIZE_FUNC_WITH_OBJ(CArray, messages) +C_SYNTHESIZE_FUNC_WITH_OBJ(CIndexSet, vanishedMessages) diff --git a/src/c/imap/CIMAPFetchMessagesOperation.h b/src/c/imap/CIMAPFetchMessagesOperation.h new file mode 100644 index 000000000..1a6decaab --- /dev/null +++ b/src/c/imap/CIMAPFetchMessagesOperation.h @@ -0,0 +1,29 @@ +#ifndef MAILCORE_CIMAP_FETCH_MESSAGES_OPERATION_H +#define MAILCORE_CIMAP_FETCH_MESSAGES_OPERATION_H + +#include "CIMAPBaseOperation.h" +#include "CArray.h" +#include "CIndexSet.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPFetchMessagesOperation; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPFetchMessagesOperation, mailcore::IMAPFetchMessagesOperation) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPFetchMessagesOperation) + + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPFetchMessagesOperation, CArray, extraHeaders, setExtraHeaders) + + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPFetchMessagesOperation, CArray, messages) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPFetchMessagesOperation, CIndexSet, vanishedMessages) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/c/imap/CIMAPFetchNamespaceOperation.cpp b/src/c/imap/CIMAPFetchNamespaceOperation.cpp new file mode 100644 index 000000000..2597041f5 --- /dev/null +++ b/src/c/imap/CIMAPFetchNamespaceOperation.cpp @@ -0,0 +1,10 @@ +#include "CIMAPFetchNamespaceOperation.h" +#include "CBase+Private.h" +#include + +#define nativeType mailcore::IMAPFetchNamespaceOperation +#define structName CIMAPFetchNamespaceOperation + +C_SYNTHESIZE_CONSTRUCTOR() +C_SYNTHESIZE_COBJECT_CAST() +C_SYNTHESIZE_FUNC_WITH_OBJ(CDictionary, namespaces) diff --git a/src/c/imap/CIMAPFetchNamespaceOperation.h b/src/c/imap/CIMAPFetchNamespaceOperation.h new file mode 100644 index 000000000..8b94b5699 --- /dev/null +++ b/src/c/imap/CIMAPFetchNamespaceOperation.h @@ -0,0 +1,24 @@ +#ifndef CIMAPFetchNamespaceOperation_hpp +#define CIMAPFetchNamespaceOperation_hpp + +#include "CIMAPBaseOperation.h" +#include "CDictionary.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPFetchNamespaceOperation; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPFetchNamespaceOperation, mailcore::IMAPFetchNamespaceOperation) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPFetchNamespaceOperation) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPFetchNamespaceOperation, CDictionary, namespaces) + +#ifdef __cplusplus +} +#endif + +#endif /* CIMAPFetchNamespaceOperation_hpp */ diff --git a/src/c/imap/CIMAPFetchParsedContentOperation.cpp b/src/c/imap/CIMAPFetchParsedContentOperation.cpp new file mode 100644 index 000000000..58702ecef --- /dev/null +++ b/src/c/imap/CIMAPFetchParsedContentOperation.cpp @@ -0,0 +1,10 @@ +#include "CIMAPFetchParsedContentOperation.h" +#include "CBase+Private.h" +#include + +#define nativeType mailcore::IMAPFetchParsedContentOperation +#define structName CIMAPFetchParsedContentOperation + +C_SYNTHESIZE_CONSTRUCTOR() +C_SYNTHESIZE_COBJECT_CAST() +C_SYNTHESIZE_FUNC_WITH_OBJ(CMessageParser, parser) diff --git a/src/c/imap/CIMAPFetchParsedContentOperation.h b/src/c/imap/CIMAPFetchParsedContentOperation.h new file mode 100644 index 000000000..ab8d47678 --- /dev/null +++ b/src/c/imap/CIMAPFetchParsedContentOperation.h @@ -0,0 +1,24 @@ +#ifndef CIMAPFetchParsedContentOperation_hpp +#define CIMAPFetchParsedContentOperation_hpp + +#include "CIMAPBaseOperation.h" +#include "CMessageParser.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPFetchParsedContentOperation; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPFetchParsedContentOperation, mailcore::IMAPFetchParsedContentOperation) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPFetchParsedContentOperation) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPFetchParsedContentOperation, CMessageParser, parser) + +#ifdef __cplusplus +} +#endif + +#endif /* CIMAPFetchParsedContentOperation_hpp */ diff --git a/src/c/imap/CIMAPFolder.cpp b/src/c/imap/CIMAPFolder.cpp new file mode 100644 index 000000000..79cc61680 --- /dev/null +++ b/src/c/imap/CIMAPFolder.cpp @@ -0,0 +1,14 @@ +#include "CIMAPFolder.h" +#include "CBase+Private.h" + +#include + +#define nativeType mailcore::IMAPFolder +#define structName CIMAPFolder + +C_SYNTHESIZE_CONSTRUCTOR() +C_SYNTHESIZE_COBJECT_CAST() + +C_SYNTHESIZE_STRING(setPath, path); +C_SYNTHESIZE_CHAR(setDelimiter, delimiter); +C_SYNTHESIZE_ENUM(CIMAPFolderFlag, mailcore::IMAPFolderFlag, setFlags, flags) diff --git a/src/c/imap/CIMAPFolder.h b/src/c/imap/CIMAPFolder.h new file mode 100644 index 000000000..19ba13fcf --- /dev/null +++ b/src/c/imap/CIMAPFolder.h @@ -0,0 +1,32 @@ +#ifndef CIMAPFolder_h +#define CIMAPFolder_h + +#include + +#include "CBase.h" +#include "CMessageConstants.h" +#include "CObject.h" + +#include "MailCoreString.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPFolder; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPFolder, mailcore::IMAPFolder) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPFolder) + + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPFolder, MailCoreString, path, setPath) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPFolder, char, delimiter, setDelimiter) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPFolder, CIMAPFolderFlag, flags, setFlags) + +#ifdef __cplusplus +} +#endif + +#endif /* CIMAPFolder_h */ diff --git a/src/c/imap/CIMAPFolderInfo.cpp b/src/c/imap/CIMAPFolderInfo.cpp new file mode 100644 index 000000000..cede4b273 --- /dev/null +++ b/src/c/imap/CIMAPFolderInfo.cpp @@ -0,0 +1,17 @@ +#include "CIMAPFolderInfo.h" +#include "CBase+Private.h" + +#include + +#define nativeType mailcore::IMAPFolderInfo +#define structName CIMAPFolderInfo + +C_SYNTHESIZE_CONSTRUCTOR() +C_SYNTHESIZE_COBJECT_CAST() + +C_SYNTHESIZE_SCALAR(uint32_t, uint32_t, setUidNext, uidNext) +C_SYNTHESIZE_SCALAR(uint32_t, uint32_t, setUidValidity, uidValidity) +C_SYNTHESIZE_SCALAR(uint64_t, uint64_t, setModSequenceValue, modSequenceValue) +C_SYNTHESIZE_SCALAR(int, int, setMessageCount, messageCount) +C_SYNTHESIZE_SCALAR(uint32_t, uint32_t, setFirstUnseenUid, firstUnseenUid) +C_SYNTHESIZE_BOOL(setAllowsNewPermanentFlags, allowsNewPermanentFlags); diff --git a/src/c/imap/CIMAPFolderInfo.h b/src/c/imap/CIMAPFolderInfo.h new file mode 100644 index 000000000..d863f5726 --- /dev/null +++ b/src/c/imap/CIMAPFolderInfo.h @@ -0,0 +1,34 @@ +#ifndef CIMAPFolderInfo_h +#define CIMAPFolderInfo_h + +#include "stdint.h" +#include "CBase.h" +#include "CMessageConstants.h" +#include "CObject.h" +#include "CData.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPFolderInfo; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPFolderInfo, mailcore::IMAPFolderInfo) + + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPFolderInfo) + + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPFolderInfo, uint32_t, uidNext, setUidNext) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPFolderInfo, uint32_t, uidValidity, setUidValidity) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPFolderInfo, uint64_t, modSequenceValue, setModSequenceValue) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPFolderInfo, int, messageCount, setMessageCount) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPFolderInfo, uint32_t, firstUnseenUid, setFirstUnseenUid) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPFolderInfo, bool, allowsNewPermanentFlags, setAllowsNewPermanentFlags) + +#ifdef __cplusplus +} +#endif + +#endif /* CIMAPFolderInfo_h */ diff --git a/src/c/imap/CIMAPFolderInfoOperation.cpp b/src/c/imap/CIMAPFolderInfoOperation.cpp new file mode 100644 index 000000000..25c9e0d21 --- /dev/null +++ b/src/c/imap/CIMAPFolderInfoOperation.cpp @@ -0,0 +1,11 @@ +#include "CIMAPFolderInfoOperation.h" +#include "CBase+Private.h" +#include + +#define nativeType mailcore::IMAPFolderInfoOperation +#define structName CIMAPFolderInfoOperation + +C_SYNTHESIZE_CONSTRUCTOR() +C_SYNTHESIZE_COBJECT_CAST() + +C_SYNTHESIZE_FUNC_WITH_OBJ(CIMAPFolderInfo, info) diff --git a/src/c/imap/CIMAPFolderInfoOperation.h b/src/c/imap/CIMAPFolderInfoOperation.h new file mode 100644 index 000000000..1dba3ae03 --- /dev/null +++ b/src/c/imap/CIMAPFolderInfoOperation.h @@ -0,0 +1,26 @@ +#ifndef MAILCORE_CIMAP_FOLDER_INFO_OPERATION_H +#define MAILCORE_CIMAP_FOLDER_INFO_OPERATION_H + +#include "CBase.h" +#include "CIMAPBaseOperation.h" +#include "CIMAPFolderInfo.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPFolderInfoOperation; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPFolderInfoOperation, mailcore::IMAPFolderInfoOperation) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPFolderInfoOperation) + + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPFolderInfoOperation, CIMAPFolderInfo, info) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/c/imap/CIMAPFolderStatus.cpp b/src/c/imap/CIMAPFolderStatus.cpp new file mode 100644 index 000000000..d58502cc5 --- /dev/null +++ b/src/c/imap/CIMAPFolderStatus.cpp @@ -0,0 +1,17 @@ +#include "CIMAPFolderStatus.h" +#include "CBase+Private.h" + +#include + +#define nativeType mailcore::IMAPFolderStatus +#define structName CIMAPFolderStatus + +C_SYNTHESIZE_CONSTRUCTOR() +C_SYNTHESIZE_COBJECT_CAST() + +C_SYNTHESIZE_SCALAR(uint32_t, uint32_t, setUidNext, uidNext) +C_SYNTHESIZE_SCALAR(uint32_t, uint32_t, setUidValidity, uidValidity) +C_SYNTHESIZE_SCALAR(uint32_t, uint32_t, setRecentCount, recentCount) +C_SYNTHESIZE_SCALAR(uint32_t, uint32_t, setUnseenCount, unseenCount) +C_SYNTHESIZE_SCALAR(uint32_t, uint32_t, setMessageCount, messageCount) +C_SYNTHESIZE_SCALAR(uint64_t, uint64_t, setHighestModSeqValue, highestModSeqValue) diff --git a/src/c/imap/CIMAPFolderStatus.h b/src/c/imap/CIMAPFolderStatus.h new file mode 100644 index 000000000..e8057d4f2 --- /dev/null +++ b/src/c/imap/CIMAPFolderStatus.h @@ -0,0 +1,34 @@ +#ifndef CIMAPFolderStatus_h +#define CIMAPFolderStatus_h + +#include "stdint.h" +#include "CBase.h" +#include "CMessageConstants.h" +#include "CObject.h" +#include "CData.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPFolderStatus; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPFolderStatus, mailcore::IMAPFolderStatus) + + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPFolderStatus) + + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPFolderStatus, uint32_t, uidNext, setUidNext) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPFolderStatus, uint32_t, uidValidity, setUidValidity) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPFolderStatus, uint32_t, recentCount, setRecentCount) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPFolderStatus, uint32_t, unseenCount, setUnseenCount) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPFolderStatus, uint32_t, messageCount, setMessageCount) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPFolderStatus, uint64_t, highestModSeqValue, setHighestModSeqValue) + +#ifdef __cplusplus +} +#endif + +#endif /* CIMAPFolderStatus_h */ diff --git a/src/c/imap/CIMAPFolderStatusOperation.cpp b/src/c/imap/CIMAPFolderStatusOperation.cpp new file mode 100644 index 000000000..bbca02633 --- /dev/null +++ b/src/c/imap/CIMAPFolderStatusOperation.cpp @@ -0,0 +1,11 @@ +#include "CIMAPFolderStatusOperation.h" +#include "CBase+Private.h" +#include + +#define nativeType mailcore::IMAPFolderStatusOperation +#define structName CIMAPFolderStatusOperation + +C_SYNTHESIZE_CONSTRUCTOR() +C_SYNTHESIZE_COBJECT_CAST() + +C_SYNTHESIZE_FUNC_WITH_OBJ(CIMAPFolderStatus, status) diff --git a/src/c/imap/CIMAPFolderStatusOperation.h b/src/c/imap/CIMAPFolderStatusOperation.h new file mode 100644 index 000000000..5e113472b --- /dev/null +++ b/src/c/imap/CIMAPFolderStatusOperation.h @@ -0,0 +1,25 @@ +#ifndef MAILCORE_CIMAP_FOLDER_STATUS_OPERATION_H +#define MAILCORE_CIMAP_FOLDER_STATUS_OPERATION_H + +#include "CBase.h" +#include "CIMAPBaseOperation.h" +#include "CIMAPFolderStatus.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPFolderStatusOperation; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPFolderStatusOperation, mailcore::IMAPFolderStatusOperation) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPFolderStatusOperation) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPFolderStatusOperation, CIMAPFolderStatus, status) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/c/imap/CIMAPIdentity.cpp b/src/c/imap/CIMAPIdentity.cpp new file mode 100644 index 000000000..7a9d1d712 --- /dev/null +++ b/src/c/imap/CIMAPIdentity.cpp @@ -0,0 +1,23 @@ +#include "CIMAPIdentity.h" +#include "CBase+Private.h" + +#include + +#define nativeType mailcore::IMAPIdentity +#define structName CIMAPIdentity + +C_SYNTHESIZE_CONSTRUCTOR() +C_SYNTHESIZE_COBJECT_CAST() + +C_SYNTHESIZE_STRING(setVendor, vendor); +C_SYNTHESIZE_STRING(setName, name); +C_SYNTHESIZE_STRING(setVersion, version); + +C_SYNTHESIZE_FUNC_WITH_OBJ(CArray, allInfoKeys) +C_SYNTHESIZE_FUNC_WITH_OBJ(MailCoreString, infoForKey, MailCoreString) +C_SYNTHESIZE_FUNC_WITH_VOID(setInfoForKey, MailCoreString, MailCoreString) +C_SYNTHESIZE_FUNC_WITH_VOID(removeAllInfos) + +CIMAPIdentity CIMAPIdentity_init() { + return CIMAPIdentity_new(new mailcore::IMAPIdentity()); +} diff --git a/src/c/imap/CIMAPIdentity.h b/src/c/imap/CIMAPIdentity.h new file mode 100644 index 000000000..3b6f47e9a --- /dev/null +++ b/src/c/imap/CIMAPIdentity.h @@ -0,0 +1,39 @@ +#ifndef CIMAPIdentity_hpp +#define CIMAPIdentity_hpp + +#include "CBase.h" +#include "CMessageConstants.h" +#include "CObject.h" +#include "CArray.h" + +#include "MailCoreString.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPIdentity; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPIdentity, mailcore::IMAPIdentity) + + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPIdentity) + + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPIdentity, MailCoreString, vendor, setVendor) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPIdentity, MailCoreString, name, setName) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPIdentity, MailCoreString, version, setVersion) + + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPIdentity, CArray, allInfoKeys) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPIdentity, MailCoreString, infoForKey, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPIdentity, void, setInfoForKey, MailCoreString, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPIdentity, void, removeAllInfos) + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPIdentity, CIMAPIdentity, init) + +#ifdef __cplusplus +} +#endif + +#endif /* CIMAPIdentity_hpp */ diff --git a/src/c/imap/CIMAPIdentityOperation.cpp b/src/c/imap/CIMAPIdentityOperation.cpp new file mode 100644 index 000000000..b1e0b36f7 --- /dev/null +++ b/src/c/imap/CIMAPIdentityOperation.cpp @@ -0,0 +1,10 @@ +#include "CIMAPIdentityOperation.h" +#include "CBase+Private.h" +#include + +#define nativeType mailcore::IMAPIdentityOperation +#define structName CIMAPIdentityOperation + +C_SYNTHESIZE_CONSTRUCTOR() +C_SYNTHESIZE_COBJECT_CAST() +C_SYNTHESIZE_FUNC_WITH_OBJ(CIMAPIdentity, serverIdentity) diff --git a/src/c/imap/CIMAPIdentityOperation.h b/src/c/imap/CIMAPIdentityOperation.h new file mode 100644 index 000000000..b5753fe2d --- /dev/null +++ b/src/c/imap/CIMAPIdentityOperation.h @@ -0,0 +1,24 @@ +#ifndef CIMAPIdentityOperation_hpp +#define CIMAPIdentityOperation_hpp + +#include "CIMAPBaseOperation.h" +#include "CIMAPIdentity.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPIdentityOperation; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPIdentityOperation, mailcore::IMAPIdentityOperation) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPIdentityOperation) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPIdentityOperation, CIMAPIdentity, serverIdentity) + +#ifdef __cplusplus +} +#endif + +#endif /* CIMAPIdentityOperation_hpp */ diff --git a/src/c/imap/CIMAPIdleOperation.cpp b/src/c/imap/CIMAPIdleOperation.cpp new file mode 100644 index 000000000..1e9dbd81a --- /dev/null +++ b/src/c/imap/CIMAPIdleOperation.cpp @@ -0,0 +1,10 @@ +#include "CIMAPIdleOperation.h" +#include +#include "CBase+Private.h" + +#define nativeType mailcore::IMAPIdleOperation +#define structName CIMAPIdleOperation + +C_SYNTHESIZE_CONSTRUCTOR() +C_SYNTHESIZE_COBJECT_CAST() +C_SYNTHESIZE_FUNC_WITH_VOID(interruptIdle) diff --git a/src/c/imap/CIMAPIdleOperation.h b/src/c/imap/CIMAPIdleOperation.h new file mode 100644 index 000000000..c771fcf5a --- /dev/null +++ b/src/c/imap/CIMAPIdleOperation.h @@ -0,0 +1,25 @@ +#ifndef CIMAPIdleOperation_h +#define CIMAPIdleOperation_h + +#include "CBase.h" +#include "CMessageConstants.h" +#include "CIMAPBaseOperation.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPIdleOperation; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPIdleOperation, mailcore::IMAPIdleOperation) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPIdleOperation) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPIdleOperation, void, interruptIdle) + +#ifdef __cplusplus +} +#endif + +#endif /* CIMAPIdleOperation_h */ diff --git a/src/c/imap/CIMAPMessage.cpp b/src/c/imap/CIMAPMessage.cpp new file mode 100644 index 000000000..d347bae89 --- /dev/null +++ b/src/c/imap/CIMAPMessage.cpp @@ -0,0 +1,33 @@ +#include "CIMAPMessage.h" +#include "CBase+Private.h" + +#include +#include "CAbstractMessageRendererCallbackWrapper.h" + +#define nativeType mailcore::IMAPMessage +#define structName CIMAPMessage + +C_SYNTHESIZE_CONSTRUCTOR() + +C_SYNTHESIZE_SCALAR(uint32_t, uint32_t, setUid, uid) +C_SYNTHESIZE_SCALAR(uint32_t, uint32_t, setSequenceNumber, sequenceNumber) +C_SYNTHESIZE_SCALAR(uint32_t, uint32_t, setSize, size) +C_SYNTHESIZE_ENUM(CMessageFlag, mailcore::MessageFlag, setFlags, flags) +C_SYNTHESIZE_ENUM(CMessageFlag, mailcore::MessageFlag, setOriginalFlags, originalFlags) +C_SYNTHESIZE_ARRAY(setCustomFlags, customFlags) +C_SYNTHESIZE_SCALAR(uint64_t, uint64_t, setModSeqValue, modSeqValue) +C_SYNTHESIZE_MAILCORE_OBJ(CAbstractPart, CAbstractPart_new, setMainPart, mainPart) +C_SYNTHESIZE_ARRAY(setGmailLabels, gmailLabels) +C_SYNTHESIZE_SCALAR(uint64_t, uint64_t, setGmailMessageID, gmailMessageID) +C_SYNTHESIZE_SCALAR(uint64_t, uint64_t, setGmailThreadID, gmailThreadID) +C_SYNTHESIZE_COBJECT_CAST() + +C_SYNTHESIZE_FUNC_WITH_OBJ(CAbstractPart, partForPartID, MailCoreString) + +MailCoreString CIMAPMessage_htmlRendering(struct CIMAPMessage self, MailCoreString folder, CAbstractMessageRendererCallback rendererCallback) { + return MailCoreString_new(self.instance->htmlRendering(folder.instance, static_cast(rendererCallback.callbackBridge), static_cast(rendererCallback.callbackBridge))); +} + +CIMAPMessage CIMAPMessage_init() { + return CIMAPMessage_new(new mailcore::IMAPMessage()); +} diff --git a/src/c/imap/CIMAPMessage.h b/src/c/imap/CIMAPMessage.h new file mode 100644 index 000000000..44d3b5b56 --- /dev/null +++ b/src/c/imap/CIMAPMessage.h @@ -0,0 +1,48 @@ +#ifndef CIMAPMessage_h +#define CIMAPMessage_h + +#include "stdint.h" + +#include "CBase.h" +#include "CMessageConstants.h" +#include "CAbstractPart.h" +#include "CAbstractMessage.h" +#include "CArray.h" +#include "CAbstractMessageRendererCallback.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPMessage; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPMessage, mailcore::IMAPMessage) + + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPMessage) + + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPMessage, uint32_t, uid, setUid) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPMessage, uint32_t, sequenceNumber, setSequenceNumber) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPMessage, uint32_t, size, setSize) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPMessage, CMessageFlag, flags, setFlags) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPMessage, CMessageFlag, originalFlags, setOriginalFlags) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPMessage, CArray, customFlags, setCustomFlags) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPMessage, uint64_t, modSeqValue, setModSeqValue) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPMessage, CAbstractPart, mainPart, setMainPart) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPMessage, CArray, gmailLabels, setGmailLabels) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPMessage, uint64_t, gmailMessageID, setGmailMessageID) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPMessage, uint64_t, gmailThreadID, setGmailThreadID) + + + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPMessage, CAbstractPart, partForPartID, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPMessage, MailCoreString, htmlRendering, MailCoreString, CAbstractMessageRendererCallback) + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPMessage, CIMAPMessage, init) + +#ifdef __cplusplus +} +#endif + +#endif /* CIMAPMessage_h */ diff --git a/src/c/imap/CIMAPMessagePart.cpp b/src/c/imap/CIMAPMessagePart.cpp new file mode 100644 index 000000000..6995601b2 --- /dev/null +++ b/src/c/imap/CIMAPMessagePart.cpp @@ -0,0 +1,16 @@ +#include "CIMAPMessagePart.h" +#include "CBase+Private.h" + +#include + +#define nativeType mailcore::IMAPMessagePart +#define structName CIMAPMessagePart + +C_SYNTHESIZE_CONSTRUCTOR() +C_SYNTHESIZE_COBJECT_CAST() + +C_SYNTHESIZE_STRING(setPartID, partID) + +CIMAPMessagePart CIMAPMessagePart_init(){ + return CIMAPMessagePart_new(new mailcore::IMAPMessagePart()); +} diff --git a/src/c/imap/CIMAPMessagePart.h b/src/c/imap/CIMAPMessagePart.h new file mode 100644 index 000000000..9ebc56d1b --- /dev/null +++ b/src/c/imap/CIMAPMessagePart.h @@ -0,0 +1,26 @@ +#ifndef CIMAPMessagePart_h +#define CIMAPMessagePart_h + +#include "CBase.h" +#include "CAbstractMessagePart.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPMessagePart; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPMessagePart, mailcore::IMAPMessagePart) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPMessagePart) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPMessagePart, MailCoreString, partID, setPartID) + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPMessagePart, CIMAPMessagePart, init) + +#ifdef __cplusplus +} +#endif + +#endif /* CIMAPMessagePart_h */ diff --git a/src/c/imap/CIMAPMessageRenderingOperation.cpp b/src/c/imap/CIMAPMessageRenderingOperation.cpp new file mode 100644 index 000000000..992b65cb9 --- /dev/null +++ b/src/c/imap/CIMAPMessageRenderingOperation.cpp @@ -0,0 +1,10 @@ +#include "CIMAPMessageRenderingOperation.h" +#include "CBase+Private.h" +#include + +#define nativeType mailcore::IMAPMessageRenderingOperation +#define structName CIMAPMessageRenderingOperation + +C_SYNTHESIZE_CONSTRUCTOR() +C_SYNTHESIZE_COBJECT_CAST() +C_SYNTHESIZE_FUNC_WITH_OBJ(MailCoreString, result) diff --git a/src/c/imap/CIMAPMessageRenderingOperation.h b/src/c/imap/CIMAPMessageRenderingOperation.h new file mode 100644 index 000000000..a7063e815 --- /dev/null +++ b/src/c/imap/CIMAPMessageRenderingOperation.h @@ -0,0 +1,24 @@ +#ifndef CIMAPMessageRenderingOperation_hpp +#define CIMAPMessageRenderingOperation_hpp + +#include "CIMAPBaseOperation.h" +#include "MailCoreString.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPMessageRenderingOperation; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPMessageRenderingOperation, mailcore::IMAPMessageRenderingOperation) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPMessageRenderingOperation) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPMessageRenderingOperation, MailCoreString, result) + +#ifdef __cplusplus +} +#endif + +#endif /* CIMAPMessageRenderingOperation_hpp */ diff --git a/src/c/imap/CIMAPMoveMessagesOperation.cpp b/src/c/imap/CIMAPMoveMessagesOperation.cpp new file mode 100644 index 000000000..556ef80ed --- /dev/null +++ b/src/c/imap/CIMAPMoveMessagesOperation.cpp @@ -0,0 +1,10 @@ +#include "CIMAPMoveMessagesOperation.h" +#include "CBase+Private.h" +#include + +#define nativeType mailcore::IMAPMoveMessagesOperation +#define structName CIMAPMoveMessagesOperation + +C_SYNTHESIZE_CONSTRUCTOR() +C_SYNTHESIZE_COBJECT_CAST() +C_SYNTHESIZE_FUNC_WITH_OBJ(CDictionary, uidMapping) diff --git a/src/c/imap/CIMAPMoveMessagesOperation.h b/src/c/imap/CIMAPMoveMessagesOperation.h new file mode 100644 index 000000000..7413f27c2 --- /dev/null +++ b/src/c/imap/CIMAPMoveMessagesOperation.h @@ -0,0 +1,24 @@ +#ifndef CIMAPMoveMessagesOperation_hpp +#define CIMAPMoveMessagesOperation_hpp + +#include "CIMAPBaseOperation.h" +#include "CDictionary.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPMoveMessagesOperation; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPMoveMessagesOperation, mailcore::IMAPMoveMessagesOperation) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPMoveMessagesOperation) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPMoveMessagesOperation, CDictionary, uidMapping) + +#ifdef __cplusplus +} +#endif + +#endif /* CIMAPMoveMessagesOperation_hpp */ diff --git a/src/c/imap/CIMAPMultipart.cpp b/src/c/imap/CIMAPMultipart.cpp new file mode 100644 index 000000000..cda394dc6 --- /dev/null +++ b/src/c/imap/CIMAPMultipart.cpp @@ -0,0 +1,16 @@ +#include "CIMAPMultipart.h" +#include + +#include "CBase+Private.h" + +#define nativeType mailcore::IMAPMultipart +#define structName CIMAPMultipart + +C_SYNTHESIZE_CONSTRUCTOR() +C_SYNTHESIZE_COBJECT_CAST() +C_SYNTHESIZE_STRING(setPartID, partID); + +CIMAPMultipart CIMAPMultipart_init() { + return CIMAPMultipart_new(new mailcore::IMAPMultipart()); +} + diff --git a/src/c/imap/CIMAPMultipart.h b/src/c/imap/CIMAPMultipart.h new file mode 100644 index 000000000..f37637eaa --- /dev/null +++ b/src/c/imap/CIMAPMultipart.h @@ -0,0 +1,28 @@ +#ifndef CIMAPMultipart_h +#define CIMAPMultipart_h + +#include "CBase.h" +#include "CAbstractMultipart.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPMultipart; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPMultipart, mailcore::IMAPMultipart) + + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPMultipart) + + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPMultipart, MailCoreString, partID, setPartID) + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPMultipart, CIMAPMultipart, init) + +#ifdef __cplusplus +} +#endif + +#endif /* CIMAPMultipart_h */ diff --git a/src/c/imap/CIMAPNamespace.cpp b/src/c/imap/CIMAPNamespace.cpp new file mode 100644 index 000000000..282e352a1 --- /dev/null +++ b/src/c/imap/CIMAPNamespace.cpp @@ -0,0 +1,24 @@ +#include +#include "CIMAPNamespace.h" +#include "CBase+Private.h" + +#include + +#define nativeType mailcore::IMAPNamespace +#define structName CIMAPNamespace + +C_SYNTHESIZE_CONSTRUCTOR() +C_SYNTHESIZE_COBJECT_CAST() + +CIMAPNamespace CIMAPNamespace_namespaceWithPrefix(MailCoreString prefix, char delimiter) { + return CIMAPNamespace_new(mailcore::IMAPNamespace::namespaceWithPrefix(prefix.instance, delimiter)); +} + +C_SYNTHESIZE_FUNC_WITH_OBJ(MailCoreString, mainPrefix) +C_SYNTHESIZE_FUNC_WITH_SCALAR(char, mainDelimiter) +C_SYNTHESIZE_FUNC_WITH_OBJ(CArray, prefixes) +C_SYNTHESIZE_FUNC_WITH_OBJ(MailCoreString, pathForComponents, CArray) +C_SYNTHESIZE_FUNC_WITH_OBJ(MailCoreString, pathForComponentsAndPrefix, CArray, MailCoreString) +C_SYNTHESIZE_FUNC_WITH_OBJ(CArray, componentsFromPath, MailCoreString) +C_SYNTHESIZE_FUNC_WITH_SCALAR(bool, containsFolderPath, MailCoreString) + diff --git a/src/c/imap/CIMAPNamespace.h b/src/c/imap/CIMAPNamespace.h new file mode 100644 index 000000000..d959f32a0 --- /dev/null +++ b/src/c/imap/CIMAPNamespace.h @@ -0,0 +1,35 @@ +#ifndef MAILCORE_CIMAP_NAMESPACE_H +#define MAILCORE_CIMAP_NAMESPACE_H + +#include "CBase.h" +#include "CArray.h" +#include "MailCoreString.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPNamespace; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPNamespace, mailcore::IMAPNamespace) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPNamespace) + + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPNamespace, MailCoreString, mainPrefix) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPNamespace, char, mainDelimiter) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPNamespace, CArray, prefixes) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPNamespace, MailCoreString, pathForComponents, CArray) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPNamespace, MailCoreString, pathForComponentsAndPrefix, CArray, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPNamespace, CArray, componentsFromPath, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPNamespace, bool, containsFolderPath, MailCoreString) + + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPNamespace, CIMAPNamespace, namespaceWithPrefix, MailCoreString, char) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/c/imap/CIMAPNamespaceItem.cpp b/src/c/imap/CIMAPNamespaceItem.cpp new file mode 100644 index 000000000..a8100ab12 --- /dev/null +++ b/src/c/imap/CIMAPNamespaceItem.cpp @@ -0,0 +1,17 @@ +#include "CIMAPNamespaceItem.h" +#include "CBase+Private.h" + +#include + +#define nativeType mailcore::IMAPNamespaceItem +#define structName CIMAPNamespaceItem + +C_SYNTHESIZE_CONSTRUCTOR() +C_SYNTHESIZE_COBJECT_CAST() + +C_SYNTHESIZE_STRING(setPrefix, prefix); +C_SYNTHESIZE_CHAR(setDelimiter, delimiter); + +C_SYNTHESIZE_FUNC_WITH_OBJ(MailCoreString, pathForComponents, CArray) +C_SYNTHESIZE_FUNC_WITH_OBJ(CArray, componentsForPath, MailCoreString) +C_SYNTHESIZE_FUNC_WITH_SCALAR(bool, containsFolder, MailCoreString) diff --git a/src/c/imap/CIMAPNamespaceItem.h b/src/c/imap/CIMAPNamespaceItem.h new file mode 100644 index 000000000..bdc3a5811 --- /dev/null +++ b/src/c/imap/CIMAPNamespaceItem.h @@ -0,0 +1,33 @@ +#ifndef CIMAPNamespaceItem_h +#define CIMAPNamespaceItem_h + +#include "CBase.h" +#include "CArray.h" +#include "MailCoreString.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPNamespaceItem; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPNamespaceItem, mailcore::IMAPNamespaceItem) + + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPNamespaceItem) + + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPNamespaceItem, MailCoreString, prefix, setPrefix) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPNamespaceItem, char, delimiter, setDelimiter) + + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPNamespaceItem, MailCoreString, pathForComponents, CArray) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPNamespaceItem, CArray, componentsForPath, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPNamespaceItem, bool, containsFolder, MailCoreString) + + +#ifdef __cplusplus +} +#endif + +#endif /* CIMAPNamespaceItem_h */ diff --git a/src/c/imap/CIMAPPart.cpp b/src/c/imap/CIMAPPart.cpp new file mode 100644 index 000000000..a4111668e --- /dev/null +++ b/src/c/imap/CIMAPPart.cpp @@ -0,0 +1,20 @@ +#include "CIMAPPart.h" +#include "CBase+Private.h" + +#include + +#define nativeType mailcore::IMAPPart +#define structName CIMAPPart + +C_SYNTHESIZE_CONSTRUCTOR() +C_SYNTHESIZE_COBJECT_CAST() + +C_SYNTHESIZE_STRING(setPartID, partID) +C_SYNTHESIZE_SCALAR(unsigned int, unsigned int, setSize, size) +C_SYNTHESIZE_ENUM(Encoding, mailcore::Encoding, setEncoding, encoding) + +C_SYNTHESIZE_FUNC_WITH_SCALAR(unsigned int, decodedSize) + +CIMAPPart CIMAPPart_init() { + return CIMAPPart_new(new mailcore::IMAPPart()); +} diff --git a/src/c/imap/CIMAPPart.h b/src/c/imap/CIMAPPart.h new file mode 100644 index 000000000..c04c8f6da --- /dev/null +++ b/src/c/imap/CIMAPPart.h @@ -0,0 +1,33 @@ +#ifndef CIMAPPart_h +#define CIMAPPart_h + +#include "CBase.h" +#include "CAbstractMessagePart.h" +#include "MailCoreString.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPPart; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPPart, mailcore::IMAPPart) + + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPPart) + + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPPart, MailCoreString, partID, setPartID) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPPart, unsigned int, size, setSize) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPPart, Encoding, encoding, setEncoding) + + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPPart, unsigned int, decodedSize) + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPPart, CIMAPPart, init) + +#ifdef __cplusplus +} +#endif + +#endif /* CIMAPPart_h */ diff --git a/src/c/imap/CIMAPQuotaOperation.cpp b/src/c/imap/CIMAPQuotaOperation.cpp new file mode 100644 index 000000000..884073b80 --- /dev/null +++ b/src/c/imap/CIMAPQuotaOperation.cpp @@ -0,0 +1,12 @@ +#include "CIMAPQuotaOperation.h" +#include "CBase+Private.h" +#include + +#define nativeType mailcore::IMAPQuotaOperation +#define structName CIMAPQuotaOperation + +C_SYNTHESIZE_CONSTRUCTOR() +C_SYNTHESIZE_COBJECT_CAST() + +C_SYNTHESIZE_FUNC_WITH_SCALAR(uint32_t, usage) +C_SYNTHESIZE_FUNC_WITH_SCALAR(uint32_t, limit) diff --git a/src/c/imap/CIMAPQuotaOperation.h b/src/c/imap/CIMAPQuotaOperation.h new file mode 100644 index 000000000..2e2c368c6 --- /dev/null +++ b/src/c/imap/CIMAPQuotaOperation.h @@ -0,0 +1,25 @@ +#ifndef CIMAPQuotaOperation_hpp +#define CIMAPQuotaOperation_hpp + +#include "CIMAPBaseOperation.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPQuotaOperation; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPQuotaOperation, mailcore::IMAPQuotaOperation) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPQuotaOperation) + + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPQuotaOperation, uint32_t, usage) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPQuotaOperation, uint32_t, limit) + +#ifdef __cplusplus +} +#endif + +#endif /* CIMAPQuotaOperation_hpp */ diff --git a/src/c/imap/CIMAPSearchExpression.cpp b/src/c/imap/CIMAPSearchExpression.cpp new file mode 100644 index 000000000..a72afa273 --- /dev/null +++ b/src/c/imap/CIMAPSearchExpression.cpp @@ -0,0 +1,83 @@ +#include +#include "CIMAPSearchExpression.h" +#include "CBase+Private.h" + +#include + +#define nativeType mailcore::IMAPSearchExpression +#define structName CIMAPSearchExpression + +C_SYNTHESIZE_CONSTRUCTOR() + +C_SYNTHESIZE_COBJECT_CAST() + +C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ(CIMAPSearchExpression, searchAll) + +C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ(CIMAPSearchExpression, searchFrom, MailCoreString) +C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ(CIMAPSearchExpression, searchRecipient, MailCoreString) +C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ(CIMAPSearchExpression, searchTo, MailCoreString) +C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ(CIMAPSearchExpression, searchCc, MailCoreString) +C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ(CIMAPSearchExpression, searchBcc, MailCoreString) +C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ(CIMAPSearchExpression, searchSubject, MailCoreString) +C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ(CIMAPSearchExpression, searchContent, MailCoreString) +C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ(CIMAPSearchExpression, searchBody, MailCoreString) +C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ(CIMAPSearchExpression, searchUIDs, CIndexSet) +C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ(CIMAPSearchExpression, searchNumbers, CIndexSet) + +C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ(CIMAPSearchExpression, searchHeader, MailCoreString, MailCoreString) + +C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ(CIMAPSearchExpression, searchRead) +C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ(CIMAPSearchExpression, searchUnread) +C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ(CIMAPSearchExpression, searchFlagged) +C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ(CIMAPSearchExpression, searchUnflagged) +C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ(CIMAPSearchExpression, searchAnswered) +C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ(CIMAPSearchExpression, searchUnanswered) +C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ(CIMAPSearchExpression, searchDraft) +C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ(CIMAPSearchExpression, searchUndraft) +C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ(CIMAPSearchExpression, searchDeleted) +C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ(CIMAPSearchExpression, searchSpam) + +CIMAPSearchExpression CIMAPSearchExpression_searchBeforeDate(time_t date) { + return CIMAPSearchExpression_new(mailcore::IMAPSearchExpression::searchBeforeDate(date)); +} + +CIMAPSearchExpression CIMAPSearchExpression_searchOnDate(time_t date) { + return CIMAPSearchExpression_new(mailcore::IMAPSearchExpression::searchOnDate(date)); +} + +CIMAPSearchExpression CIMAPSearchExpression_searchSinceDate(time_t date) { + return CIMAPSearchExpression_new(mailcore::IMAPSearchExpression::searchSinceDate(date)); +} + +CIMAPSearchExpression CIMAPSearchExpression_searchBeforeReceivedDate(time_t date) { + return CIMAPSearchExpression_new(mailcore::IMAPSearchExpression::searchBeforeReceivedDate(date)); +} + +CIMAPSearchExpression CIMAPSearchExpression_searchOnReceivedDate(time_t date) { + return CIMAPSearchExpression_new(mailcore::IMAPSearchExpression::searchOnReceivedDate(date)); +} + +CIMAPSearchExpression CIMAPSearchExpression_searchSinceReceivedDate(time_t date) { + return CIMAPSearchExpression_new(mailcore::IMAPSearchExpression::searchSinceReceivedDate(date)); +} + +CIMAPSearchExpression CIMAPSearchExpression_searchSizeLargerThan(uint32_t size) { + return CIMAPSearchExpression_new(mailcore::IMAPSearchExpression::searchSizeLarger(size)); +} + +CIMAPSearchExpression CIMAPSearchExpression_searchSizeSmallerThan(uint32_t size) { + return CIMAPSearchExpression_new(mailcore::IMAPSearchExpression::searchSizeSmaller(size)); +} + +CIMAPSearchExpression CIMAPSearchExpression_searchGmailThreadID(uint64_t number) { + return CIMAPSearchExpression_new(mailcore::IMAPSearchExpression::searchGmailThreadID(number)); +} + +CIMAPSearchExpression CIMAPSearchExpression_searchGmailMessageID(uint64_t number) { + return CIMAPSearchExpression_new(mailcore::IMAPSearchExpression::searchGmailMessageID(number)); +} + +C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ(CIMAPSearchExpression, searchGmailRaw, MailCoreString) +C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ(CIMAPSearchExpression, searchAnd, CIMAPSearchExpression, CIMAPSearchExpression) +C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ(CIMAPSearchExpression, searchOr, CIMAPSearchExpression, CIMAPSearchExpression) +C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ(CIMAPSearchExpression, searchNot, CIMAPSearchExpression) diff --git a/src/c/imap/CIMAPSearchExpression.h b/src/c/imap/CIMAPSearchExpression.h new file mode 100644 index 000000000..352748348 --- /dev/null +++ b/src/c/imap/CIMAPSearchExpression.h @@ -0,0 +1,65 @@ +#ifndef MAILCORE_СIMAP_SEARCH_EXPRESSION_H +#define MAILCORE_СIMAP_SEARCH_EXPRESSION_H + +#include "CBase.h" +#include "CIndexSet.h" +#include "MailCoreString.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPSearchExpression; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPSearchExpression, mailcore::IMAPSearchExpression) + + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPSearchExpression) + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchAll) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchFrom, MailCoreString) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchRecipient, MailCoreString) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchTo, MailCoreString) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchCc, MailCoreString) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchBcc, MailCoreString) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchSubject, MailCoreString) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchContent, MailCoreString) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchBody, MailCoreString) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchUIDs, CIndexSet) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchNumbers, CIndexSet) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchHeader, MailCoreString, MailCoreString) + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchRead) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchUnread) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchFlagged) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchUnflagged) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchAnswered) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchUnanswered) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchDraft) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchUndraft) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchDeleted) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchSpam) + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchBeforeDate, time_t) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchOnDate, time_t) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchSinceDate, time_t) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchBeforeReceivedDate, time_t) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchOnReceivedDate, time_t) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchSinceReceivedDate, time_t) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchSizeLargerThan, uint32_t) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchSizeSmallerThan, uint32_t) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchGmailThreadID, uint64_t) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchGmailMessageID, uint64_t) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchGmailRaw, MailCoreString) + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchAnd, CIMAPSearchExpression, CIMAPSearchExpression) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchOr, CIMAPSearchExpression, CIMAPSearchExpression) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchNot, CIMAPSearchExpression) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/c/imap/CIMAPSearchOperation.cpp b/src/c/imap/CIMAPSearchOperation.cpp new file mode 100644 index 000000000..a7ec77ee3 --- /dev/null +++ b/src/c/imap/CIMAPSearchOperation.cpp @@ -0,0 +1,11 @@ +#include "CIMAPSearchOperation.h" +#include "CBase+Private.h" +#include + +#define nativeType mailcore::IMAPSearchOperation +#define structName CIMAPSearchOperation + +C_SYNTHESIZE_CONSTRUCTOR() +C_SYNTHESIZE_COBJECT_CAST() + +C_SYNTHESIZE_FUNC_WITH_OBJ(CIndexSet, uids) diff --git a/src/c/imap/CIMAPSearchOperation.h b/src/c/imap/CIMAPSearchOperation.h new file mode 100644 index 000000000..a00675f1e --- /dev/null +++ b/src/c/imap/CIMAPSearchOperation.h @@ -0,0 +1,25 @@ +#ifndef MAILCORE_СIMAP_SEARCH_OPERATION_H +#define MAILCORE_СIMAP_SEARCH_OPERATION_H + +#include "CBase.h" +#include "CIMAPBaseOperation.h" +#include "CIndexSet.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPSearchOperation; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPSearchOperation, mailcore::IMAPSearchOperation) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPSearchOperation) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPSearchOperation, CIndexSet, uids) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/c/provider/CMailProvider.cpp b/src/c/provider/CMailProvider.cpp new file mode 100644 index 000000000..4ccf8dcc2 --- /dev/null +++ b/src/c/provider/CMailProvider.cpp @@ -0,0 +1,14 @@ +#include +#include "CMailProvider.h" +#include "CBase+Private.h" + +#define nativeType mailcore::MailProvider +#define structName CMailProvider + +C_SYNTHESIZE_COBJECT_CAST() + +C_SYNTHESIZE_CONSTRUCTOR() + +C_SYNTHESIZE_FUNC_WITH_OBJ(CArray, imapServices) +C_SYNTHESIZE_FUNC_WITH_OBJ(CArray, smtpServices) +C_SYNTHESIZE_FUNC_WITH_OBJ(MailCoreString, identifier) diff --git a/src/c/provider/CMailProvider.h b/src/c/provider/CMailProvider.h new file mode 100644 index 000000000..37b228fcd --- /dev/null +++ b/src/c/provider/CMailProvider.h @@ -0,0 +1,30 @@ +#ifndef MAILCORE_CMAIL_PROVIDER_H +#define MAILCORE_CMAIL_PROVIDER_H + +#include "stdint.h" +#include "CBase.h" +#include "CArray.h" +#include "CData.h" +#include "MailCoreString.h" + +#ifdef __cplusplus + +namespace mailcore { + class MailProvider; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CMailProvider, mailcore::MailProvider) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CMailProvider) + + C_SYNTHESIZE_READONLY_PROPERTY_DEFINITION(CMailProvider, CArray, imapServices) + C_SYNTHESIZE_READONLY_PROPERTY_DEFINITION(CMailProvider, CArray, smtpServices) + C_SYNTHESIZE_READONLY_PROPERTY_DEFINITION(CMailProvider, MailCoreString, identifier) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/c/provider/CMailProvidersManager.cpp b/src/c/provider/CMailProvidersManager.cpp new file mode 100644 index 000000000..a9b800e1f --- /dev/null +++ b/src/c/provider/CMailProvidersManager.cpp @@ -0,0 +1,17 @@ +#include +#include "CMailProvidersManager.h" +#include "CBase+Private.h" + +#define nativeType mailcore::MailProvidersManager +#define structName CMailProvidersManager + +struct CMailProvidersManager CMailProvidersManager_shared() { + CMailProvidersManager self; + self.instance = mailcore::MailProvidersManager::sharedManager(); + return self; +} + +C_SYNTHESIZE_FUNC_WITH_OBJ(CMailProvider, providerForEmail, MailCoreString) +C_SYNTHESIZE_FUNC_WITH_OBJ(CMailProvider, providerForMX, MailCoreString) +C_SYNTHESIZE_FUNC_WITH_OBJ(CMailProvider, providerForIdentifier, MailCoreString) +C_SYNTHESIZE_FUNC_WITH_VOID(registerProvidersWithFilename, MailCoreString) diff --git a/src/c/provider/CMailProvidersManager.h b/src/c/provider/CMailProvidersManager.h new file mode 100644 index 000000000..503ea590f --- /dev/null +++ b/src/c/provider/CMailProvidersManager.h @@ -0,0 +1,37 @@ +#ifndef MAILCORE_CMAIL_PROVIDERS_MANAGER_H +#define MAILCORE_CMAIL_PROVIDERS_MANAGER_H + +#include "stdint.h" +#include "CBase.h" +#include "CMailProvider.h" +#include "MailCoreString.h" + +#ifdef __cplusplus + +namespace mailcore { + class MailProvidersManager; +} + +extern "C" { +#endif + + typedef struct CMailProvidersManager { +#ifdef __cplusplus + mailcore::MailProvidersManager* instance; +#else + void* instance; +#endif + } CMailProvidersManager; + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CMailProvidersManager, CMailProvidersManager, shared) + + C_SYNTHESIZE_FUNC_DEFINITION(CMailProvidersManager, CMailProvider, providerForEmail, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CMailProvidersManager, CMailProvider, providerForMX, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CMailProvidersManager, CMailProvider, providerForIdentifier, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CMailProvidersManager, void, registerProvidersWithFilename, MailCoreString) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/c/provider/CNetService.cpp b/src/c/provider/CNetService.cpp new file mode 100644 index 000000000..4d4dd9761 --- /dev/null +++ b/src/c/provider/CNetService.cpp @@ -0,0 +1,16 @@ +#include +#include "CNetService.h" +#include "CBase+Private.h" + +#define nativeType mailcore::NetService +#define structName CNetService + +C_SYNTHESIZE_STRING(setHostname, hostname); +C_SYNTHESIZE_SCALAR(unsigned int, unsigned int, setPort, port); +C_SYNTHESIZE_ENUM(ConnectionType, mailcore::ConnectionType, setConnectionType, connectionType); +C_SYNTHESIZE_COBJECT_CAST() + +C_SYNTHESIZE_CONSTRUCTOR() + +C_SYNTHESIZE_FUNC_WITH_OBJ(MailCoreString, normalizedHostnameWithEmail, MailCoreString) + diff --git a/src/c/provider/CNetService.h b/src/c/provider/CNetService.h new file mode 100644 index 000000000..a73e9492e --- /dev/null +++ b/src/c/provider/CNetService.h @@ -0,0 +1,33 @@ +#ifndef MAILCORE_CNET_SERVICE_H +#define MAILCORE_CNET_SERVICE_H + +#include "stdint.h" +#include "CBase.h" +#include "CObject.h" +#include "CMessageConstants.h" + +#include "MailCoreString.h" + +#ifdef __cplusplus + +namespace mailcore { + class NetService; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CNetService, mailcore::NetService) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CNetService) + + C_SYNTHESIZE_PROPERTY_DEFINITION(CNetService, unsigned int, port, setPort) + C_SYNTHESIZE_PROPERTY_DEFINITION(CNetService, MailCoreString, hostname, setHostname) + C_SYNTHESIZE_PROPERTY_DEFINITION(CNetService, ConnectionType, connectionType, setConnectionType) + + C_SYNTHESIZE_FUNC_DEFINITION(CNetService, MailCoreString, normalizedHostnameWithEmail, MailCoreString) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/c/rfc822/CAttachment.cpp b/src/c/rfc822/CAttachment.cpp new file mode 100644 index 000000000..bfcbd976c --- /dev/null +++ b/src/c/rfc822/CAttachment.cpp @@ -0,0 +1,21 @@ +#include +#include "CAttachment.h" +#include "CBase+Private.h" + +#define nativeType mailcore::Attachment +#define structName CAttachment + +C_SYNTHESIZE_MAILCORE_OBJ(CData, CData_new, setData, data); +C_SYNTHESIZE_COBJECT_CAST() +C_SYNTHESIZE_CONSTRUCTOR() + +C_SYNTHESIZE_FUNC_WITH_OBJ(MailCoreString, decodedString) + +C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ(MailCoreString, mimeTypeForFilename, MailCoreString) +C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ(CAttachment, attachmentWithContentsOfFile, MailCoreString) +C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ(CAttachment, attachmentWithData, MailCoreString, CData) +C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ(CAttachment, attachmentWithHTMLString, MailCoreString) +C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ(CAttachment, attachmentWithRFC822Message, CData) +C_SYNTHESIZE_STATIC_FUNC_WITH_OBJ(CAttachment, attachmentWithText, MailCoreString) + + diff --git a/src/c/rfc822/CAttachment.h b/src/c/rfc822/CAttachment.h new file mode 100644 index 000000000..c7707af36 --- /dev/null +++ b/src/c/rfc822/CAttachment.h @@ -0,0 +1,35 @@ +#ifndef CAttachment_h +#define CAttachment_h + +#include "CBase.h" +#include "CArray.h" +#include "CAbstractPart.h" + +#ifdef __cplusplus + +namespace mailcore { + class Attachment; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CAttachment, mailcore::Attachment) + + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CAttachment) + + C_SYNTHESIZE_PROPERTY_DEFINITION(CAttachment, CData, data, setData) + C_SYNTHESIZE_READONLY_PROPERTY_DEFINITION(CAttachment, MailCoreString, decodedString) + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CAttachment, MailCoreString, mimeTypeForFilename, MailCoreString) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CAttachment, CAttachment, attachmentWithContentsOfFile, MailCoreString) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CAttachment, CAttachment, attachmentWithData, MailCoreString, CData) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CAttachment, CAttachment, attachmentWithHTMLString, MailCoreString) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CAttachment, CAttachment, attachmentWithRFC822Message, CData) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CAttachment, CAttachment, attachmentWithText, MailCoreString) + +#ifdef __cplusplus +} +#endif + +#endif /* CAttachment_h */ diff --git a/src/c/rfc822/CMessageBuilder.cpp b/src/c/rfc822/CMessageBuilder.cpp new file mode 100644 index 000000000..e9ada9266 --- /dev/null +++ b/src/c/rfc822/CMessageBuilder.cpp @@ -0,0 +1,48 @@ +#include "CMessageBuilder.h" +#include "CBase+Private.h" + +#include +#include "CData.h" + +#define nativeType mailcore::MessageBuilder +#define structName CMessageBuilder + +C_SYNTHESIZE_STRING(setHTMLBody, htmlBody) +C_SYNTHESIZE_STRING(setTextBody, textBody) +C_SYNTHESIZE_ARRAY(setAttachments, attachments) +C_SYNTHESIZE_ARRAY(setRelatedAttachments, relatedAttachments) +C_SYNTHESIZE_STRING(setBoundaryPrefix, boundaryPrefix) + +C_SYNTHESIZE_CONSTRUCTOR() +C_SYNTHESIZE_COBJECT_CAST() + +CMessageBuilder CMessageBuilder_init() { + return CMessageBuilder_new(new mailcore::MessageBuilder()); +} + +C_SYNTHESIZE_FUNC_WITH_VOID(addAttachment, CAttachment) +C_SYNTHESIZE_FUNC_WITH_VOID(addRelatedAttachment, CAttachment) + +C_SYNTHESIZE_FUNC_WITH_OBJ(CData, data) +C_SYNTHESIZE_FUNC_WITH_OBJ(CData, dataForEncryption) + + +ErrorCode CMessageBuilder_writeToFile(struct CMessageBuilder self, MailCoreString filename, bool useXAttachmentId) { + return static_cast((int)self.instance->writeToFile(filename.instance, useXAttachmentId)); +} + +C_SYNTHESIZE_FUNC_WITH_OBJ(CData, openPGPSignedMessageDataWithSignatureData, CData) +C_SYNTHESIZE_FUNC_WITH_OBJ(CData, openPGPEncryptedMessageDataWithEncryptedData, CData) +C_SYNTHESIZE_FUNC_WITH_OBJ(MailCoreString, htmlBodyRendering) +C_SYNTHESIZE_FUNC_WITH_OBJ(MailCoreString, plainTextRendering) + +C_SYNTHESIZE_FUNC_WITH_VOID(setBoundaries, CArray) + +MailCoreString CMessageBuilder_plainTextBodyRenderingAndStripWhitespace(struct CMessageBuilder self, bool stripWhitespace) { + return MailCoreString_new(self.instance->plainTextBodyRendering(stripWhitespace)); +} + + + + + diff --git a/src/c/rfc822/CMessageBuilder.h b/src/c/rfc822/CMessageBuilder.h new file mode 100644 index 000000000..cf1568dbc --- /dev/null +++ b/src/c/rfc822/CMessageBuilder.h @@ -0,0 +1,55 @@ +#ifndef CMessageBuilder_h +#define CMessageBuilder_h + +#include "CBase.h" +#include "CMessageConstants.h" +#include "CAbstractPart.h" +#include "CAbstractMessage.h" +#include "CArray.h" +#include "CAttachment.h" + +#include "MailCoreString.h" + +#ifdef __cplusplus + +namespace mailcore { + class MessageBuilder; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CMessageBuilder, mailcore::MessageBuilder) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CMessageBuilder) + + C_SYNTHESIZE_PROPERTY_DEFINITION(CMessageBuilder, MailCoreString, htmlBody, setHTMLBody) + C_SYNTHESIZE_PROPERTY_DEFINITION(CMessageBuilder, MailCoreString, textBody, setTextBody) + C_SYNTHESIZE_PROPERTY_DEFINITION(CMessageBuilder, CArray, attachments, setAttachments) + C_SYNTHESIZE_PROPERTY_DEFINITION(CMessageBuilder, CArray, relatedAttachments, setRelatedAttachments) + C_SYNTHESIZE_PROPERTY_DEFINITION(CMessageBuilder, MailCoreString, boundaryPrefix, setBoundaryPrefix) + + C_SYNTHESIZE_FUNC_DEFINITION(CMessageBuilder, void, addAttachment, CAttachment) + C_SYNTHESIZE_FUNC_DEFINITION(CMessageBuilder, void, addRelatedAttachment, CAttachment) + + C_SYNTHESIZE_FUNC_DEFINITION(CMessageBuilder, CData, data) + C_SYNTHESIZE_FUNC_DEFINITION(CMessageBuilder, CData, dataForEncryption) + + C_SYNTHESIZE_FUNC_DEFINITION(CMessageBuilder, ErrorCode, writeToFile, MailCoreString, bool) + + C_SYNTHESIZE_FUNC_DEFINITION(CMessageBuilder, CData, openPGPSignedMessageDataWithSignatureData, CData) + C_SYNTHESIZE_FUNC_DEFINITION(CMessageBuilder, CData, openPGPEncryptedMessageDataWithEncryptedData, CData) + + C_SYNTHESIZE_FUNC_DEFINITION(CMessageBuilder, MailCoreString, htmlBodyRendering) + C_SYNTHESIZE_FUNC_DEFINITION(CMessageBuilder, MailCoreString, plainTextRendering) + + C_SYNTHESIZE_FUNC_DEFINITION(CMessageBuilder, MailCoreString, plainTextBodyRenderingAndStripWhitespace, bool) + + C_SYNTHESIZE_FUNC_DEFINITION(CMessageBuilder, void, setBoundaries, CArray) + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CMessageBuilder, CMessageBuilder, init) + +#ifdef __cplusplus +} +#endif + +#endif /* CMessageBuilder_h */ diff --git a/src/c/rfc822/CMessageParser.cpp b/src/c/rfc822/CMessageParser.cpp new file mode 100644 index 000000000..48a6b33d9 --- /dev/null +++ b/src/c/rfc822/CMessageParser.cpp @@ -0,0 +1,42 @@ +#include "CMessageParser.h" +#include "CBase+Private.h" + +#include +#include +#include +#include +#include +#include + +#include "CData.h" +#include "CAbstractMessageRendererCallback.h" +#include "CAbstractMessageRendererCallbackWrapper.h" + +#define nativeType mailcore::MessageParser +#define structName CMessageParser + +C_SYNTHESIZE_CONSTRUCTOR() +C_SYNTHESIZE_COBJECT_CAST() + +CMessageParser CMessageParser_init(CData data) { + return CMessageParser_new(new mailcore::MessageParser(data.instance)); +} + +C_SYNTHESIZE_FUNC_WITH_OBJ(CAbstractPart, mainPart) +C_SYNTHESIZE_FUNC_WITH_OBJ(CData, data) +C_SYNTHESIZE_FUNC_WITH_OBJ(MailCoreString, htmlBodyRendering) +C_SYNTHESIZE_FUNC_WITH_OBJ(MailCoreString, plainTextRendering) +C_SYNTHESIZE_FUNC_WITH_OBJ(CDictionary, serializable) + +MailCoreString CMessageParser_plainTextBodyRenderingAndStripWhitespace(struct CMessageParser self, bool stripWhitespace) { + return MailCoreString_new(self.instance->plainTextBodyRendering(stripWhitespace)); +} + +MailCoreString CMessageParser_htmlRendering(struct CMessageParser self, struct CAbstractMessageRendererCallback htmlCallback) +{ + return MailCoreString_new(self.instance->htmlRendering(static_cast(htmlCallback.callbackBridge))); +} + +void CMessageParser_saveToFile(struct CMessageParser self, MailCoreString fileName) { + self.instance->saveToFile(fileName.instance); +} diff --git a/src/c/rfc822/CMessageParser.h b/src/c/rfc822/CMessageParser.h new file mode 100644 index 000000000..e58227e20 --- /dev/null +++ b/src/c/rfc822/CMessageParser.h @@ -0,0 +1,41 @@ +#ifndef CMessageParser_h +#define CMessageParser_h + +#include "CBase.h" +#include "CMessageConstants.h" +#include "CAbstractPart.h" +#include "CAbstractMessage.h" +#include "CArray.h" +#include "CAttachment.h" +#include "CDictionary.h" + +#ifdef __cplusplus + +namespace mailcore { + class MessageParser; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CMessageParser, mailcore::MessageParser) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CMessageParser) + + C_SYNTHESIZE_FUNC_DEFINITION(CMessageParser, CAbstractPart, mainPart) + C_SYNTHESIZE_FUNC_DEFINITION(CMessageParser, CData, data) + C_SYNTHESIZE_FUNC_DEFINITION(CMessageParser, MailCoreString, htmlBodyRendering) + C_SYNTHESIZE_FUNC_DEFINITION(CMessageParser, MailCoreString, plainTextRendering) + C_SYNTHESIZE_FUNC_DEFINITION(CMessageParser, MailCoreString, plainTextBodyRenderingAndStripWhitespace, bool) + + C_SYNTHESIZE_FUNC_DEFINITION(CMessageParser, CDictionary, serializable) + + C_SYNTHESIZE_FUNC_DEFINITION(CMessageParser, MailCoreString, htmlRendering, struct CAbstractMessageRendererCallback) + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CMessageParser, CMessageParser, init, CData) + C_SYNTHESIZE_FUNC_DEFINITION(CMessageParser, void, saveToFile, MailCoreString) + +#ifdef __cplusplus +} +#endif + +#endif /* CMessageParser_h */ diff --git a/src/c/rfc822/CMessagePart.cpp b/src/c/rfc822/CMessagePart.cpp new file mode 100644 index 000000000..80f57c022 --- /dev/null +++ b/src/c/rfc822/CMessagePart.cpp @@ -0,0 +1,10 @@ +#include "CMessagePart.h" +#include "CBase+Private.h" +#include + +#define nativeType mailcore::MessagePart +#define structName CMessagePart + +C_SYNTHESIZE_CONSTRUCTOR() +C_SYNTHESIZE_COBJECT_CAST() +C_SYNTHESIZE_STRING(setPartID, partID) diff --git a/src/c/rfc822/CMessagePart.h b/src/c/rfc822/CMessagePart.h new file mode 100644 index 000000000..cf6ff5486 --- /dev/null +++ b/src/c/rfc822/CMessagePart.h @@ -0,0 +1,29 @@ +#ifndef MAILCORE_C_MESSAGE_PART_H +#define MAILCORE_C_MESSAGE_PART_H + +#include "stdint.h" + +#include "CBase.h" +#include "CArray.h" +#include "CAbstractPart.h" +#include "CMessageHeader.h" +#include "CAbstractMessagePart.h" + +#ifdef __cplusplus + +namespace mailcore { + class MessagePart; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CMessagePart, mailcore::MessagePart) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CMessagePart) + C_SYNTHESIZE_PROPERTY_DEFINITION(CMessagePart, MailCoreString, partID, setPartID) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/c/rfc822/CMultipart.cpp b/src/c/rfc822/CMultipart.cpp new file mode 100644 index 000000000..ec79f535e --- /dev/null +++ b/src/c/rfc822/CMultipart.cpp @@ -0,0 +1,19 @@ +// +// CMultipart.cpp +// mailcore2 +// +// Created by Andrew on 8/15/17. +// Copyright © 2017 MailCore. All rights reserved. +// + +#include "CMultipart.h" +#include + +#include "CBase+Private.h" + +#define nativeType mailcore::Multipart +#define structName CMultipart + +C_SYNTHESIZE_CONSTRUCTOR() +C_SYNTHESIZE_COBJECT_CAST() +C_SYNTHESIZE_STRING(setPartID, partID); diff --git a/src/c/rfc822/CMultipart.h b/src/c/rfc822/CMultipart.h new file mode 100644 index 000000000..2ed4c13a6 --- /dev/null +++ b/src/c/rfc822/CMultipart.h @@ -0,0 +1,37 @@ +// +// CMultipart.hpp +// mailcore2 +// +// Created by Andrew on 8/15/17. +// Copyright © 2017 MailCore. All rights reserved. +// + +#ifndef MAILCORE_C_MULTIPART_H +#define MAILCORE_C_MULTIPART_H + +#include "stdint.h" + +#include "CBase.h" +#include "CArray.h" +#include "CAbstractPart.h" +#include "CMessageHeader.h" +#include "CAbstractMessagePart.h" + +#ifdef __cplusplus + +namespace mailcore { + class Multipart; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CMultipart, mailcore::Multipart) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CMultipart) + C_SYNTHESIZE_PROPERTY_DEFINITION(CMultipart, MailCoreString, partID, setPartID) + +#ifdef __cplusplus +} +#endif + +#endif /* MAILCORE_C_MULTIPART_H */ diff --git a/src/c/smtp/CSMTPOperation.cpp b/src/c/smtp/CSMTPOperation.cpp new file mode 100644 index 000000000..aa92fce4a --- /dev/null +++ b/src/c/smtp/CSMTPOperation.cpp @@ -0,0 +1,65 @@ +#include +#include "CSMTPOperation.h" +#include "MailCoreString.h" + +#include "CBase+Private.h" + +#define nativeType mailcore::SMTPOperation +#define structName CSMTPOperation + +C_SYNTHESIZE_COBJECT_CAST() + +class CSMTPOperationCallback : public mailcore::SMTPOperationCallback { +public: + CSMTPOperationCallback() + { + + } + + virtual ~CSMTPOperationCallback() + { + mBlock = NULL; + mUserInfo = NULL; + } + + virtual void bodyProgress(mailcore::SMTPOperation * session, unsigned int current, unsigned int maximum) { + if (mBlock != NULL) { + mBlock(mUserInfo, current, maximum); + } + } + + const void* mUserInfo = NULL; + CProgressBlock mBlock = NULL; +}; + +ErrorCode CSMTPOperation_error(struct CSMTPOperation self) { + return static_cast((int)self.instance->error()); +} + +CSMTPOperation CSMTPOperation_setProgressBlocks(struct CSMTPOperation self, CProgressBlock progressBlock, const void* userInfo) { + self._callback->mBlock = progressBlock; + self._callback->mUserInfo = userInfo; + return self; +} + +C_SYNTHESIZE_FUNC_WITH_OBJ(MailCoreString, lastSMTPResponse) +C_SYNTHESIZE_FUNC_WITH_SCALAR(int, lastSMTPResponseCode) + +CSMTPOperation CSMTPOperation_new(mailcore::SMTPOperation* operation) { + CSMTPOperation self; + self.cOperation = COperation_new(operation); + self.instance = operation; + self._callback = new CSMTPOperationCallback(); + self.instance->setSmtpCallback(self._callback); + return self; +} + +void CSMTPOperation_retain(CSMTPOperation self) { + self.instance->retain(); +} + +void CSMTPOperation_release(CSMTPOperation self) { + self.instance->setSmtpCallback(NULL); + delete self._callback; + self.instance->release(); +} diff --git a/src/c/smtp/CSMTPOperation.h b/src/c/smtp/CSMTPOperation.h new file mode 100644 index 000000000..34646e867 --- /dev/null +++ b/src/c/smtp/CSMTPOperation.h @@ -0,0 +1,56 @@ +#ifndef CSMTPOperation_h +#define CSMTPOperation_h + +#include "COperation.h" +#include "MailCoreString.h" + +#ifdef __cplusplus + +namespace mailcore { + class SMTPOperation; +} + +class CSMTPOperationCallback; + +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + typedef void (*CProgressBlock)(const void* userInfo, unsigned int current, unsigned int maximum); + typedef struct CSMTPSession CSMTPSession; + + struct CSMTPOperation { +#ifdef __cplusplus + mailcore::SMTPOperation* instance; + CSMTPOperationCallback* _callback; +#else + void* instance; + void* _callback; +#endif + COperation cOperation; + }; + typedef struct CSMTPOperation CSMTPOperation; + + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CSMTPOperation) + + C_SYNTHESIZE_READONLY_PROPERTY_DEFINITION(CSMTPOperation, ErrorCode, error) + C_SYNTHESIZE_READONLY_PROPERTY_DEFINITION(CSMTPOperation, MailCoreString, lastSMTPResponse) + C_SYNTHESIZE_READONLY_PROPERTY_DEFINITION(CSMTPOperation, int, lastSMTPResponseCode) + + C_SYNTHESIZE_FUNC_DEFINITION(CSMTPOperation, CSMTPOperation, setProgressBlocks, CProgressBlock, const void*) + + CMAILCORE_EXPORT void CSMTPOperation_retain(CSMTPOperation operation) + CF_SWIFT_NAME(CSMTPOperation.retain(self:)); + + CMAILCORE_EXPORT void CSMTPOperation_release(CSMTPOperation operation) + CF_SWIFT_NAME(CSMTPOperation.release(self:)); + +#ifdef __cplusplus +} + +CSMTPOperation CSMTPOperation_new(mailcore::SMTPOperation* operation); +#endif + +#endif /* CSMTPOperation_h */ diff --git a/src/c/smtp/CSMTPSession.cpp b/src/c/smtp/CSMTPSession.cpp new file mode 100644 index 000000000..bf7026e6f --- /dev/null +++ b/src/c/smtp/CSMTPSession.cpp @@ -0,0 +1,124 @@ +#include +#include + +#include "CSMTPSession.h" +#include "CSMTPOperation.h" + +#define nativeType mailcore::SMTPAsyncSession +#define structName CSMTPSession + +#include "CBase+Private.h" + +C_SYNTHESIZE_STRING(setHostname, hostname) +C_SYNTHESIZE_SCALAR(unsigned int, unsigned int, setPort, port) +C_SYNTHESIZE_STRING(setUsername, username) +C_SYNTHESIZE_STRING(setPassword, password) +C_SYNTHESIZE_ENUM(ConnectionType, mailcore::ConnectionType, setConnectionType, connectionType) +C_SYNTHESIZE_SCALAR(time_t, time_t, setTimeout, timeout) +C_SYNTHESIZE_BOOL(setCheckCertificateEnabled, isCheckCertificateEnabled) +C_SYNTHESIZE_STRING(setOAuth2Token, OAuth2Token) +C_SYNTHESIZE_ENUM(CAuthType, mailcore::AuthType, setAuthType, authType) +C_SYNTHESIZE_BOOL(setUseHeloIPEnabled, useHeloIPEnabled) +C_SYNTHESIZE_SCALAR(dispatch_queue_t, dispatch_queue_t, setDispatchQueue, dispatchQueue) + +class CSMTPCallbackBridge : public mailcore::Object, public mailcore::ConnectionLogger, public mailcore::OperationQueueCallback { +public: + CSMTPCallbackBridge(CConnectionLogger logger, CConnectionLoggerRelease releaseLoggerBlock) + { + this->mLogger = logger; + this->mReleaseBlock = releaseLoggerBlock; + } + + virtual void log(void * sender, mailcore::ConnectionLogType logType, mailcore::Data *data) + { + if (mLogger != NULL) { + mLogger(sender, static_cast((int)logType), CData_new(data), mcoLogger); + } + } + + virtual void queueStartRunning() + { + if (mQueueRunningChangeBlock != NULL) { + mQueueRunningChangeBlock(); + } + } + + virtual void queueStoppedRunning() + { + if (mQueueRunningChangeBlock != NULL) { + mQueueRunningChangeBlock(); + } + } + + void releaseSwiftLogger() { + this->mReleaseBlock(this->mcoLogger); + this->mcoLogger = NULL; + } + + CConnectionLogger mLogger; + CConnectionLoggerRelease mReleaseBlock; + void* mcoLogger = NULL; + OperationQueueRunningChangeBlock mQueueRunningChangeBlock; +}; + +bool CSMTPSession_isOperationQueueRunning(struct CSMTPSession self) { + return self.instance->isOperationQueueRunning(); +} + +void CSMTPSession_setConnectionLogger(struct CSMTPSession self, void* logger) { + self._callback->releaseSwiftLogger(); + self._callback->mcoLogger = logger; + if (logger != NULL) { + self.instance->setConnectionLogger(self._callback); + } + else { + self.instance->setConnectionLogger(NULL); + } +} + +void CSMTPSession_setOperationQueueRunningChangeBlock(struct CSMTPSession self, OperationQueueRunningChangeBlock queueRunningChangeBlock) { + self._callback->mQueueRunningChangeBlock = queueRunningChangeBlock; + if (queueRunningChangeBlock != NULL) { + self.instance->setOperationQueueCallback(self._callback); + } + else { + self.instance->setOperationQueueCallback(NULL); + } +} + +OperationQueueRunningChangeBlock CSMTPSession_operationQueueRunningChangeBlock(struct CSMTPSession self) { + return self._callback->mQueueRunningChangeBlock; +} + +C_SYNTHESIZE_FUNC_WITH_OBJ(CSMTPOperation, loginOperation) +C_SYNTHESIZE_FUNC_WITH_OBJ(CSMTPOperation, sendMessageOperation, CData) +C_SYNTHESIZE_FUNC_WITH_OBJ(CSMTPOperation, checkAccountOperation, CAddress) +C_SYNTHESIZE_FUNC_WITH_OBJ(CSMTPOperation, noopOperation) +C_SYNTHESIZE_FUNC_WITH_VOID(cancelAllOperations) + +CSMTPOperation CSMTPSession_sendOperationWithDataAndFromAndRecipients(struct CSMTPSession self, CData messageData, CAddress from , CArray recipients) { + return CSMTPOperation_new(self.instance->sendMessageOperation(from.instance, recipients.instance, messageData.instance)); +} + +CSMTPOperation CSMTPSession_sendOperationWithContentsOfFile(struct CSMTPSession self, MailCoreString path, CAddress from, CArray recipients) { + return CSMTPOperation_new(self.instance->sendMessageOperation(from.instance, recipients.instance, path.instance)); +} + +CSMTPOperation CSMTPSession_checkAccountOperationWithFromAndTo(struct CSMTPSession self, CAddress from, CAddress to) { + return CSMTPOperation_new(self.instance->checkAccountOperation(from.instance, to.instance)); +} + +CSMTPSession CSMTPSession_new(CConnectionLogger logger, CConnectionLoggerRelease releaseLoggerBlock) { + CSMTPSession self; + self.instance = new mailcore::SMTPAsyncSession(); + self._callback = new CSMTPCallbackBridge(logger, releaseLoggerBlock); + return self; +} + +void CSMTPSession_release(CSMTPSession self) { + self._callback->releaseSwiftLogger(); + C_SAFE_RELEASE(self._callback); + self.instance->setConnectionLogger(NULL); + self.instance->release(); +} + diff --git a/src/c/smtp/CSMTPSession.h b/src/c/smtp/CSMTPSession.h new file mode 100644 index 000000000..37368ca76 --- /dev/null +++ b/src/c/smtp/CSMTPSession.h @@ -0,0 +1,75 @@ +#ifndef CSMTPSession_h +#define CSMTPSession_h + +#include "CBase.h" +#include "CMessageConstants.h" +#include "time.h" +#include "CAddress.h" +#include "CArray.h" +#include "CSMTPOperation.h" + +#include "MailCoreString.h" + +#include + +#ifdef __cplusplus + +namespace mailcore { + class SMTPAsyncSession; +} + +class CSMTPCallbackBridge; + +extern "C" { +#endif + + struct CSMTPSession { +#ifdef __cplusplus + mailcore::SMTPAsyncSession* instance; + CSMTPCallbackBridge* _callback; +#else + void* instance; + void* _callback; +#endif + }; + typedef struct CSMTPSession CSMTPSession; + + C_SYNTHESIZE_PROPERTY_DEFINITION(CSMTPSession, MailCoreString, hostname, setHostname) + C_SYNTHESIZE_PROPERTY_DEFINITION(CSMTPSession, unsigned int, port, setPort) + C_SYNTHESIZE_PROPERTY_DEFINITION(CSMTPSession, MailCoreString, username, setUsername) + C_SYNTHESIZE_PROPERTY_DEFINITION(CSMTPSession, MailCoreString, password, setPassword) + C_SYNTHESIZE_PROPERTY_DEFINITION(CSMTPSession, MailCoreString, OAuth2Token, setOAuth2Token) + C_SYNTHESIZE_PROPERTY_DEFINITION(CSMTPSession, CAuthType, authType, setAuthType) + C_SYNTHESIZE_PROPERTY_DEFINITION(CSMTPSession, ConnectionType, connectionType, setConnectionType) + C_SYNTHESIZE_PROPERTY_DEFINITION(CSMTPSession, time_t, timeout, setTimeout) + C_SYNTHESIZE_PROPERTY_DEFINITION(CSMTPSession, bool, isCheckCertificateEnabled, setCheckCertificateEnabled) + C_SYNTHESIZE_PROPERTY_DEFINITION(CSMTPSession, bool, useHeloIPEnabled, setUseHeloIPEnabled) + C_SYNTHESIZE_PROPERTY_DEFINITION(CSMTPSession, bool, isOperationQueueRunning, setOperationQueueRunning) + C_SYNTHESIZE_FUNC_DEFINITION(CSMTPSession, void, setConnectionLogger, void*) + + C_SYNTHESIZE_FUNC_DEFINITION(CSMTPSession, dispatch_queue_t, dispatchQueue) + C_SYNTHESIZE_FUNC_DEFINITION(CSMTPSession, void, setDispatchQueue, dispatch_queue_t) + + C_SYNTHESIZE_PROPERTY_DEFINITION(CSMTPSession, OperationQueueRunningChangeBlock, operationQueueRunningChangeBlock, setOperationQueueRunningChangeBlock) + + C_SYNTHESIZE_FUNC_DEFINITION(CSMTPSession, void, cancelAllOperations) + C_SYNTHESIZE_FUNC_DEFINITION(CSMTPSession, CSMTPOperation, loginOperation) + C_SYNTHESIZE_FUNC_DEFINITION(CSMTPSession, CSMTPOperation, sendMessageOperation, CData) + C_SYNTHESIZE_FUNC_DEFINITION(CSMTPSession, CSMTPOperation, sendOperationWithDataAndFromAndRecipients, CData, CAddress, CArray) + C_SYNTHESIZE_FUNC_DEFINITION(CSMTPSession, CSMTPOperation, sendOperationWithContentsOfFile, MailCoreString, CAddress, CArray) + C_SYNTHESIZE_FUNC_DEFINITION(CSMTPSession, CSMTPOperation, checkAccountOperation, CAddress) + C_SYNTHESIZE_FUNC_DEFINITION(CSMTPSession, CSMTPOperation, checkAccountOperationWithFromAndTo, CAddress, CAddress) + C_SYNTHESIZE_FUNC_DEFINITION(CSMTPSession, CSMTPOperation, noopOperation) + + + CMAILCORE_EXPORT CSMTPSession CSMTPSession_new(CConnectionLogger logger, CConnectionLoggerRelease releaseLoggerBlock); + + CMAILCORE_EXPORT void CSMTPSession_release(CSMTPSession self) + CF_SWIFT_NAME(CSMTPSession.release(self:)); + +#ifdef __cplusplus +} +#endif + + +#endif /* CSMTPSession_h */ diff --git a/src/c/utils/CAutoreleasePool.cpp b/src/c/utils/CAutoreleasePool.cpp new file mode 100644 index 000000000..bee89db67 --- /dev/null +++ b/src/c/utils/CAutoreleasePool.cpp @@ -0,0 +1,21 @@ +// +// CAutoreleasePool.cpp +// mailcore2 +// +// Created by Andriy Druk on 3/12/19. +// Copyright © 2019 MailCore. All rights reserved. +// + +#include "CAutoreleasePool.h" +#include "CBase+Private.h" + +#include + +#define nativeType mailcore::AutoreleasePool +#define structName CAutoreleasePool + +C_SYNTHESIZE_CONSTRUCTOR() + +CAutoreleasePool CAutoreleasePool_init(){ + return CAutoreleasePool_new(new mailcore::AutoreleasePool()); +} diff --git a/src/c/utils/CAutoreleasePool.h b/src/c/utils/CAutoreleasePool.h new file mode 100644 index 000000000..d81778f95 --- /dev/null +++ b/src/c/utils/CAutoreleasePool.h @@ -0,0 +1,31 @@ +// +// CAutoreleasePool.hpp +// mailcore2 +// +// Created by Andriy Druk on 3/12/19. +// Copyright © 2019 MailCore. All rights reserved. +// + +#ifndef MAILCORE_C_AUTORELEASEPOOL_H +#define MAILCORE_C_AUTORELEASEPOOL_H + +#include "CBase.h" + +#ifdef __cplusplus + +namespace mailcore { + class AutoreleasePool; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CAutoreleasePool, mailcore::AutoreleasePool) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CAutoreleasePool, CAutoreleasePool, init) + + +#ifdef __cplusplus +} +#endif + +#endif /* MAILCORE_C_AUTORELEASEPOOL_H */ diff --git a/src/c/utils/COperation.cpp b/src/c/utils/COperation.cpp new file mode 100644 index 000000000..ea670a010 --- /dev/null +++ b/src/c/utils/COperation.cpp @@ -0,0 +1,90 @@ +#include +#include "COperation.h" +#include "CBase+Private.h" + +#define nativeType mailcore::Operation +#define structName COperation + +C_SYNTHESIZE_BOOL(setShouldRunWhenCancelled, shouldRunWhenCancelled); +C_SYNTHESIZE_SCALAR(dispatch_queue_t, dispatch_queue_t, setCallbackDispatchQueue, callbackDispatchQueue) +C_SYNTHESIZE_COBJECT_CAST() + +class COperationCompletionCallback : public mailcore::Object, public mailcore::OperationCallback { +private: + COperationCompletionBlock completionBlock = NULL; + const void* userInfo = NULL; +public: + COperationCompletionCallback(COperationCompletionBlock block, const void* userInfo) { + this->completionBlock = block; + this->userInfo = userInfo; + } + + virtual void operationFinished(mailcore::Operation * op) + { + completionBlock(this->userInfo); + } +}; + +COperation COperation_new(mailcore::Operation *operationRef) { + COperation self; + self.instance = operationRef; + self._callback = NULL; + return self; +} + +struct COperation COperation_setCompletionBlock(COperation self, COperationCompletionBlock block, const void* userInfo) { + COperation_clearCompletionBlock(self); + self._callback = new COperationCompletionCallback(block, userInfo); + self.instance->setCallback(self._callback); + return self; +} + +struct COperation COperation_clearCompletionBlock(COperation self) { + COperationCompletionCallback *callback = self._callback; + mailcore::Operation *instance = self.instance; + + if (callback == NULL) { + return self; + } + + self._callback = NULL; + + dispatch_queue_t callbackQueue = self.instance->callbackDispatchQueue(); + + if (callbackQueue == NULL) { + MCAssert(0); + instance->setCallback(NULL); + callback->release(); + } + else { + // clear and release callback on callback queue + // to be in sync with "callback() == NULL" checks in other places of Mailcore + + instance->retain(); + + dispatch_async(callbackQueue, ^{ + instance->setCallback(NULL); + instance->release(); + callback->release(); + }); + } + + return self; +} + + +C_SYNTHESIZE_FUNC_WITH_SCALAR(bool, isCancelled) +C_SYNTHESIZE_FUNC_WITH_VOID(cancel) +C_SYNTHESIZE_FUNC_WITH_VOID(start) + +void COperation_release(COperation self) { + self.instance->release(); +} + +void COperation_retain(COperation self) { + self.instance->retain(); +} + +int COperation_retainCount(COperation self) { + return self.instance->retainCount(); +} diff --git a/src/c/utils/COperation.h b/src/c/utils/COperation.h new file mode 100644 index 000000000..d14f56d68 --- /dev/null +++ b/src/c/utils/COperation.h @@ -0,0 +1,64 @@ +#ifndef MAILCORE_C_OPERATION_H +#define MAILCORE_C_OPERATION_H + +#include "CBase.h" +#include "CMessageConstants.h" +#include "CObject.h" +#include "CData.h" + +#include + +#ifdef __cplusplus + +namespace mailcore { + class Operation; +} + +class COperationCompletionCallback; + +extern "C" { +#endif + + typedef void (*COperationCompletionBlock)(const void* ref); + + typedef struct COperation { +#ifdef __cplusplus + mailcore::Operation * instance; + COperationCompletionCallback* _callback; +#else + void* instance; + void* _callback; +#endif + } COperation; + + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(COperation) + + // TODO: should be property, but swift doesn;t recognize dispatch_queue_t <--> DispatchQueue bridging + C_SYNTHESIZE_FUNC_DEFINITION(COperation, dispatch_queue_t, callbackDispatchQueue) + C_SYNTHESIZE_FUNC_DEFINITION(COperation, void, setCallbackDispatchQueue, dispatch_queue_t) + + C_SYNTHESIZE_PROPERTY_DEFINITION(COperation, bool, shouldRunWhenCancelled, setShouldRunWhenCancelled) + + C_SYNTHESIZE_FUNC_DEFINITION(COperation, COperation, setCompletionBlock, COperationCompletionBlock, const void*) + C_SYNTHESIZE_FUNC_DEFINITION(COperation, COperation, clearCompletionBlock) + + C_SYNTHESIZE_FUNC_DEFINITION(COperation, bool, isCancelled) + C_SYNTHESIZE_FUNC_DEFINITION(COperation, void, cancel) + C_SYNTHESIZE_FUNC_DEFINITION(COperation, void, start) + + CMAILCORE_EXPORT void COperation_retain(COperation self) + CF_SWIFT_NAME(COperation.retain(self:)); + + CMAILCORE_EXPORT void COperation_release(COperation self) + CF_SWIFT_NAME(COperation.release(self:)); + + CMAILCORE_EXPORT int COperation_retainCount(COperation self) + CF_SWIFT_NAME(COperation.retainCount(self:));; + +#ifdef __cplusplus +} + +COperation COperation_new(mailcore::Operation *operation); +#endif + +#endif diff --git a/src/cmake/c.cmake b/src/cmake/c.cmake new file mode 100644 index 000000000..ad98fe09c --- /dev/null +++ b/src/cmake/c.cmake @@ -0,0 +1,18 @@ +file(GLOB c_files + c/abstract/*.cpp + c/basetypes/*.cpp + c/imap/*.cpp + c/provider/*.cpp + c/rfc822/*.cpp + c/smtp/*.cpp + c/utils/*.cpp +) + +set(c_includes + "${CMAKE_CURRENT_SOURCE_DIR}/c" + "${CMAKE_CURRENT_SOURCE_DIR}/c/abstract" + "${CMAKE_CURRENT_SOURCE_DIR}/c/basetypes" + "${CMAKE_CURRENT_SOURCE_DIR}/c/imap" + "${CMAKE_CURRENT_SOURCE_DIR}/c/rfc822" + "${CMAKE_CURRENT_SOURCE_DIR}/c/utils" +) diff --git a/src/cmake/cmailcore-public-headers.cmake b/src/cmake/cmailcore-public-headers.cmake new file mode 100644 index 000000000..b972fedd6 --- /dev/null +++ b/src/cmake/cmailcore-public-headers.cmake @@ -0,0 +1,97 @@ +set(CMAILCORE_ABSTRACT_HEADERS + c/abstract/CAbstractMessage.h + c/abstract/CAbstractMessagePart.h + c/abstract/CAbstractMessageRendererCallback.h + c/abstract/CAbstractMessageRendererCallbackWrapper.h + c/abstract/CAbstractMultipart.h + c/abstract/CAbstractPart.h + c/abstract/CAddress.h + c/abstract/CMessageConstants.h + c/abstract/CMessageHeader.h +) + +set(CMAILCORE_BASETYPES_HEADERS + c/basetypes/CArray.h + c/basetypes/CData.h + c/basetypes/CDictionary.h + c/basetypes/CIndexSet.h + c/basetypes/CObject.h + c/basetypes/MailCoreString.h +) + +set(CMAILCORE_IMAP_HEADERS + c/imap/CIMAPAppendMessageOperation.h + c/imap/CIMAPAsyncSession.h + c/imap/CIMAPBaseOperation.h + c/imap/CIMAPCapabilityOperation.h + c/imap/CIMAPCheckAccountOperation.h + c/imap/CIMAPCopyMessagesOperation.h + c/imap/CIMAPCustomCommandOperation.h + c/imap/CIMAPFetchContentOperation.h + c/imap/CIMAPFetchContentToFileOperation.h + c/imap/CIMAPFetchFoldersOperation.h + c/imap/CIMAPFetchMessagesOperation.h + c/imap/CIMAPFetchNamespaceOperation.h + c/imap/CIMAPFetchParsedContentOperation.h + c/imap/CIMAPFolder.h + c/imap/CIMAPFolderInfo.h + c/imap/CIMAPFolderInfoOperation.h + c/imap/CIMAPFolderStatus.h + c/imap/CIMAPFolderStatusOperation.h + c/imap/CIMAPIdentity.h + c/imap/CIMAPIdentityOperation.h + c/imap/CIMAPIdleOperation.h + c/imap/CIMAPMessage.h + c/imap/CIMAPMessagePart.h + c/imap/CIMAPMessageRenderingOperation.h + c/imap/CIMAPMoveMessagesOperation.h + c/imap/CIMAPMultipart.h + c/imap/CIMAPNamespace.h + c/imap/CIMAPNamespaceItem.h + c/imap/CIMAPPart.h + c/imap/CIMAPQuotaOperation.h + c/imap/CIMAPSearchExpression.h + c/imap/CIMAPSearchOperation.h +) + +set(CMAILCORE_PROVIDER_HEADERS + c/provider/CMailProvider.h + c/provider/CMailProvidersManager.h + c/provider/CNetService.h +) + +set(CMAILCORE_RFC822_HEADERS + c/rfc822/CAttachment.h + c/rfc822/CMessageBuilder.h + c/rfc822/CMessageParser.h + c/rfc822/CMessagePart.h + c/rfc822/CMultipart.h +) + +set(CMAILCORE_SMTP_HEADERS + c/smtp/CSMTPOperation.h + c/smtp/CSMTPSession.h +) + +set(CMAILCORE_UTILS_HEADERS + c/utils/CAutoreleasePool.h + c/utils/COperation.h +) + +set(CMAILCORE_HEADERS + ../build-android-swift/CMailCore/include/CMailCore.h + c/CBase+Private.h + c/CBase.h + c/CCore.h + ${CMAILCORE_ABSTRACT_HEADERS} + ${CMAILCORE_BASETYPES_HEADERS} + ${CMAILCORE_IMAP_HEADERS} + ${CMAILCORE_PROVIDER_HEADERS} + ${CMAILCORE_RFC822_HEADERS} + ${CMAILCORE_SMTP_HEADERS} + ${CMAILCORE_UTILS_HEADERS} +) + +set(CMAILCORE_MODULEMAP + ../build-android-swift/CMailCore/include/module.modulemap +) diff --git a/src/cmake/core.cmake b/src/cmake/core.cmake index 63a041fca..fc8d75189 100644 --- a/src/cmake/core.cmake +++ b/src/cmake/core.cmake @@ -10,7 +10,7 @@ set(abstract_files core/abstract/MCErrorMessage.cpp ) -IF(APPLE) +if(APPLE) set(basetypes_files_apple core/basetypes/MCAutoreleasePoolMac.mm core/basetypes/MCMainThreadMac.mm @@ -27,7 +27,17 @@ IF(APPLE) "${CMAKE_CURRENT_SOURCE_DIR}/core/basetypes/icu-ucsdet" "${CMAKE_CURRENT_SOURCE_DIR}/core/basetypes/icu-ucsdet/include" ) -ENDIF() +elseif(WIN32) + set(basetypes_files_win32 + core/basetypes/MCMainThreadWin32.cpp + core/basetypes/MCStringWin32.cpp + core/basetypes/MCWin32.cpp + ) + + set(zip_files_win32 + core/zip/MiniZip/iowin32.c + ) +endif() IF(${CMAKE_SYSTEM_NAME} MATCHES "Linux") set(basetypes_files_linux @@ -65,6 +75,7 @@ set(basetypes_files core/basetypes/ConvertUTF.c ${basetypes_files_apple} ${basetypes_files_linux} + ${basetypes_files_win32} ) IF(APPLE) @@ -156,6 +167,7 @@ set(zip_files core/zip/MiniZip/unzip.c core/zip/MiniZip/zip.c ${zip_files_apple} + ${zip_files_win32} ) set(security_files @@ -163,12 +175,13 @@ set(security_files ) set(core_files + ${abstract_files} ${basetypes_files} ${icu_ucsdet_files} - ${abstract_files} ${imap_files} - ${pop_files} ${nntp_files} + ${pop_files} + ${provider_files} ${renderer_files} ${rfc822_files} ${security_files} diff --git a/src/cmake/public-headers.cmake b/src/cmake/public-headers.cmake index 2907f9ccf..9a28f17a2 100644 --- a/src/cmake/public-headers.cmake +++ b/src/cmake/public-headers.cmake @@ -1,217 +1,237 @@ +set(MAILCORE2_CORE_HEADERS + core/MCCore.h + core/abstract/MCAbstract.h + core/abstract/MCAbstractMessage.h + core/abstract/MCAbstractMessagePart.h + core/abstract/MCAbstractMultipart.h + core/abstract/MCAbstractPart.h + core/abstract/MCAddress.h + core/abstract/MCMessageConstants.h + core/abstract/MCMessageHeader.h + core/basetypes/MCArray.h + core/basetypes/MCAssert.h + core/basetypes/MCAutoreleasePool.h + core/basetypes/MCBaseTypes.h + core/basetypes/MCBasicLock.h + core/basetypes/MCConnectionLogger.h + core/basetypes/MCData.h + core/basetypes/MCDataDecoderUtils.h + core/basetypes/MCDataStreamDecoder.h + core/basetypes/MCDefines.h + core/basetypes/MCHash.h + core/basetypes/MCHashMap.h + core/basetypes/MCHTMLCleaner.h + core/basetypes/MCICUTypes.h + core/basetypes/MCIndexSet.h + core/basetypes/MCIterator.h + core/basetypes/MCJSON.h + core/basetypes/MCLibetpan.h + core/basetypes/MCLibetpanTypes.h + core/basetypes/MCLog.h + core/basetypes/MCMD5.h + core/basetypes/MCNull.h + core/basetypes/MCObject.h + core/basetypes/MCOperation.h + core/basetypes/MCOperationCallback.h + core/basetypes/MCOperationQueue.h + core/basetypes/MCOperationQueueCallback.h + core/basetypes/MCRange.h + core/basetypes/MCSet.h + core/basetypes/MCString.h + core/basetypes/MCUtils.h + core/basetypes/MCValue.h + core/imap/MCIMAP.h + core/imap/MCIMAPFolder.h + core/imap/MCIMAPFolderStatus.h + core/imap/MCIMAPIdentity.h + core/imap/MCIMAPMessage.h + core/imap/MCIMAPMessagePart.h + core/imap/MCIMAPMultipart.h + core/imap/MCIMAPNamespace.h + core/imap/MCIMAPNamespaceItem.h + core/imap/MCIMAPPart.h + core/imap/MCIMAPProgressCallback.h + core/imap/MCIMAPSearchExpression.h + core/imap/MCIMAPSession.h + core/imap/MCIMAPSyncResult.h + core/nntp/MCNNTP.h + core/nntp/MCNNTPGroupInfo.h + core/nntp/MCNNTPProgressCallback.h + core/nntp/MCNNTPSession.h + core/pop/MCPOP.h + core/pop/MCPOPMessageInfo.h + core/pop/MCPOPProgressCallback.h + core/pop/MCPOPSession.h + core/provider/MCAccountValidator.h + core/provider/MCMailProvider.h + core/provider/MCMailProvidersManager.h + core/provider/MCNetService.h + core/provider/MCProvider.h + core/renderer/MCAddressDisplay.h + core/renderer/MCDateFormatter.h + core/renderer/MCHTMLBodyRendererTemplateCallback.h + core/renderer/MCHTMLRenderer.h + core/renderer/MCHTMLRendererCallback.h + core/renderer/MCRenderer.h + core/rfc822/MCAttachment.h + core/rfc822/MCMessageBuilder.h + core/rfc822/MCMessageParser.h + core/rfc822/MCMessagePart.h + core/rfc822/MCMultipart.h + core/rfc822/MCRFC822.h + core/smtp/MCSMTP.h + core/smtp/MCSMTPProgressCallback.h + core/smtp/MCSMTPSession.h +) + +set(MAILCORE2_ASYNC_HEADERS + async/MCAsync.h + async/imap/MCAsyncIMAP.h + async/imap/MCIMAPAppendMessageOperation.h + async/imap/MCIMAPAsyncSession.h + async/imap/MCIMAPCapabilityOperation.h + async/imap/MCIMAPCheckAccountOperation.h + async/imap/MCIMAPCopyMessagesOperation.h + async/imap/MCIMAPCustomCommandOperation.h + async/imap/MCIMAPFetchContentOperation.h + async/imap/MCIMAPFetchContentToFileOperation.h + async/imap/MCIMAPFetchFoldersOperation.h + async/imap/MCIMAPFetchMessagesOperation.h + async/imap/MCIMAPFetchNamespaceOperation.h + async/imap/MCIMAPFetchParsedContentOperation.h + async/imap/MCIMAPFolderInfo.h + async/imap/MCIMAPFolderInfoOperation.h + async/imap/MCIMAPFolderStatusOperation.h + async/imap/MCIMAPIdentityOperation.h + async/imap/MCIMAPIdleOperation.h + async/imap/MCIMAPMessageRenderingOperation.h + async/imap/MCIMAPMoveMessagesOperation.h + async/imap/MCIMAPOperation.h + async/imap/MCIMAPOperationCallback.h + async/imap/MCIMAPQuotaOperation.h + async/imap/MCIMAPSearchOperation.h + async/nntp/MCAsyncNNTP.h + async/nntp/MCNNTPAsyncSession.h + async/nntp/MCNNTPFetchAllArticlesOperation.h + async/nntp/MCNNTPFetchArticleOperation.h + async/nntp/MCNNTPFetchHeaderOperation.h + async/nntp/MCNNTPFetchOverviewOperation.h + async/nntp/MCNNTPFetchServerTimeOperation.h + async/nntp/MCNNTPListNewsgroupsOperation.h + async/nntp/MCNNTPOperation.h + async/nntp/MCNNTPOperationCallback.h + async/nntp/MCNNTPPostOperation.h + async/pop/MCAsyncPOP.h + async/pop/MCPOPAsyncSession.h + async/pop/MCPOPFetchHeaderOperation.h + async/pop/MCPOPFetchMessageOperation.h + async/pop/MCPOPFetchMessagesOperation.h + async/pop/MCPOPOperation.h + async/pop/MCPOPOperationCallback.h + async/smtp/MCAsyncSMTP.h + async/smtp/MCSMTPAsyncSession.h + async/smtp/MCSMTPOperation.h + async/smtp/MCSMTPOperationCallback.h +) + +if(NOT WIN32) + set(MAILCORE2_OBJC_HEADERS + objc/MCObjC.h + objc/abstract/MCOAbstract.h + objc/abstract/MCOAbstractMessage.h + objc/abstract/MCOAbstractMessagePart.h + objc/abstract/MCOAbstractMultipart.h + objc/abstract/MCOAbstractPart.h + objc/abstract/MCOAddress.h + objc/abstract/MCOConstants.h + objc/abstract/MCOHTMLRendererDelegate.h + objc/abstract/MCOHTMLRendererIMAPDelegate.h + objc/abstract/MCOMessageHeader.h + objc/imap/MCOIMAP.h + objc/imap/MCOIMAPAppendMessageOperation.h + objc/imap/MCOIMAPBaseOperation.h + objc/imap/MCOIMAPCapabilityOperation.h + objc/imap/MCOIMAPCopyMessagesOperation.h + objc/imap/MCOIMAPCustomCommandOperation.h + objc/imap/MCOIMAPFetchContentOperation.h + objc/imap/MCOIMAPFetchContentToFileOperation.h + objc/imap/MCOIMAPFetchFoldersOperation.h + objc/imap/MCOIMAPFetchMessagesOperation.h + objc/imap/MCOIMAPFetchNamespaceOperation.h + objc/imap/MCOIMAPFetchParsedContentOperation.h + objc/imap/MCOIMAPFolder.h + objc/imap/MCOIMAPFolderInfo.h + objc/imap/MCOIMAPFolderInfoOperation.h + objc/imap/MCOIMAPFolderStatus.h + objc/imap/MCOIMAPFolderStatusOperation.h + objc/imap/MCOIMAPIdentity.h + objc/imap/MCOIMAPIdentityOperation.h + objc/imap/MCOIMAPIdleOperation.h + objc/imap/MCOIMAPMessage.h + objc/imap/MCOIMAPMessagePart.h + objc/imap/MCOIMAPMessageRenderingOperation.h + objc/imap/MCOIMAPMoveMessagesOperation.h + objc/imap/MCOIMAPMultipart.h + objc/imap/MCOIMAPNamespace.h + objc/imap/MCOIMAPNamespaceItem.h + objc/imap/MCOIMAPOperation.h + objc/imap/MCOIMAPPart.h + objc/imap/MCOIMAPQuotaOperation.h + objc/imap/MCOIMAPSearchExpression.h + objc/imap/MCOIMAPSearchOperation.h + objc/imap/MCOIMAPSession.h + objc/nntp/MCONNTP.h + objc/nntp/MCONNTPFetchAllArticlesOperation.h + objc/nntp/MCONNTPFetchArticleOperation.h + objc/nntp/MCONNTPFetchHeaderOperation.h + objc/nntp/MCONNTPFetchOverviewOperation.h + objc/nntp/MCONNTPFetchServerTimeOperation.h + objc/nntp/MCONNTPGroupInfo.h + objc/nntp/MCONNTPListNewsgroupsOperation.h + objc/nntp/MCONNTPOperation.h + objc/nntp/MCONNTPPostOperation.h + objc/nntp/MCONNTPSession.h + objc/pop/MCOPOP.h + objc/pop/MCOPOPFetchHeaderOperation.h + objc/pop/MCOPOPFetchMessageOperation.h + objc/pop/MCOPOPFetchMessagesOperation.h + objc/pop/MCOPOPMessageInfo.h + objc/pop/MCOPOPOperation.h + objc/pop/MCOPOPSession.h + objc/provider/MCOAccountValidator.h + objc/provider/MCOMailProvider.h + objc/provider/MCOMailProvidersManager.h + objc/provider/MCONetService.h + objc/provider/MCOProvider.h + objc/rfc822/MCOAttachment.h + objc/rfc822/MCOMessageBuilder.h + objc/rfc822/MCOMessageParser.h + objc/rfc822/MCOMessagePart.h + objc/rfc822/MCOMultipart.h + objc/rfc822/MCORFC822.h + objc/smtp/MCOSMTP.h + objc/smtp/MCOSMTPOperation.h + objc/smtp/MCOSMTPSendOperation.h + objc/smtp/MCOSMTPSession.h + objc/utils/MCOIndexSet.h + objc/utils/MCOObjectWrapper.h + objc/utils/MCOOperation.h + objc/utils/MCORange.h + objc/utils/MCOUtils.h + objc/utils/NSArray+MCO.h + objc/utils/NSData+MCO.h + objc/utils/NSDictionary+MCO.h + objc/utils/NSError+MCO.h + objc/utils/NSIndexSet+MCO.h + objc/utils/NSObject+MCO.h + objc/utils/NSString+MCO.h + objc/utils/NSValue+MCO.h + ) +endif() + set(public_headers -MailCore.h -core/MCCore.h -core/abstract/MCAbstract.h -core/abstract/MCAbstractMessage.h -core/basetypes/MCBaseTypes.h -core/basetypes/MCAutoreleasePool.h -core/basetypes/MCObject.h -core/basetypes/MCUtils.h -core/basetypes/MCValue.h -core/basetypes/MCString.h -core/basetypes/MCRange.h -core/basetypes/MCICUTypes.h -core/basetypes/MCData.h -core/basetypes/MCDataDecoderUtils.h -core/basetypes/MCDataStreamDecoder.h -core/abstract/MCMessageConstants.h -core/basetypes/MCArray.h -core/basetypes/MCHashMap.h -core/basetypes/MCJSON.h -core/basetypes/MCMD5.h -core/basetypes/MCNull.h -core/basetypes/MCSet.h -core/basetypes/MCHash.h -core/basetypes/MCLog.h -core/basetypes/MCAssert.h -core/basetypes/MCIndexSet.h -core/basetypes/MCOperation.h -core/basetypes/MCOperationQueue.h -core/basetypes/MCLibetpanTypes.h -core/basetypes/MCOperationCallback.h -core/basetypes/MCIterator.h -core/basetypes/MCConnectionLogger.h -core/basetypes/MCHTMLCleaner.h -core/abstract/MCAbstractMessagePart.h -core/abstract/MCAbstractPart.h -core/abstract/MCAbstractMultipart.h -core/abstract/MCAddress.h -core/abstract/MCMessageHeader.h -core/imap/MCIMAP.h -core/imap/MCIMAPFolder.h -core/imap/MCIMAPMessage.h -core/imap/MCIMAPMessagePart.h -core/imap/MCIMAPMultipart.h -core/imap/MCIMAPNamespace.h -core/imap/MCIMAPNamespaceItem.h -core/imap/MCIMAPPart.h -core/imap/MCIMAPProgressCallback.h -core/imap/MCIMAPSearchExpression.h -core/imap/MCIMAPSession.h -core/imap/MCIMAPSyncResult.h -core/imap/MCIMAPFolderStatus.h -core/imap/MCIMAPIdentity.h -core/pop/MCPOP.h -core/pop/MCPOPMessageInfo.h -core/pop/MCPOPProgressCallback.h -core/pop/MCPOPSession.h -core/nntp/MCNNTP.h -core/nntp/MCNNTPGroupInfo.h -core/nntp/MCNNTPProgressCallback.h -core/nntp/MCNNTPSession.h -core/rfc822/MCRFC822.h -core/rfc822/MCAttachment.h -core/rfc822/MCMessageBuilder.h -core/rfc822/MCMessageParser.h -core/rfc822/MCMessagePart.h -core/rfc822/MCMultipart.h -core/smtp/MCSMTP.h -core/smtp/MCSMTPProgressCallback.h -core/smtp/MCSMTPSession.h -core/renderer/MCRenderer.h -core/renderer/MCHTMLRendererCallback.h -core/renderer/MCDateFormatter.h -core/renderer/MCAddressDisplay.h -core/provider/MCProvider.h -core/provider/MCMailProvidersManager.h -core/provider/MCMailProvider.h -core/provider/MCNetService.h -core/provider/MCAccountValidator.h -async/MCAsync.h -async/smtp/MCAsyncSMTP.h -async/smtp/MCSMTPAsyncSession.h -async/smtp/MCSMTPOperation.h -async/smtp/MCSMTPOperationCallback.h -async/imap/MCAsyncIMAP.h -async/imap/MCIMAPAsyncSession.h -async/imap/MCIMAPOperation.h -async/imap/MCIMAPFetchFoldersOperation.h -async/imap/MCIMAPAppendMessageOperation.h -async/imap/MCIMAPCopyMessagesOperation.h -async/imap/MCIMAPMoveMessagesOperation.h -async/imap/MCIMAPFetchMessagesOperation.h -async/imap/MCIMAPFetchContentOperation.h -async/imap/MCIMAPFetchContentToFileOperation.h -async/imap/MCIMAPFetchParsedContentOperation.h -async/imap/MCIMAPIdleOperation.h -async/imap/MCIMAPFolderInfo.h -async/imap/MCIMAPFolderInfoOperation.h -async/imap/MCIMAPFolderStatusOperation.h -async/imap/MCIMAPSearchOperation.h -async/imap/MCIMAPFetchNamespaceOperation.h -async/imap/MCIMAPIdentityOperation.h -async/imap/MCIMAPCapabilityOperation.h -async/imap/MCIMAPQuotaOperation.h -async/imap/MCIMAPOperationCallback.h -async/imap/MCIMAPMessageRenderingOperation.h -async/imap/MCIMAPCustomCommandOperation.h -async/imap/MCIMAPCheckAccountOperation.h -async/pop/MCAsyncPOP.h -async/pop/MCPOPAsyncSession.h -async/pop/MCPOPOperation.h -async/pop/MCPOPFetchHeaderOperation.h -async/pop/MCPOPFetchMessageOperation.h -async/pop/MCPOPFetchMessagesOperation.h -async/pop/MCPOPOperationCallback.h -async/nntp/MCAsyncNNTP.h -async/nntp/MCNNTPAsyncSession.h -async/nntp/MCNNTPOperation.h -async/nntp/MCNNTPFetchHeaderOperation.h -async/nntp/MCNNTPFetchArticleOperation.h -async/nntp/MCNNTPFetchAllArticlesOperation.h -async/nntp/MCNNTPListNewsgroupsOperation.h -async/nntp/MCNNTPFetchOverviewOperation.h -async/nntp/MCNNTPFetchServerTimeOperation.h -async/nntp/MCNNTPPostOperation.h -async/nntp/MCNNTPOperationCallback.h -objc/MCObjC.h -objc/utils/MCOUtils.h -objc/utils/MCOObjectWrapper.h -objc/utils/NSData+MCO.h -objc/utils/NSString+MCO.h -objc/utils/NSDictionary+MCO.h -objc/utils/NSArray+MCO.h -objc/utils/NSObject+MCO.h -objc/utils/NSError+MCO.h -objc/utils/NSValue+MCO.h -objc/utils/MCOOperation.h -objc/abstract/MCOConstants.h -objc/utils/MCOIndexSet.h -objc/utils/MCORange.h -objc/utils/NSIndexSet+MCO.h -objc/abstract/MCOAbstract.h -objc/abstract/MCOAbstractMessage.h -objc/abstract/MCOAbstractMessagePart.h -objc/abstract/MCOAbstractPart.h -objc/abstract/MCOAbstractMultipart.h -objc/abstract/MCOAddress.h -objc/abstract/MCOMessageHeader.h -objc/abstract/MCOHTMLRendererDelegate.h -objc/abstract/MCOHTMLRendererIMAPDelegate.h -objc/imap/MCOIMAP.h -objc/imap/MCOIMAPSession.h -objc/imap/MCOIMAPOperation.h -objc/imap/MCOIMAPBaseOperation.h -objc/imap/MCOIMAPFetchFoldersOperation.h -objc/imap/MCOIMAPFolder.h -objc/imap/MCOIMAPMessage.h -objc/imap/MCOIMAPMessagePart.h -objc/imap/MCOIMAPMultipart.h -objc/imap/MCOIMAPNamespace.h -objc/imap/MCOIMAPNamespaceItem.h -objc/imap/MCOIMAPIdentity.h -objc/imap/MCOIMAPPart.h -objc/imap/MCOIMAPFolderInfoOperation.h -objc/imap/MCOIMAPFolderInfo.h -objc/imap/MCOIMAPFolderStatusOperation.h -objc/imap/MCOIMAPFolderStatus.h -objc/imap/MCOIMAPAppendMessageOperation.h -objc/imap/MCOIMAPCopyMessagesOperation.h -objc/imap/MCOIMAPMoveMessagesOperation.h -objc/imap/MCOIMAPFetchMessagesOperation.h -objc/imap/MCOIMAPFetchContentOperation.h -objc/imap/MCOIMAPFetchContentToFileOperation.h -objc/imap/MCOIMAPFetchParsedContentOperation.h -objc/imap/MCOIMAPSearchOperation.h -objc/imap/MCOIMAPIdleOperation.h -objc/imap/MCOIMAPFetchNamespaceOperation.h -objc/imap/MCOIMAPIdentityOperation.h -objc/imap/MCOIMAPCapabilityOperation.h -objc/imap/MCOIMAPQuotaOperation.h -objc/imap/MCOIMAPSearchExpression.h -objc/imap/MCOIMAPMessageRenderingOperation.h -objc/imap/MCOIMAPCustomCommandOperation.h -objc/rfc822/MCORFC822.h -objc/rfc822/MCOAttachment.h -objc/rfc822/MCOMessageBuilder.h -objc/rfc822/MCOMessageParser.h -objc/rfc822/MCOMessagePart.h -objc/rfc822/MCOMultipart.h -objc/pop/MCOPOP.h -objc/pop/MCOPOPSession.h -objc/pop/MCOPOPOperation.h -objc/pop/MCOPOPFetchHeaderOperation.h -objc/pop/MCOPOPFetchMessageOperation.h -objc/pop/MCOPOPFetchMessagesOperation.h -objc/pop/MCOPOPMessageInfo.h -objc/smtp/MCOSMTP.h -objc/smtp/MCOSMTPSession.h -objc/smtp/MCOSMTPSendOperation.h -objc/smtp/MCOSMTPOperation.h -objc/nntp/MCONNTP.h -objc/nntp/MCONNTPSession.h -objc/nntp/MCONNTPOperation.h -objc/nntp/MCONNTPFetchHeaderOperation.h -objc/nntp/MCONNTPFetchArticleOperation.h -objc/nntp/MCONNTPFetchAllArticlesOperation.h -objc/nntp/MCONNTPListNewsgroupsOperation.h -objc/nntp/MCONNTPFetchOverviewOperation.h -objc/nntp/MCONNTPFetchServerTimeOperation.h -objc/nntp/MCONNTPPostOperation.h -objc/nntp/MCONNTPGroupInfo.h -objc/provider/MCOProvider.h -objc/provider/MCONetService.h -objc/provider/MCOMailProvider.h -objc/provider/MCOMailProvidersManager.h -objc/provider/MCOAccountValidator.h + MailCore.h + ${MAILCORE2_CORE_HEADERS} + ${MAILCORE2_ASYNC_HEADERS} + ${MAILCORE2_OBJC_HEADERS} ) diff --git a/src/core/abstract/MCErrorMessage.cpp b/src/core/abstract/MCErrorMessage.cpp index 1ed4aa2de..af24c5ffd 100644 --- a/src/core/abstract/MCErrorMessage.cpp +++ b/src/core/abstract/MCErrorMessage.cpp @@ -55,9 +55,13 @@ static const char * localizedDescriptionTable[] = { String * mailcore::errorMessageWithErrorCode(ErrorCode errorCode) { + #if defined(ANDROID) + // In Android ErrorCode unsigned, no sense in next check + #else if (errorCode < 0) { return NULL; } + #endif if (errorCode >= sizeof(localizedDescriptionTable) / sizeof(localizedDescriptionTable[0])) { return NULL; } diff --git a/src/core/abstract/MCErrorMessage.h b/src/core/abstract/MCErrorMessage.h index 12abd97bd..58ca25008 100644 --- a/src/core/abstract/MCErrorMessage.h +++ b/src/core/abstract/MCErrorMessage.h @@ -3,9 +3,10 @@ #define MAILCORE_MCERRORMESSAGE_H #include - +#ifdef __cplusplus namespace mailcore { String * errorMessageWithErrorCode(ErrorCode errorCode); } +#endif #endif diff --git a/src/core/abstract/MCMessageConstants.h b/src/core/abstract/MCMessageConstants.h index 58822df9b..5078de773 100644 --- a/src/core/abstract/MCMessageConstants.h +++ b/src/core/abstract/MCMessageConstants.h @@ -259,6 +259,7 @@ namespace mailcore { ErrorYahooSendMessageDailyLimitExceeded, ErrorOutlookLoginViaWebBrowser, ErrorTiscaliSimplePassword, + ErrorCanceled, }; enum PartType { diff --git a/src/core/basetypes/MCAndroid.cpp b/src/core/basetypes/MCAndroid.cpp index ec2b8f782..c42530d80 100644 --- a/src/core/basetypes/MCAndroid.cpp +++ b/src/core/basetypes/MCAndroid.cpp @@ -29,6 +29,7 @@ #include "MCAndroid.h" +#if defined(ANDROID) #define I_AM_QSORT_R //#if defined(LIBC_SCCS) && !defined(lint) @@ -195,3 +196,4 @@ loop: SWAPINIT(a, es); } /* qsort(pn - r, r / es, es, cmp);*/ } +#endif diff --git a/src/core/basetypes/MCArray.cpp b/src/core/basetypes/MCArray.cpp index f00aaa482..160d1dbef 100644 --- a/src/core/basetypes/MCArray.cpp +++ b/src/core/basetypes/MCArray.cpp @@ -10,7 +10,9 @@ #include "MCLog.h" #include "MCUtils.h" #include "MCIterator.h" +#if defined(ANDROID) || defined(__ANDROID__) #include "MCAndroid.h" +#endif using namespace mailcore; diff --git a/src/core/basetypes/MCAssert.c b/src/core/basetypes/MCAssert.c index 564f16485..289ebe354 100644 --- a/src/core/basetypes/MCAssert.c +++ b/src/core/basetypes/MCAssert.c @@ -3,12 +3,23 @@ #include #include +static MCLogger assertHandler = NULL; + +void setMCAssertHandler(MCLogger handler) { + assertHandler = handler; +} + void MCAssertInternal(const char * filename, unsigned int line, int cond, const char * condString) { if (cond) { return; } - fprintf(stderr, "%s:%u: assert %s\n", filename, line, condString); - abort(); + if (assertHandler != NULL) { + assertHandler(filename, line, condString); + } + else { + fprintf(stderr, "%s:%u: assert %s\n", filename, line, condString); + abort(); + } } diff --git a/src/core/basetypes/MCAssert.h b/src/core/basetypes/MCAssert.h index 7858693f8..481b45d8e 100644 --- a/src/core/basetypes/MCAssert.h +++ b/src/core/basetypes/MCAssert.h @@ -3,12 +3,17 @@ #define MAILCORE_MCASSERT_H #include +#include #define MCAssert(cond) MCAssertInternal(__FILE__, __LINE__, cond, #cond) #ifdef __cplusplus extern "C" { -#endif +#endif + + MAILCORE_EXPORT + void setMCAssertHandler(MCLogger handler) CLANG_ANALYZER_NORETURN; + MAILCORE_EXPORT void MCAssertInternal(const char * filename, unsigned int line, int cond, const char * condString) CLANG_ANALYZER_NORETURN; #ifdef __cplusplus diff --git a/src/core/basetypes/MCAutoreleasePool.cpp b/src/core/basetypes/MCAutoreleasePool.cpp index 67e58a78c..bb1fdbb02 100644 --- a/src/core/basetypes/MCAutoreleasePool.cpp +++ b/src/core/basetypes/MCAutoreleasePool.cpp @@ -8,12 +8,28 @@ using namespace mailcore; +#ifdef _MSC_VER +DWORD AutoreleasePool::autoreleasePoolStackKey; + +BOOL CALLBACK AutoreleasePool::initAutoreleasePoolStackKeyCallback(PINIT_ONCE InitOnce, PVOID Parameter, PVOID * lpContext) { + initAutoreleasePoolStackKey(); + return TRUE; +} + +#else pthread_key_t AutoreleasePool::autoreleasePoolStackKey; +#endif + void AutoreleasePool::init() { - static pthread_once_t once = PTHREAD_ONCE_INIT; - pthread_once(&once, initAutoreleasePoolStackKey); +#ifdef _MSC_VER + static INIT_ONCE once = INIT_ONCE_STATIC_INIT; + InitOnceExecuteOnce(&once, initAutoreleasePoolStackKeyCallback, NULL, NULL); +#else + static pthread_once_t once = PTHREAD_ONCE_INIT; + pthread_once(&once, initAutoreleasePoolStackKey); +#endif } AutoreleasePool::AutoreleasePool() @@ -49,17 +65,31 @@ AutoreleasePool::~AutoreleasePool() carray * AutoreleasePool::createAutoreleasePoolStackIfNeeded() { init(); - carray * stack = (carray *) pthread_getspecific(autoreleasePoolStackKey); +#ifdef _MSC_VER + carray * stack = (carray *) TlsGetValue(autoreleasePoolStackKey); +#else + carray * stack = (carray *) pthread_getspecific(autoreleasePoolStackKey); +#endif if (stack != NULL) { return stack; } stack = carray_new(4); +#ifdef _MSC_VER + TlsSetValue(autoreleasePoolStackKey, stack); +#else pthread_setspecific(autoreleasePoolStackKey, stack); - +#endif return stack; } +#ifdef _MSC_VER +void AutoreleasePool::destroyAutoreleasePoolStack() { + void * stack = createAutoreleasePoolStackIfNeeded(); + destroyAutoreleasePoolStack(stack); +} +#endif + void AutoreleasePool::destroyAutoreleasePoolStack(void * value) { carray * stack = (carray *) value; @@ -71,7 +101,11 @@ void AutoreleasePool::destroyAutoreleasePoolStack(void * value) void AutoreleasePool::initAutoreleasePoolStackKey() { +#ifdef _MSC_VER + autoreleasePoolStackKey = TlsAlloc(); +#else pthread_key_create(&autoreleasePoolStackKey, destroyAutoreleasePoolStack); +#endif } AutoreleasePool * AutoreleasePool::currentAutoreleasePool() diff --git a/src/core/basetypes/MCAutoreleasePool.h b/src/core/basetypes/MCAutoreleasePool.h index c3abf4779..55300cc69 100644 --- a/src/core/basetypes/MCAutoreleasePool.h +++ b/src/core/basetypes/MCAutoreleasePool.h @@ -3,7 +3,10 @@ #define MAILCORE_MCAUTORELEASEPOOL_H #include + +#ifndef _MSC_VER #include +#endif #ifdef __cplusplus @@ -18,12 +21,23 @@ namespace mailcore { static void autorelease(Object * obj); +#ifdef _MSC_VER + static void destroyAutoreleasePoolStack(); +#endif + public: // subclass behavior virtual String * description(); private: static void init(); - static pthread_key_t autoreleasePoolStackKey; + +#ifdef _MSC_VER + static DWORD autoreleasePoolStackKey; + static BOOL CALLBACK initAutoreleasePoolStackKeyCallback(PINIT_ONCE InitOnce, PVOID Parameter, PVOID * lpContext); +#else + static pthread_key_t autoreleasePoolStackKey; +#endif + carray * mPoolObjects; static carray * createAutoreleasePoolStackIfNeeded(); static void destroyAutoreleasePoolStack(void *); diff --git a/src/core/basetypes/MCBase64.c b/src/core/basetypes/MCBase64.c index 3596305cf..20785e1d5 100644 --- a/src/core/basetypes/MCBase64.c +++ b/src/core/basetypes/MCBase64.c @@ -112,3 +112,152 @@ char * MCDecodeBase64(const char * in, int len, int * p_outlen) return out; } + +char * MCDecodeBase64ByLines(const char * in, int len, int * p_outlen) { + if (len < 4) { + return NULL; + } + + char * output, * out; + int c1, c2, c3, c4; + const char * end = in + len; + char * end_of_last_line; + + output = malloc((len * 3 / 4) + 1); + if (output == NULL) + return NULL; + out = output; + end_of_last_line = out; + + if (in[0] == '+' && in[1] == ' ') + in += 2; + + int isEOL = 0; + + while (in < end) { + + while (isEOL && in < end && in[0] == 0x20) { + in++; + } + + isEOL = 0; + + if (in == end) { + break; + } + + if (in[0] == 0x0a || in[0] == 0x0d) { + end_of_last_line = output; + isEOL = 1; + in++; + continue; + } + + c1 = in[0]; + in++; + + c2 = 0; + c3 = 0; + c4 = 0; + + while (in < end) { + + while (isEOL && in < end && in[0] == 0x20) { + in++; + } + + isEOL = 0; + + if (in == end) { + break; + } + + if (in[0] == 0x0a || in[0] == 0x0d) { + isEOL = 1; + in++; + continue; + } + c2 = in[0]; + in++; + break; + } + + while (in < end) { + + while (isEOL && in < end && in[0] == 0x20) { + in++; + } + + isEOL = 0; + + if (in == end) { + break; + } + + if (in[0] == 0x0a || in[0] == 0x0d) { + isEOL = 1; + in++; + continue; + } + c3 = in[0]; + in++; + break; + } + + while (in < end) { + + while (isEOL && in < end && in[0] == 0x20) { + in++; + } + + isEOL = 0; + + if (in == end) { + break; + } + + if (in[0] == 0x0a || in[0] == 0x0d) { + isEOL = 1; + in++; + continue; + } + c4 = in[0]; + in++; + break; + } + + if (CHAR64(c1) == -1 || CHAR64(c2) == -1) { + output = end_of_last_line; + break; + } + + if (c3 > 0) { + if (c3 != '=' && CHAR64(c3) == -1) { + output = end_of_last_line; + break; + } + + if (c4 > 0 && c4 != '=' && CHAR64(c4) == -1) { + output = end_of_last_line; + break; + } + } + + *output++ = (CHAR64(c1) << 2) | (CHAR64(c2) >> 4); + + if (c3 != 0 && c3 != '=') { + *output++ = ((CHAR64(c2) << 4) & 0xf0) | (CHAR64(c3) >> 2); + + if (c4 != 0 && c4 != '=') { + *output++ = ((CHAR64(c3) << 6) & 0xc0) | CHAR64(c4); + } + } + } + + *output = 0; + if (p_outlen != NULL) { + *p_outlen = (int) (output - out); + } + + return out; +} diff --git a/src/core/basetypes/MCBase64.h b/src/core/basetypes/MCBase64.h index 152b3b1b8..3a18598b0 100644 --- a/src/core/basetypes/MCBase64.h +++ b/src/core/basetypes/MCBase64.h @@ -15,6 +15,7 @@ extern "C" { #endif extern char * MCDecodeBase64(const char * in, int len, int * p_outlen); +extern char * MCDecodeBase64ByLines(const char * in, int len, int * p_outlen); extern char * MCEncodeBase64(const char * in, int len); #ifdef __cplusplus diff --git a/src/core/basetypes/MCBaseTypes.h b/src/core/basetypes/MCBaseTypes.h index 3088d4c21..dbcbdf926 100644 --- a/src/core/basetypes/MCBaseTypes.h +++ b/src/core/basetypes/MCBaseTypes.h @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include diff --git a/src/core/basetypes/MCBasicLock.h b/src/core/basetypes/MCBasicLock.h new file mode 100644 index 000000000..5d704f9ea --- /dev/null +++ b/src/core/basetypes/MCBasicLock.h @@ -0,0 +1,29 @@ +#ifndef mailcore2_MCBasicLock_h +#define mailcore2_MCBasicLock_h + +#ifdef _MSC_VER + +#define WIN32_LEAN_AND_MEAN +#include + +#define MCB_LOCK_TYPE SRWLOCK +#define MCB_LOCK_INITIAL_VALUE SRWLOCK_INIT +#define MCB_LOCK_INIT(l) InitializeSRWLock(l) +#define MCB_LOCK_DESTROY(l) +#define MCB_LOCK(l) AcquireSRWLockExclusive(l) +#define MCB_UNLOCK(l) ReleaseSRWLockExclusive(l) + +#else + +#include + +#define MCB_LOCK_TYPE pthread_mutex_t +#define MCB_LOCK_INITIAL_VALUE PTHREAD_MUTEX_INITIALIZER +#define MCB_LOCK_INIT(l) pthread_mutex_init(l, NULL) +#define MCB_LOCK_DESTROY(l) pthread_mutex_destroy(l) +#define MCB_LOCK(l) pthread_mutex_lock(l) +#define MCB_UNLOCK(l) pthread_mutex_unlock(l) + +#endif + +#endif /* mailcore2_MCBasicLock_h */ diff --git a/src/core/basetypes/MCConnectionLoggerUtils.h b/src/core/basetypes/MCConnectionLoggerUtils.h index 055b8c9dc..6b157119e 100644 --- a/src/core/basetypes/MCConnectionLoggerUtils.h +++ b/src/core/basetypes/MCConnectionLoggerUtils.h @@ -11,12 +11,12 @@ #define MAILCORE_MCCONNECTIONLOGGERUTILS_H #include - +#ifdef __cplusplus namespace mailcore { ConnectionLogType getConnectionType(int log_type); bool isBufferFromLogType(int log_type); } - +#endif #endif diff --git a/src/core/basetypes/MCData.cpp b/src/core/basetypes/MCData.cpp index 1fee18aae..92c0b2eb6 100644 --- a/src/core/basetypes/MCData.cpp +++ b/src/core/basetypes/MCData.cpp @@ -7,15 +7,17 @@ #include #include #include +#ifndef _MSC_VER #include -#include +#endif + #if USE_UCHARDET #include #else #include #endif #include -#if __APPLE__ +#if 0 // temporary disable iconv #include #include #endif @@ -147,6 +149,16 @@ unsigned int Data::length() return mLength; } +bool Data::externallyAllocatedMemory() +{ + return mExternallyAllocatedMemory; +} + +BytesDeallocator Data::bytesDeallocator() +{ + return mBytesDeallocator; +} + void Data::increaseCapacity(unsigned int length) { allocate(mLength + length); @@ -215,7 +227,7 @@ static String * normalizeCharset(String * charset) charset = MCSTR("iso-2022-jp-2"); } else if (charset->caseInsensitiveCompare(MCSTR("ks_c_5601-1987")) == 0) { - charset = MCSTR("euckr"); + charset = MCSTR("EUC-KR"); } else if ((charset->caseInsensitiveCompare(MCSTR("iso-8859-8-i")) == 0) || (charset->caseInsensitiveCompare(MCSTR("iso-8859-8-e")) == 0)) { @@ -223,7 +235,13 @@ static String * normalizeCharset(String * charset) } else if ((charset->caseInsensitiveCompare(MCSTR("GB2312")) == 0) || (charset->caseInsensitiveCompare(MCSTR("GB_2312-80")) == 0)) { - charset = MCSTR("GBK"); + charset = MCSTR("GB18030"); + } + else if (charset->caseInsensitiveCompare(MCSTR("koi8_r")) == 0) { + charset = MCSTR("KOI8-R"); + } + else if (charset->caseInsensitiveCompare(MCSTR("koi8_u")) == 0) { + charset = MCSTR("KOI8-U"); } return charset->lowercaseString(); @@ -239,6 +257,19 @@ String * Data::stringWithCharset(const char * charset) return (String *) result->autorelease(); } +static bool isHintWindowsCharset(String * hintCharset) +{ + return hintCharset->hasPrefix(MCSTR("windows-12")) || + hintCharset->hasPrefix(MCSTR("cp12")) || + hintCharset->hasPrefix(MCSTR("ms-")) || + hintCharset->isEqual(MCSTR("winbaltrim")); +} + +static bool isHintCyrillicCharset(String * hintCharset) +{ + return hintCharset->hasPrefix(MCSTR("koi8-r")) || hintCharset->hasPrefix(MCSTR("koi8-u")); +} + static bool isHintCharsetValid(String * hintCharset) { static MC_LOCK_TYPE lock = MC_LOCK_INITIAL_VALUE; @@ -261,7 +292,7 @@ static bool isHintCharsetValid(String * hintCharset) break; if (validCharset == NULL) break; - knownCharset->addObject(String::stringWithUTF8Characters(validCharset)); + knownCharset->addObject(String::stringWithUTF8Characters(validCharset)->lowercaseString()); } uenum_close(iterator); ucsdet_close(detector); @@ -312,16 +343,20 @@ static bool isHintCharsetValid(String * hintCharset) else if (hintCharset->isEqual(MCSTR("koi8-r"))) { return true; } + else if (hintCharset->isEqual(MCSTR("koi8-u"))) { + return true; + } else if (hintCharset->isEqual(MCSTR("euc-kr"))) { return true; } - else if (hintCharset->isEqual(MCSTR("windows-1256"))) { + else if (isHintWindowsCharset(hintCharset)) { return true; } - - // If it's among the known charset, we want to try to detect it - // to validate that it's the correct charset. - if (!knownCharset->containsObject(hintCharset)) { + else if (hintCharset->isEqual(MCSTR("windows-874"))) { + return true; + } + + if (knownCharset->containsObject(hintCharset)) { return true; } } @@ -333,28 +368,28 @@ String * Data::stringWithDetectedCharset(String * hintCharset, bool isHTML) { String * result; String * charset; - + if (hintCharset != NULL) { hintCharset = normalizeCharset(hintCharset); } - if (isHintCharsetValid(hintCharset)) { - charset = hintCharset; + if (hintCharset != NULL && !isHintCharsetValid(hintCharset)) { + hintCharset = NULL; + } + + charset = hintCharset; + + if (charset == NULL) { + charset = charsetWithFilteredHTML(isHTML); } else { - if (hintCharset == NULL) { - charset = charsetWithFilteredHTML(isHTML); - } - else { - charset = charsetWithFilteredHTML(isHTML, hintCharset); - } + charset = charsetWithFilteredHTML(isHTML, charset); } - if (charset == NULL) { charset = MCSTR(MCDATA_DEFAULT_CHARSET); } - + charset = normalizeCharset(charset); - + // Remove whitespace at the end of the string to fix conversion. if (charset->isEqual(MCSTR("iso-2022-jp-2"))) { Data * data = this; @@ -370,6 +405,14 @@ String * Data::stringWithDetectedCharset(String * hintCharset, bool isHTML) } result = stringWithCharset(charset->UTF8Characters()); + if (result == NULL && hintCharset != NULL) { + charset = charsetWithFilteredHTML(isHTML, hintCharset); + if (charset != NULL) { + charset = normalizeCharset(charset); + result = stringWithCharset(charset->UTF8Characters()); + } + } + if (result == NULL) { result = stringWithCharset("iso-8859-1"); } @@ -470,11 +513,11 @@ String * Data::charsetWithFilteredHTML(bool filterHTML, String * hintCharset) break; } } - + if (result == NULL) { + const int32_t barrier = 43; int32_t maxConfidence; - - maxConfidence = 49; + maxConfidence = barrier; for(int32_t i = 0 ; i < matchesCount ; i ++) { const char * cName; @@ -484,9 +527,30 @@ String * Data::charsetWithFilteredHTML(bool filterHTML, String * hintCharset) cName = ucsdet_getName(matches[i], &err); confidence = ucsdet_getConfidence(matches[i], &err); name = String::stringWithUTF8Characters(cName); + name = name->lowercaseString(); + if ((confidence >= barrier) && name->isEqual(hintCharset)) { + result = hintCharset; + break; + } if (confidence > maxConfidence) { - result = name; + if (hintCharset->isEqual(MCSTR("windows-874")) && + name->isEqual(MCSTR("euc-kr"))) { + result = hintCharset; + break; + } + if (hintCharset->isEqual(MCSTR("gb18030")) && + name->isEqual(MCSTR("big5"))) { + result = hintCharset; + break; + } + if ((isHintWindowsCharset(hintCharset) || + isHintCyrillicCharset(hintCharset)) && + name->isEqual(MCSTR("iso-8859-1"))) { + result = hintCharset; + break; + } maxConfidence = confidence; + result = name; } } } @@ -568,6 +632,16 @@ Data * Data::dataWithContentsOfFile(String * filename) Data * Data::decodedDataUsingEncoding(Encoding encoding) { + if (encoding == EncodingBase64) { + int decoded_length; + const char *bytes = MCDecodeBase64ByLines(mBytes, mLength, &decoded_length); + if (bytes) { + Data * data = Data::data(); + data->takeBytesOwnership((char *)bytes, decoded_length, NULL); + return data; + } + return NULL; + } Data * unused = NULL; return MCDecodeData(this, encoding, false, &unused); } @@ -620,7 +694,7 @@ ErrorCode Data::writeToFile(String * filename) return ErrorNone; } -#if __APPLE__ +#if 0 // temporary disable iconv static CFStringEncoding encodingFromCString(const char * charset) { CFStringEncoding encoding; @@ -802,7 +876,7 @@ static int lepMixedConv(const char * tocode, const char * fromcode, } #endif -#if defined(__ANDROID__) || defined(ANDROID) +#if __APPLE__ || defined(__ANDROID__) || defined(ANDROID) || defined(_WIN32) || defined(_WIN64) static int lepMixedConv(const char * tocode, const char * fromcode, const char * str, size_t length, @@ -838,7 +912,11 @@ static void * createObject() INITIALIZE(Data) { Object::registerObjectConstructor("mailcore::Data", &createObject); -#if __APPLE__ || defined(__ANDROID__) || defined(ANDROID) +#if __APPLE__ || defined(__ANDROID__) || defined(ANDROID) || defined(_WIN32) || defined(_WIN64) extended_charconv = lepMixedConv; #endif } + +void Data::destructiveDataClear() { + this->init(); +} diff --git a/src/core/basetypes/MCData.h b/src/core/basetypes/MCData.h index ef7acda3a..f94a10fa9 100644 --- a/src/core/basetypes/MCData.h +++ b/src/core/basetypes/MCData.h @@ -33,6 +33,8 @@ namespace mailcore { virtual char * bytes(); virtual unsigned int length(); + virtual bool externallyAllocatedMemory(); + virtual BytesDeallocator bytesDeallocator(); virtual void increaseCapacity(unsigned int length); @@ -61,7 +63,9 @@ namespace mailcore { void takeBytesOwnership(char * bytes, unsigned int length, BytesDeallocator bytesDeallocator); #ifdef __APPLE__ +#ifdef LEGACY_OBJC_RUNTIME virtual CFDataRef destructiveNSData(); +#endif #endif public: // subclass behavior @@ -72,7 +76,7 @@ namespace mailcore { virtual unsigned int hash(); virtual HashMap * serializable(); virtual void importSerializable(HashMap * serializable); - + void destructiveDataClear(); private: char * mBytes; unsigned int mLength; diff --git a/src/core/basetypes/MCDataDecoderUtils.cpp b/src/core/basetypes/MCDataDecoderUtils.cpp index 4ea739ce8..386366c7e 100644 --- a/src/core/basetypes/MCDataDecoderUtils.cpp +++ b/src/core/basetypes/MCDataDecoderUtils.cpp @@ -3,7 +3,6 @@ #include #include -#include namespace mailcore { diff --git a/src/core/basetypes/MCDataStreamDecoder.cpp b/src/core/basetypes/MCDataStreamDecoder.cpp index 3b24c56e6..157c252a5 100644 --- a/src/core/basetypes/MCDataStreamDecoder.cpp +++ b/src/core/basetypes/MCDataStreamDecoder.cpp @@ -1,3 +1,5 @@ +#include "MCWin32.h" // should be first include. + #include "MCDataStreamDecoder.h" #include "MCString.h" diff --git a/src/core/basetypes/MCDefines.h b/src/core/basetypes/MCDefines.h index 5068618b4..5f0155a13 100644 --- a/src/core/basetypes/MCDefines.h +++ b/src/core/basetypes/MCDefines.h @@ -2,6 +2,12 @@ #define MCDEFINES_H_ +#if defined(__APPLE__) || defined(__ANDROID__) || defined(_MSC_VER) +#define MC_HAS_GCD 1 +#else +#define MC_HAS_GCD 0 +#endif + #ifdef _MSC_VER #pragma section(".CRT$XCU",read) diff --git a/src/core/basetypes/MCHTMLCleaner.cpp b/src/core/basetypes/MCHTMLCleaner.cpp index f3ff9c212..7a1301bfd 100644 --- a/src/core/basetypes/MCHTMLCleaner.cpp +++ b/src/core/basetypes/MCHTMLCleaner.cpp @@ -11,12 +11,13 @@ #include "MCString.h" #include "MCData.h" -#if defined(ANDROID) || defined(__ANDROID__) +#if defined(ANDROID) typedef unsigned long ulong; #endif -#include -#include +#include + +#include #include "MCUtils.h" #include "MCLog.h" diff --git a/src/core/basetypes/MCICUTypes.h b/src/core/basetypes/MCICUTypes.h index cf3bfa42c..3ca5bbcd2 100644 --- a/src/core/basetypes/MCICUTypes.h +++ b/src/core/basetypes/MCICUTypes.h @@ -10,12 +10,37 @@ #define MAILCORE_MCICUTYPES_H -#ifdef _MSC_VER -typedef wchar_t UChar; +/** + * UChar + * + * The base type for UTF-16 code units and pointers. + * Unsigned 16-bit integer. + * Starting with ICU 59, C++ API uses char16_t directly, while C API continues to use UChar. + * + * UChar is configurable by defining the macro UCHAR_TYPE + * on the preprocessor or compiler command line: + * -DUCHAR_TYPE=uint16_t or -DUCHAR_TYPE=wchar_t (if U_SIZEOF_WCHAR_T==2) etc. + * (The UCHAR_TYPE can also be #defined earlier in this file, for outside the ICU library code.) + * This is for transitional use from application code that uses uint16_t or wchar_t for UTF-16. + * + * The default is UChar=char16_t. + * + * C++11 defines char16_t as bit-compatible with uint16_t, but as a distinct type. + * + * In C, char16_t is a simple typedef of uint_least16_t. + * ICU requires uint_least16_t=uint16_t for data memory mapping. + * On macOS, char16_t is not available because the uchar.h standard header is missing. + * + * @stable ICU 4.4 + */ + +#if defined(_MSC_VER) || defined(ANDROID) +#include #elif defined(__CHAR16_TYPE__) typedef __CHAR16_TYPE__ UChar; #else typedef uint16_t UChar; #endif -#endif +#endif /* MAILCORE_MCICUTYPES_H */ + diff --git a/src/core/basetypes/MCIndexSet.cpp b/src/core/basetypes/MCIndexSet.cpp index 191a1588d..50bfb7316 100644 --- a/src/core/basetypes/MCIndexSet.cpp +++ b/src/core/basetypes/MCIndexSet.cpp @@ -70,12 +70,17 @@ IndexSet * IndexSet::indexSetWithIndex(uint64_t idx) return result; } -unsigned int IndexSet::count() +uint64_t IndexSet::count() { - unsigned int total = 0; + + uint64_t total = 0; for(unsigned int i = 0 ; i < mCount ; i ++) { + if (mRanges[i].length == UINT64_MAX) { + return UINT64_MAX; + } total += mRanges[i].length + 1; } + return total; } diff --git a/src/core/basetypes/MCIndexSet.h b/src/core/basetypes/MCIndexSet.h index 5fd66cfaf..6c94c4882 100644 --- a/src/core/basetypes/MCIndexSet.h +++ b/src/core/basetypes/MCIndexSet.h @@ -28,7 +28,7 @@ namespace mailcore { static IndexSet * indexSetWithRange(Range range); static IndexSet * indexSetWithIndex(uint64_t idx); - virtual unsigned int count(); + virtual uint64_t count(); virtual void addIndex(uint64_t idx); virtual void removeIndex(uint64_t idx); virtual bool containsIndex(uint64_t idx); diff --git a/src/core/basetypes/MCLibetpan.cpp b/src/core/basetypes/MCLibetpan.cpp index 918061104..38a8f32d1 100644 --- a/src/core/basetypes/MCLibetpan.cpp +++ b/src/core/basetypes/MCLibetpan.cpp @@ -36,9 +36,20 @@ time_t mailcore::timestampFromDate(struct mailimf_date_time * date_time) tmval.tm_hour = date_time->dt_hour; tmval.tm_mday = date_time->dt_day; tmval.tm_mon = date_time->dt_month - 1; + // workaround when century is not given in year if (date_time->dt_year < 1000) { - // workaround when century is not given in year - tmval.tm_year = date_time->dt_year + 2000 - 1900; + // Fix for 2038 issue on 32-bit OS: https://en.wikipedia.org/wiki/Year_2038_problem + if (sizeof(void*) == 4) { + if (date_time->dt_year >= 30) { + // If date_time->dt_year > 30, assume that it 1930 < date_time->dt_year + tmval.tm_year = date_time->dt_year; + } else { + tmval.tm_year = date_time->dt_year + 2000 - 1900; + } + } + else { + tmval.tm_year = date_time->dt_year + 2000 - 1900; + } } else { tmval.tm_year = date_time->dt_year - 1900; @@ -177,12 +188,13 @@ static int tmcomp(struct tm * atmp, struct tm * btmp) return result; } + time_t mailcore::mkgmtime(struct tm * tmp) { int dir; int bits; int saved_seconds; - time_t t; + time_t t; struct tm yourtm, mytm; yourtm = *tmp; @@ -199,7 +211,14 @@ time_t mailcore::mkgmtime(struct tm * tmp) ** If time_t is signed, then 0 is the median value, ** if time_t is unsigned, then 1 << bits is median. */ - if(bits > 40) bits = 40; + +#if _MSC_VER + const int max_bits = 34; +#else + const int max_bits = 40; +#endif + + if (bits > max_bits) bits = max_bits; t = (t < 0) ? 0 : ((time_t) 1 << bits); for ( ; ; ) { gmtime_r(&t, &mytm); diff --git a/src/core/basetypes/MCLibetpan.h b/src/core/basetypes/MCLibetpan.h index 4e3bfe974..4e8f86c69 100644 --- a/src/core/basetypes/MCLibetpan.h +++ b/src/core/basetypes/MCLibetpan.h @@ -12,15 +12,17 @@ #include #include +#include +#ifdef __cplusplus namespace mailcore { - time_t timestampFromDate(struct mailimf_date_time * date_time); - time_t timestampFromIMAPDate(struct mailimap_date_time * date_time); - struct mailimf_date_time * dateFromTimestamp(time_t timeval); - struct mailimap_date_time * imapDateFromTimestamp(time_t timeval); - time_t mkgmtime(struct tm * tmp); + MAILCORE_EXPORT time_t timestampFromDate(struct mailimf_date_time * date_time); + MAILCORE_EXPORT time_t timestampFromIMAPDate(struct mailimap_date_time * date_time); + MAILCORE_EXPORT struct mailimf_date_time * dateFromTimestamp(time_t timeval); + MAILCORE_EXPORT struct mailimap_date_time * imapDateFromTimestamp(time_t timeval); + MAILCORE_EXPORT time_t mkgmtime(struct tm * tmp); } - +#endif #endif diff --git a/src/core/basetypes/MCLock.h b/src/core/basetypes/MCLock.h index 1717a602b..1e958edb2 100644 --- a/src/core/basetypes/MCLock.h +++ b/src/core/basetypes/MCLock.h @@ -9,14 +9,24 @@ #ifndef mailcore2_MCLock_h #define mailcore2_MCLock_h -#if __APPLE__ +#ifdef _MSC_VER -#include +#define WIN32_LEAN_AND_MEAN +#include -#define MC_LOCK_TYPE OSSpinLock -#define MC_LOCK_INITIAL_VALUE OS_SPINLOCK_INIT -#define MC_LOCK(l) OSSpinLockLock(l) -#define MC_UNLOCK(l) OSSpinLockUnlock(l) +#define MC_LOCK_TYPE SRWLOCK +#define MC_LOCK_INITIAL_VALUE SRWLOCK_INIT +#define MC_LOCK(l) AcquireSRWLockExclusive(l) +#define MC_UNLOCK(l) ReleaseSRWLockExclusive(l) + +#elif __APPLE__ + +#include + +#define MC_LOCK_TYPE os_unfair_lock +#define MC_LOCK_INITIAL_VALUE OS_UNFAIR_LOCK_INIT +#define MC_LOCK(l) os_unfair_lock_lock(l) +#define MC_UNLOCK(l) os_unfair_lock_unlock(l) #else diff --git a/src/core/basetypes/MCLog.cpp b/src/core/basetypes/MCLog.cpp index 386ac422e..46f863a67 100644 --- a/src/core/basetypes/MCLog.cpp +++ b/src/core/basetypes/MCLog.cpp @@ -10,12 +10,15 @@ #include #include #include -#endif #include +#endif + #if __APPLE__ #include #endif +#include + #if defined(ANDROID) || defined(__ANDROID__) #include #endif @@ -28,6 +31,12 @@ INITIALIZE(Log) sPid = getpid(); } +static MCLogger externalLogger = NULL; + +void setMCLogger(MCLogger logger) { + externalLogger = logger; +} + static void logInternalv(FILE * file, const char * user, const char * filename, unsigned int line, int dumpStack, const char * format, va_list argp); @@ -62,7 +71,14 @@ static void logInternalv(FILE * file, struct timeval tv; struct tm tm_value; - pthread_t thread_id = pthread_self(); + + if (externalLogger != NULL) { + char * message; + vasprintf(&message, format, argp); + externalLogger(filename, line, message); + free(message); + return; + } #if defined(ANDROID) || defined(__ANDROID__) __android_log_vprint(ANDROID_LOG_INFO, filename, format, argp); @@ -82,13 +98,18 @@ static void logInternalv(FILE * file, } else { unsigned long threadValue; +#ifdef _WIN32 + threadValue = GetCurrentThreadId(); +#else + pthread_t thread_id = pthread_self(); #ifdef _MACH_PORT_T threadValue = pthread_mach_thread_np(thread_id); -#elif _MSC_VER - threadValue = (unsigned long) thread_id.p; #else threadValue = (unsigned long) thread_id; #endif + +#endif /* _WIN32 */ + fprintf(file, "[%i:%lx] %s:%u: ", sPid, threadValue, filename, line); } vfprintf(file, format, argp); diff --git a/src/core/basetypes/MCLog.h b/src/core/basetypes/MCLog.h index 5f3efdb5b..edebe4dc8 100644 --- a/src/core/basetypes/MCLog.h +++ b/src/core/basetypes/MCLog.h @@ -24,6 +24,12 @@ extern "C" { unsigned int line, int dumpStack, const char * format, ...) __printflike(5, 6); + + typedef void (*MCLogger)(const char * filename, unsigned int line, const char * message); + + MAILCORE_EXPORT + void setMCLogger(MCLogger logger) CLANG_ANALYZER_NORETURN; + #ifdef __cplusplus } #endif diff --git a/src/core/basetypes/MCMainThreadWin32.cpp b/src/core/basetypes/MCMainThreadWin32.cpp index dcc342635..692fa87fb 100644 --- a/src/core/basetypes/MCMainThreadWin32.cpp +++ b/src/core/basetypes/MCMainThreadWin32.cpp @@ -10,7 +10,6 @@ #include "MCMainThread.h" #include -#include #include #include "MCDefines.h" diff --git a/src/core/basetypes/MCNull.cpp b/src/core/basetypes/MCNull.cpp index 53d50622b..b8ff537f4 100644 --- a/src/core/basetypes/MCNull.cpp +++ b/src/core/basetypes/MCNull.cpp @@ -8,18 +8,45 @@ #include "MCNull.h" +#ifdef _MSC_VER +#define WIN32_LEAN_AND_MEAN +#include +#else +#import +#endif + using namespace mailcore; static Null * s_null = NULL; -static pthread_once_t s_once; static void init_null(void) { - s_null = new Null(); + s_null = new Null(); +} + +#ifdef _MSC_VER + +INIT_ONCE s_once = INIT_ONCE_STATIC_INIT; + +BOOL CALLBACK init_null_callback(PINIT_ONCE InitOnce, PVOID Parameter, PVOID * lpContext) { + init_null(); + return TRUE; } +#else + +static pthread_once_t s_once; + +#endif /* _WIN32 */ + + + Null * Null::null() { +#ifdef _MSC_VER + InitOnceExecuteOnce(&s_once, init_null_callback, NULL, NULL); +#else pthread_once(&s_once, init_null); +#endif return s_null; } diff --git a/src/core/basetypes/MCObject.cpp b/src/core/basetypes/MCObject.cpp index 6f776ef67..ac67fe9a0 100644 --- a/src/core/basetypes/MCObject.cpp +++ b/src/core/basetypes/MCObject.cpp @@ -9,6 +9,8 @@ #include #if __APPLE__ #include +#elif defined(_MSC_VER) +#include #endif #include "MCAutoreleasePool.h" @@ -22,6 +24,12 @@ #include "MCHashMap.h" #include "MCLock.h" +#if defined(ANDROID) || defined(__ANDROID__) +// TODO: remove when swift toolchain updated to 15c +#include +#include +#endif + using namespace mailcore; bool mailcore::zombieEnabled = 0; @@ -33,12 +41,19 @@ Object::Object() Object::~Object() { +#ifdef _MSC_VER +#elif __APPLE__ +#else + pthread_mutex_destroy(&mLock); +#endif } void Object::init() { -#if __APPLE__ - mLock = OS_SPINLOCK_INIT; +#ifdef _MSC_VER + mLock = SRWLOCK_INIT; +#elif __APPLE__ + mLock = OS_UNFAIR_LOCK_INIT; #else pthread_mutex_init(&mLock, NULL); #endif @@ -73,7 +88,7 @@ void Object::release() } if (mCounter < 0) { MCLog("release too much %p %s", this, MCUTF8(className())); - MCAssert(0); + //MCAssert(0); } MC_UNLOCK(&mLock); @@ -85,6 +100,7 @@ void Object::release() } } +//Add Swift autorelease call #ifndef __APPLE__ Object * Object::autorelease() { @@ -95,7 +111,6 @@ Object * Object::autorelease() String * Object::className() { - int status; #ifdef _MSC_VER String * result = String::uniquedStringWithUTF8Characters(typeid(*this).name()); // typeid(*this).name() will return "class mailcore::Object". Therefore, we'll strip the prefix "class " from it. @@ -103,7 +118,9 @@ String * Object::className() result = result->substringFromIndex(6); } #else - char * unmangled = abi::__cxa_demangle(typeid(* this).name(), NULL, NULL, &status); + int status; + const char* typeName = typeid(* this).name(); + char * unmangled = abi::__cxa_demangle(typeName, NULL, NULL, &status); String * result = String::uniquedStringWithUTF8Characters(unmangled); free(unmangled); #endif @@ -143,18 +160,36 @@ struct mainThreadCallData { void * caller; }; -static pthread_once_t delayedPerformOnce = PTHREAD_ONCE_INIT; static chash * delayedPerformHash = NULL; -static pthread_mutex_t delayedPerformLock = PTHREAD_MUTEX_INITIALIZER; +static MC_LOCK_TYPE delayedPerformLock = MC_LOCK_INITIAL_VALUE; static void reallyInitDelayedPerform() { delayedPerformHash = chash_new(CHASH_DEFAULTSIZE, CHASH_COPYKEY); } +#ifdef _MSC_VER + +static INIT_ONCE delayedPerformOnce = INIT_ONCE_STATIC_INIT; + +BOOL CALLBACK reallyInitDelayedPerformCallback(PINIT_ONCE InitOnce, PVOID Parameter, PVOID * lpContext) { + reallyInitDelayedPerform(); + return TRUE; +} + +#else + +static pthread_once_t delayedPerformOnce = PTHREAD_ONCE_INIT; + +#endif + static void initDelayedPerform() { +#ifdef _MSC_VER + InitOnceExecuteOnce(&delayedPerformOnce, reallyInitDelayedPerformCallback, NULL, NULL); +#else pthread_once(&delayedPerformOnce, reallyInitDelayedPerform); +#endif } struct mainThreadCallKeyData { @@ -169,7 +204,7 @@ static void removeFromPerformHash(Object * obj, Object::Method method, void * co chashdatum key; struct mainThreadCallKeyData keyData; Object * queueIdentifier = NULL; -#if __APPLE__ +#if MC_HAS_GCD if (targetDispatchQueue != NULL) { queueIdentifier = (Object *) dispatch_queue_get_specific((dispatch_queue_t) targetDispatchQueue, "MCDispatchQueueID"); } @@ -182,9 +217,9 @@ static void removeFromPerformHash(Object * obj, Object::Method method, void * co key.data = &keyData; key.len = sizeof(keyData); - pthread_mutex_lock(&delayedPerformLock); + MC_LOCK(&delayedPerformLock); chash_delete(delayedPerformHash, (chashdatum *) &key, NULL); - pthread_mutex_unlock(&delayedPerformLock); + MC_UNLOCK(&delayedPerformLock); } static void queueIdentifierDestructor(void * identifier) @@ -200,7 +235,7 @@ static void addToPerformHash(Object * obj, Object::Method method, void * context chashdatum value; struct mainThreadCallKeyData keyData; Object * queueIdentifier = NULL; -#if __APPLE__ +#if MC_HAS_GCD if (targetDispatchQueue == NULL) { queueIdentifier = NULL; } @@ -221,9 +256,9 @@ static void addToPerformHash(Object * obj, Object::Method method, void * context key.len = sizeof(keyData); value.data = performValue; value.len = 0; - pthread_mutex_lock(&delayedPerformLock); + MC_LOCK(&delayedPerformLock); chash_set(delayedPerformHash, &key, &value, NULL); - pthread_mutex_unlock(&delayedPerformLock); + MC_UNLOCK(&delayedPerformLock); } static void * getFromPerformHash(Object * obj, Object::Method method, void * context, void * targetDispatchQueue) @@ -234,7 +269,7 @@ static void * getFromPerformHash(Object * obj, Object::Method method, void * con int r; Object * queueIdentifier = NULL; -#if __APPLE__ +#if MC_HAS_GCD if (targetDispatchQueue != NULL) { queueIdentifier = (Object *) dispatch_queue_get_specific((dispatch_queue_t) targetDispatchQueue, "MCDispatchQueueID"); if (queueIdentifier == NULL) @@ -249,9 +284,9 @@ static void * getFromPerformHash(Object * obj, Object::Method method, void * con key.data = &keyData; key.len = sizeof(keyData); - pthread_mutex_lock(&delayedPerformLock); + MC_LOCK(&delayedPerformLock); r = chash_get(delayedPerformHash, &key, &value); - pthread_mutex_unlock(&delayedPerformLock); + MC_UNLOCK(&delayedPerformLock); if (r < 0) return NULL; @@ -274,25 +309,8 @@ static void performOnMainThread(void * info) free(data); } - -static void performAfterDelay(void * info) -{ - struct mainThreadCallData * data; - void * context; - Object * obj; - Object::Method method; - - data = (struct mainThreadCallData *) info; - obj = data->obj; - context = data->context; - method = data->method; - - removeFromPerformHash(obj, method, context, NULL); - (obj->*method)(context); - - free(data); -} - + +#if !defined(__ANDROID__) void Object::performMethodOnMainThread(Method method, void * context, bool waitUntilDone) { struct mainThreadCallData * data; @@ -310,8 +328,9 @@ void Object::performMethodOnMainThread(Method method, void * context, bool waitU callOnMainThread(performOnMainThread, data); } } +#endif -#if __APPLE__ +#if MC_HAS_GCD void Object::performMethodOnDispatchQueue(Method method, void * context, void * targetDispatchQueue, bool waitUntilDone) { if (waitUntilDone) { @@ -338,8 +357,10 @@ void Object::performMethodOnDispatchQueueAfterDelay(Method method, void * contex initDelayedPerform(); __block bool cancelled = false; - + + void (^dupCancelableBlock)(bool cancel) = NULL; void (^cancelableBlock)(bool cancel) = ^(bool cancel) { + Block_release(dupCancelableBlock); if (cancel) { cancelled = true; return; @@ -349,7 +370,7 @@ void Object::performMethodOnDispatchQueueAfterDelay(Method method, void * contex } }; - void (^dupCancelableBlock)(bool cancel) = Block_copy(cancelableBlock); + dupCancelableBlock = Block_copy(cancelableBlock); retain(); addToPerformHash(this, method, context, targetDispatchQueue, (void *) dupCancelableBlock); @@ -381,8 +402,8 @@ void Object::cancelDelayedPerformMethodOnDispatchQueue(Method method, void * con void Object::performMethodAfterDelay(Method method, void * context, double delay) { -#if __APPLE__ - performMethodOnDispatchQueueAfterDelay(method, context, dispatch_get_main_queue(), delay); +#if MC_HAS_GCD + performMethodOnDispatchQueueAfterDelay(method, context, Object::getMainQueue(), delay); #else initDelayedPerform(); @@ -399,8 +420,8 @@ void Object::performMethodAfterDelay(Method method, void * context, double delay void Object::cancelDelayedPerformMethod(Method method, void * context) { -#if __APPLE__ - cancelDelayedPerformMethodOnDispatchQueue(method, context, dispatch_get_main_queue()); +#if MC_HAS_GCD + cancelDelayedPerformMethodOnDispatchQueue(method, context, Object::getMainQueue()); #else initDelayedPerform(); @@ -426,6 +447,15 @@ void Object::importSerializable(HashMap * serializable) MCAssert(0); } +#ifdef _MSC_VER + +BOOL CALLBACK Object::initObjectConstructorsCallback(PINIT_ONCE InitOnce, PVOID Parameter, PVOID * lpContext) { + initObjectConstructors(); + return TRUE; +} + +#endif + static chash * constructors = NULL; void Object::initObjectConstructors() @@ -435,9 +465,14 @@ void Object::initObjectConstructors() void Object::registerObjectConstructor(const char * className, void * (* objectConstructor)(void)) { +#ifdef _MSC_VER + INIT_ONCE once = INIT_ONCE_STATIC_INIT; + InitOnceExecuteOnce(&once, initObjectConstructorsCallback, NULL, NULL); +#else static pthread_once_t once = PTHREAD_ONCE_INIT; - pthread_once(&once, initObjectConstructors); - + pthread_once(&once, initObjectConstructors); +#endif + chashdatum key; chashdatum value; key.data = (void *) className; @@ -469,3 +504,23 @@ Object * Object::objectWithSerializable(HashMap * serializable) return obj->autorelease(); } +#if defined(__ANDROID__) +dispatch_queue_t mailcore::mainQueue = NULL; +#endif + +#if MC_HAS_GCD +dispatch_queue_t Object::getMainQueue() +{ + #if defined(__ANDROID__) + dispatch_queue_t queue = mailcore::mainQueue; + // You should set mainQueue before using MailCore + assert(queue != NULL); + dispatch_retain(queue); + return queue; + #else + return dispatch_get_main_queue(); + #endif + +} +#endif + diff --git a/src/core/basetypes/MCObject.h b/src/core/basetypes/MCObject.h index 83d6c1a7c..15ff208b9 100644 --- a/src/core/basetypes/MCObject.h +++ b/src/core/basetypes/MCObject.h @@ -2,10 +2,43 @@ #define MAILCORE_MCOBJECT_H -#include -#if __APPLE__ +#include + +#if MC_HAS_GCD #include -#include +#endif + +#ifdef _MSC_VER +#define WIN32_LEAN_AND_MEAN +#include +#elif __APPLE__ +#include +#else +#include +#endif + +#if defined(__ANDROID__) +#if __cplusplus +extern "C" { +#endif + + // Create a heap based copy of a Block or simply add a reference to an existing one. + // This must be paired with Block_release to recover memory, even when running + // under Objective-C Garbage Collection. + void *_Block_copy(const void *aBlock); + + // Lose the reference, and if heap based and last reference, recover the memory + void _Block_release(const void *aBlock); + +#if __cplusplus +} +#endif + +// Type correct macros + +#define Block_copy(...) ((__typeof(__VA_ARGS__))_Block_copy((const void *)(__VA_ARGS__))) +#define Block_release(...) _Block_release((const void *)(__VA_ARGS__)) + #endif #include @@ -15,6 +48,11 @@ namespace mailcore { extern bool zombieEnabled; + + #if defined(__ANDROID__) + // Android main queue + extern dispatch_queue_t mainQueue; + #endif class String; class HashMap; @@ -41,9 +79,11 @@ namespace mailcore { typedef void (Object::*Method) (void *); virtual void performMethod(Method method, void * context); +#if !defined(__ANDROID__) virtual void performMethodOnMainThread(Method method, void * context, bool waitUntilDone = false); +#endif virtual void performMethodAfterDelay(Method method, void * context, double delay); -#if __APPLE__ +#if MC_HAS_GCD virtual void performMethodOnDispatchQueue(Method method, void * context, void * targetDispatchQueue, bool waitUntilDone = false); virtual void performMethodOnDispatchQueueAfterDelay(Method method, void * context, void * targetDispatchQueue, double delay); virtual void cancelDelayedPerformMethodOnDispatchQueue(Method method, void * context, void * targetDispatchQueue); @@ -53,12 +93,23 @@ namespace mailcore { // serialization utils static void registerObjectConstructor(const char * className, void * (* objectConstructor)(void)); static Object * objectWithSerializable(HashMap * serializable); - + +#if MC_HAS_GCD + // Druk: in Android dispatch_get_main_queue() return dead queue that not drained + // That's why in Swift we create another queue that called `main` but it executes task NOT on Android main thread + // We store reference for that "main" queue in global variable mailcore::mainQueue + static dispatch_queue_t getMainQueue(); +#endif + public: // private private: -#if __APPLE__ - OSSpinLock mLock; +#ifdef _MSC_VER + SRWLOCK mLock; + static BOOL CALLBACK initObjectConstructorsCallback(PINIT_ONCE InitOnce, PVOID Parameter, PVOID * lpContext); + +#elif __APPLE__ + os_unfair_lock mLock; #else pthread_mutex_t mLock; #endif diff --git a/src/core/basetypes/MCOperation.cpp b/src/core/basetypes/MCOperation.cpp index 51497cbac..1ca36de42 100644 --- a/src/core/basetypes/MCOperation.cpp +++ b/src/core/basetypes/MCOperation.cpp @@ -7,20 +7,23 @@ Operation::Operation() mCallback = NULL; mCancelled = false; mShouldRunWhenCancelled = false; - pthread_mutex_init(&mLock, NULL); -#if __APPLE__ - mCallbackDispatchQueue = dispatch_get_main_queue(); + + MCB_LOCK_INIT(&mLock); + +#if MC_HAS_GCD + mCallbackDispatchQueue = getMainQueue(); #endif } Operation::~Operation() { -#if __APPLE__ +#if MC_HAS_GCD if (mCallbackDispatchQueue != NULL) { dispatch_release(mCallbackDispatchQueue); } #endif - pthread_mutex_destroy(&mLock); + + MCB_LOCK_DESTROY(&mLock); } void Operation::setCallback(OperationCallback * callback) @@ -35,16 +38,21 @@ OperationCallback * Operation::callback() void Operation::cancel() { - pthread_mutex_lock(&mLock); + MCB_LOCK(&mLock); mCancelled = true; - pthread_mutex_unlock(&mLock); + MCB_UNLOCK(&mLock); +} + +void Operation::interrupt() +{ + // Nothing to interrupt by default. } bool Operation::isCancelled() { - pthread_mutex_lock(&mLock); + MCB_LOCK(&mLock); bool value = mCancelled; - pthread_mutex_unlock(&mLock); + MCB_UNLOCK(&mLock); return value; } @@ -75,7 +83,7 @@ void Operation::start() { } -#if __APPLE__ +#if MC_HAS_GCD void Operation::setCallbackDispatchQueue(dispatch_queue_t callbackDispatchQueue) { if (mCallbackDispatchQueue != NULL) { @@ -95,10 +103,10 @@ dispatch_queue_t Operation::callbackDispatchQueue() void Operation::performMethodOnCallbackThread(Method method, void * context, bool waitUntilDone) { -#if __APPLE__ +#if MC_HAS_GCD dispatch_queue_t queue = mCallbackDispatchQueue; if (queue == NULL) { - queue = dispatch_get_main_queue(); + queue = getMainQueue(); } performMethodOnDispatchQueue(method, context, queue, waitUntilDone); #else diff --git a/src/core/basetypes/MCOperation.h b/src/core/basetypes/MCOperation.h index 5ee8b2f4c..14737cdc8 100644 --- a/src/core/basetypes/MCOperation.h +++ b/src/core/basetypes/MCOperation.h @@ -2,8 +2,8 @@ #define MAILCORE_MCOPERATION_H -#include #include +#include #ifdef __cplusplus @@ -20,6 +20,12 @@ namespace mailcore { virtual OperationCallback * callback(); virtual void cancel(); + + /** Aborts whatever this operation is doing right now. Called by the queue, and only while + this operation is the one it is executing - so an implementation may assume it owns the + resource it is about to break. Does nothing by default. */ + virtual void interrupt(); + virtual bool isCancelled(); // Will be called on main thread. @@ -32,7 +38,7 @@ namespace mailcore { virtual void start(); -#ifdef __APPLE__ +#if MC_HAS_GCD virtual void setCallbackDispatchQueue(dispatch_queue_t callbackDispatchQueue); virtual dispatch_queue_t callbackDispatchQueue(); #endif @@ -45,8 +51,8 @@ namespace mailcore { OperationCallback * mCallback; bool mCancelled; bool mShouldRunWhenCancelled; - pthread_mutex_t mLock; -#ifdef __APPLE__ + MCB_LOCK_TYPE mLock; +#if MC_HAS_GCD dispatch_queue_t mCallbackDispatchQueue; #endif diff --git a/src/core/basetypes/MCOperationQueue.cpp b/src/core/basetypes/MCOperationQueue.cpp index bfe3a6fb6..d7ec063c9 100644 --- a/src/core/basetypes/MCOperationQueue.cpp +++ b/src/core/basetypes/MCOperationQueue.cpp @@ -10,38 +10,45 @@ #include "MCArray.h" #include "MCLog.h" #include "MCAutoreleasePool.h" +#if defined(__ANDROID) || defined(ANDROID) #include "MCMainThreadAndroid.h" +#endif #include "MCAssert.h" +#ifdef _MSC_VER +#include +#endif + using namespace mailcore; OperationQueue::OperationQueue() { mOperations = new Array(); mStarted = false; - pthread_mutex_init(&mLock, NULL); + MCB_LOCK_INIT(&mLock); mWaiting = false; mOperationSem = mailsem_new(); mStartSem = mailsem_new(); mStopSem = mailsem_new(); mWaitingFinishedSem = mailsem_new(); mQuitting = false; + mRunningOperation = NULL; mCallback = NULL; -#if __APPLE__ - mDispatchQueue = dispatch_get_main_queue(); +#if MC_HAS_GCD + mDispatchQueue = getMainQueue(); #endif _pendingCheckRunning = false; } OperationQueue::~OperationQueue() { -#if __APPLE__ +#if MC_HAS_GCD if (mDispatchQueue != NULL) { dispatch_release(mDispatchQueue); } #endif MC_SAFE_RELEASE(mOperations); - pthread_mutex_destroy(&mLock); + MCB_LOCK_DESTROY(&mLock); mailsem_free(mOperationSem); mailsem_free(mStartSem); mailsem_free(mStopSem); @@ -50,21 +57,41 @@ OperationQueue::~OperationQueue() void OperationQueue::addOperation(Operation * op) { - pthread_mutex_lock(&mLock); + MCB_LOCK(&mLock); mOperations->addObject(op); - pthread_mutex_unlock(&mLock); + MCB_UNLOCK(&mLock); mailsem_up(mOperationSem); startThread(); } +bool OperationQueue::interruptRunningOperation(Operation * op) +{ + bool interrupted = false; + + // interrupt() runs with the lock held on purpose: releasing it first would let the next + // operation start before the interruption lands, and it would be that one getting cut. The + // lock cannot keep op itself from finishing - main() runs without it - so an interrupt may + // still arrive just after the command completed; that costs a reconnect, nothing worse. + // Safe as long as interrupt() implementations stay non-blocking and never reach back into + // this queue. + MCB_LOCK(&mLock); + if ((op != NULL) && (mRunningOperation == op)) { + op->interrupt(); + interrupted = true; + } + MCB_UNLOCK(&mLock); + + return interrupted; +} + void OperationQueue::cancelAllOperations() { - pthread_mutex_lock(&mLock); + MCB_LOCK(&mLock); for (unsigned int i = 0 ; i < mOperations->count() ; i ++) { Operation * op = (Operation *) mOperations->objectAtIndex(i); op->cancel(); } - pthread_mutex_unlock(&mLock); + MCB_UNLOCK(&mLock); } void OperationQueue::runOperationsOnThread(OperationQueue * queue) @@ -74,9 +101,9 @@ void OperationQueue::runOperationsOnThread(OperationQueue * queue) void OperationQueue::runOperations() { -#if defined(__ANDROID) || defined(ANDROID) - androidSetupThread(); -#endif +//#if defined(__ANDROID) || defined(ANDROID) +// androidSetupThread(); +//#endif MCLog("start thread"); mailsem_up(mStartSem); @@ -90,12 +117,12 @@ void OperationQueue::runOperations() mailsem_down(mOperationSem); - pthread_mutex_lock(&mLock); + MCB_LOCK(&mLock); if (mOperations->count() > 0) { op = (Operation *) mOperations->objectAtIndex(0); } quitting = mQuitting; - pthread_mutex_unlock(&mLock); + MCB_UNLOCK(&mLock); //MCLog("quitting %i %p", mQuitting, op); if ((op == NULL) && quitting) { @@ -103,7 +130,7 @@ void OperationQueue::runOperations() mailsem_up(mStopSem); retain(); // (2) -#if __APPLE__ +#if MC_HAS_GCD performMethodOnDispatchQueue((Object::Method) &OperationQueue::stoppedOnMainThread, NULL, mDispatchQueue, true); #else performMethodOnMainThread((Object::Method) &OperationQueue::stoppedOnMainThread, NULL, true); @@ -116,13 +143,20 @@ void OperationQueue::runOperations() MCAssert(op != NULL); performOnCallbackThread(op, (Object::Method) &OperationQueue::beforeMain, op, true); + // Published only around main(): a cancelled operation whose main() is skipped never counts + // as running, so nobody can mistake an idle connection for a busy one. if (!op->isCancelled() || op->shouldRunWhenCancelled()) { + MCB_LOCK(&mLock); + mRunningOperation = op; + MCB_UNLOCK(&mLock); + op->main(); } op->retain()->autorelease(); - pthread_mutex_lock(&mLock); + MCB_LOCK(&mLock); + mRunningOperation = NULL; mOperations->removeObjectAtIndex(0); if (mOperations->count() == 0) { if (mWaiting) { @@ -130,7 +164,7 @@ void OperationQueue::runOperations() } needsCheckRunning = true; } - pthread_mutex_unlock(&mLock); + MCB_UNLOCK(&mLock); if (!op->isCancelled()) { performOnCallbackThread(op, (Object::Method) &OperationQueue::callbackOnMainThread, op, true); @@ -139,7 +173,7 @@ void OperationQueue::runOperations() if (needsCheckRunning) { retain(); // (1) //MCLog("check running %p", this); -#if __APPLE__ +#if MC_HAS_GCD performMethodOnDispatchQueue((Object::Method) &OperationQueue::checkRunningOnMainThread, this, mDispatchQueue); #else performMethodOnMainThread((Object::Method) &OperationQueue::checkRunningOnMainThread, this); @@ -149,17 +183,21 @@ void OperationQueue::runOperations() pool->release(); } MCLog("cleanup thread %p", this); -#if defined(__ANDROID) || defined(ANDROID) - androidUnsetupThread(); +#if defined(_MSC_VER) + AutoreleasePool::destroyAutoreleasePoolStack(); #endif + +//#if defined(__ANDROID) || defined(ANDROID) +// androidUnsetupThread(); +//#endif } void OperationQueue::performOnCallbackThread(Operation * op, Method method, void * context, bool waitUntilDone) { -#if __APPLE__ +#if MC_HAS_GCD dispatch_queue_t queue = op->callbackDispatchQueue(); if (queue == NULL) { - queue = dispatch_get_main_queue(); + queue = getMainQueue(); } performMethodOnDispatchQueue(method, context, queue, waitUntilDone); #else @@ -188,7 +226,7 @@ void OperationQueue::checkRunningOnMainThread(void * context) { retain(); // (4) if (_pendingCheckRunning) { -#if __APPLE__ +#if MC_HAS_GCD cancelDelayedPerformMethodOnDispatchQueue((Object::Method) &OperationQueue::checkRunningAfterDelay, NULL, mDispatchQueue); #else cancelDelayedPerformMethod((Object::Method) &OperationQueue::checkRunningAfterDelay, NULL); @@ -197,7 +235,7 @@ void OperationQueue::checkRunningOnMainThread(void * context) } _pendingCheckRunning = true; -#if __APPLE__ +#if MC_HAS_GCD performMethodOnDispatchQueueAfterDelay((Object::Method) &OperationQueue::checkRunningAfterDelay, NULL, mDispatchQueue, 1); #else performMethodAfterDelay((Object::Method) &OperationQueue::checkRunningAfterDelay, NULL, 1); @@ -209,7 +247,7 @@ void OperationQueue::checkRunningOnMainThread(void * context) void OperationQueue::checkRunningAfterDelay(void * context) { _pendingCheckRunning = false; - pthread_mutex_lock(&mLock); + MCB_LOCK(&mLock); if (!mQuitting) { if (mOperations->count() == 0) { MCLog("trying to quit %p", this); @@ -217,7 +255,7 @@ void OperationQueue::checkRunningAfterDelay(void * context) mQuitting = true; } } - pthread_mutex_unlock(&mLock); + MCB_UNLOCK(&mLock); // Number of operations can't be changed because it runs on main thread. // And addOperation() should also be called from main thread. @@ -257,7 +295,15 @@ void OperationQueue::startThread() retain(); // (3) mQuitting = false; mStarted = true; - pthread_create(&mThreadID, NULL, (void * (*)(void *)) OperationQueue::runOperationsOnThread, this); +#ifdef _MSC_VER + _beginthread(reinterpret_cast<_beginthread_proc_type>(OperationQueue::runOperationsOnThread), 0, this); +#else + pthread_attr_t attr; + pthread_attr_init(&attr); + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); + pthread_create(&mThreadID, &attr, (void * (*)(void *)) OperationQueue::runOperationsOnThread, this); + pthread_attr_destroy(&attr); +#endif mailsem_down(mStartSem); } @@ -265,9 +311,9 @@ unsigned int OperationQueue::count() { unsigned int count; - pthread_mutex_lock(&mLock); + MCB_LOCK(&mLock); count = mOperations->count(); - pthread_mutex_unlock(&mLock); + MCB_UNLOCK(&mLock); return count; } @@ -301,7 +347,7 @@ void OperationQueue::waitUntilAllOperationsAreFinished() } #endif -#if __APPLE__ +#if MC_HAS_GCD void OperationQueue::setDispatchQueue(dispatch_queue_t dispatchQueue) { if (mDispatchQueue != NULL) { diff --git a/src/core/basetypes/MCOperationQueue.h b/src/core/basetypes/MCOperationQueue.h index 1e8e48445..d6d387eac 100644 --- a/src/core/basetypes/MCOperationQueue.h +++ b/src/core/basetypes/MCOperationQueue.h @@ -2,8 +2,7 @@ #define MAILCORE_MCOPERATIONQUEUE_H -#include -#include +#include #include #include @@ -22,30 +21,44 @@ namespace mailcore { virtual void addOperation(Operation * op); virtual void cancelAllOperations(); + + /** Calls interrupt() on `op` if it is the operation whose main() the queue is executing + right now. The check and the call happen under the queue's lock, so no other operation can + become the running one in between: the interrupt cannot land on whatever started next. + It does not stop `op` itself from finishing - main() runs without the lock - so an + operation that completes just as the caller reaches it gets a harmless interrupt on an + idle stream. Lets a caller abort "the command my operation is running" without the risk + of aborting somebody else's. Returns whether interrupt() was called - a caller that + measures the effect needs to tell "there was a command to break" from "there was + nothing". */ + virtual bool interruptRunningOperation(Operation * op); virtual unsigned int count(); virtual void setCallback(OperationQueueCallback * callback); virtual OperationQueueCallback * callback(); -#ifdef __APPLE__ +#if MC_HAS_GCD virtual void setDispatchQueue(dispatch_queue_t dispatchQueue); virtual dispatch_queue_t dispatchQueue(); #endif private: Array * mOperations; - pthread_t mThreadID; +#ifndef _MSC_VER + pthread_t mThreadID; +#endif bool mStarted; struct mailsem * mOperationSem; struct mailsem * mStartSem; struct mailsem * mStopSem; - pthread_mutex_t mLock; + MCB_LOCK_TYPE mLock; bool mWaiting; struct mailsem * mWaitingFinishedSem; bool mQuitting; + Operation * mRunningOperation; OperationQueueCallback * mCallback; -#if __APPLE__ +#if MC_HAS_GCD dispatch_queue_t mDispatchQueue; #endif bool _pendingCheckRunning; diff --git a/src/core/basetypes/MCString.cpp b/src/core/basetypes/MCString.cpp index 57593dae5..0247eb080 100644 --- a/src/core/basetypes/MCString.cpp +++ b/src/core/basetypes/MCString.cpp @@ -8,17 +8,20 @@ #include #include -#if DISABLE_ICU -#include -#else + #include #include #include -#endif + #if !defined(_MSC_VER) && !defined(ANDROID) && !defined(__ANDROID__) #include #endif -#include + +//FIXME: SPA-58, libxml2 from toolchain should be configured with define +#if defined(__ANDROID__) + #define LIBXML_HTML_ENABLED +#endif + #include #include #include @@ -47,6 +50,7 @@ #define PATH_SEPARATOR_CHAR '\\' #define PATH_SEPARATOR_STRING "\\" #else +#include #define PATH_SEPARATOR_CHAR '/' #define PATH_SEPARATOR_STRING "/" #endif @@ -1145,7 +1149,12 @@ String * String::stringByDecodingMIMEHeaderValue(const char * phrase) } if (!hasEncoding) { - return Data::dataWithBytes(phrase, (unsigned int) strlen(phrase))->stringWithDetectedCharset(); + if (strcasecmp(phrase, "us-ascii") == 0) { + return Data::dataWithBytes("utf-8", (unsigned int) strlen("utf-8"))->stringWithDetectedCharset(); + } + else { + return Data::dataWithBytes(phrase, (unsigned int) strlen(phrase))->stringWithDetectedCharset(); + } } cur_token = 0; @@ -1330,6 +1339,9 @@ void String::appendBytes(const char * bytes, unsigned int length, const char * c if (encoding == kCFStringEncodingGB_2312_80) { encoding = kCFStringEncodingGB_18030_2000; } + if (encoding == kCFStringEncodingEUC_KR) { + encoding = kCFStringEncodingDOSKorean; + } CFRelease(encodingName); } if (encoding == kCFStringEncodingUTF8) { @@ -1338,44 +1350,36 @@ void String::appendBytes(const char * bytes, unsigned int length, const char * c } bool converted = false; - int conversionCount = 0; - while (!converted) { - CFStringRef cfStr = CFStringCreateWithBytes(NULL, (const UInt8 *) bytes, (CFIndex) length, encoding, false); - if (cfStr != NULL) { - converted = true; - CFDataRef data = CFStringCreateExternalRepresentation(NULL, cfStr, kCFStringEncodingUTF16LE, '_'); - if (data != NULL) { - UChar * fixedData = (UChar *) malloc(CFDataGetLength(data)); - memcpy(fixedData, CFDataGetBytePtr(data), CFDataGetLength(data)); - unsigned int length = (unsigned int) CFDataGetLength(data) / 2; - for(int32_t i = 0 ; i < length ; i ++) { - if (fixedData[i] == 0) { - fixedData[i] = ' '; - } + CFStringRef cfStr = CFStringCreateWithBytes(NULL, (const UInt8 *) bytes, (CFIndex) length, encoding, false); + if (cfStr != NULL) { + converted = true; + CFDataRef data = CFStringCreateExternalRepresentation(NULL, cfStr, kCFStringEncodingUTF16LE, '_'); + if (data != NULL) { + UChar * fixedData = (UChar *) malloc(CFDataGetLength(data)); + memcpy(fixedData, CFDataGetBytePtr(data), CFDataGetLength(data)); + unsigned int length = (unsigned int) CFDataGetLength(data) / 2; + for(int32_t i = 0 ; i < length ; i ++) { + if (fixedData[i] == 0) { + fixedData[i] = ' '; } - appendCharactersLength(fixedData, length); - free(fixedData); - CFRelease(data); - } - CFRelease(cfStr); - } - else { - length --; - conversionCount ++; - if (conversionCount > 10) { - // failed. - break; } + appendCharactersLength(fixedData, length); + free(fixedData); + CFRelease(data); } + CFRelease(cfStr); } -#else + if (converted) { + return; + } +#endif UErrorCode err; // ICU uses "IMAP-mailbox-name" as charset name. if (strcasecmp(charset, "mutf-7") == 0) { charset = "IMAP-mailbox-name"; } - + err = U_ZERO_ERROR; UConverter * converter = ucnv_open(charset, &err); if (converter == NULL) { @@ -1388,22 +1392,33 @@ void String::appendBytes(const char * bytes, unsigned int length, const char * c bytes, length, &err); int32_t destCapacity = destLength + 1; UChar * dest = (UChar *) malloc(destCapacity * sizeof(* dest)); + + err = U_ZERO_ERROR; + ucnv_setToUCallBack (converter, + UCNV_TO_U_CALLBACK_SUBSTITUTE, // Ignore any ILLEGAL SEQUENCE or UNASSIGNED_SEQUENCE + NULL, + NULL, + NULL, + &err); + err = U_ZERO_ERROR; destLength = ucnv_toUChars(converter, dest, destCapacity, bytes, length, &err); dest[destLength] = 0; - // Fix in case of bad conversion. - for(int32_t i = 0 ; i < destLength ; i ++) { - if (dest[i] == 0) { - dest[i] = ' '; + if (U_SUCCESS(err)) { + // Fix in case of bad conversion. + for(int32_t i = 0 ; i < destLength ; i ++) { + if (dest[i] == 0) { + dest[i] = ' '; + } } + appendCharactersLength(dest, destLength); + } else { + MCLog("Mailcore Error: Data and encoding are in inconsistent state, encoding = %s\n, error = %i", charset, err); } - appendCharactersLength(dest, destLength); free(dest); - ucnv_close(converter); -#endif } String * String::extractedSubject() @@ -1755,7 +1770,7 @@ static void returnToLineAtBeginningOfBlock(struct parserState * state) static Set * blockElements(void) { static Set * elements = NULL; - MC_LOCK_TYPE lock = MC_LOCK_INITIAL_VALUE; + static MC_LOCK_TYPE lock = MC_LOCK_INITIAL_VALUE; MC_LOCK(&lock); if (elements == NULL) { @@ -2366,7 +2381,7 @@ Array * String::componentsSeparatedByString(String * separator) p = mUnicodeChars; while (1) { UChar * location; -#if 0 +#if _MSC_VER location = u_strstr(p, separator->unicodeCharacters()); if (location == NULL) { break; @@ -2499,18 +2514,36 @@ static void initUniquedStringHash() uniquedStringHash = chash_new(CHASH_DEFAULTSIZE, CHASH_COPYKEY); } +#ifdef _MSC_VER + +BOOL CALLBACK initUniquedStringHashCallback(PINIT_ONCE InitOnce, PVOID Parameter, PVOID * lpContext) { + initUniquedStringHash(); + return TRUE; +} + +#endif + String * String::uniquedStringWithUTF8Characters(const char * UTF8Characters) { chashdatum key; chashdatum value; +#ifdef _MSC_VER + static INIT_ONCE once = INIT_ONCE_STATIC_INIT; +#else static pthread_once_t once = PTHREAD_ONCE_INIT; +#endif int r; if (UTF8Characters == NULL) { return NULL; } - pthread_once(&once, initUniquedStringHash); +#ifdef _MSC_VER + InitOnceExecuteOnce(&once, initUniquedStringHashCallback, NULL, NULL); +#else + pthread_once(&once, initUniquedStringHash); +#endif + key.data = (void *) UTF8Characters; key.len = (unsigned int) strlen(UTF8Characters); MC_LOCK(&lock); diff --git a/src/core/basetypes/MCUtils.h b/src/core/basetypes/MCUtils.h index ef8f3cd37..7d2531031 100644 --- a/src/core/basetypes/MCUtils.h +++ b/src/core/basetypes/MCUtils.h @@ -80,7 +80,11 @@ extern unsigned long long wcstoull(const wchar_t*, wchar_t**, int); #endif #ifndef DEPRECATED_ATTRIBUTE +#ifdef _MSC_VER +#define DEPRECATED_ATTRIBUTE +#else #define DEPRECATED_ATTRIBUTE __attribute__((deprecated)) #endif +#endif #endif diff --git a/src/core/basetypes/MCWin32.cpp b/src/core/basetypes/MCWin32.cpp index 0b9b6ea04..b1bde675d 100644 --- a/src/core/basetypes/MCWin32.cpp +++ b/src/core/basetypes/MCWin32.cpp @@ -1,15 +1,100 @@ #include "MCWin32.h" +#include +#include + +// DSK-658: caller frees. Returns NULL when the input is not valid UTF-8. +static wchar_t * win32_path_to_wide(const char * path) +{ + if (path == NULL) { + return NULL; + } + int count = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, path, -1, NULL, 0); + if (count <= 0) { + return NULL; + } + wchar_t * widePath = (wchar_t *) malloc(count * sizeof(* widePath)); + if (widePath == NULL) { + return NULL; + } + if (MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, path, -1, widePath, count) <= 0) { + free(widePath); + return NULL; + } + return widePath; +} + +static FILE * win32_fopen_narrow(const char * filename, const char * mode) +{ + FILE * f = NULL; + int r = fopen_s(&f, filename, mode); + if (r != 0) { + return NULL; + } + return f; +} FILE * mailcore::win32_fopen(const char * filename, const char * mode) { + if (mode == NULL) { + return win32_fopen_narrow(filename, mode); + } + size_t modeLength = strlen(mode); + wchar_t wideMode[16]; + if (modeLength >= sizeof(wideMode) / sizeof(wideMode[0])) { + return win32_fopen_narrow(filename, mode); + } + wchar_t * wideFilename = win32_path_to_wide(filename); + if (wideFilename == NULL) { + return win32_fopen_narrow(filename, mode); + } + // mode is ASCII by contract, widen it char-by-char + for (size_t i = 0; i <= modeLength; i++) { + wideMode[i] = (wchar_t) (unsigned char) mode[i]; + } FILE * f = NULL; - int r = fopen_s(&f, filename, "rb"); + errno_t r = _wfopen_s(&f, wideFilename, wideMode); + free(wideFilename); if (r != 0) { return NULL; } return f; } +int mailcore::win32_unlink(const char * path) +{ + wchar_t * widePath = win32_path_to_wide(path); + if (widePath == NULL) { + return _unlink(path); + } + int r = _wunlink(widePath); + free(widePath); + return r; +} + +int mailcore::win32_mkdir(const char * path) +{ + wchar_t * widePath = win32_path_to_wide(path); + if (widePath == NULL) { + return _mkdir(path); + } + int r = _wmkdir(widePath); + free(widePath); + return r; +} + +int mailcore::win32_stat(const char * path, struct stat * buffer) +{ + // struct stat is struct _stat64i32 in the UCRT unless _USE_32BIT_TIME_T is set + static_assert(sizeof(struct stat) == sizeof(struct _stat64i32), "unexpected struct stat layout"); + wchar_t * widePath = win32_path_to_wide(path); + if (widePath == NULL) { + return _stat64i32(path, (struct _stat64i32 *) buffer); + } + int r = _wstat64i32(widePath, (struct _stat64i32 *) buffer); + free(widePath); + return r; +} + static const unsigned __int64 epoch = ((unsigned __int64)116444736000000000ULL); /* * timezone information is stored outside the kernel so tzp isn't used anymore. @@ -211,3 +296,46 @@ char * mailcore::win32_mkdtemp(char *path) } } +void * mailcore::win32_mmap(void * start, size_t length, int prot, int flags, int fd, off_t offset) { + struct stat st; + size_t len; + if (!fstat(fd, &st)) { + len = (size_t)st.st_size; + } + else { + fprintf(stderr,"mmap: could not determine filesize"); + return MAP_FAILED; + } + + if ((length + offset) > len) { + length = len - offset; + } + + if (!(flags & MAP_PRIVATE)) { + fprintf(stderr, "Invalid usage of mmap when built with USE_WIN32_MMAP"); + return MAP_FAILED; + } + + HANDLE hmap = CreateFileMapping((HANDLE)_get_osfhandle(fd), 0, PAGE_WRITECOPY, 0, 0, 0); + + if (!hmap) { + return MAP_FAILED; + } + + uint64_t o = offset; + uint32_t l = o & 0xFFFFFFFF; + uint32_t h = (o >> 32) & 0xFFFFFFFF; + + void * temp = MapViewOfFileEx(hmap, FILE_MAP_COPY, h, l, length, start); + + if (!CloseHandle(hmap)) { + fprintf(stderr, "unable to close file mapping handle\n"); + } + + return temp ? temp : MAP_FAILED; +} + +int mailcore::win32_munmap(void * start, size_t length) { + return !UnmapViewOfFile(start); +} + diff --git a/src/core/basetypes/MCWin32.h b/src/core/basetypes/MCWin32.h index 24ec74484..222a9c9f7 100644 --- a/src/core/basetypes/MCWin32.h +++ b/src/core/basetypes/MCWin32.h @@ -21,6 +21,9 @@ #include #include #include +// io.h declares POSIX-compat unlink; must come before the macros below (DSK-658) +#include +#include #define MIN(a,b) (((a)<(b))?(a):(b)) #define MAX(a,b) (((a)>(b))?(a):(b)) @@ -29,8 +32,11 @@ #define strcasestr mailcore::win32_strcasestr #define strdup _strdup #define fileno _fileno -#define unlink _unlink -#define mkdir _mkdir +// DSK-658: paths are UTF-8; narrow CRT calls read them via the ANSI codepage +// and fail on non-ANSI paths, so route them through wide-char wrappers. +#define unlink mailcore::win32_unlink +#define mkdir mailcore::win32_mkdir +#define stat(path, buffer) mailcore::win32_stat(path, buffer) #define fopen mailcore::win32_fopen #define gmtime_r mailcore::win32_gmtime_r #define localtime_r mailcore::win32_localtime_r @@ -42,9 +48,18 @@ #define random mailcore::win32_random #define getpid mailcore::win32_getpid #define mkdtemp mailcore::win32_mkdtemp +#define mmap mailcore::win32_mmap +#define munmap mailcore::win32_munmap #define S_ISDIR(m) ((m & _S_IFDIR) != 0) +#define PROT_READ 1 +#define PROT_WRITE 2 +#define MAP_FAILED ((void*)-1) + +#define MAP_SHARED 0x01 +#define MAP_PRIVATE 0x02 + #ifndef pid_t typedef int pid_t; #endif @@ -58,6 +73,9 @@ namespace mailcore { int win32_gettimeofday(struct timeval * tp, struct timezone * tzp); FILE * win32_fopen(const char * filename, const char * mode); + int win32_unlink(const char * path); + int win32_mkdir(const char * path); + int win32_stat(const char * path, struct stat * buffer); int win32_vasprintf(char **strp, const char *fmt, va_list ap); int win32_snprintf(char * str, size_t size, const char * format, ...); @@ -67,6 +85,9 @@ namespace mailcore { pid_t win32_getpid(void); char * win32_mkdtemp(char *name_template); + + void * win32_mmap(void * start, size_t length, int prot, int flags, int fd, off_t offset); + int win32_munmap(void * start, size_t length); } #endif diff --git a/src/core/imap/MCIMAPPart.cpp b/src/core/imap/MCIMAPPart.cpp index 0c2b6bf44..b6d5905b9 100644 --- a/src/core/imap/MCIMAPPart.cpp +++ b/src/core/imap/MCIMAPPart.cpp @@ -154,7 +154,7 @@ IMAPMessagePart * IMAPPart::attachmentWithIMAPBody1PartMessage(struct mailimap_b nextPartID = NULL; if (message->bd_body->bd_type == MAILIMAP_BODY_1PART) { // msg or 1part - nextPartID = partID->stringByAppendingUTF8Format(".1"); + nextPartID = partID; } else if (message->bd_body->bd_type == MAILIMAP_BODY_MPART) { // mpart diff --git a/src/core/imap/MCIMAPSession.cpp b/src/core/imap/MCIMAPSession.cpp index c0851d276..59b44d044 100644 --- a/src/core/imap/MCIMAPSession.cpp +++ b/src/core/imap/MCIMAPSession.cpp @@ -109,8 +109,8 @@ INITIALIZE(IMAPSEssion) #define MAX_IDLE_DELAY (28 * 60) -#define LOCK() pthread_mutex_lock(&mIdleLock) -#define UNLOCK() pthread_mutex_unlock(&mIdleLock) +#define LOCK() MCB_LOCK(&mIdleLock) +#define UNLOCK() MCB_UNLOCK(&mIdleLock) static struct mailimap_flag_list * flags_to_lep(MessageFlag value) { @@ -359,6 +359,10 @@ static IndexSet * indexSetFromSet(struct mailimap_set * imap_set) return indexSet; } +static void setMailStreamSSLContextServerName(mailstream_ssl_context * ssl_context, void * data) { + mailstream_ssl_set_server_name(ssl_context, static_cast(data)); +} + void IMAPSession::init() { mHostname = NULL; @@ -370,6 +374,7 @@ void IMAPSession::init() mConnectionType = ConnectionTypeClear; mCheckCertificateEnabled = true; mVoIPEnabled = true; + mQResyncCompatible = true; mDelimiter = 0; mBodyProgressEnabled = true; @@ -401,13 +406,13 @@ void IMAPSession::init() mOutlookServer = false; mLastFetchedSequenceNumber = 0; mCurrentFolder = NULL; - pthread_mutex_init(&mIdleLock, NULL); + MCB_LOCK_INIT(&mIdleLock); mState = STATE_DISCONNECTED; mImap = NULL; mProgressCallback = NULL; mProgressItemsCount = 0; mConnectionLogger = NULL; - pthread_mutex_init(&mConnectionLoggerLock, NULL); + MCB_LOCK_INIT(&mConnectionLoggerLock); mAutomaticConfigurationEnabled = true; mAutomaticConfigurationDone = false; mShouldDisconnect = false; @@ -435,8 +440,8 @@ IMAPSession::~IMAPSession() MC_SAFE_RELEASE(mWelcomeString); MC_SAFE_RELEASE(mDefaultNamespace); MC_SAFE_RELEASE(mCurrentFolder); - pthread_mutex_destroy(&mIdleLock); - pthread_mutex_destroy(&mConnectionLoggerLock); + MCB_LOCK_DESTROY(&mIdleLock); + MCB_LOCK_DESTROY(&mConnectionLoggerLock); } void IMAPSession::setHostname(String * hostname) @@ -539,6 +544,16 @@ bool IMAPSession::isVoIPEnabled() return mVoIPEnabled; } +void IMAPSession::setQResyncCompatible(bool compatible) +{ + mQResyncCompatible = compatible; +} + +bool IMAPSession::isQResyncCompatible() +{ + return mQResyncCompatible; +} + String * IMAPSession::loginResponse() { return mLoginResponse; @@ -670,18 +685,36 @@ void IMAPSession::connect(ErrorCode * pError) * pError = ErrorTLSNotAvailable; goto close; } + if (!checkCertificate()) { + MCLog("StartTLS ssl connect certificate ERROR %d", r); + * pError = ErrorCertificate; + goto close; + } + break; case ConnectionTypeTLS: +#if __APPLE__ r = mailimap_ssl_connect_voip(mImap, MCUTF8(mHostname), mPort, isVoIPEnabled()); - MCLog("ssl connect %s %u %u", MCUTF8(mHostname), mPort, r); +#else + // Passing callback to set the server name into SSL context + // Needed for SNI extension for TLS https://en.wikipedia.org/wiki/Server_Name_Indication + // On Apple platforms libetpan uses CFNetwork instead, that's why callback is not needed + r = mailimap_ssl_connect_voip_with_callback(mImap, + MCUTF8(mHostname), + mPort, + isVoIPEnabled(), + setMailStreamSSLContextServerName, + const_cast(static_cast(MCUTF8(mHostname)))); +#endif + MCLog("TLS ssl connect %s %u %u", MCUTF8(mHostname), mPort, r); if (hasError(r)) { MCLog("connect error %i", r); * pError = ErrorConnection; goto close; } if (!checkCertificate()) { - MCLog("ssl connect certificate ERROR %d", r); + MCLog("TLS ssl connect certificate ERROR %d", r); * pError = ErrorCertificate; goto close; } @@ -726,6 +759,7 @@ void IMAPSession::connect(ErrorCode * pError) mHermesServer = (mWelcomeString->locationOfString(MCSTR("Hermes")) != -1); mQipServer = (mWelcomeString->locationOfString(MCSTR("QIP IMAP server")) != -1); mOutlookServer = (mHostname->locationOfString(MCSTR(".outlook.com")) != -1); + mIdeaImapServer = (mWelcomeString->locationOfString(MCSTR("IdeaImapServer")) != -1); } mState = STATE_CONNECTED; @@ -951,6 +985,10 @@ void IMAPSession::login(ErrorCode * pError) else if (response->locationOfString(MCSTR("Login to your account via a web browser")) != -1) { * pError = ErrorOutlookLoginViaWebBrowser; } + else if (response->locationOfString(MCSTR("Service temporarily unavailable")) != -1) { + mShouldDisconnect = true; + * pError = ErrorConnection; + } else { * pError = ErrorAuthentication; } @@ -3025,6 +3063,7 @@ void IMAPSession::fetchMessageAttachmentToFileByChunksByUID(String * folder, uin } if (data == NULL) { + pool->release(); break; } @@ -3156,6 +3195,11 @@ IndexSet * IMAPSession::search(String * folder, IMAPSearchKind kind, String * se expr = IMAPSearchExpression::searchContent(searchString); break; } + case IMAPSearchKindBody: + { + expr = IMAPSearchExpression::searchBody(searchString); + break; + } case IMAPSearchKindRead: { expr = IMAPSearchExpression::searchRead(); @@ -3661,6 +3705,19 @@ void IMAPSession::disconnect() unsetup(); } +void IMAPSession::interruptCurrentCommand() +{ + // mailstream_cancel() must be called while holding the lock: unsetup() nils mImap under it and + // frees the stream right after releasing it, so a pointer grabbed and used outside the lock + // would be a use-after-free. Holding it here is safe - mailstream_cancel() only takes the + // cancel object's own mutex and writes one byte to a pipe, it never blocks. + LOCK(); + if (mImap != NULL && mImap->imap_stream != NULL) { + mailstream_cancel(mImap->imap_stream); + } + UNLOCK(); +} + IMAPIdentity * IMAPSession::identity(IMAPIdentity * clientIdentity, ErrorCode * pError) { connectIfNeeded(pError); @@ -4208,6 +4265,15 @@ void IMAPSession::capabilitySetWithSessionState(IndexSet * capabilities) if (mailimap_has_extension(mImap, (char *)"XYMHIGHESTMODSEQ")) { capabilities->addIndex(IMAPCapabilityXYMHighestModseq); } + if (mailimap_has_uidplus(mImap)) { + capabilities->addIndex(IMAPCapabilityUIDPlus); + } + if (mailimap_has_acl(mImap)) { + capabilities->addIndex(IMAPCapabilityACL); + } + if (mailimap_has_enable(mImap)) { + capabilities->addIndex(IMAPCapabilityEnable); + } applyCapabilities(capabilities); } @@ -4243,8 +4309,10 @@ void IMAPSession::applyCapabilities(IndexSet * capabilities) if (capabilities->containsIndex(IMAPCapabilityCondstore)) { mCondstoreEnabled = true; } - if (capabilities->containsIndex(IMAPCapabilityQResync)) { - mQResyncEnabled = true; + if (mQResyncCompatible) { + if (capabilities->containsIndex(IMAPCapabilityQResync)) { + mQResyncEnabled = true; + } } if (capabilities->containsIndex(IMAPCapabilityXYMHighestModseq)) { mXYMHighestModseqEnabled = true; @@ -4263,6 +4331,10 @@ void IMAPSession::applyCapabilities(IndexSet * capabilities) if (capabilities->containsIndex(IMAPCapabilityCompressDeflate)) { mCompressionEnabled = true; } + if (mIdeaImapServer) { + // IdeaImapServer may send badly encoded folders list which can't be parsed. + mXListEnabled = false; + } } bool IMAPSession::isIdleEnabled() @@ -4337,12 +4409,12 @@ ConnectionLogger * IMAPSession::connectionLogger() void IMAPSession::lockConnectionLogger() { - pthread_mutex_lock(&mConnectionLoggerLock); + MCB_LOCK(&mConnectionLoggerLock); } void IMAPSession::unlockConnectionLogger() { - pthread_mutex_unlock(&mConnectionLoggerLock); + MCB_UNLOCK(&mConnectionLoggerLock); } ConnectionLogger * IMAPSession::connectionLoggerNoLock() @@ -4456,7 +4528,7 @@ bool IMAPSession::enableFeature(String * feature) void IMAPSession::enableFeatures() { if (isCompressionEnabled()) { - ErrorCode error; + ErrorCode error = ErrorNone; enableCompression(&error); if (error != ErrorNone) { MCLog("could not enable compression"); diff --git a/src/core/imap/MCIMAPSession.h b/src/core/imap/MCIMAPSession.h index 40c2743cd..be1fe6004 100644 --- a/src/core/imap/MCIMAPSession.h +++ b/src/core/imap/MCIMAPSession.h @@ -61,6 +61,9 @@ namespace mailcore { virtual void setVoIPEnabled(bool enabled); virtual bool isVoIPEnabled(); + virtual void setQResyncCompatible(bool compatible); + virtual bool isQResyncCompatible(); + // Needed for fetchSubscribedFolders() and fetchAllFolders(). virtual void setDefaultNamespace(IMAPNamespace * ns); virtual IMAPNamespace * defaultNamespace(); @@ -166,6 +169,13 @@ namespace mailcore { virtual void connect(ErrorCode * pError); virtual void disconnect(); + + /** Aborts the command currently running on this session by cancelling its stream: the + blocked read returns immediately instead of waiting out the socket timeout. Safe to call + from another thread while the session's thread is blocked in a command. + Teardown only: the cancelled state of a stream is never reset, so the session is unusable + afterwards and must be disconnected. A later connect() builds a fresh stream. */ + virtual void interruptCurrentCommand(); virtual void noop(ErrorCode * pError); @@ -276,16 +286,18 @@ namespace mailcore { bool mHermesServer; bool mQipServer; bool mOutlookServer; + bool mIdeaImapServer; + bool mQResyncCompatible; unsigned int mLastFetchedSequenceNumber; String * mCurrentFolder; - pthread_mutex_t mIdleLock; + MCB_LOCK_TYPE mIdleLock; int mState; mailimap * mImap; IMAPProgressCallback * mProgressCallback; unsigned int mProgressItemsCount; ConnectionLogger * mConnectionLogger; - pthread_mutex_t mConnectionLoggerLock; + MCB_LOCK_TYPE mConnectionLoggerLock; bool mAutomaticConfigurationEnabled; bool mAutomaticConfigurationDone; bool mShouldDisconnect; diff --git a/src/core/nntp/MCNNTPSession.cpp b/src/core/nntp/MCNNTPSession.cpp index f3e485d06..4af470552 100644 --- a/src/core/nntp/MCNNTPSession.cpp +++ b/src/core/nntp/MCNNTPSession.cpp @@ -49,7 +49,7 @@ void NNTPSession::init() mProgressCallback = NULL; mState = STATE_DISCONNECTED; mConnectionLogger = NULL; - pthread_mutex_init(&mConnectionLoggerLock, NULL); + MCB_LOCK_INIT(&mConnectionLoggerLock); } NNTPSession::NNTPSession() @@ -59,7 +59,7 @@ NNTPSession::NNTPSession() NNTPSession::~NNTPSession() { - pthread_mutex_destroy(&mConnectionLoggerLock); + MCB_LOCK_DESTROY(&mConnectionLoggerLock); MC_SAFE_RELEASE(mHostname); MC_SAFE_RELEASE(mUsername); MC_SAFE_RELEASE(mPassword); @@ -499,6 +499,7 @@ Data * NNTPSession::fetchArticleByMessageID(String * messageID, ErrorCode * pErr msgID = strdup(messageID->UTF8Characters()); r = newsnntp_article_by_message_id(mNNTP, msgID, &content, &content_len); + free(msgID); if (r == NEWSNNTP_ERROR_STREAM) { * pError = ErrorConnection; return NULL; @@ -840,6 +841,7 @@ static int xover_resp_to_fields(struct newsnntp_xover_resp_item * item, struct m r = MAIL_ERROR_MEMORY; goto free_list; } + break; case MAILIMF_ERROR_PARSE: break; @@ -1021,12 +1023,12 @@ void NNTPSession::selectGroup(String * folder, ErrorCode * pError) void NNTPSession::lockConnectionLogger() { - pthread_mutex_lock(&mConnectionLoggerLock); + MCB_LOCK(&mConnectionLoggerLock); } void NNTPSession::unlockConnectionLogger() { - pthread_mutex_unlock(&mConnectionLoggerLock); + MCB_UNLOCK(&mConnectionLoggerLock); } void NNTPSession::setConnectionLogger(ConnectionLogger * logger) diff --git a/src/core/nntp/MCNNTPSession.h b/src/core/nntp/MCNNTPSession.h index 5e371eead..049de499b 100644 --- a/src/core/nntp/MCNNTPSession.h +++ b/src/core/nntp/MCNNTPSession.h @@ -82,7 +82,7 @@ namespace mailcore { int mState; ConnectionLogger * mConnectionLogger; - pthread_mutex_t mConnectionLoggerLock; + MCB_LOCK_TYPE mConnectionLoggerLock; void init(); Data * dataWithFilteredBcc(Data * data); diff --git a/src/core/pop/MCPOPSession.cpp b/src/core/pop/MCPOPSession.cpp index 77452515b..4e9b77515 100644 --- a/src/core/pop/MCPOPSession.cpp +++ b/src/core/pop/MCPOPSession.cpp @@ -36,7 +36,7 @@ void POPSession::init() mProgressCallback = NULL; mState = STATE_DISCONNECTED; mConnectionLogger = NULL; - pthread_mutex_init(&mConnectionLoggerLock, NULL); + MCB_LOCK_INIT(&mConnectionLoggerLock); } POPSession::POPSession() @@ -46,7 +46,7 @@ POPSession::POPSession() POPSession::~POPSession() { - pthread_mutex_destroy(&mConnectionLoggerLock); + MCB_LOCK_DESTROY(&mConnectionLoggerLock); MC_SAFE_RELEASE(mHostname); MC_SAFE_RELEASE(mUsername); MC_SAFE_RELEASE(mPassword); @@ -600,12 +600,12 @@ void POPSession::noop(ErrorCode * pError) void POPSession::lockConnectionLogger() { - pthread_mutex_lock(&mConnectionLoggerLock); + MCB_LOCK(&mConnectionLoggerLock); } void POPSession::unlockConnectionLogger() { - pthread_mutex_unlock(&mConnectionLoggerLock); + MCB_UNLOCK(&mConnectionLoggerLock); } void POPSession::setConnectionLogger(ConnectionLogger * logger) diff --git a/src/core/pop/MCPOPSession.h b/src/core/pop/MCPOPSession.h index f32f9b185..bb1d9ee7c 100644 --- a/src/core/pop/MCPOPSession.h +++ b/src/core/pop/MCPOPSession.h @@ -86,7 +86,7 @@ namespace mailcore { int mState; ConnectionLogger * mConnectionLogger; - pthread_mutex_t mConnectionLoggerLock; + MCB_LOCK_TYPE mConnectionLoggerLock; void init(); void bodyProgress(unsigned int current, unsigned int maximum); diff --git a/src/core/provider/MCAccountValidator.cpp b/src/core/provider/MCAccountValidator.cpp index 82b0a5d43..d56685ea7 100644 --- a/src/core/provider/MCAccountValidator.cpp +++ b/src/core/provider/MCAccountValidator.cpp @@ -68,7 +68,7 @@ void AccountValidator::init() mSmtpEnabled = false; mConnectionLogger = NULL; - pthread_mutex_init(&mConnectionLoggerLock, NULL); + MCB_LOCK_INIT(&mConnectionLoggerLock); } AccountValidator::AccountValidator() @@ -78,7 +78,7 @@ AccountValidator::AccountValidator() AccountValidator::~AccountValidator() { - pthread_mutex_destroy(&mConnectionLoggerLock); + MCB_LOCK_DESTROY(&mConnectionLoggerLock); MC_SAFE_RELEASE(mImapLoginResponse); MC_SAFE_RELEASE(mEmail); MC_SAFE_RELEASE(mUsername); @@ -581,27 +581,27 @@ String * AccountValidator::imapLoginResponse() void AccountValidator::setConnectionLogger(ConnectionLogger * logger) { - pthread_mutex_lock(&mConnectionLoggerLock); + MCB_LOCK(&mConnectionLoggerLock); mConnectionLogger = logger; - pthread_mutex_unlock(&mConnectionLoggerLock); + MCB_UNLOCK(&mConnectionLoggerLock); } ConnectionLogger * AccountValidator::connectionLogger() { ConnectionLogger * result; - pthread_mutex_lock(&mConnectionLoggerLock); + MCB_LOCK(&mConnectionLoggerLock); result = mConnectionLogger; - pthread_mutex_unlock(&mConnectionLoggerLock); + MCB_UNLOCK(&mConnectionLoggerLock); return result; } void AccountValidator::log(void * sender, ConnectionLogType logType, Data * buffer) { - pthread_mutex_lock(&mConnectionLoggerLock); + MCB_LOCK(&mConnectionLoggerLock); if (mConnectionLogger != NULL) { mConnectionLogger->log(this, logType, buffer); } - pthread_mutex_unlock(&mConnectionLoggerLock); + MCB_UNLOCK(&mConnectionLoggerLock); } diff --git a/src/core/provider/MCAccountValidator.h b/src/core/provider/MCAccountValidator.h index a1d6299f0..dd67a7e6e 100644 --- a/src/core/provider/MCAccountValidator.h +++ b/src/core/provider/MCAccountValidator.h @@ -112,7 +112,7 @@ namespace mailcore { bool mPopEnabled; bool mSmtpEnabled; - pthread_mutex_t mConnectionLoggerLock; + MCB_LOCK_TYPE mConnectionLoggerLock; ConnectionLogger * mConnectionLogger; void init(); diff --git a/src/core/provider/MCMXRecordResolverOperation.cpp b/src/core/provider/MCMXRecordResolverOperation.cpp index ac6c82198..8a4ad987e 100644 --- a/src/core/provider/MCMXRecordResolverOperation.cpp +++ b/src/core/provider/MCMXRecordResolverOperation.cpp @@ -8,7 +8,7 @@ #include "MCMXRecordResolverOperation.h" -#if !defined(ANDROID) && !defined(__ANDROID__) +#if !defined(ANDROID) && !defined(__ANDROID__) && !defined(_WIN32) #include #include #endif @@ -45,7 +45,7 @@ Array * MXRecordResolverOperation::mxRecords() void MXRecordResolverOperation::main() { mMXRecords = new Array(); -#if !defined(ANDROID) && !defined(__ANDROID__) +#if !defined(ANDROID) && !defined(__ANDROID__) && !defined(_WIN32) unsigned char response[NS_PACKETSZ]; ns_msg handle; ns_rr rr; diff --git a/src/core/provider/MCMailProvidersManager.cpp b/src/core/provider/MCMailProvidersManager.cpp index a5f7891ac..f802d7ffa 100644 --- a/src/core/provider/MCMailProvidersManager.cpp +++ b/src/core/provider/MCMailProvidersManager.cpp @@ -21,6 +21,10 @@ MailProvidersManager::MailProvidersManager() { init(); } +MailProvidersManager::~MailProvidersManager() { + MC_SAFE_RELEASE(mProviders); +} + MailProvidersManager * MailProvidersManager::sharedManager() { static MailProvidersManager * instance = new MailProvidersManager(); diff --git a/src/core/provider/MCMailProvidersManager.h b/src/core/provider/MCMailProvidersManager.h index 774c2d307..88723563d 100644 --- a/src/core/provider/MCMailProvidersManager.h +++ b/src/core/provider/MCMailProvidersManager.h @@ -30,6 +30,7 @@ namespace mailcore { private: MailProvidersManager(); + ~MailProvidersManager(); void registerProviders(HashMap * providers); HashMap * mProviders; diff --git a/src/core/renderer/MCDateFormatter.cpp b/src/core/renderer/MCDateFormatter.cpp index 4938d5ec4..037eca890 100644 --- a/src/core/renderer/MCDateFormatter.cpp +++ b/src/core/renderer/MCDateFormatter.cpp @@ -215,7 +215,13 @@ void DateFormatter::prepare() localeRef = CFLocaleCreate(NULL, localeIdentifier); } if (localeRef == NULL) { + #if UNIT_TESTS + String *localName = new String("en_US"); + localeIdentifier = CFStringCreateWithCharacters(NULL, localName->unicodeCharacters(), localName->length()); + localeRef = CFLocaleCreate(NULL, localeIdentifier); + #else localeRef = CFLocaleCopyCurrent(); + #endif } mAppleDateFormatter = CFDateFormatterCreate(NULL, localeRef, toAppleStyle(mDateStyle), toAppleStyle(mTimeStyle)); if (mDateFormat != NULL) { @@ -240,7 +246,11 @@ void DateFormatter::prepare() int32_t patternLength = -1; UErrorCode err = U_ZERO_ERROR; const char * locale = NULL; - + + #if UNIT_TESTS + mTimezone = String::stringWithUTF8Characters("America/Los_Angeles"); + #endif + if (mTimezone != NULL) { tzID = mTimezone->unicodeCharacters(); tzIDLength = mTimezone->length(); diff --git a/src/core/renderer/MCHTMLRenderer.cpp b/src/core/renderer/MCHTMLRenderer.cpp index f5b0c989d..73c21807a 100644 --- a/src/core/renderer/MCHTMLRenderer.cpp +++ b/src/core/renderer/MCHTMLRenderer.cpp @@ -332,7 +332,10 @@ static String * htmlForAbstractSinglePart(AbstractPart * part, htmlRendererConte if (data == NULL) { // It may be NULL when mailcore::MessageParser::attachments() is invoked when // when mailcore::MessageParser has been serialized/unserialized. - data = context->rfc822DataCallback->dataForRFC822Part(context->folder, (Attachment *) part); + HTMLRendererRFC822Callback * rfc822DataCallback = context->rfc822DataCallback; + if (rfc822DataCallback != NULL) { + data = rfc822DataCallback->dataForRFC822Part(context->folder, (Attachment *) part); + } } MCAssert(data != NULL); } @@ -356,7 +359,10 @@ static String * htmlForAbstractSinglePart(AbstractPart * part, htmlRendererConte if (data == NULL) { // It may be NULL when mailcore::MessageParser::attachments() is invoked when // when mailcore::MessageParser has been serialized/unserialized. - data = context->rfc822DataCallback->dataForRFC822Part(context->folder, (Attachment *) part); + HTMLRendererRFC822Callback * rfc822DataCallback = context->rfc822DataCallback; + if (rfc822DataCallback != NULL) { + data = rfc822DataCallback->dataForRFC822Part(context->folder, (Attachment *) part); + } } } if (data == NULL) @@ -436,6 +442,10 @@ static String * htmlForAbstractMessagePart(AbstractMessagePart * part, htmlRende if (context->pass == 0) { return NULL; } + + if (!context->htmlCallback->shouldShowPart(part)) + return MCSTR(""); + String * substring = htmlForAbstractPart(part->mainPart(), context); if (substring == NULL) return NULL; @@ -458,13 +468,19 @@ String * htmlForAbstractMultipartAlternative(AbstractMultipart * part, htmlRende if (preferredAlternative == NULL) return MCSTR(""); - // Exchange sends calendar invitation as alternative part. We need to extract it. AbstractPart * calendar = NULL; - for(unsigned int i = 0 ; i < part->parts()->count() ; i ++) { + for(unsigned int i = 0; i < part->parts()->count(); i++) { AbstractPart * subpart = (AbstractPart *) part->parts()->objectAtIndex(i); if (partContainsMimeType(subpart, MCSTR("text/calendar"))) { + // Exchange sends calendar invitation as alternative part. We need to extract it. calendar = subpart; } + else if (subpart->partType() == PartTypeSingle && singlePartContainsMimeType(subpart, MCSTR("application/pdf"))) { + // Spark want's behavior when alternative pdf parts are shown as attachments. + if (context->relatedAttachments != NULL) { + context->relatedAttachments->addObject(subpart); + } + } } String * html = htmlForAbstractPart(preferredAlternative, context); @@ -474,7 +490,7 @@ String * htmlForAbstractMultipartAlternative(AbstractMultipart * part, htmlRende String * result = String::string(); result->appendString(html); - if (calendar != NULL) { + if (calendar != NULL && calendar != preferredAlternative) { result->appendString(htmlForAbstractPart(calendar, context)); } return result; diff --git a/src/core/renderer/MCHTMLRendererCallback.cpp b/src/core/renderer/MCHTMLRendererCallback.cpp index 20c4873c4..5c1143c43 100644 --- a/src/core/renderer/MCHTMLRendererCallback.cpp +++ b/src/core/renderer/MCHTMLRendererCallback.cpp @@ -104,50 +104,50 @@ mailcore::HashMap * HTMLRendererTemplateCallback::templateValuesForHeader(mailco mailcore::String * dateString; static mailcore::DateFormatter * fullFormatter = NULL; - static pthread_mutex_t formatterLock = PTHREAD_MUTEX_INITIALIZER; - pthread_mutex_lock(&formatterLock); + static MCB_LOCK_TYPE formatterLock = MCB_LOCK_INITIAL_VALUE; + MCB_LOCK(&formatterLock); if (fullFormatter == NULL) { fullFormatter = new mailcore::DateFormatter(); fullFormatter->setDateStyle(mailcore::DateFormatStyleFull); fullFormatter->setTimeStyle(mailcore::DateFormatStyleFull); } - pthread_mutex_unlock(&formatterLock); + MCB_UNLOCK(&formatterLock); dateString = fullFormatter->stringFromDate(header->date()); if (dateString != NULL) { result->setObjectForKey(MCSTR("FULLDATE"), dateString->htmlEncodedString()); } static mailcore::DateFormatter * longFormatter = NULL; - pthread_mutex_lock(&formatterLock); + MCB_LOCK(&formatterLock); if (longFormatter == NULL) { longFormatter = new mailcore::DateFormatter(); longFormatter->setDateStyle(mailcore::DateFormatStyleLong); longFormatter->setTimeStyle(mailcore::DateFormatStyleLong); } - pthread_mutex_unlock(&formatterLock); + MCB_UNLOCK(&formatterLock); dateString = longFormatter->stringFromDate(header->date()); if (dateString != NULL) { result->setObjectForKey(MCSTR("LONGDATE"), dateString->htmlEncodedString()); } static mailcore::DateFormatter * mediumFormatter = NULL; - pthread_mutex_lock(&formatterLock); + MCB_LOCK(&formatterLock); if (mediumFormatter == NULL) { mediumFormatter = new mailcore::DateFormatter(); mediumFormatter->setDateStyle(mailcore::DateFormatStyleMedium); mediumFormatter->setTimeStyle(mailcore::DateFormatStyleMedium); } - pthread_mutex_unlock(&formatterLock); + MCB_UNLOCK(&formatterLock); dateString = mediumFormatter->stringFromDate(header->date()); if (dateString != NULL) { result->setObjectForKey(MCSTR("MEDIUMDATE"), dateString->htmlEncodedString()); } static mailcore::DateFormatter * shortFormatter = NULL; - pthread_mutex_lock(&formatterLock); + MCB_LOCK(&formatterLock); if (shortFormatter == NULL) { shortFormatter = new mailcore::DateFormatter(); shortFormatter->setDateStyle(mailcore::DateFormatStyleShort); shortFormatter->setTimeStyle(mailcore::DateFormatStyleShort); } - pthread_mutex_unlock(&formatterLock); + MCB_UNLOCK(&formatterLock); dateString = shortFormatter->stringFromDate(header->date()); if (dateString != NULL) { result->setObjectForKey(MCSTR("SHORTDATE"), dateString->htmlEncodedString()); diff --git a/src/core/renderer/MCHTMLRendererCallback.h b/src/core/renderer/MCHTMLRendererCallback.h index 6078f9eb4..cb63eafd9 100644 --- a/src/core/renderer/MCHTMLRendererCallback.h +++ b/src/core/renderer/MCHTMLRendererCallback.h @@ -26,7 +26,9 @@ namespace mailcore { HTMLRendererIMAPCallback() {} virtual ~HTMLRendererIMAPCallback() {} - virtual Data * dataForIMAPPart(String * folder, IMAPPart * part) { return NULL; } + virtual Data * dataForIMAPPart(String * folder, IMAPPart * part) { + return NULL; + } virtual void prefetchAttachmentIMAPPart(String * folder, IMAPPart * part) {} virtual void prefetchImageIMAPPart(String * folder, IMAPPart * part) {} }; diff --git a/src/core/rfc822/MCAttachment.cpp b/src/core/rfc822/MCAttachment.cpp index 0881c9a85..2d6d6b9e2 100644 --- a/src/core/rfc822/MCAttachment.cpp +++ b/src/core/rfc822/MCAttachment.cpp @@ -96,13 +96,13 @@ String * Attachment::mimeTypeForFilename(String * filename) return NULL; } static HashMap * mimeTypes = NULL; - static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; - pthread_mutex_lock(&lock); + static MCB_LOCK_TYPE lock = MCB_LOCK_INITIAL_VALUE; + MCB_LOCK(&lock); if (mimeTypes == NULL) { mimeTypes = readMimeTypesFile(MCSTR("/etc/apache2/mime.types")); mimeTypes->retain(); } - pthread_mutex_unlock(&lock); + MCB_UNLOCK(&lock); String * ext; String * result; diff --git a/src/core/rfc822/MCMessageBuilder.cpp b/src/core/rfc822/MCMessageBuilder.cpp index b3a952495..784813fe4 100644 --- a/src/core/rfc822/MCMessageBuilder.cpp +++ b/src/core/rfc822/MCMessageBuilder.cpp @@ -182,7 +182,7 @@ static struct mailmime * get_text_part(MessageBuilder * builder, if (dup_description != NULL) dup_description = strdup(description); mime_fields = mailmime_fields_new_with_data(encoding, - dup_content_id, dup_description, disposition, NULL); + dup_content_id, dup_description, disposition, NULL, 0); content = mailmime_content_new_with_str(mime_type); if (charset == NULL) { @@ -242,7 +242,8 @@ static struct mailmime * get_file_part(MessageBuilder * builder, const char * filename, const char * mime_type, int is_inline, const char * content_id, const char * content_description, - const char * text, size_t length, clist * contentTypeParameters) + const char * text, size_t length, clist * contentTypeParameters, + int useXAttachmentId) { char * disposition_name; int encoding_type; @@ -277,7 +278,7 @@ static struct mailmime * get_file_part(MessageBuilder * builder, if (content_description != NULL) dup_content_description = strdup(content_description); mime_fields = mailmime_fields_new_with_data(encoding, - dup_content_id, dup_content_description, disposition, NULL); + dup_content_id, dup_content_description, disposition, NULL, useXAttachmentId); if (contentTypeParameters != NULL) { clist_concat(content->ct_parameters, contentTypeParameters); @@ -308,7 +309,7 @@ static clist * content_type_parameters_from_attachment(Attachment * att) return contentTypeParameters; } -static struct mailmime * mime_from_attachment(MessageBuilder * builder, Attachment * att, bool forEncryption) +static struct mailmime * mime_from_attachment(MessageBuilder * builder, Attachment * att, bool forEncryption, bool useXAttachmentId) { struct mailmime * mime; Data * data; @@ -347,7 +348,8 @@ static struct mailmime * mime_from_attachment(MessageBuilder * builder, Attachme MCUTF8(att->contentID()), MIME_ENCODED_STR(att->contentDescription()), data->bytes(), data->length(), - contentTypeParameters); + contentTypeParameters, + useXAttachmentId); } if (contentTypeParameters != NULL) { clist_free(contentTypeParameters); @@ -358,7 +360,7 @@ static struct mailmime * mime_from_attachment(MessageBuilder * builder, Attachme static struct mailmime * multipart_related_from_attachments(MessageBuilder * builder, Attachment * htmlAttachment, - Array * attachments, const char * boundary_prefix, bool forEncryption) + Array * attachments, const char * boundary_prefix, bool forEncryption, bool useXAttachmentId) { if ((attachments != NULL) && (attachments->count() > 0)) { struct mailmime * submime; @@ -366,14 +368,14 @@ static struct mailmime * multipart_related_from_attachments(MessageBuilder * bui mime = get_multipart_related(builder, boundary_prefix); - submime = mime_from_attachment(builder, htmlAttachment, forEncryption); + submime = mime_from_attachment(builder, htmlAttachment, forEncryption, false); add_attachment(builder, mime, submime, boundary_prefix); for(unsigned int i = 0 ; i < attachments->count() ; i ++) { Attachment * attachment; attachment = (Attachment *) attachments->objectAtIndex(i); - submime = mime_from_attachment(builder, attachment, forEncryption); + submime = mime_from_attachment(builder, attachment, forEncryption, useXAttachmentId); add_attachment(builder, mime, submime, boundary_prefix); } @@ -382,7 +384,7 @@ static struct mailmime * multipart_related_from_attachments(MessageBuilder * bui else { struct mailmime * mime; - mime = mime_from_attachment(builder, htmlAttachment, forEncryption); + mime = mime_from_attachment(builder, htmlAttachment, forEncryption, false); return mime; } @@ -702,7 +704,7 @@ String * MessageBuilder::boundaryPrefix() return mBoundaryPrefix; } -struct mailmime * MessageBuilder::mimeAndFilterBccAndForEncryption(bool filterBcc, bool forEncryption) +struct mailmime * MessageBuilder::mimeAndFilterBccAndForEncryption(bool filterBcc, bool forEncryption, bool useXAttachmentId) { struct mailmime * htmlPart; struct mailmime * textPart; @@ -720,20 +722,20 @@ struct mailmime * MessageBuilder::mimeAndFilterBccAndForEncryption(bool filterBc htmlAttachment = Attachment::attachmentWithHTMLString(htmlBody()); htmlPart = multipart_related_from_attachments(this, htmlAttachment, mRelatedAttachments, - MCUTF8(mBoundaryPrefix), forEncryption); + MCUTF8(mBoundaryPrefix), forEncryption, useXAttachmentId); } if (textBody() != NULL) { Attachment * textAttachment; textAttachment = Attachment::attachmentWithText(textBody()); - textPart = mime_from_attachment(this, textAttachment, forEncryption); + textPart = mime_from_attachment(this, textAttachment, forEncryption, false); } else if (htmlBody() != NULL) { Attachment * textAttachment; textAttachment = Attachment::attachmentWithText(htmlBody()->flattenHTML()); - textPart = mime_from_attachment(this, textAttachment, forEncryption); + textPart = mime_from_attachment(this, textAttachment, forEncryption, false); } if ((textPart != NULL) && (htmlPart != NULL)) { @@ -768,7 +770,7 @@ struct mailmime * MessageBuilder::mimeAndFilterBccAndForEncryption(bool filterBc struct mailmime * submime; attachment = (Attachment *) attachments()->objectAtIndex(i); - submime = mime_from_attachment(this, attachment, forEncryption); + submime = mime_from_attachment(this, attachment, forEncryption, false); add_attachment(this, mime, submime, MCUTF8(mBoundaryPrefix)); } } @@ -791,7 +793,7 @@ Data * MessageBuilder::dataAndFilterBccAndForEncryption(bool filterBcc, bool for str = mmap_string_new(""); col = 0; - struct mailmime * mime = mimeAndFilterBccAndForEncryption(filterBcc, forEncryption); + struct mailmime * mime = mimeAndFilterBccAndForEncryption(filterBcc, forEncryption, false); mailmime_write_mem(str, &col, mime); data = Data::dataWithBytes(str->str, (unsigned int) str->len); mmap_string_free(str); @@ -810,7 +812,7 @@ Data * MessageBuilder::dataForEncryption() return dataAndFilterBccAndForEncryption(false, true); } -ErrorCode MessageBuilder::writeToFile(String * filename) +ErrorCode MessageBuilder::writeToFile(String * filename, bool useXAttachmentId) { FILE * f = fopen(filename->fileSystemRepresentation(), "wb"); if (f == NULL) { @@ -818,7 +820,7 @@ ErrorCode MessageBuilder::writeToFile(String * filename) } ErrorCode error = ErrorNone; - struct mailmime * mime = mimeAndFilterBccAndForEncryption(false, false); + struct mailmime * mime = mimeAndFilterBccAndForEncryption(false, false, useXAttachmentId); int col = 0; int r = mailmime_write_file(f, &col, mime); @@ -884,7 +886,7 @@ Data * MessageBuilder::openPGPSignedMessageDataWithSignatureData(Data * signatur struct mailmime * multipart = get_multipart_signed_pgp(NULL, MCUTF8(boundaryPrefix())); add_attachment(NULL, mime, multipart, MCUTF8(boundaryPrefix())); - struct mailmime * part_to_sign = mimeAndFilterBccAndForEncryption(false, true); + struct mailmime * part_to_sign = mimeAndFilterBccAndForEncryption(false, true, false); add_attachment(NULL, multipart, part_to_sign, MCUTF8(boundaryPrefix())); struct mailmime * signature_part = get_signature_part(signature); add_attachment(NULL, multipart, signature_part, MCUTF8(boundaryPrefix())); diff --git a/src/core/rfc822/MCMessageBuilder.h b/src/core/rfc822/MCMessageBuilder.h index 3d26ac590..dbe39312a 100644 --- a/src/core/rfc822/MCMessageBuilder.h +++ b/src/core/rfc822/MCMessageBuilder.h @@ -42,7 +42,7 @@ namespace mailcore { virtual Data * dataForEncryption(); // Store builded message to file. - virtual ErrorCode writeToFile(String * filename); + virtual ErrorCode writeToFile(String * filename, bool useXAttachmentId); virtual String * htmlRendering(HTMLRendererTemplateCallback * htmlCallback = NULL); virtual String * htmlBodyRendering(); @@ -71,7 +71,7 @@ namespace mailcore { String * mBoundaryPrefix; void init(); Data * dataAndFilterBccAndForEncryption(bool filterBcc, bool forEncryption); - struct mailmime * mimeAndFilterBccAndForEncryption(bool filterBcc, bool forEncryption); + struct mailmime * mimeAndFilterBccAndForEncryption(bool filterBcc, bool forEncryption, bool useXAttachmentId); Array * mBoundaries; unsigned int mCurrentBoundaryIndex; }; diff --git a/src/core/rfc822/MCMessageParser.cpp b/src/core/rfc822/MCMessageParser.cpp index 14a939d77..5c65e82fb 100644 --- a/src/core/rfc822/MCMessageParser.cpp +++ b/src/core/rfc822/MCMessageParser.cpp @@ -33,8 +33,10 @@ void MessageParser::init() mData = NULL; mMainPart = NULL; #if __APPLE__ +#ifndef SWIFT mNSData = NULL; #endif +#endif } void MessageParser::setBytes(char * dataBytes, unsigned int dataLength) @@ -104,10 +106,12 @@ MessageParser::~MessageParser() MC_SAFE_RELEASE(mMainPart); MC_SAFE_RELEASE(mData); #if __APPLE__ +#ifndef SWIFT if (mNSData != NULL) { CFRelease(mNSData); } #endif +#endif } AbstractPart * MessageParser::mainPart() @@ -118,9 +122,11 @@ AbstractPart * MessageParser::mainPart() Data * MessageParser::data() { #if __APPLE__ +#ifdef LEGACY_OBJC_RUNTIME if (mNSData != NULL) { return dataFromNSData(); } +#endif #endif return mData; } @@ -277,7 +283,7 @@ void MessageParser::recursiveSetupPartIDWithMessagePart(mailcore::MessagePart * partID = MCSTR("1"); } else { - partID = partIDPrefix->stringByAppendingUTF8Characters(".1"); + partID = partIDPrefix; } break; } @@ -288,6 +294,12 @@ void MessageParser::recursiveSetupPartIDWithMessagePart(mailcore::MessagePart * recursiveSetupPartIDWithPart(part->mainPart(), partID); } +void MessageParser::saveToFile(mailcore::String *fileName) { + HashMap* content = this->serializable(); + Data* data = JSON::objectToJSONData(content); + data->writeToFile(fileName); +} + void MessageParser::recursiveSetupPartIDWithMultipart(mailcore::Multipart * part, mailcore::String * partIDPrefix) { @@ -304,6 +316,7 @@ void MessageParser::recursiveSetupPartIDWithMultipart(mailcore::Multipart * part } } + static void * createObject() { return new MessageParser(); diff --git a/src/core/rfc822/MCMessageParser.h b/src/core/rfc822/MCMessageParser.h index 4541b41c2..5a45789f8 100644 --- a/src/core/rfc822/MCMessageParser.h +++ b/src/core/rfc822/MCMessageParser.h @@ -38,6 +38,7 @@ namespace mailcore { virtual String * plainTextRendering(); virtual String * plainTextBodyRendering(bool stripWhitespace); + virtual void saveToFile(String * fileName); public: // subclass behavior MessageParser(MessageParser * other); diff --git a/src/core/rfc822/MCMessageParserMac.mm b/src/core/rfc822/MCMessageParserMac.mm index 6748ed1ae..6909aafe4 100644 --- a/src/core/rfc822/MCMessageParserMac.mm +++ b/src/core/rfc822/MCMessageParserMac.mm @@ -10,7 +10,10 @@ #import -#import "NSData+MCO.h" +//#import +//#import "NSData+MCO.h" + +#import "CBase.h" using namespace mailcore; @@ -30,5 +33,7 @@ Data * MessageParser::dataFromNSData() { - return [(NSData *) mNSData mco_mcData]; + //return [(NSData *) mNSData mailCoreData]; + NSData* data = (NSData *) mNSData; + return mailcore::Data::dataWithBytes((const char *) data.bytes, (unsigned int) data.length); } diff --git a/src/core/security/MCCertificateUtils.cpp b/src/core/security/MCCertificateUtils.cpp index 81f944ab8..f0efbad86 100644 --- a/src/core/security/MCCertificateUtils.cpp +++ b/src/core/security/MCCertificateUtils.cpp @@ -6,6 +6,8 @@ // Copyright (c) 2013 MailCore. All rights reserved. // +#include "MCWin32.h" // should be first include. + #include "MCCertificateUtils.h" #if __APPLE__ @@ -23,8 +25,44 @@ #include #endif +#include "MCLock.h" #include "MCLog.h" +#if __APPLE__ +#else +char* X509_to_string(X509* cert) { + BIO* bio = BIO_new(BIO_s_mem()); + if (!bio) { + // Handle error + return NULL; + } + + if (!X509_print(bio, cert)) { + // Handle error + BIO_free(bio); + return NULL; + } + + // Determine the length of the data. + char* output; + long len = BIO_get_mem_data(bio, &output); + + // Allocate memory for the string + char* str = (char*)malloc(len + 1); + if (str) { + // Copy the data + memcpy(str, output, len); + // Null-terminate the string + str[len] = '\0'; + } + + // Cleanup + BIO_free(bio); + + return str; +} +#endif + bool mailcore::checkCertificate(mailstream * stream, String * hostname) { #if __APPLE__ @@ -57,24 +95,24 @@ bool mailcore::checkCertificate(mailstream * stream, String * hostname) CFRelease(cert); } - static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; + static MC_LOCK_TYPE lock = MC_LOCK_INITIAL_VALUE; // The below API calls are not thread safe. We're making sure not to call the concurrently. - pthread_mutex_lock(&lock); + MC_LOCK(&lock); status = SecTrustCreateWithCertificates(certificates, policy, &trust); if (status != noErr) { - pthread_mutex_unlock(&lock); + MC_UNLOCK(&lock); goto free_certs; } status = SecTrustEvaluate(trust, &trustResult); if (status != noErr) { - pthread_mutex_unlock(&lock); + MC_UNLOCK(&lock); goto free_certs; } - pthread_mutex_unlock(&lock); + MC_UNLOCK(&lock); switch (trustResult) { case kSecTrustResultUnspecified: @@ -138,7 +176,7 @@ bool mailcore::checkCertificate(mailstream * stream, String * hostname) CertCloseStore(systemStore, 0); #elif defined(ANDROID) || defined(__ANDROID__) dir = opendir("/system/etc/security/cacerts"); - while (ent = readdir(dir)) { + while ((ent = readdir(dir))) { if (ent->d_name[0] == '.') { continue; } @@ -160,6 +198,7 @@ bool mailcore::checkCertificate(mailstream * stream, String * hostname) status = X509_STORE_set_default_paths(store); if (status != 1) { printf("Error loading the system-wide CA certificates"); + MCLog("Error loading the system-wide CA certificates"); } certificates = sk_X509_new_null(); @@ -167,30 +206,46 @@ bool mailcore::checkCertificate(mailstream * stream, String * hostname) MMAPString * str; str = (MMAPString *) carray_get(cCerts, i); if (str == NULL) { + MCLog("MCCertificateUtils error: out of index in array"); goto free_certs; } + BIO *bio = BIO_new_mem_buf((void *) str->str, str->len); X509 *certificate = d2i_X509_bio(bio, NULL); BIO_free(bio); if (!sk_X509_push(certificates, certificate)) { + MCLog("MCCertificateUtils error: can't sk_X509_push"); goto free_certs; } } + ERR_clear_error(); storectx = X509_STORE_CTX_new(); if (storectx == NULL) { + MCLog("MCCertificateUtils error: can't create X509_STORE_CTX"); goto free_certs; } + ERR_clear_error(); status = X509_STORE_CTX_init(storectx, store, sk_X509_value(certificates, 0), certificates); if (status != 1) { + MCLog("MCCertificateUtils error: X509_STORE_CTX_init status %d", status); goto free_certs; } + ERR_clear_error(); status = X509_verify_cert(storectx); if (status == 1) { result = true; } + else { + MCLog("MCCertificateUtils error: X509_verify_cert status %d", status); + unsigned long errCode; + while ((errCode = ERR_get_error()) != 0) { + char *errMsg = ERR_error_string(errCode, NULL); + MCLog("OpenSSL Error: %s", errMsg); + } + } free_certs: mailstream_certificate_chain_free(cCerts); diff --git a/src/core/smtp/MCSMTPSession.cpp b/src/core/smtp/MCSMTPSession.cpp index 29df6460e..fa5b0cee5 100644 --- a/src/core/smtp/MCSMTPSession.cpp +++ b/src/core/smtp/MCSMTPSession.cpp @@ -21,11 +21,11 @@ enum { STATE_LOGGEDIN, }; -#define CANCEL_LOCK() pthread_mutex_lock(&mCancelLock) -#define CANCEL_UNLOCK() pthread_mutex_unlock(&mCancelLock) +#define CANCEL_LOCK() MCB_LOCK(&mCancelLock) +#define CANCEL_UNLOCK() MCB_UNLOCK(&mCancelLock) -#define CAN_CANCEL_LOCK() pthread_mutex_lock(&mCanCancelLock) -#define CAN_CANCEL_UNLOCK() pthread_mutex_unlock(&mCanCancelLock) +#define CAN_CANCEL_LOCK() MCB_LOCK(&mCanCancelLock) +#define CAN_CANCEL_UNLOCK() MCB_UNLOCK(&mCanCancelLock) void SMTPSession::init() { @@ -50,9 +50,9 @@ void SMTPSession::init() mLastLibetpanError = 0; mLastSMTPResponseCode = 0; mConnectionLogger = NULL; - pthread_mutex_init(&mConnectionLoggerLock, NULL); - pthread_mutex_init(&mCancelLock, NULL); - pthread_mutex_init(&mCanCancelLock, NULL); + MCB_LOCK_INIT(&mConnectionLoggerLock); + MCB_LOCK_INIT(&mCancelLock); + MCB_LOCK_INIT(&mCanCancelLock); mOutlookServer = false; } @@ -64,9 +64,9 @@ SMTPSession::SMTPSession() SMTPSession::~SMTPSession() { - pthread_mutex_destroy(&mConnectionLoggerLock); - pthread_mutex_destroy(&mCancelLock); - pthread_mutex_destroy(&mCanCancelLock); + MCB_LOCK_DESTROY(&mConnectionLoggerLock); + MCB_LOCK_DESTROY(&mCancelLock); + MCB_LOCK_DESTROY(&mCanCancelLock); MC_SAFE_RELEASE(mLastSMTPResponse); MC_SAFE_RELEASE(mHostname); MC_SAFE_RELEASE(mUsername); @@ -290,6 +290,10 @@ void SMTPSession::connectIfNeeded(ErrorCode * pError) } } +static void setMailStreamSSLContextServerName(mailstream_ssl_context * ssl_context, void * data) { + mailstream_ssl_set_server_name(ssl_context, static_cast(data)); +} + void SMTPSession::connect(ErrorCode * pError) { int r; @@ -302,6 +306,7 @@ void SMTPSession::connect(ErrorCode * pError) r = mailsmtp_socket_connect(mSmtp, MCUTF8(hostname()), port()); saveLastResponse(); if (r != MAILSMTP_NO_ERROR) { + MCLog("#SMTP: StartTLS mailsmtp_socket_connect %d", r); * pError = ErrorConnection; goto close; } @@ -314,10 +319,12 @@ void SMTPSession::connect(ErrorCode * pError) } saveLastResponse(); if (r == MAILSMTP_ERROR_STREAM) { + MCLog("#SMTP: StartTLS mailsmtp_init %d useHeloIPEnabled %d", r, useHeloIPEnabled()); * pError = ErrorConnection; goto close; } else if (r != MAILSMTP_NO_ERROR) { + MCLog("#SMTP: StartTLS mailsmtp_init %d useHeloIPEnabled %d", r, useHeloIPEnabled()); * pError = ErrorConnection; goto close; } @@ -343,10 +350,12 @@ void SMTPSession::connect(ErrorCode * pError) } saveLastResponse(); if (r == MAILSMTP_ERROR_STREAM) { + MCLog("#SMTP: StartTLS mailsmtp_init after starttls %d useHeloIPEnabled %d", r, useHeloIPEnabled()); * pError = ErrorConnection; goto close; } else if (r != MAILSMTP_NO_ERROR) { + MCLog("#SMTP: StartTLS mailsmtp_init after starttls %d useHeloIPEnabled %d", r, useHeloIPEnabled()); * pError = ErrorConnection; goto close; } @@ -354,9 +363,23 @@ void SMTPSession::connect(ErrorCode * pError) break; case ConnectionTypeTLS: - r = mailsmtp_ssl_connect(mSmtp, MCUTF8(mHostname), port()); +#if __APPLE__ + r = mailsmtp_ssl_connect(mSmtp, MCUTF8(mHostname), port()); +#else + // Passing callback to set the server name into SSL context + // Needed for SNI extension for TLS https://en.wikipedia.org/wiki/Server_Name_Indication + // On Apple platforms libetpan uses CFNetwork instead, that's why callback is not needed + r = mailsmtp_ssl_connect_with_callback(mSmtp, + MCUTF8(mHostname), + port(), + setMailStreamSSLContextServerName, + const_cast(static_cast(MCUTF8(mHostname)))); +#endif + + saveLastResponse(); if (r != MAILSMTP_NO_ERROR) { + MCLog("#SMTP: TLS mailsmtp_ssl_connect %d", r); * pError = ErrorConnection; goto close; } @@ -373,10 +396,12 @@ void SMTPSession::connect(ErrorCode * pError) } saveLastResponse(); if (r == MAILSMTP_ERROR_STREAM) { + MCLog("#SMTP: TLS mailsmtp_init %d useHeloIPEnabled %d", r, useHeloIPEnabled()); * pError = ErrorConnection; goto close; } else if (r != MAILSMTP_NO_ERROR) { + MCLog("#SMTP: TLS mailsmtp_init %d useHeloIPEnabled %d", r, useHeloIPEnabled()); * pError = ErrorConnection; goto close; } @@ -387,6 +412,7 @@ void SMTPSession::connect(ErrorCode * pError) r = mailsmtp_socket_connect(mSmtp, MCUTF8(hostname()), port()); saveLastResponse(); if (r != MAILSMTP_NO_ERROR) { + MCLog("#SMTP: default mailsmtp_socket_connect %d", r); * pError = ErrorConnection; goto close; } @@ -399,10 +425,12 @@ void SMTPSession::connect(ErrorCode * pError) } saveLastResponse(); if (r == MAILSMTP_ERROR_STREAM) { + MCLog("#SMTP: default mailsmtp_init %d seHeloIPEnabled %d", r, useHeloIPEnabled()); * pError = ErrorConnection; goto close; } else if (r != MAILSMTP_NO_ERROR) { + MCLog("#SMTP: default mailsmtp_init %d seHeloIPEnabled %d", r, useHeloIPEnabled()); * pError = ErrorConnection; goto close; } @@ -607,7 +635,8 @@ void SMTPSession::login(ErrorCode * pError) MCUTF8(mPassword), NULL /* realm */); break; - case AuthTypeXOAuth2: { + case AuthTypeXOAuth2: + case AuthTypeXOAuth2Outlook: { const char * utf8Username = MCUTF8(mUsername); if (utf8Username == NULL) { utf8Username = ""; @@ -621,24 +650,10 @@ void SMTPSession::login(ErrorCode * pError) } break; } - - case AuthTypeXOAuth2Outlook: { - const char * utf8Username = MCUTF8(mUsername); - if (utf8Username == NULL) { - utf8Username = ""; - } - - if (mOAuth2Token == NULL) { - r = MAILSMTP_ERROR_STREAM; - } - else { - r = mailsmtp_oauth2_outlook_authenticate(mSmtp, utf8Username, MCUTF8(mOAuth2Token)); - } - break; - } } saveLastResponse(); if (r == MAILSMTP_ERROR_STREAM) { + MCLog("#SMTP: login failed %d", r); * pError = ErrorConnection; mShouldDisconnect = true; return; @@ -668,6 +683,7 @@ void SMTPSession::checkAccount(Address * from, ErrorCode * pError) r = mailsmtp_mail(mSmtp, MCUTF8(from->mailbox())); saveLastResponse(); if (r == MAILSMTP_ERROR_STREAM) { + MCLog("#SMTP: mailsmtp_mail failed %d", r); * pError = ErrorConnection; mShouldDisconnect = true; return; @@ -680,6 +696,44 @@ void SMTPSession::checkAccount(Address * from, ErrorCode * pError) r = mailsmtp_rcpt(mSmtp, "email@invalid.com"); saveLastResponse(); if (r == MAILSMTP_ERROR_STREAM) { + MCLog("#SMTP: mailsmtp_rcpt failed %d", r); + * pError = ErrorConnection; + mShouldDisconnect = true; + return; + } + else if (r != MAILSMTP_NO_ERROR) { + * pError = ErrorInvalidAccount; + return; + } + + * pError = ErrorNone; +} + +void SMTPSession::checkAccount(Address * from, Address * to, ErrorCode * pError) +{ + int r; + + loginIfNeeded(pError); + if (* pError != ErrorNone) { + return; + } + r = mailsmtp_mail(mSmtp, MCUTF8(from->mailbox())); + saveLastResponse(); + if (r == MAILSMTP_ERROR_STREAM) { + MCLog("#SMTP: mailsmtp_mail failed %d", r); + * pError = ErrorConnection; + mShouldDisconnect = true; + return; + } + else if (r != MAILSMTP_NO_ERROR) { + * pError = ErrorInvalidAccount; + return; + } + + r = mailsmtp_rcpt(mSmtp, MCUTF8(to->mailbox())); + saveLastResponse(); + if (r == MAILSMTP_ERROR_STREAM) { + MCLog("#SMTP: mailsmtp_rcpt failed %d", r); * pError = ErrorConnection; mShouldDisconnect = true; return; @@ -776,6 +830,7 @@ void SMTPSession::internalSendMessage(Address * from, Array * recipients, Data * saveLastResponse(); if ((r == MAILSMTP_ERROR_STREAM) || (r == MAILSMTP_ERROR_CONNECTION_REFUSED)) { + MCLog("#SMTP: mailesmtp_send failed %d", r); * pError = ErrorConnection; mShouldDisconnect = true; goto err; @@ -968,6 +1023,7 @@ void SMTPSession::noop(ErrorCode * pError) r = mailsmtp_noop(mSmtp); saveLastResponse(); if (r == MAILSMTP_ERROR_STREAM) { + MCLog("#SMTP: mailsmtp_noop failed %d", r); * pError = ErrorConnection; } } @@ -995,12 +1051,12 @@ bool SMTPSession::isDisconnected() void SMTPSession::lockConnectionLogger() { - pthread_mutex_lock(&mConnectionLoggerLock); + MCB_LOCK(&mConnectionLoggerLock); } void SMTPSession::unlockConnectionLogger() { - pthread_mutex_unlock(&mConnectionLoggerLock); + MCB_UNLOCK(&mConnectionLoggerLock); } void SMTPSession::setConnectionLogger(ConnectionLogger * logger) diff --git a/src/core/smtp/MCSMTPSession.h b/src/core/smtp/MCSMTPSession.h index 1330c7977..f7c118d61 100644 --- a/src/core/smtp/MCSMTPSession.h +++ b/src/core/smtp/MCSMTPSession.h @@ -60,6 +60,7 @@ namespace mailcore { virtual void login(ErrorCode * pError); virtual void checkAccount(Address * from, ErrorCode * pError); + virtual void checkAccount(Address * from, Address * to, ErrorCode * pError); virtual void sendMessage(Data * messageData, SMTPProgressCallback * callback, ErrorCode * pError); virtual void sendMessage(Address * from, Array * /* Address */ recipients, Data * messageData, @@ -100,11 +101,11 @@ namespace mailcore { String * mLastSMTPResponse; int mLastLibetpanError; int mLastSMTPResponseCode; - pthread_mutex_t mCancelLock; - pthread_mutex_t mCanCancelLock; + MCB_LOCK_TYPE mCancelLock; + MCB_LOCK_TYPE mCanCancelLock; ConnectionLogger * mConnectionLogger; - pthread_mutex_t mConnectionLoggerLock; + MCB_LOCK_TYPE mConnectionLoggerLock; bool mOutlookServer; diff --git a/src/core/zip/MCZip.cpp b/src/core/zip/MCZip.cpp index 69e7fc6ef..98d6d7137 100644 --- a/src/core/zip/MCZip.cpp +++ b/src/core/zip/MCZip.cpp @@ -80,8 +80,7 @@ static ErrorCode addFile(zipFile file, String * path) HANDLE hFind = INVALID_HANDLE_VALUE; WIN32_FIND_DATA ffd; - - hFind = FindFirstFile(wildcard->unicodeCharacters(), &ffd); + hFind = FindFirstFile(reinterpret_cast(wildcard->unicodeCharacters()), &ffd); if (hFind == INVALID_HANDLE_VALUE) { return ErrorFile; } @@ -90,7 +89,7 @@ static ErrorCode addFile(zipFile file, String * path) if ((wcscmp(ffd.cFileName, L".") == 0) || (wcscmp(ffd.cFileName, L"..") == 0)) { continue; } - String * subpath = path->stringByAppendingPathComponent(String::stringWithCharacters(ffd.cFileName)); + String * subpath = path->stringByAppendingPathComponent(String::stringWithCharacters(reinterpret_cast(ffd.cFileName))); addFile(file, subpath); } while (FindNextFile(hFind, &ffd) != 0); diff --git a/src/core/zip/MCZipMac.mm b/src/core/zip/MCZipMac.mm index 94a8a807f..2b9031bc8 100644 --- a/src/core/zip/MCZipMac.mm +++ b/src/core/zip/MCZipMac.mm @@ -8,7 +8,7 @@ #include "MCZipPrivate.h" -#import "NSObject+MCO.h" +//#import "NSObject+MCO.h" #import using namespace mailcore; @@ -26,5 +26,6 @@ return nil; } - return MCO_FROM_OBJC(String, directoryString); + NSData *bytes = [directoryString dataUsingEncoding:NSUTF16StringEncoding]; + return mailcore::String::stringWithCharacters((const UChar*) bytes.bytes, (unsigned int) bytes.length); } diff --git a/src/core/zip/MCZipPrivate.h b/src/core/zip/MCZipPrivate.h index 070946f62..528a4bda6 100644 --- a/src/core/zip/MCZipPrivate.h +++ b/src/core/zip/MCZipPrivate.h @@ -10,11 +10,11 @@ #define mailcore2_MCZipMac_h #include - +#ifdef __cplusplus namespace mailcore { String * TemporaryDirectoryForZip(); }; - +#endif #endif diff --git a/src/include/MailCore/CAbstractMessage.h b/src/include/MailCore/CAbstractMessage.h new file mode 100644 index 000000000..a19bc9fed --- /dev/null +++ b/src/include/MailCore/CAbstractMessage.h @@ -0,0 +1,36 @@ +#ifndef MAILCORE_CABSTRACT_MESSAGE_H +#define MAILCORE_CABSTRACT_MESSAGE_H + +#include "stdint.h" + +#include "CBase.h" +#include "CArray.h" +#include "CMessageHeader.h" +#include "CAbstractPart.h" + +#ifdef __cplusplus + +namespace mailcore { + class AbstractMessage; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CAbstractMessage, mailcore::AbstractMessage) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CAbstractMessage) + + C_SYNTHESIZE_PROPERTY_DEFINITION(CAbstractMessage, struct CMessageHeader, header, setHeader) + + C_SYNTHESIZE_FUNC_DEFINITION(CAbstractMessage, CAbstractPart, partForContentID, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CAbstractMessage, CAbstractPart, partForUniqueID, MailCoreString) + + C_SYNTHESIZE_FUNC_DEFINITION(CAbstractMessage, CArray, attachments) + C_SYNTHESIZE_FUNC_DEFINITION(CAbstractMessage, CArray, htmlInlineAttachments) + C_SYNTHESIZE_FUNC_DEFINITION(CAbstractMessage, CArray, requiredPartsForRendering) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/include/MailCore/CAbstractMessagePart.h b/src/include/MailCore/CAbstractMessagePart.h new file mode 100644 index 000000000..68391e47d --- /dev/null +++ b/src/include/MailCore/CAbstractMessagePart.h @@ -0,0 +1,31 @@ +#ifndef MAILCORE_CABSTRACT_MESSAGE_PART_H +#define MAILCORE_CABSTRACT_MESSAGE_PART_H + +#include "stdint.h" + +#include "CBase.h" +#include "CArray.h" +#include "CAbstractPart.h" +#include "CMessageHeader.h" + +#ifdef __cplusplus + +namespace mailcore { + class AbstractMessagePart; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CAbstractMessagePart, mailcore::AbstractMessagePart) + + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CAbstractMessagePart) + + C_SYNTHESIZE_PROPERTY_DEFINITION(CAbstractMessagePart, CMessageHeader, header, setHeader) + C_SYNTHESIZE_PROPERTY_DEFINITION(CAbstractMessagePart, CAbstractPart, mainPart, setMainPart) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/include/MailCore/CAbstractMessageRendererCallback.h b/src/include/MailCore/CAbstractMessageRendererCallback.h new file mode 100644 index 000000000..4df4cdea5 --- /dev/null +++ b/src/include/MailCore/CAbstractMessageRendererCallback.h @@ -0,0 +1,80 @@ +#ifndef CAbstractMessageRendererCallback_h +#define CAbstractMessageRendererCallback_h + +#include "CBase.h" +#include "CArray.h" +#include "CMessageConstants.h" +#include "CAbstractPart.h" +#include "CDictionary.h" +#include "CMessageHeader.h" +#include "CAbstractMessage.h" +#include "CAbstractMessagePart.h" +#include "CIMAPPart.h" + + +#ifdef __cplusplus + +class AbstractMessageRendererCallback; + +extern "C" { +#endif + + typedef uint8_t (*CanPreviewPartBlock)(const void* userInfo, CAbstractPart part); + typedef uint8_t (*ShouldShowPartBlock)(const void* userInfo, CAbstractPart part); + typedef CDictionary (*TemplateValuesForHeaderBlock)(const void* userInfo, CMessageHeader header); + typedef CDictionary (*TemplateValuesForPartBlock)(const void* userInfo, CAbstractPart part); + typedef CObject (*TemplateForMainHeaderBlock)(const void* userInfo, CMessageHeader header); + typedef CObject (*TemplateForImageBlock)(const void* userInfo, CAbstractPart part); + typedef CObject (*TemplateForAttachmentBlock)(const void* userInfo, CAbstractPart part); + typedef CObject (*TemplateForMessageBlock)(const void* userInfo, CAbstractMessage message); + typedef CObject (*TemplateForEmbeddedMessageBlock)(const void* userInfo, CAbstractMessagePart part); + typedef CObject (*TemplateForEmbeddedMessageHeaderBlock)(const void* userInfo, CMessageHeader header); + typedef CObject (*TemplateForAttachmentSeparatorBlock)(const void* userInfo); + typedef CObject (*CleanHTMLForPartBlock)(const void* userInfo, MailCoreString html); + typedef CObject (*FilterHTMLForPartBlock)(const void* userInfo, MailCoreString html); + typedef CObject (*FilterHTMLForMessageBlock)(const void* userInfo, MailCoreString html); + + typedef CData (*DataForIMAPPartBlock)(const void* userInfo, MailCoreString folder, CIMAPPart part); + typedef void (*PrefetchAttachmentIMAPPartBlock)(const void* userInfo, MailCoreString folder, CIMAPPart part); + typedef void (*PrefetchImageIMAPPartBlock)(const void* userInfo, MailCoreString folder, CIMAPPart part); + + struct CAbstractMessageRendererCallback { +#ifdef __cplusplus + AbstractMessageRendererCallback* callbackBridge; +#else + void* callbackBridge; +#endif + }; + typedef struct CAbstractMessageRendererCallback CAbstractMessageRendererCallback; + + CMAILCORE_EXPORT CAbstractMessageRendererCallback CAbstractMessageRendererCallback_new(CanPreviewPartBlock canPreviewPartBlock, + ShouldShowPartBlock shouldShowPartBlock, + TemplateValuesForHeaderBlock templateValuesForHeaderBlock, + TemplateValuesForPartBlock templateValuesForPartBlock, + TemplateForMainHeaderBlock templateForMainHeaderBlock, + TemplateForImageBlock templateForImageBlock, + TemplateForAttachmentBlock templateForAttachmentBlock, + TemplateForMessageBlock templateForMessageBlock, + TemplateForEmbeddedMessageBlock templateForEmbeddedMessageBlock, + TemplateForEmbeddedMessageHeaderBlock templateForEmbeddedMessageHeaderBlock, + TemplateForAttachmentSeparatorBlock templateForAttachmentSeparatorBlock, + CleanHTMLForPartBlock cleanHTMLForPartBlock, + FilterHTMLForPartBlock filterHTMLForPartBlock, + FilterHTMLForMessageBlock filterHTMLForMessageBlock, + DataForIMAPPartBlock dataForIMAPPartBlock, + PrefetchAttachmentIMAPPartBlock prefetchAttachmentIMAPPartBlock, + PrefetchImageIMAPPartBlock prefetchImageIMAPPartBlock, + const void* userInfo) + CF_SWIFT_NAME(CAbstractMessageRendererCallback.init(canPreviewPartBlock:shouldShowPartBlock:templateValuesForHeaderBlock:templateValuesForPartBlock:templateForMainHeaderBlock:templateForImageBlock:templateForAttachmentBlock:templateForMessageBlock:templateForEmbeddedMessageBlock:templateForEmbeddedMessageHeaderBlock:templateForAttachmentSeparatorBlock:cleanHTMLForPartBlock:filterHTMLForPartBlock:filterHTMLForMessageBlock:dataForIMAPPartBlock:prefetchAttachmentIMAPPartBlock:prefetchImageIMAPPartBlock:userInfo:)); + + CMAILCORE_EXPORT void CAbstractMessageRendererCallback_retain(CAbstractMessageRendererCallback self) + CF_SWIFT_NAME(CAbstractMessageRendererCallback.retain(self:)); + + CMAILCORE_EXPORT void CAbstractMessageRendererCallback_release(CAbstractMessageRendererCallback self) + CF_SWIFT_NAME(CAbstractMessageRendererCallback.release(self:)); + +#ifdef __cplusplus +} +#endif + +#endif /* CAbstractMessageRendererCallback_h */ diff --git a/src/include/MailCore/CAbstractMessageRendererCallbackWrapper.h b/src/include/MailCore/CAbstractMessageRendererCallbackWrapper.h new file mode 100644 index 000000000..a14d34955 --- /dev/null +++ b/src/include/MailCore/CAbstractMessageRendererCallbackWrapper.h @@ -0,0 +1,106 @@ +// +// CAbstractMessageRendererCallbackWrapper.h +// mailcore2 +// +// Created by Andrew on 8/2/17. +// Copyright © 2017 MailCore. All rights reserved. +// + +#ifndef CAbstractMessageRendererCallbackWrapper_h +#define CAbstractMessageRendererCallbackWrapper_h + + + + +#ifdef __cplusplus + +#include +extern "C" { +#endif + + typedef uint8_t (*CanPreviewPartBlock)(const void* userInfo, CAbstractPart part); + typedef uint8_t (*ShouldShowPartBlock)(const void* userInfo, CAbstractPart part); + typedef CDictionary (*TemplateValuesForHeaderBlock)(const void* userInfo, CMessageHeader header); + typedef CDictionary (*TemplateValuesForPartBlock)(const void* userInfo, CAbstractPart part); + typedef CObject (*TemplateForMainHeaderBlock)(const void* userInfo, CMessageHeader header); + typedef CObject (*TemplateForImageBlock)(const void* userInfo, CAbstractPart part); + typedef CObject (*TemplateForAttachmentBlock)(const void* userInfo, CAbstractPart part); + typedef CObject (*TemplateForMessageBlock)(const void* userInfo, CAbstractMessage message); + typedef CObject (*TemplateForEmbeddedMessageBlock)(const void* userInfo, CAbstractMessagePart part); + typedef CObject (*TemplateForEmbeddedMessageHeaderBlock)(const void* userInfo, CMessageHeader header); + typedef CObject (*TemplateForAttachmentSeparatorBlock)(const void* userInfo); + typedef CObject (*CleanHTMLForPartBlock)(const void* userInfo, MailCoreString html); + typedef CObject (*FilterHTMLForPartBlock)(const void* userInfo, MailCoreString html); + typedef CObject (*FilterHTMLForMessageBlock)(const void* userInfo, MailCoreString html); + + typedef CData (*DataForIMAPPartBlock)(const void* userInfo, MailCoreString folder, CIMAPPart part); + typedef void (*PrefetchAttachmentIMAPPartBlock)(const void* userInfo, MailCoreString folder, CIMAPPart part); + typedef void (*PrefetchImageIMAPPartBlock)(const void* userInfo, MailCoreString folder, CIMAPPart part); + +#ifdef __cplusplus +} + +class AbstractMessageRendererCallback : public mailcore::Object, public mailcore::HTMLRendererTemplateCallback, public mailcore::HTMLRendererIMAPCallback { +public: + AbstractMessageRendererCallback(CanPreviewPartBlock canPreviewPartBlock, + ShouldShowPartBlock shouldShowPartBlock, + TemplateValuesForHeaderBlock templateValuesForHeaderBlock, + TemplateValuesForPartBlock templateValuesForPartBlock, + TemplateForMainHeaderBlock templateForMainHeaderBlock, + TemplateForImageBlock templateForImageBlock, + TemplateForAttachmentBlock templateForAttachmentBlock, + TemplateForMessageBlock templateForMessageBlock, + TemplateForEmbeddedMessageBlock templateForEmbeddedMessageBlock, + TemplateForEmbeddedMessageHeaderBlock templateForEmbeddedMessageHeaderBlock, + TemplateForAttachmentSeparatorBlock templateForAttachmentSeparatorBlock, + CleanHTMLForPartBlock cleanHTMLForPartBlock, + FilterHTMLForPartBlock filterHTMLForPartBlock, + FilterHTMLForMessageBlock filterHTMLForMessageBlock, + DataForIMAPPartBlock dataForIMAPPartBlock, + PrefetchAttachmentIMAPPartBlock prefetchAttachmentIMAPPartBlock, + PrefetchImageIMAPPartBlock prefetchImageIMAPPartBlock, + const void* userInfo); + + virtual bool canPreviewPart(mailcore::AbstractPart * part); + virtual bool shouldShowPart(mailcore::AbstractPart * part); + virtual mailcore::HashMap * templateValuesForHeader(mailcore::MessageHeader * header); + virtual mailcore::HashMap * templateValuesForPart(mailcore::AbstractPart * part); + virtual mailcore::String * templateForMainHeader(mailcore::MessageHeader * header); + virtual mailcore::String * templateForImage(mailcore::AbstractPart * part); + virtual mailcore::String * templateForAttachment(mailcore::AbstractPart * part); + virtual mailcore::String * templateForMessage(mailcore::AbstractMessage * message); + virtual mailcore::String * templateForEmbeddedMessage(mailcore::AbstractMessagePart * part); + virtual mailcore::String * templateForEmbeddedMessageHeader(mailcore::MessageHeader * header); + virtual mailcore::String * templateForAttachmentSeparator(); + virtual mailcore::String * cleanHTMLForPart(mailcore::String * html); + virtual mailcore::String * filterHTMLForPart(mailcore::String * html); + virtual mailcore::String * filterHTMLForMessage(mailcore::String * html); + virtual mailcore::Data * dataForIMAPPart(mailcore::String * folder, mailcore::IMAPPart * part); + virtual void prefetchAttachmentIMAPPart(mailcore::String * folder, mailcore::IMAPPart * part); + virtual void prefetchImageIMAPPart(mailcore::String * folder, mailcore::IMAPPart * part); + +private: + CanPreviewPartBlock canPreviewPartBlock; + ShouldShowPartBlock shouldShowPartBlock; + TemplateValuesForHeaderBlock templateValuesForHeaderBlock; + TemplateValuesForPartBlock templateValuesForPartBlock; + TemplateForMainHeaderBlock templateForMainHeaderBlock; + TemplateForImageBlock templateForImageBlock; + TemplateForAttachmentBlock templateForAttachmentBlock; + TemplateForMessageBlock templateForMessageBlock; + TemplateForEmbeddedMessageBlock templateForEmbeddedMessageBlock; + TemplateForEmbeddedMessageHeaderBlock templateForEmbeddedMessageHeaderBlock; + TemplateForAttachmentSeparatorBlock templateForAttachmentSeparatorBlock; + CleanHTMLForPartBlock cleanHTMLForPartBlock; + FilterHTMLForPartBlock filterHTMLForPartBlock; + FilterHTMLForMessageBlock filterHTMLForMessageBlock; + + DataForIMAPPartBlock dataForIMAPPartBlock; + PrefetchAttachmentIMAPPartBlock prefetchAttachmentIMAPPartBlock; + PrefetchImageIMAPPartBlock prefetchImageIMAPPartBlock; + + const void* userInfo; +}; +#endif + +#endif /* CAbstractMessageRendererCallbackWrapper_h */ diff --git a/src/include/MailCore/CAbstractMultipart.h b/src/include/MailCore/CAbstractMultipart.h new file mode 100644 index 000000000..d55b65597 --- /dev/null +++ b/src/include/MailCore/CAbstractMultipart.h @@ -0,0 +1,29 @@ +#ifndef MAILCORE_CABSTRACT_MULTIPART_H +#define MAILCORE_CABSTRACT_MULTIPART_H + +#include "stdint.h" + +#include "CBase.h" +#include "CArray.h" +#include "CMessageHeader.h" +#include "CAbstractPart.h" + +#ifdef __cplusplus + +namespace mailcore { + class AbstractMultipart; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CAbstractMultipart, mailcore::AbstractMultipart) + + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CAbstractMultipart) + C_SYNTHESIZE_PROPERTY_DEFINITION(CAbstractMultipart, CArray, parts, setParts) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/include/MailCore/CAbstractPart.h b/src/include/MailCore/CAbstractPart.h new file mode 100644 index 000000000..b6337c210 --- /dev/null +++ b/src/include/MailCore/CAbstractPart.h @@ -0,0 +1,52 @@ +#ifndef MAILCORE_CABSTRACT_PART_H +#define MAILCORE_CABSTRACT_PART_H + +#include "stdint.h" + +#include "CBase.h" +#include "CArray.h" +#include "CMessageConstants.h" +#include "MailCoreString.h" + +#ifdef __cplusplus + +namespace mailcore { + class AbstractPart; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CAbstractPart, mailcore::AbstractPart) + + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CAbstractPart) + + C_SYNTHESIZE_PROPERTY_DEFINITION(CAbstractPart, PartType, partType, setPartType) + C_SYNTHESIZE_PROPERTY_DEFINITION(CAbstractPart, MailCoreString, filename, setFilename) + C_SYNTHESIZE_PROPERTY_DEFINITION(CAbstractPart, MailCoreString, mimeType, setMimeType) + C_SYNTHESIZE_PROPERTY_DEFINITION(CAbstractPart, MailCoreString, charset, setCharset) + C_SYNTHESIZE_PROPERTY_DEFINITION(CAbstractPart, MailCoreString, uniqueID, setUniqueID) + C_SYNTHESIZE_PROPERTY_DEFINITION(CAbstractPart, MailCoreString, contentID, setContentID) + C_SYNTHESIZE_PROPERTY_DEFINITION(CAbstractPart, MailCoreString, uniqueID, setUniqueID) + C_SYNTHESIZE_PROPERTY_DEFINITION(CAbstractPart, MailCoreString, contentLocation, setContentLocation) + C_SYNTHESIZE_PROPERTY_DEFINITION(CAbstractPart, MailCoreString, contentDescription, setContentDescription) + + C_SYNTHESIZE_PROPERTY_DEFINITION(CAbstractPart, bool, isInlineAttachment, setInlineAttachment) + C_SYNTHESIZE_PROPERTY_DEFINITION(CAbstractPart, bool, isAttachment, setAttachment) + + C_SYNTHESIZE_FUNC_DEFINITION(CAbstractPart, CAbstractPart, partForContentID, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CAbstractPart, CAbstractPart, partForUniqueID, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CAbstractPart, MailCoreString, decodedStringForData, CData) + + C_SYNTHESIZE_FUNC_DEFINITION(CAbstractPart, void, setContentTypeParameter, MailCoreString, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CAbstractPart, void, removeContentTypeParameter, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CAbstractPart, MailCoreString, contentTypeParameterValueForName, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CAbstractPart, CArray, allContentTypeParametersNames) + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CAbstractPart, CData, getData, CAbstractPart) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/include/MailCore/CAddress.h b/src/include/MailCore/CAddress.h new file mode 100644 index 000000000..df7ce28b5 --- /dev/null +++ b/src/include/MailCore/CAddress.h @@ -0,0 +1,45 @@ +#ifndef MAILCORE_CADDRESS_H +#define MAILCORE_CADDRESS_H + +#include "stdint.h" + +#include "CBase.h" +#include "CArray.h" +#include "MailCoreString.h" + +#ifdef __cplusplus + +namespace mailcore { + class Address; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CAddress, mailcore::Address) + + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CAddress) + + C_SYNTHESIZE_PROPERTY_DEFINITION(CAddress, MailCoreString, displayName, setDisplayName) + C_SYNTHESIZE_PROPERTY_DEFINITION(CAddress, MailCoreString, mailbox, setMailbox) + + C_SYNTHESIZE_READONLY_PROPERTY_DEFINITION(CAddress, MailCoreString, RFC822String) + C_SYNTHESIZE_READONLY_PROPERTY_DEFINITION(CAddress, MailCoreString, nonEncodedRFC822String) + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CAddress, CAddress, addressWithDisplayName, MailCoreString, MailCoreString) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CAddress, CAddress, addressWithMailbox, MailCoreString) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CAddress, CAddress, addressWithRFC822String, MailCoreString) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CAddress, CAddress, addressWithNonEncodedRFC822String, MailCoreString) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CAddress, CArray, addressesWithRFC822String, MailCoreString) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CAddress, CArray, addressesWithNonEncodedRFC822String, MailCoreString) + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CAddress, MailCoreString, RFC822StringForAddresses, CArray) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CAddress, MailCoreString, nonEncodedRFC822StringForAddresses, CArray) + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CAddress, CAddress, init) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/include/MailCore/CArray.h b/src/include/MailCore/CArray.h new file mode 100644 index 000000000..8a58211b2 --- /dev/null +++ b/src/include/MailCore/CArray.h @@ -0,0 +1,36 @@ +#ifndef MAILCORE_CARRAY_H +#define MAILCORE_CARRAY_H + +#include "stdint.h" +#include "CBase.h" +#include "CObject.h" +#include "CData.h" +#include "MailCoreString.h" + +#ifdef __cplusplus + +namespace mailcore { + class Array; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CArray, mailcore::Array) + CMAILCORE_EXPORT C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CArray) + + C_SYNTHESIZE_READONLY_PROPERTY_DEFINITION(CArray, uint32_t, count) + + C_SYNTHESIZE_FUNC_DEFINITION(CArray, void, addObject, CObject) + C_SYNTHESIZE_FUNC_DEFINITION(CArray, CObject, getObject, uint32_t) + C_SYNTHESIZE_FUNC_DEFINITION(CArray, uint32_t, getUint, uint32_t) + + C_SYNTHESIZE_FUNC_DEFINITION(CArray, MailCoreString, description) + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CArray, CArray, init) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/include/MailCore/CAttachment.h b/src/include/MailCore/CAttachment.h new file mode 100644 index 000000000..c7707af36 --- /dev/null +++ b/src/include/MailCore/CAttachment.h @@ -0,0 +1,35 @@ +#ifndef CAttachment_h +#define CAttachment_h + +#include "CBase.h" +#include "CArray.h" +#include "CAbstractPart.h" + +#ifdef __cplusplus + +namespace mailcore { + class Attachment; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CAttachment, mailcore::Attachment) + + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CAttachment) + + C_SYNTHESIZE_PROPERTY_DEFINITION(CAttachment, CData, data, setData) + C_SYNTHESIZE_READONLY_PROPERTY_DEFINITION(CAttachment, MailCoreString, decodedString) + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CAttachment, MailCoreString, mimeTypeForFilename, MailCoreString) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CAttachment, CAttachment, attachmentWithContentsOfFile, MailCoreString) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CAttachment, CAttachment, attachmentWithData, MailCoreString, CData) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CAttachment, CAttachment, attachmentWithHTMLString, MailCoreString) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CAttachment, CAttachment, attachmentWithRFC822Message, CData) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CAttachment, CAttachment, attachmentWithText, MailCoreString) + +#ifdef __cplusplus +} +#endif + +#endif /* CAttachment_h */ diff --git a/src/include/MailCore/CAutoreleasePool.h b/src/include/MailCore/CAutoreleasePool.h new file mode 100644 index 000000000..d81778f95 --- /dev/null +++ b/src/include/MailCore/CAutoreleasePool.h @@ -0,0 +1,31 @@ +// +// CAutoreleasePool.hpp +// mailcore2 +// +// Created by Andriy Druk on 3/12/19. +// Copyright © 2019 MailCore. All rights reserved. +// + +#ifndef MAILCORE_C_AUTORELEASEPOOL_H +#define MAILCORE_C_AUTORELEASEPOOL_H + +#include "CBase.h" + +#ifdef __cplusplus + +namespace mailcore { + class AutoreleasePool; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CAutoreleasePool, mailcore::AutoreleasePool) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CAutoreleasePool, CAutoreleasePool, init) + + +#ifdef __cplusplus +} +#endif + +#endif /* MAILCORE_C_AUTORELEASEPOOL_H */ diff --git a/src/include/MailCore/CBase.h b/src/include/MailCore/CBase.h new file mode 100644 index 000000000..2a7d8df87 --- /dev/null +++ b/src/include/MailCore/CBase.h @@ -0,0 +1,116 @@ +#ifndef MAILCORE_CBASE_H +#define MAILCORE_CBASE_H + +#include +#include + +//TODO: fix ICUBasetypes +#ifdef _MSC_VER + +#include + +#elif defined(__CHAR16_TYPE__) + #if defined(ANDROID) + typedef char16_t UChar; + #else + typedef __CHAR16_TYPE__ UChar; + #endif +#else +typedef uint16_t UChar; +#endif + +#ifdef _MSC_VER +# ifdef CMAILCORE_DLL +# define CMAILCORE_EXPORT __declspec(dllexport) +# else +# define CMAILCORE_EXPORT __declspec(dllimport) +# endif +#else +# define CMAILCORE_EXPORT +#endif + +#if __has_attribute(swift_name) +# define CF_SWIFT_NAME(_name) __attribute__((swift_name(#_name))) +#else +# define CF_SWIFT_NAME(_name) +#endif + +#define __GET_MACRO(_6,_5,_4,_3,_2,_1,_0,NAME,...) NAME + +#ifdef __cplusplus + +#define C_SYNTHESIZE_STRUCT_DEFINITION(structName, nativeType) \ +typedef struct structName { \ +nativeType* instance; \ +} structName; \ +CMAILCORE_EXPORT structName structName##_##new(nativeType *obj); \ +CMAILCORE_EXPORT void structName##_##retain(structName self); \ +CMAILCORE_EXPORT void structName##_##release(structName self); \ +CMAILCORE_EXPORT int structName##_##retainCount(structName self); \ + +#else + +#define C_SYNTHESIZE_STRUCT_DEFINITION(structName, nativeType) \ +typedef struct structName { \ +void* instance; \ +} structName; \ +CMAILCORE_EXPORT void structName##_##retain(structName self) CF_SWIFT_NAME(structName.retain(self:)); \ +CMAILCORE_EXPORT void structName##_##release(structName self) CF_SWIFT_NAME(structName.release(self:)); \ +CMAILCORE_EXPORT int structName##_##retainCount(structName self) CF_SWIFT_NAME(structName.retainCount(self:)); \ + +#endif + +#define C_SYNTHESIZE_COBJECT_CAST_DEFINITION(structName) \ +CMAILCORE_EXPORT CObject structName##_##toCObject(structName self) CF_SWIFT_NAME(structName.toCObject(self:)); \ +CMAILCORE_EXPORT structName structName##_##newWithCObject(CObject obj) CF_SWIFT_NAME(structName.init(cobject:)); \ +CMAILCORE_EXPORT CData structName##_##mailCoreTypeInfo(void); \ +CMAILCORE_EXPORT CObject structName##_##copy(structName self) CF_SWIFT_NAME(structName.copy(self:)); \ + +#define C_SYNTHESIZE_READONLY_PROPERTY_DEFINITION(structName, propertyType, getterName) \ +CMAILCORE_EXPORT propertyType structName##_##getterName(struct structName self) CF_SWIFT_NAME(getter:structName.getterName(self:)); \ + +#define C_SYNTHESIZE_PROPERTY_DEFINITION(structName, propertyType, getterName, setterName) \ +CMAILCORE_EXPORT propertyType structName##_##getterName(struct structName self) CF_SWIFT_NAME(getter:structName.getterName(self:)); \ +CMAILCORE_EXPORT void structName##_##setterName(struct structName self, propertyType port) CF_SWIFT_NAME(setter:structName.getterName(self:newValue:)); \ + +#define C_SYNTHESIZE_FUNC_DEFINITION_0(structName, returnType, funcName) \ +CMAILCORE_EXPORT returnType structName##_##funcName(struct structName self) CF_SWIFT_NAME(structName.funcName(self:)); \ + +#define C_SYNTHESIZE_FUNC_DEFINITION_1(structName, returnType, funcName, arg1Type) \ +CMAILCORE_EXPORT returnType structName##_##funcName(struct structName self, arg1Type arg1) CF_SWIFT_NAME(structName.funcName(self:_:)); \ + +#define C_SYNTHESIZE_FUNC_DEFINITION_2(structName, returnType, funcName, arg1Type, arg2Type) \ +CMAILCORE_EXPORT returnType structName##_##funcName(struct structName self, arg1Type arg1, arg2Type arg2) CF_SWIFT_NAME(structName.funcName(self:_:_:)); \ + +#define C_SYNTHESIZE_FUNC_DEFINITION_3(structName, returnType, funcName, arg1Type, arg2Type, arg3Type) \ +CMAILCORE_EXPORT returnType structName##_##funcName(struct structName self, arg1Type arg1, arg2Type arg2, arg3Type arg3) CF_SWIFT_NAME(structName.funcName(self:_:_:_:)); \ + +#define C_SYNTHESIZE_FUNC_DEFINITION_4(structName, returnType, funcName, arg1Type, arg2Type, arg3Type, argType4) \ +CMAILCORE_EXPORT returnType structName##_##funcName(struct structName self, arg1Type arg1, arg2Type arg2, arg3Type arg3, argType4 arg4) CF_SWIFT_NAME(structName.funcName(self:_:_:_:_:)); \ + +#define C_SYNTHESIZE_FUNC_DEFINITION_5(structName, returnType, funcName, arg1Type, arg2Type, arg3Type, argType4, argType5) \ +CMAILCORE_EXPORT returnType structName##_##funcName(struct structName self, arg1Type arg1, arg2Type arg2, arg3Type arg3, argType4 arg4, argType5 arg5) CF_SWIFT_NAME(structName.funcName(self:_:_:_:_:_:)); \ + +#define C_SYNTHESIZE_FUNC_DEFINITION_6(structName, returnType, funcName, arg1Type, arg2Type, arg3Type, argType4, argType5, argType6) \ +CMAILCORE_EXPORT returnType structName##_##funcName(struct structName self, arg1Type arg1, arg2Type arg2, arg3Type arg3, argType4 arg4, argType5 arg5, argType6 arg6) CF_SWIFT_NAME(structName.funcName(self:_:_:_:_:_:_:)); \ + +#define C_SYNTHESIZE_STATIC_FUNC_DEFINITION_0(structName, returnType, funcName) \ +CMAILCORE_EXPORT returnType structName##_##funcName(void); \ + +#define C_SYNTHESIZE_STATIC_FUNC_DEFINITION_1(structName, returnType, funcName, arg1Type) \ +CMAILCORE_EXPORT returnType structName##_##funcName(arg1Type arg1) CF_SWIFT_NAME(structName.funcName(_:)); \ + +#define C_SYNTHESIZE_STATIC_FUNC_DEFINITION_2(structName, returnType, funcName, arg1Type, arg2Type) \ +CMAILCORE_EXPORT returnType structName##_##funcName(arg1Type arg1, arg2Type arg2) CF_SWIFT_NAME(structName.funcName(_:_:)); \ + +#define C_SYNTHESIZE_STATIC_FUNC_DEFINITION_3(structName, returnType, funcName, arg1Type, arg2Type, arg3Type) \ +CMAILCORE_EXPORT returnType structName##_##funcName(arg1Type arg1, arg2Type arg2, arg3Type arg3) CF_SWIFT_NAME(structName.funcName(_:_:_:)); \ + +#define C_SYNTHESIZE_STATIC_FUNC_DEFINITION_4(structName, returnType, funcName, arg1Type, arg2Type, arg3Type, arg4Type) \ +CMAILCORE_EXPORT returnType structName##_##funcName(arg1Type arg1, arg2Type arg2, arg3Type arg3, arg4Type arg4) CF_SWIFT_NAME(structName.funcName(_:_:_:_:)); \ + +#define C_SYNTHESIZE_FUNC_DEFINITION(structName, returnType, funcName,...) __GET_MACRO(_U, ##__VA_ARGS__,C_SYNTHESIZE_FUNC_DEFINITION_6,C_SYNTHESIZE_FUNC_DEFINITION_5,C_SYNTHESIZE_FUNC_DEFINITION_4,C_SYNTHESIZE_FUNC_DEFINITION_3,C_SYNTHESIZE_FUNC_DEFINITION_2,C_SYNTHESIZE_FUNC_DEFINITION_1,C_SYNTHESIZE_FUNC_DEFINITION_0)(structName, returnType, funcName, ##__VA_ARGS__) + +#define C_SYNTHESIZE_STATIC_FUNC_DEFINITION(structName, returnType, funcName,...) __GET_MACRO(_U, _U, _U, ##__VA_ARGS__, C_SYNTHESIZE_STATIC_FUNC_DEFINITION_4, C_SYNTHESIZE_STATIC_FUNC_DEFINITION_3, C_SYNTHESIZE_STATIC_FUNC_DEFINITION_2, C_SYNTHESIZE_STATIC_FUNC_DEFINITION_1, C_SYNTHESIZE_STATIC_FUNC_DEFINITION_0)(structName, returnType, funcName, ##__VA_ARGS__) + +#endif diff --git a/src/include/MailCore/CCore.h b/src/include/MailCore/CCore.h new file mode 100644 index 000000000..968fffb45 --- /dev/null +++ b/src/include/MailCore/CCore.h @@ -0,0 +1,42 @@ +#ifndef CCore_Bridging_Header_h +#define CCore_Bridging_Header_h + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include + +#include +#include + +#endif /* CCore_Bridging_Header_h */ diff --git a/src/include/MailCore/CData.h b/src/include/MailCore/CData.h new file mode 100644 index 000000000..037f745bf --- /dev/null +++ b/src/include/MailCore/CData.h @@ -0,0 +1,41 @@ +#ifndef MAILCORE_CDATA_H +#define MAILCORE_CDATA_H + +#include "stdint.h" +#include "CBase.h" +#include "CObject.h" + +#ifdef __cplusplus + +#include + +namespace mailcore { + class Data; +} + +extern "C" { +#endif + + typedef void (*CBytesDeallocator)(char * bytes, unsigned int length); + + C_SYNTHESIZE_STRUCT_DEFINITION(CData, mailcore::Data) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CData) + + C_SYNTHESIZE_READONLY_PROPERTY_DEFINITION(CData, const char*, bytes) + C_SYNTHESIZE_READONLY_PROPERTY_DEFINITION(CData, unsigned int, length) + C_SYNTHESIZE_READONLY_PROPERTY_DEFINITION(CData, bool, externallyAllocatedMemory) + C_SYNTHESIZE_READONLY_PROPERTY_DEFINITION(CData, CBytesDeallocator, bytesDeallocator) + + C_SYNTHESIZE_FUNC_DEFINITION(CData, void, destructiveDataClear) + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CData, CData, dataWithBytes, const char*, unsigned int) + + CMAILCORE_EXPORT CData Value_mailCoreTypeInfo(void); + CMAILCORE_EXPORT CData getTypeNameFromObject(CObject obj); + +#ifdef __cplusplus +} +CMAILCORE_EXPORT CData getTypeNameFromObject(const std::type_info * info); +#endif + +#endif diff --git a/src/include/MailCore/CDictionary.h b/src/include/MailCore/CDictionary.h new file mode 100644 index 000000000..eae03ed3a --- /dev/null +++ b/src/include/MailCore/CDictionary.h @@ -0,0 +1,35 @@ +#ifndef CDictionary_h +#define CDictionary_h + +#include "stdint.h" +#include "CBase.h" +#include "CObject.h" +#include "CArray.h" +#include "CData.h" + +#ifdef __cplusplus + +namespace mailcore { + class HashMap; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CDictionary, mailcore::HashMap) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CDictionary) + + C_SYNTHESIZE_FUNC_DEFINITION(CDictionary, CArray, allKeys) + C_SYNTHESIZE_FUNC_DEFINITION(CDictionary, CObject, objectForKey, CObject) + C_SYNTHESIZE_FUNC_DEFINITION(CDictionary, void, setObjectForKey, CObject, CObject) + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CDictionary, CDictionary, init) + + C_SYNTHESIZE_FUNC_DEFINITION(CObject, CDictionary, serializable); + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CObject, CObject, objectWithSerializable, CDictionary); + +#ifdef __cplusplus +} +#endif + +#endif /* CDictionary_hpp */ diff --git a/src/include/MailCore/CIMAPAppendMessageOperation.h b/src/include/MailCore/CIMAPAppendMessageOperation.h new file mode 100644 index 000000000..1c4ccb910 --- /dev/null +++ b/src/include/MailCore/CIMAPAppendMessageOperation.h @@ -0,0 +1,27 @@ +#ifndef MAILCORE_CIMAP_APPEND_MESSAGE_OPERATION_H +#define MAILCORE_CIMAP_APPEND_MESSAGE_OPERATION_H + +#include "CIMAPBaseOperation.h" +#include "stdint.h" +#include "time.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPAppendMessageOperation; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPAppendMessageOperation, mailcore::IMAPAppendMessageOperation) + + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPAppendMessageOperation) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPAppendMessageOperation, time_t, date, setDate) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAppendMessageOperation, uint32_t, createdUID) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/include/MailCore/CIMAPAsyncSession.h b/src/include/MailCore/CIMAPAsyncSession.h new file mode 100644 index 000000000..1fc2941e9 --- /dev/null +++ b/src/include/MailCore/CIMAPAsyncSession.h @@ -0,0 +1,148 @@ +#ifndef MAILCORE_CIMAP_SESSION_H +#define MAILCORE_CIMAP_SESSION_H + +#include +#include +#include + +#include + +#include "CBase.h" +#include "CIndexSet.h" +#include "CArray.h" +#include "MailCoreString.h" +#include "CIMAPNamespace.h" +#include "CIMAPBaseOperation.h" +#include "CIMAPAppendMessageOperation.h" +#include "CIMAPFetchContentOperation.h" +#include "CIMAPFetchMessagesOperation.h" +#include "CIMAPSearchOperation.h" +#include "CIMAPSearchExpression.h" +#include "CIMAPCopyMessagesOperation.h" +#include "CIMAPFolderInfoOperation.h" +#include "CIMAPFolderStatusOperation.h" +#include "CMessageConstants.h" +#include "CIMAPIdleOperation.h" +#include "CIMAPFetchFoldersOperation.h" +#include "CIMAPCapabilityOperation.h" +#include "CIMAPCheckAccountOperation.h" +#include "CIMAPCustomCommandOperation.h" +#include "CIMAPFetchContentToFileOperation.h" +#include "CIMAPFetchNamespaceOperation.h" +#include "CIMAPMoveMessagesOperation.h" +#include "CIMAPFetchParsedContentOperation.h" +#include "CIMAPMessageRenderingOperation.h" +#include "CIMAPQuotaOperation.h" +#include "CIMAPMessage.h" +#include "CIMAPIdentity.h" +#include "CIMAPIdentityOperation.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPAsyncSession; +} + +class CIMAPCallbackBridge; + +extern "C" { +#endif + + typedef void (*MCOConnectionLoggerReleaseBlock)(const void* logger); + + typedef struct CIMAPAsyncSession { +#ifdef __cplusplus + mailcore::IMAPAsyncSession* instance; + CIMAPCallbackBridge* _callback; +#else + void* instance; + void* _callback; +#endif + } CIMAPAsyncSession; + + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPAsyncSession, MailCoreString, hostname, setHostname) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPAsyncSession, unsigned int, port, setPort) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPAsyncSession, MailCoreString, username, setUsername) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPAsyncSession, MailCoreString, password, setPassword) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPAsyncSession, ConnectionType, connectionType, setConnectionType) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPAsyncSession, time_t, timeout, setTimeout) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPAsyncSession, bool, isCheckCertificateEnabled, setCheckCertificateEnabled) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPAsyncSession, MailCoreString, OAuth2Token, setOAuth2Token) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPAsyncSession, CAuthType, authType, setAuthType) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPAsyncSession, unsigned int, maximumConnections, setMaximumConnections) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPAsyncSession, bool, allowsFolderConcurrentAccessEnabled, setAllowsFolderConcurrentAccessEnabled) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPAsyncSession, CIMAPNamespace, defaultNamespace, setDefaultNamespace) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPAsyncSession, CIMAPIdentity, clientIdentity, setClientIdentity) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPAsyncSession, CIMAPIdentity, serverIdentity, setServerIdentity) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPAsyncSession, bool, isQResyncCompatible, setQResyncCompatible) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPAsyncSession, bool, isVoIPEnabled, setVoIPEnabled) + + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, dispatch_queue_t, dispatchQueue) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, void, setDispatchQueue, dispatch_queue_t) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, void, setConnectionLogger, void*) + + C_SYNTHESIZE_READONLY_PROPERTY_DEFINITION(CIMAPAsyncSession, bool, isIdleEnabled) + C_SYNTHESIZE_READONLY_PROPERTY_DEFINITION(CIMAPAsyncSession, bool, isOperationQueueRunning) + + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, void, cancelAllOperations) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPBaseOperation, connectOperation) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPBaseOperation, disconnectOperation) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPBaseOperation, noopOperation) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPBaseOperation, expungeOperation, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPBaseOperation, createFolderOperation, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPBaseOperation, renameFolderOperation, MailCoreString, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPBaseOperation, deleteFolderOperation, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPBaseOperation, storeFlagsByUIDOperation, MailCoreString, CIndexSet, IMAPStoreFlagsRequestKind, CMessageFlag, CArray) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPBaseOperation, storeFlagsByNumberOperation, MailCoreString, CIndexSet, IMAPStoreFlagsRequestKind, CMessageFlag, CArray) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPBaseOperation, storeLabelsByUIDOperation, MailCoreString, CIndexSet, IMAPStoreFlagsRequestKind, CArray) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPBaseOperation, storeLabelsByNumberOperation, MailCoreString, CIndexSet, IMAPStoreFlagsRequestKind, CArray) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPBaseOperation, subscribeFolderOperation, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPBaseOperation, unsubscribeFolderOperation, MailCoreString) + + + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPFetchFoldersOperation, fetchSubscribedFoldersOperation) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPFetchContentToFileOperation, fetchMessageAttachmentToFileOperation, MailCoreString, uint32_t, MailCoreString, Encoding, MailCoreString, bool) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPFetchNamespaceOperation, fetchNamespaceOperation) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPCustomCommandOperation, customCommandOperation, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPCheckAccountOperation, checkAccountOperation) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPCapabilityOperation, capabilityOperation) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPFetchFoldersOperation, fetchAllFoldersOperation) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPAppendMessageOperation, appendMessageOperation, MailCoreString, MailCoreString, CMessageFlag, CArray) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPAppendMessageOperation, appendMessageOperationWithData, MailCoreString, CData, CMessageFlag, CArray) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPFetchMessagesOperation, fetchMessagesByNumberOperation, MailCoreString, CIMAPMessagesRequestKind, CIndexSet) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPFetchMessagesOperation, fetchMessagesByUIDOperation, MailCoreString, CIMAPMessagesRequestKind, CIndexSet) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPFetchMessagesOperation, syncMessagesByUIDOperation, MailCoreString, CIMAPMessagesRequestKind, CIndexSet, uint64_t) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPFetchContentOperation, fetchMessageByUIDOperation, MailCoreString, uint32_t, bool) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPFetchContentOperation, fetchMessageByNumberOperation, MailCoreString, uint32_t, bool) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPFetchContentOperation, fetchMessageAttachmentByUIDOperation, MailCoreString, uint32_t, MailCoreString, Encoding, bool) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPFetchContentOperation, fetchMessageAttachmentByNumberOperation, MailCoreString, uint32_t, MailCoreString, Encoding, bool) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPSearchOperation, searchOperationWithExpression, MailCoreString, CIMAPSearchExpression) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPSearchOperation, searchOperation, MailCoreString, IMAPSearchKind, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPCopyMessagesOperation, copyMessagesOperation, MailCoreString, CIndexSet, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPFolderInfoOperation, folderInfoOperation, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPFolderStatusOperation, folderStatusOperation, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPIdleOperation, idleOperation, MailCoreString, uint32_t) + + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPMoveMessagesOperation, moveMessagesOperation, MailCoreString, CIndexSet, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPFetchParsedContentOperation, fetchParsedMessageOperationByUIDOperation, MailCoreString, uint32_t, bool) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPFetchParsedContentOperation, fetchParsedMessageOperationByNumberOperation, MailCoreString, uint32_t, bool) + + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPMessageRenderingOperation, htmlRenderingOperation, CIMAPMessage, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPMessageRenderingOperation, htmlBodyRenderingOperation, CIMAPMessage, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPMessageRenderingOperation, plainTextRenderingOperation, CIMAPMessage, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPMessageRenderingOperation, plainTextBodyRenderingOperation, CIMAPMessage, MailCoreString, bool) + + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPQuotaOperation, quotaOperation) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPAsyncSession, CIMAPIdentityOperation, identityOperationWithClientIdentity, CIMAPIdentity) + + + CMAILCORE_EXPORT CIMAPAsyncSession CIMAPAsyncSession_new(CConnectionLogger logger, CConnectionLoggerRelease releaseLoggerBlock); + + CMAILCORE_EXPORT void CIMAPAsyncSession_release(CIMAPAsyncSession self) + CF_SWIFT_NAME(CIMAPAsyncSession.release(self:)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/include/MailCore/CIMAPBaseOperation.h b/src/include/MailCore/CIMAPBaseOperation.h new file mode 100644 index 000000000..ac711dd64 --- /dev/null +++ b/src/include/MailCore/CIMAPBaseOperation.h @@ -0,0 +1,56 @@ +#ifndef MAILCORE_CIMAP_BASE_OPERATION_H +#define MAILCORE_CIMAP_BASE_OPERATION_H + +#include "COperation.h" + +#ifdef __cplusplus +class CIMAPBaseOperationIMAPCallback; + +namespace mailcore { + class IMAPOperation; +} + +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + typedef void (*CIMAPProgressBlock)(const void* userInfo, unsigned int current, unsigned int maximum); + + typedef struct CIMAPAsyncSession CIMAPAsyncSession; + + struct CIMAPBaseOperation { +#ifdef __cplusplus + mailcore::IMAPOperation* instance; + CIMAPBaseOperationIMAPCallback* _callback; +#else + void* instance; + void* _callback; +#endif + COperation cOperation; + }; + typedef struct CIMAPBaseOperation CIMAPBaseOperation; + + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPBaseOperation) + + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPBaseOperation, ErrorCode, error) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPBaseOperation, bool, interruptCurrentCommand) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPBaseOperation, CIMAPBaseOperation, setProgressBlocks, CIMAPProgressBlock, CIMAPProgressBlock, const void*) + + CMAILCORE_EXPORT void CIMAPBaseOperation_retain(CIMAPBaseOperation operation) + CF_SWIFT_NAME(CIMAPBaseOperation.retain(self:)); + + CMAILCORE_EXPORT void CIMAPBaseOperation_release(CIMAPBaseOperation operation) + CF_SWIFT_NAME(CIMAPBaseOperation.release(self:)); + + CMAILCORE_EXPORT int CIMAPBaseOperation_retainCount(CIMAPBaseOperation self) + CF_SWIFT_NAME(CIMAPBaseOperation.retainCount(self:)); + +#ifdef __cplusplus +} + +CIMAPBaseOperation CIMAPBaseOperation_new(mailcore::IMAPOperation* operation); +#endif + +#endif diff --git a/src/include/MailCore/CIMAPCapabilityOperation.h b/src/include/MailCore/CIMAPCapabilityOperation.h new file mode 100644 index 000000000..819c6e7cd --- /dev/null +++ b/src/include/MailCore/CIMAPCapabilityOperation.h @@ -0,0 +1,24 @@ +#ifndef CIMAPCapabilityOperation_hpp +#define CIMAPCapabilityOperation_hpp + +#include "CIMAPBaseOperation.h" +#include "CIndexSet.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPCapabilityOperation; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPCapabilityOperation, mailcore::IMAPCapabilityOperation) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPCapabilityOperation) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPCapabilityOperation, CIndexSet, capabilities) + +#ifdef __cplusplus +} +#endif + +#endif /* CIMAPCapabilityOperation_hpp */ diff --git a/src/include/MailCore/CIMAPCheckAccountOperation.h b/src/include/MailCore/CIMAPCheckAccountOperation.h new file mode 100644 index 000000000..c43da5513 --- /dev/null +++ b/src/include/MailCore/CIMAPCheckAccountOperation.h @@ -0,0 +1,27 @@ +#ifndef CIMAPCheckAccountOperation_hpp +#define CIMAPCheckAccountOperation_hpp + +#include "CIMAPBaseOperation.h" +#include "CBase.h" +#include "MailCoreString.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPCheckAccountOperation; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPCheckAccountOperation, mailcore::IMAPCheckAccountOperation) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPCheckAccountOperation) + + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPCheckAccountOperation, MailCoreString, loginResponse) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPCheckAccountOperation, CData, loginUnparsedResponseData) + +#ifdef __cplusplus +} +#endif + +#endif /* CIMAPCheckAccountOperation_hpp */ diff --git a/src/include/MailCore/CIMAPCopyMessagesOperation.h b/src/include/MailCore/CIMAPCopyMessagesOperation.h new file mode 100644 index 000000000..58cfa1f03 --- /dev/null +++ b/src/include/MailCore/CIMAPCopyMessagesOperation.h @@ -0,0 +1,24 @@ +#ifndef MAILCORE_CIMAP_COPY_MESSAGES_OPERATION_H +#define MAILCORE_CIMAP_COPY_MESSAGES_OPERATION_H + +#include "CIMAPBaseOperation.h" +#include "CDictionary.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPCopyMessagesOperation; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPCopyMessagesOperation, mailcore::IMAPCopyMessagesOperation) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPCopyMessagesOperation) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPCopyMessagesOperation, CDictionary, uidMapping) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/include/MailCore/CIMAPCustomCommandOperation.h b/src/include/MailCore/CIMAPCustomCommandOperation.h new file mode 100644 index 000000000..c55c342e4 --- /dev/null +++ b/src/include/MailCore/CIMAPCustomCommandOperation.h @@ -0,0 +1,25 @@ +#ifndef CIMAPCustomCommandOperation_hpp +#define CIMAPCustomCommandOperation_hpp + +#include "CIMAPBaseOperation.h" +#include "CBase.h" +#include "MailCoreString.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPCustomCommandOperation; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPCustomCommandOperation, mailcore::IMAPCustomCommandOperation) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPCustomCommandOperation) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPCustomCommandOperation, MailCoreString, response) + +#ifdef __cplusplus +} +#endif + +#endif /* CIMAPCustomCommandOperation_hpp */ diff --git a/src/include/MailCore/CIMAPFetchContentOperation.h b/src/include/MailCore/CIMAPFetchContentOperation.h new file mode 100644 index 000000000..b6ca13c7d --- /dev/null +++ b/src/include/MailCore/CIMAPFetchContentOperation.h @@ -0,0 +1,24 @@ +#ifndef MAILCORE_CIMAP_FETCH_CONTENT_OPERATION_H +#define MAILCORE_CIMAP_FETCH_CONTENT_OPERATION_H + +#include "CIMAPBaseOperation.h" +#include "CData.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPFetchContentOperation; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPFetchContentOperation, mailcore::IMAPFetchContentOperation) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPFetchContentOperation) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPFetchContentOperation, CData, data) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/include/MailCore/CIMAPFetchContentToFileOperation.h b/src/include/MailCore/CIMAPFetchContentToFileOperation.h new file mode 100644 index 000000000..25e657770 --- /dev/null +++ b/src/include/MailCore/CIMAPFetchContentToFileOperation.h @@ -0,0 +1,28 @@ +#ifndef CIMAPFetchContentToFileOperation_hpp +#define CIMAPFetchContentToFileOperation_hpp + +#include "CIMAPBaseOperation.h" +#include "CBase.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPFetchContentToFileOperation; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPFetchContentToFileOperation, mailcore::IMAPFetchContentToFileOperation) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPFetchContentToFileOperation) + + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPFetchContentToFileOperation, bool, isLoadingByChunksEnabled, setLoadingByChunksEnabled) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPFetchContentToFileOperation, uint32_t, chunksSize, setChunksSize) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPFetchContentToFileOperation, uint32_t, estimatedSize, setEstimatedSize) + +#ifdef __cplusplus +} +#endif + + +#endif /* CIMAPFetchContentToFileOperation_hpp */ diff --git a/src/include/MailCore/CIMAPFetchFoldersOperation.h b/src/include/MailCore/CIMAPFetchFoldersOperation.h new file mode 100644 index 000000000..b44069e1f --- /dev/null +++ b/src/include/MailCore/CIMAPFetchFoldersOperation.h @@ -0,0 +1,32 @@ +// +// CIMAPFetchFoldersOperation.hpp +// mailcore2 +// +// Created by Andrew on 12/5/16. +// Copyright © 2016 MailCore. All rights reserved. +// + +#ifndef CIMAPFetchFoldersOperation_hpp +#define CIMAPFetchFoldersOperation_hpp + +#include "CIMAPBaseOperation.h" +#include "CArray.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPFetchFoldersOperation; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPFetchFoldersOperation, mailcore::IMAPFetchFoldersOperation) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPFetchFoldersOperation) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPFetchFoldersOperation, CArray, folders) + +#ifdef __cplusplus +} +#endif + +#endif /* CIMAPFetchFoldersOperation_hpp */ diff --git a/src/include/MailCore/CIMAPFetchMessagesOperation.h b/src/include/MailCore/CIMAPFetchMessagesOperation.h new file mode 100644 index 000000000..1a6decaab --- /dev/null +++ b/src/include/MailCore/CIMAPFetchMessagesOperation.h @@ -0,0 +1,29 @@ +#ifndef MAILCORE_CIMAP_FETCH_MESSAGES_OPERATION_H +#define MAILCORE_CIMAP_FETCH_MESSAGES_OPERATION_H + +#include "CIMAPBaseOperation.h" +#include "CArray.h" +#include "CIndexSet.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPFetchMessagesOperation; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPFetchMessagesOperation, mailcore::IMAPFetchMessagesOperation) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPFetchMessagesOperation) + + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPFetchMessagesOperation, CArray, extraHeaders, setExtraHeaders) + + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPFetchMessagesOperation, CArray, messages) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPFetchMessagesOperation, CIndexSet, vanishedMessages) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/include/MailCore/CIMAPFetchNamespaceOperation.h b/src/include/MailCore/CIMAPFetchNamespaceOperation.h new file mode 100644 index 000000000..8b94b5699 --- /dev/null +++ b/src/include/MailCore/CIMAPFetchNamespaceOperation.h @@ -0,0 +1,24 @@ +#ifndef CIMAPFetchNamespaceOperation_hpp +#define CIMAPFetchNamespaceOperation_hpp + +#include "CIMAPBaseOperation.h" +#include "CDictionary.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPFetchNamespaceOperation; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPFetchNamespaceOperation, mailcore::IMAPFetchNamespaceOperation) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPFetchNamespaceOperation) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPFetchNamespaceOperation, CDictionary, namespaces) + +#ifdef __cplusplus +} +#endif + +#endif /* CIMAPFetchNamespaceOperation_hpp */ diff --git a/src/include/MailCore/CIMAPFetchParsedContentOperation.h b/src/include/MailCore/CIMAPFetchParsedContentOperation.h new file mode 100644 index 000000000..ab8d47678 --- /dev/null +++ b/src/include/MailCore/CIMAPFetchParsedContentOperation.h @@ -0,0 +1,24 @@ +#ifndef CIMAPFetchParsedContentOperation_hpp +#define CIMAPFetchParsedContentOperation_hpp + +#include "CIMAPBaseOperation.h" +#include "CMessageParser.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPFetchParsedContentOperation; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPFetchParsedContentOperation, mailcore::IMAPFetchParsedContentOperation) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPFetchParsedContentOperation) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPFetchParsedContentOperation, CMessageParser, parser) + +#ifdef __cplusplus +} +#endif + +#endif /* CIMAPFetchParsedContentOperation_hpp */ diff --git a/src/include/MailCore/CIMAPFolder.h b/src/include/MailCore/CIMAPFolder.h new file mode 100644 index 000000000..19ba13fcf --- /dev/null +++ b/src/include/MailCore/CIMAPFolder.h @@ -0,0 +1,32 @@ +#ifndef CIMAPFolder_h +#define CIMAPFolder_h + +#include + +#include "CBase.h" +#include "CMessageConstants.h" +#include "CObject.h" + +#include "MailCoreString.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPFolder; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPFolder, mailcore::IMAPFolder) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPFolder) + + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPFolder, MailCoreString, path, setPath) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPFolder, char, delimiter, setDelimiter) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPFolder, CIMAPFolderFlag, flags, setFlags) + +#ifdef __cplusplus +} +#endif + +#endif /* CIMAPFolder_h */ diff --git a/src/include/MailCore/CIMAPFolderInfo.h b/src/include/MailCore/CIMAPFolderInfo.h new file mode 100644 index 000000000..d863f5726 --- /dev/null +++ b/src/include/MailCore/CIMAPFolderInfo.h @@ -0,0 +1,34 @@ +#ifndef CIMAPFolderInfo_h +#define CIMAPFolderInfo_h + +#include "stdint.h" +#include "CBase.h" +#include "CMessageConstants.h" +#include "CObject.h" +#include "CData.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPFolderInfo; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPFolderInfo, mailcore::IMAPFolderInfo) + + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPFolderInfo) + + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPFolderInfo, uint32_t, uidNext, setUidNext) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPFolderInfo, uint32_t, uidValidity, setUidValidity) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPFolderInfo, uint64_t, modSequenceValue, setModSequenceValue) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPFolderInfo, int, messageCount, setMessageCount) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPFolderInfo, uint32_t, firstUnseenUid, setFirstUnseenUid) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPFolderInfo, bool, allowsNewPermanentFlags, setAllowsNewPermanentFlags) + +#ifdef __cplusplus +} +#endif + +#endif /* CIMAPFolderInfo_h */ diff --git a/src/include/MailCore/CIMAPFolderInfoOperation.h b/src/include/MailCore/CIMAPFolderInfoOperation.h new file mode 100644 index 000000000..1dba3ae03 --- /dev/null +++ b/src/include/MailCore/CIMAPFolderInfoOperation.h @@ -0,0 +1,26 @@ +#ifndef MAILCORE_CIMAP_FOLDER_INFO_OPERATION_H +#define MAILCORE_CIMAP_FOLDER_INFO_OPERATION_H + +#include "CBase.h" +#include "CIMAPBaseOperation.h" +#include "CIMAPFolderInfo.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPFolderInfoOperation; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPFolderInfoOperation, mailcore::IMAPFolderInfoOperation) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPFolderInfoOperation) + + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPFolderInfoOperation, CIMAPFolderInfo, info) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/include/MailCore/CIMAPFolderStatus.h b/src/include/MailCore/CIMAPFolderStatus.h new file mode 100644 index 000000000..e8057d4f2 --- /dev/null +++ b/src/include/MailCore/CIMAPFolderStatus.h @@ -0,0 +1,34 @@ +#ifndef CIMAPFolderStatus_h +#define CIMAPFolderStatus_h + +#include "stdint.h" +#include "CBase.h" +#include "CMessageConstants.h" +#include "CObject.h" +#include "CData.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPFolderStatus; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPFolderStatus, mailcore::IMAPFolderStatus) + + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPFolderStatus) + + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPFolderStatus, uint32_t, uidNext, setUidNext) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPFolderStatus, uint32_t, uidValidity, setUidValidity) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPFolderStatus, uint32_t, recentCount, setRecentCount) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPFolderStatus, uint32_t, unseenCount, setUnseenCount) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPFolderStatus, uint32_t, messageCount, setMessageCount) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPFolderStatus, uint64_t, highestModSeqValue, setHighestModSeqValue) + +#ifdef __cplusplus +} +#endif + +#endif /* CIMAPFolderStatus_h */ diff --git a/src/include/MailCore/CIMAPFolderStatusOperation.h b/src/include/MailCore/CIMAPFolderStatusOperation.h new file mode 100644 index 000000000..5e113472b --- /dev/null +++ b/src/include/MailCore/CIMAPFolderStatusOperation.h @@ -0,0 +1,25 @@ +#ifndef MAILCORE_CIMAP_FOLDER_STATUS_OPERATION_H +#define MAILCORE_CIMAP_FOLDER_STATUS_OPERATION_H + +#include "CBase.h" +#include "CIMAPBaseOperation.h" +#include "CIMAPFolderStatus.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPFolderStatusOperation; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPFolderStatusOperation, mailcore::IMAPFolderStatusOperation) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPFolderStatusOperation) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPFolderStatusOperation, CIMAPFolderStatus, status) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/include/MailCore/CIMAPIdentity.h b/src/include/MailCore/CIMAPIdentity.h new file mode 100644 index 000000000..3b6f47e9a --- /dev/null +++ b/src/include/MailCore/CIMAPIdentity.h @@ -0,0 +1,39 @@ +#ifndef CIMAPIdentity_hpp +#define CIMAPIdentity_hpp + +#include "CBase.h" +#include "CMessageConstants.h" +#include "CObject.h" +#include "CArray.h" + +#include "MailCoreString.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPIdentity; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPIdentity, mailcore::IMAPIdentity) + + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPIdentity) + + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPIdentity, MailCoreString, vendor, setVendor) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPIdentity, MailCoreString, name, setName) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPIdentity, MailCoreString, version, setVersion) + + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPIdentity, CArray, allInfoKeys) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPIdentity, MailCoreString, infoForKey, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPIdentity, void, setInfoForKey, MailCoreString, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPIdentity, void, removeAllInfos) + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPIdentity, CIMAPIdentity, init) + +#ifdef __cplusplus +} +#endif + +#endif /* CIMAPIdentity_hpp */ diff --git a/src/include/MailCore/CIMAPIdentityOperation.h b/src/include/MailCore/CIMAPIdentityOperation.h new file mode 100644 index 000000000..b5753fe2d --- /dev/null +++ b/src/include/MailCore/CIMAPIdentityOperation.h @@ -0,0 +1,24 @@ +#ifndef CIMAPIdentityOperation_hpp +#define CIMAPIdentityOperation_hpp + +#include "CIMAPBaseOperation.h" +#include "CIMAPIdentity.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPIdentityOperation; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPIdentityOperation, mailcore::IMAPIdentityOperation) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPIdentityOperation) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPIdentityOperation, CIMAPIdentity, serverIdentity) + +#ifdef __cplusplus +} +#endif + +#endif /* CIMAPIdentityOperation_hpp */ diff --git a/src/include/MailCore/CIMAPIdleOperation.h b/src/include/MailCore/CIMAPIdleOperation.h new file mode 100644 index 000000000..c771fcf5a --- /dev/null +++ b/src/include/MailCore/CIMAPIdleOperation.h @@ -0,0 +1,25 @@ +#ifndef CIMAPIdleOperation_h +#define CIMAPIdleOperation_h + +#include "CBase.h" +#include "CMessageConstants.h" +#include "CIMAPBaseOperation.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPIdleOperation; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPIdleOperation, mailcore::IMAPIdleOperation) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPIdleOperation) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPIdleOperation, void, interruptIdle) + +#ifdef __cplusplus +} +#endif + +#endif /* CIMAPIdleOperation_h */ diff --git a/src/include/MailCore/CIMAPMessage.h b/src/include/MailCore/CIMAPMessage.h new file mode 100644 index 000000000..44d3b5b56 --- /dev/null +++ b/src/include/MailCore/CIMAPMessage.h @@ -0,0 +1,48 @@ +#ifndef CIMAPMessage_h +#define CIMAPMessage_h + +#include "stdint.h" + +#include "CBase.h" +#include "CMessageConstants.h" +#include "CAbstractPart.h" +#include "CAbstractMessage.h" +#include "CArray.h" +#include "CAbstractMessageRendererCallback.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPMessage; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPMessage, mailcore::IMAPMessage) + + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPMessage) + + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPMessage, uint32_t, uid, setUid) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPMessage, uint32_t, sequenceNumber, setSequenceNumber) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPMessage, uint32_t, size, setSize) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPMessage, CMessageFlag, flags, setFlags) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPMessage, CMessageFlag, originalFlags, setOriginalFlags) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPMessage, CArray, customFlags, setCustomFlags) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPMessage, uint64_t, modSeqValue, setModSeqValue) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPMessage, CAbstractPart, mainPart, setMainPart) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPMessage, CArray, gmailLabels, setGmailLabels) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPMessage, uint64_t, gmailMessageID, setGmailMessageID) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPMessage, uint64_t, gmailThreadID, setGmailThreadID) + + + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPMessage, CAbstractPart, partForPartID, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPMessage, MailCoreString, htmlRendering, MailCoreString, CAbstractMessageRendererCallback) + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPMessage, CIMAPMessage, init) + +#ifdef __cplusplus +} +#endif + +#endif /* CIMAPMessage_h */ diff --git a/src/include/MailCore/CIMAPMessagePart.h b/src/include/MailCore/CIMAPMessagePart.h new file mode 100644 index 000000000..9ebc56d1b --- /dev/null +++ b/src/include/MailCore/CIMAPMessagePart.h @@ -0,0 +1,26 @@ +#ifndef CIMAPMessagePart_h +#define CIMAPMessagePart_h + +#include "CBase.h" +#include "CAbstractMessagePart.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPMessagePart; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPMessagePart, mailcore::IMAPMessagePart) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPMessagePart) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPMessagePart, MailCoreString, partID, setPartID) + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPMessagePart, CIMAPMessagePart, init) + +#ifdef __cplusplus +} +#endif + +#endif /* CIMAPMessagePart_h */ diff --git a/src/include/MailCore/CIMAPMessageRenderingOperation.h b/src/include/MailCore/CIMAPMessageRenderingOperation.h new file mode 100644 index 000000000..a7063e815 --- /dev/null +++ b/src/include/MailCore/CIMAPMessageRenderingOperation.h @@ -0,0 +1,24 @@ +#ifndef CIMAPMessageRenderingOperation_hpp +#define CIMAPMessageRenderingOperation_hpp + +#include "CIMAPBaseOperation.h" +#include "MailCoreString.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPMessageRenderingOperation; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPMessageRenderingOperation, mailcore::IMAPMessageRenderingOperation) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPMessageRenderingOperation) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPMessageRenderingOperation, MailCoreString, result) + +#ifdef __cplusplus +} +#endif + +#endif /* CIMAPMessageRenderingOperation_hpp */ diff --git a/src/include/MailCore/CIMAPMoveMessagesOperation.h b/src/include/MailCore/CIMAPMoveMessagesOperation.h new file mode 100644 index 000000000..7413f27c2 --- /dev/null +++ b/src/include/MailCore/CIMAPMoveMessagesOperation.h @@ -0,0 +1,24 @@ +#ifndef CIMAPMoveMessagesOperation_hpp +#define CIMAPMoveMessagesOperation_hpp + +#include "CIMAPBaseOperation.h" +#include "CDictionary.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPMoveMessagesOperation; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPMoveMessagesOperation, mailcore::IMAPMoveMessagesOperation) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPMoveMessagesOperation) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPMoveMessagesOperation, CDictionary, uidMapping) + +#ifdef __cplusplus +} +#endif + +#endif /* CIMAPMoveMessagesOperation_hpp */ diff --git a/src/include/MailCore/CIMAPMultipart.h b/src/include/MailCore/CIMAPMultipart.h new file mode 100644 index 000000000..f37637eaa --- /dev/null +++ b/src/include/MailCore/CIMAPMultipart.h @@ -0,0 +1,28 @@ +#ifndef CIMAPMultipart_h +#define CIMAPMultipart_h + +#include "CBase.h" +#include "CAbstractMultipart.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPMultipart; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPMultipart, mailcore::IMAPMultipart) + + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPMultipart) + + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPMultipart, MailCoreString, partID, setPartID) + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPMultipart, CIMAPMultipart, init) + +#ifdef __cplusplus +} +#endif + +#endif /* CIMAPMultipart_h */ diff --git a/src/include/MailCore/CIMAPNamespace.h b/src/include/MailCore/CIMAPNamespace.h new file mode 100644 index 000000000..d959f32a0 --- /dev/null +++ b/src/include/MailCore/CIMAPNamespace.h @@ -0,0 +1,35 @@ +#ifndef MAILCORE_CIMAP_NAMESPACE_H +#define MAILCORE_CIMAP_NAMESPACE_H + +#include "CBase.h" +#include "CArray.h" +#include "MailCoreString.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPNamespace; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPNamespace, mailcore::IMAPNamespace) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPNamespace) + + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPNamespace, MailCoreString, mainPrefix) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPNamespace, char, mainDelimiter) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPNamespace, CArray, prefixes) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPNamespace, MailCoreString, pathForComponents, CArray) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPNamespace, MailCoreString, pathForComponentsAndPrefix, CArray, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPNamespace, CArray, componentsFromPath, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPNamespace, bool, containsFolderPath, MailCoreString) + + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPNamespace, CIMAPNamespace, namespaceWithPrefix, MailCoreString, char) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/include/MailCore/CIMAPNamespaceItem.h b/src/include/MailCore/CIMAPNamespaceItem.h new file mode 100644 index 000000000..bdc3a5811 --- /dev/null +++ b/src/include/MailCore/CIMAPNamespaceItem.h @@ -0,0 +1,33 @@ +#ifndef CIMAPNamespaceItem_h +#define CIMAPNamespaceItem_h + +#include "CBase.h" +#include "CArray.h" +#include "MailCoreString.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPNamespaceItem; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPNamespaceItem, mailcore::IMAPNamespaceItem) + + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPNamespaceItem) + + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPNamespaceItem, MailCoreString, prefix, setPrefix) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPNamespaceItem, char, delimiter, setDelimiter) + + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPNamespaceItem, MailCoreString, pathForComponents, CArray) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPNamespaceItem, CArray, componentsForPath, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPNamespaceItem, bool, containsFolder, MailCoreString) + + +#ifdef __cplusplus +} +#endif + +#endif /* CIMAPNamespaceItem_h */ diff --git a/src/include/MailCore/CIMAPPart.h b/src/include/MailCore/CIMAPPart.h new file mode 100644 index 000000000..c04c8f6da --- /dev/null +++ b/src/include/MailCore/CIMAPPart.h @@ -0,0 +1,33 @@ +#ifndef CIMAPPart_h +#define CIMAPPart_h + +#include "CBase.h" +#include "CAbstractMessagePart.h" +#include "MailCoreString.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPPart; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPPart, mailcore::IMAPPart) + + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPPart) + + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPPart, MailCoreString, partID, setPartID) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPPart, unsigned int, size, setSize) + C_SYNTHESIZE_PROPERTY_DEFINITION(CIMAPPart, Encoding, encoding, setEncoding) + + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPPart, unsigned int, decodedSize) + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPPart, CIMAPPart, init) + +#ifdef __cplusplus +} +#endif + +#endif /* CIMAPPart_h */ diff --git a/src/include/MailCore/CIMAPQuotaOperation.h b/src/include/MailCore/CIMAPQuotaOperation.h new file mode 100644 index 000000000..2e2c368c6 --- /dev/null +++ b/src/include/MailCore/CIMAPQuotaOperation.h @@ -0,0 +1,25 @@ +#ifndef CIMAPQuotaOperation_hpp +#define CIMAPQuotaOperation_hpp + +#include "CIMAPBaseOperation.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPQuotaOperation; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPQuotaOperation, mailcore::IMAPQuotaOperation) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPQuotaOperation) + + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPQuotaOperation, uint32_t, usage) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPQuotaOperation, uint32_t, limit) + +#ifdef __cplusplus +} +#endif + +#endif /* CIMAPQuotaOperation_hpp */ diff --git a/src/include/MailCore/CIMAPSearchExpression.h b/src/include/MailCore/CIMAPSearchExpression.h new file mode 100644 index 000000000..352748348 --- /dev/null +++ b/src/include/MailCore/CIMAPSearchExpression.h @@ -0,0 +1,65 @@ +#ifndef MAILCORE_СIMAP_SEARCH_EXPRESSION_H +#define MAILCORE_СIMAP_SEARCH_EXPRESSION_H + +#include "CBase.h" +#include "CIndexSet.h" +#include "MailCoreString.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPSearchExpression; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPSearchExpression, mailcore::IMAPSearchExpression) + + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPSearchExpression) + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchAll) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchFrom, MailCoreString) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchRecipient, MailCoreString) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchTo, MailCoreString) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchCc, MailCoreString) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchBcc, MailCoreString) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchSubject, MailCoreString) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchContent, MailCoreString) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchBody, MailCoreString) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchUIDs, CIndexSet) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchNumbers, CIndexSet) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchHeader, MailCoreString, MailCoreString) + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchRead) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchUnread) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchFlagged) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchUnflagged) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchAnswered) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchUnanswered) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchDraft) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchUndraft) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchDeleted) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchSpam) + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchBeforeDate, time_t) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchOnDate, time_t) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchSinceDate, time_t) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchBeforeReceivedDate, time_t) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchOnReceivedDate, time_t) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchSinceReceivedDate, time_t) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchSizeLargerThan, uint32_t) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchSizeSmallerThan, uint32_t) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchGmailThreadID, uint64_t) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchGmailMessageID, uint64_t) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchGmailRaw, MailCoreString) + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchAnd, CIMAPSearchExpression, CIMAPSearchExpression) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchOr, CIMAPSearchExpression, CIMAPSearchExpression) + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIMAPSearchExpression, CIMAPSearchExpression, searchNot, CIMAPSearchExpression) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/include/MailCore/CIMAPSearchOperation.h b/src/include/MailCore/CIMAPSearchOperation.h new file mode 100644 index 000000000..a00675f1e --- /dev/null +++ b/src/include/MailCore/CIMAPSearchOperation.h @@ -0,0 +1,25 @@ +#ifndef MAILCORE_СIMAP_SEARCH_OPERATION_H +#define MAILCORE_СIMAP_SEARCH_OPERATION_H + +#include "CBase.h" +#include "CIMAPBaseOperation.h" +#include "CIndexSet.h" + +#ifdef __cplusplus + +namespace mailcore { + class IMAPSearchOperation; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CIMAPSearchOperation, mailcore::IMAPSearchOperation) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIMAPSearchOperation) + C_SYNTHESIZE_FUNC_DEFINITION(CIMAPSearchOperation, CIndexSet, uids) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/include/MailCore/CIndexSet.h b/src/include/MailCore/CIndexSet.h new file mode 100644 index 000000000..5f289f294 --- /dev/null +++ b/src/include/MailCore/CIndexSet.h @@ -0,0 +1,64 @@ +#ifndef MAILCORE_CINDEX_SET_H +#define MAILCORE_CINDEX_SET_H + +#include "stdint.h" +#include "CBase.h" +#include "CArray.h" +#include "CData.h" + +#ifdef __cplusplus + +namespace mailcore { + class IndexSet; +} + +extern "C" { +#endif + + struct Range { + /** first integer of the range.*/ + uint64_t location; + + /** length of the range.*/ + uint64_t length; + }; + typedef struct Range Range; + + CMAILCORE_EXPORT extern Range RangeEmpty; + CMAILCORE_EXPORT Range RangeMake(uint64_t location, uint64_t length); + CMAILCORE_EXPORT Range RangeIntersection(Range range1, Range range2); + CMAILCORE_EXPORT bool RangeHasIntersection(Range range1, Range range2); + CMAILCORE_EXPORT uint64_t RangeLeftBound(Range range); + CMAILCORE_EXPORT uint64_t RangeRightBound(Range range); + + C_SYNTHESIZE_STRUCT_DEFINITION(CIndexSet, mailcore::IndexSet) + + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CIndexSet) + + C_SYNTHESIZE_READONLY_PROPERTY_DEFINITION(CIndexSet, uint64_t, count) + + C_SYNTHESIZE_FUNC_DEFINITION(CIndexSet, void, addIndex, uint64_t) + C_SYNTHESIZE_FUNC_DEFINITION(CIndexSet, void, removeIndex, uint64_t) + C_SYNTHESIZE_FUNC_DEFINITION(CIndexSet, bool, containsIndex, uint64_t) + C_SYNTHESIZE_FUNC_DEFINITION(CIndexSet, void, addRange, Range) + C_SYNTHESIZE_FUNC_DEFINITION(CIndexSet, void, removeRange, Range) + C_SYNTHESIZE_FUNC_DEFINITION(CIndexSet, void, intersectsRange, Range) + C_SYNTHESIZE_FUNC_DEFINITION(CIndexSet, void, addIndexSet, CIndexSet) + C_SYNTHESIZE_FUNC_DEFINITION(CIndexSet, void, removeIndexSet, CIndexSet) + C_SYNTHESIZE_FUNC_DEFINITION(CIndexSet, void, intersectsIndexSet, CIndexSet) + C_SYNTHESIZE_FUNC_DEFINITION(CIndexSet, Range, range, unsigned int) + C_SYNTHESIZE_FUNC_DEFINITION(CIndexSet, unsigned int, rangesCount) + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CIndexSet, CIndexSet, init) + + CMAILCORE_EXPORT CIndexSet CIndexSet_new_WithRange(Range range) + CF_SWIFT_NAME(CIndexSet.init(range:)); + + CMAILCORE_EXPORT CIndexSet CIndexSet_new_WithIndex(uint64_t idx) + CF_SWIFT_NAME(CIndexSet.init(idx:)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/include/MailCore/CMailCore.h b/src/include/MailCore/CMailCore.h new file mode 100644 index 000000000..bc9eb8dd5 --- /dev/null +++ b/src/include/MailCore/CMailCore.h @@ -0,0 +1,16 @@ +// +// CMailCore.h +// CMailCore framework +// +// Copyright (c) 2015 Readdle. All rights reserved. +// + +#include + +extern int mailimap_hack_date_time_parse(char * str, + struct mailimap_date_time ** result, + size_t progr_rate, + progress_function * progr_fun); + +extern time_t MailCoreTimestampFromDate(struct mailimf_date_time * date_time); +extern time_t MailCoreTimestampFromIMAPDate(struct mailimap_date_time * imap_date); \ No newline at end of file diff --git a/src/include/MailCore/CMailProvider.h b/src/include/MailCore/CMailProvider.h new file mode 100644 index 000000000..37b228fcd --- /dev/null +++ b/src/include/MailCore/CMailProvider.h @@ -0,0 +1,30 @@ +#ifndef MAILCORE_CMAIL_PROVIDER_H +#define MAILCORE_CMAIL_PROVIDER_H + +#include "stdint.h" +#include "CBase.h" +#include "CArray.h" +#include "CData.h" +#include "MailCoreString.h" + +#ifdef __cplusplus + +namespace mailcore { + class MailProvider; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CMailProvider, mailcore::MailProvider) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CMailProvider) + + C_SYNTHESIZE_READONLY_PROPERTY_DEFINITION(CMailProvider, CArray, imapServices) + C_SYNTHESIZE_READONLY_PROPERTY_DEFINITION(CMailProvider, CArray, smtpServices) + C_SYNTHESIZE_READONLY_PROPERTY_DEFINITION(CMailProvider, MailCoreString, identifier) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/include/MailCore/CMailProvidersManager.h b/src/include/MailCore/CMailProvidersManager.h new file mode 100644 index 000000000..503ea590f --- /dev/null +++ b/src/include/MailCore/CMailProvidersManager.h @@ -0,0 +1,37 @@ +#ifndef MAILCORE_CMAIL_PROVIDERS_MANAGER_H +#define MAILCORE_CMAIL_PROVIDERS_MANAGER_H + +#include "stdint.h" +#include "CBase.h" +#include "CMailProvider.h" +#include "MailCoreString.h" + +#ifdef __cplusplus + +namespace mailcore { + class MailProvidersManager; +} + +extern "C" { +#endif + + typedef struct CMailProvidersManager { +#ifdef __cplusplus + mailcore::MailProvidersManager* instance; +#else + void* instance; +#endif + } CMailProvidersManager; + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CMailProvidersManager, CMailProvidersManager, shared) + + C_SYNTHESIZE_FUNC_DEFINITION(CMailProvidersManager, CMailProvider, providerForEmail, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CMailProvidersManager, CMailProvider, providerForMX, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CMailProvidersManager, CMailProvider, providerForIdentifier, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CMailProvidersManager, void, registerProvidersWithFilename, MailCoreString) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/include/MailCore/CMessageBuilder.h b/src/include/MailCore/CMessageBuilder.h new file mode 100644 index 000000000..cf1568dbc --- /dev/null +++ b/src/include/MailCore/CMessageBuilder.h @@ -0,0 +1,55 @@ +#ifndef CMessageBuilder_h +#define CMessageBuilder_h + +#include "CBase.h" +#include "CMessageConstants.h" +#include "CAbstractPart.h" +#include "CAbstractMessage.h" +#include "CArray.h" +#include "CAttachment.h" + +#include "MailCoreString.h" + +#ifdef __cplusplus + +namespace mailcore { + class MessageBuilder; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CMessageBuilder, mailcore::MessageBuilder) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CMessageBuilder) + + C_SYNTHESIZE_PROPERTY_DEFINITION(CMessageBuilder, MailCoreString, htmlBody, setHTMLBody) + C_SYNTHESIZE_PROPERTY_DEFINITION(CMessageBuilder, MailCoreString, textBody, setTextBody) + C_SYNTHESIZE_PROPERTY_DEFINITION(CMessageBuilder, CArray, attachments, setAttachments) + C_SYNTHESIZE_PROPERTY_DEFINITION(CMessageBuilder, CArray, relatedAttachments, setRelatedAttachments) + C_SYNTHESIZE_PROPERTY_DEFINITION(CMessageBuilder, MailCoreString, boundaryPrefix, setBoundaryPrefix) + + C_SYNTHESIZE_FUNC_DEFINITION(CMessageBuilder, void, addAttachment, CAttachment) + C_SYNTHESIZE_FUNC_DEFINITION(CMessageBuilder, void, addRelatedAttachment, CAttachment) + + C_SYNTHESIZE_FUNC_DEFINITION(CMessageBuilder, CData, data) + C_SYNTHESIZE_FUNC_DEFINITION(CMessageBuilder, CData, dataForEncryption) + + C_SYNTHESIZE_FUNC_DEFINITION(CMessageBuilder, ErrorCode, writeToFile, MailCoreString, bool) + + C_SYNTHESIZE_FUNC_DEFINITION(CMessageBuilder, CData, openPGPSignedMessageDataWithSignatureData, CData) + C_SYNTHESIZE_FUNC_DEFINITION(CMessageBuilder, CData, openPGPEncryptedMessageDataWithEncryptedData, CData) + + C_SYNTHESIZE_FUNC_DEFINITION(CMessageBuilder, MailCoreString, htmlBodyRendering) + C_SYNTHESIZE_FUNC_DEFINITION(CMessageBuilder, MailCoreString, plainTextRendering) + + C_SYNTHESIZE_FUNC_DEFINITION(CMessageBuilder, MailCoreString, plainTextBodyRenderingAndStripWhitespace, bool) + + C_SYNTHESIZE_FUNC_DEFINITION(CMessageBuilder, void, setBoundaries, CArray) + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CMessageBuilder, CMessageBuilder, init) + +#ifdef __cplusplus +} +#endif + +#endif /* CMessageBuilder_h */ diff --git a/src/include/MailCore/CMessageConstants.h b/src/include/MailCore/CMessageConstants.h new file mode 100644 index 000000000..cbc8d9cf1 --- /dev/null +++ b/src/include/MailCore/CMessageConstants.h @@ -0,0 +1,308 @@ +#ifndef MAILCORE_MESSAGE_CONSTANT +#define MAILCORE_MESSAGE_CONSTANT + +#include "CData.h" + +#ifdef __cplusplus +extern "C" { +#endif + + typedef enum { + ConnectionTypeClear = 1 << 0, + ConnectionTypeStartTLS = 1 << 1, + ConnectionTypeTLS = 1 << 2, + } ConnectionType; + + typedef enum { + AuthTypeSASLNone = 0, + AuthTypeSASLCRAMMD5 = 1 << 0, + AuthTypeSASLPlain = 1 << 1, + AuthTypeSASLGSSAPI = 1 << 2, + AuthTypeSASLDIGESTMD5 = 1 << 3, + AuthTypeSASLLogin = 1 << 4, + AuthTypeSASLSRP = 1 << 5, + AuthTypeSASLNTLM = 1 << 6, + AuthTypeSASLKerberosV4 = 1 << 7, + AuthTypeXOAuth2 = 1 << 8, + AuthTypeXOAuth2Outlook = 1 << 9, + }CAuthType; + + typedef enum { + IMAPFolderFlagNone = 0, + IMAPFolderFlagMarked = 1 << 0, + IMAPFolderFlagUnmarked = 1 << 1, + IMAPFolderFlagNoSelect = 1 << 2, + IMAPFolderFlagNoInferiors = 1 << 3, + IMAPFolderFlagInbox = 1 << 4, + IMAPFolderFlagSentMail = 1 << 5, + IMAPFolderFlagStarred = 1 << 6, + IMAPFolderFlagAllMail = 1 << 7, + IMAPFolderFlagTrash = 1 << 8, + IMAPFolderFlagDrafts = 1 << 9, + IMAPFolderFlagSpam = 1 << 10, + IMAPFolderFlagImportant = 1 << 11, + IMAPFolderFlagArchive = 1 << 12, + IMAPFolderFlagAll = IMAPFolderFlagAllMail, + IMAPFolderFlagJunk = IMAPFolderFlagSpam, + IMAPFolderFlagFlagged = IMAPFolderFlagStarred, + IMAPFolderFlagFolderTypeMask = IMAPFolderFlagInbox | IMAPFolderFlagSentMail | IMAPFolderFlagStarred | IMAPFolderFlagAllMail | + IMAPFolderFlagTrash| IMAPFolderFlagDrafts | IMAPFolderFlagSpam | IMAPFolderFlagImportant | IMAPFolderFlagArchive, + }CIMAPFolderFlag; + + typedef enum { + MessageFlagNone = 0, + MessageFlagSeen = 1 << 0, + MessageFlagAnswered = 1 << 1, + MessageFlagFlagged = 1 << 2, + MessageFlagDeleted = 1 << 3, + MessageFlagDraft = 1 << 4, + MessageFlagMDNSent = 1 << 5, + MessageFlagForwarded = 1 << 6, + MessageFlagSubmitPending = 1 << 7, + MessageFlagSubmitted = 1 << 8, + MessageFlagMaskAll = MessageFlagSeen | MessageFlagAnswered | MessageFlagFlagged | + MessageFlagDeleted | MessageFlagDraft | MessageFlagMDNSent | MessageFlagForwarded | + MessageFlagSubmitPending | MessageFlagSubmitted, + }CMessageFlag; + + typedef enum { + IMAPMessagesRequestKindUid = 0, // This is the default and it's always fetched + IMAPMessagesRequestKindFlags = 1 << 0, + IMAPMessagesRequestKindHeaders = 1 << 1, + IMAPMessagesRequestKindStructure = 1 << 2, + IMAPMessagesRequestKindInternalDate = 1 << 3, + IMAPMessagesRequestKindFullHeaders = 1 << 4, + IMAPMessagesRequestKindHeaderSubject = 1 << 5, + IMAPMessagesRequestKindGmailLabels = 1 << 6, + IMAPMessagesRequestKindGmailMessageID = 1 << 7, + IMAPMessagesRequestKindGmailThreadID = 1 << 8, + IMAPMessagesRequestKindExtraHeaders = 1 << 9, + IMAPMessagesRequestKindSize = 1 << 10, + }CIMAPMessagesRequestKind; + + typedef enum { + IMAPFetchRequestTypeUID = 0, + IMAPFetchRequestTypeSequence = 1 + }IMAPFetchRequestType; + + typedef enum { + IMAPStoreFlagsRequestKindAdd, + IMAPStoreFlagsRequestKindRemove, + IMAPStoreFlagsRequestKindSet, + }IMAPStoreFlagsRequestKind; + + typedef enum { + IMAPWorkaroundGmail = 1 << 0, + IMAPWorkaroundYahoo = 1 << 1, + IMAPWorkaroundExchange2003 = 1 << 2, + }IMAPWorkaround; + + typedef enum { + IMAPCapabilityACL, + IMAPCapabilityBinary, + IMAPCapabilityCatenate, + IMAPCapabilityChildren, + IMAPCapabilityCompressDeflate, + IMAPCapabilityCondstore, + IMAPCapabilityEnable, + IMAPCapabilityIdle, + IMAPCapabilityId, + IMAPCapabilityLiteralPlus, + IMAPCapabilityMove, + IMAPCapabilityMultiAppend, + IMAPCapabilityNamespace, + IMAPCapabilityQResync, + IMAPCapabilityQuota, + IMAPCapabilitySort, + IMAPCapabilityStartTLS, + IMAPCapabilityThreadOrderedSubject, + IMAPCapabilityThreadReferences, + IMAPCapabilityUIDPlus, + IMAPCapabilityUnselect, + IMAPCapabilityXList, + IMAPCapabilityAuthAnonymous, + IMAPCapabilityAuthCRAMMD5, + IMAPCapabilityAuthDigestMD5, + IMAPCapabilityAuthExternal, + IMAPCapabilityAuthGSSAPI, + IMAPCapabilityAuthKerberosV4, + IMAPCapabilityAuthLogin, + IMAPCapabilityAuthNTLM, + IMAPCapabilityAuthOTP, + IMAPCapabilityAuthPlain, + IMAPCapabilityAuthSKey, + IMAPCapabilityAuthSRP, + IMAPCapabilityXOAuth2, + IMAPCapabilityXYMHighestModseq, + IMAPCapabilityGmail, + }IMAPCapability; + + typedef enum { + POPCapabilityNone, + POPCapabilityStartTLS, + POPCapabilityTop, + POPCapabilityUser, + POPCapabilityRespCodes, + POPCapabilityPipelining, + POPCapabilityUIDL, + POPCapabilitySASL, + POPCapabilityAuthAnonymous, + POPCapabilityAuthCRAMMD5, + POPCapabilityAuthDigestMD5, + POPCapabilityAuthExternal, + POPCapabilityAuthGSSAPI, + POPCapabilityAuthKerberosV4, + POPCapabilityAuthLogin, + POPCapabilityAuthNTLM, + POPCapabilityAuthOTP, + POPCapabilityAuthPlain, + POPCapabilityAuthSKey, + POPCapabilityAuthSRP, + }POPCapability; + + typedef enum { + Encoding7Bit = 0, // should match MAILIMAP_BODY_FLD_ENC_7BIT + Encoding8Bit = 1, // should match MAILIMAP_BODY_FLD_ENC_8BIT + EncodingBinary = 2, // should match MAILIMAP_BODY_FLD_ENC_BINARY + EncodingBase64 = 3, // should match MAILIMAP_BODY_FLD_ENC_BASE64 + EncodingQuotedPrintable = 4, // should match MAILIMAP_BODY_FLD_ENC_QUOTED_PRINTABLE + EncodingOther = 5, // should match MAILIMAP_BODY_FLD_ENC_OTHER + // negative values should be used for other encoding + EncodingUUEncode = -1 + }Encoding; + + typedef enum { + IMAPSearchKindAll, + IMAPSearchKindNone, + IMAPSearchKindFrom, + IMAPSearchKindTo, + IMAPSearchKindCc, + IMAPSearchKindBcc, + IMAPSearchKindRecipient, // Recipient is the combination of To, Cc and Bcc + IMAPSearchKindSubject, + IMAPSearchKindContent, + IMAPSearchKindBody, + IMAPSearchKindUIDs, + IMAPSearchKindNumbers, + IMAPSearchKindHeader, + IMAPSearchKindRead, + IMAPSearchKindUnread, + IMAPSearchKindFlagged, + IMAPSearchKindUnflagged, + IMAPSearchKindAnswered, + IMAPSearchKindUnanswered, + IMAPSearchKindDraft, + IMAPSearchKindUndraft, + IMAPSearchKindDeleted, + IMAPSearchKindSpam, + IMAPSearchKindBeforeDate, + IMAPSearchKindOnDate, + IMAPSearchKindSinceDate, + IMAPSearchKindBeforeReceivedDate, + IMAPSearchKindOnReceivedDate, + IMAPSearchKindSinceReceivedDate, + IMAPSearchKindSizeLarger, + IMAPSearchKindSizeSmaller, + IMAPSearchKindGmailThreadID, + IMAPSearchKindGmailMessageID, + IMAPSearchKindGmailRaw, + IMAPSearchKindOr, + IMAPSearchKindAnd, + IMAPSearchKindNot, + }IMAPSearchKind; + + typedef enum { + ErrorNone, // 0 + ErrorConnection, + ErrorTLSNotAvailable, + ErrorParse, + ErrorCertificate, + ErrorAuthentication, + ErrorGmailIMAPNotEnabled, + ErrorGmailExceededBandwidthLimit, + ErrorGmailTooManySimultaneousConnections, + ErrorMobileMeMoved, + ErrorYahooUnavailable, // 10 + ErrorNonExistantFolder, + ErrorRename, + ErrorDelete, + ErrorCreate, + ErrorSubscribe, + ErrorAppend, + ErrorCopy, + ErrorExpunge, + ErrorFetch, + ErrorIdle, // 20 + ErrorIdentity, + ErrorNamespace, + ErrorStore, + ErrorCapability, + ErrorStartTLSNotAvailable, + ErrorSendMessageIllegalAttachment, + ErrorStorageLimit, + ErrorSendMessageNotAllowed, + ErrorNeedsConnectToWebmail, + ErrorSendMessage, // 30 + ErrorAuthenticationRequired, + ErrorFetchMessageList, + ErrorDeleteMessage, + ErrorInvalidAccount, + ErrorFile, + ErrorCompression, + ErrorNoSender, + ErrorNoRecipient, + ErrorNoop, + ErrorGmailApplicationSpecificPasswordRequired, // 40 + ErrorServerDate, + ErrorNoValidServerFound, + ErrorCustomCommand, + ErrorYahooSendMessageSpamSuspected, + ErrorYahooSendMessageDailyLimitExceeded, + ErrorOutlookLoginViaWebBrowser, + ErrorTiscaliSimplePassword, + ErrorCanceled, + }ErrorCode; + + typedef enum { + PartTypeSingle, + PartTypeMessage, + PartTypeMultipartMixed, + PartTypeMultipartRelated, + PartTypeMultipartAlternative, + PartTypeMultipartSigned, + }PartType; + + typedef enum ConnectionLogType { + // Received data + ConnectionLogTypeReceived, + // Sent data + ConnectionLogTypeSent, + // Sent private data + ConnectionLogTypeSentPrivate, + // Parse error + ConnectionLogTypeErrorParse, + // Error while receiving data - log() is called with a NULL buffer. + ConnectionLogTypeErrorReceived, + // Error while sending data - log() is called with a NULL buffer. + ConnectionLogTypeErrorSent, + } ConnectionLogType; + + /** + It's called when asynchronous operations stop/start running. + */ + typedef void (*OperationQueueRunningChangeBlock)(void); + + /** + It's a network traffic logger. + @param sender is the identifier of the underlaying network socket. + @param logType is the type of the log. + @param data is the data related to the log. + */ + typedef void (*CConnectionLogger)(void* sender, ConnectionLogType logType, CData data, void* logger); + typedef void (*CConnectionLoggerRelease)(void* logger); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/include/MailCore/CMessageHeader.h b/src/include/MailCore/CMessageHeader.h new file mode 100644 index 000000000..779b2ad64 --- /dev/null +++ b/src/include/MailCore/CMessageHeader.h @@ -0,0 +1,60 @@ +#ifndef MAILCORE_CMESSAGE_HEADER_H +#define MAILCORE_CMESSAGE_HEADER_H + +#include "stdint.h" +#include + +#include "CBase.h" +#include "CArray.h" +#include "CAddress.h" +#include "MailCoreString.h" + +#ifdef __cplusplus + +namespace mailcore { + class MessageHeader; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CMessageHeader, mailcore::MessageHeader) + + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CMessageHeader) + + C_SYNTHESIZE_PROPERTY_DEFINITION(CMessageHeader, MailCoreString, messageID, setMessageID) + C_SYNTHESIZE_PROPERTY_DEFINITION(CMessageHeader, CArray, references, setReferences) + C_SYNTHESIZE_PROPERTY_DEFINITION(CMessageHeader, CArray, inReplyTo, setInReplyTo) + C_SYNTHESIZE_PROPERTY_DEFINITION(CMessageHeader, CArray, to, setTo) + C_SYNTHESIZE_PROPERTY_DEFINITION(CMessageHeader, CArray, cc, setCc) + C_SYNTHESIZE_PROPERTY_DEFINITION(CMessageHeader, CArray, bcc, setBcc) + C_SYNTHESIZE_PROPERTY_DEFINITION(CMessageHeader, CArray, replyTo, setReplyTo) + C_SYNTHESIZE_PROPERTY_DEFINITION(CMessageHeader, MailCoreString, subject, setSubject) + C_SYNTHESIZE_PROPERTY_DEFINITION(CMessageHeader, MailCoreString, userAgent, setUserAgent) + C_SYNTHESIZE_PROPERTY_DEFINITION(CMessageHeader, time_t, receivedDate, setReceivedDate) + C_SYNTHESIZE_PROPERTY_DEFINITION(CMessageHeader, time_t, date, setDate) + C_SYNTHESIZE_PROPERTY_DEFINITION(CMessageHeader, CAddress, sender, setSender) + C_SYNTHESIZE_PROPERTY_DEFINITION(CMessageHeader, CAddress, from, setFrom) + C_SYNTHESIZE_PROPERTY_DEFINITION(CMessageHeader, CAddress, sender, setSender) + + C_SYNTHESIZE_FUNC_DEFINITION(CMessageHeader, bool, isMessageIDAutoGenerated) + C_SYNTHESIZE_FUNC_DEFINITION(CMessageHeader, void, setExtraHeader, MailCoreString, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CMessageHeader, void, removeExtraHeader, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CMessageHeader, MailCoreString, extraHeaderValueForName, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CMessageHeader, CArray, allExtraHeadersNames) + C_SYNTHESIZE_FUNC_DEFINITION(CMessageHeader, MailCoreString, extractedSubject) + C_SYNTHESIZE_FUNC_DEFINITION(CMessageHeader, MailCoreString, partialExtractedSubject) + + C_SYNTHESIZE_FUNC_DEFINITION(CMessageHeader, void, importHeadersData, CData) + + C_SYNTHESIZE_FUNC_DEFINITION(CMessageHeader, CMessageHeader, replyHeaderWithExcludedRecipients, CArray) + C_SYNTHESIZE_FUNC_DEFINITION(CMessageHeader, CMessageHeader, replyAllHeaderWithExcludedRecipients, CArray) + C_SYNTHESIZE_FUNC_DEFINITION(CMessageHeader, CMessageHeader, forwardHeader) + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CMessageHeader, CMessageHeader, init) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/include/MailCore/CMessageParser.h b/src/include/MailCore/CMessageParser.h new file mode 100644 index 000000000..e58227e20 --- /dev/null +++ b/src/include/MailCore/CMessageParser.h @@ -0,0 +1,41 @@ +#ifndef CMessageParser_h +#define CMessageParser_h + +#include "CBase.h" +#include "CMessageConstants.h" +#include "CAbstractPart.h" +#include "CAbstractMessage.h" +#include "CArray.h" +#include "CAttachment.h" +#include "CDictionary.h" + +#ifdef __cplusplus + +namespace mailcore { + class MessageParser; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CMessageParser, mailcore::MessageParser) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CMessageParser) + + C_SYNTHESIZE_FUNC_DEFINITION(CMessageParser, CAbstractPart, mainPart) + C_SYNTHESIZE_FUNC_DEFINITION(CMessageParser, CData, data) + C_SYNTHESIZE_FUNC_DEFINITION(CMessageParser, MailCoreString, htmlBodyRendering) + C_SYNTHESIZE_FUNC_DEFINITION(CMessageParser, MailCoreString, plainTextRendering) + C_SYNTHESIZE_FUNC_DEFINITION(CMessageParser, MailCoreString, plainTextBodyRenderingAndStripWhitespace, bool) + + C_SYNTHESIZE_FUNC_DEFINITION(CMessageParser, CDictionary, serializable) + + C_SYNTHESIZE_FUNC_DEFINITION(CMessageParser, MailCoreString, htmlRendering, struct CAbstractMessageRendererCallback) + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CMessageParser, CMessageParser, init, CData) + C_SYNTHESIZE_FUNC_DEFINITION(CMessageParser, void, saveToFile, MailCoreString) + +#ifdef __cplusplus +} +#endif + +#endif /* CMessageParser_h */ diff --git a/src/include/MailCore/CMessagePart.h b/src/include/MailCore/CMessagePart.h new file mode 100644 index 000000000..cf6ff5486 --- /dev/null +++ b/src/include/MailCore/CMessagePart.h @@ -0,0 +1,29 @@ +#ifndef MAILCORE_C_MESSAGE_PART_H +#define MAILCORE_C_MESSAGE_PART_H + +#include "stdint.h" + +#include "CBase.h" +#include "CArray.h" +#include "CAbstractPart.h" +#include "CMessageHeader.h" +#include "CAbstractMessagePart.h" + +#ifdef __cplusplus + +namespace mailcore { + class MessagePart; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CMessagePart, mailcore::MessagePart) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CMessagePart) + C_SYNTHESIZE_PROPERTY_DEFINITION(CMessagePart, MailCoreString, partID, setPartID) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/include/MailCore/CMultipart.h b/src/include/MailCore/CMultipart.h new file mode 100644 index 000000000..2ed4c13a6 --- /dev/null +++ b/src/include/MailCore/CMultipart.h @@ -0,0 +1,37 @@ +// +// CMultipart.hpp +// mailcore2 +// +// Created by Andrew on 8/15/17. +// Copyright © 2017 MailCore. All rights reserved. +// + +#ifndef MAILCORE_C_MULTIPART_H +#define MAILCORE_C_MULTIPART_H + +#include "stdint.h" + +#include "CBase.h" +#include "CArray.h" +#include "CAbstractPart.h" +#include "CMessageHeader.h" +#include "CAbstractMessagePart.h" + +#ifdef __cplusplus + +namespace mailcore { + class Multipart; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CMultipart, mailcore::Multipart) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CMultipart) + C_SYNTHESIZE_PROPERTY_DEFINITION(CMultipart, MailCoreString, partID, setPartID) + +#ifdef __cplusplus +} +#endif + +#endif /* MAILCORE_C_MULTIPART_H */ diff --git a/src/include/MailCore/CNetService.h b/src/include/MailCore/CNetService.h new file mode 100644 index 000000000..a73e9492e --- /dev/null +++ b/src/include/MailCore/CNetService.h @@ -0,0 +1,33 @@ +#ifndef MAILCORE_CNET_SERVICE_H +#define MAILCORE_CNET_SERVICE_H + +#include "stdint.h" +#include "CBase.h" +#include "CObject.h" +#include "CMessageConstants.h" + +#include "MailCoreString.h" + +#ifdef __cplusplus + +namespace mailcore { + class NetService; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CNetService, mailcore::NetService) + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CNetService) + + C_SYNTHESIZE_PROPERTY_DEFINITION(CNetService, unsigned int, port, setPort) + C_SYNTHESIZE_PROPERTY_DEFINITION(CNetService, MailCoreString, hostname, setHostname) + C_SYNTHESIZE_PROPERTY_DEFINITION(CNetService, ConnectionType, connectionType, setConnectionType) + + C_SYNTHESIZE_FUNC_DEFINITION(CNetService, MailCoreString, normalizedHostnameWithEmail, MailCoreString) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/include/MailCore/CObject.h b/src/include/MailCore/CObject.h new file mode 100644 index 000000000..086259feb --- /dev/null +++ b/src/include/MailCore/CObject.h @@ -0,0 +1,35 @@ +#ifndef MAILCORE_COBJECT_H +#define MAILCORE_COBJECT_H + +#include "stdint.h" +#include "CBase.h" +#include + +#ifdef __cplusplus + +namespace mailcore { + class Object; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(CObject, mailcore::Object) + C_SYNTHESIZE_FUNC_DEFINITION(CObject, uint32_t, castToUInt32); + + #ifdef __ANDROID__ + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CObject, void, setMainQueue, dispatch_queue_t); + #endif + typedef void (*MCLogger)(const char * filename, unsigned int line, const char * message); + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CObject, void, setMCAssertHandler, MCLogger); + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CObject, void, setLogger, MCLogger); + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(CObject, void, setLoggerEnabled, bool); + + CMAILCORE_EXPORT CObject CObject_new_WithUInt32(uint32_t string) + CF_SWIFT_NAME(CObject.init(uint32:)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/include/MailCore/COperation.h b/src/include/MailCore/COperation.h new file mode 100644 index 000000000..d14f56d68 --- /dev/null +++ b/src/include/MailCore/COperation.h @@ -0,0 +1,64 @@ +#ifndef MAILCORE_C_OPERATION_H +#define MAILCORE_C_OPERATION_H + +#include "CBase.h" +#include "CMessageConstants.h" +#include "CObject.h" +#include "CData.h" + +#include + +#ifdef __cplusplus + +namespace mailcore { + class Operation; +} + +class COperationCompletionCallback; + +extern "C" { +#endif + + typedef void (*COperationCompletionBlock)(const void* ref); + + typedef struct COperation { +#ifdef __cplusplus + mailcore::Operation * instance; + COperationCompletionCallback* _callback; +#else + void* instance; + void* _callback; +#endif + } COperation; + + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(COperation) + + // TODO: should be property, but swift doesn;t recognize dispatch_queue_t <--> DispatchQueue bridging + C_SYNTHESIZE_FUNC_DEFINITION(COperation, dispatch_queue_t, callbackDispatchQueue) + C_SYNTHESIZE_FUNC_DEFINITION(COperation, void, setCallbackDispatchQueue, dispatch_queue_t) + + C_SYNTHESIZE_PROPERTY_DEFINITION(COperation, bool, shouldRunWhenCancelled, setShouldRunWhenCancelled) + + C_SYNTHESIZE_FUNC_DEFINITION(COperation, COperation, setCompletionBlock, COperationCompletionBlock, const void*) + C_SYNTHESIZE_FUNC_DEFINITION(COperation, COperation, clearCompletionBlock) + + C_SYNTHESIZE_FUNC_DEFINITION(COperation, bool, isCancelled) + C_SYNTHESIZE_FUNC_DEFINITION(COperation, void, cancel) + C_SYNTHESIZE_FUNC_DEFINITION(COperation, void, start) + + CMAILCORE_EXPORT void COperation_retain(COperation self) + CF_SWIFT_NAME(COperation.retain(self:)); + + CMAILCORE_EXPORT void COperation_release(COperation self) + CF_SWIFT_NAME(COperation.release(self:)); + + CMAILCORE_EXPORT int COperation_retainCount(COperation self) + CF_SWIFT_NAME(COperation.retainCount(self:));; + +#ifdef __cplusplus +} + +COperation COperation_new(mailcore::Operation *operation); +#endif + +#endif diff --git a/src/include/MailCore/CSMTPOperation.h b/src/include/MailCore/CSMTPOperation.h new file mode 100644 index 000000000..34646e867 --- /dev/null +++ b/src/include/MailCore/CSMTPOperation.h @@ -0,0 +1,56 @@ +#ifndef CSMTPOperation_h +#define CSMTPOperation_h + +#include "COperation.h" +#include "MailCoreString.h" + +#ifdef __cplusplus + +namespace mailcore { + class SMTPOperation; +} + +class CSMTPOperationCallback; + +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + typedef void (*CProgressBlock)(const void* userInfo, unsigned int current, unsigned int maximum); + typedef struct CSMTPSession CSMTPSession; + + struct CSMTPOperation { +#ifdef __cplusplus + mailcore::SMTPOperation* instance; + CSMTPOperationCallback* _callback; +#else + void* instance; + void* _callback; +#endif + COperation cOperation; + }; + typedef struct CSMTPOperation CSMTPOperation; + + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(CSMTPOperation) + + C_SYNTHESIZE_READONLY_PROPERTY_DEFINITION(CSMTPOperation, ErrorCode, error) + C_SYNTHESIZE_READONLY_PROPERTY_DEFINITION(CSMTPOperation, MailCoreString, lastSMTPResponse) + C_SYNTHESIZE_READONLY_PROPERTY_DEFINITION(CSMTPOperation, int, lastSMTPResponseCode) + + C_SYNTHESIZE_FUNC_DEFINITION(CSMTPOperation, CSMTPOperation, setProgressBlocks, CProgressBlock, const void*) + + CMAILCORE_EXPORT void CSMTPOperation_retain(CSMTPOperation operation) + CF_SWIFT_NAME(CSMTPOperation.retain(self:)); + + CMAILCORE_EXPORT void CSMTPOperation_release(CSMTPOperation operation) + CF_SWIFT_NAME(CSMTPOperation.release(self:)); + +#ifdef __cplusplus +} + +CSMTPOperation CSMTPOperation_new(mailcore::SMTPOperation* operation); +#endif + +#endif /* CSMTPOperation_h */ diff --git a/src/include/MailCore/CSMTPSession.h b/src/include/MailCore/CSMTPSession.h new file mode 100644 index 000000000..37368ca76 --- /dev/null +++ b/src/include/MailCore/CSMTPSession.h @@ -0,0 +1,75 @@ +#ifndef CSMTPSession_h +#define CSMTPSession_h + +#include "CBase.h" +#include "CMessageConstants.h" +#include "time.h" +#include "CAddress.h" +#include "CArray.h" +#include "CSMTPOperation.h" + +#include "MailCoreString.h" + +#include + +#ifdef __cplusplus + +namespace mailcore { + class SMTPAsyncSession; +} + +class CSMTPCallbackBridge; + +extern "C" { +#endif + + struct CSMTPSession { +#ifdef __cplusplus + mailcore::SMTPAsyncSession* instance; + CSMTPCallbackBridge* _callback; +#else + void* instance; + void* _callback; +#endif + }; + typedef struct CSMTPSession CSMTPSession; + + C_SYNTHESIZE_PROPERTY_DEFINITION(CSMTPSession, MailCoreString, hostname, setHostname) + C_SYNTHESIZE_PROPERTY_DEFINITION(CSMTPSession, unsigned int, port, setPort) + C_SYNTHESIZE_PROPERTY_DEFINITION(CSMTPSession, MailCoreString, username, setUsername) + C_SYNTHESIZE_PROPERTY_DEFINITION(CSMTPSession, MailCoreString, password, setPassword) + C_SYNTHESIZE_PROPERTY_DEFINITION(CSMTPSession, MailCoreString, OAuth2Token, setOAuth2Token) + C_SYNTHESIZE_PROPERTY_DEFINITION(CSMTPSession, CAuthType, authType, setAuthType) + C_SYNTHESIZE_PROPERTY_DEFINITION(CSMTPSession, ConnectionType, connectionType, setConnectionType) + C_SYNTHESIZE_PROPERTY_DEFINITION(CSMTPSession, time_t, timeout, setTimeout) + C_SYNTHESIZE_PROPERTY_DEFINITION(CSMTPSession, bool, isCheckCertificateEnabled, setCheckCertificateEnabled) + C_SYNTHESIZE_PROPERTY_DEFINITION(CSMTPSession, bool, useHeloIPEnabled, setUseHeloIPEnabled) + C_SYNTHESIZE_PROPERTY_DEFINITION(CSMTPSession, bool, isOperationQueueRunning, setOperationQueueRunning) + C_SYNTHESIZE_FUNC_DEFINITION(CSMTPSession, void, setConnectionLogger, void*) + + C_SYNTHESIZE_FUNC_DEFINITION(CSMTPSession, dispatch_queue_t, dispatchQueue) + C_SYNTHESIZE_FUNC_DEFINITION(CSMTPSession, void, setDispatchQueue, dispatch_queue_t) + + C_SYNTHESIZE_PROPERTY_DEFINITION(CSMTPSession, OperationQueueRunningChangeBlock, operationQueueRunningChangeBlock, setOperationQueueRunningChangeBlock) + + C_SYNTHESIZE_FUNC_DEFINITION(CSMTPSession, void, cancelAllOperations) + C_SYNTHESIZE_FUNC_DEFINITION(CSMTPSession, CSMTPOperation, loginOperation) + C_SYNTHESIZE_FUNC_DEFINITION(CSMTPSession, CSMTPOperation, sendMessageOperation, CData) + C_SYNTHESIZE_FUNC_DEFINITION(CSMTPSession, CSMTPOperation, sendOperationWithDataAndFromAndRecipients, CData, CAddress, CArray) + C_SYNTHESIZE_FUNC_DEFINITION(CSMTPSession, CSMTPOperation, sendOperationWithContentsOfFile, MailCoreString, CAddress, CArray) + C_SYNTHESIZE_FUNC_DEFINITION(CSMTPSession, CSMTPOperation, checkAccountOperation, CAddress) + C_SYNTHESIZE_FUNC_DEFINITION(CSMTPSession, CSMTPOperation, checkAccountOperationWithFromAndTo, CAddress, CAddress) + C_SYNTHESIZE_FUNC_DEFINITION(CSMTPSession, CSMTPOperation, noopOperation) + + + CMAILCORE_EXPORT CSMTPSession CSMTPSession_new(CConnectionLogger logger, CConnectionLoggerRelease releaseLoggerBlock); + + CMAILCORE_EXPORT void CSMTPSession_release(CSMTPSession self) + CF_SWIFT_NAME(CSMTPSession.release(self:)); + +#ifdef __cplusplus +} +#endif + + +#endif /* CSMTPSession_h */ diff --git a/src/include/MailCore/MCAbstract.h b/src/include/MailCore/MCAbstract.h new file mode 100644 index 000000000..03299ec4a --- /dev/null +++ b/src/include/MailCore/MCAbstract.h @@ -0,0 +1,13 @@ +#ifndef MAILCORE_MCABSTRACT_H + +#define MAILCORE_MCABSTRACT_H + +#include +#include +#include +#include +#include +#include +#include + +#endif diff --git a/src/include/MailCore/MCAbstractMessage.h b/src/include/MailCore/MCAbstractMessage.h new file mode 100644 index 000000000..1f567a52e --- /dev/null +++ b/src/include/MailCore/MCAbstractMessage.h @@ -0,0 +1,53 @@ +#ifndef MAILCORE_MCABSTRACTMESSAGE_H + +#define MAILCORE_MCABSTRACTMESSAGE_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class AbstractPart; + class MessageHeader; + + class MAILCORE_EXPORT AbstractMessage : public Object { + public: + AbstractMessage(); + virtual ~AbstractMessage(); + + /** Header of the message. */ + virtual MessageHeader * header(); + /** Set a header of the message. */ + virtual void setHeader(MessageHeader * header); + + /** Returns a part matching the given contentID. */ + virtual AbstractPart * partForContentID(String * contentID); + /** Returns a part matching the given uniqueID */ + virtual AbstractPart * partForUniqueID(String * uniqueID); + + /** Returns the list of attachments, not part of the content of the message. */ + virtual Array * /* AbstractPart */ attachments(); + /** Returns the list of attachments that are shown inline in the content of the message. */ + virtual Array * /* AbstractPart */ htmlInlineAttachments(); + /** Returns the list of the text parts required to render the message properly. */ + virtual Array * /* AbstractPart */ requiredPartsForRendering(); + + public: //subclass behavior + AbstractMessage(AbstractMessage * other); + virtual String * description(); + virtual Object * copy(); + virtual HashMap * serializable(); + virtual void importSerializable(HashMap * hashmap); + + private: + MessageHeader * mHeader; + void init(); + + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCAbstractMessagePart.h b/src/include/MailCore/MCAbstractMessagePart.h new file mode 100644 index 000000000..74be75797 --- /dev/null +++ b/src/include/MailCore/MCAbstractMessagePart.h @@ -0,0 +1,45 @@ +#ifndef MAILCORE_MCABSTRACTMESSAGEPART_H + +#define MAILCORE_MCABSTRACTMESSAGEPART_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MessageHeader; + + class MAILCORE_EXPORT AbstractMessagePart : public AbstractPart { + public: + AbstractMessagePart(); + virtual ~AbstractMessagePart(); + + virtual MessageHeader * header(); + virtual void setHeader(MessageHeader * header); + + virtual AbstractPart * mainPart(); + virtual void setMainPart(AbstractPart * mainPart); + + public: //subclass behavior + AbstractMessagePart(AbstractMessagePart * other); + virtual String * description(); + virtual Object * copy(); + virtual HashMap * serializable(); + virtual void importSerializable(HashMap * serializable); + + virtual AbstractPart * partForContentID(String * contentID); + virtual AbstractPart * partForUniqueID(String * uniqueID); + + private: + AbstractPart * mMainPart; + MessageHeader * mHeader; + void init(); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCAbstractMultipart.h b/src/include/MailCore/MCAbstractMultipart.h new file mode 100644 index 000000000..814ee6dfa --- /dev/null +++ b/src/include/MailCore/MCAbstractMultipart.h @@ -0,0 +1,39 @@ +#ifndef MAILCORE_MCABSTRACTMULTIPART_H + +#define MAILCORE_MCABSTRACTMULTIPART_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT AbstractMultipart : public AbstractPart { + public: + AbstractMultipart(); + virtual ~AbstractMultipart(); + + virtual Array * parts(); + virtual void setParts(Array * parts); + + public: //subclass behavior + AbstractMultipart(AbstractMultipart * other); + virtual String * description(); + virtual Object * copy(); + virtual HashMap * serializable(); + virtual void importSerializable(HashMap * serializable); + + virtual AbstractPart * partForContentID(String * contentID); + virtual AbstractPart * partForUniqueID(String * uniqueID); + + private: + Array * mParts; + void init(); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCAbstractPart.h b/src/include/MailCore/MCAbstractPart.h new file mode 100644 index 000000000..88b5b331c --- /dev/null +++ b/src/include/MailCore/MCAbstractPart.h @@ -0,0 +1,91 @@ +#ifndef MAILCORE_MCABSTRACTPART_H + +#define MAILCORE_MCABSTRACTPART_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class AbstractMessage; + + class MAILCORE_EXPORT AbstractPart : public Object { + public: + AbstractPart(); + virtual ~AbstractPart(); + + virtual PartType partType(); + virtual void setPartType(PartType type); + + virtual String * filename(); + virtual void setFilename(String * filename); + + virtual String * mimeType(); + virtual void setMimeType(String * mimeType); + + virtual String * charset(); + virtual void setCharset(String * charset); + + virtual String * uniqueID(); + virtual void setUniqueID(String * uniqueID); + + virtual String * contentID(); + virtual void setContentID(String * contentID); + + virtual String * contentLocation(); + virtual void setContentLocation(String * contentLocation); + + virtual String * contentDescription(); + virtual void setContentDescription(String * contentDescription); + + virtual bool isInlineAttachment(); + virtual void setInlineAttachment(bool inlineAttachment); + + virtual bool isAttachment(); + virtual void setAttachment(bool attachment); + + virtual AbstractPart * partForContentID(String * contentID); + virtual AbstractPart * partForUniqueID(String * uniqueID); + + virtual String * decodedStringForData(Data * data); + + void setContentTypeParameters(HashMap * parameters); + Array * allContentTypeParametersNames(); + void setContentTypeParameter(String * name, String * object); + void removeContentTypeParameter(String * name); + String * contentTypeParameterValueForName(String * name); + + public: // subclass behavior + AbstractPart(AbstractPart * other); + virtual String * description(); + virtual Object * copy(); + virtual HashMap * serializable(); + virtual void importSerializable(HashMap * serializable); + + public: // private + virtual void importIMAPFields(struct mailimap_body_fields * fields, + struct mailimap_body_ext_1part * extension); + virtual void applyUniquePartID(); + + private: + String * mUniqueID; + String * mFilename; + String * mMimeType; + String * mCharset; + String * mContentID; + String * mContentLocation; + String * mContentDescription; + bool mInlineAttachment; + bool mAttachment; + PartType mPartType; + HashMap * mContentTypeParameters; + void init(); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCAccountValidator.h b/src/include/MailCore/MCAccountValidator.h new file mode 100644 index 000000000..dd67a7e6e --- /dev/null +++ b/src/include/MailCore/MCAccountValidator.h @@ -0,0 +1,131 @@ +// +// MCAccountValidator.h +// mailcore2 +// +// Created by Christopher Hockley on 22/01/15. +// Copyright (c) 2015 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCACCOUNTVALIDATOR_H + +#define MAILCORE_MCACCOUNTVALIDATOR_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class NetService; + class MailProvider; + class MXRecordResolverOperation; + class IMAPAsyncSession; + class POPAsyncSession; + class SMTPAsyncSession; + + class MAILCORE_EXPORT AccountValidator : public Operation, public OperationCallback, public ConnectionLogger { + public: + AccountValidator(); + virtual ~AccountValidator(); + + virtual void setEmail(String * email); + virtual String * email(); /* for SMTP */ + virtual void setUsername(String * username); + virtual String * username(); + virtual void setPassword(String * password); + virtual String * password(); + virtual void setOAuth2Token(String * OAuth2Token); + virtual String * OAuth2Token(); + + virtual void setImapEnabled(bool enabled); + virtual bool isImapEnabled(); + + virtual void setPopEnabled(bool enabled); + virtual bool isPopEnabled(); + + virtual void setSmtpEnabled(bool enabled); + virtual bool isSmtpEnabled(); + + virtual void setImapServices(Array * imapServices); + virtual Array * /* NetService */ imapServices(); + virtual void setSmtpServices(Array * smtpServices); + virtual Array * /* NetService */ smtpServices(); + virtual void setPopServices(Array * popServices); + virtual Array * /* NetService */ popServices(); + + virtual void setConnectionLogger(ConnectionLogger * logger); + virtual ConnectionLogger * connectionLogger(); + + // result + virtual String * identifier(); + virtual NetService * imapServer(); + virtual NetService * popServer(); + virtual NetService * smtpServer(); + virtual ErrorCode imapError(); + virtual ErrorCode popError(); + virtual ErrorCode smtpError(); + virtual String * imapLoginResponse(); + + virtual void start(); + virtual void cancel(); + + public: // ConnectionLogger + virtual void log(void * sender, ConnectionLogType logType, Data * buffer); + + private: + String * mEmail; /* for SMTP */ + String * mUsername; + String * mPassword; + String * mOAuth2Token; + + Array * /* NetService */ mImapServices; + Array * /* NetService */ mSmtpServices; + Array * /* NetService */ mPopServices; + + // result + String * mIdentifier; + NetService * mImapServer; + NetService * mPopServer; + NetService * mSmtpServer; + ErrorCode mImapError; + ErrorCode mPopError; + ErrorCode mSmtpError; + String * mImapLoginResponse; + + MailProvider * mProvider; + + //indexs for services being tested + int mCurrentServiceIndex; + int mCurrentServiceTested; + + Operation * mOperation; + virtual void operationFinished(Operation * op); + + OperationQueue * mQueue; + MXRecordResolverOperation * mResolveMX; + + IMAPAsyncSession * mImapSession; + POPAsyncSession * mPopSession; + SMTPAsyncSession * mSmtpSession; + + bool mImapEnabled; + bool mPopEnabled; + bool mSmtpEnabled; + + MCB_LOCK_TYPE mConnectionLoggerLock; + ConnectionLogger * mConnectionLogger; + + void init(); + void setupServices(); + void resolveMX(); + void resolveMXDone(); + void resolveMXTimeout(void * context); + void startCheckingHosts(); + void checkNextHost(); + void checkNextHostDone(); + }; +} + +#endif + +#endif diff --git a/src/include/MailCore/MCAddress.h b/src/include/MailCore/MCAddress.h new file mode 100644 index 000000000..e6644576e --- /dev/null +++ b/src/include/MailCore/MCAddress.h @@ -0,0 +1,65 @@ +#ifndef MAILCORE_MCADDRESS_H + +#define MAILCORE_MCADDRESS_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT Address : public Object { + public: + Address(); + virtual ~Address(); + + static Address * addressWithDisplayName(String * displayName, String * mailbox); + static Address * addressWithMailbox(String * mailbox); + static Address * addressWithRFC822String(String * RFC822String); + static Address * addressWithNonEncodedRFC822String(String * nonEncodedRFC822String); + + static Array * addressesWithRFC822String(String * string); + static Array * addressesWithNonEncodedRFC822String(String * string); + + static String * RFC822StringForAddresses(Array * addresses); + static String * nonEncodedRFC822StringForAddresses(Array * addresses); + + virtual void setDisplayName(String * displayName); + virtual String * displayName(); + + virtual void setMailbox(String * address); + virtual String * mailbox(); + + virtual String * RFC822String(); + virtual String * nonEncodedRFC822String(); + + public: // subclass behavior. + Address(Address * other); + virtual String * description(); + virtual bool isEqual(Object * otherObject); + virtual unsigned int hash(); + virtual Object * copy(); + virtual HashMap * serializable(); + virtual void importSerializable(HashMap * serializable); + + public: // private + // Must be released + virtual struct mailimf_address * createIMFAddress(); + virtual struct mailimf_mailbox * createIMFMailbox(); + + // Additions + static Address * addressWithIMFMailbox(struct mailimf_mailbox * mb); + static Address * addressWithNonEncodedIMFMailbox(struct mailimf_mailbox * mb); + static Address * addressWithIMAPAddress(struct mailimap_address * imap_addr); + + private: + String * mDisplayName; + String * mMailbox; + void init(); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCAddressDisplay.h b/src/include/MailCore/MCAddressDisplay.h new file mode 100644 index 000000000..d4841469b --- /dev/null +++ b/src/include/MailCore/MCAddressDisplay.h @@ -0,0 +1,36 @@ +// +// MCAddressDisplay.h +// testUI +// +// Created by DINH Viêt Hoà on 1/27/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCADDRESSDISPLAY_H + +#define MAILCORE_MCADDRESSDISPLAY_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT AddressDisplay { + public: + static String * sanitizeDisplayName(String * displayName); + + static String * displayStringForAddress(Address * address); + static String * shortDisplayStringForAddress(Address * address); + static String * veryShortDisplayStringForAddress(Address * address); + + static String * displayStringForAddresses(Array * /* Address */ addresses); + static String * shortDisplayStringForAddresses(Array * /* Address */ addresses); + static String * veryShortDisplayStringForAddresses(Array * /* Address */ addresses); + }; + +}; + +#endif + +#endif diff --git a/src/include/MailCore/MCArray.h b/src/include/MailCore/MCArray.h new file mode 100644 index 000000000..bed43fe52 --- /dev/null +++ b/src/include/MailCore/MCArray.h @@ -0,0 +1,59 @@ +#ifndef MAILCORE_MCARRAY_H + +#define MAILCORE_MCARRAY_H + +#include + +#ifdef __cplusplus + +typedef struct carray_s carray; + +namespace mailcore { + + class String; + + class MAILCORE_EXPORT Array : public Object { + public: + Array(); + virtual ~Array(); + + static Array * array(); + static Array * arrayWithObject(Object * obj); + + virtual unsigned int count(); + virtual void addObject(Object * obj); + virtual void removeObjectAtIndex(unsigned int idx); + virtual void removeObject(Object * obj); + virtual int indexOfObject(Object * obj); + virtual Object * objectAtIndex(unsigned int idx) ATTRIBUTE_RETURNS_NONNULL; + virtual void replaceObject(unsigned int idx, Object * obj); + virtual void insertObject(unsigned int idx, Object * obj); + virtual void removeAllObjects(); + + virtual void addObjectsFromArray(Array * array); + virtual Object * lastObject(); + virtual void removeLastObject(); + virtual bool containsObject(Object * obj); + + virtual Array * sortedArray(int (* compare)(void * a, void * b, void * context), void * context); + virtual void sortArray(int (* compare)(void * a, void * b, void * context), void * context); + virtual String * componentsJoinedByString(String * delimiter); + + public: // subclass behavior + Array(Array * o); + virtual String * description(); + virtual Object * copy(); + virtual HashMap * serializable(); + virtual void importSerializable(HashMap * serializable); + virtual bool isEqual(Object * otherObject); + + private: + carray * mArray; + void init(); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCAssert.h b/src/include/MailCore/MCAssert.h new file mode 100644 index 000000000..481b45d8e --- /dev/null +++ b/src/include/MailCore/MCAssert.h @@ -0,0 +1,23 @@ +#ifndef MAILCORE_MCASSERT_H + +#define MAILCORE_MCASSERT_H + +#include +#include + +#define MCAssert(cond) MCAssertInternal(__FILE__, __LINE__, cond, #cond) + +#ifdef __cplusplus +extern "C" { +#endif + + MAILCORE_EXPORT + void setMCAssertHandler(MCLogger handler) CLANG_ANALYZER_NORETURN; + + MAILCORE_EXPORT + void MCAssertInternal(const char * filename, unsigned int line, int cond, const char * condString) CLANG_ANALYZER_NORETURN; +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/include/MailCore/MCAsync.h b/src/include/MailCore/MCAsync.h new file mode 100644 index 000000000..90b3e2633 --- /dev/null +++ b/src/include/MailCore/MCAsync.h @@ -0,0 +1,18 @@ +// +// MCAsync.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/11/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCASYNC_H + +#define MAILCORE_MCASYNC_H + +#include +#include +#include +#include + +#endif diff --git a/src/include/MailCore/MCAsyncIMAP.h b/src/include/MailCore/MCAsyncIMAP.h new file mode 100644 index 000000000..effa09473 --- /dev/null +++ b/src/include/MailCore/MCAsyncIMAP.h @@ -0,0 +1,41 @@ +// +// MCAsyncIMAP.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCASYNCIMAP_H + +#define MAILCORE_MCASYNCIMAP_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#endif diff --git a/src/include/MailCore/MCAsyncNNTP.h b/src/include/MailCore/MCAsyncNNTP.h new file mode 100644 index 000000000..326138dc1 --- /dev/null +++ b/src/include/MailCore/MCAsyncNNTP.h @@ -0,0 +1,24 @@ +// +// MCAsyncNNTP.h +// mailcore2 +// +// Created by Robert Widmann on 8/13/14. +// Copyright (c) 2014 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCASYNCNNTP_H + +#define MAILCORE_MCASYNCNNTP_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#endif diff --git a/src/include/MailCore/MCAsyncPOP.h b/src/include/MailCore/MCAsyncPOP.h new file mode 100644 index 000000000..797403102 --- /dev/null +++ b/src/include/MailCore/MCAsyncPOP.h @@ -0,0 +1,20 @@ +// +// MCAsyncPOP.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/16/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCASYNCPOP_H + +#define MAILCORE_MCASYNCPOP_H + +#include +#include +#include +#include +#include +#include + +#endif diff --git a/src/include/MailCore/MCAsyncSMTP.h b/src/include/MailCore/MCAsyncSMTP.h new file mode 100644 index 000000000..d7bac9db6 --- /dev/null +++ b/src/include/MailCore/MCAsyncSMTP.h @@ -0,0 +1,17 @@ +// +// MCAsyncSMTP.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/11/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCASYNCSMTP_H + +#define MAILCORE_MCASYNCSMTP_H + +#include +#include +#include + +#endif diff --git a/src/include/MailCore/MCAttachment.h b/src/include/MailCore/MCAttachment.h new file mode 100644 index 000000000..ae02d256c --- /dev/null +++ b/src/include/MailCore/MCAttachment.h @@ -0,0 +1,61 @@ +#ifndef MAILCORE_MCATTACHMENT_H + +#define MAILCORE_MCATTACHMENT_H + +#include +#include +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MessagePart; + + class MAILCORE_EXPORT Attachment : public AbstractPart { + public: + static String * mimeTypeForFilename(String * filename); + static Attachment * attachmentWithContentsOfFile(String * filename); + static Attachment * attachmentWithData(String * filename, Data * data); + static Attachment * attachmentWithHTMLString(String * htmlString); + static Attachment * attachmentWithRFC822Message(Data * messageData); + static Attachment * attachmentWithText(String * text); + + Attachment(); + virtual ~Attachment(); + + virtual void setPartID(String * partID); + virtual String * partID(); + + virtual void setData(Data * data); + virtual Data * data(); + virtual String * decodedString(); + + public: // subclass behavior + Attachment(Attachment * other); + virtual String * description(); + virtual Object * copy(); + + public: // private + static AbstractPart * attachmentsWithMIME(struct mailmime * mime); + + private: + Data * mData; + String * mPartID; + + void init(); + static void fillMultipartSubAttachments(AbstractMultipart * multipart, struct mailmime * mime); + static AbstractPart * attachmentsWithMIMEWithMain(struct mailmime * mime, bool isMain); + static Attachment * attachmentWithSingleMIME(struct mailmime * mime); + static MessagePart * attachmentWithMessageMIME(struct mailmime * mime); + static Encoding encodingForMIMEEncoding(struct mailmime_mechanism * mechanism, int defaultMimeEncoding); + static HashMap * readMimeTypesFile(String * filename); + void setContentTypeParameters(HashMap * parameters); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCAutoreleasePool.h b/src/include/MailCore/MCAutoreleasePool.h new file mode 100644 index 000000000..55300cc69 --- /dev/null +++ b/src/include/MailCore/MCAutoreleasePool.h @@ -0,0 +1,58 @@ +#ifndef MAILCORE_MCAUTORELEASEPOOL_H + +#define MAILCORE_MCAUTORELEASEPOOL_H + +#include + +#ifndef _MSC_VER +#include +#endif + +#ifdef __cplusplus + +typedef struct carray_s carray; + +namespace mailcore { + + class MAILCORE_EXPORT AutoreleasePool : public Object { + public: + AutoreleasePool(); + virtual ~AutoreleasePool(); + + static void autorelease(Object * obj); + +#ifdef _MSC_VER + static void destroyAutoreleasePoolStack(); +#endif + + public: // subclass behavior + virtual String * description(); + + private: + static void init(); + +#ifdef _MSC_VER + static DWORD autoreleasePoolStackKey; + static BOOL CALLBACK initAutoreleasePoolStackKeyCallback(PINIT_ONCE InitOnce, PVOID Parameter, PVOID * lpContext); +#else + static pthread_key_t autoreleasePoolStackKey; +#endif + + carray * mPoolObjects; + static carray * createAutoreleasePoolStackIfNeeded(); + static void destroyAutoreleasePoolStack(void *); + static void initAutoreleasePoolStackKey(); + static AutoreleasePool * currentAutoreleasePool(); + virtual void add(Object * obj); +#ifdef __APPLE__ + void * mAppleAutoreleasePool; + static void * createAppleAutoreleasePool(); + static void releaseAppleAutoreleasePool(void * appleAutoreleasePool); +#endif + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCBase64.h b/src/include/MailCore/MCBase64.h new file mode 100644 index 000000000..3a18598b0 --- /dev/null +++ b/src/include/MailCore/MCBase64.h @@ -0,0 +1,25 @@ +// +// MCBase64.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 7/30/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCBASE64_H + +#define MAILCORE_MCBASE64_H + +#ifdef __cplusplus +extern "C" { +#endif + +extern char * MCDecodeBase64(const char * in, int len, int * p_outlen); +extern char * MCDecodeBase64ByLines(const char * in, int len, int * p_outlen); +extern char * MCEncodeBase64(const char * in, int len); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/include/MailCore/MCBaseTypes.h b/src/include/MailCore/MCBaseTypes.h new file mode 100644 index 000000000..dbcbdf926 --- /dev/null +++ b/src/include/MailCore/MCBaseTypes.h @@ -0,0 +1,32 @@ +#ifndef MAILCORE_MCBASETYPES_H + +#define MAILCORE_MCBASETYPES_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#endif diff --git a/src/include/MailCore/MCBasicLock.h b/src/include/MailCore/MCBasicLock.h new file mode 100644 index 000000000..5d704f9ea --- /dev/null +++ b/src/include/MailCore/MCBasicLock.h @@ -0,0 +1,29 @@ +#ifndef mailcore2_MCBasicLock_h +#define mailcore2_MCBasicLock_h + +#ifdef _MSC_VER + +#define WIN32_LEAN_AND_MEAN +#include + +#define MCB_LOCK_TYPE SRWLOCK +#define MCB_LOCK_INITIAL_VALUE SRWLOCK_INIT +#define MCB_LOCK_INIT(l) InitializeSRWLock(l) +#define MCB_LOCK_DESTROY(l) +#define MCB_LOCK(l) AcquireSRWLockExclusive(l) +#define MCB_UNLOCK(l) ReleaseSRWLockExclusive(l) + +#else + +#include + +#define MCB_LOCK_TYPE pthread_mutex_t +#define MCB_LOCK_INITIAL_VALUE PTHREAD_MUTEX_INITIALIZER +#define MCB_LOCK_INIT(l) pthread_mutex_init(l, NULL) +#define MCB_LOCK_DESTROY(l) pthread_mutex_destroy(l) +#define MCB_LOCK(l) pthread_mutex_lock(l) +#define MCB_UNLOCK(l) pthread_mutex_unlock(l) + +#endif + +#endif /* mailcore2_MCBasicLock_h */ diff --git a/src/include/MailCore/MCConnectionLogger.h b/src/include/MailCore/MCConnectionLogger.h new file mode 100644 index 000000000..d5282db46 --- /dev/null +++ b/src/include/MailCore/MCConnectionLogger.h @@ -0,0 +1,47 @@ +// +// MCConnectionLogger.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 6/24/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_CONNECTION_LOGGER_H + +#define MAILCORE_CONNECTION_LOGGER_H + +#include + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class Data; + + enum ConnectionLogType { + // Received data + ConnectionLogTypeReceived, + // Sent data + ConnectionLogTypeSent, + // Sent private data + ConnectionLogTypeSentPrivate, + // Parse error + ConnectionLogTypeErrorParse, + // Error while receiving data - log() is called with a NULL buffer. + ConnectionLogTypeErrorReceived, + // Error while sending data - log() is called with a NULL buffer. + ConnectionLogTypeErrorSent, + }; + + class MAILCORE_EXPORT ConnectionLogger { + public: + virtual void log(void * sender, ConnectionLogType logType, Data * buffer) {} + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCCore.h b/src/include/MailCore/MCCore.h new file mode 100644 index 000000000..323bb606c --- /dev/null +++ b/src/include/MailCore/MCCore.h @@ -0,0 +1,23 @@ +// +// Core.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/10/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCCORE_H + +#define MAILCORE_MCCORE_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#endif diff --git a/src/include/MailCore/MCData.h b/src/include/MailCore/MCData.h new file mode 100644 index 000000000..f94a10fa9 --- /dev/null +++ b/src/include/MailCore/MCData.h @@ -0,0 +1,97 @@ +#ifndef MAILCORE_MCDATA_H + +#define MAILCORE_MCDATA_H + +#include + +#include +#include + +#ifdef __APPLE__ +#import +#endif + +#ifdef __cplusplus + +namespace mailcore { + + class String; + + typedef void (*BytesDeallocator)(char * bytes, unsigned int length); + + class MAILCORE_EXPORT Data : public Object { + public: + Data(); + Data(int capacity); + Data(const char * bytes, unsigned int length); + virtual ~Data(); + + static Data * data(); + static Data * dataWithCapacity(int capacity); + static Data * dataWithContentsOfFile(String * filename); + static Data * dataWithBytes(const char * bytes, unsigned int length); + + virtual char * bytes(); + virtual unsigned int length(); + virtual bool externallyAllocatedMemory(); + virtual BytesDeallocator bytesDeallocator(); + + virtual void increaseCapacity(unsigned int length); + + virtual void appendData(Data * otherData); + virtual void appendBytes(const char * bytes, unsigned int length); + virtual void setBytes(const char * bytes, unsigned int length); + virtual void setData(Data * otherData); + + // Helpers + virtual String * stringWithDetectedCharset(); + virtual String * stringWithDetectedCharset(String * charset, bool isHTML); + virtual String * stringWithCharset(const char * charset); + virtual Data * decodedDataUsingEncoding(Encoding encoding); + + virtual String * base64String(); + + virtual ErrorCode writeToFile(String * filename); + + public: // private + virtual String * charsetWithFilteredHTML(bool filterHTML, String * hintCharset = NULL); + + /* Replace contents of Data instance with contents of a given bytes without extra copying. + Memory ownership transferred from client code to the Data instance. + Data destructor will call bytesDeallocator function for memory releasing. + */ + void takeBytesOwnership(char * bytes, unsigned int length, BytesDeallocator bytesDeallocator); + +#ifdef __APPLE__ +#ifdef LEGACY_OBJC_RUNTIME + virtual CFDataRef destructiveNSData(); +#endif +#endif + + public: // subclass behavior + Data(Data * otherData); + virtual String * description(); + virtual Object * copy(); + virtual bool isEqual(Object * otherObject); + virtual unsigned int hash(); + virtual HashMap * serializable(); + virtual void importSerializable(HashMap * serializable); + void destructiveDataClear(); + private: + char * mBytes; + unsigned int mLength; + unsigned int mAllocated; + bool mExternallyAllocatedMemory; + BytesDeallocator mBytesDeallocator; + void allocate(unsigned int length, bool force = false); + void init(); + void reset(); + String * charsetWithFilteredHTMLWithoutHint(bool filterHTML); + + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCDataDecoderUtils.h b/src/include/MailCore/MCDataDecoderUtils.h new file mode 100644 index 000000000..1481a2b49 --- /dev/null +++ b/src/include/MailCore/MCDataDecoderUtils.h @@ -0,0 +1,25 @@ +// +// MCDataDecoderUtils.h +// mailcore2 +// +// Copyright © 2016 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCDATADECODERUTILS_H + +#define MAILCORE_MCDATADECODERUTILS_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + Data * MCDecodeData(Data * encodedData, Encoding encoding, bool partialContent, Data ** pRemainingData); + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCDataStreamDecoder.h b/src/include/MailCore/MCDataStreamDecoder.h new file mode 100644 index 000000000..0dd14c934 --- /dev/null +++ b/src/include/MailCore/MCDataStreamDecoder.h @@ -0,0 +1,52 @@ +// +// DataStreamDecoder.hpp +// mailcore2 +// +// Copyright © 2016 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCDATASTREAMDECODER_H + +#define MAILCORE_MCDATASTREAMDECODER_H + +#include +#include + +#include +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class DataStreamDecoder : public Object { + public: + DataStreamDecoder(); + virtual ~DataStreamDecoder(); + + virtual void setEncoding(Encoding encoding); + // output filename + virtual void setFilename(String * filename); + + // when data are received, decode them and add them to the file. + virtual ErrorCode appendData(Data * data); + + // end of data received. + virtual ErrorCode flushData(); + + private: // impl + virtual ErrorCode appendDecodedData(Data * decodedData); + + private: + String * mFilename; + Encoding mEncoding; + Data * mRemainingData; + FILE * mFile; + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCDateFormatter.h b/src/include/MailCore/MCDateFormatter.h new file mode 100644 index 000000000..4a789b1dd --- /dev/null +++ b/src/include/MailCore/MCDateFormatter.h @@ -0,0 +1,75 @@ +// +// MCDateFormatter.h +// testUI +// +// Created by DINH Viêt Hoà on 1/28/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCDATEFORMATTER_H + +#define MAILCORE_MCDATEFORMATTER_H + +#include + +// predeclare UDateFormat +// copied from +typedef void * UDateFormat; + +#ifdef __cplusplus + +namespace mailcore { + + class String; + + // Uses same values as UDateFormatStyle + enum DateFormatStyle { + DateFormatStyleFull = 0 /* UDAT_FULL*/, + DateFormatStyleLong = 1 /* UDAT_LONG */, + DateFormatStyleMedium = 2 /* UDAT_MEDIUM */, + DateFormatStyleShort = 3 /* UDAT_SHORT */, + DateFormatStyleNone = -1 /* UDAT_NONE */, + }; + + class MAILCORE_EXPORT DateFormatter : public Object { + public: + DateFormatter(); + virtual ~DateFormatter(); + + static DateFormatter * dateFormatter(); + + virtual void prepare(); + + virtual void setDateStyle(DateFormatStyle style); + virtual DateFormatStyle dateStyle(); + + virtual void setTimeStyle(DateFormatStyle style); + virtual DateFormatStyle timeStyle(); + + virtual void setLocale(String * locale); + virtual String * locale(); + + virtual void setTimezone(String * timezone); + virtual String * timezone(); + + virtual void setDateFormat(String * dateFormat); + virtual String * dateFormat(); + + virtual String * stringFromDate(time_t date); + virtual time_t dateFromString(String * dateString); + + private: + UDateFormat * mDateFormatter; + DateFormatStyle mDateStyle; + DateFormatStyle mTimeStyle; + String * mDateFormat; + String * mTimezone; + String * mLocale; + void * mAppleDateFormatter; + }; + +} + +#endif + +#endif /* defined(__testUI__MCDateFormatter__) */ diff --git a/src/include/MailCore/MCDefines.h b/src/include/MailCore/MCDefines.h new file mode 100644 index 000000000..5f0155a13 --- /dev/null +++ b/src/include/MailCore/MCDefines.h @@ -0,0 +1,27 @@ +#ifndef MCDEFINES_H_ + +#define MCDEFINES_H_ + +#if defined(__APPLE__) || defined(__ANDROID__) || defined(_MSC_VER) +#define MC_HAS_GCD 1 +#else +#define MC_HAS_GCD 0 +#endif + +#ifdef _MSC_VER + +#pragma section(".CRT$XCU",read) +#define INITIALIZE(name) \ + static void __cdecl initialize_##name(void); \ + __declspec(allocate(".CRT$XCU")) void (__cdecl*initialize_##name##_)(void) = initialize_##name; \ + static void __cdecl initialize_##name(void) + +#else + +#define INITIALIZE(name) \ + static void initialize(void) __attribute__((constructor)); \ + static void initialize(void) + +#endif + +#endif diff --git a/src/include/MailCore/MCErrorMessage.h b/src/include/MailCore/MCErrorMessage.h new file mode 100644 index 000000000..58ca25008 --- /dev/null +++ b/src/include/MailCore/MCErrorMessage.h @@ -0,0 +1,12 @@ +#ifndef MAILCORE_MCERRORMESSAGE_H + +#define MAILCORE_MCERRORMESSAGE_H + +#include +#ifdef __cplusplus +namespace mailcore { +String * errorMessageWithErrorCode(ErrorCode errorCode); +} +#endif + +#endif diff --git a/src/include/MailCore/MCHTMLBodyRendererTemplateCallback.h b/src/include/MailCore/MCHTMLBodyRendererTemplateCallback.h new file mode 100644 index 000000000..c3c197412 --- /dev/null +++ b/src/include/MailCore/MCHTMLBodyRendererTemplateCallback.h @@ -0,0 +1,29 @@ +// +// MCHTMLBodyRendererTemplateCallback.h +// mailcore2 +// +// Created by Paul Young on 02/07/2013. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCHTMLBODYRENDERERTEMPLATECALLBACK_H + +#define MAILCORE_MCHTMLBODYRENDERERTEMPLATECALLBACK_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT HTMLBodyRendererTemplateCallback : public Object, public HTMLRendererTemplateCallback { + public: + virtual String * templateForMainHeader(MessageHeader * header); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCHTMLCleaner.h b/src/include/MailCore/MCHTMLCleaner.h new file mode 100644 index 000000000..eccf88c92 --- /dev/null +++ b/src/include/MailCore/MCHTMLCleaner.h @@ -0,0 +1,29 @@ +// +// HTMLCleaner.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 2/3/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_HTMLCLEANER_H + +#define MAILCORE_HTMLCLEANER_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT HTMLCleaner { + public: + static String * cleanHTML(String * input); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCHTMLRenderer.h b/src/include/MailCore/MCHTMLRenderer.h new file mode 100644 index 000000000..b3926a31b --- /dev/null +++ b/src/include/MailCore/MCHTMLRenderer.h @@ -0,0 +1,46 @@ +// +// MCHTMLRenderer.h +// testUI +// +// Created by DINH Viêt Hoà on 1/23/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCHTMLRENDERER_H + +#define MAILCORE_MCHTMLRENDERER_H + +#include +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MessageParser; + class HTMLRendererTemplateCallback; + class HTMLRendererIMAPCallback; + class HTMLRendererRFC822Callback; + + class MAILCORE_EXPORT HTMLRenderer { + public: + static String * htmlForRFC822Message(MessageParser * message, + HTMLRendererRFC822Callback * dataCallback, + HTMLRendererTemplateCallback * htmlCallback); + + static String * htmlForIMAPMessage(String * folder, + IMAPMessage * message, + HTMLRendererIMAPCallback * dataCallback, + HTMLRendererTemplateCallback * htmlCallback); + + static Array * /* AbstractPart */ attachmentsForMessage(AbstractMessage * message); + static Array * /* AbstractPart */ htmlInlineAttachmentsForMessage(AbstractMessage * message); + static Array * /* AbstractPart */ requiredPartsForRendering(AbstractMessage * message); + }; + +}; + +#endif + +#endif diff --git a/src/include/MailCore/MCHTMLRendererCallback.h b/src/include/MailCore/MCHTMLRendererCallback.h new file mode 100644 index 000000000..cb63eafd9 --- /dev/null +++ b/src/include/MailCore/MCHTMLRendererCallback.h @@ -0,0 +1,76 @@ +// +// MCHTMLRendererCallback.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 2/2/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCHTMLRENDERERCALLBACK_H + +#define MAILCORE_MCHTMLRENDERERCALLBACK_H + +#include +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MessageParser; + class Attachment; + + class MAILCORE_EXPORT HTMLRendererIMAPCallback { + public: + HTMLRendererIMAPCallback() {} + virtual ~HTMLRendererIMAPCallback() {} + + virtual Data * dataForIMAPPart(String * folder, IMAPPart * part) { + return NULL; + } + virtual void prefetchAttachmentIMAPPart(String * folder, IMAPPart * part) {} + virtual void prefetchImageIMAPPart(String * folder, IMAPPart * part) {} + }; + + class MAILCORE_EXPORT HTMLRendererTemplateCallback { + public: + HTMLRendererTemplateCallback(); + virtual ~HTMLRendererTemplateCallback(); + + virtual void setMixedTextAndAttachmentsModeEnabled(bool enabled); + + virtual bool canPreviewPart(AbstractPart * part); + virtual bool shouldShowPart(AbstractPart * part); + + virtual HashMap * templateValuesForHeader(MessageHeader * header); + virtual HashMap * templateValuesForPart(AbstractPart * part); + + virtual String * templateForMainHeader(MessageHeader * header); + virtual String * templateForImage(AbstractPart * part); + virtual String * templateForAttachment(AbstractPart * part); + virtual String * templateForMessage(AbstractMessage * message); + virtual String * templateForEmbeddedMessage(AbstractMessagePart * part); + virtual String * templateForEmbeddedMessageHeader(MessageHeader * header); + virtual String * templateForAttachmentSeparator(); + + virtual String * cleanHTMLForPart(String * html); + + // Can be used to filter some HTML tags. + virtual String * filterHTMLForPart(String * html); + + // Can be used to hide quoted text. + virtual String * filterHTMLForMessage(String * html); + }; + + class MAILCORE_EXPORT HTMLRendererRFC822Callback { + public: + virtual Data * dataForRFC822Part(String * folder, Attachment * part) { return NULL; } + + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCHTMLRendererIMAPDataCallback.h b/src/include/MailCore/MCHTMLRendererIMAPDataCallback.h new file mode 100644 index 000000000..7981b1148 --- /dev/null +++ b/src/include/MailCore/MCHTMLRendererIMAPDataCallback.h @@ -0,0 +1,37 @@ +// +// MCHTMLRendererIMAPDataCallback.h +// mailcore2 +// +// Created by Paul Young on 06/07/2013. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCHTMLRENDERERIMAPDATACALLBACK_H + +#define MAILCORE_MCHTMLRENDERERIMAPDATACALLBACK_H + +#include "MCHTMLRendererCallback.h" +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT HTMLRendererIMAPDataCallback : public Object, public HTMLRendererIMAPCallback { + public: + HTMLRendererIMAPDataCallback(IMAPSession * session, uint32_t uid); + + virtual Data * dataForIMAPPart(String * folder, IMAPPart * part); + virtual ErrorCode error(); + + private: + IMAPSession * mSession; + uint32_t mUid; + ErrorCode mError; + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCHash.h b/src/include/MailCore/MCHash.h new file mode 100644 index 000000000..5ef0c2919 --- /dev/null +++ b/src/include/MailCore/MCHash.h @@ -0,0 +1,15 @@ +#ifndef MAILCORE_MCHASH_H + +#define MAILCORE_MCHASH_H + +#ifdef __cplusplus + +namespace mailcore { + + unsigned int hashCompute(const char * key, unsigned int len); + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCHashMap.h b/src/include/MailCore/MCHashMap.h new file mode 100644 index 000000000..b6ac6d2f8 --- /dev/null +++ b/src/include/MailCore/MCHashMap.h @@ -0,0 +1,53 @@ +#ifndef MAILCORE_MCHASHMAP_H + +#define MAILCORE_MCHASHMAP_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class String; + class Array; + struct HashMapCell; + typedef HashMapCell HashMapIter; + + class MAILCORE_EXPORT HashMap : public Object { + public: + HashMap(); + virtual ~HashMap(); + + static HashMap * hashMap(); + + virtual unsigned int count(); + virtual void setObjectForKey(Object * key, Object * value); + virtual void removeObjectForKey(Object * key); + virtual Object * objectForKey(Object * key); + virtual Array * allKeys(); + virtual Array * allValues(); + virtual void removeAllObjects(); + + public: // subclass behavior + HashMap(HashMap * o); + virtual String * description(); + virtual Object * copy(); + virtual HashMap * serializable(); + virtual void importSerializable(HashMap * serializable); + virtual bool isEqual(Object * otherObject); + + private: + unsigned int mAllocated; + unsigned int mCount; + void ** mCells; + HashMapIter * iteratorBegin(); + HashMapIter * iteratorNext(HashMapIter * iter); + void allocate(unsigned int size); + void init(); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCICUTypes.h b/src/include/MailCore/MCICUTypes.h new file mode 100644 index 000000000..3ca5bbcd2 --- /dev/null +++ b/src/include/MailCore/MCICUTypes.h @@ -0,0 +1,46 @@ +// +// MCICUTypes.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 4/18/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCICUTYPES_H + +#define MAILCORE_MCICUTYPES_H + +/** + * UChar + * + * The base type for UTF-16 code units and pointers. + * Unsigned 16-bit integer. + * Starting with ICU 59, C++ API uses char16_t directly, while C API continues to use UChar. + * + * UChar is configurable by defining the macro UCHAR_TYPE + * on the preprocessor or compiler command line: + * -DUCHAR_TYPE=uint16_t or -DUCHAR_TYPE=wchar_t (if U_SIZEOF_WCHAR_T==2) etc. + * (The UCHAR_TYPE can also be #defined earlier in this file, for outside the ICU library code.) + * This is for transitional use from application code that uses uint16_t or wchar_t for UTF-16. + * + * The default is UChar=char16_t. + * + * C++11 defines char16_t as bit-compatible with uint16_t, but as a distinct type. + * + * In C, char16_t is a simple typedef of uint_least16_t. + * ICU requires uint_least16_t=uint16_t for data memory mapping. + * On macOS, char16_t is not available because the uchar.h standard header is missing. + * + * @stable ICU 4.4 + */ + +#if defined(_MSC_VER) || defined(ANDROID) +#include +#elif defined(__CHAR16_TYPE__) +typedef __CHAR16_TYPE__ UChar; +#else +typedef uint16_t UChar; +#endif + +#endif /* MAILCORE_MCICUTYPES_H */ + diff --git a/src/include/MailCore/MCIMAP.h b/src/include/MailCore/MCIMAP.h new file mode 100644 index 000000000..6e80995f6 --- /dev/null +++ b/src/include/MailCore/MCIMAP.h @@ -0,0 +1,19 @@ +#ifndef MAILCORE_MCIMAP_H + +#define MAILCORE_MCIMAP_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#endif diff --git a/src/include/MailCore/MCIMAPAppendMessageOperation.h b/src/include/MailCore/MCIMAPAppendMessageOperation.h new file mode 100644 index 000000000..f711c9882 --- /dev/null +++ b/src/include/MailCore/MCIMAPAppendMessageOperation.h @@ -0,0 +1,59 @@ +// +// MCIMAPAppendMessageOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPAPPENDMESSAGEOPERATION_H + +#define MAILCORE_MCIMAPAPPENDMESSAGEOPERATION_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT IMAPAppendMessageOperation : public IMAPOperation { + public: + IMAPAppendMessageOperation(); + virtual ~IMAPAppendMessageOperation(); + + virtual void setMessageData(Data * messageData); + virtual Data * messageData(); + + virtual void setMessageFilepath(String * path); + virtual String * messageFilepath(); + + virtual void setFlags(MessageFlag flags); + virtual MessageFlag flags(); + + virtual void setCustomFlags(Array * customFlags); + virtual Array * customFlags(); + + virtual void setDate(time_t date); + virtual time_t date(); + + virtual uint32_t createdUID(); + + public: // subclass behavior + virtual void main(); + + private: + Data * mMessageData; + String * mMessageFilepath; + MessageFlag mFlags; + Array * mCustomFlags; + time_t mDate; + uint32_t mCreatedUID; + + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCIMAPAsyncConnection.h b/src/include/MailCore/MCIMAPAsyncConnection.h new file mode 100644 index 000000000..41b3ddd2f --- /dev/null +++ b/src/include/MailCore/MCIMAPAsyncConnection.h @@ -0,0 +1,141 @@ +#ifndef MAILCORE_MCIMAPASYNCCONNECTION_H + +#define MAILCORE_MCIMAPASYNCCONNECTION_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class IMAPOperation; + class IMAPFetchFoldersOperation; + class IMAPAppendMessageOperation; + class IMAPCopyMessagesOperation; + class IMAPFetchMessagesOperation; + class IMAPFetchContentOperation; + class IMAPFetchContentToFileOperation; + class IMAPFetchParsedContentOperation; + class IMAPIdleOperation; + class IMAPFolderInfoOperation; + class IMAPFolderStatusOperation; + class IMAPSession; + class IMAPNamespace; + class IMAPSearchOperation; + class IMAPSearchExpression; + class IMAPFetchNamespaceOperation; + class IMAPIdentityOperation; + class IMAPCapabilityOperation; + class IMAPQuotaOperation; + class IMAPOperationQueueCallback; + class IMAPAsyncSession; + class IMAPConnectionLogger; + class IMAPMessageRenderingOperation; + class IMAPMessage; + class IMAPIdentity; + + class MAILCORE_EXPORT IMAPAsyncConnection : public Object { + public: + IMAPAsyncConnection(); + virtual ~IMAPAsyncConnection(); + + virtual void setHostname(String * hostname); + virtual String * hostname(); + + virtual void setPort(unsigned int port); + virtual unsigned int port(); + + virtual void setUsername(String * username); + virtual String * username(); + + virtual void setPassword(String * password); + virtual String * password(); + + virtual void setOAuth2Token(String * token); + virtual String * OAuth2Token(); + + virtual void setAuthType(AuthType authType); + virtual AuthType authType(); + + virtual void setConnectionType(ConnectionType connectionType); + virtual ConnectionType connectionType(); + + virtual void setTimeout(time_t timeout); + virtual time_t timeout(); + + virtual void setCheckCertificateEnabled(bool enabled); + virtual bool isCheckCertificateEnabled(); + + virtual void setVoIPEnabled(bool enabled); + virtual bool isVoIPEnabled(); + + virtual void setQResyncCompatible(bool compatible); + virtual bool isQResyncCompatible(); + + virtual void setAutomaticConfigurationEnabled(bool enabled); + virtual bool isAutomaticConfigurationEnabled(); + + // Needs to be run before starting a connection. + virtual void setDefaultNamespace(IMAPNamespace * ns); + virtual IMAPNamespace * defaultNamespace(); + + virtual void setClientIdentity(IMAPIdentity * identity); + virtual IMAPIdentity * clientIdentity(); + + virtual void setConnectionLogger(ConnectionLogger * logger); + virtual ConnectionLogger * connectionLogger(); + +#if MC_HAS_GCD + virtual void setDispatchQueue(dispatch_queue_t dispatchQueue); + virtual dispatch_queue_t dispatchQueue(); +#endif + + virtual IMAPOperation * disconnectOperation(); + + private: + IMAPSession * mSession; + OperationQueue * mQueue; + IMAPNamespace * mDefaultNamespace; + IMAPIdentity * mClientIdentity; + String * mLastFolder; + IMAPOperationQueueCallback * mQueueCallback; + IMAPAsyncSession * mOwner; + ConnectionLogger * mConnectionLogger; + IMAPConnectionLogger * mInternalLogger; + MCB_LOCK_TYPE mConnectionLoggerLock; + bool mAutomaticConfigurationEnabled; + bool mQueueRunning; + bool mScheduledAutomaticDisconnect; + + virtual void tryAutomaticDisconnectAfterDelay(void * context); + + public: // private + virtual void runOperation(IMAPOperation * operation); + virtual IMAPSession * session(); + + virtual void cancelAllOperations(); + virtual bool interruptCurrentCommand(IMAPOperation * operation); + virtual unsigned int operationsCount(); + + virtual void setLastFolder(String * folder); + virtual String * lastFolder(); + + virtual void tryAutomaticDisconnect(); + virtual void queueStartRunning(); + virtual void queueStoppedRunning(); + + virtual void setOwner(IMAPAsyncSession * owner); + virtual IMAPAsyncSession * owner(); + + virtual void logConnection(ConnectionLogType logType, Data * buffer); + + virtual bool isQueueRunning(); + virtual void setQueueRunning(bool running); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCIMAPAsyncSession.h b/src/include/MailCore/MCIMAPAsyncSession.h new file mode 100644 index 000000000..76e8503b3 --- /dev/null +++ b/src/include/MailCore/MCIMAPAsyncSession.h @@ -0,0 +1,248 @@ +// +// MCIMAPAccount.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/17/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPACCOUNT_H + +#define MAILCORE_MCIMAPACCOUNT_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class IMAPOperation; + class IMAPFetchFoldersOperation; + class IMAPAppendMessageOperation; + class IMAPCopyMessagesOperation; + class IMAPMoveMessagesOperation; + class IMAPFetchMessagesOperation; + class IMAPFetchContentOperation; + class IMAPFetchContentToFileOperation; + class IMAPFetchParsedContentOperation; + class IMAPIdleOperation; + class IMAPFolderInfoOperation; + class IMAPFolderStatusOperation; + class IMAPNamespace; + class IMAPSearchOperation; + class IMAPSearchExpression; + class IMAPFetchNamespaceOperation; + class IMAPIdentityOperation; + class IMAPAsyncConnection; + class IMAPCapabilityOperation; + class IMAPQuotaOperation; + class IMAPMessageRenderingOperation; + class IMAPMessage; + class IMAPSession; + class IMAPIdentity; + class OperationQueueCallback; + class IMAPCustomCommandOperation; + class IMAPCheckAccountOperation; + + class MAILCORE_EXPORT IMAPAsyncSession : public Object { + public: + IMAPAsyncSession(); + virtual ~IMAPAsyncSession(); + + virtual void setHostname(String * hostname); + virtual String * hostname(); + + virtual void setPort(unsigned int port); + virtual unsigned int port(); + + virtual void setUsername(String * username); + virtual String * username(); + + virtual void setPassword(String * password); + virtual String * password(); + + // To authenticate using OAuth2, username and oauth2token should be set. + // auth type to use is AuthTypeOAuth2. + virtual void setOAuth2Token(String * token); + virtual String * OAuth2Token(); + + virtual void setAuthType(AuthType authType); + virtual AuthType authType(); + + virtual void setConnectionType(ConnectionType connectionType); + virtual ConnectionType connectionType(); + + virtual void setTimeout(time_t timeout); + virtual time_t timeout(); + + virtual void setCheckCertificateEnabled(bool enabled); + virtual bool isCheckCertificateEnabled(); + + virtual void setVoIPEnabled(bool enabled); + virtual bool isVoIPEnabled(); + + virtual void setQResyncCompatible(bool compatible); + virtual bool isQResyncCompatible(); + + virtual void setDefaultNamespace(IMAPNamespace * ns); + virtual IMAPNamespace * defaultNamespace(); + + virtual void setAllowsFolderConcurrentAccessEnabled(bool enabled); + virtual bool allowsFolderConcurrentAccessEnabled(); + + virtual void setMaximumConnections(unsigned int maxConnections); + virtual unsigned int maximumConnections(); + + virtual void setConnectionLogger(ConnectionLogger * logger); + virtual ConnectionLogger * connectionLogger(); + +#if MC_HAS_GCD + virtual void setDispatchQueue(dispatch_queue_t dispatchQueue); + virtual dispatch_queue_t dispatchQueue(); +#endif + + virtual void setOperationQueueCallback(OperationQueueCallback * callback); + virtual OperationQueueCallback * operationQueueCallback(); + virtual bool isOperationQueueRunning(); + virtual void cancelAllOperations(); + + virtual IMAPIdentity * serverIdentity(); + virtual IMAPIdentity * clientIdentity(); + virtual void setClientIdentity(IMAPIdentity * clientIdentity); + + virtual String * gmailUserDisplayName() DEPRECATED_ATTRIBUTE; + + virtual bool isIdleEnabled(); + + virtual IMAPFolderInfoOperation * folderInfoOperation(String * folder); + virtual IMAPFolderStatusOperation * folderStatusOperation(String * folder); + + virtual IMAPFetchFoldersOperation * fetchSubscribedFoldersOperation(); + virtual IMAPFetchFoldersOperation * fetchAllFoldersOperation(); + + virtual IMAPOperation * renameFolderOperation(String * folder, String * otherName); + virtual IMAPOperation * deleteFolderOperation(String * folder); + virtual IMAPOperation * createFolderOperation(String * folder); + + virtual IMAPOperation * subscribeFolderOperation(String * folder); + virtual IMAPOperation * unsubscribeFolderOperation(String * folder); + + virtual IMAPAppendMessageOperation * appendMessageOperation(String * folder, Data * messageData, MessageFlag flags, Array * customFlags = NULL); + virtual IMAPAppendMessageOperation * appendMessageOperation(String * folder, String * messagePath, MessageFlag flags, Array * customFlags = NULL); + + virtual IMAPCopyMessagesOperation * copyMessagesOperation(String * folder, IndexSet * uids, String * destFolder); + virtual IMAPMoveMessagesOperation * moveMessagesOperation(String * folder, IndexSet * uids, String * destFolder); + + virtual IMAPOperation * expungeOperation(String * folder); + + virtual IMAPFetchMessagesOperation * fetchMessagesByUIDOperation(String * folder, IMAPMessagesRequestKind requestKind, + IndexSet * indexes); + virtual IMAPFetchMessagesOperation * fetchMessagesByNumberOperation(String * folder, IMAPMessagesRequestKind requestKind, + IndexSet * indexes); + virtual IMAPFetchMessagesOperation * syncMessagesByUIDOperation(String * folder, IMAPMessagesRequestKind requestKind, + IndexSet * indexes, uint64_t modSeq); + + virtual IMAPFetchContentOperation * fetchMessageByUIDOperation(String * folder, uint32_t uid, bool urgent = false); + virtual IMAPFetchContentOperation * fetchMessageAttachmentByUIDOperation(String * folder, uint32_t uid, String * partID, + Encoding encoding, bool urgent = false); + + virtual IMAPFetchContentToFileOperation * fetchMessageAttachmentToFileByUIDOperation( + String * folder, uint32_t uid, String * partID, + Encoding encoding, + String * filename, + bool urgent = false); + + virtual IMAPFetchContentOperation * fetchMessageByNumberOperation(String * folder, uint32_t number, bool urgent = false); + virtual IMAPCustomCommandOperation * customCommand(String *command, bool urgent); + virtual IMAPFetchContentOperation * fetchMessageAttachmentByNumberOperation(String * folder, uint32_t number, String * partID, + Encoding encoding, bool urgent = false); + + virtual IMAPFetchParsedContentOperation * fetchParsedMessageByUIDOperation(String * folder, uint32_t uid, bool urgent = false); + virtual IMAPFetchParsedContentOperation * fetchParsedMessageByNumberOperation(String * folder, uint32_t number, bool urgent = false); + + virtual IMAPOperation * storeFlagsByUIDOperation(String * folder, IndexSet * uids, IMAPStoreFlagsRequestKind kind, MessageFlag flags, Array * customFlags = NULL); + virtual IMAPOperation * storeFlagsByNumberOperation(String * folder, IndexSet * numbers, IMAPStoreFlagsRequestKind kind, MessageFlag flags, Array * customFlags = NULL); + virtual IMAPOperation * storeLabelsByUIDOperation(String * folder, IndexSet * uids, IMAPStoreFlagsRequestKind kind, Array * labels); + virtual IMAPOperation * storeLabelsByNumberOperation(String * folder, IndexSet * numbers, IMAPStoreFlagsRequestKind kind, Array * labels); + + virtual IMAPSearchOperation * searchOperation(String * folder, IMAPSearchKind kind, String * searchString); + virtual IMAPSearchOperation * searchOperation(String * folder, IMAPSearchExpression * expression); + + virtual IMAPIdleOperation * idleOperation(String * folder, uint32_t lastKnownUID); + + virtual IMAPFetchNamespaceOperation * fetchNamespaceOperation(); + + virtual IMAPIdentityOperation * identityOperation(IMAPIdentity * identity); + + virtual IMAPOperation * connectOperation(); + virtual IMAPCheckAccountOperation * checkAccountOperation(); + virtual IMAPOperation * disconnectOperation(); + + virtual IMAPCapabilityOperation * capabilityOperation(); + virtual IMAPQuotaOperation * quotaOperation(); + + virtual IMAPOperation * noopOperation(); + + virtual IMAPMessageRenderingOperation * htmlRenderingOperation(IMAPMessage * message, String * folder); + virtual IMAPMessageRenderingOperation * htmlBodyRenderingOperation(IMAPMessage * message, String * folder); + virtual IMAPMessageRenderingOperation * plainTextRenderingOperation(IMAPMessage * message, String * folder); + virtual IMAPMessageRenderingOperation * plainTextBodyRenderingOperation(IMAPMessage * message, String * folder, bool stripWhitespace); + + public: // private + virtual void automaticConfigurationDone(IMAPSession * session); + virtual void operationRunningStateChanged(); + virtual IMAPAsyncConnection * sessionForFolder(String * folder, bool urgent = false); + + private: + Array * mSessions; + + String * mHostname; + unsigned int mPort; + String * mUsername; + String * mPassword; + String * mOAuth2Token; + AuthType mAuthType; + ConnectionType mConnectionType; + bool mCheckCertificateEnabled; + bool mVoIPEnabled; + bool mQResyncCompatible; + IMAPNamespace * mDefaultNamespace; + time_t mTimeout; + bool mAllowsFolderConcurrentAccessEnabled; + unsigned int mMaximumConnections; + ConnectionLogger * mConnectionLogger; + bool mAutomaticConfigurationDone; + IMAPIdentity * mServerIdentity; + IMAPIdentity * mClientIdentity; + bool mQueueRunning; + OperationQueueCallback * mOperationQueueCallback; +#if MC_HAS_GCD + dispatch_queue_t mDispatchQueue; +#endif + String * mGmailUserDisplayName; + bool mIdleEnabled; + + /*! Create new IMAP session */ + virtual IMAPAsyncConnection * session(); + /*! Returns a new or an existing session, it is best suited to run the IMAP command + in the specified folder. */ + virtual IMAPAsyncConnection * matchingSessionForFolder(String * folder); + /*! Returns a session with minimum operation queue among already created ones. + If @param filterByFolder is true, then function filters sessions with + predicate ( lastFolder() EQUALS TO @param folder ). In case of param folder is NULL + the function would search a session among non-selected ones. */ + virtual IMAPAsyncConnection * sessionWithMinQueue(bool filterByFolder, String * folder); + /*! Returns existant or new session with empty operation queue, if it can. + Otherwise, returns the session with the minimum size of the operation queue. */ + virtual IMAPAsyncConnection * availableSession(); + virtual IMAPMessageRenderingOperation * renderingOperation(IMAPMessage * message, + String * folder, + IMAPMessageRenderingType type); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCIMAPCapabilityOperation.h b/src/include/MailCore/MCIMAPCapabilityOperation.h new file mode 100644 index 000000000..486d54cf0 --- /dev/null +++ b/src/include/MailCore/MCIMAPCapabilityOperation.h @@ -0,0 +1,38 @@ +// +// MCIMAPCapabilityOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/4/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPCAPABILITYOPERATION_H + +#define MAILCORE_MCIMAPCAPABILITYOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT IMAPCapabilityOperation : public IMAPOperation { + public: + IMAPCapabilityOperation(); + virtual ~IMAPCapabilityOperation(); + + // Result. + virtual IndexSet * capabilities(); + + public: // subclass behavior + virtual void main(); + + private: + IndexSet * mCapabilities; + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCIMAPCheckAccountOperation.h b/src/include/MailCore/MCIMAPCheckAccountOperation.h new file mode 100644 index 000000000..c8d987f30 --- /dev/null +++ b/src/include/MailCore/MCIMAPCheckAccountOperation.h @@ -0,0 +1,39 @@ +// +// MCIMAPCheckAccountOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPCHECKACCOUNTOPERATION_H + +#define MAILCORE_MCIMAPCHECKACCOUNTOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT IMAPCheckAccountOperation : public IMAPOperation { + public: + IMAPCheckAccountOperation(); + virtual ~IMAPCheckAccountOperation(); + + virtual String * loginResponse(); + virtual Data * loginUnparsedResponseData(); + + public: // subclass behavior + virtual void main(); + + private: + String * mLoginResponse; + Data * mLoginUnparsedResponseData; + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCIMAPConnectOperation.h b/src/include/MailCore/MCIMAPConnectOperation.h new file mode 100644 index 000000000..7678ccdd4 --- /dev/null +++ b/src/include/MailCore/MCIMAPConnectOperation.h @@ -0,0 +1,28 @@ +// +// MCIMAPConnectOperation.h +// mailcore2 +// +// Created by Ryan Walklin on 6/09/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPCONNECTOPERATION_H + +#define MAILCORE_MCIMAPCONNECTOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT IMAPConnectOperation : public IMAPOperation { + public: // subclass behavior + virtual void main(); + }; + +} + +#endif + +#endif /* defined(__MAILCORE_MCIMAPCONNECTOPERATION_H_) */ diff --git a/src/include/MailCore/MCIMAPCopyMessagesOperation.h b/src/include/MailCore/MCIMAPCopyMessagesOperation.h new file mode 100644 index 000000000..c6d754479 --- /dev/null +++ b/src/include/MailCore/MCIMAPCopyMessagesOperation.h @@ -0,0 +1,46 @@ +// +// MCIMAPCopyMessagesOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPCOPYMESSAGESOPERATION_H + +#define MAILCORE_MCIMAPCOPYMESSAGESOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT IMAPCopyMessagesOperation : public IMAPOperation { + public: + IMAPCopyMessagesOperation(); + virtual ~IMAPCopyMessagesOperation(); + + virtual void setDestFolder(String * destFolder); + virtual String * destFolder(); + + virtual void setUids(IndexSet * uids); + virtual IndexSet * uids(); + + // Result. + virtual HashMap * uidMapping(); + + public: // subclass behavior + virtual void main(); + + private: + IndexSet * mUids; + String * mDestFolder; + HashMap * mUidMapping; + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCIMAPCreateFolderOperation.h b/src/include/MailCore/MCIMAPCreateFolderOperation.h new file mode 100644 index 000000000..c95352eae --- /dev/null +++ b/src/include/MailCore/MCIMAPCreateFolderOperation.h @@ -0,0 +1,32 @@ +// +// MCIMAPCreateFolderOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPCREATEFOLDEROPERATION_H + +#define MAILCORE_MCIMAPCREATEFOLDEROPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT IMAPCreateFolderOperation : public IMAPOperation { + public: + IMAPCreateFolderOperation(); + virtual ~IMAPCreateFolderOperation(); + + public: // subclass behavior + virtual void main(); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCIMAPCustomCommandOperation.h b/src/include/MailCore/MCIMAPCustomCommandOperation.h new file mode 100644 index 000000000..a2ce20feb --- /dev/null +++ b/src/include/MailCore/MCIMAPCustomCommandOperation.h @@ -0,0 +1,39 @@ +// +// MCIMAPCustomCommandOperation.h +// mailcore2 +// +// Created by Libor Huspenina on 18/10/2015. +// Copyright © 2015 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPCUSTOMCOMMANDOPERATION_H + +#define MAILCORE_MCIMAPCUSTOMCOMMANDOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT IMAPCustomCommandOperation : public IMAPOperation { + public: + IMAPCustomCommandOperation(); + virtual ~IMAPCustomCommandOperation(); + + virtual void setCustomCommand(String *command); + virtual String * response(); + + public: // subclass behavior + virtual void main(); + + private: + String * mCustomCommand; + String * mResponse; + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCIMAPDeleteFolderOperation.h b/src/include/MailCore/MCIMAPDeleteFolderOperation.h new file mode 100644 index 000000000..d22f0a79b --- /dev/null +++ b/src/include/MailCore/MCIMAPDeleteFolderOperation.h @@ -0,0 +1,32 @@ +// +// MCIMAPDeleteFolderOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPDELETEFOLDEROPERATION_H + +#define MAILCORE_MCIMAPDELETEFOLDEROPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT IMAPDeleteFolderOperation : public IMAPOperation { + public: + IMAPDeleteFolderOperation(); + virtual ~IMAPDeleteFolderOperation(); + + public: // subclass behavior + virtual void main(); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCIMAPDisconnectOperation.h b/src/include/MailCore/MCIMAPDisconnectOperation.h new file mode 100644 index 000000000..683a0e774 --- /dev/null +++ b/src/include/MailCore/MCIMAPDisconnectOperation.h @@ -0,0 +1,34 @@ +// +// MCIMAPDisconnectOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 6/22/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPDISCONNECTOPERATION_H + +#define MAILCORE_MCIMAPDISCONNECTOPERATION_H + +#include +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT IMAPDisconnectOperation : public IMAPOperation { + public: + IMAPDisconnectOperation(); + virtual ~IMAPDisconnectOperation(); + + public: // subclass behavior + virtual void main(); + }; + +} + +#endif + +#endif \ No newline at end of file diff --git a/src/include/MailCore/MCIMAPExpungeOperation.h b/src/include/MailCore/MCIMAPExpungeOperation.h new file mode 100644 index 000000000..617af7b14 --- /dev/null +++ b/src/include/MailCore/MCIMAPExpungeOperation.h @@ -0,0 +1,32 @@ +// +// MCIMAPExpungeOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPEXPUNGEOPERATION_H + +#define MAILCORE_MCIMAPEXPUNGEOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT IMAPExpungeOperation : public IMAPOperation { + public: + IMAPExpungeOperation(); + virtual ~IMAPExpungeOperation(); + + public: // subclass behavior + virtual void main(); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCIMAPFetchContentOperation.h b/src/include/MailCore/MCIMAPFetchContentOperation.h new file mode 100644 index 000000000..0b5b70f28 --- /dev/null +++ b/src/include/MailCore/MCIMAPFetchContentOperation.h @@ -0,0 +1,55 @@ +// +// IMAPFetchContentOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_IMAPFETCHCONTENTOPERATION_H + +#define MAILCORE_IMAPFETCHCONTENTOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT IMAPFetchContentOperation : public IMAPOperation { + public: + IMAPFetchContentOperation(); + virtual ~IMAPFetchContentOperation(); + + virtual void setUid(uint32_t uid); + virtual uint32_t uid(); + + virtual void setNumber(uint32_t value); + virtual uint32_t number(); + + virtual void setPartID(String * partID); + virtual String * partID(); + + virtual void setEncoding(Encoding encoding); + virtual Encoding encoding(); + + // Result. + virtual Data * data(); + + public: // subclass behavior + virtual void main(); + + private: + uint32_t mUid; + uint32_t mNumber; + String * mPartID; + Encoding mEncoding; + Data * mData; + + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCIMAPFetchContentToFileOperation.h b/src/include/MailCore/MCIMAPFetchContentToFileOperation.h new file mode 100644 index 000000000..35d7026f1 --- /dev/null +++ b/src/include/MailCore/MCIMAPFetchContentToFileOperation.h @@ -0,0 +1,53 @@ +// +// IMAPFetchContentToFileOperation.h +// mailcore2 +// +// Created by Dmitry Isaikin on 2/08/16. +// Copyright (c) 2016 MailCore. All rights reserved. +// + +#ifndef MAILCORE_IMAPFETCHCONTENTTOFILEOPERATION_H + +#define MAILCORE_IMAPFETCHCONTENTTOFILEOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT IMAPFetchContentToFileOperation : public IMAPOperation { + public: + IMAPFetchContentToFileOperation(); + virtual ~IMAPFetchContentToFileOperation(); + + virtual void setUid(uint32_t uid); + virtual void setPartID(String * partID); + virtual void setEncoding(Encoding encoding); + virtual void setFilename(String * filename); + + virtual void setLoadingByChunksEnabled(bool loadingByChunksEnabled); + virtual bool isLoadingByChunksEnabled(); + virtual void setChunksSize(uint32_t chunksSize); + virtual uint32_t chunksSize(); + virtual void setEstimatedSize(uint32_t estimatedSize); + virtual uint32_t estimatedSize(); + + public: // subclass behavior + virtual void main(); + + private: + uint32_t mUid; + String * mPartID; + Encoding mEncoding; + String * mFilename; + bool mLoadingByChunksEnabled; + uint32_t mChunksSize; + uint32_t mEstimatedSize; + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCIMAPFetchFoldersOperation.h b/src/include/MailCore/MCIMAPFetchFoldersOperation.h new file mode 100644 index 000000000..f6456a367 --- /dev/null +++ b/src/include/MailCore/MCIMAPFetchFoldersOperation.h @@ -0,0 +1,44 @@ +// +// MCIMAPFetchFoldersOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPFETCHFOLDERSOPERATION_H + +#define MAILCORE_MCIMAPFETCHFOLDERSOPERATION_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT IMAPFetchFoldersOperation : public IMAPOperation { + public: + IMAPFetchFoldersOperation(); + virtual ~IMAPFetchFoldersOperation(); + + virtual void setFetchSubscribedEnabled(bool enabled); + virtual bool isFetchSubscribedEnabled(); + + // Result. + virtual Array * /* IMAPFolder */ folders(); + + public: // subclass behavior + virtual void main(); + + private: + bool mFetchSubscribedEnabled; + Array * mFolders; + + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCIMAPFetchMessagesOperation.h b/src/include/MailCore/MCIMAPFetchMessagesOperation.h new file mode 100644 index 000000000..620aead64 --- /dev/null +++ b/src/include/MailCore/MCIMAPFetchMessagesOperation.h @@ -0,0 +1,61 @@ +// +// IMAPFetchMessagesOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPFETCHMESSAGESOPERATION_H + +#define MAILCORE_MCIMAPFETCHMESSAGESOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT IMAPFetchMessagesOperation : public IMAPOperation { + public: + IMAPFetchMessagesOperation(); + virtual ~IMAPFetchMessagesOperation(); + + virtual void setFetchByUidEnabled(bool enabled); + virtual bool isFetchByUidEnabled(); + + virtual void setIndexes(IndexSet * indexes); + virtual IndexSet * indexes(); + + virtual void setModSequenceValue(uint64_t modseq); + virtual uint64_t modSequenceValue(); + + virtual void setKind(IMAPMessagesRequestKind kind); + virtual IMAPMessagesRequestKind kind(); + + virtual void setExtraHeaders(Array * extraHeaders); + virtual Array * extraHeaders(); + + // Result. + virtual Array * /* IMAPMessage */ messages(); + virtual IndexSet * vanishedMessages(); + + public: // subclass behavior + virtual void main(); + + private: + bool mFetchByUidEnabled; + IndexSet * mIndexes; + IMAPMessagesRequestKind mKind; + Array * /* String */ mExtraHeaders; + Array * /* IMAPMessage */ mMessages; + IndexSet * mVanishedMessages; + uint64_t mModSequenceValue; + + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCIMAPFetchNamespaceOperation.h b/src/include/MailCore/MCIMAPFetchNamespaceOperation.h new file mode 100644 index 000000000..35b6ca2b9 --- /dev/null +++ b/src/include/MailCore/MCIMAPFetchNamespaceOperation.h @@ -0,0 +1,39 @@ +// +// IMAPFetchNamespaceOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPFETCHNAMESPACEOPERATION_H + +#define MAILCORE_MCIMAPFETCHNAMESPACEOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT IMAPFetchNamespaceOperation : public IMAPOperation { + public: + IMAPFetchNamespaceOperation(); + virtual ~IMAPFetchNamespaceOperation(); + + // Result. + virtual HashMap * namespaces(); + + public: // subclass behavior + virtual void main(); + + private: + HashMap * mNamespaces; + + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCIMAPFetchParsedContentOperation.h b/src/include/MailCore/MCIMAPFetchParsedContentOperation.h new file mode 100644 index 000000000..ec0485a95 --- /dev/null +++ b/src/include/MailCore/MCIMAPFetchParsedContentOperation.h @@ -0,0 +1,53 @@ +// +// IMAPFetchParsedContentOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_IMAPFETCHPARSEDCONTENTOPERATION_H + +#define MAILCORE_IMAPFETCHPARSEDCONTENTOPERATION_H + +#include + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT IMAPFetchParsedContentOperation : public IMAPOperation { + public: + IMAPFetchParsedContentOperation(); + virtual ~IMAPFetchParsedContentOperation(); + + virtual void setUid(uint32_t uid); + virtual uint32_t uid(); + + virtual void setNumber(uint32_t value); + virtual uint32_t number(); + + virtual void setEncoding(Encoding encoding); + virtual Encoding encoding(); + + // Result. + virtual MessageParser * parser(); + + public: // subclass behavior + virtual void main(); + + private: + uint32_t mUid; + uint32_t mNumber; + Encoding mEncoding; + MessageParser * mParser; + + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCIMAPFolder.h b/src/include/MailCore/MCIMAPFolder.h new file mode 100644 index 000000000..5d9c111f9 --- /dev/null +++ b/src/include/MailCore/MCIMAPFolder.h @@ -0,0 +1,42 @@ +#ifndef MAILCORE_MCIMAPFOLDER_H + +#define MAILCORE_MCIMAPFOLDER_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT IMAPFolder : public Object { + public: + IMAPFolder(); + virtual ~IMAPFolder(); + + virtual void setPath(String * path); + virtual String * path(); + + virtual void setDelimiter(char delimiter); + virtual char delimiter(); + + virtual void setFlags(IMAPFolderFlag flags); + virtual IMAPFolderFlag flags(); + + public: // subclass behavior + IMAPFolder(IMAPFolder * other); + virtual Object * copy(); + virtual String * description(); + + private: + String * mPath; + char mDelimiter; + IMAPFolderFlag mFlags; + void init(); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCIMAPFolderInfo.h b/src/include/MailCore/MCIMAPFolderInfo.h new file mode 100644 index 000000000..c0fa7c356 --- /dev/null +++ b/src/include/MailCore/MCIMAPFolderInfo.h @@ -0,0 +1,63 @@ +// +// MCIMAPFolderInfo.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 12/6/14. +// Copyright (c) 2014 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPFolderInfo_H + +#define MAILCORE_MCIMAPFolderInfo_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT IMAPFolderInfo : public Object { + public: + IMAPFolderInfo(); + virtual ~IMAPFolderInfo(); + + virtual void setUidNext(uint32_t uidNext); + virtual uint32_t uidNext(); + + virtual void setUidValidity(uint32_t uidValidity); + virtual uint32_t uidValidity(); + + virtual void setModSequenceValue(uint64_t modSequenceValue); + virtual uint64_t modSequenceValue(); + + virtual void setMessageCount(int messageCount); + virtual int messageCount(); + + virtual void setFirstUnseenUid(uint32_t firstUnseenUid); + virtual uint32_t firstUnseenUid(); + + virtual void setAllowsNewPermanentFlags(bool allowsNewPermanentFlags); + virtual bool allowsNewPermanentFlags(); + + public: // subclass behavior + IMAPFolderInfo(IMAPFolderInfo * other); + virtual Object * copy(); + + private: + uint32_t mUidNext; + uint32_t mUidValidity; + uint64_t mModSequenceValue; + int mMessageCount; + uint32_t mFirstUnseenUid; + bool mAllowsNewPermanentFlags; + + void init(); + }; + +} + +#endif + +#endif + diff --git a/src/include/MailCore/MCIMAPFolderInfoOperation.h b/src/include/MailCore/MCIMAPFolderInfoOperation.h new file mode 100644 index 000000000..e0b5128c7 --- /dev/null +++ b/src/include/MailCore/MCIMAPFolderInfoOperation.h @@ -0,0 +1,41 @@ +// +// MCIMAPFolderInfoOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/13/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPFOLDERINFOOPERATION_H + +#define MAILCORE_MCIMAPFOLDERINFOOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class IMAPFolderInfo; + + class MAILCORE_EXPORT IMAPFolderInfoOperation : public IMAPOperation { + public: + IMAPFolderInfoOperation(); + virtual ~IMAPFolderInfoOperation(); + + IMAPFolderInfo * info(); + + public: // subclass behavior + virtual void main(); + + private: + + IMAPFolderInfo * mInfo; + + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCIMAPFolderStatus.h b/src/include/MailCore/MCIMAPFolderStatus.h new file mode 100644 index 000000000..8bfac59f7 --- /dev/null +++ b/src/include/MailCore/MCIMAPFolderStatus.h @@ -0,0 +1,64 @@ +// +// MCIMAPFolderStatus.h +// mailcore2 +// +// Created by Sebastian on 6/11/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPFOLDERSTATUS_H + +#define MAILCORE_MCIMAPFOLDERSTATUS_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT IMAPFolderStatus : public Object { + public: + IMAPFolderStatus(); + virtual ~IMAPFolderStatus(); + + virtual void setUnseenCount(uint32_t unseen); + virtual uint32_t unseenCount(); + + virtual void setMessageCount(uint32_t messages); + virtual uint32_t messageCount(); + + virtual void setRecentCount(uint32_t recent); + virtual uint32_t recentCount(); + + virtual void setUidNext(uint32_t uidNext); + virtual uint32_t uidNext(); + + virtual void setUidValidity(uint32_t uidValidity); + virtual uint32_t uidValidity(); + + virtual void setHighestModSeqValue(uint64_t highestModSeqValue); + virtual uint64_t highestModSeqValue(); + + public: // subclass behavior + IMAPFolderStatus(IMAPFolderStatus * other); + virtual Object * copy(); + virtual String * description(); + + private: + uint32_t mUnseenCount; + uint32_t mMessageCount; + uint32_t mRecentCount; + uint32_t mUidNext; + uint32_t mUidValidity; + uint64_t mHighestModSeqValue; + + void init(); + }; + +} + +#endif + +#endif + diff --git a/src/include/MailCore/MCIMAPFolderStatusOperation.h b/src/include/MailCore/MCIMAPFolderStatusOperation.h new file mode 100644 index 000000000..53e3025be --- /dev/null +++ b/src/include/MailCore/MCIMAPFolderStatusOperation.h @@ -0,0 +1,41 @@ +// +// MCIMAPFolderStatusOperation.h +// mailcore2 +// +// Created by Sebastian on 6/5/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + + +#ifndef MAILCORE_MCIMAPFOLDERSTATUSOPERATION_H + +#define MAILCORE_MCIMAPFOLDERSTATUSOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class IMAPFolderStatus; + + class MAILCORE_EXPORT IMAPFolderStatusOperation : public IMAPOperation { + public: + IMAPFolderStatusOperation(); + virtual ~IMAPFolderStatusOperation(); + + // Results. + virtual IMAPFolderStatus * status(); + + public: // subclass behavior + virtual void main(); + + private: + IMAPFolderStatus * mStatus; + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCIMAPIdentity.h b/src/include/MailCore/MCIMAPIdentity.h new file mode 100644 index 000000000..ee6b3c5e6 --- /dev/null +++ b/src/include/MailCore/MCIMAPIdentity.h @@ -0,0 +1,56 @@ +// +// MCIMAPIdentity.h +// mailcore2 +// +// Created by Hoa V. DINH on 8/24/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPIDENTITY_H + +#define MAILCORE_MCIMAPIDENTITY_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT IMAPIdentity : public Object { + public: + + IMAPIdentity(); + virtual ~IMAPIdentity(); + + virtual void setVendor(String * vendor); + virtual String * vendor(); + + virtual void setName(String * name); + virtual String * name(); + + virtual void setVersion(String * version); + virtual String * version(); + + virtual void removeAllInfos(); + + virtual Array * allInfoKeys(); + virtual String * infoForKey(String * key); + virtual void setInfoForKey(String * key, String * value); + + public: // subclass behavior + IMAPIdentity(IMAPIdentity * identity); + virtual Object * copy(); + virtual String * description(); + + private: + HashMap * mValues; + + void init(); + }; + +} + +#endif + +#endif + diff --git a/src/include/MailCore/MCIMAPIdentityOperation.h b/src/include/MailCore/MCIMAPIdentityOperation.h new file mode 100644 index 000000000..70cc7d523 --- /dev/null +++ b/src/include/MailCore/MCIMAPIdentityOperation.h @@ -0,0 +1,45 @@ +// +// IMAPIdentityOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPIDENTITYOPERATION_H + +#define MAILCORE_MCIMAPIDENTITYOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class IMAPIdentity; + + class MAILCORE_EXPORT IMAPIdentityOperation : public IMAPOperation { + public: + IMAPIdentityOperation(); + virtual ~IMAPIdentityOperation(); + + virtual void setClientIdentity(IMAPIdentity * identity); + virtual IMAPIdentity * clientIdentity(); + + // Result. + virtual IMAPIdentity * serverIdentity(); + + public: // subclass behavior + virtual void main(); + + private: + IMAPIdentity * mClientIdentity; + IMAPIdentity * mServerIdentity; + + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCIMAPIdleOperation.h b/src/include/MailCore/MCIMAPIdleOperation.h new file mode 100644 index 000000000..29bfe7400 --- /dev/null +++ b/src/include/MailCore/MCIMAPIdleOperation.h @@ -0,0 +1,46 @@ +// +// IMAPIdleOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPIDLEOPERATION_H + +#define MAILCORE_MCIMAPIDLEOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT IMAPIdleOperation : public IMAPOperation { + public: + IMAPIdleOperation(); + virtual ~IMAPIdleOperation(); + + virtual void setLastKnownUID(uint32_t uid); + virtual uint32_t lastKnownUID(); + + virtual void interruptIdle(); + + public: // subclass behavior + virtual void main(); + + private: + uint32_t mLastKnownUid; + bool mSetupSuccess; + bool mInterrupted; + MCB_LOCK_TYPE mLock; + void prepare(void * data); + void unprepare(void * data); + bool isInterrupted(); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCIMAPMessage.h b/src/include/MailCore/MCIMAPMessage.h new file mode 100644 index 000000000..c36a9ad1a --- /dev/null +++ b/src/include/MailCore/MCIMAPMessage.h @@ -0,0 +1,92 @@ +#ifndef MAILCORE_IMAP_MESSAGE_H + +#define MAILCORE_IMAP_MESSAGE_H + +#include +#include +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class IMAPPart; + class HTMLRendererIMAPCallback; + class HTMLRendererTemplateCallback; + + class MAILCORE_EXPORT IMAPMessage : public AbstractMessage { + public: + IMAPMessage(); + virtual ~IMAPMessage(); + + virtual uint32_t sequenceNumber(); + virtual void setSequenceNumber(uint32_t sequenceNumber); + + virtual uint32_t uid(); + virtual void setUid(uint32_t uid); + + virtual uint32_t size(); + virtual void setSize(uint32_t size); + + virtual void setFlags(MessageFlag flags); + virtual MessageFlag flags(); + + virtual void setOriginalFlags(MessageFlag flags); + virtual MessageFlag originalFlags(); + + virtual void setCustomFlags(Array * customFlags); + virtual Array * customFlags(); + + virtual uint64_t modSeqValue(); + virtual void setModSeqValue(uint64_t uid); + + virtual void setMainPart(AbstractPart * mainPart); + virtual AbstractPart * mainPart(); + + virtual void setGmailLabels(Array * /* String */ labels); + virtual Array * /* String */ gmailLabels(); + + virtual void setGmailMessageID(uint64_t msgID); + virtual uint64_t gmailMessageID(); + + virtual void setGmailThreadID(uint64_t threadID); + virtual uint64_t gmailThreadID(); + + virtual AbstractPart * partForPartID(String * partID); + + virtual AbstractPart * partForContentID(String * contentID); + virtual AbstractPart * partForUniqueID(String * uniqueID); + + virtual String * htmlRendering(String * folder, + HTMLRendererIMAPCallback * dataCallback, + HTMLRendererTemplateCallback * htmlCallback = NULL); + + public: // subclass behavior + IMAPMessage(IMAPMessage * other); + virtual Object * copy(); + virtual String * description(); + virtual HashMap * serializable(); + virtual void importSerializable(HashMap * serializable); + + private: + uint64_t mModSeqValue; + uint32_t mUid; + uint32_t mSize; + uint32_t mSequenceNumber; // not serialized. + + MessageFlag mFlags; + MessageFlag mOriginalFlags; + Array * /* String */ mCustomFlags; + AbstractPart * mMainPart; + Array * /* String */ mGmailLabels; + uint64_t mGmailMessageID; + uint64_t mGmailThreadID; + void init(); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCIMAPMessagePart.h b/src/include/MailCore/MCIMAPMessagePart.h new file mode 100644 index 000000000..763172017 --- /dev/null +++ b/src/include/MailCore/MCIMAPMessagePart.h @@ -0,0 +1,34 @@ +#ifndef MAILCORE_IMAPMESSAGEPART_H + +#define MAILCORE_IMAPMESSAGEPART_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT IMAPMessagePart : public AbstractMessagePart { + public: + IMAPMessagePart(); + virtual ~IMAPMessagePart(); + + virtual void setPartID(String * partID); + virtual String * partID(); + + public: // subclass behavior + IMAPMessagePart(IMAPMessagePart * other); + virtual Object * copy(); + virtual HashMap * serializable(); + virtual void importSerializable(HashMap * serializable); + + private: + String * mPartID; + void init(); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCIMAPMessageRenderingOperation.h b/src/include/MailCore/MCIMAPMessageRenderingOperation.h new file mode 100644 index 000000000..7a02b4ae1 --- /dev/null +++ b/src/include/MailCore/MCIMAPMessageRenderingOperation.h @@ -0,0 +1,48 @@ +// +// MCIMAPMessageRenderingOperation.h +// mailcore2 +// +// Created by Paul Young on 27/06/2013. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPMessageRenderingOperation_H + +#define MAILCORE_MCIMAPMessageRenderingOperation_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT IMAPMessageRenderingOperation : public IMAPOperation { + public: + IMAPMessageRenderingOperation(); + virtual ~IMAPMessageRenderingOperation(); + + virtual void setRenderingType(IMAPMessageRenderingType type); + virtual IMAPMessageRenderingType renderingType(); + + virtual void setMessage(IMAPMessage * message); + virtual IMAPMessage * message(); + + // Result. + virtual String * result(); + + public: // subclass behavior + virtual void main(); + + private: + IMAPMessageRenderingType mRenderingType; + String * mResult; + IMAPMessage * mMessage; + + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCIMAPMoveMessagesOperation.h b/src/include/MailCore/MCIMAPMoveMessagesOperation.h new file mode 100644 index 000000000..1c4342f5c --- /dev/null +++ b/src/include/MailCore/MCIMAPMoveMessagesOperation.h @@ -0,0 +1,46 @@ +// +// IMAPMoveMessagesOperation.hpp +// mailcore2 +// +// Created by Nikolay Morev on 02/02/16. +// Copyright © 2016 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPMOVEMESSAGESOPERATION_H + +#define MAILCORE_MCIMAPMOVEMESSAGESOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT IMAPMoveMessagesOperation : public IMAPOperation { + public: + IMAPMoveMessagesOperation(); + virtual ~IMAPMoveMessagesOperation(); + + virtual void setDestFolder(String * destFolder); + virtual String * destFolder(); + + virtual void setUids(IndexSet * uids); + virtual IndexSet * uids(); + + // Result. + virtual HashMap * uidMapping(); + + public: // subclass behavior + virtual void main(); + + private: + IndexSet * mUids; + String * mDestFolder; + HashMap * mUidMapping; + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCIMAPMultiDisconnectOperation.h b/src/include/MailCore/MCIMAPMultiDisconnectOperation.h new file mode 100644 index 000000000..78c36ed8f --- /dev/null +++ b/src/include/MailCore/MCIMAPMultiDisconnectOperation.h @@ -0,0 +1,41 @@ +// +// MCIMAPMultiDisconnectOperation.h +// mailcore2 +// +// Created by Hoa V. DINH on 11/7/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPMULTIDISCONNECTOPERATION_H + +#define MAILCORE_MCIMAPMULTIDISCONNECTOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT IMAPMultiDisconnectOperation : public IMAPOperation, public OperationCallback { + public: + IMAPMultiDisconnectOperation(); + virtual ~IMAPMultiDisconnectOperation(); + + virtual void addOperation(IMAPOperation * op); + + public: // subclass behavior + virtual void start(); + + public: // OperationCallback + virtual void operationFinished(Operation * op); + + private: + Array * _operations; + unsigned int _count; + }; + +} + +#endif + +#endif \ No newline at end of file diff --git a/src/include/MailCore/MCIMAPMultipart.h b/src/include/MailCore/MCIMAPMultipart.h new file mode 100644 index 000000000..913966245 --- /dev/null +++ b/src/include/MailCore/MCIMAPMultipart.h @@ -0,0 +1,34 @@ +#ifndef MAILCORE_MCIMAPMULTIPART_H + +#define MAILCORE_MCIMAPMULTIPART_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT IMAPMultipart : public AbstractMultipart { + public: + IMAPMultipart(); + virtual ~IMAPMultipart(); + + virtual void setPartID(String * partID); + virtual String * partID(); + + public: // subclass behavior + IMAPMultipart(IMAPMultipart * other); + virtual Object * copy(); + virtual HashMap * serializable(); + virtual void importSerializable(HashMap * serializable); + + private: + String * mPartID; + void init(); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCIMAPNamespace.h b/src/include/MailCore/MCIMAPNamespace.h new file mode 100644 index 000000000..711fb7e5f --- /dev/null +++ b/src/include/MailCore/MCIMAPNamespace.h @@ -0,0 +1,53 @@ +#ifndef MAILCORE_MCIMAPNAMESPACE_H + +#define MAILCORE_MCIMAPNAMESPACE_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class IMAPNamespaceItem; + + class MAILCORE_EXPORT IMAPNamespace : public Object { + public: + IMAPNamespace(); + virtual ~IMAPNamespace(); + + virtual String * mainPrefix(); + virtual char mainDelimiter(); + + virtual Array * /* String */ prefixes(); + + virtual String * pathForComponents(Array * components); + virtual String * pathForComponentsAndPrefix(Array * components, String * prefix); + + virtual Array * /* String */ componentsFromPath(String * path); + + virtual bool containsFolderPath(String * path); + + static IMAPNamespace * namespaceWithPrefix(String * prefix, char delimiter); + + public: // subclass behavior + IMAPNamespace(IMAPNamespace * other); + virtual String * description(); + virtual Object * copy(); + virtual HashMap * serializable(); + virtual void importSerializable(HashMap * serializable); + + private: + Array * /* String */ mItems; + void init(); + IMAPNamespaceItem * mainItem(); + IMAPNamespaceItem * itemForPath(String * path); + + public: // private + virtual void importIMAPNamespace(struct mailimap_namespace_item * item); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCIMAPNamespaceItem.h b/src/include/MailCore/MCIMAPNamespaceItem.h new file mode 100644 index 000000000..0fffed983 --- /dev/null +++ b/src/include/MailCore/MCIMAPNamespaceItem.h @@ -0,0 +1,48 @@ +#ifndef MAILCORE_MCIMAPNAMESPACEITEM_H + +#define MAILCORE_MCIMAPNAMESPACEITEM_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT IMAPNamespaceItem : public Object { + public: + IMAPNamespaceItem(); + virtual ~IMAPNamespaceItem(); + + virtual void setPrefix(String * prefix); + virtual String * prefix(); + + virtual void setDelimiter(char delimiter); + virtual char delimiter(); + + virtual String * pathForComponents(Array * components); + virtual Array * /* String */ componentsForPath(String * path); + + virtual bool containsFolder(String * folder); + + public: // subclass behavior + IMAPNamespaceItem(IMAPNamespaceItem * other); + virtual String * description(); + virtual Object * copy(); + virtual HashMap * serializable(); + virtual void importSerializable(HashMap * serializable); + + private: + char mDelimiter; + String * mPrefix; + void init(); + + public: // private + virtual void importIMAPNamespaceInfo(struct mailimap_namespace_info * info); + + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCIMAPNoopOperation.h b/src/include/MailCore/MCIMAPNoopOperation.h new file mode 100644 index 000000000..515f563a9 --- /dev/null +++ b/src/include/MailCore/MCIMAPNoopOperation.h @@ -0,0 +1,32 @@ +// +// MCIMAPNoopOperation.h +// mailcore2 +// +// Created by Robert Widmann on 9/24/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPNOOPOPERATION_H + +#define MAILCORE_MCIMAPNOOPOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT IMAPNoopOperation : public IMAPOperation { + public: + IMAPNoopOperation(); + virtual ~IMAPNoopOperation(); + + public: // subclass behavior + virtual void main(); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCIMAPOperation.h b/src/include/MailCore/MCIMAPOperation.h new file mode 100644 index 000000000..8075a733a --- /dev/null +++ b/src/include/MailCore/MCIMAPOperation.h @@ -0,0 +1,85 @@ +// +// MCIMAPOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPOPERATION_H + +#define MAILCORE_MCIMAPOPERATION_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class IMAPAsyncConnection; + class IMAPAsyncSession; + class IMAPOperationCallback; + + class MAILCORE_EXPORT IMAPOperation : public Operation, public IMAPProgressCallback { + public: + IMAPOperation(); + virtual ~IMAPOperation(); + + virtual void setMainSession(IMAPAsyncSession * session); + virtual IMAPAsyncSession * mainSession(); + + virtual void setSession(IMAPAsyncConnection * session); + virtual IMAPAsyncConnection * session(); + + virtual void setFolder(String * folder); + virtual String * folder(); + + virtual void setUrgent(bool urgent); + virtual bool isUrgent(); + + virtual void setImapCallback(IMAPOperationCallback * callback); + virtual IMAPOperationCallback * imapCallback(); + + virtual void beforeMain(); + virtual void afterMain(); + virtual void interrupt(); + + /** Aborts this operation's IMAP command if it is the one currently running on its + connection: the blocked read returns at once instead of waiting out the socket timeout, so + the operations queued behind it (a disconnect, most importantly) run immediately. + Does nothing when the operation is not the one running. + + Teardown of this connection only - it is left unusable and reconnects on next use, so call + it for a command that is being abandoned (cancelled, or given up on), never to hurry up a + command whose result still matters. + Returns whether a command was actually interrupted. */ + virtual bool interruptCurrentCommand(); + + virtual void start(); + + // Result. + virtual void setError(ErrorCode error); + virtual ErrorCode error(); + + private: + IMAPAsyncSession * mMainSession; + IMAPAsyncConnection * mSession; + String * mFolder; + IMAPOperationCallback * mImapCallback; + ErrorCode mError; + bool mUrgent; + + private: + virtual void bodyProgress(IMAPSession * session, unsigned int current, unsigned int maximum); + virtual void bodyProgressOnMainThread(void * context); + virtual void itemsProgress(IMAPSession * session, unsigned int current, unsigned int maximum); + virtual void itemsProgressOnMainThread(void * context); + + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCIMAPOperationCallback.h b/src/include/MailCore/MCIMAPOperationCallback.h new file mode 100644 index 000000000..c5e14ffb2 --- /dev/null +++ b/src/include/MailCore/MCIMAPOperationCallback.h @@ -0,0 +1,31 @@ +// +// MCIMAPOperationCallback.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPOPERATIONCALLBACK_H + +#define MAILCORE_MCIMAPOPERATIONCALLBACK_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class IMAPOperation; + + class MAILCORE_EXPORT IMAPOperationCallback { + public: + virtual void bodyProgress(IMAPOperation * session, unsigned int current, unsigned int maximum) {}; + virtual void itemProgress(IMAPOperation * session, unsigned int current, unsigned int maximum) {}; + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCIMAPPart.h b/src/include/MailCore/MCIMAPPart.h new file mode 100644 index 000000000..1a34da217 --- /dev/null +++ b/src/include/MailCore/MCIMAPPart.h @@ -0,0 +1,66 @@ +#ifndef MAILCORE_MCIMAPPART_H + +#define MAILCORE_MCIMAPPART_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class IMAPMessagePart; + class IMAPMultipart; + + class MAILCORE_EXPORT IMAPPart : public AbstractPart { + public: + IMAPPart(); + virtual ~IMAPPart(); + + virtual void setPartID(String * partID); + virtual String * partID(); + + virtual void setSize(unsigned int size); + virtual unsigned int size(); + + virtual unsigned int decodedSize(); + + virtual void setEncoding(Encoding encoding); + virtual Encoding encoding(); + + public: // subclass behavior + IMAPPart(IMAPPart * other); + virtual Object * copy(); + virtual HashMap * serializable(); + virtual void importSerializable(HashMap * serializable); + + public: // private + static AbstractPart * attachmentWithIMAPBody(struct mailimap_body * body); + + virtual void importIMAPFields(struct mailimap_body_fields * fields, + struct mailimap_body_ext_1part * extension); + + private: + String * mPartID; + Encoding mEncoding; + unsigned int mSize; + void init(); + static AbstractPart * attachmentWithIMAPBodyInternal(struct mailimap_body * body, String * partID); + static AbstractPart * attachmentWithIMAPBody1Part(struct mailimap_body_type_1part * body_1part, + String * partID); + static IMAPMessagePart * attachmentWithIMAPBody1PartMessage(struct mailimap_body_type_msg * message, + struct mailimap_body_ext_1part * extension, + String * partID); + static IMAPPart * attachmentWithIMAPBody1PartBasic(struct mailimap_body_type_basic * basic, + struct mailimap_body_ext_1part * extension); + static IMAPPart * attachmentWithIMAPBody1PartText(struct mailimap_body_type_text * text, + struct mailimap_body_ext_1part * extension); + static IMAPMultipart * attachmentWithIMAPBodyMultipart(struct mailimap_body_type_mpart * body_mpart, + String * partID); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCIMAPProgressCallback.h b/src/include/MailCore/MCIMAPProgressCallback.h new file mode 100644 index 000000000..b461eefdb --- /dev/null +++ b/src/include/MailCore/MCIMAPProgressCallback.h @@ -0,0 +1,23 @@ +#ifndef MAILCORE_MCIMAPPROGRESSCALLBACK_H + +#define MAILCORE_MCIMAPPROGRESSCALLBACK_H + +#ifdef __cplusplus + +#include + +namespace mailcore { + + class IMAPSession; + + class MAILCORE_EXPORT IMAPProgressCallback { + public: + virtual void bodyProgress(IMAPSession * session, unsigned int current, unsigned int maximum) {}; + virtual void itemsProgress(IMAPSession * session, unsigned int current, unsigned int maximum) {}; + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCIMAPQuotaOperation.h b/src/include/MailCore/MCIMAPQuotaOperation.h new file mode 100644 index 000000000..15a1c676a --- /dev/null +++ b/src/include/MailCore/MCIMAPQuotaOperation.h @@ -0,0 +1,40 @@ +// +// MCIMAPQuotaOperation.h +// mailcore2 +// +// Created by Petro Korenev on 8/2/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPQuotaOperation_H + +#define MAILCORE_MCIMAPQuotaOperation_H + +#include "MCIMAPOperation.h" + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT IMAPQuotaOperation : public IMAPOperation { + public: + IMAPQuotaOperation(); + virtual ~IMAPQuotaOperation(); + + // Result. + virtual uint32_t limit(); + virtual uint32_t usage(); + + public: // subclass behavior + virtual void main(); + + private: + uint32_t mLimit; + uint32_t mUsage; + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCIMAPRenameFolderOperation.h b/src/include/MailCore/MCIMAPRenameFolderOperation.h new file mode 100644 index 000000000..63282564c --- /dev/null +++ b/src/include/MailCore/MCIMAPRenameFolderOperation.h @@ -0,0 +1,39 @@ +// +// MCIMAPRenameFolderOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPRENAMEFOLDEROPERATION_H + +#define MAILCORE_MCIMAPRENAMEFOLDEROPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT IMAPRenameFolderOperation : public IMAPOperation { + public: + IMAPRenameFolderOperation(); + ~IMAPRenameFolderOperation(); + + virtual void setOtherName(String * otherName); + virtual String * otherName(); + + public: // subclass behavior + virtual void main(); + + private: + String * mOtherName; + + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCIMAPSearchExpression.h b/src/include/MailCore/MCIMAPSearchExpression.h new file mode 100644 index 000000000..182f30138 --- /dev/null +++ b/src/include/MailCore/MCIMAPSearchExpression.h @@ -0,0 +1,88 @@ +#ifndef MAILCORE_MCIMAPSEARCHEXPRESSION_H + +#define MAILCORE_MCIMAPSEARCHEXPRESSION_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT IMAPSearchExpression : public Object { + public: + IMAPSearchExpression(); + virtual ~IMAPSearchExpression(); + + virtual IMAPSearchKind kind(); + virtual String * header(); + virtual String * value(); + virtual uint64_t longNumber(); + virtual time_t date(); + virtual IndexSet * uids(); + virtual IndexSet * numbers(); + + + virtual IMAPSearchExpression * leftExpression(); + virtual IMAPSearchExpression * rightExpression(); + + static IMAPSearchExpression * searchAll(); + static IMAPSearchExpression * searchFrom(String * value); + static IMAPSearchExpression * searchTo(String *value); + static IMAPSearchExpression * searchCc(String *value); + static IMAPSearchExpression * searchBcc(String *value); + static IMAPSearchExpression * searchRecipient(String * value); + static IMAPSearchExpression * searchSubject(String * value); + static IMAPSearchExpression * searchContent(String * value); + static IMAPSearchExpression * searchBody(String * value); + static IMAPSearchExpression * searchHeader(String * header, String * value); + static IMAPSearchExpression * searchUIDs(IndexSet * uids); + static IMAPSearchExpression * searchNumbers(IndexSet * numbers); + static IMAPSearchExpression * searchRead(); + static IMAPSearchExpression * searchUnread(); + static IMAPSearchExpression * searchFlagged(); + static IMAPSearchExpression * searchUnflagged(); + static IMAPSearchExpression * searchAnswered(); + static IMAPSearchExpression * searchUnanswered(); + static IMAPSearchExpression * searchDraft(); + static IMAPSearchExpression * searchUndraft(); + static IMAPSearchExpression * searchDeleted(); + static IMAPSearchExpression * searchSpam(); + static IMAPSearchExpression * searchBeforeDate(time_t date); + static IMAPSearchExpression * searchOnDate(time_t date); + static IMAPSearchExpression * searchSinceDate(time_t date); + static IMAPSearchExpression * searchBeforeReceivedDate(time_t date); + static IMAPSearchExpression * searchOnReceivedDate(time_t date); + static IMAPSearchExpression * searchSinceReceivedDate(time_t date); + static IMAPSearchExpression * searchSizeLarger(uint32_t size); + static IMAPSearchExpression * searchSizeSmaller(uint32_t size); + static IMAPSearchExpression * searchGmailThreadID(uint64_t number); + static IMAPSearchExpression * searchGmailMessageID(uint64_t number); + static IMAPSearchExpression * searchGmailRaw(String * expr); + static IMAPSearchExpression * searchAnd(IMAPSearchExpression * left, IMAPSearchExpression * right); + static IMAPSearchExpression * searchOr(IMAPSearchExpression * left, IMAPSearchExpression * right); + static IMAPSearchExpression * searchNot(IMAPSearchExpression * notExpr); + + + public: // subclass behavior + IMAPSearchExpression(IMAPSearchExpression * other); + virtual String * description(); + virtual Object * copy(); + + private: + IMAPSearchKind mKind; + String * mHeader; + String * mValue; + uint64_t mLongNumber; + IndexSet * mUids; + IndexSet * mNumbers; + IMAPSearchExpression * mLeftExpression; + IMAPSearchExpression * mRightExpression; + void init(); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCIMAPSearchOperation.h b/src/include/MailCore/MCIMAPSearchOperation.h new file mode 100644 index 000000000..bb9cef081 --- /dev/null +++ b/src/include/MailCore/MCIMAPSearchOperation.h @@ -0,0 +1,54 @@ +// +// IMAPSearchOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPSEARCHOPERATION_H + +#define MAILCORE_MCIMAPSEARCHOPERATION_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class IMAPSearchExpression; + + class MAILCORE_EXPORT IMAPSearchOperation : public IMAPOperation { + public: + IMAPSearchOperation(); + virtual ~IMAPSearchOperation(); + + virtual void setSearchKind(IMAPSearchKind kind); + virtual IMAPSearchKind searchKind(); + + virtual void setSearchString(String * searchString); + virtual String * searchString(); + + virtual void setSearchExpression(IMAPSearchExpression * expression); + virtual IMAPSearchExpression * searchExpression(); + + // Result. + virtual IndexSet * uids(); + + public: // subclass behavior + virtual void main(); + + private: + IMAPSearchKind mKind; + String * mSearchString; + IMAPSearchExpression * mExpression; + IndexSet * mUids; + + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCIMAPSession.h b/src/include/MailCore/MCIMAPSession.h new file mode 100644 index 000000000..be1fe6004 --- /dev/null +++ b/src/include/MailCore/MCIMAPSession.h @@ -0,0 +1,348 @@ +#ifndef MAILCORE_MCIMAPSESSION_H + +#define MAILCORE_MCIMAPSESSION_H + +#include +#include +#include + +#ifdef __cplusplus + +typedef struct mailimap_fetch_type mailimap_fetch_type; + +namespace mailcore { + + extern String * IMAPNamespacePersonal; + extern String * IMAPNamespaceOther; + extern String * IMAPNamespaceShared; + + class IMAPNamespace; + class IMAPSearchExpression; + class IMAPFolder; + class IMAPProgressCallback; + class IMAPSyncResult; + class IMAPFolderStatus; + class IMAPIdentity; + + class MAILCORE_EXPORT IMAPSession : public Object { + public: + IMAPSession(); + virtual ~IMAPSession(); + + virtual void setHostname(String * hostname); + virtual String * hostname(); + + virtual void setPort(unsigned int port); + virtual unsigned int port(); + + virtual void setUsername(String * username); + virtual String * username(); + + virtual void setPassword(String * password); + virtual String * password(); + + // To authenticate using OAuth2, username and oauth2token should be set. + // auth type to use is AuthTypeOAuth2. + virtual void setOAuth2Token(String * token); + virtual String * OAuth2Token(); + + virtual void setAuthType(AuthType authType); + virtual AuthType authType(); + + virtual void setConnectionType(ConnectionType connectionType); + virtual ConnectionType connectionType(); + + virtual void setTimeout(time_t timeout); + virtual time_t timeout(); + + virtual void setCheckCertificateEnabled(bool enabled); + virtual bool isCheckCertificateEnabled(); + + virtual void setVoIPEnabled(bool enabled); + virtual bool isVoIPEnabled(); + + virtual void setQResyncCompatible(bool compatible); + virtual bool isQResyncCompatible(); + + // Needed for fetchSubscribedFolders() and fetchAllFolders(). + virtual void setDefaultNamespace(IMAPNamespace * ns); + virtual IMAPNamespace * defaultNamespace(); + + virtual IMAPIdentity * serverIdentity(); + virtual IMAPIdentity * clientIdentity(); + virtual void setClientIdentity(IMAPIdentity * identity); + + virtual void select(String * folder, ErrorCode * pError); + virtual IMAPFolderStatus * folderStatus(String * folder, ErrorCode * pError); + + virtual Array * /* IMAPFolder */ fetchSubscribedFolders(ErrorCode * pError); + virtual Array * /* IMAPFolder */ fetchAllFolders(ErrorCode * pError); // will use xlist if available + + virtual void renameFolder(String * folder, String * otherName, ErrorCode * pError); + virtual void deleteFolder(String * folder, ErrorCode * pError); + virtual void createFolder(String * folder, ErrorCode * pError); + + virtual void subscribeFolder(String * folder, ErrorCode * pError); + virtual void unsubscribeFolder(String * folder, ErrorCode * pError); + + virtual void appendMessage(String * folder, Data * messageData, MessageFlag flags, + IMAPProgressCallback * progressCallback, uint32_t * createdUID, ErrorCode * pError); + virtual void appendMessageWithCustomFlags(String * folder, Data * messageData, MessageFlag flags, Array * customFlags, + IMAPProgressCallback * progressCallback, uint32_t * createdUID, ErrorCode * pError); + virtual void appendMessageWithCustomFlagsAndDate(String * folder, Data * messageData, MessageFlag flags, Array * customFlags, time_t date, + IMAPProgressCallback * progressCallback, uint32_t * createdUID, ErrorCode * pError); + virtual void appendMessageWithCustomFlagsAndDate(String * folder, String * messagePath, MessageFlag flags, Array * customFlags, time_t date, + IMAPProgressCallback * progressCallback, uint32_t * createdUID, ErrorCode * pError); + + virtual void copyMessages(String * folder, IndexSet * uidSet, String * destFolder, + HashMap ** pUidMapping, ErrorCode * pError); + + virtual void moveMessages(String * folder, IndexSet * uidSet, String * destFolder, + HashMap ** pUidMapping, ErrorCode * pError); + + virtual void expunge(String * folder, ErrorCode * pError); + + virtual Array * /* IMAPMessage */ fetchMessagesByUID(String * folder, IMAPMessagesRequestKind requestKind, + IndexSet * uids, IMAPProgressCallback * progressCallback, + ErrorCode * pError); + virtual Array * /* IMAPMessage */ fetchMessagesByUIDWithExtraHeaders(String * folder, + IMAPMessagesRequestKind requestKind, + IndexSet * uids, + IMAPProgressCallback * progressCallback, + Array * extraHeaders, ErrorCode * pError); + virtual Array * /* IMAPMessage */ fetchMessagesByNumber(String * folder, IMAPMessagesRequestKind requestKind, + IndexSet * numbers, IMAPProgressCallback * progressCallback, + ErrorCode * pError); + virtual Array * /* IMAPMessage */ fetchMessagesByNumberWithExtraHeaders(String * folder, + IMAPMessagesRequestKind requestKind, + IndexSet * numbers, + IMAPProgressCallback * progressCallback, + Array * extraHeaders, ErrorCode * pError); + virtual String * customCommand(String * command, ErrorCode * pError); + + virtual Data * fetchMessageByUID(String * folder, uint32_t uid, + IMAPProgressCallback * progressCallback, ErrorCode * pError); + virtual Data * fetchMessageByNumber(String * folder, uint32_t number, + IMAPProgressCallback * progressCallback, ErrorCode * pError); + virtual Data * fetchMessageAttachmentByUID(String * folder, uint32_t uid, String * partID, + Encoding encoding, IMAPProgressCallback * progressCallback, ErrorCode * pError); + + virtual void fetchMessageAttachmentToFileByChunksByUID(String * folder, uint32_t uid, String * partID, + uint32_t estimatedSize, Encoding encoding, + String * outputFile, uint32_t chunkSize, + IMAPProgressCallback * progressCallback, ErrorCode * pError); + virtual void fetchMessageAttachmentToFileByUID(String * folder, uint32_t uid, String * partID, + Encoding encoding, String * outputFile, + IMAPProgressCallback * progressCallback, ErrorCode * pError); + + virtual Data * fetchMessageAttachmentByNumber(String * folder, uint32_t number, String * partID, + Encoding encoding, IMAPProgressCallback * progressCallback, ErrorCode * pError); + virtual HashMap * fetchMessageNumberUIDMapping(String * folder, uint32_t fromUID, uint32_t toUID, + ErrorCode * pError); + + /* When CONDSTORE or QRESYNC is available */ + virtual IMAPSyncResult * syncMessagesByUID(String * folder, IMAPMessagesRequestKind requestKind, + IndexSet * uids, uint64_t modseq, + IMAPProgressCallback * progressCallback, ErrorCode * pError); + /* Same as syncMessagesByUID, allows for extra headers */ + virtual IMAPSyncResult * syncMessagesByUIDWithExtraHeaders(String * folder, IMAPMessagesRequestKind requestKind, + IndexSet * uids, uint64_t modseq, + IMAPProgressCallback * progressCallback, + Array * extraHeaders, ErrorCode * pError); + + virtual void storeFlagsByUID(String * folder, IndexSet * uids, IMAPStoreFlagsRequestKind kind, MessageFlag flags, ErrorCode * pError); + virtual void storeFlagsAndCustomFlagsByUID(String * folder, IndexSet * uids, IMAPStoreFlagsRequestKind kind, MessageFlag flags, Array * customFlags, ErrorCode * pError); + virtual void storeFlagsByNumber(String * folder, IndexSet * numbers, IMAPStoreFlagsRequestKind kind, MessageFlag flags, ErrorCode * pError); + virtual void storeFlagsAndCustomFlagsByNumber(String * folder, IndexSet * numbers, IMAPStoreFlagsRequestKind kind, MessageFlag flags, Array * customFlags, ErrorCode * pError); + + virtual void storeLabelsByUID(String * folder, IndexSet * uids, IMAPStoreFlagsRequestKind kind, Array * labels, ErrorCode * pError); + virtual void storeLabelsByNumber(String * folder, IndexSet * numbers, IMAPStoreFlagsRequestKind kind, Array * labels, ErrorCode * pError); + + virtual IndexSet * search(String * folder, IMAPSearchKind kind, String * searchString, ErrorCode * pError); + virtual IndexSet * search(String * folder, IMAPSearchExpression * expression, ErrorCode * pError); + virtual void getQuota(uint32_t *usage, uint32_t *limit, ErrorCode * pError); + + virtual bool setupIdle(); + virtual void idle(String * folder, uint32_t lastKnownUID, ErrorCode * pError); + virtual void interruptIdle(); + virtual void unsetupIdle(); + + virtual void connect(ErrorCode * pError); + virtual void disconnect(); + + /** Aborts the command currently running on this session by cancelling its stream: the + blocked read returns immediately instead of waiting out the socket timeout. Safe to call + from another thread while the session's thread is blocked in a command. + Teardown only: the cancelled state of a stream is never reset, so the session is unusable + afterwards and must be disconnected. A later connect() builds a fresh stream. */ + virtual void interruptCurrentCommand(); + + virtual void noop(ErrorCode * pError); + + virtual HashMap * fetchNamespace(ErrorCode * pError); + + virtual void login(ErrorCode * pError); + + virtual IMAPIdentity * identity(IMAPIdentity * clientIdentity, ErrorCode * pError); + + virtual IndexSet * capability(ErrorCode * pError); + + virtual void enableCompression(ErrorCode * pError); + + virtual uint32_t uidValidity(); + virtual uint32_t uidNext(); + virtual uint64_t modSequenceValue(); + virtual unsigned int lastFolderMessageCount(); + virtual uint32_t firstUnseenUid(); + + virtual bool isIdleEnabled(); + virtual bool isXListEnabled(); + virtual bool isCondstoreEnabled(); + virtual bool isQResyncEnabled(); + virtual bool isIdentityEnabled(); + virtual bool isXOAuthEnabled(); + virtual bool isNamespaceEnabled(); + virtual bool isCompressionEnabled(); + virtual bool allowsNewPermanentFlags(); + + virtual String * gmailUserDisplayName() DEPRECATED_ATTRIBUTE; + + virtual void setConnectionLogger(ConnectionLogger * logger); + virtual ConnectionLogger * connectionLogger(); + + /** HTML rendering of the body of the message to be displayed in a web view.*/ + virtual String * htmlRendering(IMAPMessage * message, String * folder, ErrorCode * pError); + + /** HTML rendering of the body of the message.*/ + virtual String * htmlBodyRendering(IMAPMessage * message, String * folder, ErrorCode * pError); + + /** Text rendering of the message.*/ + virtual String * plainTextRendering(IMAPMessage * message, String * folder, ErrorCode * pError); + + /** Text rendering of the body of the message. All end of line will be removed and white spaces cleaned up if requested. + This method can be used to generate the summary of the message.*/ + virtual String * plainTextBodyRendering(IMAPMessage * message, String * folder, bool stripWhitespace, ErrorCode * pError); + + /** Enable automatic query of the capabilities of the IMAP server when set to true. */ + virtual void setAutomaticConfigurationEnabled(bool enabled); + + /** Check if the automatic query of the capabilities of the IMAP server is enabled. */ + virtual bool isAutomaticConfigurationEnabled(); + + virtual String * loginResponse(); + /** Filled by unparsed protocol data in case of ParseError (only for login for now). */ + virtual Data * unparsedResponseData(); + + public: // private + virtual void loginIfNeeded(ErrorCode * pError); + virtual void connectIfNeeded(ErrorCode * pError); + virtual void selectIfNeeded(String * folder, ErrorCode * pError); + virtual bool isDisconnected(); + virtual bool isAutomaticConfigurationDone(); + virtual void resetAutomaticConfigurationDone(); + virtual void applyCapabilities(IndexSet * capabilities); + virtual IndexSet * storedCapabilities(); + virtual void lockConnectionLogger(); + virtual void unlockConnectionLogger(); + virtual ConnectionLogger * connectionLoggerNoLock(); + + private: + String * mHostname; + unsigned int mPort; + String * mUsername; + String * mPassword; + String * mOAuth2Token; + AuthType mAuthType; + ConnectionType mConnectionType; + bool mCheckCertificateEnabled; + bool mVoIPEnabled; + char mDelimiter; + IMAPNamespace * mDefaultNamespace; + IMAPIdentity * mServerIdentity; + IMAPIdentity * mClientIdentity; + time_t mTimeout; + + bool mBodyProgressEnabled; + bool mIdleEnabled; + bool mXListEnabled; + bool mCondstoreEnabled; + bool mQResyncEnabled; + bool mXYMHighestModseqEnabled; + bool mIdentityEnabled; + bool mXOauth2Enabled; + bool mNamespaceEnabled; + bool mCompressionEnabled; + bool mIsGmail; + bool mAllowsNewPermanentFlags; + String * mWelcomeString; + bool mNeedsMboxMailWorkaround; + uint32_t mUIDValidity; + uint32_t mUIDNext; + uint64_t mModSequenceValue; + unsigned int mFolderMsgCount; + uint32_t mFirstUnseenUid; + bool mYahooServer; + bool mRamblerRuServer; + bool mHermesServer; + bool mQipServer; + bool mOutlookServer; + bool mIdeaImapServer; + bool mQResyncCompatible; + + unsigned int mLastFetchedSequenceNumber; + String * mCurrentFolder; + MCB_LOCK_TYPE mIdleLock; + int mState; + mailimap * mImap; + IMAPProgressCallback * mProgressCallback; + unsigned int mProgressItemsCount; + ConnectionLogger * mConnectionLogger; + MCB_LOCK_TYPE mConnectionLoggerLock; + bool mAutomaticConfigurationEnabled; + bool mAutomaticConfigurationDone; + bool mShouldDisconnect; + + String * mLoginResponse; + String * mGmailUserDisplayName; + Data * mUnparsedResponseData; + + void init(); + void bodyProgress(unsigned int current, unsigned int maximum); + void itemsProgress(unsigned int current, unsigned int maximum); + bool checkCertificate(); + static void body_progress(size_t current, size_t maximum, void * context); + static void items_progress(size_t current, size_t maximum, void * context); + void setup(); + void unsetup(); + char fetchDelimiterIfNeeded(char defaultDelimiter, ErrorCode * pError); + IMAPSyncResult * fetchMessages(String * folder, IMAPMessagesRequestKind requestKind, + bool fetchByUID, struct mailimap_set * imapset, + IndexSet * uidsFilter, IndexSet * numbersFilter, + uint64_t modseq, + HashMap * mapping, IMAPProgressCallback * progressCallback, + Array * extraHeaders, ErrorCode * pError); + void capabilitySetWithSessionState(IndexSet * capabilities); + bool enableFeature(String * feature); + void enableFeatures(); + Data * fetchMessage(String * folder, bool identifier_is_uid, uint32_t identifier, + IMAPProgressCallback * progressCallback, ErrorCode * pError); + void storeFlagsAndCustomFlags(String * folder, bool identifier_is_uid, IndexSet * identifiers, + IMAPStoreFlagsRequestKind kind, MessageFlag flags, Array * customFlags, ErrorCode * pError); + Data * fetchMessageAttachment(String * folder, bool identifier_is_uid, + uint32_t identifier, String * partID, + Encoding encoding, IMAPProgressCallback * progressCallback, ErrorCode * pError); + // in case of wholePart is false, receives range [offset, length] + Data * fetchNonDecodedMessageAttachment(String * folder, bool identifier_is_uid, + uint32_t identifier, String * partID, + bool wholePart, uint32_t offset, uint32_t length, + Encoding encoding, IMAPProgressCallback * progressCallback, ErrorCode * pError); + void storeLabels(String * folder, bool identifier_is_uid, IndexSet * identifiers, IMAPStoreFlagsRequestKind kind, Array * labels, ErrorCode * pError); + int fetch_rfc822(mailimap * session, bool identifier_is_uid, uint32_t identifier, char ** result, size_t * result_len); + int fetch_imap(mailimap * imap, bool identifier_is_uid, uint32_t identifier, mailimap_fetch_type * fetch_type, char ** result, size_t * result_len); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCIMAPStoreFlagsOperation.h b/src/include/MailCore/MCIMAPStoreFlagsOperation.h new file mode 100644 index 000000000..1325f8bc0 --- /dev/null +++ b/src/include/MailCore/MCIMAPStoreFlagsOperation.h @@ -0,0 +1,54 @@ +// +// MCIMAPStoreFlagsOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPSTOREFLAGSOPERATION_H + +#define MAILCORE_MCIMAPSTOREFLAGSOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT IMAPStoreFlagsOperation : public IMAPOperation { + public: + IMAPStoreFlagsOperation(); + virtual ~IMAPStoreFlagsOperation(); + + virtual void setUids(IndexSet * uids); + virtual IndexSet * uids(); + + virtual void setNumbers(IndexSet * numbers); + virtual IndexSet * numbers(); + + virtual void setKind(IMAPStoreFlagsRequestKind kind); + virtual IMAPStoreFlagsRequestKind kind(); + + virtual void setFlags(MessageFlag flags); + virtual MessageFlag flags(); + + virtual void setCustomFlags(Array * customFlags); + virtual Array * customFlags(); + + public: // subclass behavior + virtual void main(); + + private: + IndexSet * mUids; + IndexSet * mNumbers; + IMAPStoreFlagsRequestKind mKind; + MessageFlag mFlags; + Array * mCustomFlags; + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCIMAPStoreLabelsOperation.h b/src/include/MailCore/MCIMAPStoreLabelsOperation.h new file mode 100644 index 000000000..7ccae85b6 --- /dev/null +++ b/src/include/MailCore/MCIMAPStoreLabelsOperation.h @@ -0,0 +1,51 @@ +// +// MCIMAPStoreLabelsOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPSTORELABELSOPERATION_H + +#define MAILCORE_MCIMAPSTORELABELSOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT IMAPStoreLabelsOperation : public IMAPOperation { + public: + IMAPStoreLabelsOperation(); + virtual ~IMAPStoreLabelsOperation(); + + virtual void setUids(IndexSet * uids); + virtual IndexSet * uids(); + + virtual void setNumbers(IndexSet * numbers); + virtual IndexSet * numbers(); + + virtual void setKind(IMAPStoreFlagsRequestKind kind); + virtual IMAPStoreFlagsRequestKind kind(); + + virtual void setLabels(Array * /* String */ labels); + virtual Array * /* String */ labels(); + + public: // subclass behavior + virtual void main(); + + private: + IndexSet * mUids; + IndexSet * mNumbers; + IMAPStoreFlagsRequestKind mKind; + Array * /* String */ mLabels; + + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCIMAPSubscribeFolderOperation.h b/src/include/MailCore/MCIMAPSubscribeFolderOperation.h new file mode 100644 index 000000000..00db56fae --- /dev/null +++ b/src/include/MailCore/MCIMAPSubscribeFolderOperation.h @@ -0,0 +1,39 @@ +// +// MCIMAPSubscribeFolderOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPSUBSCRIBEFOLDEROPERATION_H + +#define MAILCORE_MCIMAPSUBSCRIBEFOLDEROPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT IMAPSubscribeFolderOperation : public IMAPOperation { + public: + IMAPSubscribeFolderOperation(); + virtual ~IMAPSubscribeFolderOperation(); + + virtual void setUnsubscribeEnabled(bool enabled); + virtual bool isUnsubscribeEnabled(); + + public: // subclass behavior + virtual void main(); + + private: + bool mUnsubscribeEnabled; + + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCIMAPSyncResult.h b/src/include/MailCore/MCIMAPSyncResult.h new file mode 100644 index 000000000..683ca6cc4 --- /dev/null +++ b/src/include/MailCore/MCIMAPSyncResult.h @@ -0,0 +1,39 @@ +// +// MCIMAPSyncResult.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/3/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPSYNCRESULT_H + +#define MAILCORE_MCIMAPSYNCRESULT_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT IMAPSyncResult : public Object { + public: + IMAPSyncResult(); + virtual ~IMAPSyncResult(); + + virtual void setModifiedOrAddedMessages(Array * /* IMAPMessage */ messages); + virtual Array * /* IMAPMessage */ modifiedOrAddedMessages(); + + virtual void setVanishedMessages(IndexSet * vanishedMessages); + virtual IndexSet * vanishedMessages(); + + private: + Array * /* IMAPMessage */ mModifiedOrAddedMessages; + IndexSet * mVanishedMessages; + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCIndexSet.h b/src/include/MailCore/MCIndexSet.h new file mode 100644 index 000000000..6c94c4882 --- /dev/null +++ b/src/include/MailCore/MCIndexSet.h @@ -0,0 +1,77 @@ +// +// MCIndexSet.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/4/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCINDEXSET_H + +#define MAILCORE_MCINDEXSET_H + +#include +#include + +#ifdef __cplusplus + +#include + +namespace mailcore { + + class MAILCORE_EXPORT IndexSet : public Object { + public: + IndexSet(); + virtual ~IndexSet(); + + static IndexSet * indexSet(); + static IndexSet * indexSetWithRange(Range range); + static IndexSet * indexSetWithIndex(uint64_t idx); + + virtual uint64_t count(); + virtual void addIndex(uint64_t idx); + virtual void removeIndex(uint64_t idx); + virtual bool containsIndex(uint64_t idx); + + virtual void addRange(Range range); + virtual void removeRange(Range range); + virtual void intersectsRange(Range range); + + virtual void addIndexSet(IndexSet * indexSet); + virtual void removeIndexSet(IndexSet * indexSet); + virtual void intersectsIndexSet(IndexSet * indexSet); + + virtual Range * allRanges(); + virtual unsigned int rangesCount(); + virtual void removeAllIndexes(); + + public: // subclass behavior + IndexSet(IndexSet * o); + virtual String * description(); + virtual Object * copy(); + virtual HashMap * serializable(); + virtual void importSerializable(HashMap * serializable); + virtual bool isEqual(Object * otherObject); + + private: + Range * mRanges; + unsigned int mCount; + unsigned int mAllocated; + void init(); + int rangeIndexForIndex(uint64_t idx); + int rangeIndexForIndexWithBounds(uint64_t idx, unsigned int left, unsigned int right); + void addRangeIndex(unsigned int rangeIndex); + void removeRangeIndex(unsigned int rangeIndex, unsigned int count); + int rightRangeIndexForIndex(uint64_t idx); + int rightRangeIndexForIndexWithBounds(uint64_t idx, unsigned int left, unsigned int right); + int leftRangeIndexForIndex(uint64_t idx); + int leftRangeIndexForIndexWithBounds(uint64_t idx, unsigned int left, unsigned int right); + void mergeRanges(unsigned int rangeIndex); + void tryToMergeAdjacentRanges(unsigned int rangeIndex); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCIterator.h b/src/include/MailCore/MCIterator.h new file mode 100644 index 000000000..a3e5b1c17 --- /dev/null +++ b/src/include/MailCore/MCIterator.h @@ -0,0 +1,189 @@ +// +// MCIterator.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 4/18/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_ITERATOR_H + +#define MAILCORE_ITERATOR_H + +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus + +#define mc_foreacharray(type, __variable, __array) \ +type * __variable; \ +mailcore::ArrayIterator __variable##__iterator = mailcore::ArrayIteratorInit(__array); \ +for (; NULL != (__variable = (type *) mailcore::ArrayIteratorNext(&__variable##__iterator)); ) + +#define mc_foreacharrayIndex(__index, type, __variable, __array) \ +type * __variable; \ +mailcore::ArrayIterator __variable##__iterator = mailcore::ArrayIteratorInit(__array); \ +for (unsigned int __index = 0; NULL != (__variable = (type *) mailcore::ArrayIteratorNext(&__variable##__iterator)); __index++) + +#define mc_foreachhashmapKey(keyType, __key, __hashmap) \ +keyType * __key; \ +HashMapIterator __key##__iterator = HashMapIteratorInit(__hashmap, true, false); \ +while (HashMapIteratorRun(&__key##__iterator)) \ +while (HashMapIteratorNext(&__key##__iterator, (Object **) &__key, (Object **) NULL)) + +#define mc_foreachhashmapValue(valueType, __value, __hashmap) \ +valueType * __value; \ +HashMapIterator __value##__iterator = HashMapIteratorInit(__hashmap, false, true); \ +while (HashMapIteratorRun(&__value##__iterator)) \ +while (HashMapIteratorNext(&__value##__iterator, (Object **) NULL, (Object **) &__value)) + +#define mc_foreachhashmapKeyAndValue(keyType, __key, valueType, __value, __hashmap) \ +keyType * __key; \ +valueType * __value; \ +HashMapIterator __key##__value##__iterator = HashMapIteratorInit(__hashmap, true, true); \ +while (HashMapIteratorRun(&__key##__value##__iterator)) \ +while (HashMapIteratorNext(&__key##__value##__iterator, (Object **) &__key, (Object **) &__value)) + +#define mc_foreachindexset(__variable, __indexset) \ +int64_t __variable; \ +mailcore::IndexSetIterator __variable##__iterator = mailcore::IndexSetIteratorInit(__indexset); \ +for (; (__variable = IndexSetIteratorValue(&__variable##__iterator)), IndexSetIteratorIsValid(&__variable##__iterator) ; mailcore::IndexSetIteratorNext(&__variable##__iterator)) + +namespace mailcore { + + struct IndexSetIterator { + unsigned int rangeIndex; + unsigned int index; + Range * currentRange; + IndexSet * indexSet; + }; + + static inline IndexSetIterator IndexSetIteratorInit(IndexSet * indexSet) + { + IndexSetIterator iterator = { 0, 0, NULL, indexSet }; + if (indexSet->rangesCount() >= 1) { + iterator.currentRange = &indexSet->allRanges()[0]; + } + return iterator; + } + + static inline bool IndexSetIteratorIsValid(IndexSetIterator * iterator) + { + return iterator->currentRange != NULL; + } + + static inline int64_t IndexSetIteratorValue(IndexSetIterator * iterator) + { + return iterator->currentRange == NULL ? -1 : iterator->currentRange->location + iterator->index; + } + + static inline bool IndexSetIteratorNext(IndexSetIterator * iterator) + { + iterator->index ++; + if (iterator->index > iterator->currentRange->length) { + // switch to an other range + iterator->index = 0; + iterator->rangeIndex ++; + if (iterator->rangeIndex >= iterator->indexSet->rangesCount()) { + iterator->currentRange = NULL; + return false; + } + else { + iterator->currentRange = &iterator->indexSet->allRanges()[iterator->rangeIndex]; + return true; + } + } + else { + return true; + } + } + + struct ArrayIterator { + unsigned index; + unsigned count; + Array * array; + }; + + static inline ArrayIterator ArrayIteratorInit(Array * array) + { + ArrayIterator iterator = { 0, array != NULL ? array->count() : 0, array }; + return iterator; + } + + static inline Object * ArrayIteratorNext(ArrayIterator * iterator) + { + if (iterator->index >= iterator->count) { + return NULL; + } + + Object * result = iterator->array->objectAtIndex(iterator->index); + ++ iterator->index; + return result; + } + + + struct HashMapIterator { + bool cleanup; + unsigned index; + unsigned count; + Array * keys; + Array * values; + }; + + static inline HashMapIterator HashMapIteratorInit(HashMap * hashmap, bool useKeys, bool useValues) + { + AutoreleasePool * pool = new AutoreleasePool(); + Array * keys = useKeys ? (hashmap != NULL ? hashmap->allKeys() : NULL) : NULL; + Array * values = useValues ? (hashmap != NULL ? hashmap->allValues() : NULL) : NULL; + if (keys != NULL) { + keys->retain(); + } + if (values != NULL) { + values->retain(); + } + HashMapIterator iterator = { false, 0, hashmap != NULL ? hashmap->count() : 0, keys, values }; + pool->release(); + + return iterator; + } + + static inline bool HashMapIteratorNext(HashMapIterator * iterator, Object ** keyp, Object ** valuep) + { + if (iterator->index >= iterator->count) { + return false; + } + + if (keyp != NULL) { + MCAssert(iterator->keys != NULL); + * keyp = iterator->keys->objectAtIndex(iterator->index); + } + if (valuep != NULL) { + MCAssert(iterator->values != NULL); + * valuep = iterator->values->objectAtIndex(iterator->index); + } + iterator->index ++; + return true; + } + + + static inline bool HashMapIteratorRun(HashMapIterator * iterator) + { + if (!iterator->cleanup) { + iterator->cleanup = true; + return true; + } else { + MC_SAFE_RELEASE(iterator->keys); + MC_SAFE_RELEASE(iterator->values); + return false; + } + } + +}; + +#endif + +#endif diff --git a/src/include/MailCore/MCJSON.h b/src/include/MailCore/MCJSON.h new file mode 100644 index 000000000..f000dc2de --- /dev/null +++ b/src/include/MailCore/MCJSON.h @@ -0,0 +1,38 @@ +// +// MCJSON.h +// hermes +// +// Created by DINH Viêt Hoà on 4/8/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCJSON_H + +#define MAILCORE_MCJSON_H + +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class Null; + + class MAILCORE_EXPORT JSON { + public: + static String * objectToJSONString(Object * object); + static Data * objectToJSONData(Object * object); + static Object * objectFromJSONString(String * json); + static Object * objectFromJSONData(Data * json); + }; + +} + +#endif + +#endif /* defined(__hermes__MCJSON__) */ diff --git a/src/include/MailCore/MCLibetpan.h b/src/include/MailCore/MCLibetpan.h new file mode 100644 index 000000000..4e8f86c69 --- /dev/null +++ b/src/include/MailCore/MCLibetpan.h @@ -0,0 +1,28 @@ +// +// MCLibetpan.h +// mailcore2 +// +// Created by Hoa Dinh on 6/28/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCLIBETPAN_H + +#define MAILCORE_MCLIBETPAN_H + +#include +#include +#include + +#ifdef __cplusplus +namespace mailcore { + + MAILCORE_EXPORT time_t timestampFromDate(struct mailimf_date_time * date_time); + MAILCORE_EXPORT time_t timestampFromIMAPDate(struct mailimap_date_time * date_time); + MAILCORE_EXPORT struct mailimf_date_time * dateFromTimestamp(time_t timeval); + MAILCORE_EXPORT struct mailimap_date_time * imapDateFromTimestamp(time_t timeval); + MAILCORE_EXPORT time_t mkgmtime(struct tm * tmp); + +} +#endif +#endif diff --git a/src/include/MailCore/MCLibetpanTypes.h b/src/include/MailCore/MCLibetpanTypes.h new file mode 100644 index 000000000..fcb8e70ad --- /dev/null +++ b/src/include/MailCore/MCLibetpanTypes.h @@ -0,0 +1,46 @@ +// +// MCLibetpanTypes.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 4/7/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCLIBETPANTYPES_H + +#define MAILCORE_MCLIBETPANTYPES_H + +#ifdef __cplusplus +extern "C" { +#endif + struct mailimap_body_fields; + struct mailimap_body_ext_1part; + struct mailimf_address; + struct mailimf_mailbox; + struct mailimap_address; + struct mailmime; + struct mailmime_mechanism; + struct mailimap_namespace_item; + struct mailimap_namespace_info; + struct mailimap_body; + struct mailimap_body_fields; + struct mailimap_body_ext_1part; + struct mailimap_body_type_1part; + struct mailimap_body_type_basic; + struct mailimap_body_type_text; + struct mailimap_body_type_mpart; + struct mailimap_body_type_msg; + typedef struct mailimap mailimap; + struct mailimap_set; + struct mailimap_date_time; + struct mailimf_fields; + struct mailimap_envelope; + typedef struct mailpop3 mailpop3; + typedef struct mailsmtp mailsmtp; + typedef struct newsnntp newsnntp; + struct mailsem; +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/include/MailCore/MCLock.h b/src/include/MailCore/MCLock.h new file mode 100644 index 000000000..1e958edb2 --- /dev/null +++ b/src/include/MailCore/MCLock.h @@ -0,0 +1,42 @@ +// +// MCLock.h +// mailcore2 +// +// Created by Hoa V. DINH on 1/23/15. +// Copyright (c) 2015 MailCore. All rights reserved. +// + +#ifndef mailcore2_MCLock_h +#define mailcore2_MCLock_h + +#ifdef _MSC_VER + +#define WIN32_LEAN_AND_MEAN +#include + +#define MC_LOCK_TYPE SRWLOCK +#define MC_LOCK_INITIAL_VALUE SRWLOCK_INIT +#define MC_LOCK(l) AcquireSRWLockExclusive(l) +#define MC_UNLOCK(l) ReleaseSRWLockExclusive(l) + +#elif __APPLE__ + +#include + +#define MC_LOCK_TYPE os_unfair_lock +#define MC_LOCK_INITIAL_VALUE OS_UNFAIR_LOCK_INIT +#define MC_LOCK(l) os_unfair_lock_lock(l) +#define MC_UNLOCK(l) os_unfair_lock_unlock(l) + +#else + +#include + +#define MC_LOCK_TYPE pthread_mutex_t +#define MC_LOCK_INITIAL_VALUE PTHREAD_MUTEX_INITIALIZER +#define MC_LOCK(l) pthread_mutex_lock(l) +#define MC_UNLOCK(l) pthread_mutex_unlock(l) + +#endif + +#endif diff --git a/src/include/MailCore/MCLog.h b/src/include/MailCore/MCLog.h new file mode 100644 index 000000000..edebe4dc8 --- /dev/null +++ b/src/include/MailCore/MCLog.h @@ -0,0 +1,37 @@ +#ifndef MAILCORE_MCLOG_H + +#define MAILCORE_MCLOG_H + +#include +#include + +#define MCLog(...) MCLogInternal(NULL, __FILE__, __LINE__, 0, __VA_ARGS__) +#define MCLogStack(...) MCLogInternal(NULL, __FILE__, __LINE__, 1, __VA_ARGS__) + +MAILCORE_EXPORT +extern int MCLogEnabled; + +#ifndef __printflike +#define __printflike(a,b) +#endif + +#ifdef __cplusplus +extern "C" { +#endif + MAILCORE_EXPORT + void MCLogInternal(const char * user, + const char * filename, + unsigned int line, + int dumpStack, + const char * format, ...) __printflike(5, 6); + + typedef void (*MCLogger)(const char * filename, unsigned int line, const char * message); + + MAILCORE_EXPORT + void setMCLogger(MCLogger logger) CLANG_ANALYZER_NORETURN; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/include/MailCore/MCMD5.h b/src/include/MailCore/MCMD5.h new file mode 100644 index 000000000..b8cde2e9a --- /dev/null +++ b/src/include/MailCore/MCMD5.h @@ -0,0 +1,28 @@ +// +// MCMD5.h +// hermes +// +// Created by DINH Viêt Hoà on 4/11/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCMD5_H + +#define MAILCORE_MCMD5_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + MAILCORE_EXPORT + Data * md5Data(Data * data); + + MAILCORE_EXPORT + String * md5String(Data * data); +} + +#endif + +#endif diff --git a/src/include/MailCore/MCMXRecordResolverOperation.h b/src/include/MailCore/MCMXRecordResolverOperation.h new file mode 100644 index 000000000..7d8a6fc8f --- /dev/null +++ b/src/include/MailCore/MCMXRecordResolverOperation.h @@ -0,0 +1,41 @@ +// +// ResolveProviderUsingMXRecordAsync.h +// mailcore2 +// +// Created by Christopher Hockley on 29/01/15. +// Copyright (c) 2015 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCFETCHASYNCMXRECORD_H + +#define MAILCORE_MCFETCHASYNCMXRECORD_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT MXRecordResolverOperation : public Operation { + public: + MXRecordResolverOperation(); + virtual ~MXRecordResolverOperation(); + + virtual void setHostname(String * hostname); + virtual String * hostname(); + + virtual Array * mxRecords(); + + public: // subclass behavior + virtual void main(); + + private: + Array * mMXRecords; + String * mHostname; + }; +} + +#endif + +#endif diff --git a/src/include/MailCore/MCMailProvider.h b/src/include/MailCore/MCMailProvider.h new file mode 100644 index 000000000..e0801da5b --- /dev/null +++ b/src/include/MailCore/MCMailProvider.h @@ -0,0 +1,75 @@ +// +// MCMailProvider.h +// mailcore2 +// +// Created by Robert Widmann on 4/28/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCMAILPROVIDER_H + +#define MAILCORE_MCMAILPROVIDER_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class NetService; + + class MAILCORE_EXPORT MailProvider : public Object { + public: + static MailProvider * providerWithInfo(HashMap * info); + + MailProvider(); + virtual ~MailProvider(); + + virtual String * identifier(); + + virtual Array * /* NetService */ imapServices(); + virtual Array * /* NetService */ smtpServices(); + virtual Array * /* NetService */ popServices(); + + virtual bool matchEmail(String * email); + virtual bool matchMX(String * hostname); + + virtual String * sentMailFolderPath(); + virtual String * starredFolderPath(); + virtual String * allMailFolderPath(); + virtual String * trashFolderPath(); + virtual String * draftsFolderPath(); + virtual String * spamFolderPath(); + virtual String * importantFolderPath(); + + // Returns true if one of the folders above matches the given one. + virtual bool isMainFolder(String * folderPath, String * prefix); + + public: // subclass behavior + MailProvider(MailProvider * other); + virtual String * description(); + virtual Object * copy(); + + public: // private + virtual void setIdentifier(String * identifier); + virtual void fillWithInfo(HashMap * info); + + private: + String * mIdentifier; + Array * /* String */ mDomainMatch; + Array * /* String */ mDomainExclude; + Array * /* String */ mMxMatch; + Array * /* NetService */ mImapServices; + Array * /* NetService */ mSmtpServices; + Array * /* NetService */ mPopServices; + HashMap * mMailboxPaths; + + virtual bool matchDomain(String * match, String * domain); + void init(); + }; + +}; + +#endif + +#endif diff --git a/src/include/MailCore/MCMailProvidersManager.h b/src/include/MailCore/MCMailProvidersManager.h new file mode 100644 index 000000000..88723563d --- /dev/null +++ b/src/include/MailCore/MCMailProvidersManager.h @@ -0,0 +1,44 @@ +// +// MCMailProvidersManager.h +// mailcore2 +// +// Created by Robert Widmann on 4/28/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCMAILPROVIDERSMANAGER_H + +#define MAILCORE_MCMAILPROVIDERSMANAGER_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MailProvider; + + class MAILCORE_EXPORT MailProvidersManager : public Object { + public: + static MailProvidersManager * sharedManager(); + + virtual MailProvider * providerForEmail(String * email); + virtual MailProvider * providerForMX(String * hostname); + virtual MailProvider * providerForIdentifier(String * identifier); + + virtual void registerProvidersWithFilename(String * filename); + + private: + MailProvidersManager(); + ~MailProvidersManager(); + void registerProviders(HashMap * providers); + + HashMap * mProviders; + + void init(); + }; +} + +#endif + +#endif diff --git a/src/include/MailCore/MCMainThread.h b/src/include/MailCore/MCMainThread.h new file mode 100644 index 000000000..df246665a --- /dev/null +++ b/src/include/MailCore/MCMainThread.h @@ -0,0 +1,20 @@ +#ifndef MAILCORE_MCMAINTHREAD_H + +#define MAILCORE_MCMAINTHREAD_H + +#ifdef __cplusplus + +namespace mailcore { + void callOnMainThread(void (*)(void *), void * context); + void callOnMainThreadAndWait(void (*)(void *), void * context); + + // Returns a "call" object. + void * callAfterDelay(void (*)(void *), void * context, double time); + + // Pass the pointer returns by callAfterDelay() to cancel a delayed call. + void cancelDelayedCall(void * call); +} + +#endif + +#endif diff --git a/src/include/MailCore/MCMessageBuilder.h b/src/include/MailCore/MCMessageBuilder.h new file mode 100644 index 000000000..e88d4962e --- /dev/null +++ b/src/include/MailCore/MCMessageBuilder.h @@ -0,0 +1,83 @@ +#ifndef MAILCORE_MCMESSAGEBUILDER_H + +#define MAILCORE_MCMESSAGEBUILDER_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class Attachment; + class HTMLRendererTemplateCallback; + + class MAILCORE_EXPORT MessageBuilder : public AbstractMessage { + public: + MessageBuilder(); + virtual ~MessageBuilder(); + + virtual void setHTMLBody(String * htmlBody); + virtual String * htmlBody(); + + virtual void setTextBody(String * textBody); + virtual String * textBody(); + + virtual void setAttachments(Array * /* Attachment */ attachments); + virtual Array * /* Attachment */ attachments(); + virtual void addAttachment(Attachment * attachment); + + // attachments (usually images) that are included in HTML. + // a Content-ID should be assigned to these part to be able to reference + // them in the HTML using a cid: URL. + virtual void setRelatedAttachments(Array * /* Attachment */ attachments); + virtual Array * /* Attachment */ relatedAttachments(); + virtual void addRelatedAttachment(Attachment * attachment); + + // When boundary needs to be prefixed (to go through spam filters). + virtual void setBoundaryPrefix(String * boundaryPrefix); + virtual String * boundaryPrefix(); + + virtual Data * data(); + virtual Data * dataForEncryption(); + + // Store builded message to file. + virtual ErrorCode writeToFile(String * filename, bool useXAttachmentId); + + virtual String * htmlRendering(HTMLRendererTemplateCallback * htmlCallback = NULL); + virtual String * htmlBodyRendering(); + + virtual String * plainTextRendering(); + virtual String * plainTextBodyRendering(bool stripWhitespace); + + virtual Data * openPGPSignedMessageDataWithSignatureData(Data * signature); + virtual Data * openPGPEncryptedMessageDataWithEncryptedData(Data * encryptedData); + + public: // subclass behavior + MessageBuilder(MessageBuilder * other); + virtual String * description(); + virtual Object * copy(); + + public: // private + virtual String * nextBoundary(); + virtual void resetBoundaries(); + virtual void setBoundaries(Array * boundaries); + + private: + String * mHTMLBody; + String * mTextBody; + Array * /* Attachment */ mAttachments; + Array * /* Attachment */ mRelatedAttachments; + String * mBoundaryPrefix; + void init(); + Data * dataAndFilterBccAndForEncryption(bool filterBcc, bool forEncryption); + struct mailmime * mimeAndFilterBccAndForEncryption(bool filterBcc, bool forEncryption); + Array * mBoundaries; + unsigned int mCurrentBoundaryIndex; + }; + +}; + +#endif + +#endif diff --git a/src/include/MailCore/MCMessageConstants.h b/src/include/MailCore/MCMessageConstants.h new file mode 100644 index 000000000..5078de773 --- /dev/null +++ b/src/include/MailCore/MCMessageConstants.h @@ -0,0 +1,287 @@ +#ifndef MAILCORE_MCMESSAGECONSTANTS_H + +#define MAILCORE_MCMESSAGECONSTANTS_H + +#ifdef __cplusplus + +namespace mailcore { + + enum ConnectionType { + ConnectionTypeClear = 1 << 0, + ConnectionTypeStartTLS = 1 << 1, + ConnectionTypeTLS = 1 << 2, + }; + + enum AuthType { + AuthTypeSASLNone = 0, + AuthTypeSASLCRAMMD5 = 1 << 0, + AuthTypeSASLPlain = 1 << 1, + AuthTypeSASLGSSAPI = 1 << 2, + AuthTypeSASLDIGESTMD5 = 1 << 3, + AuthTypeSASLLogin = 1 << 4, + AuthTypeSASLSRP = 1 << 5, + AuthTypeSASLNTLM = 1 << 6, + AuthTypeSASLKerberosV4 = 1 << 7, + AuthTypeXOAuth2 = 1 << 8, + AuthTypeXOAuth2Outlook = 1 << 9, + }; + + enum IMAPFolderFlag { + IMAPFolderFlagNone = 0, + IMAPFolderFlagMarked = 1 << 0, + IMAPFolderFlagUnmarked = 1 << 1, + IMAPFolderFlagNoSelect = 1 << 2, + IMAPFolderFlagNoInferiors = 1 << 3, + IMAPFolderFlagInbox = 1 << 4, + IMAPFolderFlagSentMail = 1 << 5, + IMAPFolderFlagStarred = 1 << 6, + IMAPFolderFlagAllMail = 1 << 7, + IMAPFolderFlagTrash = 1 << 8, + IMAPFolderFlagDrafts = 1 << 9, + IMAPFolderFlagSpam = 1 << 10, + IMAPFolderFlagImportant = 1 << 11, + IMAPFolderFlagArchive = 1 << 12, + IMAPFolderFlagAll = IMAPFolderFlagAllMail, + IMAPFolderFlagJunk = IMAPFolderFlagSpam, + IMAPFolderFlagFlagged = IMAPFolderFlagStarred, + IMAPFolderFlagFolderTypeMask = IMAPFolderFlagInbox | IMAPFolderFlagSentMail | IMAPFolderFlagStarred | IMAPFolderFlagAllMail | + IMAPFolderFlagTrash| IMAPFolderFlagDrafts | IMAPFolderFlagSpam | IMAPFolderFlagImportant | IMAPFolderFlagArchive, + }; + + enum MessageFlag { + MessageFlagNone = 0, + MessageFlagSeen = 1 << 0, + MessageFlagAnswered = 1 << 1, + MessageFlagFlagged = 1 << 2, + MessageFlagDeleted = 1 << 3, + MessageFlagDraft = 1 << 4, + MessageFlagMDNSent = 1 << 5, + MessageFlagForwarded = 1 << 6, + MessageFlagSubmitPending = 1 << 7, + MessageFlagSubmitted = 1 << 8, + MessageFlagMaskAll = MessageFlagSeen | MessageFlagAnswered | MessageFlagFlagged | + MessageFlagDeleted | MessageFlagDraft | MessageFlagMDNSent | MessageFlagForwarded | + MessageFlagSubmitPending | MessageFlagSubmitted, + } ; + + enum IMAPMessagesRequestKind { + IMAPMessagesRequestKindUid = 0, // This is the default and it's always fetched + IMAPMessagesRequestKindFlags = 1 << 0, + IMAPMessagesRequestKindHeaders = 1 << 1, + IMAPMessagesRequestKindStructure = 1 << 2, + IMAPMessagesRequestKindInternalDate = 1 << 3, + IMAPMessagesRequestKindFullHeaders = 1 << 4, + IMAPMessagesRequestKindHeaderSubject = 1 << 5, + IMAPMessagesRequestKindGmailLabels = 1 << 6, + IMAPMessagesRequestKindGmailMessageID = 1 << 7, + IMAPMessagesRequestKindGmailThreadID = 1 << 8, + IMAPMessagesRequestKindExtraHeaders = 1 << 9, + IMAPMessagesRequestKindSize = 1 << 10, + }; + + enum IMAPFetchRequestType { + IMAPFetchRequestTypeUID = 0, + IMAPFetchRequestTypeSequence = 1 + }; + + enum IMAPStoreFlagsRequestKind { + IMAPStoreFlagsRequestKindAdd, + IMAPStoreFlagsRequestKindRemove, + IMAPStoreFlagsRequestKindSet, + }; + + enum IMAPWorkaround { + IMAPWorkaroundGmail = 1 << 0, + IMAPWorkaroundYahoo = 1 << 1, + IMAPWorkaroundExchange2003 = 1 << 2, + }; + + enum IMAPCapability { + IMAPCapabilityACL, + IMAPCapabilityBinary, + IMAPCapabilityCatenate, + IMAPCapabilityChildren, + IMAPCapabilityCompressDeflate, + IMAPCapabilityCondstore, + IMAPCapabilityEnable, + IMAPCapabilityIdle, + IMAPCapabilityId, + IMAPCapabilityLiteralPlus, + IMAPCapabilityMove, + IMAPCapabilityMultiAppend, + IMAPCapabilityNamespace, + IMAPCapabilityQResync, + IMAPCapabilityQuota, + IMAPCapabilitySort, + IMAPCapabilityStartTLS, + IMAPCapabilityThreadOrderedSubject, + IMAPCapabilityThreadReferences, + IMAPCapabilityUIDPlus, + IMAPCapabilityUnselect, + IMAPCapabilityXList, + IMAPCapabilityAuthAnonymous, + IMAPCapabilityAuthCRAMMD5, + IMAPCapabilityAuthDigestMD5, + IMAPCapabilityAuthExternal, + IMAPCapabilityAuthGSSAPI, + IMAPCapabilityAuthKerberosV4, + IMAPCapabilityAuthLogin, + IMAPCapabilityAuthNTLM, + IMAPCapabilityAuthOTP, + IMAPCapabilityAuthPlain, + IMAPCapabilityAuthSKey, + IMAPCapabilityAuthSRP, + IMAPCapabilityXOAuth2, + IMAPCapabilityXYMHighestModseq, + IMAPCapabilityGmail, + }; + + enum POPCapability { + POPCapabilityNone, + POPCapabilityStartTLS, + POPCapabilityTop, + POPCapabilityUser, + POPCapabilityRespCodes, + POPCapabilityPipelining, + POPCapabilityUIDL, + POPCapabilitySASL, + POPCapabilityAuthAnonymous, + POPCapabilityAuthCRAMMD5, + POPCapabilityAuthDigestMD5, + POPCapabilityAuthExternal, + POPCapabilityAuthGSSAPI, + POPCapabilityAuthKerberosV4, + POPCapabilityAuthLogin, + POPCapabilityAuthNTLM, + POPCapabilityAuthOTP, + POPCapabilityAuthPlain, + POPCapabilityAuthSKey, + POPCapabilityAuthSRP, + }; + + enum Encoding { + Encoding7Bit = 0, // should match MAILIMAP_BODY_FLD_ENC_7BIT + Encoding8Bit = 1, // should match MAILIMAP_BODY_FLD_ENC_8BIT + EncodingBinary = 2, // should match MAILIMAP_BODY_FLD_ENC_BINARY + EncodingBase64 = 3, // should match MAILIMAP_BODY_FLD_ENC_BASE64 + EncodingQuotedPrintable = 4, // should match MAILIMAP_BODY_FLD_ENC_QUOTED_PRINTABLE + EncodingOther = 5, // should match MAILIMAP_BODY_FLD_ENC_OTHER + // negative values should be used for other encoding + EncodingUUEncode = -1 + }; + + enum IMAPSearchKind { + IMAPSearchKindAll, + IMAPSearchKindNone, + IMAPSearchKindFrom, + IMAPSearchKindTo, + IMAPSearchKindCc, + IMAPSearchKindBcc, + IMAPSearchKindRecipient, // Recipient is the combination of To, Cc and Bcc + IMAPSearchKindSubject, + IMAPSearchKindContent, + IMAPSearchKindBody, + IMAPSearchKindUIDs, + IMAPSearchKindNumbers, + IMAPSearchKindHeader, + IMAPSearchKindRead, + IMAPSearchKindUnread, + IMAPSearchKindFlagged, + IMAPSearchKindUnflagged, + IMAPSearchKindAnswered, + IMAPSearchKindUnanswered, + IMAPSearchKindDraft, + IMAPSearchKindUndraft, + IMAPSearchKindDeleted, + IMAPSearchKindSpam, + IMAPSearchKindBeforeDate, + IMAPSearchKindOnDate, + IMAPSearchKindSinceDate, + IMAPSearchKindBeforeReceivedDate, + IMAPSearchKindOnReceivedDate, + IMAPSearchKindSinceReceivedDate, + IMAPSearchKindSizeLarger, + IMAPSearchKindSizeSmaller, + IMAPSearchKindGmailThreadID, + IMAPSearchKindGmailMessageID, + IMAPSearchKindGmailRaw, + IMAPSearchKindOr, + IMAPSearchKindAnd, + IMAPSearchKindNot, + }; + + enum ErrorCode { + ErrorNone, // 0 + ErrorConnection, + ErrorTLSNotAvailable, + ErrorParse, + ErrorCertificate, + ErrorAuthentication, + ErrorGmailIMAPNotEnabled, + ErrorGmailExceededBandwidthLimit, + ErrorGmailTooManySimultaneousConnections, + ErrorMobileMeMoved, + ErrorYahooUnavailable, // 10 + ErrorNonExistantFolder, + ErrorRename, + ErrorDelete, + ErrorCreate, + ErrorSubscribe, + ErrorAppend, + ErrorCopy, + ErrorExpunge, + ErrorFetch, + ErrorIdle, // 20 + ErrorIdentity, + ErrorNamespace, + ErrorStore, + ErrorCapability, + ErrorStartTLSNotAvailable, + ErrorSendMessageIllegalAttachment, + ErrorStorageLimit, + ErrorSendMessageNotAllowed, + ErrorNeedsConnectToWebmail, + ErrorSendMessage, // 30 + ErrorAuthenticationRequired, + ErrorFetchMessageList, + ErrorDeleteMessage, + ErrorInvalidAccount, + ErrorFile, + ErrorCompression, + ErrorNoSender, + ErrorNoRecipient, + ErrorNoop, + ErrorGmailApplicationSpecificPasswordRequired, // 40 + ErrorServerDate, + ErrorNoValidServerFound, + ErrorCustomCommand, + ErrorYahooSendMessageSpamSuspected, + ErrorYahooSendMessageDailyLimitExceeded, + ErrorOutlookLoginViaWebBrowser, + ErrorTiscaliSimplePassword, + ErrorCanceled, + }; + + enum PartType { + PartTypeSingle, + PartTypeMessage, + PartTypeMultipartMixed, + PartTypeMultipartRelated, + PartTypeMultipartAlternative, + PartTypeMultipartSigned, + }; + + // Private type - It should not be used directly. + enum IMAPMessageRenderingType { + IMAPMessageRenderingTypeHTML, + IMAPMessageRenderingTypeHTMLBody, + IMAPMessageRenderingTypePlainText, + IMAPMessageRenderingTypePlainTextBody, + IMAPMessageRenderingTypePlainTextBodyAndStripWhitespace, + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCMessageHeader.h b/src/include/MailCore/MCMessageHeader.h new file mode 100644 index 000000000..439e0d441 --- /dev/null +++ b/src/include/MailCore/MCMessageHeader.h @@ -0,0 +1,111 @@ +#ifndef MAILCORE_MCMESSAGEHEADER_H + +#define MAILCORE_MCMESSAGEHEADER_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class Address; + + class MAILCORE_EXPORT MessageHeader : public Object { + public: + MessageHeader(); + virtual ~MessageHeader(); + + virtual void setMessageID(String * messageID); + virtual String * messageID(); + + virtual bool isMessageIDAutoGenerated(); + + virtual void setReferences(Array * /* String */ references); + virtual Array * /* String */ references(); + + virtual void setInReplyTo(Array * /* String */ inReplyTo); + virtual Array * /* String */ inReplyTo(); + + virtual void setDate(time_t date); + virtual time_t date(); + + virtual void setReceivedDate(time_t date); + virtual time_t receivedDate(); + + virtual void setSender(Address * sender); + virtual Address * sender(); + + virtual void setFrom(Address * from); + virtual Address * from(); + + virtual void setTo(Array * /* Address */ to); + virtual Array * /* Address */ to(); + + virtual void setCc(Array * /* Address */ cc); + virtual Array * /* Address */ cc(); + + virtual void setBcc(Array * /* Address */ bcc); + virtual Array * /* Address */ bcc(); + + virtual void setReplyTo(Array * /* Address */ replyTo); + virtual Array * /* Address */ replyTo(); + + virtual void setSubject(String * subject); + virtual String * subject(); + + virtual void setUserAgent(String * userAgent); + virtual String * userAgent(); + + virtual void setExtraHeader(String *name, String * value); + virtual void removeExtraHeader(String *name); + virtual String * extraHeaderValueForName(String *name); + virtual Array * allExtraHeadersNames(); + + String * extractedSubject(); + virtual String * partialExtractedSubject(); + virtual void importHeadersData(Data * data); + + virtual MessageHeader * replyHeader(bool replyAll, Array * addressesExcludedFromRecipient); + virtual MessageHeader * forwardHeader(); + + public: // subclass behavior + MessageHeader(MessageHeader * other); + virtual String * description(); + virtual Object * copy(); + virtual HashMap * serializable(); + virtual void importSerializable(HashMap * serializable); + + public: // private + virtual void importIMAPEnvelope(struct mailimap_envelope * env); + virtual void importIMAPReferences(Data * data); + virtual void importIMAPInternalDate(struct mailimap_date_time * date); + + virtual struct mailimf_fields * createIMFFieldsAndFilterBcc(bool filterBcc); + virtual void importIMFFields(struct mailimf_fields * fields); + + private: + String * mMessageID; + bool mMessageIDAutoGenerated; + Array * /* String */ mReferences; + Array * /* String */ mInReplyTo; + Address * mSender; + Address * mFrom; + Array * /* Address */ mTo; + Array * /* Address */ mCc; + Array * /* Address */ mBcc; + Array * /* Address */ mReplyTo; + String * mSubject; + time_t mDate; + time_t mReceivedDate; + HashMap * mExtraHeaders; + void init(bool generateDate, bool generateMessageID); + void setExtraHeaders(HashMap *headers); + Array * recipientWithReplyAll(bool replyAll, bool includeTo, bool includeCc, Array * senderEmails); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCMessageParser.h b/src/include/MailCore/MCMessageParser.h new file mode 100644 index 000000000..5a45789f8 --- /dev/null +++ b/src/include/MailCore/MCMessageParser.h @@ -0,0 +1,86 @@ +#ifndef MAILCORE_MCPARSEDMESSAGE_H + +#define MAILCORE_MCPARSEDMESSAGE_H + +#include +#include +#include +#ifdef __APPLE__ +#import +#endif + +#ifdef __cplusplus + +namespace mailcore { + + class HTMLRendererTemplateCallback; + class HTMLRendererRFC822Callback; + class Multipart; + class MessagePart; + class Attachment; + + class MAILCORE_EXPORT MessageParser : public AbstractMessage { + public: + static MessageParser * messageParserWithData(Data * data); + static MessageParser * messageParserWithContentsOfFile(String * filename); + + MessageParser(); + MessageParser(Data * data); + virtual ~MessageParser(); + + virtual AbstractPart * mainPart(); + virtual Data * data(); + + virtual String * htmlRendering(HTMLRendererTemplateCallback * htmlCallback = NULL); + virtual String * htmlRenderingWithDataCallback(HTMLRendererTemplateCallback * htmlCallback, + HTMLRendererRFC822Callback * dataCallback); + virtual String * htmlBodyRendering(); + + virtual String * plainTextRendering(); + virtual String * plainTextBodyRendering(bool stripWhitespace); + virtual void saveToFile(String * fileName); + + public: // subclass behavior + MessageParser(MessageParser * other); + virtual String * description(); + virtual Object * copy(); + + virtual AbstractPart * partForContentID(String * contentID); + virtual AbstractPart * partForUniqueID(String * uniqueID); + + virtual HashMap * serializable(); + virtual void importSerializable(HashMap * serializable); + +#ifdef __APPLE__ + public: + static MessageParser * messageParserWithData(CFDataRef data); + MessageParser(CFDataRef data); +#endif + + private: + Data * mData; + AbstractPart * mMainPart; + void init(); +#if __APPLE__ + void * mNSData; +#endif + + private: + void setBytes(char * bytes, unsigned int length); + Data * dataFromNSData(); + void setupPartID(); + void recursiveSetupPartIDWithPart(mailcore::AbstractPart * part, + mailcore::String * partIDPrefix); + void recursiveSetupPartIDWithSinglePart(mailcore::Attachment * part, + mailcore::String * partIDPrefix); + void recursiveSetupPartIDWithMessagePart(mailcore::MessagePart * part, + mailcore::String * partIDPrefix); + void recursiveSetupPartIDWithMultipart(mailcore::Multipart * part, + mailcore::String * partIDPrefix); + }; + +}; + +#endif + +#endif diff --git a/src/include/MailCore/MCMessagePart.h b/src/include/MailCore/MCMessagePart.h new file mode 100644 index 000000000..04879ba36 --- /dev/null +++ b/src/include/MailCore/MCMessagePart.h @@ -0,0 +1,34 @@ +#ifndef MAILCORE_MCMESSAGEPART_H + +#define MAILCORE_MCMESSAGEPART_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT MessagePart : public AbstractMessagePart { + public: + MessagePart(); + virtual ~MessagePart(); + + virtual void setPartID(String * partID); + virtual String * partID(); + + public: // subclass behavior + MessagePart(MessagePart * other); + virtual Object * copy(); + + private: + String * mPartID; + + void init(); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCMultipart.h b/src/include/MailCore/MCMultipart.h new file mode 100644 index 000000000..d389f522c --- /dev/null +++ b/src/include/MailCore/MCMultipart.h @@ -0,0 +1,34 @@ +#ifndef MAILCORE_MCMULTIPART_H + +#define MAILCORE_MCMULTIPART_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT Multipart : public AbstractMultipart { + public: + Multipart(); + virtual ~Multipart(); + + virtual void setPartID(String * partID); + virtual String * partID(); + + public: // subclass behavior + Multipart(Multipart * other); + virtual Object * copy(); + + private: + String * mPartID; + + void init(); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCNNTP.h b/src/include/MailCore/MCNNTP.h new file mode 100644 index 000000000..c2da3a669 --- /dev/null +++ b/src/include/MailCore/MCNNTP.h @@ -0,0 +1,9 @@ +#ifndef MAILCORE_MCNNTP_H + +#define MAILCORE_MCNNTP_H + +#include +#include +#include + +#endif diff --git a/src/include/MailCore/MCNNTPAsyncSession.h b/src/include/MailCore/MCNNTPAsyncSession.h new file mode 100644 index 000000000..f96f25de2 --- /dev/null +++ b/src/include/MailCore/MCNNTPAsyncSession.h @@ -0,0 +1,102 @@ +#ifndef MAILCORE_MCNNTPASYNCSESSION_H + +#define MAILCORE_MCNNTPASYNCSESSION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class NNTPOperation; + class NNTPSession; + class NNTPFetchHeaderOperation; + class NNTPFetchArticleOperation; + class NNTPFetchAllArticlesOperation; + class NNTPFetchOverviewOperation; + class NNTPListNewsgroupsOperation; + class NNTPFetchServerTimeOperation; + class NNTPPostOperation; + class NNTPOperationQueueCallback; + class NNTPConnectionLogger; + + class MAILCORE_EXPORT NNTPAsyncSession : public Object { + public: + NNTPAsyncSession(); + virtual ~NNTPAsyncSession(); + + virtual void setHostname(String * hostname); + virtual String * hostname(); + + virtual void setPort(unsigned int port); + virtual unsigned int port(); + + virtual void setUsername(String * login); + virtual String * username(); + + virtual void setPassword(String * password); + virtual String * password(); + + virtual void setConnectionType(ConnectionType connectionType); + virtual ConnectionType connectionType(); + + virtual void setTimeout(time_t timeout); + virtual time_t timeout(); + + virtual void setCheckCertificateEnabled(bool enabled); + virtual bool isCheckCertificateEnabled(); + + virtual void setConnectionLogger(ConnectionLogger * logger); + virtual ConnectionLogger * connectionLogger(); + +#if MC_HAS_GCD + virtual void setDispatchQueue(dispatch_queue_t dispatchQueue); + virtual dispatch_queue_t dispatchQueue(); +#endif + + virtual void setOperationQueueCallback(OperationQueueCallback * callback); + virtual OperationQueueCallback * operationQueueCallback(); + virtual bool isOperationQueueRunning(); + virtual void cancelAllOperations(); + + virtual NNTPFetchAllArticlesOperation * fetchAllArticlesOperation(String * group); + + virtual NNTPFetchHeaderOperation * fetchHeaderOperation(String * groupName, unsigned int index); + + virtual NNTPFetchArticleOperation * fetchArticleOperation(String *groupName, unsigned int index); + virtual NNTPFetchArticleOperation * fetchArticleByMessageIDOperation(String * messageID); + + virtual NNTPFetchOverviewOperation * fetchOverviewOperationWithIndexes(String * groupName, IndexSet * indexes); + + virtual NNTPFetchServerTimeOperation * fetchServerDateOperation(); + + virtual NNTPListNewsgroupsOperation * listAllNewsgroupsOperation(); + virtual NNTPListNewsgroupsOperation * listDefaultNewsgroupsOperation(); + + virtual NNTPPostOperation * postMessageOperation(Data * messageData); + virtual NNTPPostOperation * postMessageOperation(String * filename); + + virtual NNTPOperation * disconnectOperation(); + + virtual NNTPOperation * checkAccountOperation(); + + private: + NNTPSession * mSession; + OperationQueue * mQueue; + NNTPOperationQueueCallback * mQueueCallback; + ConnectionLogger * mConnectionLogger; + MCB_LOCK_TYPE mConnectionLoggerLock; + NNTPConnectionLogger * mInternalLogger; + OperationQueueCallback * mOperationQueueCallback; + + public: // private + virtual void runOperation(NNTPOperation * operation); + virtual NNTPSession * session(); + virtual void logConnection(ConnectionLogType logType, Data * buffer); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCNNTPCheckAccountOperation.h b/src/include/MailCore/MCNNTPCheckAccountOperation.h new file mode 100644 index 000000000..395178a00 --- /dev/null +++ b/src/include/MailCore/MCNNTPCheckAccountOperation.h @@ -0,0 +1,32 @@ +// +// MCNNTPCheckAccountOperation.h +// mailcore2 +// +// Created by Robert Widmann on 8/13/14. +// Copyright (c) 2014 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCNNTPCHECKACCOUNTOPERATION_H + +#define MAILCORE_MCNNTPCHECKACCOUNTOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT NNTPCheckAccountOperation : public NNTPOperation { + public: + NNTPCheckAccountOperation(); + virtual ~NNTPCheckAccountOperation(); + + public: // subclass behavior + virtual void main(); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCNNTPDisconnectOperation.h b/src/include/MailCore/MCNNTPDisconnectOperation.h new file mode 100644 index 000000000..cb4a057a2 --- /dev/null +++ b/src/include/MailCore/MCNNTPDisconnectOperation.h @@ -0,0 +1,32 @@ +// +// MCNNTPDisconnectOperation.h +// mailcore2 +// +// Created by Robert Widmann on 8/13/14. +// Copyright (c) 2014 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCNNTPDISCONNECTOPERATION_H + +#define MAILCORE_MCNNTPDISCONNECTOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT NNTPDisconnectOperation : public NNTPOperation { + public: + NNTPDisconnectOperation(); + virtual ~NNTPDisconnectOperation(); + + public: // subclass behavior + virtual void main(); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCNNTPFetchAllArticlesOperation.h b/src/include/MailCore/MCNNTPFetchAllArticlesOperation.h new file mode 100644 index 000000000..0fa532c8e --- /dev/null +++ b/src/include/MailCore/MCNNTPFetchAllArticlesOperation.h @@ -0,0 +1,41 @@ +// +// MCNNTPFetchAllArticlesOperation.h +// mailcore2 +// +// Created by Robert Widmann on 8/13/14. +// Copyright (c) 2014 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCNNTPFETCHARTICLESOPERATION_H + +#define MAILCORE_MCNNTPFETCHARTICLESOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT NNTPFetchAllArticlesOperation : public NNTPOperation { + public: + NNTPFetchAllArticlesOperation(); + virtual ~NNTPFetchAllArticlesOperation(); + + virtual void setGroupName(String * groupName); + virtual String * groupName(); + + virtual IndexSet * articles(); + + public: // subclass behavior + virtual void main(); + + private: + String * mGroupName; + IndexSet * mArticles; + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCNNTPFetchArticleOperation.h b/src/include/MailCore/MCNNTPFetchArticleOperation.h new file mode 100644 index 000000000..3e066b7ba --- /dev/null +++ b/src/include/MailCore/MCNNTPFetchArticleOperation.h @@ -0,0 +1,49 @@ +// +// MCNNTPFetchArticleOperation.h +// mailcore2 +// +// Created by Robert Widmann on 8/13/14. +// Copyright (c) 2014 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCNNTPFETCHARTICLEOPERATION_H + +#define MAILCORE_MCNNTPFETCHARTICLEOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + class MAILCORE_EXPORT NNTPFetchArticleOperation : public NNTPOperation { + public: + NNTPFetchArticleOperation(); + virtual ~NNTPFetchArticleOperation(); + + virtual void setGroupName(String * groupName); + virtual String * groupName(); + + virtual void setMessageID(String * groupName); + virtual String * messageID(); + + virtual void setMessageIndex(unsigned int messageIndex); + virtual unsigned int messageIndex(); + + virtual Data * data(); + + public: // subclass behavior + virtual void main(); + + private: + String * mGroupName; + String * mMessageID; + unsigned int mMessageIndex; + Data * mData; + + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCNNTPFetchHeaderOperation.h b/src/include/MailCore/MCNNTPFetchHeaderOperation.h new file mode 100644 index 000000000..93b9d380f --- /dev/null +++ b/src/include/MailCore/MCNNTPFetchHeaderOperation.h @@ -0,0 +1,48 @@ +// +// MCNNTPFetchHeaderOperation.h +// mailcore2 +// +// Created by Robert Widmann on 8/13/14. +// Copyright (c) 2014 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCNNTPFETCHHEADEROPERATION_H + +#define MAILCORE_MCNNTPFETCHHEADEROPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MessageHeader; + + class MAILCORE_EXPORT NNTPFetchHeaderOperation : public NNTPOperation { + public: + NNTPFetchHeaderOperation(); + virtual ~NNTPFetchHeaderOperation(); + + virtual void setGroupName(String * groupName); + virtual String * groupName(); + + virtual void setMessageIndex(unsigned int messageIndex); + virtual unsigned int messageIndex(); + + virtual MessageHeader * header(); + + public: // subclass behavior + virtual void main(); + + private: + String * mGroupName; + unsigned int mMessageIndex; + MessageHeader * mHeader; + + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCNNTPFetchOverviewOperation.h b/src/include/MailCore/MCNNTPFetchOverviewOperation.h new file mode 100644 index 000000000..bf8db26fe --- /dev/null +++ b/src/include/MailCore/MCNNTPFetchOverviewOperation.h @@ -0,0 +1,45 @@ +// +// NNTPFetchOverviewOperation.h +// mailcore2 +// +// Created by Robert Widmann on 10/21/14. +// Copyright (c) 2014 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCNNTPFETCHOVERVIEWOPERATION_H + +#define MAILCORE_MCNNTPFETCHOVERVIEWOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT NNTPFetchOverviewOperation : public NNTPOperation { + public: + NNTPFetchOverviewOperation(); + virtual ~NNTPFetchOverviewOperation(); + + virtual void setIndexes(IndexSet * indexes); + virtual IndexSet * indexes(); + + virtual void setGroupName(String * groupName); + virtual String * groupName(); + + virtual Array * articles(); + + public: // subclass behavior + virtual void main(); + + private: + IndexSet * mIndexes; + String * mGroupName; + Array * /* MessageHeader */ mArticles; + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCNNTPFetchServerTimeOperation.h b/src/include/MailCore/MCNNTPFetchServerTimeOperation.h new file mode 100644 index 000000000..b01a1599c --- /dev/null +++ b/src/include/MailCore/MCNNTPFetchServerTimeOperation.h @@ -0,0 +1,37 @@ +// +// MCNNTPFetchServerTimeOperation.h +// mailcore2 +// +// Created by Robert Widmann on 10/21/14. +// Copyright (c) 2014 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCNNTPFETCHSERVERTIMEOPERATION_H + +#define MAILCORE_MCNNTPFETCHSERVERTIMEOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT NNTPFetchServerTimeOperation : public NNTPOperation { + public: + NNTPFetchServerTimeOperation(); + virtual ~NNTPFetchServerTimeOperation(); + + virtual time_t time(); + + public: // subclass behavior + virtual void main(); + + private: + time_t mTime; + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCNNTPGroupInfo.h b/src/include/MailCore/MCNNTPGroupInfo.h new file mode 100644 index 000000000..75a6675c3 --- /dev/null +++ b/src/include/MailCore/MCNNTPGroupInfo.h @@ -0,0 +1,38 @@ +#ifndef MAILCORE_MCNNTPGROUPINFO_H + +#define MAILCORE_MCNNTPGROUPINFO_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT NNTPGroupInfo : public Object { + public: + NNTPGroupInfo(); + virtual ~NNTPGroupInfo(); + + virtual void setName(String * uid); + virtual String * name(); + + virtual void setMessageCount(uint32_t messages); + virtual uint32_t messageCount(); + + public: // subclass behavior + NNTPGroupInfo(NNTPGroupInfo * other); + virtual String * description(); + virtual Object * copy(); + + private: + String * mName; + uint32_t mMessageCount; + + void init(); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCNNTPListNewsgroupsOperation.h b/src/include/MailCore/MCNNTPListNewsgroupsOperation.h new file mode 100644 index 000000000..d2c68038f --- /dev/null +++ b/src/include/MailCore/MCNNTPListNewsgroupsOperation.h @@ -0,0 +1,41 @@ +// +// MCNNTPListNewsgroupsMessagesOperation.h +// mailcore2 +// +// Created by Robert Widmann on 8/13/14. +// Copyright (c) 2014 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCNNTPLISTNEWSGROUPSOPERATION_H + +#define MAILCORE_MCNNTPLISTNEWSGROUPSOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT NNTPListNewsgroupsOperation : public NNTPOperation { + public: + NNTPListNewsgroupsOperation(); + virtual ~NNTPListNewsgroupsOperation(); + + virtual void setListsSubscribed(bool listsSubscribed); + virtual bool listsSubscribed(); + + virtual Array * groups(); + + public: // subclass behavior + virtual void main(); + + private: + bool mListsSuscribed; + Array * /* NNTPGroupInfo */ mGroups; + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCNNTPOperation.h b/src/include/MailCore/MCNNTPOperation.h new file mode 100644 index 000000000..52205e9f9 --- /dev/null +++ b/src/include/MailCore/MCNNTPOperation.h @@ -0,0 +1,53 @@ +// +// MCNNTPOperation.h +// mailcore2 +// +// Created by Robert Widmann on 8/13/14. +// Copyright (c) 2014 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCNNTPOPERATION_H + +#define MAILCORE_MCNNTPOPERATION_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class NNTPAsyncSession; + class NNTPOperationCallback; + + class MAILCORE_EXPORT NNTPOperation : public Operation, public NNTPProgressCallback { + public: + NNTPOperation(); + virtual ~NNTPOperation(); + + virtual void setSession(NNTPAsyncSession * session); + virtual NNTPAsyncSession * session(); + + virtual void setNNTPCallback(NNTPOperationCallback * callback); + virtual NNTPOperationCallback * nntpCallback(); + + virtual void setError(ErrorCode error); + virtual ErrorCode error(); + + virtual void start(); + + private: + NNTPAsyncSession * mSession; + NNTPOperationCallback * mPopCallback; + ErrorCode mError; + private: + virtual void bodyProgress(NNTPSession * session, unsigned int current, unsigned int maximum); + virtual void bodyProgressOnMainThread(void * context); + + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCNNTPOperationCallback.h b/src/include/MailCore/MCNNTPOperationCallback.h new file mode 100644 index 000000000..e12a1b757 --- /dev/null +++ b/src/include/MailCore/MCNNTPOperationCallback.h @@ -0,0 +1,30 @@ +// +// MCNNTPOperationCallback.h +// mailcore2 +// +// Created by Robert Widmann on 8/13/14. +// Copyright (c) 2014 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCNNTPOPERATIONCALLBACK_H + +#define MAILCORE_MCNNTPOPERATIONCALLBACK_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class NNTPOperation; + + class MAILCORE_EXPORT NNTPOperationCallback { + public: + virtual void bodyProgress(NNTPOperation * session, unsigned int current, unsigned int maximum) {}; + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCNNTPPostOperation.h b/src/include/MailCore/MCNNTPPostOperation.h new file mode 100644 index 000000000..9255dafd6 --- /dev/null +++ b/src/include/MailCore/MCNNTPPostOperation.h @@ -0,0 +1,44 @@ +// +// MCNNTPPostOperation.h +// mailcore2 +// +// Created by Daryle Walker on 2/21/16. +// Copyright © 2016 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCNNTPPOSTOPERATION_H + +#define MAILCORE_MCNNTPPOSTOPERATION_H + +#include +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT NNTPPostOperation : public NNTPOperation { + public: + NNTPPostOperation(); + virtual ~NNTPPostOperation(); + + virtual void setMessageData(Data * data); + virtual Data * messageData(); + + virtual void setMessageFilepath(String * path); + virtual String * messageFilepath(); + + public: // subclass behavior + virtual void main(); + + private: + Data * mMessageData; + String * mMessageFilepath; + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCNNTPProgressCallback.h b/src/include/MailCore/MCNNTPProgressCallback.h new file mode 100644 index 000000000..dd615d04f --- /dev/null +++ b/src/include/MailCore/MCNNTPProgressCallback.h @@ -0,0 +1,22 @@ +#ifndef MAILCORE_MCNNTPPROGRESSCALLBACK_H + +#define MAILCORE_MCNNTPPROGRESSCALLBACK_H + +#ifdef __cplusplus + +#include + +namespace mailcore { + + class NNTPSession; + + class MAILCORE_EXPORT NNTPProgressCallback { + public: + virtual void bodyProgress(NNTPSession * session, unsigned int current, unsigned int maximum) {}; + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCNNTPSession.h b/src/include/MailCore/MCNNTPSession.h new file mode 100644 index 000000000..049de499b --- /dev/null +++ b/src/include/MailCore/MCNNTPSession.h @@ -0,0 +1,105 @@ +#ifndef MAILCORE_MCNNTPSESSION_H +#define MAILCORE_MCNNTPSESSION_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class NNTPProgressCallback; + class MessageHeader; + + class MAILCORE_EXPORT NNTPSession : public Object { + public: + NNTPSession(); + virtual ~NNTPSession(); + + virtual void setHostname(String * hostname); + virtual String * hostname(); + + virtual void setPort(unsigned int port); + virtual unsigned int port(); + + virtual void setUsername(String * username); + virtual String * username(); + + virtual void setPassword(String * password); + virtual String * password(); + + virtual void setConnectionType(ConnectionType connectionType); + virtual ConnectionType connectionType(); + + virtual void setTimeout(time_t timeout); + virtual time_t timeout(); + + virtual void setCheckCertificateEnabled(bool enabled); + virtual bool isCheckCertificateEnabled(); + + virtual void connect(ErrorCode * pError); + virtual void disconnect(); + + virtual void login(ErrorCode * pError); + + virtual void checkAccount(ErrorCode * pError); + + virtual Array * /* NNTPGroupInfo */ listAllNewsgroups(ErrorCode * pError); + virtual Array * /* NNTPGroupInfo */ listDefaultNewsgroups(ErrorCode * pError); + + virtual MessageHeader * fetchHeader(String * groupName, unsigned int index, ErrorCode * pError); + virtual Array /*MessageHeader*/ * fetchOverArticlesInRange(Range range, String * groupname, ErrorCode * pError); + + virtual IndexSet * fetchAllArticles(String * groupname, ErrorCode * pError); + + virtual Data * fetchArticle(String *groupName, unsigned int index, NNTPProgressCallback * callback, ErrorCode * pError); + virtual Data * fetchArticleByMessageID(String * messageID, ErrorCode * pError); + + virtual time_t fetchServerDate(ErrorCode * pError); + + virtual void postMessage(Data * messageData, NNTPProgressCallback * callback, ErrorCode * pError); + virtual void postMessage(String * messagePath, NNTPProgressCallback * callback, ErrorCode * pError); + + virtual void setConnectionLogger(ConnectionLogger * logger); + virtual ConnectionLogger * connectionLogger(); + + public: // private + virtual void lockConnectionLogger(); + virtual void unlockConnectionLogger(); + virtual ConnectionLogger * connectionLoggerNoLock(); + + private: + String * mHostname; + unsigned int mPort; + String * mUsername; + String * mPassword; + ConnectionType mConnectionType; + bool mCheckCertificateEnabled; + time_t mTimeout; + + newsnntp * mNNTP; + NNTPProgressCallback * mProgressCallback; + int mState; + + ConnectionLogger * mConnectionLogger; + MCB_LOCK_TYPE mConnectionLoggerLock; + + void init(); + Data * dataWithFilteredBcc(Data * data); + static void body_progress(size_t current, size_t maximum, void * context); + void bodyProgress(unsigned int current, unsigned int maximum); + bool checkCertificate(); + void setup(); + void unsetup(); + void connectIfNeeded(ErrorCode * pError); + void loginIfNeeded(ErrorCode * pError); + void readerIfNeeded(ErrorCode * pError); + void listIfNeeded(ErrorCode * pError); + void selectGroup(String * folder, ErrorCode * pError); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCNetService.h b/src/include/MailCore/MCNetService.h new file mode 100644 index 000000000..00a618add --- /dev/null +++ b/src/include/MailCore/MCNetService.h @@ -0,0 +1,59 @@ +// +// MCNetService.h +// mailcore2 +// +// Created by Robert Widmann on 4/28/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCNETSERVICE_H + +#define MAILCORE_MCNETSERVICE_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT NetService : public Object { + + public: + NetService(); + virtual ~NetService(); + + virtual void setHostname(String * hostname); + virtual String * hostname(); + + virtual void setPort(unsigned int port); + virtual unsigned int port(); + + virtual void setConnectionType(ConnectionType connectionType); + virtual ConnectionType connectionType(); + + virtual String * normalizedHostnameWithEmail(String * email); + + public: // serialization + static NetService * serviceWithInfo(HashMap * info); + virtual HashMap * info(); + + public: //subclass behavior + NetService(NetService * other); + virtual String * description(); + virtual Object * copy(); + + private: + String * mHostname; + unsigned int mPort; + ConnectionType mConnectionType; + + void init(); + void fillWithInfo(HashMap * info); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCNull.h b/src/include/MailCore/MCNull.h new file mode 100644 index 000000000..dc271e047 --- /dev/null +++ b/src/include/MailCore/MCNull.h @@ -0,0 +1,28 @@ +// +// MCNull.h +// hermes +// +// Created by DINH Viêt Hoà on 4/9/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCNULL_H + +#define MAILCORE_MCNULL_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT Null : public Object { + public: + static Null * null(); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCObject.h b/src/include/MailCore/MCObject.h new file mode 100644 index 000000000..15ff208b9 --- /dev/null +++ b/src/include/MailCore/MCObject.h @@ -0,0 +1,125 @@ +#ifndef MAILCORE_MCOBJECT_H + +#define MAILCORE_MCOBJECT_H + +#include + +#if MC_HAS_GCD +#include +#endif + +#ifdef _MSC_VER +#define WIN32_LEAN_AND_MEAN +#include +#elif __APPLE__ +#include +#else +#include +#endif + +#if defined(__ANDROID__) +#if __cplusplus +extern "C" { +#endif + + // Create a heap based copy of a Block or simply add a reference to an existing one. + // This must be paired with Block_release to recover memory, even when running + // under Objective-C Garbage Collection. + void *_Block_copy(const void *aBlock); + + // Lose the reference, and if heap based and last reference, recover the memory + void _Block_release(const void *aBlock); + +#if __cplusplus +} +#endif + +// Type correct macros + +#define Block_copy(...) ((__typeof(__VA_ARGS__))_Block_copy((const void *)(__VA_ARGS__))) +#define Block_release(...) _Block_release((const void *)(__VA_ARGS__)) + +#endif + +#include + +#ifdef __cplusplus + +namespace mailcore { + + extern bool zombieEnabled; + + #if defined(__ANDROID__) + // Android main queue + extern dispatch_queue_t mainQueue; + #endif + + class String; + class HashMap; + + class MAILCORE_EXPORT Object { + public: + Object(); + virtual ~Object(); + + virtual int retainCount(); + virtual Object * retain(); + virtual void release(); + virtual Object * autorelease(); + virtual String * description(); + virtual String * className(); + + virtual bool isEqual(Object * otherObject); + virtual unsigned int hash(); + + // optional + virtual Object * copy(); + virtual HashMap * serializable(); + virtual void importSerializable(HashMap * serializable); + + typedef void (Object::*Method) (void *); + virtual void performMethod(Method method, void * context); +#if !defined(__ANDROID__) + virtual void performMethodOnMainThread(Method method, void * context, bool waitUntilDone = false); +#endif + virtual void performMethodAfterDelay(Method method, void * context, double delay); +#if MC_HAS_GCD + virtual void performMethodOnDispatchQueue(Method method, void * context, void * targetDispatchQueue, bool waitUntilDone = false); + virtual void performMethodOnDispatchQueueAfterDelay(Method method, void * context, void * targetDispatchQueue, double delay); + virtual void cancelDelayedPerformMethodOnDispatchQueue(Method method, void * context, void * targetDispatchQueue); +#endif + virtual void cancelDelayedPerformMethod(Method method, void * context); + + // serialization utils + static void registerObjectConstructor(const char * className, void * (* objectConstructor)(void)); + static Object * objectWithSerializable(HashMap * serializable); + +#if MC_HAS_GCD + // Druk: in Android dispatch_get_main_queue() return dead queue that not drained + // That's why in Swift we create another queue that called `main` but it executes task NOT on Android main thread + // We store reference for that "main" queue in global variable mailcore::mainQueue + static dispatch_queue_t getMainQueue(); +#endif + + public: // private + + private: +#ifdef _MSC_VER + SRWLOCK mLock; + static BOOL CALLBACK initObjectConstructorsCallback(PINIT_ONCE InitOnce, PVOID Parameter, PVOID * lpContext); + +#elif __APPLE__ + os_unfair_lock mLock; +#else + pthread_mutex_t mLock; +#endif + int mCounter; + void init(); + static void initObjectConstructors(); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCOperation.h b/src/include/MailCore/MCOperation.h new file mode 100644 index 000000000..14737cdc8 --- /dev/null +++ b/src/include/MailCore/MCOperation.h @@ -0,0 +1,65 @@ +#ifndef MAILCORE_MCOPERATION_H + +#define MAILCORE_MCOPERATION_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class OperationCallback; + + class MAILCORE_EXPORT Operation : public Object { + public: + Operation(); + virtual ~Operation(); + + virtual void setCallback(OperationCallback * callback); + virtual OperationCallback * callback(); + + virtual void cancel(); + + /** Aborts whatever this operation is doing right now. Called by the queue, and only while + this operation is the one it is executing - so an implementation may assume it owns the + resource it is about to break. Does nothing by default. */ + virtual void interrupt(); + + virtual bool isCancelled(); + + // Will be called on main thread. + virtual void beforeMain(); + + virtual void main(); + + // Will be called on main thread. + virtual void afterMain(); + + virtual void start(); + +#if MC_HAS_GCD + virtual void setCallbackDispatchQueue(dispatch_queue_t callbackDispatchQueue); + virtual dispatch_queue_t callbackDispatchQueue(); +#endif + void performMethodOnCallbackThread(Method method, void * context, bool waitUntilDone = false); + + virtual bool shouldRunWhenCancelled(); + virtual void setShouldRunWhenCancelled(bool shouldRunWhenCancelled); + + private: + OperationCallback * mCallback; + bool mCancelled; + bool mShouldRunWhenCancelled; + MCB_LOCK_TYPE mLock; +#if MC_HAS_GCD + dispatch_queue_t mCallbackDispatchQueue; +#endif + + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCOperationCallback.h b/src/include/MailCore/MCOperationCallback.h new file mode 100644 index 000000000..425b1e995 --- /dev/null +++ b/src/include/MailCore/MCOperationCallback.h @@ -0,0 +1,22 @@ +#ifndef MAILCORE_MCOPERATIONCALLBACK_H + +#define MAILCORE_MCOPERATIONCALLBACK_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class Operation; + + class MAILCORE_EXPORT OperationCallback { + public: + virtual void operationFinished(Operation * op) {} + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCOperationQueue.h b/src/include/MailCore/MCOperationQueue.h new file mode 100644 index 000000000..d6d387eac --- /dev/null +++ b/src/include/MailCore/MCOperationQueue.h @@ -0,0 +1,81 @@ +#ifndef MAILCORE_MCOPERATIONQUEUE_H + +#define MAILCORE_MCOPERATIONQUEUE_H + +#include +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class Operation; + class OperationQueueCallback; + class Array; + + class MAILCORE_EXPORT OperationQueue : public Object { + public: + OperationQueue(); + virtual ~OperationQueue(); + + virtual void addOperation(Operation * op); + virtual void cancelAllOperations(); + + /** Calls interrupt() on `op` if it is the operation whose main() the queue is executing + right now. The check and the call happen under the queue's lock, so no other operation can + become the running one in between: the interrupt cannot land on whatever started next. + It does not stop `op` itself from finishing - main() runs without the lock - so an + operation that completes just as the caller reaches it gets a harmless interrupt on an + idle stream. Lets a caller abort "the command my operation is running" without the risk + of aborting somebody else's. Returns whether interrupt() was called - a caller that + measures the effect needs to tell "there was a command to break" from "there was + nothing". */ + virtual bool interruptRunningOperation(Operation * op); + + virtual unsigned int count(); + + virtual void setCallback(OperationQueueCallback * callback); + virtual OperationQueueCallback * callback(); + +#if MC_HAS_GCD + virtual void setDispatchQueue(dispatch_queue_t dispatchQueue); + virtual dispatch_queue_t dispatchQueue(); +#endif + + private: + Array * mOperations; +#ifndef _MSC_VER + pthread_t mThreadID; +#endif + bool mStarted; + struct mailsem * mOperationSem; + struct mailsem * mStartSem; + struct mailsem * mStopSem; + MCB_LOCK_TYPE mLock; + bool mWaiting; + struct mailsem * mWaitingFinishedSem; + bool mQuitting; + Operation * mRunningOperation; + OperationQueueCallback * mCallback; +#if MC_HAS_GCD + dispatch_queue_t mDispatchQueue; +#endif + bool _pendingCheckRunning; + + void startThread(); + static void runOperationsOnThread(OperationQueue * queue); + void runOperations(); + void beforeMain(Operation * op); + void callbackOnMainThread(Operation * op); + void checkRunningOnMainThread(void * context); + void checkRunningAfterDelay(void * context); + void stoppedOnMainThread(void * context); + void performOnCallbackThread(Operation * op, Method method, void * context, bool waitUntilDone); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCOperationQueueCallback.h b/src/include/MailCore/MCOperationQueueCallback.h new file mode 100644 index 000000000..482f5541a --- /dev/null +++ b/src/include/MailCore/MCOperationQueueCallback.h @@ -0,0 +1,30 @@ +// +// MCOperationQueueCallback.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 6/22/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_OPERATIONQUEUECALLBACK_H +#define MAILCORE_OPERATIONQUEUECALLBACK_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class OperationQueue; + + class MAILCORE_EXPORT OperationQueueCallback { + public: + virtual void queueStartRunning() {} + virtual void queueStoppedRunning() {} + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCPOP.h b/src/include/MailCore/MCPOP.h new file mode 100644 index 000000000..db17430ac --- /dev/null +++ b/src/include/MailCore/MCPOP.h @@ -0,0 +1,9 @@ +#ifndef MAILCORE_MCPOP_H + +#define MAILCORE_MCPOP_H + +#include +#include +#include + +#endif diff --git a/src/include/MailCore/MCPOPAsyncSession.h b/src/include/MailCore/MCPOPAsyncSession.h new file mode 100644 index 000000000..2b55e38c5 --- /dev/null +++ b/src/include/MailCore/MCPOPAsyncSession.h @@ -0,0 +1,104 @@ +// +// MCPopAsyncSession.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/16/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCPOPASYNCSESSION_H + +#define MAILCORE_MCPOPASYNCSESSION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class POPOperation; + class POPSession; + class POPFetchHeaderOperation; + class POPFetchMessageOperation; + class POPDeleteMessagesOperation; + class POPFetchMessagesOperation; + class POPOperationQueueCallback; + class POPConnectionLogger; + + class MAILCORE_EXPORT POPAsyncSession : public Object { + public: + POPAsyncSession(); + virtual ~POPAsyncSession(); + + virtual void setHostname(String * hostname); + virtual String * hostname(); + + virtual void setPort(unsigned int port); + virtual unsigned int port(); + + virtual void setUsername(String * login); + virtual String * username(); + + virtual void setPassword(String * password); + virtual String * password(); + + virtual void setAuthType(AuthType authType); + virtual AuthType authType(); + + virtual void setConnectionType(ConnectionType connectionType); + virtual ConnectionType connectionType(); + + virtual void setTimeout(time_t timeout); + virtual time_t timeout(); + + virtual void setCheckCertificateEnabled(bool enabled); + virtual bool isCheckCertificateEnabled(); + + virtual void setConnectionLogger(ConnectionLogger * logger); + virtual ConnectionLogger * connectionLogger(); + +#if MC_HAS_GCD + virtual void setDispatchQueue(dispatch_queue_t dispatchQueue); + virtual dispatch_queue_t dispatchQueue(); +#endif + + virtual void setOperationQueueCallback(OperationQueueCallback * callback); + virtual OperationQueueCallback * operationQueueCallback(); + virtual bool isOperationQueueRunning(); + virtual void cancelAllOperations(); + + virtual POPFetchMessagesOperation * fetchMessagesOperation(); + + virtual POPFetchHeaderOperation * fetchHeaderOperation(unsigned int index); + + virtual POPFetchMessageOperation * fetchMessageOperation(unsigned int index); + + // Will disconnect. + virtual POPOperation * deleteMessagesOperation(IndexSet * indexes); + + virtual POPOperation * disconnectOperation(); + + virtual POPOperation * checkAccountOperation(); + + virtual POPOperation * noopOperation(); + + private: + POPSession * mSession; + OperationQueue * mQueue; + POPOperationQueueCallback * mQueueCallback; + ConnectionLogger * mConnectionLogger; + MCB_LOCK_TYPE mConnectionLoggerLock; + POPConnectionLogger * mInternalLogger; + OperationQueueCallback * mOperationQueueCallback; + + public: // private + virtual void runOperation(POPOperation * operation); + virtual POPSession * session(); + virtual void logConnection(ConnectionLogType logType, Data * buffer); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCPOPCheckAccountOperation.h b/src/include/MailCore/MCPOPCheckAccountOperation.h new file mode 100644 index 000000000..2b6779180 --- /dev/null +++ b/src/include/MailCore/MCPOPCheckAccountOperation.h @@ -0,0 +1,32 @@ +// +// MCPOPCheckAccountOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 4/6/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCPOPCHECKACCOUNTOPERATION_H + +#define MAILCORE_MCPOPCHECKACCOUNTOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT POPCheckAccountOperation : public POPOperation { + public: + POPCheckAccountOperation(); + virtual ~POPCheckAccountOperation(); + + public: // subclass behavior + virtual void main(); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCPOPDeleteMessagesOperation.h b/src/include/MailCore/MCPOPDeleteMessagesOperation.h new file mode 100644 index 000000000..e19e211c1 --- /dev/null +++ b/src/include/MailCore/MCPOPDeleteMessagesOperation.h @@ -0,0 +1,39 @@ +// +// MCPOPDeleteMessagesOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/16/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCPOPDELETEMESSAGESOPERATION_H + +#define MAILCORE_MCPOPDELETEMESSAGESOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT POPDeleteMessagesOperation : public POPOperation { + public: + POPDeleteMessagesOperation(); + virtual ~POPDeleteMessagesOperation(); + + virtual void setMessageIndexes(IndexSet * indexes); + virtual IndexSet * messageIndexes(); + + public: // subclass behavior + virtual void main(); + + private: + IndexSet * mMessageIndexes; + + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCPOPFetchHeaderOperation.h b/src/include/MailCore/MCPOPFetchHeaderOperation.h new file mode 100644 index 000000000..c2c3dee80 --- /dev/null +++ b/src/include/MailCore/MCPOPFetchHeaderOperation.h @@ -0,0 +1,44 @@ +// +// MCPOPFetchHeaderOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/16/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCPOPFETCHHEADEROPERATION_H + +#define MAILCORE_MCPOPFETCHHEADEROPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MessageHeader; + + class MAILCORE_EXPORT POPFetchHeaderOperation : public POPOperation { + public: + POPFetchHeaderOperation(); + virtual ~POPFetchHeaderOperation(); + + virtual void setMessageIndex(unsigned int messageIndex); + virtual unsigned int messageIndex(); + + virtual MessageHeader * header(); + + public: // subclass behavior + virtual void main(); + + private: + unsigned int mMessageIndex; + MessageHeader * mHeader; + + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCPOPFetchMessageOperation.h b/src/include/MailCore/MCPOPFetchMessageOperation.h new file mode 100644 index 000000000..23fa1e895 --- /dev/null +++ b/src/include/MailCore/MCPOPFetchMessageOperation.h @@ -0,0 +1,41 @@ +// +// MCPOPFetchMessageOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/16/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCPOPFETCHMESSAGEOPERATION_H + +#define MAILCORE_MCPOPFETCHMESSAGEOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + class MAILCORE_EXPORT POPFetchMessageOperation : public POPOperation { + public: + POPFetchMessageOperation(); + virtual ~POPFetchMessageOperation(); + + virtual void setMessageIndex(unsigned int messageIndex); + virtual unsigned int messageIndex(); + + virtual Data * data(); + + public: // subclass behavior + virtual void main(); + + private: + unsigned int mMessageIndex; + Data * mData; + + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCPOPFetchMessagesOperation.h b/src/include/MailCore/MCPOPFetchMessagesOperation.h new file mode 100644 index 000000000..7eb797b03 --- /dev/null +++ b/src/include/MailCore/MCPOPFetchMessagesOperation.h @@ -0,0 +1,37 @@ +// +// MCPOPFetchMessagesOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/16/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCPOPFETCHMESSAGESOPERATION_H + +#define MAILCORE_MCPOPFETCHMESSAGESOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT POPFetchMessagesOperation : public POPOperation { + public: + POPFetchMessagesOperation(); + virtual ~POPFetchMessagesOperation(); + + virtual Array * /* POPMessageInfo */ messages(); + + public: // subclass behavior + virtual void main(); + + private: + Array * /* POPMessageInfo */ mMessages; + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCPOPMessageInfo.h b/src/include/MailCore/MCPOPMessageInfo.h new file mode 100644 index 000000000..6d70fe301 --- /dev/null +++ b/src/include/MailCore/MCPOPMessageInfo.h @@ -0,0 +1,42 @@ +#ifndef MAILCORE_MCPOPMESSAGEINFO_H + +#define MAILCORE_MCPOPMESSAGEINFO_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT POPMessageInfo : public Object { + public: + POPMessageInfo(); + virtual ~POPMessageInfo(); + + virtual void setIndex(unsigned int index); + virtual unsigned int index(); + + virtual void setSize(unsigned int size); + virtual unsigned int size(); + + virtual void setUid(String * uid); + virtual String * uid(); + + public: // subclass behavior + POPMessageInfo(POPMessageInfo * other); + virtual String * description(); + virtual Object * copy(); + + private: + unsigned int mIndex; + unsigned int mSize; + String * mUid; + + void init(); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCPOPNoopOperation.h b/src/include/MailCore/MCPOPNoopOperation.h new file mode 100644 index 000000000..cc040c08a --- /dev/null +++ b/src/include/MailCore/MCPOPNoopOperation.h @@ -0,0 +1,32 @@ +// +// MCPOPNoopOperation.h +// mailcore2 +// +// Created by Robert Widmann on 9/24/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCPOPNOOPOPERATION_H + +#define MAILCORE_MCPOPNOOPOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT POPNoopOperation : public POPOperation { + public: + POPNoopOperation(); + virtual ~POPNoopOperation(); + + public: // subclass behavior + virtual void main(); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCPOPOperation.h b/src/include/MailCore/MCPOPOperation.h new file mode 100644 index 000000000..652e4a4bf --- /dev/null +++ b/src/include/MailCore/MCPOPOperation.h @@ -0,0 +1,53 @@ +// +// MCPOPOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/16/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCPOPOPERATION_H + +#define MAILCORE_MCPOPOPERATION_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class POPAsyncSession; + class POPOperationCallback; + + class MAILCORE_EXPORT POPOperation : public Operation, public POPProgressCallback { + public: + POPOperation(); + virtual ~POPOperation(); + + virtual void setSession(POPAsyncSession * session); + virtual POPAsyncSession * session(); + + virtual void setPopCallback(POPOperationCallback * callback); + virtual POPOperationCallback * popCallback(); + + virtual void setError(ErrorCode error); + virtual ErrorCode error(); + + virtual void start(); + + private: + POPAsyncSession * mSession; + POPOperationCallback * mPopCallback; + ErrorCode mError; + private: + virtual void bodyProgress(POPSession * session, unsigned int current, unsigned int maximum); + virtual void bodyProgressOnMainThread(void * context); + + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCPOPOperationCallback.h b/src/include/MailCore/MCPOPOperationCallback.h new file mode 100644 index 000000000..60714b883 --- /dev/null +++ b/src/include/MailCore/MCPOPOperationCallback.h @@ -0,0 +1,30 @@ +// +// MCPOPOperationCallback.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/16/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCPOPOPERATIONCALLBACK_H + +#define MAILCORE_MCPOPOPERATIONCALLBACK_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class POPOperation; + + class MAILCORE_EXPORT POPOperationCallback { + public: + virtual void bodyProgress(POPOperation * session, unsigned int current, unsigned int maximum) {}; + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCPOPProgressCallback.h b/src/include/MailCore/MCPOPProgressCallback.h new file mode 100644 index 000000000..cdee93325 --- /dev/null +++ b/src/include/MailCore/MCPOPProgressCallback.h @@ -0,0 +1,22 @@ +#ifndef MAILCORE_MCPOPPROGRESSCALLBACK_H + +#define MAILCORE_MCPOPPROGRESSCALLBACK_H + +#ifdef __cplusplus + +#include + +namespace mailcore { + + class POPSession; + + class MAILCORE_EXPORT POPProgressCallback { + public: + virtual void bodyProgress(POPSession * session, unsigned int current, unsigned int maximum) {}; + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCPOPSession.h b/src/include/MailCore/MCPOPSession.h new file mode 100644 index 000000000..bb1d9ee7c --- /dev/null +++ b/src/include/MailCore/MCPOPSession.h @@ -0,0 +1,106 @@ +#ifndef MAILCORE_MCPOPSESSION_H + +#define MAILCORE_MCPOPSESSION_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class POPMessageInfo; + class POPProgressCallback; + class MessageHeader; + + class MAILCORE_EXPORT POPSession : public Object { + public: + POPSession(); + virtual ~POPSession(); + + virtual void setHostname(String * hostname); + virtual String * hostname(); + + virtual void setPort(unsigned int port); + virtual unsigned int port(); + + virtual void setUsername(String * username); + virtual String * username(); + + virtual void setPassword(String * password); + virtual String * password(); + + virtual void setAuthType(AuthType authType); + virtual AuthType authType(); + + virtual void setConnectionType(ConnectionType connectionType); + virtual ConnectionType connectionType(); + + virtual void setTimeout(time_t timeout); + virtual time_t timeout(); + + virtual void setCheckCertificateEnabled(bool enabled); + virtual bool isCheckCertificateEnabled(); + + virtual void connect(ErrorCode * pError); + virtual void disconnect(); + + virtual void login(ErrorCode * pError); + + virtual void checkAccount(ErrorCode * pError); + + virtual void noop(ErrorCode * pError); + + Array * /* POPMessageInfo */ fetchMessages(ErrorCode * pError); + + MessageHeader * fetchHeader(unsigned int index, ErrorCode * pError); + MessageHeader * fetchHeader(POPMessageInfo * msg, ErrorCode * pError); + + Data * fetchMessage(unsigned int index, POPProgressCallback * callback, ErrorCode * pError); + Data * fetchMessage(POPMessageInfo * msg, POPProgressCallback * callback, ErrorCode * pError); + + void deleteMessage(unsigned int index, ErrorCode * pError); + void deleteMessage(POPMessageInfo * msg, ErrorCode * pError); + + virtual void setConnectionLogger(ConnectionLogger * logger); + virtual ConnectionLogger * connectionLogger(); + + public: // private + virtual void lockConnectionLogger(); + virtual void unlockConnectionLogger(); + virtual ConnectionLogger * connectionLoggerNoLock(); + + private: + String * mHostname; + unsigned int mPort; + String * mUsername; + String * mPassword; + AuthType mAuthType; + ConnectionType mConnectionType; + bool mCheckCertificateEnabled; + time_t mTimeout; + + mailpop3 * mPop; + POPCapability mCapabilities; + POPProgressCallback * mProgressCallback; + int mState; + + ConnectionLogger * mConnectionLogger; + MCB_LOCK_TYPE mConnectionLoggerLock; + + void init(); + void bodyProgress(unsigned int current, unsigned int maximum); + bool checkCertificate(); + static void body_progress(size_t current, size_t maximum, void * context); + void setup(); + void unsetup(); + void connectIfNeeded(ErrorCode * pError); + void loginIfNeeded(ErrorCode * pError); + void listIfNeeded(ErrorCode * pError); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCProvider.h b/src/include/MailCore/MCProvider.h new file mode 100644 index 000000000..ad8189b25 --- /dev/null +++ b/src/include/MailCore/MCProvider.h @@ -0,0 +1,18 @@ +// +// MCProvider.h +// mailcore2 +// +// Created by Robert Widmann on 4/28/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCPROVIDER_H + +#define MAILCORE_MCPROVIDER_H + +#include +#include +#include +#include + +#endif diff --git a/src/include/MailCore/MCRFC822.h b/src/include/MailCore/MCRFC822.h new file mode 100644 index 000000000..66c4d4083 --- /dev/null +++ b/src/include/MailCore/MCRFC822.h @@ -0,0 +1,11 @@ +#ifndef MAILCORE_MCRFC822_H + +#define MAILCORE_MCRFC822_H + +#include +#include +#include +#include +#include + +#endif diff --git a/src/include/MailCore/MCRange.h b/src/include/MailCore/MCRange.h new file mode 100644 index 000000000..9ec4f5680 --- /dev/null +++ b/src/include/MailCore/MCRange.h @@ -0,0 +1,60 @@ +#ifndef MAILCORE_MCRANGE_H + +#define MAILCORE_MCRANGE_H + +#ifdef __cplusplus + +#include + +#include + +#ifndef UINT64_MAX +# define UINT64_MAX 18446744073709551615ULL +#endif + +namespace mailcore { + + class IndexSet; + class String; + + // infinite length : UINT64_MAX + // empty range : location = UINT64_MAX + struct Range { + uint64_t location; + uint64_t length; + }; + + MAILCORE_EXPORT + extern Range RangeEmpty; + + MAILCORE_EXPORT + Range RangeMake(uint64_t location, uint64_t length); + + MAILCORE_EXPORT + IndexSet * RangeRemoveRange(Range range1, Range range2); + + MAILCORE_EXPORT + IndexSet * RangeUnion(Range range1, Range range2); + + MAILCORE_EXPORT + Range RangeIntersection(Range range1, Range range2); + + MAILCORE_EXPORT + bool RangeHasIntersection(Range range1, Range range2); + + MAILCORE_EXPORT + uint64_t RangeLeftBound(Range range); + + MAILCORE_EXPORT + uint64_t RangeRightBound(Range range); + + MAILCORE_EXPORT + String * RangeToString(Range range); + + MAILCORE_EXPORT + Range RangeFromString(String * rangeString); +} + +#endif + +#endif diff --git a/src/include/MailCore/MCRenderer.h b/src/include/MailCore/MCRenderer.h new file mode 100644 index 000000000..441b63b4d --- /dev/null +++ b/src/include/MailCore/MCRenderer.h @@ -0,0 +1,17 @@ +// +// MCRenderer.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 2/2/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCRENDERER_H + +#define MAILCORE_MCRENDERER_H + +#include +#include +#include + +#endif diff --git a/src/include/MailCore/MCSMTP.h b/src/include/MailCore/MCSMTP.h new file mode 100644 index 000000000..452e024ff --- /dev/null +++ b/src/include/MailCore/MCSMTP.h @@ -0,0 +1,8 @@ +#ifndef MAILCORE_MCSMTP_H + +#define MAILCORE_MCSMTP_H + +#include +#include + +#endif diff --git a/src/include/MailCore/MCSMTPAsyncSession.h b/src/include/MailCore/MCSMTPAsyncSession.h new file mode 100644 index 000000000..f272922a8 --- /dev/null +++ b/src/include/MailCore/MCSMTPAsyncSession.h @@ -0,0 +1,102 @@ +#ifndef MAILCORE_MCSMTPASYNCSESSION_H + +#define MAILCORE_MCSMTPASYNCSESSION_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MessageBuilder; + class SMTPOperation; + class SMTPSession; + class Address; + class SMTPOperationQueueCallback; + class SMTPConnectionLogger; + + class MAILCORE_EXPORT SMTPAsyncSession : public Object { + public: + SMTPAsyncSession(); + virtual ~SMTPAsyncSession(); + + virtual void setHostname(String * hostname); + virtual String * hostname(); + + virtual void setPort(unsigned int port); + virtual unsigned int port(); + + virtual void setUsername(String * username); + virtual String * username(); + + virtual void setPassword(String * password); + virtual String * password(); + + virtual void setOAuth2Token(String * token); + virtual String * OAuth2Token(); + + virtual void setAuthType(AuthType authType); + virtual AuthType authType(); + + virtual void setConnectionType(ConnectionType connectionType); + virtual ConnectionType connectionType(); + + virtual void setTimeout(time_t timeout); + virtual time_t timeout(); + + virtual void setCheckCertificateEnabled(bool enabled); + virtual bool isCheckCertificateEnabled(); + + virtual void setUseHeloIPEnabled(bool enabled); + virtual bool useHeloIPEnabled(); + + virtual void setConnectionLogger(ConnectionLogger * logger); + virtual ConnectionLogger * connectionLogger(); + +#if MC_HAS_GCD + virtual void setDispatchQueue(dispatch_queue_t dispatchQueue); + virtual dispatch_queue_t dispatchQueue(); +#endif + + virtual void setOperationQueueCallback(OperationQueueCallback * callback); + virtual OperationQueueCallback * operationQueueCallback(); + virtual bool isOperationQueueRunning(); + virtual void cancelAllOperations(); + + virtual SMTPOperation * loginOperation(); + virtual SMTPOperation * sendMessageOperation(Data * messageData); + virtual SMTPOperation * sendMessageOperation(Address * from, Array * recipients, + Data * messageData); + virtual SMTPOperation * sendMessageOperation(Address * from, Array * recipients, + String * filename); + virtual SMTPOperation * checkAccountOperation(Address * from); + virtual SMTPOperation * checkAccountOperation(Address * from, Address * to); + + virtual SMTPOperation * noopOperation(); + + virtual SMTPOperation * disconnectOperation(); + + public: // private + virtual void runOperation(SMTPOperation * operation); + virtual SMTPSession * session(); + virtual void tryAutomaticDisconnect(); + virtual void logConnection(ConnectionLogType logType, Data * buffer); + + private: + SMTPSession * mSession; + OperationQueue * mQueue; + SMTPOperationQueueCallback * mQueueCallback; + ConnectionLogger * mConnectionLogger; + MCB_LOCK_TYPE mConnectionLoggerLock; + SMTPConnectionLogger * mInternalLogger; + OperationQueueCallback * mOperationQueueCallback; + + virtual void tryAutomaticDisconnectAfterDelay(void * context); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCSMTPCheckAccountOperation.h b/src/include/MailCore/MCSMTPCheckAccountOperation.h new file mode 100644 index 000000000..3aef34637 --- /dev/null +++ b/src/include/MailCore/MCSMTPCheckAccountOperation.h @@ -0,0 +1,43 @@ +// +// MCSMTPCheckAccountOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCSMTPCHECKACCOUNTOPERATION_H + +#define MAILCORE_MCSMTPCHECKACCOUNTOPERATION_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT SMTPCheckAccountOperation : public SMTPOperation { + public: + SMTPCheckAccountOperation(); + virtual ~SMTPCheckAccountOperation(); + + virtual void setFrom(Address * from); + virtual Address * from(); + + virtual void setTo(Address * to); + virtual Address * to(); + + public: // subclass behavior + virtual void main(); + + private: + Address * mFrom; + Address * mTo; + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCSMTPDisconnectOperation.h b/src/include/MailCore/MCSMTPDisconnectOperation.h new file mode 100644 index 000000000..668e3c417 --- /dev/null +++ b/src/include/MailCore/MCSMTPDisconnectOperation.h @@ -0,0 +1,34 @@ +// +// SMTPDisconnectOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 6/22/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCSMTPDISCONNECTOPERATION_H + +#define MAILCORE_MCSMTPDISCONNECTOPERATION_H + +#include +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT SMTPDisconnectOperation : public SMTPOperation { + public: + SMTPDisconnectOperation(); + virtual ~SMTPDisconnectOperation(); + + public: // subclass behavior + virtual void main(); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCSMTPLoginOperation.h b/src/include/MailCore/MCSMTPLoginOperation.h new file mode 100644 index 000000000..fd9934592 --- /dev/null +++ b/src/include/MailCore/MCSMTPLoginOperation.h @@ -0,0 +1,34 @@ +// +// MCSMTPLoginOperation.h +// mailcore2 +// +// Created by Hironori Yoshida on 10/29/14. +// Copyright (c) 2014 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCSMTPLOGINOPERATION_H + +#define MAILCORE_MCSMTPLOGINOPERATION_H + +#include +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT SMTPLoginOperation : public SMTPOperation { + public: + SMTPLoginOperation(); + virtual ~SMTPLoginOperation(); + + public: // subclass behavior + virtual void main(); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCSMTPNoopOperation.h b/src/include/MailCore/MCSMTPNoopOperation.h new file mode 100644 index 000000000..ad194367d --- /dev/null +++ b/src/include/MailCore/MCSMTPNoopOperation.h @@ -0,0 +1,34 @@ +// +// MCSMTPNoopOperation.h +// mailcore2 +// +// Created by Robert Widmann on 9/24/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCSMTPNOOPOPERATION_H + +#define MAILCORE_MCSMTPNOOPOPERATION_H + +#include +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT SMTPNoopOperation : public SMTPOperation { + public: + SMTPNoopOperation(); + virtual ~SMTPNoopOperation(); + + public: // subclass behavior + virtual void main(); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCSMTPOperation.h b/src/include/MailCore/MCSMTPOperation.h new file mode 100644 index 000000000..d1c4182b5 --- /dev/null +++ b/src/include/MailCore/MCSMTPOperation.h @@ -0,0 +1,56 @@ +// +// MCSMTPOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/11/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCSMTPOPERATION_H + +#define MAILCORE_MCSMTPOPERATION_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class SMTPAsyncSession; + class SMTPOperationCallback; + + class MAILCORE_EXPORT SMTPOperation : public Operation, public SMTPProgressCallback { + public: + SMTPOperation(); + virtual ~SMTPOperation(); + + virtual void setSession(SMTPAsyncSession * session); + virtual SMTPAsyncSession * session(); + + virtual void setSmtpCallback(SMTPOperationCallback * callback); + virtual SMTPOperationCallback * smtpCallback(); + + virtual void setError(ErrorCode error); + virtual ErrorCode error(); + + virtual String * lastSMTPResponse(); + + virtual int lastSMTPResponseCode(); + + virtual void start(); + + private: + SMTPAsyncSession * mSession; + SMTPOperationCallback * mSmtpCallback; + ErrorCode mError; + private: + virtual void bodyProgress(SMTPSession * session, unsigned int current, unsigned int maximum); + virtual void bodyProgressOnMainThread(void * context); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCSMTPOperationCallback.h b/src/include/MailCore/MCSMTPOperationCallback.h new file mode 100644 index 000000000..a5cfdd84c --- /dev/null +++ b/src/include/MailCore/MCSMTPOperationCallback.h @@ -0,0 +1,30 @@ +// +// MCSMTPOperationCallback.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/11/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCSMTPOPERATIONCALLBACK_H + +#define MAILCORE_MCSMTPOPERATIONCALLBACK_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class SMTPOperation; + + class MAILCORE_EXPORT SMTPOperationCallback { + public: + virtual void bodyProgress(SMTPOperation * session, unsigned int current, unsigned int maximum) {}; + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCSMTPProgressCallback.h b/src/include/MailCore/MCSMTPProgressCallback.h new file mode 100644 index 000000000..7cc524a26 --- /dev/null +++ b/src/include/MailCore/MCSMTPProgressCallback.h @@ -0,0 +1,22 @@ +#ifndef MAILCORE_MCSMTPPROGRESSCALLBACK_H + +#define MAILCORE_MCSMTPPROGRESSCALLBACK_H + +#ifdef __cplusplus + +#include + +namespace mailcore { + + class SMTPSession; + + class MAILCORE_EXPORT SMTPProgressCallback { + public: + virtual void bodyProgress(SMTPSession * session, unsigned int current, unsigned int maximum) {}; + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCSMTPSendWithDataOperation.h b/src/include/MailCore/MCSMTPSendWithDataOperation.h new file mode 100644 index 000000000..256851485 --- /dev/null +++ b/src/include/MailCore/MCSMTPSendWithDataOperation.h @@ -0,0 +1,52 @@ +// +// SMTPSendWithDataOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/10/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCSMTPSENDWITHDATAOPERATION_H + +#define MAILCORE_MCSMTPSENDWITHDATAOPERATION_H + +#include +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT SMTPSendWithDataOperation : public SMTPOperation { + public: + SMTPSendWithDataOperation(); + virtual ~SMTPSendWithDataOperation(); + + virtual void setFrom(Address * from); + virtual Address * from(); + + virtual void setRecipients(Array * recipients); + virtual Array * recipients(); + + virtual void setMessageData(Data * data); + virtual Data * messageData(); + + virtual void setMessageFilepath(String * path); + virtual String * messageFilepath(); + + public: // subclass behavior + virtual void main(); + virtual void cancel(); + private: + Data * mMessageData; + String * mMessageFilepath; + Array * mRecipients; + Address * mFrom; + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCSMTPSession.h b/src/include/MailCore/MCSMTPSession.h new file mode 100644 index 000000000..f7c118d61 --- /dev/null +++ b/src/include/MailCore/MCSMTPSession.h @@ -0,0 +1,136 @@ +#ifndef MAILCORE_MCSMTPSESSION_H + +#define MAILCORE_MCSMTPSESSION_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class Address; + class SMTPProgressCallback; + class MessageBuilder; + + class MAILCORE_EXPORT SMTPSession : public Object { + public: + SMTPSession(); + virtual ~SMTPSession(); + + virtual void setHostname(String * hostname); + virtual String * hostname(); + + virtual void setPort(unsigned int port); + virtual unsigned int port(); + + virtual void setUsername(String * username); + virtual String * username(); + + virtual void setPassword(String * password); + virtual String * password(); + + // To authenticate using OAuth2, username and oauth2token should be set. + // auth type to use is AuthTypeOAuth2. + virtual void setOAuth2Token(String * token); + virtual String * OAuth2Token(); + + virtual void setAuthType(AuthType authType); + virtual AuthType authType(); + + virtual void setConnectionType(ConnectionType connectionType); + virtual ConnectionType connectionType(); + + virtual void setTimeout(time_t timeout); + virtual time_t timeout(); + + virtual void setCheckCertificateEnabled(bool enabled); + virtual bool isCheckCertificateEnabled(); + + virtual void setUseHeloIPEnabled(bool enabled); + virtual bool useHeloIPEnabled(); + + virtual String * lastSMTPResponse(); + + virtual int lastSMTPResponseCode(); + + virtual void connect(ErrorCode * pError); + virtual void disconnect(); + + virtual void login(ErrorCode * pError); + + virtual void checkAccount(Address * from, ErrorCode * pError); + virtual void checkAccount(Address * from, Address * to, ErrorCode * pError); + + virtual void sendMessage(Data * messageData, SMTPProgressCallback * callback, ErrorCode * pError); + virtual void sendMessage(Address * from, Array * /* Address */ recipients, Data * messageData, + SMTPProgressCallback * callback, ErrorCode * pError); + virtual void sendMessage(Address * from, Array * /* Address */ recipients, String * messagePath, + SMTPProgressCallback * callback, ErrorCode * pError); + + virtual void cancelMessageSending(); + + virtual void setConnectionLogger(ConnectionLogger * logger); + virtual ConnectionLogger * connectionLogger(); + + virtual void noop(ErrorCode * pError); + + public: // private + virtual void lockConnectionLogger(); + virtual void unlockConnectionLogger(); + virtual ConnectionLogger * connectionLoggerNoLock(); + + private: + String * mHostname; + unsigned int mPort; + String * mUsername; + String * mPassword; + String * mOAuth2Token; + AuthType mAuthType; + ConnectionType mConnectionType; + time_t mTimeout; + bool mCheckCertificateEnabled; + bool mUseHeloIPEnabled; + bool mShouldDisconnect; + bool mSendingCancelled; + bool mCanCancel; + + mailsmtp * mSmtp; + SMTPProgressCallback * mProgressCallback; + int mState; + String * mLastSMTPResponse; + int mLastLibetpanError; + int mLastSMTPResponseCode; + MCB_LOCK_TYPE mCancelLock; + MCB_LOCK_TYPE mCanCancelLock; + + ConnectionLogger * mConnectionLogger; + MCB_LOCK_TYPE mConnectionLoggerLock; + + bool mOutlookServer; + + void init(); + Data * dataWithFilteredBcc(Data * data); + static void body_progress(size_t current, size_t maximum, void * context); + void bodyProgress(unsigned int current, unsigned int maximum); + void setup(); + void unsetup(); + void connectIfNeeded(ErrorCode * pError); + bool checkCertificate(); + void setSendingCancelled(bool isCancelled); + + void sendMessage(MessageBuilder * msg, SMTPProgressCallback * callback, ErrorCode * pError); + void internalSendMessage(Address * from, Array * /* Address */ recipients, Data * messageData, + SMTPProgressCallback * callback, ErrorCode * pError); + + public: // private + virtual bool isDisconnected(); + virtual void loginIfNeeded(ErrorCode * pError); + virtual void saveLastResponse(); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCSet.h b/src/include/MailCore/MCSet.h new file mode 100644 index 000000000..8b477cc11 --- /dev/null +++ b/src/include/MailCore/MCSet.h @@ -0,0 +1,49 @@ +#ifndef MAILCORE_CSET_H + +#define MAILCORE_CSET_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class String; + class Array; + class HashMap; + + class MAILCORE_EXPORT Set : public Object { + public: + Set(); + Set(Set * o); + + static Set * set(); + static Set * setWithArray(Array * objects); + + virtual unsigned int count(); + virtual void addObject(Object * obj); + virtual void removeObject(Object * obj); + virtual bool containsObject(Object * obj); + virtual Object * member(Object * obj); + + virtual Array * allObjects(); + virtual void removeAllObjects(); + virtual void addObjectsFromArray(Array * objects); + + public: // subclass behavior + virtual ~Set(); + virtual String * description(); + virtual Object * copy(); + virtual HashMap * serializable(); + virtual void importSerializable(HashMap * serializable); + + private: + HashMap * mHash; + void init(); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCSizeFormatter.h b/src/include/MailCore/MCSizeFormatter.h new file mode 100644 index 000000000..cfc8090fd --- /dev/null +++ b/src/include/MailCore/MCSizeFormatter.h @@ -0,0 +1,30 @@ +// +// MCSizeFormatter.h +// testUI +// +// Created by DINH Viêt Hoà on 1/29/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCSIZEFORMATTER_H + +#define MAILCORE_MCSIZEFORMATTER_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class String; + + class MAILCORE_EXPORT SizeFormatter : public Object { + public: + static String * stringWithSize(unsigned int size); + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCString.h b/src/include/MailCore/MCString.h new file mode 100644 index 000000000..5ee2ad651 --- /dev/null +++ b/src/include/MailCore/MCString.h @@ -0,0 +1,152 @@ +#ifndef MAILCORE_MCSTR_H + +#define MAILCORE_MCSTR_H + +#include +#include +#include + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class Data; + class Array; + + class MAILCORE_EXPORT String : public Object { + public: + String(const UChar * unicodeChars = NULL); + String(const UChar * unicodeChars, unsigned int length); + String(const char * UTF8Characters); + String(Data * data, const char * charset); + String(const char * bytes, unsigned int length, const char * charset = NULL); + virtual ~String(); + + static String * string(); + static String * stringWithUTF8Format(const char * format, ...); + static String * stringWithVUTF8Format(const char * format, va_list ap); + static String * stringWithUTF8Characters(const char * UTF8Characters); + static String * stringWithCharacters(const UChar * characters); + static String * stringWithCharacters(const UChar * characters, unsigned int length); + static String * stringWithData(Data * data, const char * charset = NULL); + + virtual const UChar * unicodeCharacters(); + virtual const char * UTF8Characters(); + virtual unsigned int length(); + + virtual void appendString(String * otherString); + virtual void appendUTF8Format(const char * format, ...); + virtual void appendCharacters(const UChar * unicodeCharacters); + virtual void appendCharactersLength(const UChar * unicodeCharacters, unsigned int length); + virtual void appendUTF8Characters(const char * UTF8Characters); + virtual void setString(String * otherString); + virtual void setUTF8Characters(const char * UTF8Characters); + virtual void setCharacters(const UChar * unicodeCharacters); + + virtual String * stringByAppendingString(String * otherString); + virtual String * stringByAppendingUTF8Format(const char * format, ...); + virtual String * stringByAppendingUTF8Characters(const char * UTF8Characters); + virtual String * stringByAppendingCharacters(const UChar * unicodeCharacters); + virtual String * stringByAppendingPathComponent(String * component); + virtual String * stringByDeletingLastPathComponent(); + virtual String * stringByDeletingPathExtension(); + + virtual int compare(String * otherString); + virtual int caseInsensitiveCompare(String * otherString); + virtual String * lowercaseString(); + virtual String * uppercaseString(); + + virtual UChar characterAtIndex(unsigned int idx); + virtual void deleteCharactersInRange(Range range); + virtual unsigned int replaceOccurrencesOfString(String * occurrence, String * replacement); + virtual int locationOfString(String * occurrence); + virtual int lastLocationOfString(String * occurrence); + + virtual Array * componentsSeparatedByString(String * separator); + + virtual bool isEqualCaseInsensitive(String * otherString); + + // Additions + static String * stringByDecodingMIMEHeaderValue(const char * phrase); + virtual Data * encodedAddressDisplayNameValue(); + virtual Data * encodedMIMEHeaderValue(); + virtual Data * encodedMIMEHeaderValueForSubject(); + virtual String * extractedSubject(); + virtual String * extractedSubjectAndKeepBracket(bool keepBracket); + static String * uuidString(); + + virtual bool hasSuffix(String * suffix); + virtual bool hasPrefix(String * prefix); + + virtual String * substringFromIndex(unsigned int idx); + virtual String * substringToIndex(unsigned int idx); + virtual String * substringWithRange(Range range); + + virtual String * flattenHTML(); + virtual String * flattenHTMLAndShowBlockquote(bool showBlockquote); + virtual String * flattenHTMLAndShowBlockquoteAndLink(bool showBlockquote, bool showLink); + + virtual String * stripWhitespace(); + + virtual String * lastPathComponent(); + virtual String * pathExtension(); + virtual Data * dataUsingEncoding(const char * charset = NULL); + + virtual const char * fileSystemRepresentation(); + static String * stringWithFileSystemRepresentation(const char * filename); + + int intValue(); + unsigned int unsignedIntValue(); + long longValue(); + unsigned long unsignedLongValue(); + long long longLongValue(); + unsigned long long unsignedLongLongValue(); + double doubleValue(); + + virtual Data * mUTF7EncodedData(); + static String * stringWithMUTF7Data(Data * data); + virtual String * mUTF7EncodedString(); + virtual String * mUTF7DecodedString(); + + virtual String * htmlEncodedString(); + virtual String * cleanedHTMLString(); + virtual String * htmlMessageContent(); + + virtual Data * decodedBase64Data(); + + virtual String * urlDecodedString(); + virtual String * urlEncodedString(); + + public: // private + static String * uniquedStringWithUTF8Characters(const char * UTF8Characters); + + public: // subclass behavior + String(String * otherString); + virtual String * description(); + virtual Object * copy(); + virtual bool isEqual(Object * otherObject); + virtual unsigned int hash(); + virtual HashMap * serializable(); + virtual void importSerializable(HashMap * serializable); + + private: + UChar * mUnicodeChars; + unsigned int mLength; + unsigned int mAllocated; + void allocate(unsigned int length, bool force = false); + void reset(); + int compareWithCaseSensitive(String * otherString, bool caseSensitive); + void appendBytes(const char * bytes, unsigned int length, const char * charset); + void appendUTF8CharactersLength(const char * UTF8Characters, unsigned int length); + }; + + MAILCORE_EXPORT + void setICUDataDirectory(String * directory); +} + +#endif + +#endif diff --git a/src/include/MailCore/MCUtils.h b/src/include/MailCore/MCUtils.h new file mode 100644 index 000000000..7d2531031 --- /dev/null +++ b/src/include/MailCore/MCUtils.h @@ -0,0 +1,90 @@ +#ifndef MAILCORE_MCUTILS_H + +#define MAILCORE_MCUTILS_H + +#ifdef __cplusplus + +#define MC_SAFE_RETAIN(o) ((o) != NULL ? (o)->retain() : NULL) +#define MC_SAFE_COPY(o) ((o) != NULL ? (o)->copy() : NULL) + +#define MC_SAFE_RELEASE(o) \ + do { \ + if ((o) != NULL) { \ + (o)->release(); \ + (o) = NULL; \ + } \ + } while (0) + +#define MC_SAFE_REPLACE_RETAIN(type, mField, value) \ + do { \ + MC_SAFE_RELEASE(mField); \ + mField = (type *) MC_SAFE_RETAIN(value); \ + } while (0) + +#define MC_SAFE_REPLACE_COPY(type, mField, value) \ + do { \ + MC_SAFE_RELEASE(mField); \ + mField = (type *) MC_SAFE_COPY(value); \ + } while (0) + +#define MCSTR(str) mailcore::String::uniquedStringWithUTF8Characters("" str "") + +#define MCUTF8(str) MCUTF8DESC(str) +#define MCUTF8DESC(obj) ((obj) != NULL ? (obj)->description()->UTF8Characters() : NULL ) + +#define MCLOCALIZEDSTRING(key) key + +#define MCISKINDOFCLASS(instance, class) (dynamic_cast(instance) != NULL) + +#endif + +#ifdef _MSC_VER +# ifdef MAILCORE_DLL +# define MAILCORE_EXPORT __declspec(dllexport) +# else +# define MAILCORE_EXPORT __declspec(dllimport) +# endif +#else +# define MAILCORE_EXPORT +#endif + +#ifdef __ANDROID_API__ +#if __ANDROID_API__ < 21 +#include +extern int iswblank(wint_t); +extern int vfwscanf(FILE*, const wchar_t*, va_list); +extern int vswscanf(const wchar_t*, const wchar_t*, va_list); +extern int vwscanf(const wchar_t*, va_list); +extern float wcstof(const wchar_t*, wchar_t**); +extern long double wcstold(const wchar_t*, wchar_t**); +extern long long wcstoll(const wchar_t*, wchar_t**, int); +extern unsigned long long wcstoull(const wchar_t*, wchar_t**, int); +#endif +#endif + +#ifdef __clang__ + +#if __has_feature(attribute_analyzer_noreturn) +#define CLANG_ANALYZER_NORETURN __attribute__((analyzer_noreturn)) +#else +#define CLANG_ANALYZER_NORETURN +#endif + +#define ATTRIBUTE_RETURNS_NONNULL __attribute__((returns_nonnull)) + +#else + +#define CLANG_ANALYZER_NORETURN +#define ATTRIBUTE_RETURNS_NONNULL + +#endif + +#ifndef DEPRECATED_ATTRIBUTE +#ifdef _MSC_VER +#define DEPRECATED_ATTRIBUTE +#else +#define DEPRECATED_ATTRIBUTE __attribute__((deprecated)) +#endif +#endif + +#endif diff --git a/src/include/MailCore/MCValue.h b/src/include/MailCore/MCValue.h new file mode 100644 index 000000000..835cf6b6a --- /dev/null +++ b/src/include/MailCore/MCValue.h @@ -0,0 +1,113 @@ +#ifndef MAILCORE_MCVALUE_H + +#define MAILCORE_MCVALUE_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class String; + + enum { + ValueTypeNone, + ValueTypeBool, + ValueTypeChar, + ValueTypeUnsignedChar, + ValueTypeShort, + ValueTypeUnsignedShort, + ValueTypeInt, + ValueTypeUnsignedInt, + ValueTypeLong, + ValueTypeUnsignedLong, + ValueTypeLongLong, + ValueTypeUnsignedLongLong, + ValueTypeFloat, + ValueTypeDouble, + ValueTypePointer, + ValueTypeData, + }; + + class MAILCORE_EXPORT Value : public Object { + public: + virtual ~Value(); + + static Value * valueWithBoolValue(bool value); + static Value * valueWithCharValue(char value); + static Value * valueWithUnsignedCharValue(unsigned char value); + static Value * valueWithShortValue(short value); + static Value * valueWithUnsignedShortValue(unsigned short value); + static Value * valueWithIntValue(int value); + static Value * valueWithUnsignedIntValue(unsigned int value); + static Value * valueWithLongValue(long value); + static Value * valueWithUnsignedLongValue(unsigned long value); + static Value * valueWithLongLongValue(long long value); + static Value * valueWithUnsignedLongLongValue(unsigned long long value); + static Value * valueWithFloatValue(float value); + static Value * valueWithDoubleValue(double value); + static Value * valueWithPointerValue(void * value); + static Value * valueWithData(const char * value, int length); + + virtual bool boolValue(); + virtual char charValue(); + virtual unsigned char unsignedCharValue(); + virtual short shortValue(); + virtual unsigned short unsignedShortValue(); + virtual int intValue(); + virtual unsigned int unsignedIntValue(); + virtual long longValue(); + virtual unsigned long unsignedLongValue(); + virtual long long longLongValue(); + virtual unsigned long long unsignedLongLongValue(); + virtual float floatValue(); + virtual double doubleValue(); + virtual void * pointerValue(); + virtual void dataValue(const char ** p_value, int * p_length); + + public: // subclass behavior + Value(Value * other); + virtual String * description(); + virtual bool isEqual(Object * otherObject); + virtual unsigned int hash(); + Object * copy(); + virtual HashMap * serializable(); + virtual void importSerializable(HashMap * serializable); + + public: // private + static void * createObject(); + + private: + int mType; + union { + bool boolValue; + char charValue; + unsigned char unsignedCharValue; + short shortValue; + unsigned short unsignedShortValue; + int intValue; + unsigned int unsignedIntValue; + long longValue; + unsigned long unsignedLongValue; + long long longLongValue; + unsigned long long unsignedLongLongValue; + float floatValue; + double doubleValue; + void * pointerValue; + struct { + char * data; + int length; + } dataValue; + } mValue; + Value(); + + public: // private + virtual int type(); + + }; + +} + +#endif + +#endif diff --git a/src/include/MailCore/MCWin32.h b/src/include/MailCore/MCWin32.h new file mode 100644 index 000000000..222a9c9f7 --- /dev/null +++ b/src/include/MailCore/MCWin32.h @@ -0,0 +1,96 @@ +#ifndef MAILCORE_MCWIN32_H + +#define MAILCORE_MCWIN32_H + +// It must be included at the beginning of the file. + +#ifdef _MSC_VER + +#define _CRT_RAND_S +#include + +#ifdef __cplusplus +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +// io.h declares POSIX-compat unlink; must come before the macros below (DSK-658) +#include +#include + +#define MIN(a,b) (((a)<(b))?(a):(b)) +#define MAX(a,b) (((a)>(b))?(a):(b)) +#define strcasecmp _stricmp +#define strncasecmp _strnicmp +#define strcasestr mailcore::win32_strcasestr +#define strdup _strdup +#define fileno _fileno +// DSK-658: paths are UTF-8; narrow CRT calls read them via the ANSI codepage +// and fail on non-ANSI paths, so route them through wide-char wrappers. +#define unlink mailcore::win32_unlink +#define mkdir mailcore::win32_mkdir +#define stat(path, buffer) mailcore::win32_stat(path, buffer) +#define fopen mailcore::win32_fopen +#define gmtime_r mailcore::win32_gmtime_r +#define localtime_r mailcore::win32_localtime_r +#define gettimeofday mailcore::win32_gettimeofday +#define getpid mailcore::win32_getpid +#define snprintf mailcore::win32_snprintf +#define vasprintf mailcore::win32_vasprintf +#define timegm mailcore::win32_timegm +#define random mailcore::win32_random +#define getpid mailcore::win32_getpid +#define mkdtemp mailcore::win32_mkdtemp +#define mmap mailcore::win32_mmap +#define munmap mailcore::win32_munmap + +#define S_ISDIR(m) ((m & _S_IFDIR) != 0) + +#define PROT_READ 1 +#define PROT_WRITE 2 +#define MAP_FAILED ((void*)-1) + +#define MAP_SHARED 0x01 +#define MAP_PRIVATE 0x02 + +#ifndef pid_t +typedef int pid_t; +#endif + +#ifdef __cplusplus +namespace mailcore { + + struct tm * win32_gmtime_r(const time_t *clock, struct tm *result); + struct tm * win32_localtime_r(const time_t *clock, struct tm *result); + time_t win32_timegm(struct tm *timeptr); + int win32_gettimeofday(struct timeval * tp, struct timezone * tzp); + + FILE * win32_fopen(const char * filename, const char * mode); + int win32_unlink(const char * path); + int win32_mkdir(const char * path); + int win32_stat(const char * path, struct stat * buffer); + int win32_vasprintf(char **strp, const char *fmt, va_list ap); + int win32_snprintf(char * str, size_t size, const char * format, ...); + + char * win32_strcasestr(const char * s, const char * find); + + long win32_random(void); + pid_t win32_getpid(void); + + char * win32_mkdtemp(char *name_template); + + void * win32_mmap(void * start, size_t length, int prot, int flags, int fd, off_t offset); + int win32_munmap(void * start, size_t length); +} +#endif + +#endif + +#endif diff --git a/src/include/MailCore/MCZip.h b/src/include/MailCore/MCZip.h new file mode 100644 index 000000000..e7326f0fc --- /dev/null +++ b/src/include/MailCore/MCZip.h @@ -0,0 +1,19 @@ +#ifndef MAILCORE_MCZIP_H + +#ifdef __cplusplus + +#include +#include + +namespace mailcore { + + ErrorCode CreateZipFileFromFolder(String * zipFilename, String * folder); + + String * CreateTemporaryZipFileFromFolder(String * folder); + void RemoveTemporaryZipFile(String * zipFilename); + +}; + +#endif + +#endif diff --git a/src/include/MailCore/MailCore.h b/src/include/MailCore/MailCore.h new file mode 100644 index 000000000..80ec3b2ed --- /dev/null +++ b/src/include/MailCore/MailCore.h @@ -0,0 +1,120 @@ +// +// mailcore.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/10/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MAILCORE_H + +#define MAILCORE_MAILCORE_H + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#endif diff --git a/src/include/MailCore/MailCoreString.h b/src/include/MailCore/MailCoreString.h new file mode 100644 index 000000000..34e3dafcb --- /dev/null +++ b/src/include/MailCore/MailCoreString.h @@ -0,0 +1,39 @@ +#ifndef MAILCORE_CSTRING_H +#define MAILCORE_CSTRING_H + +#include "stdint.h" +#include "CBase.h" +#include "CObject.h" +#include "CData.h" + +#ifdef __cplusplus + +namespace mailcore { + class String; +} + +extern "C" { +#endif + + C_SYNTHESIZE_STRUCT_DEFINITION(MailCoreString, mailcore::String) + + C_SYNTHESIZE_COBJECT_CAST_DEFINITION(MailCoreString) + + C_SYNTHESIZE_STATIC_FUNC_DEFINITION(MailCoreString, MailCoreString, stringWithCharacters, const char*, unsigned int) + + C_SYNTHESIZE_READONLY_PROPERTY_DEFINITION(MailCoreString, const UChar*, unicodeCharacters) + C_SYNTHESIZE_READONLY_PROPERTY_DEFINITION(MailCoreString, unsigned int, length) + + C_SYNTHESIZE_FUNC_DEFINITION(MailCoreString, MailCoreString, mUTF7DecodedString) + C_SYNTHESIZE_FUNC_DEFINITION(MailCoreString, MailCoreString, mUTF7EncodedString) + + C_SYNTHESIZE_FUNC_DEFINITION(MailCoreString, bool, isEqual, MailCoreString) + + C_SYNTHESIZE_FUNC_DEFINITION(CData, MailCoreString, stringWithDetectedCharset, MailCoreString) + C_SYNTHESIZE_FUNC_DEFINITION(CData, MailCoreString, charsetWithFilteredHTML, bool) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/java/JavaHandle.cpp b/src/java/JavaHandle.cpp index 1bf799e3a..fdefc49a7 100644 --- a/src/java/JavaHandle.cpp +++ b/src/java/JavaHandle.cpp @@ -2,15 +2,15 @@ using namespace mailcore; -static jfieldID getField(JNIEnv * env, jobject obj, const char * fieldName) +static jfieldID getField(JNIEnv * env, jobject obj, const char * fieldName, const char * fieldClass) { jclass c = env->GetObjectClass(obj); - return env->GetFieldID(c, fieldName, "J"); + return env->GetFieldID(c, fieldName, fieldClass); } static jfieldID getHandleField(JNIEnv * env, jobject obj) { - return getField(env, obj, "nativeHandle"); + return getField(env, obj, "nativeHandle", "J"); } void * mailcore::getHandle(JNIEnv * env, jobject obj) @@ -27,17 +27,17 @@ void mailcore::setHandle(JNIEnv *env, jobject obj, void *t) void * mailcore::getCustomHandle(JNIEnv * env, jobject obj, const char * fieldName) { - jlong handle = env->GetLongField(obj, getField(env, obj, fieldName)); + jlong handle = env->GetLongField(obj, getField(env, obj, fieldName, "J")); return (void *) handle; } void mailcore::setCustomHandle(JNIEnv *env, jobject obj, const char * fieldName, void *t) { jlong handle = reinterpret_cast(t); - env->SetLongField(obj, getField(env, obj, fieldName), handle); + env->SetLongField(obj, getField(env, obj, fieldName, "J"), handle); } -jobject mailcore::getObjectField(JNIEnv *env, jobject obj, const char * fieldName) +jobject mailcore::getObjectField(JNIEnv *env, jobject obj, const char * fieldName, const char * fieldClass) { - return env->GetObjectField(obj, getField(env, obj, fieldName)); + return env->GetObjectField(obj, getField(env, obj, fieldName, fieldClass)); } \ No newline at end of file diff --git a/src/java/JavaHandle.h b/src/java/JavaHandle.h index 19e8aee8e..6c2b94135 100644 --- a/src/java/JavaHandle.h +++ b/src/java/JavaHandle.h @@ -9,7 +9,7 @@ namespace mailcore { void setHandle(JNIEnv * env, jobject obj, void * t); void * getCustomHandle(JNIEnv * env, jobject obj, const char * fieldName); void setCustomHandle(JNIEnv *env, jobject obj, const char * fieldName, void *t); - jobject getObjectField(JNIEnv *env, jobject obj, const char * fieldName); + jobject getObjectField(JNIEnv *env, jobject obj, const char * fieldName, const char * fieldClass); } #endif diff --git a/src/java/JavaIMAPOperationCallback.cpp b/src/java/JavaIMAPOperationCallback.cpp index fba857b80..c37e0c585 100644 --- a/src/java/JavaIMAPOperationCallback.cpp +++ b/src/java/JavaIMAPOperationCallback.cpp @@ -29,7 +29,7 @@ void JavaIMAPOperationCallback::bodyProgress(IMAPOperation * session, unsigned i JNIEnv * env = mEnv; jclass cls = mEnv->GetObjectClass(mListener); jmethodID mid = mEnv->GetMethodID(cls, "bodyProgress", "(JJ)V"); - mEnv->CallVoidMethod(mListener, mid); + mEnv->CallVoidMethod(mListener, mid, (jlong) current, (jlong) maximum); } void JavaIMAPOperationCallback::itemProgress(IMAPOperation * session, unsigned int current, unsigned int maximum) @@ -41,5 +41,5 @@ void JavaIMAPOperationCallback::itemProgress(IMAPOperation * session, unsigned i JNIEnv * env = mEnv; jclass cls = mEnv->GetObjectClass(mListener); jmethodID mid = mEnv->GetMethodID(cls, "itemProgress", "(JJ)V"); - mEnv->CallVoidMethod(mListener, mid); + mEnv->CallVoidMethod(mListener, mid, (jlong) current, (jlong) maximum); } diff --git a/src/java/TypesUtils.cpp b/src/java/TypesUtils.cpp index 92efe4e97..7e1851216 100644 --- a/src/java/TypesUtils.cpp +++ b/src/java/TypesUtils.cpp @@ -112,79 +112,79 @@ static jobject valueObjectToJavaConverter(JNIEnv * env, Object * obj) break; case mailcore::ValueTypeBool: // bool - cls = env->FindClass("java/util/Boolean"); + cls = env->FindClass("java/lang/Boolean"); constructor = env->GetMethodID(cls, "", "(Z)V"); result = env->NewObject(cls, constructor, value->boolValue()); break; case mailcore::ValueTypeChar: // byte - cls = env->FindClass("java/util/Byte"); + cls = env->FindClass("java/lang/Byte"); constructor = env->GetMethodID(cls, "", "(B)V"); result = env->NewObject(cls, constructor, value->charValue()); break; case mailcore::ValueTypeUnsignedChar: // short - cls = env->FindClass("java/util/Short"); + cls = env->FindClass("java/lang/Short"); constructor = env->GetMethodID(cls, "", "(S)V"); result = env->NewObject(cls, constructor, value->unsignedCharValue()); break; case mailcore::ValueTypeShort: // short - cls = env->FindClass("java/util/Short"); + cls = env->FindClass("java/lang/Short"); constructor = env->GetMethodID(cls, "", "(S)V"); result = env->NewObject(cls, constructor, value->shortValue()); break; case mailcore::ValueTypeUnsignedShort: // int - cls = env->FindClass("java/util/Integer"); + cls = env->FindClass("java/lang/Integer"); constructor = env->GetMethodID(cls, "", "(I)V"); result = env->NewObject(cls, constructor, value->intValue()); break; case mailcore::ValueTypeInt: // int - cls = env->FindClass("java/util/Integer"); + cls = env->FindClass("java/lang/Integer"); constructor = env->GetMethodID(cls, "", "(I)V"); result = env->NewObject(cls, constructor, value->intValue()); break; case mailcore::ValueTypeUnsignedInt: // long - cls = env->FindClass("java/util/Long"); + cls = env->FindClass("java/lang/Long"); constructor = env->GetMethodID(cls, "", "(J)V"); result = env->NewObject(cls, constructor, value->unsignedIntValue()); break; case mailcore::ValueTypeLong: // long - cls = env->FindClass("java/util/Long"); + cls = env->FindClass("java/lang/Long"); constructor = env->GetMethodID(cls, "", "(J)V"); result = env->NewObject(cls, constructor, value->longValue()); break; case mailcore::ValueTypeUnsignedLong: // long - cls = env->FindClass("java/util/Long"); + cls = env->FindClass("java/lang/Long"); constructor = env->GetMethodID(cls, "", "(J)V"); result = env->NewObject(cls, constructor, value->unsignedLongValue()); break; case mailcore::ValueTypeLongLong: // long - cls = env->FindClass("java/util/Long"); + cls = env->FindClass("java/lang/Long"); constructor = env->GetMethodID(cls, "", "(J)V"); result = env->NewObject(cls, constructor, value->longLongValue()); break; case mailcore::ValueTypeUnsignedLongLong: // long - might break - cls = env->FindClass("java/util/Long"); + cls = env->FindClass("java/lang/Long"); constructor = env->GetMethodID(cls, "", "(J)V"); result = env->NewObject(cls, constructor, value->unsignedLongLongValue()); break; case mailcore::ValueTypeFloat: // float - cls = env->FindClass("java/util/Float"); + cls = env->FindClass("java/lang/Float"); constructor = env->GetMethodID(cls, "", "(F)V"); result = env->NewObject(cls, constructor, value->floatValue()); break; case mailcore::ValueTypeDouble: // double - cls = env->FindClass("java/util/Double"); + cls = env->FindClass("java/lang/Double"); constructor = env->GetMethodID(cls, "", "(D)V"); result = env->NewObject(cls, constructor, value->doubleValue()); break; @@ -218,7 +218,7 @@ static jobject hashmapObjectToJavaConverter(JNIEnv * env, Object * obj) jclass cls = env->FindClass("java/util/HashMap"); jmethodID constructor = env->GetMethodID(cls, "", "(I)V"); jobject javaHashMap = env->NewObject(cls, constructor, hashMap->count()); - jmethodID method = env->GetMethodID(cls, "put", "(Ljava/lang/Object;Ljava/lang/Object;)V"); + jmethodID method = env->GetMethodID(cls, "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); Array * keys = hashMap->allKeys(); for(unsigned int i = 0 ; i < keys->count() ; i ++) { env->PushLocalFrame(LOCAL_FRAME_CAPACITY); @@ -226,7 +226,7 @@ static jobject hashmapObjectToJavaConverter(JNIEnv * env, Object * obj) jobject javaKey = mcObjectToJava(env, key); Object * value = hashMap->objectForKey(key); jobject javaValue = mcObjectToJava(env, value); - env->CallVoidMethod(javaHashMap, method, javaKey, javaValue); + env->CallObjectMethod(javaHashMap, method, javaKey, javaValue); env->PopLocalFrame(NULL); } return javaHashMap; diff --git a/src/java/com/libmailcore/IMAPMoveMessagesOperation.java b/src/java/com/libmailcore/IMAPMoveMessagesOperation.java new file mode 100644 index 000000000..eab74818e --- /dev/null +++ b/src/java/com/libmailcore/IMAPMoveMessagesOperation.java @@ -0,0 +1,12 @@ +package com.libmailcore; + +import java.util.Map; + +/** Operation to move IMAP messages. */ +public class IMAPMoveMessagesOperation extends IMAPOperation { + /** + Returns a map of the UIDs of the messages in the source folder to the UIDs of + the messages in the destination folder. + */ + public native Map uidMapping(); +} diff --git a/src/java/com/libmailcore/IMAPSession.java b/src/java/com/libmailcore/IMAPSession.java index 27ab84610..b59453081 100644 --- a/src/java/com/libmailcore/IMAPSession.java +++ b/src/java/com/libmailcore/IMAPSession.java @@ -160,6 +160,9 @@ public IMAPAppendMessageOperation appendMessageOperation(String folder, byte[] m /** Returns an operation to copy messages to a folder. */ public native IMAPCopyMessagesOperation copyMessagesOperation(String folder, IndexSet uids, String destFolder); + /** Returns an operation to move messages to a folder. */ + public native IMAPMoveMessagesOperation moveMessagesOperation(String folder, IndexSet uids, String destFolder); + /** Returns an operation to expunge messages after they've been marked as deleted. */ public native IMAPOperation expungeOperation(String folder); diff --git a/src/java/native/com_libmailcore_IMAPAppendMessageOperation.cpp b/src/java/native/com_libmailcore_IMAPAppendMessageOperation.cpp index 16da4df26..69b17f088 100644 --- a/src/java/native/com_libmailcore_IMAPAppendMessageOperation.cpp +++ b/src/java/native/com_libmailcore_IMAPAppendMessageOperation.cpp @@ -55,7 +55,7 @@ JNIEXPORT void JNICALL Java_com_libmailcore_IMAPAppendMessageOperation_setupNati MC_SAFE_RELEASE(callback); MC_JAVA_NATIVE_INSTANCE->setImapCallback(NULL); - jobject javaListener = getObjectField(env, obj, "listener"); + jobject javaListener = getObjectField(env, obj, "listener", "J"); if (javaListener != NULL) { callback = new JavaIMAPOperationCallback(env, javaListener); MC_JAVA_NATIVE_INSTANCE->setImapCallback(callback); diff --git a/src/java/native/com_libmailcore_IMAPFetchContentOperation.cpp b/src/java/native/com_libmailcore_IMAPFetchContentOperation.cpp index a8be97b86..24d3a0900 100644 --- a/src/java/native/com_libmailcore_IMAPFetchContentOperation.cpp +++ b/src/java/native/com_libmailcore_IMAPFetchContentOperation.cpp @@ -38,9 +38,10 @@ JNIEXPORT void JNICALL Java_com_libmailcore_IMAPFetchContentOperation_setupNativ MC_SAFE_RELEASE(callback); MC_JAVA_NATIVE_INSTANCE->setImapCallback(NULL); - jobject javaListener = getObjectField(env, obj, "listener"); + jobject javaListener = getObjectField(env, obj, "listener", "Lcom/libmailcore/IMAPOperationProgressListener;"); if (javaListener != NULL) { - callback = new JavaIMAPOperationCallback(env, javaListener); + jobject c = reinterpret_cast(env->NewGlobalRef(javaListener)); + callback = new JavaIMAPOperationCallback(env, c); MC_JAVA_NATIVE_INSTANCE->setImapCallback(callback); } MC_POOL_END; diff --git a/src/java/native/com_libmailcore_IMAPFetchMessagesOperation.cpp b/src/java/native/com_libmailcore_IMAPFetchMessagesOperation.cpp index ed0fae093..c1d07d9fd 100644 --- a/src/java/native/com_libmailcore_IMAPFetchMessagesOperation.cpp +++ b/src/java/native/com_libmailcore_IMAPFetchMessagesOperation.cpp @@ -49,7 +49,7 @@ JNIEXPORT void JNICALL Java_com_libmailcore_IMAPFetchMessagesOperation_setupNati MC_SAFE_RELEASE(callback); MC_JAVA_NATIVE_INSTANCE->setImapCallback(NULL); - jobject javaListener = getObjectField(env, obj, "listener"); + jobject javaListener = getObjectField(env, obj, "listener", "J"); if (javaListener != NULL) { callback = new JavaIMAPOperationCallback(env, javaListener); MC_JAVA_NATIVE_INSTANCE->setImapCallback(callback); diff --git a/src/java/native/com_libmailcore_IMAPFetchParsedContentOperation.cpp b/src/java/native/com_libmailcore_IMAPFetchParsedContentOperation.cpp index da639f2c0..b058b9df2 100644 --- a/src/java/native/com_libmailcore_IMAPFetchParsedContentOperation.cpp +++ b/src/java/native/com_libmailcore_IMAPFetchParsedContentOperation.cpp @@ -38,7 +38,7 @@ JNIEXPORT void JNICALL Java_com_libmailcore_IMAPFetchParsedContentOperation_setu MC_SAFE_RELEASE(callback); MC_JAVA_NATIVE_INSTANCE->setImapCallback(NULL); - jobject javaListener = getObjectField(env, obj, "listener"); + jobject javaListener = getObjectField(env, obj, "listener", "J"); if (javaListener != NULL) { callback = new JavaIMAPOperationCallback(env, javaListener); MC_JAVA_NATIVE_INSTANCE->setImapCallback(callback); diff --git a/src/java/native/com_libmailcore_IMAPMoveMessagesOperation.cpp b/src/java/native/com_libmailcore_IMAPMoveMessagesOperation.cpp new file mode 100644 index 000000000..be6f974b4 --- /dev/null +++ b/src/java/native/com_libmailcore_IMAPMoveMessagesOperation.cpp @@ -0,0 +1,22 @@ +#include "com_libmailcore_IMAPMoveMessagesOperation.h" + +#include "MCBaseTypes.h" +#include "JavaHandle.h" +#include "TypesUtils.h" +#include "MCIMAPMoveMessagesOperation.h" + +using namespace mailcore; + +#define nativeType IMAPMoveMessagesOperation +#define javaType nativeType + +JNIEXPORT jobject JNICALL Java_com_libmailcore_IMAPMoveMessagesOperation_uidMapping + (JNIEnv * env, jobject obj) +{ + MC_POOL_BEGIN; + jobject result = MC_JAVA_BRIDGE_GET(uidMapping); + MC_POOL_END; + return result; +} + +MC_JAVA_BRIDGE diff --git a/src/java/native/com_libmailcore_IMAPMoveMessagesOperation.h b/src/java/native/com_libmailcore_IMAPMoveMessagesOperation.h new file mode 100644 index 000000000..d4dede646 --- /dev/null +++ b/src/java/native/com_libmailcore_IMAPMoveMessagesOperation.h @@ -0,0 +1,23 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +/* Header for class com_libmailcore_IMAPMoveMessagesOperation */ + +#ifndef _Included_com_libmailcore_IMAPMoveMessagesOperation +#define _Included_com_libmailcore_IMAPMoveMessagesOperation +#ifdef __cplusplus +extern "C" { +#endif +#undef com_libmailcore_IMAPMoveMessagesOperation_serialVersionUID +#define com_libmailcore_IMAPMoveMessagesOperation_serialVersionUID 1LL +/* + * Class: com_libmailcore_IMAPMoveMessagesOperation + * Method: uidMapping + * Signature: ()Ljava/util/Map; + */ +JNIEXPORT jobject JNICALL Java_com_libmailcore_IMAPMoveMessagesOperation_uidMapping + (JNIEnv *, jobject); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/java/native/com_libmailcore_IMAPSession.cpp b/src/java/native/com_libmailcore_IMAPSession.cpp index 59422f35f..2c2ce21cb 100644 --- a/src/java/native/com_libmailcore_IMAPSession.cpp +++ b/src/java/native/com_libmailcore_IMAPSession.cpp @@ -175,6 +175,16 @@ JNIEXPORT jobject JNICALL Java_com_libmailcore_IMAPSession_copyMessagesOperation return result; } +JNIEXPORT jobject JNICALL Java_com_libmailcore_IMAPSession_moveMessagesOperation + (JNIEnv * env, jobject obj, jstring sourcePath, jobject uids, jstring destPath) +{ + MC_POOL_BEGIN; + jobject result = MC_TO_JAVA(MC_JAVA_NATIVE_INSTANCE->moveMessagesOperation(MC_FROM_JAVA(String, sourcePath), + MC_FROM_JAVA(IndexSet, uids), MC_FROM_JAVA(String, destPath))); + MC_POOL_END; + return result; +} + JNIEXPORT jobject JNICALL Java_com_libmailcore_IMAPSession_expungeOperation (JNIEnv * env, jobject obj, jstring path) { @@ -469,7 +479,7 @@ JNIEXPORT void JNICALL Java_com_libmailcore_IMAPSession_setupNativeOperationQueu MC_SAFE_RELEASE(callback); MC_JAVA_NATIVE_INSTANCE->setOperationQueueCallback(NULL); - jobject javaListener = getObjectField(env, obj, "operationQueueListener"); + jobject javaListener = getObjectField(env, obj, "operationQueueListener", "J"); if (javaListener != NULL) { callback = new JavaOperationQueueCallback(env, javaListener); MC_JAVA_NATIVE_INSTANCE->setOperationQueueCallback(callback); @@ -485,7 +495,7 @@ JNIEXPORT void JNICALL Java_com_libmailcore_IMAPSession_setupNativeConnectionLog MC_SAFE_RELEASE(logger); MC_JAVA_NATIVE_INSTANCE->setConnectionLogger(NULL); - jobject javaLogger = getObjectField(env, obj, "connectionLogger"); + jobject javaLogger = getObjectField(env, obj, "connectionLogger", "J"); if (javaLogger != NULL) { logger = new JavaConnectionLogger(env, javaLogger); MC_JAVA_NATIVE_INSTANCE->setConnectionLogger(logger); diff --git a/src/java/native/com_libmailcore_IMAPSession.h b/src/java/native/com_libmailcore_IMAPSession.h index 8d6ee73cb..2ed1f374e 100644 --- a/src/java/native/com_libmailcore_IMAPSession.h +++ b/src/java/native/com_libmailcore_IMAPSession.h @@ -329,6 +329,14 @@ JNIEXPORT jobject JNICALL Java_com_libmailcore_IMAPSession_appendMessageOperatio JNIEXPORT jobject JNICALL Java_com_libmailcore_IMAPSession_copyMessagesOperation (JNIEnv *, jobject, jstring, jobject, jstring); +/* + * Class: com_libmailcore_IMAPSession + * Method: moveMessagesOperation + * Signature: (Ljava/lang/String;Lcom/libmailcore/IndexSet;Ljava/lang/String;)Lcom/libmailcore/IMAPMoveMessagesOperation; + */ +JNIEXPORT jobject JNICALL Java_com_libmailcore_IMAPSession_moveMessagesOperation + (JNIEnv *, jobject, jstring, jobject, jstring); + /* * Class: com_libmailcore_IMAPSession * Method: expungeOperation diff --git a/src/java/native/com_libmailcore_NNTPSession.cpp b/src/java/native/com_libmailcore_NNTPSession.cpp index bbae318cf..c17d4d9c4 100644 --- a/src/java/native/com_libmailcore_NNTPSession.cpp +++ b/src/java/native/com_libmailcore_NNTPSession.cpp @@ -149,7 +149,7 @@ JNIEXPORT void JNICALL Java_com_libmailcore_NNTPSession_setupNativeOperationQueu MC_SAFE_RELEASE(callback); MC_JAVA_NATIVE_INSTANCE->setOperationQueueCallback(NULL); - jobject javaListener = getObjectField(env, obj, "operationQueueListener"); + jobject javaListener = getObjectField(env, obj, "operationQueueListener", "J"); if (javaListener != NULL) { callback = new JavaOperationQueueCallback(env, javaListener); MC_JAVA_NATIVE_INSTANCE->setOperationQueueCallback(callback); @@ -165,7 +165,7 @@ JNIEXPORT void JNICALL Java_com_libmailcore_NNTPSession_setupNativeConnectionLog MC_SAFE_RELEASE(logger); MC_JAVA_NATIVE_INSTANCE->setConnectionLogger(NULL); - jobject javaLogger = getObjectField(env, obj, "connectionLogger"); + jobject javaLogger = getObjectField(env, obj, "connectionLogger", "J"); if (javaLogger != NULL) { logger = new JavaConnectionLogger(env, javaLogger); MC_JAVA_NATIVE_INSTANCE->setConnectionLogger(logger); diff --git a/src/java/native/com_libmailcore_POPSession.cpp b/src/java/native/com_libmailcore_POPSession.cpp index f0dbfd400..78e8d794c 100644 --- a/src/java/native/com_libmailcore_POPSession.cpp +++ b/src/java/native/com_libmailcore_POPSession.cpp @@ -123,7 +123,7 @@ JNIEXPORT void JNICALL Java_com_libmailcore_POPSession_setupNativeOperationQueue MC_SAFE_RELEASE(callback); MC_JAVA_NATIVE_INSTANCE->setOperationQueueCallback(NULL); - jobject javaListener = getObjectField(env, obj, "operationQueueListener"); + jobject javaListener = getObjectField(env, obj, "operationQueueListener", "J"); if (javaListener != NULL) { callback = new JavaOperationQueueCallback(env, javaListener); MC_JAVA_NATIVE_INSTANCE->setOperationQueueCallback(callback); @@ -139,7 +139,7 @@ JNIEXPORT void JNICALL Java_com_libmailcore_POPSession_setupNativeConnectionLogg MC_SAFE_RELEASE(logger); MC_JAVA_NATIVE_INSTANCE->setConnectionLogger(NULL); - jobject javaLogger = getObjectField(env, obj, "connectionLogger"); + jobject javaLogger = getObjectField(env, obj, "connectionLogger", "J"); if (javaLogger != NULL) { logger = new JavaConnectionLogger(env, javaLogger); MC_JAVA_NATIVE_INSTANCE->setConnectionLogger(logger); diff --git a/src/java/native/com_libmailcore_SMTPSession.cpp b/src/java/native/com_libmailcore_SMTPSession.cpp index 0d43014c2..c831b1f62 100644 --- a/src/java/native/com_libmailcore_SMTPSession.cpp +++ b/src/java/native/com_libmailcore_SMTPSession.cpp @@ -107,7 +107,7 @@ JNIEXPORT void JNICALL Java_com_libmailcore_SMTPSession_setupNativeOperationQueu MC_SAFE_RELEASE(callback); MC_JAVA_NATIVE_INSTANCE->setOperationQueueCallback(NULL); - jobject javaListener = getObjectField(env, obj, "operationQueueListener"); + jobject javaListener = getObjectField(env, obj, "operationQueueListener", "J"); if (javaListener != NULL) { callback = new JavaOperationQueueCallback(env, javaListener); MC_JAVA_NATIVE_INSTANCE->setOperationQueueCallback(callback); @@ -123,7 +123,7 @@ JNIEXPORT void JNICALL Java_com_libmailcore_SMTPSession_setupNativeConnectionLog MC_SAFE_RELEASE(logger); MC_JAVA_NATIVE_INSTANCE->setConnectionLogger(NULL); - jobject javaLogger = getObjectField(env, obj, "connectionLogger"); + jobject javaLogger = getObjectField(env, obj, "connectionLogger", "J"); if (javaLogger != NULL) { logger = new JavaConnectionLogger(env, javaLogger); MC_JAVA_NATIVE_INSTANCE->setConnectionLogger(logger); diff --git a/src/objc/abstract/MCOAbstractPart.h b/src/objc/abstract/MCOAbstractPart.h index 8bff41dd5..133a6f253 100644 --- a/src/objc/abstract/MCOAbstractPart.h +++ b/src/objc/abstract/MCOAbstractPart.h @@ -107,10 +107,7 @@ namespace mailcore { /** Returns an array with the names of all content type parameters.*/ - (NSArray * /* NSString */) allContentTypeParametersNames; -@end - -@interface MCOAbstractPart (MCOUnavailable) - +#pragma mark - Unavailable initializers /** Do not invoke this directly. */ - (instancetype) init NS_UNAVAILABLE; /** Do not invoke this directly. */ diff --git a/src/objc/imap/MCOIMAPFetchFoldersOperation.h b/src/objc/imap/MCOIMAPFetchFoldersOperation.h index a2954d29e..a8e4b1fe6 100644 --- a/src/objc/imap/MCOIMAPFetchFoldersOperation.h +++ b/src/objc/imap/MCOIMAPFetchFoldersOperation.h @@ -14,6 +14,8 @@ #import +@class MCOIMAPFolder; + NS_ASSUME_NONNULL_BEGIN @interface MCOIMAPFetchFoldersOperation : MCOIMAPBaseOperation @@ -27,7 +29,7 @@ NS_ASSUME_NONNULL_BEGIN - On failure, `error` will be set with `MCOErrorDomain` as domain and an error code available in `MCOConstants.h`, `folders` will be nil */ -- (void) start:(void (^)(NSError * __nullable error, NSArray * /* MCOIMAPFolder */ __nullable folders))completionBlock; +- (void) start:(void (^)(NSError * __nullable error, NSArray * __nullable folders))completionBlock; @end NS_ASSUME_NONNULL_END diff --git a/src/objc/imap/MCOIMAPFetchFoldersOperation.mm b/src/objc/imap/MCOIMAPFetchFoldersOperation.mm index b0965401a..97e3ae6c5 100644 --- a/src/objc/imap/MCOIMAPFetchFoldersOperation.mm +++ b/src/objc/imap/MCOIMAPFetchFoldersOperation.mm @@ -43,7 +43,7 @@ - (void) dealloc [super dealloc]; } -- (void) start:(void (^)(NSError *error, NSArray * /* MCOIMAPFolder */ folders))completionBlock +- (void) start:(void (^)(NSError *error, NSArray *folders))completionBlock { _completionBlock = [completionBlock copy]; [self start]; diff --git a/src/objc/imap/MCOIMAPFetchMessagesOperation.h b/src/objc/imap/MCOIMAPFetchMessagesOperation.h index ac1506c0f..74983166d 100644 --- a/src/objc/imap/MCOIMAPFetchMessagesOperation.h +++ b/src/objc/imap/MCOIMAPFetchMessagesOperation.h @@ -15,6 +15,7 @@ /** This class implements an operation to fetch a list of messages from a folder */ +@class MCOIMAPMessage; @class MCOIndexSet; NS_ASSUME_NONNULL_BEGIN @@ -39,7 +40,7 @@ NS_ASSUME_NONNULL_BEGIN If you are not supporting QRESYNC you can safely ignore `vanishedMessages`. */ -- (void) start:(void (^)(NSError * __nullable error, NSArray * /* MCOIMAPMessage */ __nullable messages, MCOIndexSet * __nullable vanishedMessages))completionBlock; +- (void) start:(void (^)(NSError * __nullable error, NSArray * __nullable messages, MCOIndexSet * __nullable vanishedMessages))completionBlock; @end NS_ASSUME_NONNULL_END diff --git a/src/objc/imap/MCOIMAPFetchMessagesOperation.mm b/src/objc/imap/MCOIMAPFetchMessagesOperation.mm index 83012ca54..a29a05fb3 100644 --- a/src/objc/imap/MCOIMAPFetchMessagesOperation.mm +++ b/src/objc/imap/MCOIMAPFetchMessagesOperation.mm @@ -41,7 +41,7 @@ - (void) dealloc [super dealloc]; } -- (void) start:(void (^)(NSError *error, NSArray * messages, MCOIndexSet * vanishedMessages))completionBlock +- (void) start:(void (^)(NSError *error, NSArray * messages, MCOIndexSet * vanishedMessages))completionBlock { _completionBlock = [completionBlock copy]; [self start]; diff --git a/src/objc/nntp/MCONNTPDisconnectOperation.h b/src/objc/nntp/MCONNTPDisconnectOperation.h index 7d8986bb6..5ee5880ca 100644 --- a/src/objc/nntp/MCONNTPDisconnectOperation.h +++ b/src/objc/nntp/MCONNTPDisconnectOperation.h @@ -14,7 +14,7 @@ #import /* The class is used to perform a disconnect operation. */ -@interface MCONNTPDisconnectOperation : NSObject +@interface MCONNTPDisconnectOperation : MCONNTPOperation @end diff --git a/src/objc/provider/MCOAccountValidator.h b/src/objc/provider/MCOAccountValidator.h index 1d1d42318..008e0503b 100644 --- a/src/objc/provider/MCOAccountValidator.h +++ b/src/objc/provider/MCOAccountValidator.h @@ -53,5 +53,6 @@ */ - (void) start:(void (^)(void))completionBlock; +- (instancetype) init; @end diff --git a/src/objc/provider/MCOMailProvider.h b/src/objc/provider/MCOMailProvider.h index 513d568ee..e59a352d9 100644 --- a/src/objc/provider/MCOMailProvider.h +++ b/src/objc/provider/MCOMailProvider.h @@ -8,6 +8,8 @@ #import +@class MCONetService; + /** Represents a email service provider, like for example Gmail, Yahoo, Fastmail.fm etc. */ @@ -22,19 +24,19 @@ A list of ways that you can connect to the IMAP server @return An array of MCONetService */ -- (NSArray * /* MCONetService */) imapServices; +- (NSArray *) imapServices; /** A list of ways that you can connect to the SMTP server @return An array of MCONetService */ -- (NSArray * /* MCONetService */) smtpServices; +- (NSArray *) smtpServices; /** A list of ways that you can connect to the POP3 server @return An array of MCONetService */ -- (NSArray * /* MCONetService */) popServices; +- (NSArray *) popServices; - (BOOL) matchEmail:(NSString *)email; - (BOOL) matchMX:(NSString *)hostname; @@ -83,10 +85,7 @@ */ - (NSString *) importantFolderPath; -@end - -@interface MCOMailProvider (MCOUnavailable) - +#pragma mark - Unavailable initializers /** Do not invoke this directly. */ - (instancetype) init NS_UNAVAILABLE; /** Do not invoke this directly. */ diff --git a/src/objc/provider/MCOMailProvidersManager.h b/src/objc/provider/MCOMailProvidersManager.h index 09df25ad9..e5d2b9d67 100644 --- a/src/objc/provider/MCOMailProvidersManager.h +++ b/src/objc/provider/MCOMailProvidersManager.h @@ -20,6 +20,8 @@ @interface MCOMailProvidersManager : NSObject +NS_ASSUME_NONNULL_BEGIN + /** The shared manager that is used for all lookups */ + (MCOMailProvidersManager *) sharedManager; @@ -27,20 +29,20 @@ Given an email address will try to determine the provider @return The email provider info or nil if it can't be determined. */ -- (MCOMailProvider *) providerForEmail:(NSString *)email; +- (nullable MCOMailProvider *) providerForEmail:(NSString *)email; /** Given the DNS MX record will try to determine the provider @return The email provider info or nil if it can't be determined. */ -- (MCOMailProvider *) providerForMX:(NSString *)hostname; +- (nullable MCOMailProvider *) providerForMX:(NSString *)hostname; /** Will return information about a provider. Useful if you already know the provider (like if it has been determined previously) @return The email provider info or nil if none matches */ -- (MCOMailProvider *) providerForIdentifier:(NSString *)identifier; +- (nullable MCOMailProvider *) providerForIdentifier:(NSString *)identifier; /** Registers the providers in the JSON file at the file path so they @@ -48,4 +50,6 @@ */ - (void) registerProvidersWithFilename:(NSString *)filename; +NS_ASSUME_NONNULL_END + @end diff --git a/src/objc/provider/MCONetService.h b/src/objc/provider/MCONetService.h index 0d7071522..01a6e0949 100644 --- a/src/objc/provider/MCONetService.h +++ b/src/objc/provider/MCONetService.h @@ -38,10 +38,7 @@ */ - (NSString *) hostnameWithEmail:(NSString *)email; -@end - -@interface MCONetService (MCOUnavailable) - +#pragma mark - Unavailable initializers /** Do not invoke this directly. */ - (instancetype) init NS_UNAVAILABLE; /** Do not invoke this directly. */ diff --git a/src/objc/smtp/MCOSMTPSession.h b/src/objc/smtp/MCOSMTPSession.h index 84d6949da..8884a4d24 100644 --- a/src/objc/smtp/MCOSMTPSession.h +++ b/src/objc/smtp/MCOSMTPSession.h @@ -182,6 +182,16 @@ */ - (MCOSMTPOperation *) checkAccountOperationWithFrom:(MCOAddress *)from; +/** + Returns an operation that will check whether the SMTP account is valid with explicit recipient address. + + MCOSMTPOperation * op = [session checkAccountOperationWithFrom:[MCOAddress addressWithMailbox:@"hoa@etpan.org"] to:[MCOAddress addressWithMailbox:@"test@addr.org"]]; + [op start:^(NSError * __nullable error) { + ... + }]; + */ +- (MCOSMTPOperation *) checkAccountOperationWithFrom:(MCOAddress *)from to:(MCOAddress *)to; + /** Returns an operation that will perform a No-Op. diff --git a/src/objc/smtp/MCOSMTPSession.mm b/src/objc/smtp/MCOSMTPSession.mm index 04e3993b7..6cfc7ca3a 100644 --- a/src/objc/smtp/MCOSMTPSession.mm +++ b/src/objc/smtp/MCOSMTPSession.mm @@ -193,6 +193,14 @@ - (MCOSMTPOperation *) checkAccountOperationWithFrom:(MCOAddress *)from return result; } +- (MCOSMTPOperation *) checkAccountOperationWithFrom:(MCOAddress *)from to:(MCOAddress *)to +{ + mailcore::SMTPOperation *coreOp = MCO_NATIVE_INSTANCE->checkAccountOperation(MCO_FROM_OBJC(mailcore::Address, from), MCO_FROM_OBJC(mailcore::Address, to)); + MCOSMTPOperation * result = [[[MCOSMTPOperation alloc] initWithMCOperation:coreOp] autorelease]; + [result setSession:self]; + return result; +} + - (MCOSMTPOperation *) noopOperation { mailcore::SMTPOperation * coreOp = MCO_NATIVE_INSTANCE->noopOperation(); diff --git a/src/objc/utils/MCOObjectWrapper.mm b/src/objc/utils/MCOObjectWrapper.mm index e0a162b4d..65902ca46 100644 --- a/src/objc/utils/MCOObjectWrapper.mm +++ b/src/objc/utils/MCOObjectWrapper.mm @@ -19,14 +19,16 @@ @implementation MCOObjectWrapper { mailcore::Object * mObject; } +#ifdef LEGACY_OBJC_RUNTIME + (void) load -{ +{ MCORegisterClass([NSValue class], &typeid(mailcore::Value)); MCORegisterClass([NSData class], &typeid(mailcore::Data)); MCORegisterClass([NSString class], &typeid(mailcore::String)); MCORegisterClass([NSDictionary class], &typeid(mailcore::HashMap)); MCORegisterClass([NSArray class], &typeid(mailcore::Array)); } +#endif - (void) dealloc { diff --git a/src/objc/utils/MCOOperation.h b/src/objc/utils/MCOOperation.h index 65f776814..1c4583e4c 100644 --- a/src/objc/utils/MCOOperation.h +++ b/src/objc/utils/MCOOperation.h @@ -36,10 +36,7 @@ /** Cancel the operation.*/ - (void) cancel; -@end - -@interface MCOOperation (MCOUnavailable) - +#pragma mark - Unavailable initializers /** Do not invoke this directly. */ - (instancetype) init NS_UNAVAILABLE; /** Do not invoke this directly. */ diff --git a/src/objc/utils/NSError+MCO.h b/src/objc/utils/NSError+MCO.h index 027796ea8..18d9bb914 100644 --- a/src/objc/utils/NSError+MCO.h +++ b/src/objc/utils/NSError+MCO.h @@ -10,6 +10,113 @@ #import +/** Error domain for mailcore.*/ +#define MCOErrorDomain @"MCOErrorDomain" + +/** Here's the list of errors.*/ +typedef NS_ENUM(NSInteger, MCOErrorCode) { + /** No error occurred.*/ + MCOErrorNone, // 0 + /** An error related to the connection occurred.*/ + /** It could not connect or it's been disconnected.*/ + MCOErrorConnection, + /** TLS/SSL connection was not available.*/ + MCOErrorTLSNotAvailable, + /** The protocol could not be parsed.*/ + MCOErrorParse, + /** Certificate was not valid.*/ + MCOErrorCertificate, + /** An authentication error occurred.*/ + MCOErrorAuthentication, + /** Specific to Gmail: IMAP not enabled.*/ + MCOErrorGmailIMAPNotEnabled, + /** Specific to Gmail: Exceeded bandwidth limit.*/ + MCOErrorGmailExceededBandwidthLimit, + /** Specific to Gmail: Too many simultaneous connections.*/ + MCOErrorGmailTooManySimultaneousConnections, + /** Specific to Mobile Me: Moved to iCloud.*/ + MCOErrorMobileMeMoved, + /** Specific to Yahoo: not available.*/ + MCOErrorYahooUnavailable, // 10 + /** Non existant folder, select failed.*/ + MCOErrorNonExistantFolder, + /** IMAP: Error occurred while renaming a folder.*/ + MCOErrorRename, + /** IMAP: Error occurred while deleting a folder.*/ + MCOErrorDelete, + /** IMAP: Error occurred while creating a folder.*/ + MCOErrorCreate, + /** IMAP: Error occurred while subscribing/unsubcribing to a folder.*/ + MCOErrorSubscribe, + /** IMAP: Error occurred while adding a message to a folder.*/ + MCOErrorAppend, + /** IMAP: Error occurred while copying a message.*/ + MCOErrorCopy, + /** IMAP: Error occurred while expunging.*/ + MCOErrorExpunge, + /** IMAP: Error occurred while fetching messages.*/ + MCOErrorFetch, + /** IMAP: Error occurred while IDLing.*/ + MCOErrorIdle, // 20 + /** IMAP: Error occurred while sending/getting identity.*/ + MCOErrorIdentity, + /** IMAP: Error occurred while getting namespace.*/ + MCOErrorNamespace, + /** IMAP: Error occurred while storing flags.*/ + MCOErrorStore, + /** IMAP: Error wile getting capabilities.*/ + MCOErrorCapability, + /** STARTTLS is not available.*/ + MCOErrorStartTLSNotAvailable, + /** SMTP: Illegal attachment: certain kind of attachment cannot be sent.*/ + MCOErrorSendMessageIllegalAttachment, + /** SMTP: Storage limit: message is probably too big.*/ + MCOErrorStorageLimit, + /** SMTP: Sending message is not allowed.*/ + MCOErrorSendMessageNotAllowed, + /** SMTP: Specific to hotmail. Needs to connect to webmail.*/ + MCOErrorNeedsConnectToWebmail, + /** SMTP: Error while sending message.*/ + MCOErrorSendMessage, // 30 + /** SMTP: Authentication required.*/ + MCOErrorAuthenticationRequired, + /** POP: Error occurred while fetching message list.*/ + MCOErrorFetchMessageList, + /** POP: Error occurred while deleting message.*/ + MCOErrorDeleteMessage, + /** SMTP: Error while checking account.*/ + MCOErrorInvalidAccount, + /** Error when accessing/reading/writing file.*/ + MCOErrorFile, + /** IMAP: Error when trying to enable compression.*/ + MCOErrorCompression, + /** SMTP: Error when no sender has been specified.*/ + MCOErrorNoSender, + /** SMTP: Error when no recipient has been specified.*/ + MCOErrorNoRecipient, + /** IMAP: Error when a noop operation fails.*/ + MCOErrorNoop, + /** IMAP: Error when the password has been entered but second factor + authentication is enabled: an application specific password is required. */ + MCOErrorGmailApplicationSpecificPasswordRequired, // 40 + /** NNTP: error when requesting date */ + MCOErrorServerDate, + /** No valid server found */ + MCOErrorNoValidServerFound, + /** Error while running custom command */ + MCOErrorCustomCommand, + /** Spam was suspected by server */ + MCOErrorYahooSendMessageSpamSuspected, + /** Daily limit of sent messages was hit */ + MCOErrorYahooSendMessageDailyLimitExceeded, + /** You need to login via the web browser first */ + MCOErrorOutlookLoginViaWebBrowser, + /** Tiscali Simple Mail Error */ + MCOErrorTiscaliSimplePassword, + /** The count of all errors */ + MCOErrorCodeCount, +}; + @interface NSError (MCO) #ifdef __cplusplus + (NSError *) mco_errorWithErrorCode:(mailcore::ErrorCode)code; diff --git a/src/objc/utils/NSError+MCO.mm b/src/objc/utils/NSError+MCO.mm index 56d571e46..5efab4f51 100644 --- a/src/objc/utils/NSError+MCO.mm +++ b/src/objc/utils/NSError+MCO.mm @@ -8,7 +8,7 @@ #include "MCBaseTypes.h" #include "MCErrorMessage.h" -#import "MCOConstants.h" +//#import "MCOConstants.h" #import "NSObject+MCO.h" using namespace mailcore; diff --git a/src/swift/abstract/AbstractMessage.swift b/src/swift/abstract/AbstractMessage.swift new file mode 100644 index 000000000..aaa02b407 --- /dev/null +++ b/src/swift/abstract/AbstractMessage.swift @@ -0,0 +1,78 @@ +import Foundation +import CMailCore + +public class MCOAbstractMessage: NSObjectCompat, Convertible { + + private var nativeInstance:CAbstractMessage; + + public required init(mailCoreObject: CObject) { + self.nativeInstance = CAbstractMessage.init(cobject: mailCoreObject) + self.nativeInstance.retain() + } + + func cast() -> CObject { + return self.nativeInstance.toCObject() + } + + deinit { + nativeInstance.release() + } + + /** Header of the message. */ + public var header : MCOMessageHeader! { + set { + mailCoreAutoreleasePool { + nativeInstance.header = newValue?.nativeInstance ?? CMessageHeader() + } + } + get { + return mailCoreAutoreleasePool { + createMCOObject(from: nativeInstance.header.toCObject()) + } + } + } + + /** Returns the part with the given Content-ID.*/ + public func partForContentID(contentID: String) -> MCOAbstractPart? { + return mailCoreAutoreleasePool { + return createMCOObject(from: nativeInstance.partForContentID(contentID.mailCoreString()).toCObject()) + } + } + + /** Returns the part with the given unique identifier.*/ + public func partForUniqueID(uniqueID: String) -> MCOAbstractPart? { + return mailCoreAutoreleasePool { + return createMCOObject(from: nativeInstance.partForUniqueID(uniqueID.mailCoreString()).toCObject()) + } + } + + /** All attachments in the message. + It will return an array of MCOIMAPPart for MCOIMAPMessage. + It will return an array of MCOAttachment for MCOMessageParser. + It will return an array of MCOAttachment for MCOMessageBuilder. */ + public func attachments() -> Array? { + return mailCoreAutoreleasePool { + return Array(mailCoreArray: nativeInstance.attachments()); + } + } + + /** All image attachments included inline in the message through cid: URLs. + It will return an array of MCOIMAPPart for MCOIMAPMessage. + It will return an array of MCOAttachment for MCOMessageParser. + It will return an array of MCOAttachment for MCOMessageBuilder. */ + public func htmlInlineAttachments() -> Array? { + return mailCoreAutoreleasePool { + return Array(mailCoreArray: nativeInstance.htmlInlineAttachments()); + } + } + + /** + Returns parts required to render the message as plain text or html. + This does not include inline images and attachments, but only the text content + */ + public func requiredPartsForRendering() -> Array? { + return mailCoreAutoreleasePool { + return Array(mailCoreArray: nativeInstance.requiredPartsForRendering()); + } + } +} diff --git a/src/swift/abstract/AbstractMessagePart.swift b/src/swift/abstract/AbstractMessagePart.swift new file mode 100644 index 000000000..506bdcf56 --- /dev/null +++ b/src/swift/abstract/AbstractMessagePart.swift @@ -0,0 +1,51 @@ +import Foundation +import CMailCore + +public class MCOAbstractMessagePart : MCOAbstractPart { + + private var nativeInstance:CAbstractMessagePart; + + required public init(mailCoreObject obj: CObject) { + self.nativeInstance = CAbstractMessagePart.init(cobject: obj) + self.nativeInstance.retain() + super.init(mailCoreObject: obj); + } + + deinit { + self.nativeInstance.release() + } + + internal override func cast() -> CObject { + return nativeInstance.toCObject(); + } + + // Returns the header of the embedded message. + public var header : MCOMessageHeader? { + set { + mailCoreAutoreleasePool { + nativeInstance.header = newValue?.nativeInstance ?? CMessageHeader() + } + } + get { + return mailCoreAutoreleasePool { + createMCOObject(from: nativeInstance.header.toCObject()) + } + } + } + + // Returns the main part of the embedded message. It can be MCOAbstractPart, MCOAbstractMultipart + // or a MCOAbstractMessagePart. + public var mainPart : MCOAbstractPart? { + set { + mailCoreAutoreleasePool { + nativeInstance.mainPart = newValue?._CAbstractPart() ?? CAbstractPart() + } + } + get { + return mailCoreAutoreleasePool { + createMCOObject(from: nativeInstance.mainPart.toCObject()) + } + } + } + +} diff --git a/src/swift/abstract/AbstractMessageRendererCallback.swift b/src/swift/abstract/AbstractMessageRendererCallback.swift new file mode 100644 index 000000000..a4f602e44 --- /dev/null +++ b/src/swift/abstract/AbstractMessageRendererCallback.swift @@ -0,0 +1,185 @@ +import Foundation +import CMailCore + +internal class MCOAbstractMessageRendererCallback { + + internal var message: MCOAbstractMessage; + + fileprivate var rendererDelegate: MCOHTMLRendererDelegate?; + fileprivate var imapDelegate: MCOHTMLRendererIMAPDelegate?; + private var nativeInstance: CAbstractMessageRendererCallback!; + + internal init(message: MCOAbstractMessage) { + self.message = message; + self.nativeInstance = CAbstractMessageRendererCallback(canPreviewPartBlock: canPreviewPart, + shouldShowPartBlock: shouldShowPartBlock, + templateValuesForHeaderBlock: templateValuesForHeaderBlock, + templateValuesForPartBlock: templateValuesForPartBlock, + templateForMainHeaderBlock: templateForMainHeaderBlock, + templateForImageBlock: templateForImageBlock, + templateForAttachmentBlock: templateForAttachmentBlock, + templateForMessageBlock: templateForMessageBlock, + templateForEmbeddedMessageBlock: templateForEmbeddedMessageBlock, + templateForEmbeddedMessageHeaderBlock: templateForEmbeddedMessageHeaderBlock, + templateForAttachmentSeparatorBlock: templateForAttachmentSeparatorBlock, + cleanHTMLForPartBlock: cleanHTMLForPartBlock, + filterHTMLForPartBlock: filterHTMLForPartBlock, + filterHTMLForMessageBlock: filterHTMLForMessageBlock, + dataForIMAPPartBlock: dataForIMAPPart, + prefetchAttachmentIMAPPartBlock: prefetchAttachmentIMAPPart, + prefetchImageIMAPPartBlock: prefetchImageIMAPPart, + userInfo: Unmanaged.passUnretained(self).toOpaque()); + } + + deinit { + self.nativeInstance.release() + } + + internal func setHtmlRenderDelegate(delegate: MCOHTMLRendererDelegate?) { + self.rendererDelegate = delegate; + } + + internal func setHtmlRenderImapDelegate(delegate: MCOHTMLRendererIMAPDelegate?) { + self.imapDelegate = delegate; + } + + internal func cast() -> CAbstractMessageRendererCallback { + return nativeInstance; + } +} + +//MARK: C-Functions +func canPreviewPart(ref: UnsafeRawPointer?, part: CAbstractPart) -> UInt8 { + //let selfRef = Unmanaged.fromOpaque(ref!).takeUnretainedValue() + //guard let rendererDelegate = selfRef.rendererDelegate else { + return 0 + //} + //return rendererDelegate.abstractMessage(selfRef.message, canPreviewPart: createMCOObject(from: part.toCObject())) ? 1 : 0; +} + +func shouldShowPartBlock(ref: UnsafeRawPointer?, part: CAbstractPart) -> UInt8 { + let selfRef = Unmanaged.fromOpaque(ref!).takeUnretainedValue() + guard let rendererDelegate = selfRef.rendererDelegate else { + return 0 + } + return rendererDelegate.abstractMessage(selfRef.message, shouldShowPart: createMCOObject(from: part.toCObject())) ? 1 : 0; +} + +func templateValuesForHeaderBlock(ref: UnsafeRawPointer?, header: CMessageHeader) -> CDictionary { + //let selfRef = Unmanaged.fromOpaque(ref!).takeUnretainedValue() + //guard let rendererDelegate = selfRef.rendererDelegate else { + return CDictionary() + //} + //return Dictionary.cast(rendererDelegate.abstractMessage(selfRef.message, templateValuesForHeader: createMCOObject(from: header.toCObject()))) +} + +func templateValuesForPartBlock(ref: UnsafeRawPointer?, part: CAbstractPart) -> CDictionary { + //let selfRef = Unmanaged.fromOpaque(ref!).takeUnretainedValue() + //guard let rendererDelegate = selfRef.rendererDelegate else { + return CDictionary() + //} + //return Dictionary.cast(rendererDelegate.abstractMessage(selfRef.message, templateValuesForPart: createMCOObject(from: part.toCObject()))); +} + +func templateForMainHeaderBlock(ref: UnsafeRawPointer?, header: CMessageHeader) -> CObject { + let selfRef = Unmanaged.fromOpaque(ref!).takeUnretainedValue() + guard let rendererDelegate = selfRef.rendererDelegate else { + return CObject() + } + return rendererDelegate.abstractMessage(selfRef.message, templateForMainHeader: createMCOObject(from: header.toCObject()))?.cast() ?? CObject() +} + +func templateForImageBlock(ref: UnsafeRawPointer?, part: CAbstractPart) -> CObject { + //let selfRef = Unmanaged.fromOpaque(ref!).takeUnretainedValue() + //guard let rendererDelegate = selfRef.rendererDelegate else { + return CObject() + //} + //return rendererDelegate.abstractMessage(selfRef.message, templateForImage: createMCOObject(from: part.toCObject())).cast() +} + +func templateForAttachmentBlock(ref: UnsafeRawPointer?, part: CAbstractPart) -> CObject { + let selfRef = Unmanaged.fromOpaque(ref!).takeUnretainedValue() + guard let rendererDelegate = selfRef.rendererDelegate else { + return CObject() + } + return rendererDelegate.abstractMessage(selfRef.message, templateForAttachment: createMCOObject(from: part.toCObject()))?.cast() ?? CObject() +} + +func templateForMessageBlock(ref: UnsafeRawPointer?, msg: CAbstractMessage) -> CObject { + let selfRef = Unmanaged.fromOpaque(ref!).takeUnretainedValue() + guard let rendererDelegate = selfRef.rendererDelegate else { + return CObject() + } + return rendererDelegate.abstractMessageTemplateForMessage(selfRef.message).cast() +} + +func templateForEmbeddedMessageBlock(ref: UnsafeRawPointer?, part: CAbstractMessagePart) -> CObject { + //let selfRef = Unmanaged.fromOpaque(ref!).takeUnretainedValue() + //guard let rendererDelegate = selfRef.rendererDelegate else { + return CObject() + //} + //return rendererDelegate.abstractMessage(selfRef.message, templateForEmbeddedMessage: createMCOObject(from: part.toCObject())).cast() +} + +func templateForEmbeddedMessageHeaderBlock(ref: UnsafeRawPointer?, header: CMessageHeader) -> CObject { + //let selfRef = Unmanaged.fromOpaque(ref!).takeUnretainedValue() + //guard let rendererDelegate = selfRef.rendererDelegate else { + return CObject() + //} + //return rendererDelegate.abstractMessage(selfRef.message, templateForEmbeddedMessageHeader: createMCOObject(from: header.toCObject())).cast(); +} + +func templateForAttachmentSeparatorBlock(ref: UnsafeRawPointer?) -> CObject { + //let selfRef = Unmanaged.fromOpaque(ref!).takeUnretainedValue() + //guard let rendererDelegate = selfRef.rendererDelegate else { + return CObject() + //} + //return rendererDelegate.abstractMessageTemplateForAttachmentSeparator(selfRef.message).cast(); +} + +func cleanHTMLForPartBlock(ref: UnsafeRawPointer?, html: MailCoreString) -> CObject { + let selfRef = Unmanaged.fromOpaque(ref!).takeUnretainedValue() + guard let rendererDelegate = selfRef.rendererDelegate else { + return CObject() + } + return rendererDelegate.abstractMessage(selfRef.message, cleanHTMLForPart: html.string())?.cast() ?? CObject() +} + +func filterHTMLForPartBlock(ref: UnsafeRawPointer?, html: MailCoreString) -> CObject { + //let selfRef = Unmanaged.fromOpaque(ref!).takeUnretainedValue() + //guard let rendererDelegate = selfRef.rendererDelegate else { + return CObject() + //} + //return rendererDelegate.abstractMessage(selfRef.message, filterHTMLForPart: html.string()).cast(); +} + +func filterHTMLForMessageBlock(ref: UnsafeRawPointer?, html: MailCoreString) -> CObject { + let selfRef = Unmanaged.fromOpaque(ref!).takeUnretainedValue() + guard let rendererDelegate = selfRef.rendererDelegate else { + assert(false) + return CObject() + } + guard let result = rendererDelegate.abstractMessage(selfRef.message, filterHTMLForMessage: html.string()) else { + assert(false) + return CObject() + } + return result.cast() +} + +func dataForIMAPPart(ref: UnsafeRawPointer?, folder: MailCoreString, part: CIMAPPart) -> CData { + let selfRef = Unmanaged.fromOpaque(ref!).takeUnretainedValue() + if let data = selfRef.imapDelegate?.abstractMessage(selfRef.message, dataForIMAPPart: createMCOObject(from: part.toCObject()), folder: folder.string()) { + return data.mailCoreData() + } + return CData(); +} + +func prefetchAttachmentIMAPPart(ref: UnsafeRawPointer?, folder: MailCoreString, part: CIMAPPart) { + //let selfRef = Unmanaged.fromOpaque(ref!).takeUnretainedValue() + //selfRef.imapDelegate?.abstractMessage(selfRef.message, prefetchAttachmentIMAPPart: createMCOObject(from: part.toCObject()), folder: folder.string()); +} + +func prefetchImageIMAPPart(ref: UnsafeRawPointer?, folder: MailCoreString, part: CIMAPPart) { + //let selfRef = Unmanaged.fromOpaque(ref!).takeUnretainedValue() + //selfRef.imapDelegate?.abstractMessage(selfRef.message, prefetchImageIMAPPart: createMCOObject(from: part.toCObject()), folder: folder.string()); +} diff --git a/src/swift/abstract/AbstractMultipart.swift b/src/swift/abstract/AbstractMultipart.swift new file mode 100644 index 000000000..58a17f582 --- /dev/null +++ b/src/swift/abstract/AbstractMultipart.swift @@ -0,0 +1,36 @@ +import Foundation +import CMailCore + +public class MCOAbstractMultipart : MCOAbstractPart { + + private var nativeInstance: CAbstractMultipart; + + required public init(mailCoreObject obj: CObject) { + self.nativeInstance = CAbstractMultipart(cobject: obj) + self.nativeInstance.retain() + super.init(mailCoreObject: obj); + } + + deinit { + self.nativeInstance.release() + } + + internal override func cast() -> CObject { + return nativeInstance.toCObject(); + } + + /** Returns the subparts of that multipart.*/ + public var parts : Array? { + set { + mailCoreAutoreleasePool { + nativeInstance.parts = newValue?.mailCoreArray() ?? CArray() + } + } + get { + return mailCoreAutoreleasePool { + Array(mailCoreArray: nativeInstance.parts) + } + } + } + +} diff --git a/src/swift/abstract/AbstractPart.swift b/src/swift/abstract/AbstractPart.swift new file mode 100644 index 000000000..bc951ad39 --- /dev/null +++ b/src/swift/abstract/AbstractPart.swift @@ -0,0 +1,199 @@ +import Foundation +import CMailCore + +public class MCOAbstractPart : Convertible { + + private var nativeInstance:CAbstractPart; + + required public init(mailCoreObject obj: CObject) { + self.nativeInstance = CAbstractPart.init(cobject: obj) + self.nativeInstance.retain() + } + + internal func cast() -> CObject { + return nativeInstance.toCObject(); + } + + deinit { + self.nativeInstance.release() + } + + public func _CAbstractPart() -> CAbstractPart { + return nativeInstance; + } + + /** Returns type of the part (single / message part / multipart/mixed, + multipart/related, multipart/alternative). See MCOPartType.*/ + public var partType : PartType { + set { nativeInstance.partType = newValue } + get { return nativeInstance.partType } + } + + /** Returns filename of the part.*/ + public var filename : String? { + set { + mailCoreAutoreleasePool { + nativeInstance.filename = newValue?.mailCoreString() ?? MailCoreString() + } + } + get { + return mailCoreAutoreleasePool { + nativeInstance.filename.string() + } + } + } + + /** Returns MIME type of the part. For example application/data.*/ + public var mimeType : String? { + set { + mailCoreAutoreleasePool { + nativeInstance.mimeType = newValue?.mailCoreString() ?? MailCoreString() + } + } + get { + return mailCoreAutoreleasePool { + nativeInstance.mimeType.string() + } + } + } + + /** Returns charset of the part in case it's a text single part.*/ + public var charset : String? { + set { + mailCoreAutoreleasePool { + nativeInstance.charset = newValue?.mailCoreString() ?? MailCoreString() + } + } + get { + return mailCoreAutoreleasePool { + nativeInstance.charset.string() + } + } + } + + /** Returns the unique ID generated for this part. + It's a unique identifier that's created when the object is created manually + or created by the parser.*/ + public var uniqueID : String? { + set { + mailCoreAutoreleasePool { + nativeInstance.uniqueID = newValue?.mailCoreString() ?? MailCoreString() + } + } + get { + return mailCoreAutoreleasePool { + nativeInstance.uniqueID.string() + } + } + } + + /** Returns the value of the Content-ID field of the part.*/ + public var contentID : String? { + set { + mailCoreAutoreleasePool { + nativeInstance.contentID = newValue?.mailCoreString() ?? MailCoreString() + } + } + get { + return mailCoreAutoreleasePool { + nativeInstance.contentID.string() + } + } + } + + /** Returns the value of the Content-Location field of the part.*/ + public var contentLocation : String? { + set { + mailCoreAutoreleasePool { + nativeInstance.contentLocation = newValue?.mailCoreString() ?? MailCoreString() + } + } + get { + return mailCoreAutoreleasePool { + nativeInstance.contentLocation.string() + } + } + } + + /** Returns the value of the Content-Description field of the part.*/ + public var contentDescription : String? { + set { + mailCoreAutoreleasePool { + nativeInstance.contentDescription = newValue?.mailCoreString() ?? MailCoreString() + } + } + get { + return mailCoreAutoreleasePool { + nativeInstance.contentDescription.string () + } + } + } + + /** Returns whether the part is an explicit inline attachment.*/ + public var isInlineAttachment : Bool { + set { nativeInstance.isInlineAttachment = newValue } + get { return nativeInstance.isInlineAttachment } + } + + /** Returns whether the part is an explicit attachment.*/ + public var isAttachment : Bool { + set { nativeInstance.isAttachment = newValue } + get { return nativeInstance.isAttachment } + } + + /** Returns the part with the given Content-ID among this part and its subparts.*/ + public func partForContentID(contentID: String) -> MCOAbstractPart? { + return mailCoreAutoreleasePool { + return createMCOObject(from: nativeInstance.partForContentID(contentID.mailCoreString()).toCObject()) + } + } + + /** Returns the part with the given unique identifier among this part and its subparts.*/ + public func partForUniqueID(uniqueID: String) -> MCOAbstractPart? { + return mailCoreAutoreleasePool { + return createMCOObject(from: nativeInstance.partForUniqueID(uniqueID.mailCoreString()).toCObject()) + } + } + + /** Returns a string representation of the data according to charset.*/ + public func decodedStringForData(data: Data) -> String? { + return mailCoreAutoreleasePool { + return nativeInstance.decodedStringForData(data.mailCoreData()).string() + } + } + + /** Adds a content type parameter.*/ + public func setContentTypeParameterValue(_ value: String, name: String) { + return mailCoreAutoreleasePool { + nativeInstance.setContentTypeParameter(value.mailCoreString(), name.mailCoreString()) + } + } + + /** Remove a given content type parameter.*/ + public func removeContentTypeParameterForName(name: String) { + return mailCoreAutoreleasePool { + nativeInstance.removeContentTypeParameter(name.mailCoreString()) + } + } + + /** Returns the value of a given content type parameter.*/ + public func contentTypeParameterValueForName(name: String) -> String? { + return mailCoreAutoreleasePool { + return nativeInstance.contentTypeParameterValueForName(name.mailCoreString()).string() + } + } + + /** Returns an array with the names of all content type parameters.*/ + public func allContentTypeParametersNames() -> Array? { + return mailCoreAutoreleasePool { + return Array(mailCoreArray: nativeInstance.allContentTypeParametersNames()); + } + } + + public static func getData(_ part: MCOAbstractPart) -> Data? { + return mailCoreAutoreleasePool { + return Data(cdata: CAbstractPart.getData(part.nativeInstance)) + } + } +} + diff --git a/src/swift/abstract/Address.swift b/src/swift/abstract/Address.swift new file mode 100644 index 000000000..1c4697561 --- /dev/null +++ b/src/swift/abstract/Address.swift @@ -0,0 +1,209 @@ +import Foundation +import CMailCore + +public final class MCOAddress : NSObjectCompat, Convertible, NSCoding { + + var nativeInstance:CAddress + + public override init() { + self.nativeInstance = CAddress_init(); + super.init() + } + + private init?(address:CAddress) { + guard address.instance != nil else { + return nil + } + self.nativeInstance = address; + self.nativeInstance.retain() + } + + internal init(mailCoreObject obj: CObject) { + self.nativeInstance = CAddress.init(cobject: obj) + self.nativeInstance.retain() + } + + deinit { + self.nativeInstance.release(); + } + + internal func cast() -> CObject { + return nativeInstance.toCObject() + } + + public func isNil() -> Bool { + return nativeInstance.instance == nil + } + + /** Creates an address with a display name and a mailbox. + + Example: [MCOAddress addressWithDisplayName:@"DINH Viêt Hoà" mailbox:@"hoa@etpan.org"] */ + public convenience init?(displayName: String?, mailbox: String) { + let autoreleasePool = CAutoreleasePool_init() + defer { + autoreleasePool.release() + } + let addrss = CAddress.addressWithDisplayName(displayName?.mailCoreString() ?? MailCoreString(), mailbox.mailCoreString()) + guard addrss.instance != nil else { + return nil + } + self.init(address: addrss) + } + + /** Creates an address with only a mailbox. + + Example: [MCOAddress addressWithMailbox:@"hoa@etpan.org"]*/ + public convenience init?(mailbox: String) { + let autoreleasePool = CAutoreleasePool_init() + defer { + autoreleasePool.release() + } + let addrss = CAddress.addressWithMailbox(mailbox.mailCoreString()) + self.init(address: addrss) + } + + /** Creates an address with a RFC822 string. + + Example: [MCOAddress addressWithRFC822String:@"DINH Vi=C3=AAt Ho=C3=A0 "]*/ + public convenience init?(RFC822String: String) { + let autoreleasePool = CAutoreleasePool_init() + defer { + autoreleasePool.release() + } + let addrss = CAddress.addressWithRFC822String(RFC822String.mailCoreString()) + self.init(address: addrss) + } + + /** Creates an address with a non-MIME-encoded RFC822 string. + + Example: [MCOAddress addressWithNonEncodedRFC822String:@"DINH Viêt Hoà "]*/ + public convenience init?(nonEncodedRFC822String: String) { + let autoreleasePool = CAutoreleasePool_init() + defer { + autoreleasePool.release() + } + let addrss = CAddress.addressWithNonEncodedRFC822String(nonEncodedRFC822String.mailCoreString()) + self.init(address: addrss) + } + + /** + Returns an NSArray of MCOAddress objects that contain the parsed + forms of the RFC822 encoded addresses. + + For example: @[ @"DINH Vi=C3=AAt Ho=C3=A0 " ]*/ + public static func addressesWithRFC822String(string: String) -> Array? { + return mailCoreAutoreleasePool { + return Array(mailCoreArray: CAddress.addressesWithRFC822String(string.mailCoreString())) + } + } + + /** + Returns an NSArray of MCOAddress objects that contain the parsed + forms of non-encoded RFC822 addresses. + + For example: @[ "DINH Viêt Hoà " ]*/ + public static func addressesWithNonEncodedRFC822String(string: String) -> Array? { + return mailCoreAutoreleasePool { + return Array(mailCoreArray: CAddress.addressesWithNonEncodedRFC822String(string.mailCoreString())) + } + } + + /** Returns the display name of the address.*/ + public var displayName : String? { + set { + mailCoreAutoreleasePool { + self.nativeInstance.displayName = newValue?.mailCoreString() ?? MailCoreString() + } + } + get { + return mailCoreAutoreleasePool { + self.nativeInstance.displayName.string() + } + } + } + + /** Returns the mailbox of the address.*/ + public var mailbox : String! { + set { + mailCoreAutoreleasePool { + self.nativeInstance.mailbox = newValue.mailCoreString() + } + } + get { + return mailCoreAutoreleasePool { + self.nativeInstance.mailbox.string() + } + } + } + + /** Returns the RFC822 encoding of the address. + + For example: "DINH Vi=C3=AAt Ho=C3=A0 "*/ + public func RFC822String() -> String? { + return mailCoreAutoreleasePool { + return nativeInstance.RFC822String.string() + } + } + + /** Returns the non-MIME-encoded RFC822 encoding of the address. + + For example: "DINH Viêt Hoà "*/ + public func nonEncodedRFC822String() -> String? { + return mailCoreAutoreleasePool { + return nativeInstance.nonEncodedRFC822String.string() + } + } + + override public var hash: Int { + if let displayName = displayName, let mailbox = mailbox { + return displayName.hashValue ^ mailbox.hashValue + } + if let displayName = displayName { + return displayName.hashValue + } + if let mailbox = mailbox { + return mailbox.hashValue + } + return 0 + } + + public override func isEqual(_ object: Any?) -> Bool { + guard let other = object as? MCOAddress else { + return false + } + + return self.displayName == other.displayName && self.mailbox == other.mailbox; + } + + public static func ==(lhs: MCOAddress, rhs: MCOAddress) -> Bool { + return lhs.isEqual(rhs) + } + + public convenience init?(coder aDecoder: NSCoder) { + guard let dict = aDecoder.decodeObject(forKey: "info") as? Dictionary else { + return nil + } + let serializable = dictionaryUnsafeCast(dict) + self.init(mailCoreObject: CObject.objectWithSerializable(serializable)) + self.nativeInstance.retain() + } + + public func encode(with aCoder: NSCoder) { + let serialazable: CDictionary = self.cast().serializable() + let dict = dictionaryUnsafeCast(serialazable) + aCoder.encode(dict, forKey: "info") + } + +} + +public extension Array where Element: MCOAddress { + + func mco_RFC822StringForAddresses() -> String? { + return CAddress.RFC822StringForAddresses(self.mailCoreArray()).string() + } + + func mco_nonEncodedRFC822StringForAddresses() -> String? { + return CAddress.nonEncodedRFC822StringForAddresses(self.mailCoreArray()).string() + } + +} diff --git a/src/swift/abstract/HTMLRendererDelegate.swift b/src/swift/abstract/HTMLRendererDelegate.swift new file mode 100644 index 000000000..c40692c26 --- /dev/null +++ b/src/swift/abstract/HTMLRendererDelegate.swift @@ -0,0 +1,68 @@ +import Foundation +import CMailCore + +public protocol MCOHTMLRendererDelegate { + + //func abstractMessage(_ msg: MCOAbstractMessage, canPreviewPart: MCOAbstractPart?) -> Bool; + + /** This delegate method should return YES if the part should be rendered.*/ + func abstractMessage(_ msg: MCOAbstractMessage, shouldShowPart: MCOAbstractPart?) -> Bool + + /** This delegate method returns the values to be applied to the template for the given header. + See the content of MCHTMLRendererCallback.cpp for the default values of the header.*/ + //func abstractMessage(_ msg: MCOAbstractMessage, templateValuesForHeader: MCOMessageHeader?) -> Dictionary; + + /** This delegate method returns the values to be applied to the template for the given attachment. + See the content of MCHTMLRendererCallback.cpp for the default values of the attachment.*/ + //func abstractMessage(_ msg: MCOAbstractMessage, templateValuesForPart: MCOAbstractPart?) -> Dictionary; + + /** @name Template Methods + The following methods returns templates. They will match the syntax of ctemplate. + See https://code.google.com/p/ctemplate/ */ + + /** This delegate method returns the template for the main header of the message. + See the content of MCHTMLRendererCallback.cpp for the default values of the template.*/ + func abstractMessage(_ msg: MCOAbstractMessage, templateForMainHeader: MCOMessageHeader?) -> String? + + /** This delegate method returns the template an image attachment.*/ + //func abstractMessage(_ msg: MCOAbstractMessage, templateForImage: MCOAbstractPart?) -> String; + + /** This delegate method returns the template attachment other than images. + See the content of MCHTMLRendererCallback.cpp for the default values of the template.*/ + func abstractMessage(_ msg: MCOAbstractMessage, templateForAttachment: MCOAbstractPart?) -> String? + + /** This delegate method returns the template of the main message. + It should include HEADER and a BODY values. + See the content of MCHTMLRendererCallback.cpp for the default values of the template.*/ + func abstractMessageTemplateForMessage(_ msg: MCOAbstractMessage) -> String; + + /** This delegate method returns the template of an embedded message (included as attachment). + It should include HEADER and a BODY values. + See the content of MCHTMLRendererCallback.cpp for the default values of the template.*/ + //func abstractMessage(_ msg: MCOAbstractMessage, templateForEmbeddedMessage: MCOAbstractMessagePart?) -> String; + + /** This delegate method returns the template for the header of an embedded message. + See the content of MCHTMLRendererCallback.cpp for the default values of the template.*/ + //func abstractMessage(_ msg: MCOAbstractMessage, templateForEmbeddedMessageHeader: MCOMessageHeader?) -> String; + + /** This delegate method returns the separator between the text of the message and the attachments.*/ + //func abstractMessageTemplateForAttachmentSeparator(_ msg: MCOAbstractMessage) -> String; + + /** This delegate method cleans HTML content. + For example, it could fix broken tags, add missing , tags. + Default implementation uses HTMLCleaner::cleanHTML to clean HTML content. */ + func abstractMessage(_ msg: MCOAbstractMessage, cleanHTMLForPart: String?) -> String? + + /** @name Filters + + The following methods will filter the HTML content and may apply some filters to + change how to display the message.*/ + + /** This delegate method will apply the filter to HTML rendered content of a given text part. + For example, it could filter the CSS content.*/ + //func abstractMessage(_ msg: MCOAbstractMessage, filterHTMLForPart: String?) -> String; + + /** This delegate method will apply a filter to the whole HTML content. + For example, it could collapse the quoted messages.*/ + func abstractMessage(_ msg: MCOAbstractMessage, filterHTMLForMessage: String?) -> String? +} diff --git a/src/swift/abstract/HTMLRendererImapDelegate.swift b/src/swift/abstract/HTMLRendererImapDelegate.swift new file mode 100644 index 000000000..c9561b867 --- /dev/null +++ b/src/swift/abstract/HTMLRendererImapDelegate.swift @@ -0,0 +1,25 @@ +import Foundation +import CMailCore + +public protocol MCOHTMLRendererIMAPDelegate { + + /** + The delegate method returns NULL if the delegate have not fetch the part yet. The opportunity can also be used to + start fetching the attachment. + It will return the data synchronously if it has already fetched it. + */ + func abstractMessage(_ msg: MCOAbstractMessage, dataForIMAPPart: MCOIMAPPart?, folder: String?) -> Data? + + /** + The delegate method will notify the delegate to start fetching the given part. + It will be used to render an attachment that cannot be previewed. + */ + //func abstractMessage(_ msg: MCOAbstractMessage, prefetchAttachmentIMAPPart: MCOIMAPPart?, folder: String?) + + /** + The delegate method will notify the delegate to start fetching the given part. + It will be used to render an attachment that can be previewed. + */ + //func abstractMessage(_ msg: MCOAbstractMessage, prefetchImageIMAPPart: MCOIMAPPart?, folder: String?) + +} diff --git a/src/swift/abstract/MessageConstants.swift b/src/swift/abstract/MessageConstants.swift new file mode 100644 index 000000000..7a1c31c0c --- /dev/null +++ b/src/swift/abstract/MessageConstants.swift @@ -0,0 +1,130 @@ +// +// MessageConstants.swift +// mailcore2 +// +// Created by Andrew on 7/26/17. +// Copyright © 2017 MailCore. All rights reserved. +// + +import Foundation +import CMailCore + +public struct MCOIMAPMessagesRequestKind : OptionSet { + + public let rawValue: Int + + public init(rawValue: Int) { + self.rawValue = rawValue + } + + public static let uid = MCOIMAPMessagesRequestKind([]) // This is the default and it's always fetched + public static let flags = MCOIMAPMessagesRequestKind(rawValue: 1 << 0) + public static let headers = MCOIMAPMessagesRequestKind(rawValue: 1 << 1) + public static let `structure` = MCOIMAPMessagesRequestKind(rawValue: 1 << 2) + public static let internalDate = MCOIMAPMessagesRequestKind(rawValue: 1 << 3) + public static let fullHeaders = MCOIMAPMessagesRequestKind(rawValue: 1 << 4) + public static let headerSubject = MCOIMAPMessagesRequestKind(rawValue: 1 << 5) + public static let gmailLabels = MCOIMAPMessagesRequestKind(rawValue: 1 << 6) + public static let gmailMessageID = MCOIMAPMessagesRequestKind(rawValue: 1 << 7) + public static let gmailThreadID = MCOIMAPMessagesRequestKind(rawValue: 1 << 8) + public static let extraHeaders = MCOIMAPMessagesRequestKind(rawValue: 1 << 9) + public static let size = MCOIMAPMessagesRequestKind(rawValue: 1 << 10) + + internal func toCIMAPMessagesRequestKind() -> CIMAPMessagesRequestKind { + return CIMAPMessagesRequestKind(rawValue: CEnumInt(self.rawValue)) + } +} + +public struct MCOMessageFlag : OptionSet { + + public let rawValue: Int + + public init(rawValue: Int) { + self.rawValue = rawValue + } + + internal init(cMessageFlag: CMessageFlag) { + self.rawValue = Int(cMessageFlag.rawValue) + } + + public static let seen = MCOMessageFlag(rawValue: 1 << 0) + public static let answered = MCOMessageFlag(rawValue: 1 << 1) + public static let flagged = MCOMessageFlag(rawValue: 1 << 2) + public static let deleted = MCOMessageFlag(rawValue: 1 << 3) + public static let draft = MCOMessageFlag(rawValue: 1 << 4) + public static let mdnSent = MCOMessageFlag(rawValue: 1 << 5) + public static let forwarded = MCOMessageFlag(rawValue: 1 << 6) + public static let submitPending = MCOMessageFlag(rawValue: 1 << 7) + public static let submitted = MCOMessageFlag(rawValue: 1 << 8) + + public static let maskAll: MCOMessageFlag = [.seen, .answered, .flagged, .deleted, .draft, .mdnSent, .forwarded, .submitPending, .submitted] + + internal func toCMessageFlag() -> CMessageFlag { + return CMessageFlag(rawValue: CEnumInt(self.rawValue)) + } +} + +public struct MCOAuthType : OptionSet { + + public let rawValue: Int + + public init(rawValue: Int) { + self.rawValue = rawValue + } + + internal init(cAuthType: CAuthType) { + self.rawValue = Int(cAuthType.rawValue) + } + + public static let SASLNone = MCOAuthType([]) + public static let SASLCRAMMD5 = MCOAuthType(rawValue: 1 << 0) + public static let SASLPlain = MCOAuthType(rawValue: 1 << 1) + public static let SASLGSSAPI = MCOAuthType(rawValue: 1 << 2) + public static let SASLDIGESTMD5 = MCOAuthType(rawValue: 1 << 3) + public static let SASLLogin = MCOAuthType(rawValue: 1 << 4) + public static let SASLSRP = MCOAuthType(rawValue: 1 << 5) + public static let SASLNTLM = MCOAuthType(rawValue: 1 << 6) + public static let SASLKerberosV4 = MCOAuthType(rawValue: 1 << 7) + public static let XOAuth2 = MCOAuthType(rawValue: 1 << 8) + public static let XOAuth2Outlook = MCOAuthType(rawValue: 1 << 9) + + internal func toCAuthType() -> CAuthType { + return CAuthType(rawValue: CEnumInt(self.rawValue)) + } +} + +public struct MCOIMAPFolderFlag : OptionSet { + + public let rawValue: Int + + public init(rawValue: Int) { + self.rawValue = rawValue + } + + internal init(cIMAPFolderFlag: CIMAPFolderFlag) { + self.rawValue = Int(cIMAPFolderFlag.rawValue) + } + + public static let marked = MCOIMAPFolderFlag(rawValue: 1 << 0) + public static let unmarked = MCOIMAPFolderFlag(rawValue: 1 << 1) + public static let noSelect = MCOIMAPFolderFlag(rawValue: 1 << 2) + public static let noInferiors = MCOIMAPFolderFlag(rawValue: 1 << 3) + public static let inbox = MCOIMAPFolderFlag(rawValue: 1 << 4) + public static let sentMail = MCOIMAPFolderFlag(rawValue: 1 << 5) + public static let starred = MCOIMAPFolderFlag(rawValue: 1 << 6) + public static let allMail = MCOIMAPFolderFlag(rawValue: 1 << 7) + public static let trash = MCOIMAPFolderFlag(rawValue: 1 << 8) + public static let drafts = MCOIMAPFolderFlag(rawValue: 1 << 9) + public static let spam = MCOIMAPFolderFlag(rawValue: 1 << 10) + public static let important = MCOIMAPFolderFlag(rawValue: 1 << 11) + public static let archive = MCOIMAPFolderFlag(rawValue: 1 << 12) + + public static let all: MCOIMAPFolderFlag = [.allMail] + public static let junk: MCOIMAPFolderFlag = [.spam] + public static let flagged: MCOIMAPFolderFlag = [.starred] + public static let typeMask: MCOIMAPFolderFlag = [.inbox, .sentMail, .starred, .allMail, .trash, .drafts, .spam, .important, .archive] + + internal func toCIMAPFolderFlag() -> CIMAPFolderFlag { + return CIMAPFolderFlag(rawValue: CEnumInt(self.rawValue)) + } +} diff --git a/src/swift/abstract/MessageHeader.swift b/src/swift/abstract/MessageHeader.swift new file mode 100644 index 000000000..4495915da --- /dev/null +++ b/src/swift/abstract/MessageHeader.swift @@ -0,0 +1,305 @@ +import Foundation +import CMailCore + +public class MCOMessageHeader: Convertible, NSCoding { + + var nativeInstance:CMessageHeader + + required public init(mailCoreObject obj: CObject) { + self.nativeInstance = CMessageHeader.init(cobject: obj) + self.nativeInstance.retain() + } + + internal func cast() -> CObject { + return nativeInstance.toCObject(); + } + + public init(data:Data) { + let autoreleasePool = CAutoreleasePool_init() + defer { + autoreleasePool.release() + } + self.nativeInstance = CMessageHeader_init(); + self.importHeadersData(data: data); + } + + deinit { + nativeInstance.release() + } + + /** Message-ID field.*/ + public var messageID : String? { + set { + mailCoreAutoreleasePool { + self.nativeInstance.messageID = newValue?.mailCoreString() ?? MailCoreString() + } + } + get { + return mailCoreAutoreleasePool { + self.nativeInstance.messageID.string() + } + } + } + + /** Message-ID auto-generated flag.*/ + public var isMessageIDAutoGenerated : Bool { + get { + return mailCoreAutoreleasePool { + self.nativeInstance.isMessageIDAutoGenerated() + } + } + } + + /** References field. It's an array of message-ids.*/ + public var references : Array? { + get { + return mailCoreAutoreleasePool { + Array(mailCoreArray: self.nativeInstance.references) + } + } + set { + mailCoreAutoreleasePool { + self.nativeInstance.references = newValue?.mailCoreArray() ?? CArray() + } + } + } + + /** In-Reply-To field. It's an array of message-ids.*/ + public var inReplyTo : Array? { + set { + mailCoreAutoreleasePool { + self.nativeInstance.inReplyTo = newValue?.mailCoreArray() ?? CArray() + } + } + get { + return mailCoreAutoreleasePool { + Array(mailCoreArray: self.nativeInstance.inReplyTo) + } + } + } + + /** To field: recipient of the message. It's an array of MCOAddress.*/ + public var to: Array? { + set { + mailCoreAutoreleasePool { + self.nativeInstance.to = newValue?.mailCoreArray() ?? CArray() + } + } + get { + return mailCoreAutoreleasePool { + Array(mailCoreArray: self.nativeInstance.to) + } + } + } + + /** Cc field: cc recipient of the message. It's an array of MCOAddress.*/ + public var cc: Array? { + set { + mailCoreAutoreleasePool { + self.nativeInstance.cc = newValue?.mailCoreArray() ?? CArray() + } + } + get { + return mailCoreAutoreleasePool { + Array(mailCoreArray: self.nativeInstance.cc) + } + } + } + + /** Bcc field: bcc recipient of the message. It's an array of MCOAddress.*/ + public var bcc: Array? { + set { + mailCoreAutoreleasePool { + self.nativeInstance.bcc = newValue?.mailCoreArray() ?? CArray() + } + } + get { + return mailCoreAutoreleasePool { + Array(mailCoreArray: self.nativeInstance.bcc) + } + } + } + + /** Reply-To field. It's an array of MCOAddress.*/ + public var replyTo: Array? { + set { + mailCoreAutoreleasePool { + self.nativeInstance.replyTo = newValue?.mailCoreArray() ?? CArray() + } + } + get { + return mailCoreAutoreleasePool { + Array(mailCoreArray: self.nativeInstance.replyTo) + } + } + } + + /** Subject of the message.*/ + public var subject: String? { + set { + mailCoreAutoreleasePool { + self.nativeInstance.subject = newValue?.mailCoreString() ?? MailCoreString() + } + } + get { + return mailCoreAutoreleasePool { + self.nativeInstance.subject.string() + } + } + } + + /** Email user agent name: X-Mailer header.*/ + public var userAgent: String? { + set { + mailCoreAutoreleasePool { + self.nativeInstance.userAgent = newValue?.mailCoreString() ?? MailCoreString() + } + } + get { + return mailCoreAutoreleasePool { + self.nativeInstance.userAgent.string() + } + } + } + + public var receivedDate: Date { + set { + mailCoreAutoreleasePool { + self.nativeInstance.receivedDate = time_t(newValue.timeIntervalSince1970) + } + } + get { + return mailCoreAutoreleasePool { + Date.init(timeIntervalSince1970: TimeInterval(self.nativeInstance.receivedDate)) + } + } + } + + public var date: Date { + set { + mailCoreAutoreleasePool { + self.nativeInstance.date = time_t(newValue.timeIntervalSince1970) + } + } + get { + return mailCoreAutoreleasePool { + Date.init(timeIntervalSince1970: TimeInterval(self.nativeInstance.date)) + } + } + } + + public var sender: MCOAddress? { + set { + mailCoreAutoreleasePool { + self.nativeInstance.sender = newValue?.nativeInstance ?? CAddress() + } + } + get { + return mailCoreAutoreleasePool { + createMCOObject(from: self.nativeInstance.sender.toCObject()) + } + } + } + + public var from: MCOAddress? { + set { + mailCoreAutoreleasePool { + self.nativeInstance.from = newValue?.nativeInstance ?? CAddress() + } + } + get { + return mailCoreAutoreleasePool { + let address = self.nativeInstance.from + let obj = address.toCObject() + let object: MCOAddress? = createMCOObject(from: obj) + return object + } + } + } + + /** Adds a custom header.*/ + public func setExtraHeaderValue(_ value: String, forName name: String) { + mailCoreAutoreleasePool { + nativeInstance.setExtraHeader(name.mailCoreString(), value.mailCoreString()) + } + } + + /** Remove a given custom header.*/ + public func removeExtraHeaderForName(name: String) { + mailCoreAutoreleasePool { + nativeInstance.removeExtraHeader(name.mailCoreString()) + } + } + + /** Returns the value of a given custom header.*/ + public func extraHeaderValue(forName: String) -> String? { + return mailCoreAutoreleasePool { + return nativeInstance.extraHeaderValueForName(forName.mailCoreString()).string() + } + } + + /** Returns an array with the names of all custom headers.*/ + public func allExtraHeadersNames() -> Array? { + return mailCoreAutoreleasePool { + return Array(mailCoreArray: nativeInstance.allExtraHeadersNames()); + } + } + + /** Extracted subject (also remove square brackets).*/ + public func extractedSubject() -> String? { + return mailCoreAutoreleasePool { + return nativeInstance.extractedSubject().string() + } + } + + /** Extracted subject (don't remove square brackets).*/ + public func partialExtractedSubject() -> String? { + return mailCoreAutoreleasePool { + return nativeInstance.partialExtractedSubject().string() + } + } + + /** Fill the header using the given RFC 822 data.*/ + public func importHeadersData(data: Data) { + mailCoreAutoreleasePool { + nativeInstance.importHeadersData(data.mailCoreData()) + } + } + + /** Returns a header that can be used as a base for a reply message.*/ + public func replyHeaderWithExcludedRecipients(excludedRecipients: Array) -> MCOMessageHeader? { + return mailCoreAutoreleasePool { + return createMCOObject(from: nativeInstance.replyHeaderWithExcludedRecipients(excludedRecipients.mailCoreArray()).toCObject()) + } + } + + /** Returns a header that can be used as a base for a reply all message.*/ + public func replyAllHeaderWithExcludedRecipients(excludedRecipients: Array) -> MCOMessageHeader? { + return mailCoreAutoreleasePool { + return createMCOObject(from: nativeInstance.replyAllHeaderWithExcludedRecipients(excludedRecipients.mailCoreArray()).toCObject()) + } + } + + /** Returns a header that can be used as a base for a forward message.*/ + public func forwardHeader() -> MCOMessageHeader? { + return mailCoreAutoreleasePool { + return createMCOObject(from: nativeInstance.forwardHeader().toCObject()) + } + } + + public convenience required init?(coder aDecoder: NSCoder) { + guard let dict = aDecoder.decodeObject(forKey: "info") as? Dictionary else { + return nil + } + let serializable = dictionaryUnsafeCast(dict) + self.init(mailCoreObject: CObject.objectWithSerializable(serializable)) + self.nativeInstance.retain() + } + + public func encode(with aCoder: NSCoder) { + let serialazable: CDictionary = self.cast().serializable() + let dict = dictionaryUnsafeCast(serialazable) + aCoder.encode(dict, forKey: "info") + } + +} diff --git a/src/swift/basetypes/Array+Mailcore.swift b/src/swift/basetypes/Array+Mailcore.swift new file mode 100644 index 000000000..2cca6bf25 --- /dev/null +++ b/src/swift/basetypes/Array+Mailcore.swift @@ -0,0 +1,61 @@ +import Foundation +import CMailCore + +extension Array where Element: Convertible { + + init?(mailCoreArray cArray: CArray) { + guard cArray.instance != nil else { + return nil + } + self.init() + let size = cArray.count + for index in 0 ..< size { + if let obj: Element = createMCOObject(from: cArray.getObject(index)) { + self.append(obj) + } + } + } + + func mailCoreArray() -> CArray { + let cArray = CArray_init(); + for convertable in self { + cArray.addObject(convertable.cast()); + } + return cArray; + } +} + +extension Array: Convertible { + + init(mailCoreObject: CObject) { + self = arrayUnsafeCast(CArray(cobject: mailCoreObject)) as! Array + } + + func cast() -> CObject { + return arrayUnsafeCast(self).toCObject() + } +} + +func arrayUnsafeCast(_ cArray: CArray) -> Array? { + guard cArray.instance != nil else { + return nil + } + var array = Array() + let size = cArray.count + for index in 0 ..< size { + if let obj = createMCOObjectWithoutConversion(from: cArray.getObject(index)) { + array.append(obj) + } + } + return array +} + +func arrayUnsafeCast(_ array: Array?) -> CArray { + let cArray = CArray_init(); + for obj in array ?? [] { + if let convertible = obj as? Convertible { + cArray.addObject(convertible.cast()); + } + } + return cArray; +} diff --git a/src/swift/basetypes/Convertible.swift b/src/swift/basetypes/Convertible.swift new file mode 100644 index 000000000..7b4377429 --- /dev/null +++ b/src/swift/basetypes/Convertible.swift @@ -0,0 +1,9 @@ +import Foundation +import CMailCore + +internal protocol Convertible { + func cast() -> CObject + init(mailCoreObject: CObject) +} + + diff --git a/src/swift/basetypes/Data+Mailcore.swift b/src/swift/basetypes/Data+Mailcore.swift new file mode 100644 index 000000000..e1bc2d5b4 --- /dev/null +++ b/src/swift/basetypes/Data+Mailcore.swift @@ -0,0 +1,71 @@ +import Foundation +import CMailCore + +extension Data { + + init?(cdata: CData) { + guard cdata.instance != nil else { + return nil + } + if let bytes = cdata.bytes { + self = Data(bytes: bytes, count: Int(cdata.length)) + } + else { + self = Data() + } + } + + public func mailCoreData() -> CData { + return self.withUnsafeBytes { bytes -> CData in + guard let bytes: UnsafePointer = Data.unwrapUnsafeBytes(bytes) else { + assert(false) + return CData() + } + + return CData.dataWithBytes(bytes, UInt32(self.count)) + } + } + + init?(desctructiveCData data: CData) { + guard data.instance != nil else { + return nil + } + guard let pointer = UnsafeMutableRawPointer.init(mutating: data.bytes) else { + return nil + } + let bytesDeallocator = data.bytesDeallocator + let length = Int(data.length) + let deallocator = data.externallyAllocatedMemory == false ? Data.Deallocator.free : Data.Deallocator.custom({ pointer, length in + bytesDeallocator?(pointer.assumingMemoryBound(to: Int8.self), UInt32(length)) + }) + self = Data.init(bytesNoCopy: pointer, count: length, deallocator: deallocator) + // Swift take ownership of byte buffer allocated at mailcore + // That's why we clear bytes pointer at mailcore::Data to prevent freeing memory there + data.destructiveDataClear() + } + +} + +#if os(Android) || os(Windows) +#else + +extension NSData { + + public func mailCoreData() -> CData { + let swiftData = self as Data + return swiftData.mailCoreData() + } + +} + +#endif + +extension Data { + public static func unwrapUnsafeBytes(_ ptr: UnsafeRawBufferPointer) -> UnsafePointer? { + return ptr.bindMemory(to: T.self).baseAddress + } + + public static func unwrapUnsafeMutableBytes(_ ptr: UnsafeMutableRawBufferPointer) -> UnsafeMutablePointer? { + return ptr.bindMemory(to: T.self).baseAddress + } +} diff --git a/src/swift/basetypes/Dictionary+Mailcore.swift b/src/swift/basetypes/Dictionary+Mailcore.swift new file mode 100644 index 000000000..245cb57cd --- /dev/null +++ b/src/swift/basetypes/Dictionary+Mailcore.swift @@ -0,0 +1,83 @@ +import Foundation +import CMailCore + +extension Dictionary { + + static func cast(_ dict:CDictionary) -> Dictionary { + var result = Dictionary(); + if dict.instance == nil { + return result + } + let keys = dict.allKeys(); + let size = keys.count + for index in 0 ..< size { + let mcKey = keys.getObject(index) + if let key: K = createMCOObject(from: keys.getObject(index)), + let value: T = createMCOObject(from: dict.objectForKey(mcKey)) { + result[key] = value + } + } + return result; + } + + static func cast(_ dict:Dictionary?) -> CDictionary { + guard let dict = dict else { + return CDictionary() + } + let result = CDictionary_init(); + for (key, value) in dict { + result.setObjectForKey(key.cast(), value.cast()); + } + return result; + } +} + +extension Dictionary: Convertible { + + func cast() -> CObject { + return dictionaryUnsafeCast(self).toCObject() + } + + init(mailCoreObject: CObject) { + self = dictionaryUnsafeCast(CDictionary(cobject: mailCoreObject)) as! Dictionary + } +} + +func dictionaryUnsafeCast(_ dict:CDictionary) -> Dictionary { + var result = Dictionary(); + if dict.instance == nil { + return result + } + let keys = dict.allKeys(); + let size = keys.count + for index in 0 ..< size { + let mcKey = keys.getObject(index) + if let key = createMCOObjectWithoutConversion(from: keys.getObject(index)) as? AnyHashable, + let value = createMCOObjectWithoutConversion(from: dict.objectForKey(mcKey)) { + result[key] = value + } + else { + assert(false, "Unknwon MCO type found") + } + } + return result; +} + +func dictionaryUnsafeCast(_ dict:Dictionary?) -> CDictionary { + guard let dict = dict else { + return CDictionary() + } + let result = CDictionary_init(); + for (key, value) in dict { + if let key = key as? Convertible, let value = value as? Convertible { + result.setObjectForKey(key.cast(), value.cast()); + } + else { + assert(false, "Unknwon MCO type found") + } + } + return result; +} + + + diff --git a/src/swift/basetypes/MCOIndexSet.swift b/src/swift/basetypes/MCOIndexSet.swift new file mode 100644 index 000000000..542848691 --- /dev/null +++ b/src/swift/basetypes/MCOIndexSet.swift @@ -0,0 +1,204 @@ +import Foundation +import CMailCore + +#if SWIFT_PACKAGE || os(Windows) + public typealias MailCoreRange = CMailCore.Range +#else + public typealias MailCoreRange = MailCore.Range +#endif + +/** similar to NSMutableIndexSet but supports int64_t. MCRange has a location (uint64_t) and length (uint64_t). */ +public class MCOIndexSet: NSObjectCompat, NSCopying, NSCoding { + + internal var nativeInstance: CIndexSet; + + internal func cast() -> CIndexSet { + return nativeInstance; + } + + public override init() { + self.nativeInstance = CIndexSet_init(); + } + + init?(_ indexSet: CIndexSet) { + guard indexSet.instance != nil else { + return nil + } + self.nativeInstance = indexSet; + self.nativeInstance.retain() + } + + public convenience init(foundationIndexSet: IndexSet) { + self.init() + for range in foundationIndexSet.rangeView { + let range = RangeMake(UInt64(range.lowerBound), UInt64(range.upperBound - range.lowerBound - 1)) + self.add(range: range) + } + } + + deinit { + self.nativeInstance.release() + } + + /** Creates an index set that contains a range of integers.*/ + public convenience init(range: MailCoreRange) { + let autoreleasePool = CAutoreleasePool_init() + defer { + autoreleasePool.release() + } + self.init(CIndexSet(range: range))! + } + + /** Creates an index set with a single integer.*/ + public convenience init(index: UInt64) { + let autoreleasePool = CAutoreleasePool_init() + defer { + autoreleasePool.release() + } + self.init(CIndexSet(idx: index))! + } + + /** Returns the number of integers in that index set.*/ + public func count() -> UInt64 { + return nativeInstance.count + } + + /** Adds an integer to the index set.*/ + public func add(_ index: UInt64) { + mailCoreAutoreleasePool { + nativeInstance.addIndex(index); + } + } + + /** Removes an integer from the index set.*/ + public func remove(_ index: UInt64) { + mailCoreAutoreleasePool { + nativeInstance.removeIndex(index); + } + } + + /** Returns YES if the index set contains the given integer.*/ + public func contains(_ index: UInt64) -> Bool { + return mailCoreAutoreleasePool { + return nativeInstance.containsIndex(index); + } + } + + /** Adds a range of integers to the index set.*/ + public func add(range: MailCoreRange) { + mailCoreAutoreleasePool { + nativeInstance.addRange(range); + } + } + + /** Removes a range of integers from the index set.*/ + public func remove(range: MailCoreRange) { + mailCoreAutoreleasePool { + nativeInstance.removeRange(range); + } + } + + /** Removes all integers that are not in the given range.*/ + public func intersects(range: MailCoreRange) { + mailCoreAutoreleasePool { + nativeInstance.intersectsRange(range); + } + } + + /** Adds all indexes from an other index set to the index set.*/ + public func add(indexSet: MCOIndexSet) { + mailCoreAutoreleasePool { + nativeInstance.addIndexSet(indexSet.nativeInstance); + } + } + + /** Remove all indexes from an other index set from the index set.*/ + public func remove(indexSet: MCOIndexSet) { + mailCoreAutoreleasePool { + nativeInstance.removeIndexSet(indexSet.nativeInstance); + } + } + + /** Removes all integers that are not in the given index set.*/ + public func intersects(indexSet: MCOIndexSet) { + mailCoreAutoreleasePool { + nativeInstance.intersectsIndexSet(indexSet.nativeInstance); + } + } + + /** Returns all the ranges of ths index set.*/ + public func allRanges() -> Array { + return mailCoreAutoreleasePool { + var array = Array(); + for index in 0.. UInt32 { + return nativeInstance.rangesCount(); + } + + /** Returns an NSIndexSet from a MCOIndexSet */ + public func foundationIndexSet() -> IndexSet { + var result = IndexSet(); + let ranges = self.allRanges(); + for range in ranges { + result.insert(integersIn: Int(range.location)...Int(range.location + range.length)); + } + return result; + } + + public func enumerate(_ block: (_ idx: UInt64) -> Void) { + let ranges = allRanges() + for i in 0 ..< Int(rangesCount()) { + for k in 0 ... ranges[i].length { + block(ranges[i].location + k) + } + } + } + + public subscript(index: UInt32) -> MailCoreRange { + return nativeInstance.range(index) + } + + public func copy(with zone: NSZone? = nil) -> Any { + return copyIndexSet() + } + + public func copyIndexSet() -> MCOIndexSet { + return mailCoreAutoreleasePool { + let nativeIndexSet = CIndexSet(cobject: self.nativeInstance.copy()) + let mcoIndexSet = MCOIndexSet(nativeIndexSet)! + nativeIndexSet.release() + return mcoIndexSet + } + } + + public convenience required init?(coder aDecoder: NSCoder) { + guard let dict = aDecoder.decodeObject(forKey: "info") as? Dictionary else { + return nil + } + let serializable = dictionaryUnsafeCast(dict) + self.init(CIndexSet.init(cobject: CObject.objectWithSerializable(serializable))) + } + + public func encode(with aCoder: NSCoder) { + let serialazable: CDictionary = self.nativeInstance.toCObject().serializable() + let dict = dictionaryUnsafeCast(serialazable) + aCoder.encode(dict, forKey: "info") + } + + +} + +public extension IndexSet { + + func mcoIndexSet() -> MCOIndexSet { + return MCOIndexSet(foundationIndexSet: self) + } +} + diff --git a/src/swift/basetypes/Object.swift b/src/swift/basetypes/Object.swift new file mode 100644 index 000000000..b3455c832 --- /dev/null +++ b/src/swift/basetypes/Object.swift @@ -0,0 +1,70 @@ +// +// Object.swift +// mailcore2 +// +// Created by Andrew on 8/3/17. +// Copyright © 2017 MailCore. All rights reserved. +// + +import Foundation +import CMailCore + +var typeHash: [Data: Convertible.Type] = [Data(cdata: Value_mailCoreTypeInfo())!: UInt32.self, + Data(cdata: MailCoreString_mailCoreTypeInfo())!: String.self, + Data(cdata: CMailProvider_mailCoreTypeInfo())!: MCOMailProvider.self, + Data(cdata: CNetService_mailCoreTypeInfo())!: MCONetService.self, + Data(cdata: CAttachment_mailCoreTypeInfo())!: MCOAttachment.self, + Data(cdata: CMessageBuilder_mailCoreTypeInfo())!: MCOMessageBuilder.self, + Data(cdata: CMessageParser_mailCoreTypeInfo())!: MCOMessageParser.self, + Data(cdata: CMessagePart_mailCoreTypeInfo())!: MCOMessagePart.self, + Data(cdata: CAbstractMessage_mailCoreTypeInfo())!: MCOAbstractMessage.self, + Data(cdata: CAbstractMessagePart_mailCoreTypeInfo())!: MCOAbstractMessagePart.self, + Data(cdata: CAbstractMultipart_mailCoreTypeInfo())!: MCOAbstractMultipart.self, + Data(cdata: CAbstractPart_mailCoreTypeInfo())!: MCOAbstractPart.self, + Data(cdata: CAddress_mailCoreTypeInfo())!: MCOAddress.self, + Data(cdata: CMessageHeader_mailCoreTypeInfo())!: MCOMessageHeader.self, + Data(cdata: CIMAPFolder_mailCoreTypeInfo())!: MCOIMAPFolder.self, + Data(cdata: CIMAPFolderInfo_mailCoreTypeInfo())!: MCOIMAPFolderInfo.self, + Data(cdata: CIMAPFolderStatus_mailCoreTypeInfo())!: MCOIMAPFolderStatus.self, + Data(cdata: CIMAPIdentity_mailCoreTypeInfo())!: MCOIMAPIdentity.self, + Data(cdata: CIMAPMessage_mailCoreTypeInfo())!: MCOIMAPMessage.self, + Data(cdata: CIMAPMessagePart_mailCoreTypeInfo())!: MCOIMAPMessagePart.self, + Data(cdata: CIMAPMultipart_mailCoreTypeInfo())!: MCOIMAPMultipart.self, + Data(cdata: CIMAPNamespace_mailCoreTypeInfo())!: MCOIMAPNamespace.self, + Data(cdata: CIMAPNamespaceItem_mailCoreTypeInfo())!: MCOIMAPNamespaceItem.self, + Data(cdata: CIMAPPart_mailCoreTypeInfo())!: MCOIMAPPart.self, + Data(cdata: CMultipart_mailCoreTypeInfo())!: MCOMultipart.self, + Data(cdata: CDictionary_mailCoreTypeInfo())!: Dictionary.self, + Data(cdata: CArray_mailCoreTypeInfo())!: Array.self] + +func MCORegisterType(_ type: Convertible.Type, typeInfo: Data) { + typeHash[typeInfo] = type +} + +func type(forTypeInfo typeInfo: Data) -> Convertible.Type { + let type = typeHash[typeInfo] + assert(type != nil) + return type! +} + +func createMCOObject(from cobject: CObject) -> T? { + if cobject.instance == nil { + return nil + } + guard let typeInfo = Data.init(cdata: getTypeNameFromObject(cobject)), let type = typeHash[typeInfo] else { + assert(false, "MCO Unknown type") + return nil + } + return type.init(mailCoreObject: cobject) as? T +} + +func createMCOObjectWithoutConversion(from cobject: CObject) -> Convertible? { + if cobject.instance == nil { + return nil + } + guard let typeInfo = Data.init(cdata: getTypeNameFromObject(cobject)), let type = typeHash[typeInfo] else { + assert(false, "MCO Unknown type") + return nil + } + return type.init(mailCoreObject: cobject) +} diff --git a/src/swift/basetypes/String+Mailcore.swift b/src/swift/basetypes/String+Mailcore.swift new file mode 100644 index 000000000..c88b0e1f4 --- /dev/null +++ b/src/swift/basetypes/String+Mailcore.swift @@ -0,0 +1,48 @@ +import Foundation +import CMailCore + +extension String : Convertible { + + //FIXME + public func mailCoreString() -> MailCoreString { + guard let uchars = self.data(using: .utf16LittleEndian) else { + // instead of nil + return MailCoreString() + } + + return uchars.withUnsafeBytes { bytes -> MailCoreString in + guard let bytes: UnsafePointer = Data.unwrapUnsafeBytes(bytes) else { + assert(false) + return MailCoreString() + } + + return MailCoreString.stringWithCharacters(bytes, UInt32(uchars.count / 2)) + } + } + + func cast() -> CObject { + return self.mailCoreString().toCObject() + } + + init(mailCoreObject str: CObject) { + let mailCoreString = MailCoreString.init(cobject: str) + self = mailCoreString.string() ?? "" // Maybe it should be failable constructor + } +} + +extension MailCoreString { + + public func string() -> String? { + guard self.instance != nil else { + return nil + } + if let unicodeCharacters = self.unicodeCharacters { + return String(utf16CodeUnits: unicodeCharacters, count: Int(self.length)) + } + else { + return String() + } + + } + +} diff --git a/src/swift/basetypes/UInt32+Mailcore.swift b/src/swift/basetypes/UInt32+Mailcore.swift new file mode 100644 index 000000000..9f87b2923 --- /dev/null +++ b/src/swift/basetypes/UInt32+Mailcore.swift @@ -0,0 +1,13 @@ +import Foundation +import CMailCore + +extension UInt32 : Convertible { + + func cast() -> CObject { + return CObject(uint32: self); + } + + init(mailCoreObject obj: CObject) { + self = obj.castToUInt32(); + } +} diff --git a/src/swift/imap/IMAPAppendMessageOperation.swift b/src/swift/imap/IMAPAppendMessageOperation.swift new file mode 100644 index 000000000..c988dcb92 --- /dev/null +++ b/src/swift/imap/IMAPAppendMessageOperation.swift @@ -0,0 +1,69 @@ +import Foundation +import CMailCore + +public class MCOIMAPAppendMessageOperation : MCOIMAPBaseOperation { + + public typealias CompletionBlock = (Error?, UInt32) -> Void + + internal var operation: CIMAPAppendMessageOperation + private var completionBlock : CompletionBlock? + public var progressBlock : MCOOperationProgressBlock? + + internal init(operation:CIMAPAppendMessageOperation) { + self.operation = operation + self.operation.retain() + super.init(baseOperation: CIMAPBaseOperation.init(cobject: operation.toCObject())) + } + + deinit { + self.operation.release() + progressBlock = nil + completionBlock = nil + } + + public var date: time_t { + get { + return mailCoreAutoreleasePool { + return self.operation.date + } + } + set { + return mailCoreAutoreleasePool { + self.operation.date = newValue + } + } + } + + public func start(completionBlock: CompletionBlock?) { + self.completionBlock = completionBlock + start() + } + + public override func cancel() { + completionBlock?(MailCoreError.error(code: ErrorCanceled), 0) + completionBlock = nil + super.cancel() + } + + public override func operationCompleted() { + guard let completionBlock = self.completionBlock else { + return + } + + mailCoreAutoreleasePool { + let errorCode = error() + if errorCode == ErrorNone { + completionBlock(nil, operation.createdUID()) + } + else { + completionBlock(MailCoreError.error(code: errorCode), 0) + } + } + self.completionBlock = nil + } + + public override func bodyProgress(current: UInt32, maximum: UInt32) { + progressBlock?(current, maximum) + } + +} diff --git a/src/swift/imap/IMAPBaseOperation.swift b/src/swift/imap/IMAPBaseOperation.swift new file mode 100644 index 000000000..84abb17fb --- /dev/null +++ b/src/swift/imap/IMAPBaseOperation.swift @@ -0,0 +1,70 @@ +import Foundation +import CMailCore + +public class MCOIMAPBaseOperation : MCOOperation { + + public typealias MCOOperationProgressBlock = (UInt32, UInt32) -> Void + public typealias MCOOperationItemProgressBlock = (UInt32) -> Void + + internal var baseOperation: CIMAPBaseOperation; + public var session: MCOIMAPSession? + + internal init(baseOperation: CIMAPBaseOperation) { + self.baseOperation = baseOperation + self.baseOperation.retain() + super.init(baseOperation.cOperation) + self.baseOperation.cOperation = super.nativeInstance + self.baseOperation = self.baseOperation.setProgressBlocks(itemProgressCallback, + bodyProgressCallback, + Unmanaged.passUnretained(self).toOpaque()) + } + + deinit { + baseOperation.release() + } + + internal func error() -> ErrorCode { + return baseOperation.error() + } + + /** + Aborts this operation's IMAP command if it is the one currently running on its connection: the + blocked read returns at once instead of waiting out the socket timeout, so whatever is queued + behind it - a disconnect, above all - runs immediately. Does nothing when this operation is not + the one running. + + Unlike cancel(), which only raises a flag mailcore checks before starting an operation, this + reaches the command already in flight. It costs the connection: the stream stays cancelled and + is rebuilt on next use, so call it for a command being abandoned, never to hurry up one whose + result still matters. + + - Returns: whether a command was actually interrupted, i.e. whether this operation was the one + running. `false` means nothing was holding the connection on its behalf. + */ + @discardableResult + public func interruptCurrentCommand() -> Bool { + return mailCoreAutoreleasePool { + baseOperation.interruptCurrentCommand() + } + } + + public func itemProgress(current: UInt32, maximum: UInt32) { + + } + + public func bodyProgress(current: UInt32, maximum: UInt32) { + + } +} + +//MARK: C Functions +public func itemProgressCallback(ref: UnsafeRawPointer?, current: UInt32, maximum: UInt32) { + let selfRef = Unmanaged.fromOpaque(ref!).takeUnretainedValue() + selfRef.itemProgress(current: current, maximum: maximum) +} + +public func bodyProgressCallback(ref: UnsafeRawPointer?, current: UInt32, maximum: UInt32) { + let selfRef = Unmanaged.fromOpaque(ref!).takeUnretainedValue() + selfRef.bodyProgress(current: current, maximum: maximum) +} + diff --git a/src/swift/imap/IMAPCapabilityOperation.swift b/src/swift/imap/IMAPCapabilityOperation.swift new file mode 100644 index 000000000..af822936f --- /dev/null +++ b/src/swift/imap/IMAPCapabilityOperation.swift @@ -0,0 +1,50 @@ +import Foundation +import CMailCore + +public class MCOIMAPCapabilityOperation : MCOIMAPBaseOperation { + + public typealias CompletionBlock = (Error?, MCOIndexSet?) -> Void + + internal var operation: CIMAPCapabilityOperation + private var completionBlock : CompletionBlock? + + internal init(operation:CIMAPCapabilityOperation) { + self.operation = operation + self.operation.retain() + super.init(baseOperation: CIMAPBaseOperation.init(cobject: operation.toCObject())) + } + + deinit { + self.operation.release() + completionBlock = nil + } + + public func start(completionBlock: CompletionBlock?) { + self.completionBlock = completionBlock + start() + } + + public override func cancel() { + completionBlock?(MailCoreError.error(code: ErrorCanceled), nil) + completionBlock = nil + super.cancel() + } + + public override func operationCompleted() { + guard let completionBlock = self.completionBlock else { + return + } + + mailCoreAutoreleasePool { + let errorCode = error() + if errorCode == ErrorNone { + completionBlock(nil, MCOIndexSet(operation.capabilities())) + } + else { + completionBlock(MailCoreError.error(code: errorCode), nil) + } + } + self.completionBlock = nil + } + +} diff --git a/src/swift/imap/IMAPCheckAccountOperation.swift b/src/swift/imap/IMAPCheckAccountOperation.swift new file mode 100644 index 000000000..b8f07dcc0 --- /dev/null +++ b/src/swift/imap/IMAPCheckAccountOperation.swift @@ -0,0 +1,62 @@ +import Foundation +import CMailCore + +public class MCOIMAPCheckAccountOperation : MCOIMAPOperation { + + public typealias CompletionBlock = (Error?) -> Void + + internal var operation: CIMAPCheckAccountOperation + private var completionBlock : CompletionBlock? + + internal init(checkAccountOperation operation:CIMAPCheckAccountOperation) { + self.operation = operation + self.operation.retain() + super.init(operation: CIMAPBaseOperation(cobject: operation.toCObject())) + } + + deinit { + self.operation.release() + completionBlock = nil; + } + + public override func start(completionBlock: CompletionBlock?) { + self.completionBlock = completionBlock + start() + } + + public override func cancel() { + completionBlock?(MailCoreError.error(code: ErrorCanceled)) + completionBlock = nil + super.cancel() + } + + public override func operationCompleted() { + guard let completionBlock = self.completionBlock else { + return + } + + mailCoreAutoreleasePool { + let errorCode = error() + if errorCode == ErrorNone { + completionBlock(nil) + } + else { + var error = MailCoreError.error(code: errorCode) + if operation.loginResponse().instance != nil || operation.loginUnparsedResponseData().instance != nil { + var userInfo = [String: Any]() + if let response = operation.loginResponse().string() { + userInfo["IMAPResponseKey"] = response + } + let data = operation.loginUnparsedResponseData() + if data.instance != nil && data.bytes != nil { + userInfo["IMAPUnparsedResponseDataKey"] = Data(cdata: data) + } + error = MailCoreError.error(code: errorCode, userInfo: userInfo) + } + completionBlock(error) + } + } + self.completionBlock = nil + } + +} diff --git a/src/swift/imap/IMAPCopyMessagesOperation.swift b/src/swift/imap/IMAPCopyMessagesOperation.swift new file mode 100644 index 000000000..80e552cea --- /dev/null +++ b/src/swift/imap/IMAPCopyMessagesOperation.swift @@ -0,0 +1,50 @@ +import Foundation +import CMailCore + +public class MCOIMAPCopyMessagesOperation : MCOIMAPBaseOperation { + + public typealias CompletionBlock = (Error?, Dictionary?) -> Void + + internal var operation: CIMAPCopyMessagesOperation; + private var completionBlock : CompletionBlock?; + + internal init(operation:CIMAPCopyMessagesOperation) { + self.operation = operation + self.operation.retain() + super.init(baseOperation: CIMAPBaseOperation.init(cobject: operation.toCObject())) + } + + deinit { + self.operation.release() + completionBlock = nil + } + + public func start(completionBlock: CompletionBlock?) { + self.completionBlock = completionBlock + start() + } + + public override func cancel() { + completionBlock?(MailCoreError.error(code: ErrorCanceled), nil) + completionBlock = nil + super.cancel() + } + + public override func operationCompleted() { + guard let completionBlock = self.completionBlock else { + return + } + + mailCoreAutoreleasePool { + let errorCode = error(); + if errorCode == ErrorNone { + completionBlock(nil, Dictionary.cast(operation.uidMapping())) + } + else { + completionBlock(MailCoreError.error(code: errorCode), nil) + } + } + self.completionBlock = nil; + } + +} diff --git a/src/swift/imap/IMAPCustomCommandOperation.swift b/src/swift/imap/IMAPCustomCommandOperation.swift new file mode 100644 index 000000000..bb96dda80 --- /dev/null +++ b/src/swift/imap/IMAPCustomCommandOperation.swift @@ -0,0 +1,50 @@ +import Foundation +import CMailCore + +public class MCOIMAPCustomCommandOperation : MCOIMAPBaseOperation { + + public typealias CompletionBlock = (String?, Error?) -> Void + + internal var operation: CIMAPCustomCommandOperation + private var completionBlock : CompletionBlock? + + internal init(operation:CIMAPCustomCommandOperation) { + self.operation = operation + self.operation.retain() + super.init(baseOperation: CIMAPBaseOperation.init(cobject: operation.toCObject())) + } + + deinit { + self.operation.release() + completionBlock = nil; + } + + public func start(completionBlock: CompletionBlock?) { + self.completionBlock = completionBlock + start() + } + + public override func cancel() { + completionBlock?(nil, MailCoreError.error(code: ErrorCanceled)) + completionBlock = nil + super.cancel() + } + + public override func operationCompleted() { + guard let completionBlock = self.completionBlock else { + return + } + + mailCoreAutoreleasePool { + let errorCode = error() + if errorCode == ErrorNone { + completionBlock(operation.response().string(), nil) + } + else { + completionBlock(nil, MailCoreError.error(code: errorCode)) + } + } + self.completionBlock = nil + } + +} diff --git a/src/swift/imap/IMAPFetchContentOperation.swift b/src/swift/imap/IMAPFetchContentOperation.swift new file mode 100644 index 000000000..6835ebca2 --- /dev/null +++ b/src/swift/imap/IMAPFetchContentOperation.swift @@ -0,0 +1,56 @@ +import Foundation +import CMailCore + +public class MCOIMAPFetchContentOperation : MCOIMAPBaseOperation { + + public typealias CompletionBlock = (Error?, Data?) -> Void + + internal var operation: CIMAPFetchContentOperation + private var completionBlock : CompletionBlock? + public var progressBlock : MCOOperationProgressBlock? + + internal init(operation:CIMAPFetchContentOperation) { + self.operation = operation + self.operation.retain() + super.init(baseOperation: CIMAPBaseOperation.init(cobject: operation.toCObject())) + } + + deinit { + self.operation.release() + completionBlock = nil; + } + + public func start(completionBlock: CompletionBlock?) { + self.completionBlock = completionBlock + start() + } + + public override func cancel() { + completionBlock?(MailCoreError.error(code: ErrorCanceled), nil) + completionBlock = nil + super.cancel() + } + + public override func operationCompleted() { + guard let completionBlock = self.completionBlock else { + return + } + + mailCoreAutoreleasePool { + let errorCode = error(); + if errorCode == ErrorNone { + completionBlock(nil, Data.init(desctructiveCData: operation.data())); + } + else { + completionBlock(MailCoreError.error(code: errorCode), nil); + } + } + self.completionBlock = nil + } + + public override func bodyProgress(current: UInt32, maximum: UInt32) { + progressBlock?(current, maximum); + } + +} + diff --git a/src/swift/imap/IMAPFetchContentToFileOperation.swift b/src/swift/imap/IMAPFetchContentToFileOperation.swift new file mode 100644 index 000000000..0265e17e4 --- /dev/null +++ b/src/swift/imap/IMAPFetchContentToFileOperation.swift @@ -0,0 +1,65 @@ +import Foundation +import CMailCore + +public class MCOIMAPFetchContentToFileOperation : MCOIMAPBaseOperation { + + public typealias CompletionBlock = (Error?) -> Void + + internal var operation: CIMAPFetchContentToFileOperation + private var completionBlock : CompletionBlock? + + internal init(operation:CIMAPFetchContentToFileOperation) { + self.operation = operation + self.operation.retain() + super.init(baseOperation: CIMAPBaseOperation.init(cobject: operation.toCObject())) + } + + deinit { + self.operation.release() + completionBlock = nil + } + + public var isLoadingByChunksEnabled : Bool { + get { return operation.isLoadingByChunksEnabled } + set { operation.isLoadingByChunksEnabled = newValue } + } + + public var chunksSize : UInt32 { + get { return operation.chunksSize } + set { operation.chunksSize = newValue } + } + + public var estimatedSize : UInt32 { + get { return operation.estimatedSize } + set { operation.estimatedSize = newValue } + } + + public func start(completionBlock: CompletionBlock?) { + self.completionBlock = completionBlock + start() + } + + public override func cancel() { + completionBlock?(MailCoreError.error(code: ErrorCanceled)) + completionBlock = nil + super.cancel() + } + + public override func operationCompleted() { + guard let completionBlock = self.completionBlock else { + return + } + + mailCoreAutoreleasePool { + let errorCode = error() + if errorCode == ErrorNone { + completionBlock(nil) + } + else { + completionBlock(MailCoreError.error(code: errorCode)) + } + } + self.completionBlock = nil + } + +} diff --git a/src/swift/imap/IMAPFetchFoldersOperation.swift b/src/swift/imap/IMAPFetchFoldersOperation.swift new file mode 100644 index 000000000..f549ba0c6 --- /dev/null +++ b/src/swift/imap/IMAPFetchFoldersOperation.swift @@ -0,0 +1,50 @@ +import Foundation +import CMailCore + +public class MCOIMAPFetchFoldersOperation : MCOIMAPBaseOperation { + + public typealias CompletionBlock = (Error?, [MCOIMAPFolder]?) -> Void + + internal var operation: CIMAPFetchFoldersOperation + private var completionBlock : CompletionBlock? + + internal init(operation:CIMAPFetchFoldersOperation) { + self.operation = operation + self.operation.retain() + super.init(baseOperation: CIMAPBaseOperation.init(cobject: operation.toCObject())) + } + + deinit { + self.operation.release() + completionBlock = nil; + } + + public func start(completionBlock: CompletionBlock?) { + self.completionBlock = completionBlock + start() + } + + public override func cancel() { + completionBlock?(MailCoreError.error(code: ErrorCanceled), nil) + completionBlock = nil + super.cancel() + } + + public override func operationCompleted() { + guard let completionBlock = self.completionBlock else { + return + } + + mailCoreAutoreleasePool { + let errorCode = error() + if errorCode == ErrorNone { + completionBlock(nil, Array(mailCoreArray: operation.folders())) + } + else { + completionBlock(MailCoreError.error(code: errorCode), nil) + } + } + self.completionBlock = nil + } + +} diff --git a/src/swift/imap/IMAPFetchMessagesOperation.swift b/src/swift/imap/IMAPFetchMessagesOperation.swift new file mode 100644 index 000000000..d3de48a62 --- /dev/null +++ b/src/swift/imap/IMAPFetchMessagesOperation.swift @@ -0,0 +1,68 @@ +import Foundation +import CMailCore + +public class MCOIMAPFetchMessagesOperation : MCOIMAPBaseOperation { + + public typealias CompletionBlock = (Error?, Array?, MCOIndexSet?) -> Void + + internal var operation: CIMAPFetchMessagesOperation + private var completionBlock : CompletionBlock? + public var progressBlock : MCOOperationItemProgressBlock? + + internal init(operation:CIMAPFetchMessagesOperation) { + self.operation = operation + self.operation.retain() + super.init(baseOperation: CIMAPBaseOperation.init(cobject: operation.toCObject())) + } + + deinit { + self.operation.release() + completionBlock = nil + } + + public func start(completionBlock: CompletionBlock?) { + self.completionBlock = completionBlock + start() + } + + public override func cancel() { + completionBlock?(MailCoreError.error(code: ErrorCanceled), nil, nil) + completionBlock = nil + super.cancel() + } + + public override func operationCompleted() { + guard let completionBlock = self.completionBlock else { + return + } + + mailCoreAutoreleasePool { + let errorCode = error() + if errorCode == ErrorNone { + completionBlock(nil, Array(mailCoreArray: operation.messages()), MCOIndexSet(operation.vanishedMessages())) + } + else { + completionBlock(MailCoreError.error(code: errorCode), nil, nil) + } + } + self.completionBlock = nil + } + + public override func itemProgress(current: UInt32, maximum: UInt32) { + progressBlock?(current); + } + + public var extraHeaders: Array? { + get { + return mailCoreAutoreleasePool { + Array(mailCoreArray: operation.extraHeaders) + } + } + set { + mailCoreAutoreleasePool { + operation.extraHeaders = newValue?.mailCoreArray() ?? CArray() + } + } + } + +} diff --git a/src/swift/imap/IMAPFetchNamespaceOperation.swift b/src/swift/imap/IMAPFetchNamespaceOperation.swift new file mode 100644 index 000000000..c25df2da4 --- /dev/null +++ b/src/swift/imap/IMAPFetchNamespaceOperation.swift @@ -0,0 +1,49 @@ +import Foundation +import CMailCore + +public class MCOIMAPFetchNamespaceOperation : MCOIMAPBaseOperation { + + public typealias CompletionBlock = (Error?, Dictionary?) -> Void + + internal var operation: CIMAPFetchNamespaceOperation + private var completionBlock : CompletionBlock? + + internal init(operation:CIMAPFetchNamespaceOperation) { + self.operation = operation + self.operation.retain() + super.init(baseOperation: CIMAPBaseOperation.init(cobject: operation.toCObject())) + } + + deinit { + self.operation.release() + completionBlock = nil; + } + + public func start(completionBlock: CompletionBlock?) { + self.completionBlock = completionBlock + start() + } + + public override func cancel() { + completionBlock?(MailCoreError.error(code: ErrorCanceled), nil) + completionBlock = nil + super.cancel() + } + + public override func operationCompleted() { + guard let completionBlock = self.completionBlock else { + return + } + + mailCoreAutoreleasePool { + let errorCode = error() + if errorCode == ErrorNone { + completionBlock(nil, Dictionary.cast(operation.namespaces())) + } + else { + completionBlock(MailCoreError.error(code: errorCode), nil) + } + } + self.completionBlock = nil + } +} diff --git a/src/swift/imap/IMAPFetchParsedContentOperation.swift b/src/swift/imap/IMAPFetchParsedContentOperation.swift new file mode 100644 index 000000000..5d7556fc2 --- /dev/null +++ b/src/swift/imap/IMAPFetchParsedContentOperation.swift @@ -0,0 +1,55 @@ +import Foundation +import CMailCore + +public class MCOIMAPFetchParsedContentOperation : MCOIMAPBaseOperation { + + public typealias CompletionBlock = (Error?, MCOMessageParser?) -> Void + + internal var operation: CIMAPFetchParsedContentOperation + private var completionBlock : CompletionBlock? + + internal init(operation:CIMAPFetchParsedContentOperation) { + self.operation = operation + self.operation.retain() + super.init(baseOperation: CIMAPBaseOperation.init(cobject: operation.toCObject())) + } + + deinit { + self.operation.release() + completionBlock = nil + } + + public func start(completionBlock: CompletionBlock?) { + self.completionBlock = completionBlock + start() + } + + public override func cancel() { + completionBlock?(MailCoreError.error(code: ErrorCanceled), nil) + completionBlock = nil + super.cancel() + } + + public override func operationCompleted() { + guard let completionBlock = self.completionBlock else { + return + } + + mailCoreAutoreleasePool { + let errorCode = error() + if errorCode == ErrorNone { + if let parser: MCOMessageParser = createMCOObject(from: operation.parser().toCObject()) { + completionBlock(nil, parser) + } + else { + completionBlock(nil, nil) + } + } + else { + completionBlock(MailCoreError.error(code: errorCode), nil) + } + } + self.completionBlock = nil + } + +} diff --git a/src/swift/imap/IMAPFolder.swift b/src/swift/imap/IMAPFolder.swift new file mode 100644 index 000000000..c4bf7aaee --- /dev/null +++ b/src/swift/imap/IMAPFolder.swift @@ -0,0 +1,51 @@ +import Foundation +import CMailCore + +public class MCOIMAPFolder: NSObjectCompat, Convertible { + + internal var nativeInstance:CIMAPFolder; + + func cast() -> CObject { + return nativeInstance.toCObject() + } + + public required init(mailCoreObject obj: CObject) { + self.nativeInstance = CIMAPFolder.init(cobject: obj) + self.nativeInstance.retain() + } + + deinit { + self.nativeInstance.release() + } + + /** The folder's path, like for example INBOX.Archive */ + public var path: String? { + get { + return mailCoreAutoreleasePool { + nativeInstance.path.string() + } + } + set { + mailCoreAutoreleasePool { + nativeInstance.path = newValue?.mailCoreString() ?? MailCoreString() + } + } + } + + /** It's the delimiter for each component of the path. Commonly . or / */ + public var delimiter: CChar { + get { return nativeInstance.delimiter } + set { nativeInstance.delimiter = newValue } + } + + /** + Any flags the folder may have, like if the folder is for Drafts, Spam, Junk, etc. Or + it could be marked with metadata like that it has no children. + */ + public var flags: MCOIMAPFolderFlag { + get { return MCOIMAPFolderFlag(cIMAPFolderFlag: nativeInstance.flags) } + set { nativeInstance.flags = newValue.toCIMAPFolderFlag() } + } + + +} diff --git a/src/swift/imap/IMAPFolderInfo.swift b/src/swift/imap/IMAPFolderInfo.swift new file mode 100644 index 000000000..274add00a --- /dev/null +++ b/src/swift/imap/IMAPFolderInfo.swift @@ -0,0 +1,57 @@ +import Foundation +import CMailCore + +public class MCOIMAPFolderInfo: Convertible { + + private var nativeInstance:CIMAPFolderInfo; + + public required init(mailCoreObject: CObject) { + self.nativeInstance = CIMAPFolderInfo.init(cobject: mailCoreObject) + self.nativeInstance.retain() + } + + func cast() -> CObject { + return self.nativeInstance.toCObject() + } + + deinit { + self.nativeInstance.release() + } + + /** The folder's IMAP UIDNEXT value. Used to determine the uid for the next received message. */ + public var uidNext: UInt32 { + get { return nativeInstance.uidNext } + set { nativeInstance.uidNext = newValue } + } + + /** The folders IMAP UIDVALIDITY value. Must be used to determine if the server has changed assigned UIDs */ + public var uidValidity: UInt32 { + get { return nativeInstance.uidValidity } + set { nativeInstance.uidValidity = newValue } + } + + /** An advanced value used for doing quick flag syncs if the server supports it. The MODSEQ value. */ + public var modSequenceValue: UInt64 { + get { return nativeInstance.modSequenceValue } + set { nativeInstance.modSequenceValue = newValue } + } + + /** Total number of messages in the folder */ + public var messageCount: Int32 { + get { return nativeInstance.messageCount } + set { nativeInstance.messageCount = newValue } + } + + // first uid of the unseen messages. + public var firstUnseenUid: UInt32 { + get { return nativeInstance.firstUnseenUid } + set { nativeInstance.firstUnseenUid = newValue } + } + + /** An boolean indicates that this folder or IMAP server allows to add a new permanent flags */ + public var allowsNewPermanentFlags: Bool { + get { return nativeInstance.allowsNewPermanentFlags } + set { nativeInstance.allowsNewPermanentFlags = newValue } + } + +} diff --git a/src/swift/imap/IMAPFolderInfoOperation.swift b/src/swift/imap/IMAPFolderInfoOperation.swift new file mode 100644 index 000000000..1f468ba48 --- /dev/null +++ b/src/swift/imap/IMAPFolderInfoOperation.swift @@ -0,0 +1,63 @@ +import Foundation +import CMailCore + +/** + The class is used to get folder metadata (like UIDVALIDITY, UIDNEXT, etc). + @see MCOIMAPFolderInfo + */ +public class MCOIMAPFolderInfoOperation : MCOIMAPBaseOperation { + + public typealias CompletionBlock = (Error?, MCOIMAPFolderInfo?) -> Void + + private var operation: CIMAPFolderInfoOperation + private var completionBlock : CompletionBlock? + + internal init(operation:CIMAPFolderInfoOperation) { + self.operation = operation + self.operation.retain() + super.init(baseOperation: CIMAPBaseOperation.init(cobject: operation.toCObject())) + } + + deinit { + self.operation.release() + completionBlock = nil + } + + /** + Starts the asynchronous operation. + + @param completionBlock Called when the operation is finished. + + - On success `error` will be nil and `info` will contain the folder metadata + + - On failure, `error` will be set with `MCOErrorDomain` as domain and an + error code available in `MCOConstants.h`, `info` will be nil + */ + public func start(completionBlock: CompletionBlock?) { + self.completionBlock = completionBlock + start() + } + + public override func cancel() { + completionBlock?(MailCoreError.error(code: ErrorCanceled), nil) + completionBlock = nil + super.cancel() + } + + public override func operationCompleted() { + guard let completionBlock = self.completionBlock else { + return + } + + mailCoreAutoreleasePool { + let errorCode = error(); + if errorCode == ErrorNone { + completionBlock(nil, createMCOObject(from: operation.info().toCObject())) + } + else { + completionBlock(MailCoreError.error(code: errorCode), nil) + } + } + self.completionBlock = nil + } +} diff --git a/src/swift/imap/IMAPFolderStatus.swift b/src/swift/imap/IMAPFolderStatus.swift new file mode 100644 index 000000000..651e7630f --- /dev/null +++ b/src/swift/imap/IMAPFolderStatus.swift @@ -0,0 +1,56 @@ +import Foundation +import CMailCore + +public class MCOIMAPFolderStatus: Convertible { + + private var nativeInstance:CIMAPFolderStatus; + + public required init(mailCoreObject: CObject) { + self.nativeInstance = CIMAPFolderStatus.init(cobject: mailCoreObject) + self.nativeInstance.retain() + } + + func cast() -> CObject { + return self.nativeInstance.toCObject() + } + + deinit { + self.nativeInstance.release() + } + + /** The folder's IMAP UIDNEXT value. Used to determine the uid for the next received message. */ + public var uidNext: UInt32 { + get { return nativeInstance.uidNext } + set { nativeInstance.uidNext = newValue } + } + + /** The folders IMAP UIDVALIDITY value. Must be used to determine if the server has changed assigned UIDs */ + public var uidValidity: UInt32 { + get { return nativeInstance.uidValidity } + set { nativeInstance.uidValidity = newValue } + } + + /** Number of recent messages received in the folder */ + public var recentCount: UInt32 { + get { return nativeInstance.recentCount } + set { nativeInstance.recentCount = newValue } + } + + /** Number of unseen messages in the folder */ + public var unseenCount: UInt32 { + get { return nativeInstance.unseenCount } + set { nativeInstance.unseenCount = newValue } + } + + /** Number of messages in the folder */ + public var messageCount: UInt32 { + get { return nativeInstance.messageCount } + set { nativeInstance.messageCount = newValue } + } + + /** Highest modification sequence value for this folder. See CONDSTORE RFC 4551. */ + public var highestModSeqValue: UInt64 { + get { return nativeInstance.highestModSeqValue } + set { nativeInstance.highestModSeqValue = newValue } + } +} diff --git a/src/swift/imap/IMAPFolderStatusOperation.swift b/src/swift/imap/IMAPFolderStatusOperation.swift new file mode 100644 index 000000000..e5579d644 --- /dev/null +++ b/src/swift/imap/IMAPFolderStatusOperation.swift @@ -0,0 +1,63 @@ +import Foundation +import CMailCore + +/** + The class is used to get folder metadata (like UIDVALIDITY, UIDNEXT, etc). + @see MCOIMAPFolderStatus + */ +public class MCOIMAPFolderStatusOperation : MCOIMAPBaseOperation { + + public typealias CompletionBlock = (Error?, MCOIMAPFolderStatus?) -> Void + + private var operation: CIMAPFolderStatusOperation + private var completionBlock : CompletionBlock? + + internal init(operation:CIMAPFolderStatusOperation) { + self.operation = operation + self.operation.retain() + super.init(baseOperation: CIMAPBaseOperation.init(cobject: operation.toCObject())) + } + + deinit { + self.operation.release() + completionBlock = nil; + } + + /** + Starts the asynchronous operation. + + @param completionBlock Called when the operation is finished. + + - On success `error` will be nil and `status` will contain the status metadata + + - On failure, `error` will be set with `MCOErrorDomain` as domain and an + error code available in `MCOConstants.h`, `status` will be nil + */ + public func start(completionBlock: CompletionBlock?) { + self.completionBlock = completionBlock + start() + } + + public override func cancel() { + completionBlock?(MailCoreError.error(code: ErrorCanceled), nil) + completionBlock = nil + super.cancel() + } + + public override func operationCompleted() { + guard let completionBlock = self.completionBlock else { + return + } + + mailCoreAutoreleasePool { + let errorCode = error() + if errorCode == ErrorNone { + completionBlock(nil, createMCOObject(from: operation.status().toCObject())) + } + else { + completionBlock(MailCoreError.error(code: errorCode), nil) + } + } + self.completionBlock = nil + } +} diff --git a/src/swift/imap/IMAPIdentity.swift b/src/swift/imap/IMAPIdentity.swift new file mode 100644 index 000000000..b701df2db --- /dev/null +++ b/src/swift/imap/IMAPIdentity.swift @@ -0,0 +1,95 @@ +import Foundation +import CMailCore + +public class MCOIMAPIdentity: Convertible { + + internal var nativeInstance:CIMAPIdentity; + + public init(vendor: String, name: String, version: String) { + self.nativeInstance = CIMAPIdentity_init() + } + + func cast() -> CObject { + return self.nativeInstance.toCObject() + } + + required public init(mailCoreObject: CObject) { + self.nativeInstance = CIMAPIdentity.init(cobject: mailCoreObject) + self.nativeInstance.retain() + } + + deinit { + self.nativeInstance.release() + } + + /** Vendor of the IMAP client */ + public var vendor: String? { + get { + return mailCoreAutoreleasePool { + nativeInstance.vendor.string() + } + } + set { + mailCoreAutoreleasePool { + nativeInstance.vendor = newValue?.mailCoreString() ?? MailCoreString() + } + } + } + + /** Name of the IMAP client */ + public var name: String? { + get { + return mailCoreAutoreleasePool { + nativeInstance.name.string() + } + } + set { + mailCoreAutoreleasePool { + nativeInstance.name = newValue?.mailCoreString() ?? MailCoreString() + } + } + } + + /** Version of the IMAP client */ + public var version: String? { + get { + return mailCoreAutoreleasePool { + nativeInstance.version.string() + } + } + set { + mailCoreAutoreleasePool { + nativeInstance.version = newValue?.mailCoreString() ?? MailCoreString() + } + } + } + + /** All fields names of the identity of the client */ + public func allInfoKeys() -> [String]? { + return mailCoreAutoreleasePool { + return Array(mailCoreArray: nativeInstance.allInfoKeys()) + } + } + + /** Set a custom field in the identity */ + public func infoForKey(_ key: String) -> String? { + return mailCoreAutoreleasePool { + return nativeInstance.infoForKey(key.mailCoreString()).string() + } + } + + /** Retrieve a custom field in the identity */ + public func setInfo(_ value: String, forKey key: String) { + mailCoreAutoreleasePool { + nativeInstance.setInfoForKey(value.mailCoreString(), key.mailCoreString()) + } + } + + /** Remove all info keys including vendor, name and version */ + public func removeAllInfos() { + mailCoreAutoreleasePool { + nativeInstance.removeAllInfos() + } + } + +} diff --git a/src/swift/imap/IMAPIdentityOperation.swift b/src/swift/imap/IMAPIdentityOperation.swift new file mode 100644 index 000000000..9eec39ac3 --- /dev/null +++ b/src/swift/imap/IMAPIdentityOperation.swift @@ -0,0 +1,49 @@ +import Foundation +import CMailCore + +public class MCOIMAPIdentityOperation : MCOIMAPBaseOperation { + + public typealias CompletionBlock = (Error?, MCOIMAPIdentity?) -> Void + + internal var operation: CIMAPIdentityOperation + private var completionBlock : CompletionBlock? + + internal init(operation:CIMAPIdentityOperation) { + self.operation = operation + self.operation.retain() + super.init(baseOperation: CIMAPBaseOperation.init(cobject: operation.toCObject())) + } + + deinit { + self.operation.release() + completionBlock = nil; + } + + public func start(completionBlock: CompletionBlock?) { + self.completionBlock = completionBlock + start() + } + + public override func cancel() { + completionBlock?(MailCoreError.error(code: ErrorCanceled), nil) + completionBlock = nil + super.cancel() + } + + public override func operationCompleted() { + guard let completionBlock = self.completionBlock else { + return + } + + mailCoreAutoreleasePool { + let errorCode = error() + if errorCode == ErrorNone { + completionBlock(nil, MCOIMAPIdentity.init(mailCoreObject: operation.serverIdentity().toCObject())) + } + else { + completionBlock(MailCoreError.error(code: errorCode), nil) + } + } + self.completionBlock = nil + } +} diff --git a/src/swift/imap/IMAPIdleOperation.swift b/src/swift/imap/IMAPIdleOperation.swift new file mode 100644 index 000000000..5c3eb6857 --- /dev/null +++ b/src/swift/imap/IMAPIdleOperation.swift @@ -0,0 +1,54 @@ +import Foundation +import CMailCore + +public class MCOIMAPIdleOperation : MCOIMAPBaseOperation { + + public typealias CompletionBlock = (Error?) -> Void + + internal var idleOperation: CIMAPIdleOperation + private var completionBlock: CompletionBlock? + + internal init(idleOperation: CIMAPIdleOperation) { + self.idleOperation = idleOperation + self.idleOperation.retain() + super.init(baseOperation: CIMAPBaseOperation.init(cobject: idleOperation.toCObject())) + } + + deinit { + self.idleOperation.release() + self.completionBlock = nil + } + + public func start(completionBlock: CompletionBlock?) { + self.completionBlock = completionBlock + start() + } + + public override func cancel() { + completionBlock?(MailCoreError.error(code: ErrorCanceled)) + self.completionBlock = nil + super.cancel() + } + + public override func operationCompleted() { + guard let completionBlock = self.completionBlock else { + return + } + + mailCoreAutoreleasePool { + let errorCode = error() + if errorCode == ErrorNone { + completionBlock(nil) + } + else { + completionBlock(MailCoreError.error(code: errorCode)) + } + } + self.completionBlock = nil + } + + public func interruptIdle() { + idleOperation.interruptIdle(); + } + +} diff --git a/src/swift/imap/IMAPMessage.swift b/src/swift/imap/IMAPMessage.swift new file mode 100644 index 000000000..ec80a5860 --- /dev/null +++ b/src/swift/imap/IMAPMessage.swift @@ -0,0 +1,182 @@ +import Foundation +import CMailCore + +public final class MCOIMAPMessage : MCOAbstractMessage, NSCoding { + + internal var nativeInstance:CIMAPMessage; + + internal override func cast() -> CObject { + return nativeInstance.toCObject(); + } + + public required init(mailCoreObject obj: CObject){ + let message = CIMAPMessage(cobject: obj); + self.nativeInstance = message; + self.nativeInstance.retain() + super.init(mailCoreObject: obj); + } + + public init() { + self.nativeInstance = CIMAPMessage_init() + super.init(mailCoreObject: self.nativeInstance.toCObject()) + } + + deinit { + self.nativeInstance.release() + } + + /** IMAP UID of the message. */ + //@property (nonatomic, assign) uint32_t uid; + public var uid: UInt32 { + get { return nativeInstance.uid } + set { nativeInstance.uid = newValue } + } + + /** IMAP sequence number of the message. + @warning *Important*: This property won't be serialized. */ + public var sequenceNumber: UInt32 { + get { return nativeInstance.sequenceNumber } + set { nativeInstance.sequenceNumber = newValue } + } + + /* Size of the entire message */ + public var size: UInt32 { + get { return nativeInstance.size } + set { nativeInstance.size = newValue } + } + + /** Flags of the message, like if it is deleted, read, starred etc */ + public var flags: MCOMessageFlag { + get { return MCOMessageFlag(cMessageFlag: nativeInstance.flags) } + set { nativeInstance.flags = newValue.toCMessageFlag() } + } + + /** The contents of the message flags when it was fetched from the server */ + public var originalFlags: MCOMessageFlag { + get { return MCOMessageFlag(cMessageFlag: nativeInstance.originalFlags) } + set { nativeInstance.originalFlags = newValue.toCMessageFlag() } + } + + /** Flag keywords of the message, mostly custom flags */ + public var customFlags: Array? { + get { + return mailCoreAutoreleasePool { + Array(mailCoreArray: nativeInstance.customFlags) + } + } + set { + mailCoreAutoreleasePool { + nativeInstance.customFlags = newValue?.mailCoreArray() ?? CArray() + } + } + } + + /** It's the last modification sequence value of the message synced from the server. See RFC4551 */ + public var modSeqValue: UInt64 { + get { return nativeInstance.modSeqValue } + set { nativeInstance.modSeqValue = newValue } + } + + /** Main MIME part of the message */ + public var mainPart: MCOAbstractPart? { + get { + return mailCoreAutoreleasePool { + createMCOObject(from: nativeInstance.mainPart.toCObject()) + } + } + set { + mailCoreAutoreleasePool { + nativeInstance.mainPart = newValue?._CAbstractPart() ?? CAbstractPart() + } + } + } + + /** All Gmail labels of the message */ + public var gmailLabels: Array? { + get { + return mailCoreAutoreleasePool { + Array(mailCoreArray: nativeInstance.gmailLabels) + } + } + set { + mailCoreAutoreleasePool { + nativeInstance.gmailLabels = newValue?.mailCoreArray() ?? CArray() + } + } + } + + /** Gmail message ID of the message */ + public var gmailMessageID: UInt64 { + get { return nativeInstance.gmailMessageID } + set { nativeInstance.gmailMessageID = newValue } + } + + /** Gmail thread ID of the message */ + public var gmailThreadID: UInt64 { + get { return nativeInstance.gmailThreadID } + set { nativeInstance.gmailThreadID = newValue } + } + + /** + Returns the part with the given part identifier. + @param partID A part identifier looks like 1.2.1 + */ + public func partForPartID(partID: String) -> MCOAbstractPart? { + return mailCoreAutoreleasePool { + return createMCOObject(from: nativeInstance.partForPartID(partID.mailCoreString()).toCObject()) + } + } + + /** + HTML rendering of the message to be displayed in a web view. + The delegate should implement at least + [MCOAbstractMessage:dataForIMAPPart:folder:] + so that the complete HTML rendering can take place. + */ + public func htmlRendering(folder: String, delegate: MCOHTMLRendererIMAPDelegate & MCOHTMLRendererDelegate) -> String? { + return mailCoreAutoreleasePool { + let rendererCallback: MCOAbstractMessageRendererCallback = MCOAbstractMessageRendererCallback(message: self); + rendererCallback.setHtmlRenderDelegate(delegate: delegate) + rendererCallback.setHtmlRenderImapDelegate(delegate: delegate) + let result = self.nativeInstance.htmlRendering(folder.mailCoreString(), rendererCallback.cast()).string() + return result + } + } + + + /** All attachments in the message. */ + public func attachments() -> Array? { + return mailCoreAutoreleasePool { + guard let attachments = super.attachments() else { + return nil + } + return Array(mailCoreArray: attachments.mailCoreArray()); + } + } + + /** All image attachments included inline in the message through cid: URLs. */ + public func htmlInlineAttachments() -> Array? { + return mailCoreAutoreleasePool { + guard let htmlInlineAttachments = super.htmlInlineAttachments() else { + return nil + } + return Array(mailCoreArray: htmlInlineAttachments.mailCoreArray()); + } + } + + public convenience init?(coder aDecoder: NSCoder) { + guard let dict = aDecoder.decodeObject(forKey: "info") as? Dictionary else { + return nil + } + let serializable = dictionaryUnsafeCast(dict) + self.init(mailCoreObject: CObject.objectWithSerializable(serializable)) + self.nativeInstance.retain() + } + + public func encode(with aCoder: NSCoder) { + let serialazable: CDictionary = self.cast().serializable() + let dict = dictionaryUnsafeCast(serialazable) + aCoder.encode(dict, forKey: "info") + } + +} diff --git a/src/swift/imap/IMAPMessagePart.swift b/src/swift/imap/IMAPMessagePart.swift new file mode 100644 index 000000000..e696b3b69 --- /dev/null +++ b/src/swift/imap/IMAPMessagePart.swift @@ -0,0 +1,43 @@ +import Foundation +import CMailCore + +public class MCOIMAPMessagePart : MCOAbstractMessagePart, NSCoding { + + private var nativeInstance:CIMAPMessagePart; + + required public init(mailCoreObject obj: CObject) { + self.nativeInstance = CIMAPMessagePart.init(cobject: obj) + self.nativeInstance.retain() + super.init(mailCoreObject: obj); + } + + deinit { + self.nativeInstance.release() + } + + override func cast() -> CObject { + return self.nativeInstance.toCObject() + } + + /** A part identifier is of the form 1.2.1*/ + public var partID: String? { + get { return nativeInstance.partID.string() } + set { nativeInstance.partID = newValue?.mailCoreString() ?? MailCoreString() } + } + + public convenience required init?(coder aDecoder: NSCoder) { + guard let dict = aDecoder.decodeObject(forKey: "info") as? Dictionary else { + return nil + } + let serializable = dictionaryUnsafeCast(dict) + self.init(mailCoreObject: CObject.objectWithSerializable(serializable)) + self.nativeInstance.retain() + } + + public func encode(with aCoder: NSCoder) { + let serialazable: CDictionary = self.cast().serializable() + let dict = dictionaryUnsafeCast(serialazable) + aCoder.encode(dict, forKey: "info") + } + +} diff --git a/src/swift/imap/IMAPMessageRenderingOperation.swift b/src/swift/imap/IMAPMessageRenderingOperation.swift new file mode 100644 index 000000000..83f3d833e --- /dev/null +++ b/src/swift/imap/IMAPMessageRenderingOperation.swift @@ -0,0 +1,50 @@ +import Foundation +import CMailCore + +public class MCOIMAPMessageRenderingOperation : MCOIMAPBaseOperation { + + public typealias CompletionBlock = (Error?, String?) -> Void + + internal var operation: CIMAPMessageRenderingOperation + private var completionBlock : CompletionBlock? + + internal init(operation:CIMAPMessageRenderingOperation) { + self.operation = operation + self.operation.retain() + super.init(baseOperation: CIMAPBaseOperation.init(cobject: operation.toCObject())) + } + + deinit { + self.operation.release() + completionBlock = nil + } + + public func start(completionBlock: CompletionBlock?) { + self.completionBlock = completionBlock + start() + } + + public override func cancel() { + completionBlock?(MailCoreError.error(code: ErrorCanceled), nil) + completionBlock = nil + super.cancel() + } + + public override func operationCompleted() { + guard let completionBlock = self.completionBlock else { + return + } + + mailCoreAutoreleasePool { + let errorCode = error() + if errorCode == ErrorNone { + completionBlock(nil, operation.result().string()) + } + else { + completionBlock(MailCoreError.error(code: errorCode), nil) + } + } + self.completionBlock = nil + } + +} diff --git a/src/swift/imap/IMAPMoveMessagesOperation.swift b/src/swift/imap/IMAPMoveMessagesOperation.swift new file mode 100644 index 000000000..e45fefb00 --- /dev/null +++ b/src/swift/imap/IMAPMoveMessagesOperation.swift @@ -0,0 +1,50 @@ +import Foundation +import CMailCore + +public class MCOIMAPMoveMessagesOperation : MCOIMAPBaseOperation { + + public typealias CompletionBlock = (Error?, Dictionary?) -> Void + + internal var operation: CIMAPMoveMessagesOperation + private var completionBlock : CompletionBlock? + + internal init(operation:CIMAPMoveMessagesOperation) { + self.operation = operation + self.operation.retain() + super.init(baseOperation: CIMAPBaseOperation.init(cobject: operation.toCObject())) + } + + deinit { + self.operation.release() + completionBlock = nil + } + + public func start(completionBlock: CompletionBlock?) { + self.completionBlock = completionBlock + start() + } + + public override func cancel() { + completionBlock?(MailCoreError.error(code: ErrorCanceled), nil) + completionBlock = nil + super.cancel() + } + + public override func operationCompleted() { + guard let completionBlock = self.completionBlock else { + return + } + + mailCoreAutoreleasePool { + let errorCode = error(); + if errorCode == ErrorNone { + completionBlock(nil, Dictionary.cast(operation.uidMapping())) + } + else { + completionBlock(MailCoreError.error(code: errorCode), nil) + } + } + self.completionBlock = nil + } + +} diff --git a/src/swift/imap/IMAPMultipart.swift b/src/swift/imap/IMAPMultipart.swift new file mode 100644 index 000000000..3dfed4d76 --- /dev/null +++ b/src/swift/imap/IMAPMultipart.swift @@ -0,0 +1,51 @@ +import Foundation +import CMailCore + +public class MCOIMAPMultipart : MCOAbstractMultipart, NSCoding { + + private var nativeInstance:CIMAPMultipart; + + required public init(mailCoreObject obj: CObject) { + self.nativeInstance = CIMAPMultipart.init(cobject: obj) + self.nativeInstance.retain() + super.init(mailCoreObject: obj) + } + + deinit { + self.nativeInstance.release() + } + + override func cast() -> CObject { + return self.nativeInstance.toCObject() + } + + /** A part identifier is of the form 1.2.1*/ + public var partID: String? { + get { + return mailCoreAutoreleasePool { + nativeInstance.partID.string() + } + } + set { + mailCoreAutoreleasePool { + nativeInstance.partID = newValue?.mailCoreString() ?? MailCoreString() + } + } + } + + public convenience required init?(coder aDecoder: NSCoder) { + guard let dict = aDecoder.decodeObject(forKey: "info") as? Dictionary else { + return nil + } + let serializable = dictionaryUnsafeCast(dict) + self.init(mailCoreObject: CObject.objectWithSerializable(serializable)) + self.nativeInstance.retain() + } + + public func encode(with aCoder: NSCoder) { + let serialazable: CDictionary = self.cast().serializable() + let dict = dictionaryUnsafeCast(serialazable) + aCoder.encode(dict, forKey: "info") + } + +} diff --git a/src/swift/imap/IMAPNamespace.swift b/src/swift/imap/IMAPNamespace.swift new file mode 100644 index 000000000..f1bcd4bb2 --- /dev/null +++ b/src/swift/imap/IMAPNamespace.swift @@ -0,0 +1,86 @@ +import Foundation +import CMailCore + +public class MCOIMAPNamespace : Convertible { + + var nativeInstance:CIMAPNamespace; + + func cast() -> CObject { + return nativeInstance.toCObject() + } + + public required init(mailCoreObject obj: CObject) { + self.nativeInstance = CIMAPNamespace(cobject: obj) + self.nativeInstance.retain() + } + + deinit { + self.nativeInstance.release() + } + + /** + Returns a simple namespace with only one item. + */ + static func namespace(prefix: String, delimiter: CChar) -> MCOIMAPNamespace? { + let namespace = CIMAPNamespace.namespaceWithPrefix(prefix.mailCoreString(), delimiter) + guard namespace.instance != nil else { + return nil + } + return MCOIMAPNamespace(mailCoreObject: namespace.toCObject()) + } + + /** Returns the prefix of the main item of this namespace. */ + public func mainPrefix() -> String? { + return mailCoreAutoreleasePool { + return nativeInstance.mainPrefix().string() + } + } + + /** Returns the path delimiter of the main item of this namespace */ + public func mainDelimiter() -> CChar { + return mailCoreAutoreleasePool { + return nativeInstance.mainDelimiter(); + } + } + + /** Returns the list of prefixes of this namespace. */ + public func prefixes() -> Array? { + return mailCoreAutoreleasePool { + return Array(mailCoreArray: nativeInstance.prefixes()); + } + } + + /** + Returns the folder path for the given list of path components in the context + of the main item of the namespace. + */ + public func path(components: Array) -> String? { + return mailCoreAutoreleasePool { + return nativeInstance.pathForComponents(components.mailCoreArray()).string() + } + } + + /** + Returns the folder path for the given list of path components and a prefix. + It will use the best item matching the prefix to compute the path. + */ + public func path(components: Array, prefix: String) -> String? { + return mailCoreAutoreleasePool { + return nativeInstance.pathForComponentsAndPrefix(components.mailCoreArray(), prefix.mailCoreString()).string() + } + } + + /** Returns the components given a folder path. */ + public func componentsFromPath(path: String) -> Array? { + return mailCoreAutoreleasePool { + return Array(mailCoreArray: nativeInstance.componentsFromPath(path.mailCoreString())) + } + } + + /** Returns YES if the namespace contains the given folder path. */ + public func containsFolderPath(path: String) -> Bool { + return mailCoreAutoreleasePool { + return nativeInstance.containsFolderPath(path.mailCoreString()) + } + } +} diff --git a/src/swift/imap/IMAPNamespaceItem.swift b/src/swift/imap/IMAPNamespaceItem.swift new file mode 100644 index 000000000..e0b739356 --- /dev/null +++ b/src/swift/imap/IMAPNamespaceItem.swift @@ -0,0 +1,62 @@ +import Foundation +import CMailCore + +public class MCOIMAPNamespaceItem: Convertible { + + var nativeInstance:CIMAPNamespaceItem; + + public required init(mailCoreObject: CObject) { + self.nativeInstance = CIMAPNamespaceItem.init(cobject: mailCoreObject) + self.nativeInstance.retain() + } + + func cast() -> CObject { + return self.nativeInstance.toCObject() + } + + deinit { + self.nativeInstance.release() + } + + /** This is the prefix for this namespace item */ + public var prefix: String? { + get { + return mailCoreAutoreleasePool { + nativeInstance.prefix.string() + } + } + set { + mailCoreAutoreleasePool { + nativeInstance.prefix = newValue?.mailCoreString() ?? MailCoreString() + } + } + } + + /** This is the delimiter of the path for this namespace item */ + public var delimiter: CChar { + get { return nativeInstance.delimiter } + set { nativeInstance.delimiter = newValue } + } + + /** Returns folder path for given path components in the context of this namespace item */ + public func path(component: Array) -> String? { + return mailCoreAutoreleasePool { + return nativeInstance.pathForComponents(component.mailCoreArray()).string() + } + } + + /** Returns components for the given path in the context of this namespace */ + public func components(path: String) -> Array? { + return mailCoreAutoreleasePool { + return Array(mailCoreArray: nativeInstance.componentsForPath(path.mailCoreString())) + } + } + + /** Returns YES if the namespace contains this folder path */ + public func containsFolder(folder: String) -> Bool { + return mailCoreAutoreleasePool { + return nativeInstance.containsFolder(folder.mailCoreString()) + } + } + +} diff --git a/src/swift/imap/IMAPOperation.swift b/src/swift/imap/IMAPOperation.swift new file mode 100644 index 000000000..aad754d2a --- /dev/null +++ b/src/swift/imap/IMAPOperation.swift @@ -0,0 +1,54 @@ +import Foundation +import CMailCore + +public class MCOIMAPOperation : MCOIMAPBaseOperation { + + public typealias CompletionBlock = (Error?) -> Void + + private let cancelLock = NSLock() + private var completionBlock: CompletionBlock? + + internal init(operation:CIMAPBaseOperation) { + super.init(baseOperation: operation) + } + + public func start(completionBlock: CompletionBlock?) { + self.completionBlock = completionBlock + start() + } + + public override func cancel() { + cancelLock.lock() + let completionBlock = self.completionBlock + self.completionBlock = nil + cancelLock.unlock() + + if let completionBlock = completionBlock { + completionBlock(MailCoreError.error(code: ErrorCanceled)) + } + + super.cancel() + } + + public override func operationCompleted() { + cancelLock.lock() + guard let completionBlock = self.completionBlock else { + cancelLock.unlock() + return + } + + self.completionBlock = nil + cancelLock.unlock() + + mailCoreAutoreleasePool { + let errorCode = error() + if errorCode == ErrorNone { + completionBlock(nil) + } + else { + completionBlock(MailCoreError.error(code: errorCode)) + } + } + } + +} diff --git a/src/swift/imap/IMAPPart.swift b/src/swift/imap/IMAPPart.swift new file mode 100644 index 000000000..47b74fc4b --- /dev/null +++ b/src/swift/imap/IMAPPart.swift @@ -0,0 +1,74 @@ +import Foundation +import CMailCore + +public class MCOIMAPPart : MCOAbstractPart, NSCoding { + + private var nativeInstance:CIMAPPart; + + override func cast() -> CObject { + return self.nativeInstance.toCObject() + } + + required public init(mailCoreObject obj: CObject) { + let part = CIMAPPart(cobject: obj); + self.nativeInstance = part; + self.nativeInstance.retain() + super.init(mailCoreObject: obj); + } + + deinit { + self.nativeInstance.release() + } + + /** A part identifier is of the form 1.2.1*/ + public var partID: String? { + get { + return mailCoreAutoreleasePool { + nativeInstance.partID.string() + } + } + set { + mailCoreAutoreleasePool { + nativeInstance.partID = newValue?.mailCoreString() ?? MailCoreString() + } + } + } + + /** The size of the single part in bytes */ + public var size: UInt32 { + get { return nativeInstance.size } + set { nativeInstance.size = newValue } + } + + /** It's the encoding of the single part */ + public var encoding: Encoding { + get { return nativeInstance.encoding } + set { nativeInstance.encoding = newValue } + } + + /** + Returns the decoded size of the part. + For example, for a part that's encoded with base64, it will return actual_size * 3/4. + */ + public func decodedSize() -> UInt32 { + return mailCoreAutoreleasePool { + return nativeInstance.decodedSize(); + } + } + + public convenience required init?(coder aDecoder: NSCoder) { + guard let dict = aDecoder.decodeObject(forKey: "info") as? Dictionary else { + return nil + } + let serializable = dictionaryUnsafeCast(dict) + self.init(mailCoreObject: CObject.objectWithSerializable(serializable)) + self.nativeInstance.retain() + } + + public func encode(with aCoder: NSCoder) { + let serialazable: CDictionary = self.cast().serializable() + let dict = dictionaryUnsafeCast(serialazable) + aCoder.encode(dict, forKey: "info") + } + +} diff --git a/src/swift/imap/IMAPQuotaOperation.swift b/src/swift/imap/IMAPQuotaOperation.swift new file mode 100644 index 000000000..f5365b51c --- /dev/null +++ b/src/swift/imap/IMAPQuotaOperation.swift @@ -0,0 +1,50 @@ +import Foundation +import CMailCore + +public class MCOIMAPQuotaOperation : MCOIMAPBaseOperation { + + public typealias CompletionBlock = (Error?, UInt32, UInt32) -> Void + + internal var operation: CIMAPQuotaOperation + private var completionBlock : CompletionBlock? + + internal init(operation:CIMAPQuotaOperation) { + self.operation = operation + self.operation.retain() + super.init(baseOperation: CIMAPBaseOperation.init(cobject: operation.toCObject())) + } + + deinit { + self.operation.release() + completionBlock = nil + } + + public func start(completionBlock: CompletionBlock?) { + self.completionBlock = completionBlock + start() + } + + public override func cancel() { + completionBlock?(MailCoreError.error(code: ErrorCanceled), 0, 0) + completionBlock = nil + super.cancel() + } + + public override func operationCompleted() { + guard let completionBlock = self.completionBlock else { + return + } + + mailCoreAutoreleasePool { + let errorCode = error() + if errorCode == ErrorNone { + completionBlock(nil, operation.usage(), operation.limit()) + } + else { + completionBlock(MailCoreError.error(code: errorCode), 0, 0) + } + } + self.completionBlock = nil + } + +} diff --git a/src/swift/imap/IMAPSearchExpression.swift b/src/swift/imap/IMAPSearchExpression.swift new file mode 100644 index 000000000..de01c280d --- /dev/null +++ b/src/swift/imap/IMAPSearchExpression.swift @@ -0,0 +1,508 @@ +import Foundation +import CMailCore + +/** Used to construct an IMAP search query */ +public class MCOIMAPSearchExpression: NSObjectCompat { + + private var nativeInstance:CIMAPSearchExpression; + + internal func cast() -> CIMAPSearchExpression { + return nativeInstance; + } + + private init(_ expr: CIMAPSearchExpression) { + self.nativeInstance = CIMAPSearchExpression(cobject: expr.copy()) + } + + deinit { + nativeInstance.release() + } + + /** + Creates a search expression that returns all UIDS for the mailbox + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchAll] + */ + public static func searchAll() -> MCOIMAPSearchExpression { + return mailCoreAutoreleasePool { + return MCOIMAPSearchExpression(CIMAPSearchExpression_searchAll()); + } + } + + /** + Creates a search expression that matches the sender of an email. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchFrom:@"laura@etpan.org"] + */ + public static func searchFrom(_ value: String) -> MCOIMAPSearchExpression { + return mailCoreAutoreleasePool { + return MCOIMAPSearchExpression(CIMAPSearchExpression.searchFrom(value.mailCoreString())) + } + } + + /** + Creates a search expression that matches any recipient of an email. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchRecipient:@"ngan@etpan.org"] + **/ + public static func searchRecipient(_ value: String) -> MCOIMAPSearchExpression { + return mailCoreAutoreleasePool { + return MCOIMAPSearchExpression(CIMAPSearchExpression.searchRecipient(value.mailCoreString())) + } + } + + /** + Creates a search expression that matches on the receiver (to) of an email. Useful to check whether the mail is directly addressed to the receiver. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchTo:@"ngan@etpan.org"] + **/ + public static func searchTo(_ value: String) -> MCOIMAPSearchExpression { + return mailCoreAutoreleasePool { + return MCOIMAPSearchExpression(CIMAPSearchExpression.searchTo(value.mailCoreString())) + } + } + + /** + Creates a search expression that matches on the cc of an email. Useful to check whether the mail is addressed to the receiver as cc. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchCc:@"ngan@etpan.org"] + **/ + public static func searchCc(_ value: String) -> MCOIMAPSearchExpression { + return mailCoreAutoreleasePool { + return MCOIMAPSearchExpression(CIMAPSearchExpression.searchCc(value.mailCoreString())) + } + } + + /** + Creates a search expression that matches on the bcc field of an email. Useful to check whether the mail is addressed to the receiver as bcc. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchBcc:@"ngan@etpan.org"] + **/ + public static func searchBcc(_ value: String) -> MCOIMAPSearchExpression { + return mailCoreAutoreleasePool { + return MCOIMAPSearchExpression(CIMAPSearchExpression.searchBcc(value.mailCoreString())) + } + } + + /* + Creates a search expression that matches the subject of an email. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchSubject:@"airline"] + **/ + public static func searchSubject(_ value: String) -> MCOIMAPSearchExpression { + return mailCoreAutoreleasePool { + return MCOIMAPSearchExpression(CIMAPSearchExpression.searchSubject(value.mailCoreString())) + } + } + + /** + Creates a search expression that matches the content of an email, including the headers. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchContent:@"meeting"] + */ + public static func searchContent(_ value: String) -> MCOIMAPSearchExpression { + return mailCoreAutoreleasePool { + return MCOIMAPSearchExpression(CIMAPSearchExpression.searchContent(value.mailCoreString())) + } + } + + /** + Creates a search expression that matches the content of an email, excluding the headers. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchBody:@"building"] + */ + public static func searchBody(_ value: String) -> MCOIMAPSearchExpression { + return mailCoreAutoreleasePool { + return MCOIMAPSearchExpression(CIMAPSearchExpression.searchBody(value.mailCoreString())) + } + } + + /** + Creates a search expression that matches the uids specified. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchUids:uids] + **/ + public static func searchUIDs(_ uids: MCOIndexSet) -> MCOIMAPSearchExpression { + return mailCoreAutoreleasePool { + return MCOIMAPSearchExpression(CIMAPSearchExpression.searchUIDs(uids.cast())); + } + } + + /** + Creates a search expression that matches the message numbers specified. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchNumbers:numbers] + **/ + public static func searchNumbers(_ numbers: MCOIndexSet) -> MCOIMAPSearchExpression { + return mailCoreAutoreleasePool { + return MCOIMAPSearchExpression(CIMAPSearchExpression.searchNumbers(numbers.cast())); + } + } + + /** + Creates a search expression that matches the content of a specific header. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchHeader:@"List-Id" value:@"shoes"] + **/ + public static func searchHeader(_ header: String, value: String) -> MCOIMAPSearchExpression { + return mailCoreAutoreleasePool { + return MCOIMAPSearchExpression(CIMAPSearchExpression.searchHeader(header.mailCoreString(), value.mailCoreString())) + } + } + + /** + Creates a search expression that matches messages with the Read flag. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchRead] + **/ + public static func searchRead() -> MCOIMAPSearchExpression { + return mailCoreAutoreleasePool { + return MCOIMAPSearchExpression(CIMAPSearchExpression_searchRead()); + } + } + + /** + Creates a search expression that matches messages without the Read flag. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchUnread] + **/ + public static func searchUnread() -> MCOIMAPSearchExpression { + return mailCoreAutoreleasePool { + return MCOIMAPSearchExpression(CIMAPSearchExpression_searchUnread()); + } + } + + /** + Creates a search expression that matches messages that have been flagged. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchFlagged] + **/ + public static func searchFlagged() -> MCOIMAPSearchExpression { + return mailCoreAutoreleasePool { + return MCOIMAPSearchExpression(CIMAPSearchExpression_searchFlagged()); + } + } + + /** + Creates a search expression that matches messages that haven't been flagged. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchUnflagged] + **/ + public static func searchUnflagged() -> MCOIMAPSearchExpression { + return mailCoreAutoreleasePool { + return MCOIMAPSearchExpression(CIMAPSearchExpression_searchUnflagged()); + } + } + + /** + Creates a search expression that matches messages that have the answered flag set. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchAnswered] + **/ + public static func searchAnswered() -> MCOIMAPSearchExpression { + return mailCoreAutoreleasePool { + return MCOIMAPSearchExpression(CIMAPSearchExpression_searchAnswered()); + } + } + + /** + Creates a search expression that matches messages that don't have the answered flag set.. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchUnanswered] + **/ + public static func searchUnanswered() -> MCOIMAPSearchExpression { + return mailCoreAutoreleasePool { + return MCOIMAPSearchExpression(CIMAPSearchExpression_searchUnanswered()); + } + } + + /** + Creates a search expression that matches draft messages. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchDraft] + **/ + public static func searchDraft() -> MCOIMAPSearchExpression { + return mailCoreAutoreleasePool { + return MCOIMAPSearchExpression(CIMAPSearchExpression_searchDraft()); + } + } + + /** + Creates a search expression that matches messages that aren't drafts. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchUndraft] + **/ + public static func searchUndraft() -> MCOIMAPSearchExpression { + return mailCoreAutoreleasePool { + return MCOIMAPSearchExpression(CIMAPSearchExpression_searchUndraft()); + } + } + + /** + Creates a search expression that matches messages that are deleted. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchDeleted] + **/ + public static func searchDeleted() -> MCOIMAPSearchExpression { + return mailCoreAutoreleasePool { + return MCOIMAPSearchExpression(CIMAPSearchExpression_searchDeleted()); + } + } + + /** + Creates a search expression that matches messages that are spam. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchSpam] + **/ + static func searchSpam() -> MCOIMAPSearchExpression { + return mailCoreAutoreleasePool { + return MCOIMAPSearchExpression(CIMAPSearchExpression_searchSpam()); + } + } + + /** + Creates a search expression that matches messages sent before a date. + + Example: + + NSDate *yesterday = [NSDate dateWithTimeIntervalSinceNow:-(60.0 * 60.0 * 24.0)] -> ImapSearchExpression { + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchBeforeDate:yesterday] + **/ + public static func searchBeforeDate(_ date: Date) -> MCOIMAPSearchExpression { + return mailCoreAutoreleasePool { + return MCOIMAPSearchExpression(CIMAPSearchExpression.searchBeforeDate(time_t(date.timeIntervalSince1970))); + } + } + + /** + Creates a search expression that matches messages sent on a date. + + Example: + + NSDate *now = [NSDate date] -> ImapSearchExpression { + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchOnDate:now] + **/ + public static func searchOnDate(_ date: Date) -> MCOIMAPSearchExpression { + return mailCoreAutoreleasePool { + return MCOIMAPSearchExpression(CIMAPSearchExpression.searchOnDate(time_t(date.timeIntervalSince1970))); + } + } + + /** + Creates a search expression that matches messages sent since a date. + + Example: + + NSDate *now = [NSDate date] -> ImapSearchExpression { + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchSinceDate:now] + **/ + public static func searchSinceDate(_ date: Date) -> MCOIMAPSearchExpression { + return mailCoreAutoreleasePool { + return MCOIMAPSearchExpression(CIMAPSearchExpression.searchSinceDate(time_t(date.timeIntervalSince1970))); + } + } + + /** + Creates a search expression that matches messages received before a date. + + Example: + + NSDate *yesterday = [NSDate dateWithTimeIntervalSinceNow:-(60.0 * 60.0 * 24.0)] -> ImapSearchExpression { + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchBeforeReceivedDate:yesterday] + **/ + public static func searchBeforeReceivedDate(_ date: Date) -> MCOIMAPSearchExpression { + return mailCoreAutoreleasePool { + return MCOIMAPSearchExpression(CIMAPSearchExpression.searchBeforeReceivedDate(time_t(date.timeIntervalSince1970))); + } + } + + /** + Creates a search expression that matches messages received on a date. + + Example: + + NSDate *now = [NSDate date] -> ImapSearchExpression { + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchOnReceivedDate:now] + **/ + public static func searchOnReceivedDate(_ date: Date) -> MCOIMAPSearchExpression { + return mailCoreAutoreleasePool { + return MCOIMAPSearchExpression(CIMAPSearchExpression.searchOnReceivedDate(time_t(date.timeIntervalSince1970))); + } + } + + /** + Creates a search expression that matches messages received since a date. + + Example: + + NSDate *yesterday = [NSDate dateWithTimeIntervalSinceNow:-(60.0 * 60.0 * 24.0)] -> ImapSearchExpression { + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchSinceReceivedDate:yesterday] + **/ + public static func searchSinceReceivedDate(_ date: Date) -> MCOIMAPSearchExpression { + return mailCoreAutoreleasePool { + return MCOIMAPSearchExpression(CIMAPSearchExpression.searchSinceReceivedDate(time_t(date.timeIntervalSince1970))); + } + } + + /** + Creates a search expression that matches messages larger than a given size in bytes. + + Example: + + uint32_t minSize = 1024 * 10 -> ImapSearchExpression { // 10 KB + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchSizeLargerThan:minSize] + **/ + public static func searchSizeLargerThan(_ size: UInt32) -> MCOIMAPSearchExpression { + return mailCoreAutoreleasePool { + return MCOIMAPSearchExpression(CIMAPSearchExpression.searchSizeLargerThan(size)); + } + } + + /** + Creates a search expression that matches messages smaller than a given size in bytes. + + Example: + + uint32_t maxSize = 1024 * 10 -> ImapSearchExpression { // 10 KB + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchSizeSmallerThan:maxSize] + **/ + public static func searchSizeSmallerThan(_ size: UInt32) -> MCOIMAPSearchExpression { + return mailCoreAutoreleasePool { + return MCOIMAPSearchExpression(CIMAPSearchExpression.searchSizeSmallerThan(size)); + } + } + + /** + Creates a search expression that matches emails with the given gmail thread id + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchGmailThreadID:aThreadID] + */ + public static func searchGmailThreadID(_ size: UInt64) -> MCOIMAPSearchExpression { + return mailCoreAutoreleasePool { + return MCOIMAPSearchExpression(CIMAPSearchExpression.searchGmailThreadID(size)); + } + } + + + /** + Creates a search expression that matches emails with the given gmail message id + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchGmailMessageID:aMessageID] + */ + public static func searchGmailMessageID(_ size: UInt64) -> MCOIMAPSearchExpression { + return mailCoreAutoreleasePool { + return MCOIMAPSearchExpression(CIMAPSearchExpression.searchGmailMessageID(size)); + } + } + + /** + Creates a search expression that gets emails that match a gmail raw search + expression. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchGmailRaw:@"from:bill has:attachment filename:cal meeting schedule"] + */ + public static func searchGmailRaw(_ expr: String) -> MCOIMAPSearchExpression { + return mailCoreAutoreleasePool { + return MCOIMAPSearchExpression(CIMAPSearchExpression.searchGmailRaw(expr.mailCoreString())) + } + } + + + /** + Creates a search expression that's a disjunction of two search expressions. + + Example: + + MCOIMAPSearchExpression * exprFrom = [MCOIMAPSearchExpression searchFrom:@"laura@etpan.org"] + MCOIMAPSearchExpression * exprSubject = [MCOIMAPSearchExpression searchContent:@"meeting"] + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchAnd:exprFrom other:exprSubject] -> ImapSearchExpression { + **/ + + public static func searchAnd(_ expression: MCOIMAPSearchExpression, other: MCOIMAPSearchExpression) -> MCOIMAPSearchExpression { + return mailCoreAutoreleasePool { + return MCOIMAPSearchExpression(CIMAPSearchExpression.searchAnd(expression.nativeInstance, other.nativeInstance)); + } + } + /** + Creates a search expression that's a conjunction of two search expressions. + + Example: + + MCOIMAPSearchExpression * exprFrom = [MCOIMAPSearchExpression searchFrom:@"laura@etpan.org"] + MCOIMAPSearchExpression * exprOtherFrom = [MCOIMAPSearchExpression searchRecipient:@"ngan@etpan.org"] + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchOr:exprFrom exprOtherFrom] -> ImapSearchExpression { + */ + public static func searchOr(_ expression: MCOIMAPSearchExpression, other: MCOIMAPSearchExpression) -> MCOIMAPSearchExpression { + return mailCoreAutoreleasePool { + return MCOIMAPSearchExpression(CIMAPSearchExpression.searchOr(expression.nativeInstance, other.nativeInstance)); + } + } + + /** + Creates a search expression that matches when the argument is not matched. + + Example: + + MCOIMAPSearchExpression * exprSubject = [MCOIMAPSearchExpression searchSubject:@"airline"] + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchNot:exprSubject] -> ImapSearchExpression { + The expression will match when the subject does not contain the word airline + + */ + public static func searchNot(_ expression: MCOIMAPSearchExpression) -> MCOIMAPSearchExpression { + return mailCoreAutoreleasePool { + return MCOIMAPSearchExpression(CIMAPSearchExpression.searchNot(expression.nativeInstance)); + } + } + + +} diff --git a/src/swift/imap/IMAPSearchOperation.swift b/src/swift/imap/IMAPSearchOperation.swift new file mode 100644 index 000000000..b28dd8e6f --- /dev/null +++ b/src/swift/imap/IMAPSearchOperation.swift @@ -0,0 +1,66 @@ +import Foundation +import CMailCore + +public class MCOIMAPSearchOperation : MCOIMAPBaseOperation { + + public typealias CompletionBlock = (Error?, MCOIndexSet?) -> Void + + private var operation: CIMAPSearchOperation + private let lock = NSLock() + private var completionBlock : CompletionBlock? + + internal init(operation:CIMAPSearchOperation) { + self.operation = operation + self.operation.retain() + super.init(baseOperation: CIMAPBaseOperation.init(cobject: operation.toCObject())); + } + + deinit { + self.operation.release() + } + + /** + Starts the asynchronous search operation. + + @param completionBlock Called when the operation is finished. + + - On success `error` will be nil and `searchResults` will contain the UIDs of any matching messages + + - On failure, `error` will be set with `MCOErrorDomain` as domain and an + error code available in MCOConstants.h, `searchResult` will be nil + */ + public func start(completionBlock: CompletionBlock?) { + lock.lock() + self.completionBlock = completionBlock + lock.unlock() + start() + } + + public override func cancel() { + lock.lock() + completionBlock?(MailCoreError.error(code: ErrorCanceled), nil) + completionBlock = nil + lock.unlock() + super.cancel() + } + + public override func operationCompleted() { + lock.lock() + guard let completionBlock = self.completionBlock else { + lock.unlock() + return + } + self.completionBlock = nil + lock.unlock() + + mailCoreAutoreleasePool { + let errorCode = error() + if errorCode == ErrorNone { + completionBlock(nil, MCOIndexSet(operation.uids())) + } + else { + completionBlock(MailCoreError.error(code: errorCode), nil) + } + } + } +} diff --git a/src/swift/imap/IMAPSession.swift b/src/swift/imap/IMAPSession.swift new file mode 100644 index 000000000..bebfe8bd1 --- /dev/null +++ b/src/swift/imap/IMAPSession.swift @@ -0,0 +1,1162 @@ +import Foundation +import Dispatch +import CMailCore + +/** + This is the main IMAP class from which all operations are created + + After calling a method that returns an operation you must call start: on the instance + to begin the operation. + */ +public class MCOIMAPSession: NSObjectCompat { + + internal var session:CIMAPAsyncSession; + + public override init() { + session = CIMAPAsyncSession_new(MCOConnectionLoggerLog, MCOConnectionLoggerRelease); + } + + deinit { + session.release() + } + + /** This is the hostname of the IMAP server to connect to. */ + public var hostname: String? { + get { + return mailCoreAutoreleasePool { + session.hostname.string() + } + } + set { + mailCoreAutoreleasePool { + session.hostname = newValue?.mailCoreString() ?? MailCoreString() + } + } + } + + /** This is the port of the IMAP server to connect to. */ + public var port: UInt32 { + get { return session.port; } + set { session.port = newValue } + } + + /** This is the username of the account. */ + public var username: String? { + get { + return mailCoreAutoreleasePool { + session.username.string() + } + } + set { + mailCoreAutoreleasePool { + session.username = newValue?.mailCoreString() ?? MailCoreString() + } + } + } + + /** This is the password of the account. */ + public var password: String? { + get { + return mailCoreAutoreleasePool { + session.password.string() + } + } + set { + mailCoreAutoreleasePool { + session.password = newValue?.mailCoreString() ?? MailCoreString() + } + } + } + + /** This is the OAuth2 token. */ + public var OAuth2Token: String? { + get { + return mailCoreAutoreleasePool { + session.OAuth2Token.string() + } + } + set { + mailCoreAutoreleasePool { + session.OAuth2Token = newValue?.mailCoreString() ?? MailCoreString() + } + } + } + + /** + This is the authentication type to use to connect. + `MCOAuthTypeSASLNone` means that it uses the clear-text is used (and is the default). + @warning *Important*: Over an encrypted connection like TLS, the password will still be secure + */ + public var authType: MCOAuthType { + get { return MCOAuthType(cAuthType: session.authType) } + set { session.authType = newValue.toCAuthType() } + } + + /** + This is the encryption type to use. + See MCOConnectionType for more information. + */ + public var connectionType: ConnectionType { + get { return session.connectionType } + set { session.connectionType = newValue } + } + + /** This is the timeout of the connection. */ + public var timeout: TimeInterval { + get { return Double(session.timeout) } + set { session.timeout = time_t(newValue) } + } + + /** When set to YES, the connection will fail if the certificate is incorrect. */ + public var isCheckCertificateEnabled: Bool { + get { return session.isCheckCertificateEnabled } + set { session.isCheckCertificateEnabled = newValue } + } + + /** The default namespace. */ + public var defaultNamespace: MCOIMAPNamespace? { + get { + return mailCoreAutoreleasePool { + createMCOObject(from: session.defaultNamespace.toCObject()) + } + } + set { + mailCoreAutoreleasePool { + session.defaultNamespace = newValue?.nativeInstance ?? CIMAPNamespace() + } + } + } + + /** + When set to YES, the session is allowed open to open several connections to the same folder. + @warning Some older IMAP servers don't like this + */ + public var allowsFolderConcurrentAccessEnabled: Bool { + get { return session.allowsFolderConcurrentAccessEnabled } + set { session.allowsFolderConcurrentAccessEnabled = newValue } + } + + /** + Maximum number of connections to the server allowed. + */ + public var maximumConnections: UInt32 { + get { return session.maximumConnections } + set { session.maximumConnections = newValue } + } + + /** + Sets logger callback. The network traffic will be sent to this block. + + [session setConnectionLogger:^(void * connectionID, MCOConnectionLogType type, NSData * data) { + NSLog(@"%@", [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease]); + // ... + }]; + */ + public func setConnectionLogger(_ newValue: MCOConnectionLogger?) { + if let newValue = newValue { + self.session.setConnectionLogger(newValue.getRetainedPointer()) + } + else { + self.session.setConnectionLogger(nil) + } + } + + /** This property provides some hints to MCOIMAPSession about where it's called from. + It will make MCOIMAPSession safe. It will also set all the callbacks of operations to run on this given queue. + Defaults to the main queue. + This property should be used only if there's performance issue using MCOIMAPSession in the main thread. */ + public var dispatchQueue: DispatchQueue? { + get { + return DispatchQueue.queueFromWrapped(session.dispatchQueue()) + } + set { + session.setDispatchQueue(newValue?.wrapped) + } + } + + public var isVoIPEnabled: Bool { + get { return session.isVoIPEnabled } + set { session.isVoIPEnabled = newValue } + } + + public var isIdleEnabled: Bool { + get { return session.isIdleEnabled } + } + + public var isOperationQueueRunning: Bool { + get { return session.isOperationQueueRunning } + } + + public var qResyncCompatible: Bool { + get { return session.isQResyncCompatible } + set { session.isQResyncCompatible = newValue } + } + + /** + Cancel all operations + */ + public func cancelAllOperations() { + return mailCoreAutoreleasePool { + session.cancelAllOperations() + } + } + + /** + Returns an operation that gets the list of subscribed folders. + + MCOIMAPFetchFoldersOperation * op = [session fetchSubscribedFoldersOperation]; + [op start:^(NSError * __nullable error, NSArray * folders) { + ... + }]; + */ + + public func fetchSubscribedFoldersOperation() -> MCOIMAPFetchFoldersOperation { + return mailCoreAutoreleasePool { + return MCOIMAPFetchFoldersOperation.init(operation: session.fetchSubscribedFoldersOperation()) + } + } + + /** + Creates an operation for renaming a folder + + MCOIMAPOperation * op = [session renameFolderOperation:@"my documents" otherName:@"Documents"]; + [op start:^(NSError * __nullable error) { + ... + }]; + + */ + public func renameFolderOperation(folder: String, otherName: String) -> MCOIMAPOperation { + return mailCoreAutoreleasePool { + return MCOIMAPOperation.init(operation: session.renameFolderOperation(folder.mailCoreString(), otherName.mailCoreString())) + } + } + + /** + Returns an operation to disconnect the session. + It will disconnect all the sockets created by the session. + + MCOIMAPOperation * op = [session disconnectOperation]; + [op start:^(NSError * __nullable error) { + ... + }]; + */ + public func disconnectOperation() -> MCOIMAPOperation { + return mailCoreAutoreleasePool { + return MCOIMAPOperation(operation: session.disconnectOperation()) + } + } + + /** + Returns an operation that will connect to the given IMAP server without authenticating. + Useful for checking initial server capabilities. + + MCOIMAPOperation * op = [session connectOperation]; + [op start:^(NSError * __nullable error) { + ... + }]; + */ + public func connectOperation() -> MCOIMAPOperation { + return mailCoreAutoreleasePool { + return MCOIMAPOperation.init(operation: session.connectOperation()) + } + } + + /** + Returns an operation that will perform a No-Op operation on the given IMAP server. + + MCOIMAPOperation * op = [session noopOperation]; + [op start:^(NSError * __nullable error) { + ... + }]; + */ + public func noopOperation() -> MCOIMAPOperation { + return mailCoreAutoreleasePool { + return MCOIMAPOperation(operation: session.noopOperation()) + } + } + + /** + Returns an operation that will check whether the IMAP account is valid. + + MCOIMAPOperation * op = [session checkAccountOperation]; + [op start:^(NSError * __nullable error) { + ... + }]; + */ + public func checkAccountOperation() -> MCOIMAPCheckAccountOperation { + return mailCoreAutoreleasePool { + return MCOIMAPCheckAccountOperation(checkAccountOperation: session.checkAccountOperation()) + } + } + + /** + Returns an operation to request capabilities of the server. + See MCOIMAPCapability for the list of capabilities. + + canIdle = NO; + MCOIMAPCapabilityOperation * op = [session capabilityOperation]; + [op start:^(NSError * __nullable error, MCOIndexSet * capabilities) { + if ([capabilities containsIndex:MCOIMAPCapabilityIdle]) { + canIdle = YES; + } + }]; + */ + public func capabilityOperation() -> MCOIMAPCapabilityOperation { + return mailCoreAutoreleasePool { + return MCOIMAPCapabilityOperation(operation: session.capabilityOperation()) + } + } + + public func quotaOperation() -> MCOIMAPQuotaOperation { + return mailCoreAutoreleasePool { + return MCOIMAPQuotaOperation(operation: session.quotaOperation()) + } + } + + /** + Returns an operation that gets all folders + + MCOIMAPFetchFoldersOperation * op = [session fetchAllFoldersOperation]; + [op start:^(NSError * __nullable error, NSArray *folders) { + ... + }]; + */ + public func fetchAllFoldersOperation() -> MCOIMAPFetchFoldersOperation { + return mailCoreAutoreleasePool { + return MCOIMAPFetchFoldersOperation(operation: session.fetchAllFoldersOperation()) + } + } + + /** + Returns an operation to expunge a folder. + + MCOIMAPOperation * op = [session expungeOperation:@"INBOX"]; + [op start:^(NSError * __nullable error) { + ... + }]; + */ + public func expungeOperation(folder:String) -> MCOIMAPOperation { + return mailCoreAutoreleasePool { + return MCOIMAPOperation(operation: session.expungeOperation(folder.mailCoreString())) + } + } + + /** + Returns an operation that creates a new folder + + MCOIMAPOperation * op = [session createFolderOperation:@"holidays 2013"]; + [op start:^(NSError * __nullable error) { + ... + }]; + */ + public func createFolderOperation(folder:String) -> MCOIMAPOperation { + return mailCoreAutoreleasePool { + return MCOIMAPOperation(operation: session.createFolderOperation(folder.mailCoreString())) + } + } + + /** + Returns an operation to subscribe to a folder. + + MCOIMAPOperation * op = [session createFolderOperation:@"holidays 2013"]; + [op start:^(NSError * __nullable error) { + if (error != nil) + return; + MCOIMAPOperation * op = [session subscribeFolderOperation:@"holidays 2013"]; + ... + }]; + */ + public func subscribeFolderOperation(folder: String) -> MCOIMAPOperation { + return mailCoreAutoreleasePool { + return MCOIMAPOperation.init(operation: session.subscribeFolderOperation(folder.mailCoreString())) + } + } + + /** + Returns an operation to unsubscribe from a folder. + + MCOIMAPOperation * op = [session unsubscribeFolderOperation:@"holidays 2009"]; + [op start:^(NSError * __nullable error) { + if (error != nil) + return; + MCOIMAPOperation * op = [session deleteFolderOperation:@"holidays 2009"] + ... + }]; + */ + public func unsubscribeFolderOperation(folder: String) -> MCOIMAPOperation { + return mailCoreAutoreleasePool { + return MCOIMAPOperation.init(operation: session.unsubscribeFolderOperation(folder.mailCoreString())) + } + } + + /** + Returns an operation to unsubscribe from a folder. + + MCOIMAPOperation * op = [session unsubscribeFolderOperation:@"holidays 2009"]; + [op start:^(NSError * __nullable error) { + if (error != nil) + return; + MCOIMAPOperation * op = [session deleteFolderOperation:@"holidays 2009"] + ... + }]; + */ + public func deleteFolderOperation(folder:String) -> MCOIMAPOperation { + return mailCoreAutoreleasePool { + return MCOIMAPOperation(operation: session.deleteFolderOperation(folder.mailCoreString())) + } + } + + public func storeFlagsByUIDOperation(folder:String, uids:MCOIndexSet, kind:IMAPStoreFlagsRequestKind, flags:MCOMessageFlag, customFlags:Array) -> MCOIMAPOperation { + return mailCoreAutoreleasePool { + return MCOIMAPOperation(operation: session.storeFlagsByUIDOperation(folder.mailCoreString(), uids.cast(), kind, flags.toCMessageFlag(), customFlags.mailCoreArray())) + } + } + + /** + Returns an operation to change flags of messages. + + For example: Adds the seen flag to the message with UID 456. + + MCOIMAPOperation * op = [session storeFlagsOperationWithFolder:@"INBOX" + uids:[MCOIndexSet indexSetWithIndex:456] + kind:MCOIMAPStoreFlagsRequestKindAdd + flags:MCOMessageFlagSeen]; + [op start:^(NSError * __nullable error) { + ... + }]; + */ + public func storeFlagsOperation(folder: String, uids: MCOIndexSet, kind: IMAPStoreFlagsRequestKind, flags: MCOMessageFlag) -> MCOIMAPOperation { + return mailCoreAutoreleasePool { + return MCOIMAPOperation.init(operation: session.storeFlagsByUIDOperation(folder.mailCoreString(), uids.nativeInstance, kind, flags.toCMessageFlag(), CArray())) + } + } + + /** + Returns an operation to change flags of messages, using IMAP sequence number. + + For example: Adds the seen flag to the message with the sequence number number 42. + + MCOIMAPOperation * op = [session storeFlagsOperationWithFolder:@"INBOX" + numbers:[MCOIndexSet indexSetWithIndex:42] + kind:MCOIMAPStoreFlagsRequestKindAdd + flags:MCOMessageFlagSeen]; + [op start:^(NSError * __nullable error) { + ... + }]; + */ + public func storeFlagsOperation(folder: String, numbers: MCOIndexSet, kind: IMAPStoreFlagsRequestKind, flags: MCOMessageFlag) -> MCOIMAPOperation { + return mailCoreAutoreleasePool { + return MCOIMAPOperation.init(operation: session.storeFlagsByNumberOperation(folder.mailCoreString(), numbers.nativeInstance, kind, flags.toCMessageFlag(), CArray())) + } + } + + /** + Returns an operation to change flags and custom flags of messages. + + For example: Adds the seen flag and $CNS-Greeting-On flag to the message with UID 456. + + MCOIMAPOperation * op = [session storeFlagsOperationWithFolder:@"INBOX" + uids:[MCOIndexSet indexSetWithIndex:456] + kind:MCOIMAPStoreFlagsRequestKindAdd + flags:MCOMessageFlagSeen + customFlags:@["$CNS-Greeting-On"]]; + [op start:^(NSError * __nullable error) { + ... + }]; + */ + public func storeFlagsOperation(folder: String, uids: MCOIndexSet, kind: IMAPStoreFlagsRequestKind, flags: MCOMessageFlag, customFlags: Array) -> MCOIMAPOperation { + return mailCoreAutoreleasePool { + return MCOIMAPOperation.init(operation: session.storeFlagsByUIDOperation(folder.mailCoreString(), uids.nativeInstance, kind, flags.toCMessageFlag(), customFlags.mailCoreArray())) + } + } + + /** + Returns an operation to change flags and custom flags of messages, using IMAP sequence number. + + For example: Adds the seen flag and $CNS-Greeting-On flag to the message with the sequence number 42. + + MCOIMAPOperation * op = [session storeFlagsOperationWithFolder:@"INBOX" + numbers:[MCOIndexSet indexSetWithIndex:42] + kind:MCOIMAPStoreFlagsRequestKindAdd + flags:MCOMessageFlagSeen + customFlags:@["$CNS-Greeting-On"]]; + [op start:^(NSError * __nullable error) { + ... + }]; + */ + public func storeFlagsOperation(folder: String, numbers: MCOIndexSet, kind: IMAPStoreFlagsRequestKind, flags: MCOMessageFlag, customFlags: Array) -> MCOIMAPOperation { + return mailCoreAutoreleasePool { + return MCOIMAPOperation.init(operation: session.storeFlagsByNumberOperation(folder.mailCoreString(), numbers.nativeInstance, kind, flags.toCMessageFlag(), customFlags.mailCoreArray())) + } + } + + /** + Returns an operation to change labels of messages. Intended for Gmail + + For example: Adds the label "Home" flag to the message with UID 42. + + MCOIMAPOperation * op = [session storeLabelsOperationWithFolder:@"INBOX" + numbers:[MCOIndexSet indexSetWithIndex:42] + kind:MCOIMAPStoreFlagsRequestKindAdd + labels:[NSArray arrayWithObject:@"Home"]]; + [op start:^(NSError * __nullable error) { + ... + }]; + */ + public func storeLabelsOperation(folder: String, numbers: MCOIndexSet, kind: IMAPStoreFlagsRequestKind, labels: Array) -> MCOIMAPOperation { + return mailCoreAutoreleasePool { + return MCOIMAPOperation.init(operation: session.storeLabelsByNumberOperation(folder.mailCoreString(), numbers.nativeInstance, kind, labels.mailCoreArray())) + } + } + + /** + Returns an operation to change labels of messages. Intended for Gmail + + For example: Adds the label "Home" flag to the message with UID 456. + + MCOIMAPOperation * op = [session storeLabelsOperationWithFolder:@"INBOX" + uids:[MCOIndexSet indexSetWithIndex:456] + kind:MCOIMAPStoreFlagsRequestKindAdd + labels:[NSArray arrayWithObject:@"Home"]]; + [op start:^(NSError * __nullable error) { + ... + }]; + */ + public func storeLabelsOperation(folder: String, uids: MCOIndexSet, kind: IMAPStoreFlagsRequestKind, labels: Array) -> MCOIMAPOperation { + return mailCoreAutoreleasePool { + return MCOIMAPOperation.init(operation: session.storeLabelsByUIDOperation(folder.mailCoreString(), uids.nativeInstance, kind, labels.mailCoreArray())) + } + } + + /** + Returns an operation to add a message to a folder. + + MCOIMAPOperation * op = [session appendMessageOperationWithFolder:@"Sent Mail" messageData:rfc822Data flags:MCOMessageFlagNone]; + [op start:^(NSError * __nullable error, uint32_t createdUID) { + if (error == nil) { + NSLog(@"created message with UID %lu", (unsigned long) createdUID); + } + }]; + */ + public func appendMessageOperation(folder: String, messageData: Data, flags: MCOMessageFlag) -> MCOIMAPAppendMessageOperation { + return mailCoreAutoreleasePool { + return MCOIMAPAppendMessageOperation.init(operation: session.appendMessageOperationWithData(folder.mailCoreString(), messageData.mailCoreData(), flags.toCMessageFlag(), CArray())) + } + } + + /** + Returns an operation to add a message with custom flags to a folder. + + MCOIMAPOperation * op = [session appendMessageOperationWithFolder:@"Sent Mail" messageData:rfc822Data flags:MCOMessageFlagNone customFlags:@[@"$CNS-Greeting-On"]]; + [op start:^(NSError * __nullable error, uint32_t createdUID) { + if (error == nil) { + NSLog(@"created message with UID %lu", (unsigned long) createdUID); + } + }]; + */ + public func appendMessageOperation(folder: String, messageData: Data, flags: MCOMessageFlag, customFlags:Array) -> MCOIMAPAppendMessageOperation { + return mailCoreAutoreleasePool { + return MCOIMAPAppendMessageOperation.init(operation: session.appendMessageOperationWithData(folder.mailCoreString(), messageData.mailCoreData(), flags.toCMessageFlag(), customFlags.mailCoreArray())) + } + } + + /** + Returns an operation to add a message to a folder. + + MCOIMAPOperation * op = [session appendMessageOperationWithFolder:@"Sent Mail" messageData:rfc822Data flags:MCOMessageFlagNone]; + [op start:^(NSError * __nullable error, uint32_t createdUID) { + if (error == nil) { + NSLog(@"created message with UID %lu", (unsigned long) createdUID); + } + }]; + */ + public func appendMessageOperation(folder:String, contentsAtPath path:String, flags:MCOMessageFlag, customFlags:Array) -> MCOIMAPAppendMessageOperation { + return mailCoreAutoreleasePool { + return MCOIMAPAppendMessageOperation(operation: session.appendMessageOperation(folder.mailCoreString(), path.mailCoreString(), flags.toCMessageFlag(), customFlags.mailCoreArray())) + } + } + + /** + Returns an operation to fetch messages by (sequence) number. + For example: show 50 most recent uids. + NSString *folder = @"INBOX"; + MCOIMAPFolderInfoOperation *folderInfo = [session folderInfoOperation:folder]; + + [folderInfo start:^(NSError *error, MCOIMAPFolderInfo *info) { + int numberOfMessages = 50; + numberOfMessages -= 1; + MCOIndexSet *numbers = [MCOIndexSet indexSetWithRange:MCORangeMake([info messageCount] - numberOfMessages, numberOfMessages)]; + + MCOIMAPFetchMessagesOperation *fetchOperation = [session fetchMessagesByNumberOperationWithFolder:folder + requestKind:MCOIMAPMessagesRequestKindUid + numbers:numbers]; + + [fetchOperation start:^(NSError *error, NSArray *messages, MCOIndexSet *vanishedMessages) { + for (MCOIMAPMessage * message in messages) { + NSLog(@"%u", [message uid]); + } + }]; + }]; + */ + public func fetchMessagesByNumber(folder:String, kind:MCOIMAPMessagesRequestKind, numbers:MCOIndexSet) -> MCOIMAPFetchMessagesOperation { + return mailCoreAutoreleasePool { + return MCOIMAPFetchMessagesOperation(operation: session.fetchMessagesByNumberOperation(folder.mailCoreString(), kind.toCIMAPMessagesRequestKind(), numbers.cast())); + } + } + + /** + Returns an operation to fetch messages by (sequence) number. + For example: show 50 most recent uids. + NSString *folder = @"INBOX"; + MCOIMAPFolderInfoOperation *folderInfo = [session folderInfoOperation:folder]; + + [folderInfo start:^(NSError *error, MCOIMAPFolderInfo *info) { + int numberOfMessages = 50; + numberOfMessages -= 1; + MCOIndexSet *numbers = [MCOIndexSet indexSetWithRange:MCORangeMake([info messageCount] - numberOfMessages, numberOfMessages)]; + + MCOIMAPFetchMessagesOperation *fetchOperation = [session fetchMessagesByNumberOperationWithFolder:folder + requestKind:MCOIMAPMessagesRequestKindUid + numbers:numbers]; + + [fetchOperation start:^(NSError *error, NSArray *messages, MCOIndexSet *vanishedMessages) { + for (MCOIMAPMessage * message in messages) { + NSLog(@"%u", [message uid]); + } + }]; + }]; + */ + public func fetchMessagesByUid(folder:String, kind:MCOIMAPMessagesRequestKind, uids:MCOIndexSet) -> MCOIMAPFetchMessagesOperation { + return mailCoreAutoreleasePool { + return MCOIMAPFetchMessagesOperation(operation: session.fetchMessagesByUIDOperation(folder.mailCoreString(), kind.toCIMAPMessagesRequestKind(), uids.cast())); + } + } + + /** + Returns an operation to sync the last changes related to the given message list given a modSeq. + + MCOIMAPFetchMessagesOperation * op = [session syncMessagesByUIDWithFolder:@"INBOX" + requestKind:MCOIMAPMessagesRequestKindUID + uids:MCORangeMake(1, UINT64_MAX) + modSeq:lastModSeq]; + [op start:^(NSError * __nullable error, NSArray * messages, MCOIndexSet * vanishedMessages) { + NSLog(@"added or modified messages: %@", messages); + NSLog(@"deleted messages: %@", vanishedMessages); + }]; + + @warn *Important*: This is only for servers that support Conditional Store. See [RFC4551](http://tools.ietf.org/html/rfc4551) + vanishedMessages will be set only for servers that support QRESYNC. See [RFC5162](http://tools.ietf.org/html/rfc5162) + */ + public func syncMessages(folder:String, kind:MCOIMAPMessagesRequestKind, uids:MCOIndexSet, modSeq:UInt64) -> MCOIMAPFetchMessagesOperation { + return mailCoreAutoreleasePool { + return MCOIMAPFetchMessagesOperation(operation: session.syncMessagesByUIDOperation(folder.mailCoreString(), kind.toCIMAPMessagesRequestKind(), uids.cast(), modSeq)); + } + } + + /** + Returns an operation to fetch the content of a message. + @param urgent is set to YES, an additional connection to the same folder might be opened to fetch the content. + + MCOIMAPFetchContentOperation * op = [session fetchMessageOperationWithFolder:@"INBOX" uid:456 urgent:NO]; + [op start:^(NSError * __nullable error, NSData * messageData) { + MCOMessageParser * parser = [MCOMessageParser messageParserWithData:messageData] + ... + }]; + */ + public func fetchMessageOperation(folder:String, uid:UInt32, urgent:Bool) -> MCOIMAPFetchContentOperation { + return mailCoreAutoreleasePool { + return MCOIMAPFetchContentOperation(operation: session.fetchMessageByUIDOperation(folder.mailCoreString(), uid, urgent)); + } + } + + /** + Returns an operation to fetch the content of a message. + + MCOIMAPFetchContentOperation * op = [session fetchMessageOperationWithFolder:@"INBOX" uid:456]; + [op start:^(NSError * __nullable error, NSData * messageData) { + MCOMessageParser * parser = [MCOMessageParser messageParserWithData:messageData] + ... + }]; + */ + public func fetchMessageOperation(folder: String, uid: UInt32) -> MCOIMAPFetchContentOperation { + return mailCoreAutoreleasePool { + return MCOIMAPFetchContentOperation.init(operation: session.fetchMessageByUIDOperation(folder.mailCoreString(), uid, false)) + } + } + + /** + Returns an operation to fetch the content of a message, using IMAP sequence number. + @param urgent is set to YES, an additional connection to the same folder might be opened to fetch the content. + + MCOIMAPFetchContentOperation * op = [session fetchMessageOperationWithFolder:@"INBOX" number:42 urgent:NO]; + [op start:^(NSError * __nullable error, NSData * messageData) { + MCOMessageParser * parser = [MCOMessageParser messageParserWithData:messageData] + ... + }]; + */ + public func fetchMessageOperation(folder:String, number:UInt32, urgent:Bool) -> MCOIMAPFetchContentOperation { + return mailCoreAutoreleasePool { + return MCOIMAPFetchContentOperation(operation: session.fetchMessageByUIDOperation(folder.mailCoreString(), number, urgent)); + } + } + + /** + Returns an operation to fetch the content of a message, using IMAP sequence number. + + MCOIMAPFetchContentOperation * op = [session fetchMessageOperationWithFolder:@"INBOX" number:42]; + [op start:^(NSError * __nullable error, NSData * messageData) { + MCOMessageParser * parser = [MCOMessageParser messageParserWithData:messageData] + ... + }]; + */ + public func fetchMessageOperation(folder:String, number:UInt32) -> MCOIMAPFetchContentOperation { + return mailCoreAutoreleasePool { + return MCOIMAPFetchContentOperation(operation: session.fetchMessageByUIDOperation(folder.mailCoreString(), number, false)); + } + } + + /** + Returns an operation to fetch an attachment. + @param urgent is set to YES, an additional connection to the same folder might be opened to fetch the content. + + MCOIMAPFetchContentOperation * op = [session fetchMessageAttachmentOperationWithFolder:@"INBOX" + uid:456 + partID:@"1.2" + encoding:MCOEncodingBase64 + urgent:YES]; + [op start:^(NSError * __nullable error, NSData * partData) { + ... + }]; + */ + public func fetchMessageAttachmentOperation(folder:String, uid:UInt32, partId:String, encoding:Encoding, urgent:Bool) -> MCOIMAPFetchContentOperation { + return mailCoreAutoreleasePool { + return MCOIMAPFetchContentOperation(operation: session.fetchMessageAttachmentByUIDOperation(folder.mailCoreString(), + uid, + partId.mailCoreString(), + encoding, + urgent)) + } + } + + + /** + Returns an operation to fetch an attachment. + + Example 1: + + MCOIMAPFetchContentOperation * op = [session fetchMessageAttachmentOperationWithFolder:@"INBOX" + uid:456 + partID:@"1.2" + encoding:MCOEncodingBase64]; + [op start:^(NSError * __nullable error, NSData * partData) { + ... + }]; + + Example 2: + + MCOIMAPFetchContentOperation * op = [session fetchMessageAttachmentOperationWithFolder:@"INBOX" + uid:[message uid] + partID:[part partID] + encoding:[part encoding]]; + [op start:^(NSError * __nullable error, NSData * partData) { + ... + }]; + */ + public func fetchMessageAttachmentOperation(folder: String, uid: UInt32, partID: String, encoding: Encoding, urgent: Bool) -> MCOIMAPFetchContentOperation { + return mailCoreAutoreleasePool { + return MCOIMAPFetchContentOperation.init(operation: session.fetchMessageAttachmentByUIDOperation(folder.mailCoreString(), + uid, + partID.mailCoreString(), + encoding, + urgent)) + } + } + + /** + Returns an operation to fetch an attachment. + @param urgent is set to YES, an additional connection to the same folder might be opened to fetch the content. + + MCOIMAPFetchContentOperation * op = [session fetchMessageAttachmentOperationWithFolder:@"INBOX" + uid:456 + partID:@"1.2" + encoding:MCOEncodingBase64 + urgent:YES]; + [op start:^(NSError * __nullable error, NSData * partData) { + ... + }]; + */ + public func fetchMessageAttachmentOperation(folder:String, number:UInt32, partId:String, encoding:Encoding, urgent:Bool) -> MCOIMAPFetchContentOperation { + return mailCoreAutoreleasePool { + return MCOIMAPFetchContentOperation(operation: session.fetchMessageAttachmentByNumberOperation(folder.mailCoreString(), + number, + partId.mailCoreString(), + encoding, + urgent)) + } + } + + /** + Returns an operation to fetch an attachment. + + Example 1: + + MCOIMAPFetchContentOperation * op = [session fetchMessageAttachmentOperationWithFolder:@"INBOX" + number:42 + partID:@"1.2" + encoding:MCOEncodingBase64]; + [op start:^(NSError * __nullable error, NSData * partData) { + ... + }]; + + Example 2: + + MCOIMAPFetchContentOperation * op = [session fetchMessageAttachmentOperationWithFolder:@"INBOX" + number:[message sequenceNumber] + partID:[part partID] + encoding:[part encoding]]; + [op start:^(NSError * __nullable error, NSData * partData) { + ... + }]; + */ + public func fetchMessageAttachmentOperation(folder:String, number:UInt32, partId:String, encoding:Encoding) -> MCOIMAPFetchContentOperation { + return mailCoreAutoreleasePool { + return MCOIMAPFetchContentOperation(operation: session.fetchMessageAttachmentByNumberOperation(folder.mailCoreString(), + number, + partId.mailCoreString(), + encoding, + false)) + } + } + + /** + Returns an operation to search for messages. + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchFrom:@"laura@etpan.org"] + MCOIMAPSearchOperation * op = [session searchExpressionOperationWithFolder:@"INBOX" + expression:expr]; + [op start:^(NSError * __nullable error, MCOIndexSet * searchResult) { + ... + }]; + */ + public func searchExpressionOperation(folder:String, expression: MCOIMAPSearchExpression) -> MCOIMAPSearchOperation { + return mailCoreAutoreleasePool { + return MCOIMAPSearchOperation(operation: session.searchOperationWithExpression(folder.mailCoreString(), expression.cast())) + } + } + + /** + Returns an operation to search for messages. + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchFrom:@"laura@etpan.org"] + MCOIMAPSearchOperation * op = [session searchExpressionOperationWithFolder:@"INBOX" + expression:expr]; + [op start:^(NSError * __nullable error, MCOIndexSet * searchResult) { + ... + }]; + */ + public func searchOperation(folder:String, kind:IMAPSearchKind, searchString:String) -> MCOIMAPSearchOperation { + return mailCoreAutoreleasePool { + return MCOIMAPSearchOperation(operation: session.searchOperation(folder.mailCoreString(), kind, searchString.mailCoreString())) + } + } + + /** + Returns an operation to copy messages to a folder. + + MCOIMAPCopyMessagesOperation * op = [session copyMessagesOperationWithFolder:@"INBOX" + uids:[MCIndexSet indexSetWithIndex:456] + destFolder:@"Cocoa"]; + [op start:^(NSError * __nullable error, NSDictionary * uidMapping) { + NSLog(@"copied to folder with UID mapping %@", uidMapping); + }]; + */ + public func copyMessagesOperation(folder:String, uids:MCOIndexSet, destFolder:String) -> MCOIMAPCopyMessagesOperation { + return mailCoreAutoreleasePool { + return MCOIMAPCopyMessagesOperation(operation: session.copyMessagesOperation(folder.mailCoreString(), uids.cast(), destFolder.mailCoreString())) + } + } + + /** + Returns an operation that retrieves folder metadata (like UIDNext) + + MCOIMAPFolderInfoOperation * op = [session folderInfoOperation:@"INBOX"]; + [op start:^(NSError *error, MCOIMAPFolderInfo * info) { + NSLog(@"UIDNEXT: %lu", (unsigned long) [info uidNext]); + NSLog(@"UIDVALIDITY: %lu", (unsigned long) [info uidValidity]); + NSLog(@"HIGHESTMODSEQ: %llu", (unsigned long long) [info modSequenceValue]); + NSLog(@"messages count: %lu", [info messageCount]); + }]; + */ + public func folderInfoOperation(folder:String) -> MCOIMAPFolderInfoOperation { + return mailCoreAutoreleasePool { + return MCOIMAPFolderInfoOperation(operation: session.folderInfoOperation(folder.mailCoreString())) + } + } + + /** + Returns an operation that retrieves folder status (like UIDNext - Unseen -) + + MCOIMAPFolderStatusOperation * op = [session folderStatusOperation:@"INBOX"]; + [op start:^(NSError *error, MCOIMAPFolderStatus * info) { + NSLog(@"UIDNEXT: %lu", (unsigned long) [info uidNext]); + NSLog(@"UIDVALIDITY: %lu", (unsigned long) [info uidValidity]); + NSLog(@"messages count: %lu", [info totalMessages]); + }]; + */ + public func folderStatusOperation(folder:String) -> MCOIMAPFolderStatusOperation { + return mailCoreAutoreleasePool { + return MCOIMAPFolderStatusOperation(operation: session.folderStatusOperation(folder.mailCoreString())) + } + } + + /** + Returns an operation to wait for something to happen in the folder. + See [RFC2177](http://tools.ietf.org/html/rfc2177) for me info. + + MCOIMAPIdleOperation * op = [session idleOperationWithFolder:@"INBOX" + lastKnownUID:0]; + [op start:^(NSError * __nullable error) { + ... + }]; + */ + public func idleOperation(folder:String, lastKnownUID:UInt32) -> MCOIMAPIdleOperation { + return mailCoreAutoreleasePool { + return MCOIMAPIdleOperation(idleOperation: session.idleOperation(folder.mailCoreString(), lastKnownUID)) + } + } + + /** + Returns an operation for custom command. + @param command is the text representation of the command to be send. + + + MCOIMAPCustomCommandOperation * op = [session customCommandOperation:@"ACTIVATE SERVICE"]; + [op start: ^(NSString * __nullable response, NSError * __nullable error) { + ... + }]; + */ + public func customCommandOperation(_ command: String) -> MCOIMAPCustomCommandOperation { + return mailCoreAutoreleasePool { + return MCOIMAPCustomCommandOperation.init(operation: session.customCommandOperation(command.mailCoreString())) + } + } + + /** + Returns an operation to fetch an attachment to a file. + @param urgent is set to YES, an additional connection to the same folder might be opened to fetch the content. + MCOOperation will be perform in a memory efficient manner. + + MCOIMAPFetchContentToFileOperation * op = [session fetchMessageAttachmentToFileOperationWithFolder:@"INBOX" + uid:456 + partID:@"1.2" + encoding:MCOEncodingBase64 + filename:filename + urgent:YES]; + + // Optionally, explicitly enable chunked mode + [op setLoadingByChunksEnabled:YES]; + [op setChunksSize:1024*1024]; + // need in chunked mode for correct progress indication + [op setEstimatedSize:sizeOfAttachFromBodystructure]; + + [op start:^(NSError * __nullable error) { + ... + }]; + + */ + func fetchMessageAttachmentToFileOperation(folder: String, uid: UInt32, partID: String, encoding: Encoding, filename:String, urgent: Bool) -> MCOIMAPFetchContentToFileOperation { + return mailCoreAutoreleasePool { + return MCOIMAPFetchContentToFileOperation(operation: session.fetchMessageAttachmentToFileOperation(folder.mailCoreString(), + uid, + partID.mailCoreString(), + encoding, + filename.mailCoreString(), + urgent)) + } + } + + /** + Returns an operation to fetch the list of namespaces. + + MCOIMAPFetchNamespaceOperation * op = [session fetchNamespaceOperation]; + [op start:^(NSError * __nullable error, NSDictionary * namespaces) { + if (error != nil) + return; + MCOIMAPNamespace * ns = [namespace objectForKey:MCOIMAPNamespacePersonal]; + NSString * path = [ns pathForComponents:[NSArray arrayWithObject:]]; + MCOIMAPOperation * createOp = [session createFolderOperation:foobar]; + [createOp start:^(NSError * __nullable error) { + ... + }]; + }]; + */ + public func fetchNamespaceOperation() -> MCOIMAPFetchNamespaceOperation { + return mailCoreAutoreleasePool { + return MCOIMAPFetchNamespaceOperation(operation: session.fetchNamespaceOperation()) + } + } + + /** + Returns an operation to move messages to a folder. + + MCOIMAPMoveMessagesOperation * op = [session moveMessagesOperationWithFolder:@"INBOX" + uids:[MCIndexSet indexSetWithIndex:456] + destFolder:@"Cocoa"]; + [op start:^(NSError * __nullable error, NSDictionary * uidMapping) { + NSLog(@"moved to folder with UID mapping %@", uidMapping); + }]; + */ + public func moveMessagesOperation(folder: String, uids: MCOIndexSet, destFolder: String) -> MCOIMAPMoveMessagesOperation { + return mailCoreAutoreleasePool { + return MCOIMAPMoveMessagesOperation.init(operation: session.moveMessagesOperation(folder.mailCoreString(), uids.nativeInstance, destFolder.mailCoreString())) + } + } + + /** + Returns an operation to fetch the parsed content of a message. + @param urgent is set to YES, an additional connection to the same folder might be opened to fetch the content. + + MCOIMAPFetchParsedContentOperation * op = [session fetchParsedMessageOperationWithFolder:@"INBOX" uid:456 urgent:NO]; + [op start:^(NSError * __nullable error, MCOMessageParser * parser) { + + ... + }]; + */ + public func fetchParsedMessageOperation(folder: String, uid: UInt32, urgent: Bool) -> MCOIMAPFetchParsedContentOperation { + return mailCoreAutoreleasePool { + return MCOIMAPFetchParsedContentOperation.init(operation: session.fetchParsedMessageOperationByUIDOperation(folder.mailCoreString(), uid, urgent)) + } + } + + /** + Returns an operation to fetch the parsed content of a message. + + MCOIMAPFetchParsedContentOperation * op = [session fetchParsedMessageOperationWithFolder:@"INBOX" uid:456]; + [op start:^(NSError * __nullable error, MCOMessageParser * parser) { + + ... + }]; + */ + public func fetchParsedMessageOperation(folder: String, uid: UInt32) -> MCOIMAPFetchParsedContentOperation { + return mailCoreAutoreleasePool { + return MCOIMAPFetchParsedContentOperation.init(operation: session.fetchParsedMessageOperationByUIDOperation(folder.mailCoreString(), uid, false)) + } + } + + /** + Returns an operation to fetch the parsed content of a message, using IMAP sequence number. + @param urgent is set to YES, an additional connection to the same folder might be opened to fetch the content. + + MCOIMAPFetchParsedContentOperation * op = [session fetchParsedMessageOperationWithFolder:@"INBOX" number:42 urgent:NO]; + [op start:^(NSError * __nullable error, MCOMessageParser * parser) { + + ... + }]; + */ + public func fetchParsedMessageOperation(folder: String, number: UInt32, urgent: Bool) -> MCOIMAPFetchParsedContentOperation { + return mailCoreAutoreleasePool { + return MCOIMAPFetchParsedContentOperation.init(operation: session.fetchParsedMessageOperationByNumberOperation(folder.mailCoreString(), number, urgent)) + } + } + + /** + Returns an operation to fetch the parsed content of a message, using IMAP sequence number. + + MCOIMAPFetchParsedContentOperation * op = [session fetchParsedMessageOperationWithFolder:@"INBOX" number:42]; + [op start:^(NSError * __nullable error, MCOMessageParser * parser) { + + ... + }]; + */ + public func fetchParsedMessageOperation(folder: String, number: UInt32) -> MCOIMAPFetchParsedContentOperation { + return mailCoreAutoreleasePool { + return MCOIMAPFetchParsedContentOperation.init(operation: session.fetchParsedMessageOperationByNumberOperation(folder.mailCoreString(), number, false)) + } + } + + /** + Returns an operation to render the HTML version of a message to be displayed in a web view. + + MCOIMAPMessageRenderingOperation * op = [session htmlRenderingOperationWithMessage:msg + folder:@"INBOX"]; + + [op start:^(NSString * htmlString, NSError * error) { + ... + }]; + */ + public func htmlRenderingOperation(message: MCOIMAPMessage, folder: String) -> MCOIMAPMessageRenderingOperation { + return mailCoreAutoreleasePool { + return MCOIMAPMessageRenderingOperation.init(operation: session.htmlRenderingOperation(message.nativeInstance, folder.mailCoreString())) + } + } + + /** + Returns an operation to render the HTML body of a message to be displayed in a web view. + + MCOIMAPMessageRenderingOperation * op = [session htmlBodyRenderingOperationWithMessage:msg + folder:@"INBOX"]; + + [op start:^(NSString * htmlString, NSError * error) { + ... + }]; + */ + public func htmlBodyRenderingOperation(message: MCOIMAPMessage, folder: String) -> MCOIMAPMessageRenderingOperation { + return mailCoreAutoreleasePool { + return MCOIMAPMessageRenderingOperation.init(operation: session.htmlBodyRenderingOperation(message.nativeInstance, folder.mailCoreString())) + } + } + + /** + Returns an operation to render the plain text version of a message. + + MCOIMAPMessageRenderingOperation * op = [session plainTextRenderingOperationWithMessage:msg + folder:@"INBOX"]; + + [op start:^(NSString * htmlString, NSError * error) { + ... + }]; + */ + public func plainTextRenderingOperation(message: MCOIMAPMessage, folder: String) -> MCOIMAPMessageRenderingOperation { + return mailCoreAutoreleasePool { + return MCOIMAPMessageRenderingOperation.init(operation: session.plainTextRenderingOperation(message.nativeInstance, folder.mailCoreString())) + } + } + + /** + Returns an operation to render the plain text body of a message. + All end of line will be removed and white spaces cleaned up if requested. + This method can be used to generate the summary of the message. + + MCOIMAPMessageRenderingOperation * op = [session plainTextBodyRenderingOperationWithMessage:msg + folder:@"INBOX" + stripWhitespace:YES]; + + [op start:^(NSString * htmlString, NSError * error) { + ... + }]; + */ + public func plainTextBodyRenderingOperationWithMessage(message: MCOIMAPMessage, folder: String, stripWhitespace: Bool) -> MCOIMAPMessageRenderingOperation { + return mailCoreAutoreleasePool { + return MCOIMAPMessageRenderingOperation.init(operation: session.plainTextBodyRenderingOperation(message.nativeInstance, folder.mailCoreString(), stripWhitespace)) + } + } + + /** + Returns an operation to render the plain text body of a message. + All end of line will be removed and white spaces cleaned up. + This method can be used to generate the summary of the message. + + MCOIMAPMessageRenderingOperation * op = [session plainTextBodyRenderingOperationWithMessage:msg + folder:@"INBOX"]; + + [op start:^(NSString * htmlString, NSError * error) { + ... + }]; + */ + public func plainTextBodyRenderingOperationWithMessage(message: MCOIMAPMessage, folder: String) -> MCOIMAPMessageRenderingOperation { + return mailCoreAutoreleasePool { + return MCOIMAPMessageRenderingOperation.init(operation: session.plainTextBodyRenderingOperation(message.nativeInstance, folder.mailCoreString(), true)) + } + } + +} diff --git a/src/swift/provider/MailProvider.swift b/src/swift/provider/MailProvider.swift new file mode 100644 index 000000000..ff7a27324 --- /dev/null +++ b/src/swift/provider/MailProvider.swift @@ -0,0 +1,48 @@ +// +// MCOMailProvider.swift +// mailcore2 +// +// Created by Andrew on 7/26/17. +// Copyright © 2017 MailCore. All rights reserved. +// + +import Foundation +import CMailCore + +public class MCOMailProvider: NSObjectCompat, Convertible { + + internal var nativeInstance: CMailProvider + + required public init(mailCoreObject: CObject) { + self.nativeInstance = CMailProvider(cobject: mailCoreObject) + self.nativeInstance.retain() + } + + deinit { + self.nativeInstance.release() + } + + func cast() -> CObject { + return nativeInstance.toCObject() + } + + public var imapServices: [MCONetService]? { + return mailCoreAutoreleasePool { + return Array(mailCoreArray: self.nativeInstance.imapServices) + } + } + + public var smtpServices: [MCONetService]? { + return mailCoreAutoreleasePool { + return Array(mailCoreArray: self.nativeInstance.smtpServices) + } + } + + public var identifier: String? { + return mailCoreAutoreleasePool { + return self.nativeInstance.identifier.string() + } + } + + +} diff --git a/src/swift/provider/MailProvidersManager.swift b/src/swift/provider/MailProvidersManager.swift new file mode 100644 index 000000000..02e2a75d8 --- /dev/null +++ b/src/swift/provider/MailProvidersManager.swift @@ -0,0 +1,55 @@ +// +// CMailProvidersManager.swift +// mailcore2 +// +// Created by Andrew on 7/26/17. +// Copyright © 2017 MailCore. All rights reserved. +// + +import Foundation +import CMailCore + +public class MCOMailProvidersManager: NSObjectCompat { + + public static let sharedManager = MCOMailProvidersManager() + + private override init() { + super.init() + + #if !os(Android) && !os(Windows) + let filename: String? + #if SWIFT_PACKAGE + filename = Bundle.module.path(forResource: "providers", ofType: "json") + #else + filename = Bundle(for: MCOMailProvidersManager.self).path(forResource: "providers", ofType: "json") + #endif + if let filename = filename { + MCOMailProvidersManager.registerProviders(filename: filename) + } + #endif + } + + public static func registerProviders(filename: String) { + mailCoreAutoreleasePool { + CMailProvidersManager_shared().registerProvidersWithFilename(filename.mailCoreString()) + } + } + + public func provider(forEmail: String) -> MCOMailProvider? { + return mailCoreAutoreleasePool { + createMCOObject(from: CMailProvidersManager_shared().providerForEmail(forEmail.mailCoreString()).toCObject()) + } + } + + public func provider(forMX: String) -> MCOMailProvider? { + return mailCoreAutoreleasePool { + createMCOObject(from: CMailProvidersManager_shared().providerForMX(forMX.mailCoreString()).toCObject()) + } + } + + public func provider(forIdentifier: String) -> MCOMailProvider? { + return mailCoreAutoreleasePool { + createMCOObject(from: CMailProvidersManager_shared().providerForIdentifier(forIdentifier.mailCoreString()).toCObject()) + } + } +} diff --git a/src/swift/provider/NetService.swift b/src/swift/provider/NetService.swift new file mode 100644 index 000000000..00a213d32 --- /dev/null +++ b/src/swift/provider/NetService.swift @@ -0,0 +1,58 @@ +// +// CNetService.swift +// mailcore2 +// +// Created by Andrew on 7/26/17. +// Copyright © 2017 MailCore. All rights reserved. +// + +import Foundation +import CMailCore + +public class MCONetService: NSObjectCompat, Convertible { + + internal var nativeInstance: CNetService + + public required init(mailCoreObject obj: CObject) { + self.nativeInstance = CNetService.init(cobject: obj) + self.nativeInstance.retain() + } + + deinit { + self.nativeInstance.release() + } + + func cast() -> CObject { + return self.nativeInstance.toCObject() + } + + public var port: UInt32 { + get { return self.nativeInstance.port } + set { self.nativeInstance.port = newValue } + } + + public var hostname : String? { + set { + mailCoreAutoreleasePool { + nativeInstance.hostname = newValue?.mailCoreString() ?? MailCoreString() + } + } + get { + return mailCoreAutoreleasePool { + nativeInstance.hostname.string() + } + } + } + + public var connectionType : ConnectionType { + set { nativeInstance.connectionType = newValue } + get { return nativeInstance.connectionType } + } + + public func hostname(email: String) -> String? { + return mailCoreAutoreleasePool { + return nativeInstance.normalizedHostnameWithEmail(email.mailCoreString()).string() + } + } + +} diff --git a/src/swift/resources/providers.json b/src/swift/resources/providers.json new file mode 120000 index 000000000..9545d8a2f --- /dev/null +++ b/src/swift/resources/providers.json @@ -0,0 +1 @@ +../../../resources/providers.json \ No newline at end of file diff --git a/src/swift/rfc822/Attachment.swift b/src/swift/rfc822/Attachment.swift new file mode 100644 index 000000000..d4c04f3ac --- /dev/null +++ b/src/swift/rfc822/Attachment.swift @@ -0,0 +1,80 @@ +import Foundation +import CMailCore + +public class MCOAttachment : MCOAbstractPart { + + internal var nativeInstance: CAttachment; + + public var data: Data? { + get { + return mailCoreAutoreleasePool { + Data(cdata: self.nativeInstance.data) + } + } + set { + mailCoreAutoreleasePool { + nativeInstance.data = newValue?.mailCoreData() ?? CData() + } + } + } + + required public init(mailCoreObject obj: CObject) { + let attachment = CAttachment.init(cobject: obj) + self.nativeInstance = attachment; + self.nativeInstance.retain() + super.init(mailCoreObject: obj); + } + + deinit { + self.nativeInstance.release() + } + + public func decodedString() -> String? { + return nativeInstance.decodedString.string() + } + + /** Returns a MIME type for a filename.*/ + public static func mimeTypeForFilename(filename: String) -> String? { + return mailCoreAutoreleasePool { + return CAttachment.mimeTypeForFilename(filename.mailCoreString()).string() + } + } + + /** Returns a file attachment with the content of the given file.*/ + public static func attachmentWithContentsOfFile(filename: String) -> MCOAttachment? { + return mailCoreAutoreleasePool { + return createMCOObject(from: CAttachment.attachmentWithContentsOfFile(filename.mailCoreString()).toCObject()) + } + } + + /** Returns a file attachment with the given data and filename.*/ + public convenience init( data: Data, filename: String) { + let autoreleasePool = CAutoreleasePool_init() + defer { + autoreleasePool.release() + } + self.init(mailCoreObject: CAttachment.attachmentWithData(filename.mailCoreString(), data.mailCoreData()).toCObject()) + } + + /** Returns a part with an HTML content.*/ + public static func attachmentWithHTMLString(htmlString: String) -> MCOAttachment? { + return mailCoreAutoreleasePool { + return createMCOObject(from: CAttachment.attachmentWithHTMLString(htmlString.mailCoreString()).toCObject()) + } + } + + /** Returns a part with a RFC 822 messsage attachment.*/ + public static func attachmentWithRFC822Message(messageData: Data) -> MCOAttachment? { + return mailCoreAutoreleasePool { + return createMCOObject(from: CAttachment.attachmentWithRFC822Message(messageData.mailCoreData()).toCObject()) + } + } + + /** Returns a part with an plain text content.*/ + public static func attachmentWithText(text: String) -> MCOAttachment? { + return mailCoreAutoreleasePool { + return createMCOObject(from: CAttachment.attachmentWithText(text.mailCoreString()).toCObject()) + } + } + +} diff --git a/src/swift/rfc822/MessageBuilder.swift b/src/swift/rfc822/MessageBuilder.swift new file mode 100644 index 000000000..2d36f7312 --- /dev/null +++ b/src/swift/rfc822/MessageBuilder.swift @@ -0,0 +1,199 @@ +import Foundation +import CMailCore + +public class MCOMessageBuilder : MCOAbstractMessage { + + private var nativeInstance: CMessageBuilder; + + public init() { + self.nativeInstance = CMessageBuilder_init() + super.init(mailCoreObject: self.nativeInstance.toCObject()) + } + + required public init(mailCoreObject: CObject) { + self.nativeInstance = CMessageBuilder(cobject: mailCoreObject) + self.nativeInstance.retain() + super.init(mailCoreObject: mailCoreObject) + } + + deinit { + self.nativeInstance.release() + } + + override func cast() -> CObject { + return self.nativeInstance.toCObject() + } + + /** Main HTML content of the message.*/ + public var htmlBody: String? { + get { + return mailCoreAutoreleasePool { + nativeInstance.htmlBody.string() + } + } + set { + mailCoreAutoreleasePool { + nativeInstance.htmlBody = newValue?.mailCoreString() ?? MailCoreString() + } + } + } + + /** Plain text content of the message.*/ + public var textBody: String? { + get { + return mailCoreAutoreleasePool { + nativeInstance.textBody.string() + } + } + set { + mailCoreAutoreleasePool { + nativeInstance.textBody = newValue?.mailCoreString() ?? MailCoreString() + } + } + } + + /** List of file attachments.*/ + public var attachments: Array? { + get { + return mailCoreAutoreleasePool { + Array(mailCoreArray: nativeInstance.attachments); + } + } + set { + mailCoreAutoreleasePool { + nativeInstance.attachments = newValue?.mailCoreArray() ?? CArray() + } + } + } + + /** List of related file attachments (included as cid: link in the HTML part).*/ + public var relatedAttachments: Array? { + get { + return mailCoreAutoreleasePool { + Array(mailCoreArray: nativeInstance.relatedAttachments) + } + } + set { + mailCoreAutoreleasePool { + nativeInstance.relatedAttachments = newValue?.mailCoreArray() ?? CArray() + } + } + } + + /** Prefix for the boundary identifier. Default value is nil.*/ + public var boundaryPrefix: String? { + get { + return mailCoreAutoreleasePool { + nativeInstance.boundaryPrefix.string() + } + } + set { + mailCoreAutoreleasePool { + nativeInstance.boundaryPrefix = newValue?.mailCoreString() ?? MailCoreString() + } + } + } + + /** Add an attachment.*/ + public func addAttachment(attachment: MCOAttachment) { + mailCoreAutoreleasePool { + nativeInstance.addAttachment(attachment.nativeInstance); + } + } + + /** Add a related attachment.*/ + public func addRelatedAttachment(attachment: MCOAttachment) { + mailCoreAutoreleasePool { + nativeInstance.addRelatedAttachment(attachment.nativeInstance); + } + } + + /** RFC 822 formatted message.*/ + public func data() -> Data? { + return mailCoreAutoreleasePool { + return Data(cdata: nativeInstance.data()); + } + } + + /** RFC 822 formatted message for encryption.*/ + public func dataForEncryption() -> Data? { + return mailCoreAutoreleasePool { + return Data(cdata: nativeInstance.dataForEncryption()); + } + } + + /** Store RFC 822 formatted message to file. */ + public func writeToFile(filename: String, useXAttachmentId: Bool = false) throws -> Bool { + return try mailCoreAutoreleasePool { + let code = nativeInstance.writeToFile(filename.mailCoreString(), useXAttachmentId) + if code != ErrorNone { + throw MailCoreError.error(code: code); + } + return true + } + } + + /** + Returns an OpenPGP signed message with a given signature. + The signature needs to be computed on the data returned by -dataForEncryption + before calling this method. + You could use http://www.netpgp.com to generate it. + */ + public func openPGPSignedMessageDataWithSignatureData(signature: Data) -> Data? { + return mailCoreAutoreleasePool { + return Data(cdata: nativeInstance.openPGPSignedMessageDataWithSignatureData(signature.mailCoreData())) + } + } + + /** + Returns an OpenPGP encrypted message with a given encrypted data. + The encrypted data needs to be computed before calling this method. + You could use http://www.netpgp.com to generate it. + */ + public func openPGPEncryptedMessageDataWithEncryptedData(encryptedData: Data) -> Data? { + return mailCoreAutoreleasePool { + return Data(cdata: nativeInstance.openPGPEncryptedMessageDataWithEncryptedData(encryptedData.mailCoreData())) + } + } + + /** HTML rendering of the message to be displayed in a web view. The delegate can be nil.*/ + //- (NSString *) htmlRenderingWithDelegate:(id )delegate; + + /** HTML rendering of the body of the message to be displayed in a web view.*/ + public func htmlBodyRendering() -> String? { + return mailCoreAutoreleasePool { + return nativeInstance.htmlBodyRendering().string() + } + } + + /** Text rendering of the message.*/ + public func plainTextRendering() -> String? { + return mailCoreAutoreleasePool { + return nativeInstance.plainTextRendering().string() + } + } + + /** Text rendering of the body of the message. All end of line will be removed and white spaces cleaned up. + This method can be used to generate the summary of the message.*/ + public func plainTextBodyRendering() -> String? { + return mailCoreAutoreleasePool { + return nativeInstance.plainTextBodyRenderingAndStripWhitespace(true).string() + } + } + + /** Text rendering of the body of the message. All end of line will be removed and white spaces cleaned up if requested. + This method can be used to generate the summary of the message.*/ + public func plainTextBodyRenderingAndStripWhitespace(stripWhitespace: Bool) -> String? { + return mailCoreAutoreleasePool { + return nativeInstance.plainTextBodyRenderingAndStripWhitespace(stripWhitespace).string() + } + } + + /** Method for testing purpose **/ + internal func setBoundaries(_ boundaries: [String]) { + mailCoreAutoreleasePool { + nativeInstance.setBoundaries(boundaries.mailCoreArray()) + } + } + +} diff --git a/src/swift/rfc822/MessageParser.swift b/src/swift/rfc822/MessageParser.swift new file mode 100644 index 000000000..8e1b8ea13 --- /dev/null +++ b/src/swift/rfc822/MessageParser.swift @@ -0,0 +1,103 @@ +import Foundation +import CMailCore + +/** + This class implements a parsed message. + When the full content of a message has been fetched using POP or IMAP, + you need to parse it. + */ +public class MCOMessageParser : MCOAbstractMessage { + + internal var nativeInstance: CMessageParser; + + /** data is the RFC 822 formatted message.*/ + public init (data: Data) { + let autoreleasePool = CAutoreleasePool_init() + defer { + autoreleasePool.release() + } + self.nativeInstance = CMessageParser(data.mailCoreData()) + super.init(mailCoreObject: self.nativeInstance.toCObject()); + } + + public required init(mailCoreObject: CObject) { + self.nativeInstance = CMessageParser.init(cobject: mailCoreObject) + self.nativeInstance.retain() + super.init(mailCoreObject: mailCoreObject); + } + + deinit { + self.nativeInstance.release() + } + + override func cast() -> CObject { + return self.nativeInstance.toCObject() + } + + /** returns a parsed message from the given RFC 822 data.*/ + static public func messageParserWithData(data: Data) -> MCOMessageParser { + return mailCoreAutoreleasePool { + return MCOMessageParser(data: data) + } + } + + /** It's the main part of the message. It can be MCOMessagePart, MCOMultipart or MCOAttachment.*/ + public func mainPart() -> MCOAbstractPart? { + return mailCoreAutoreleasePool { + return createMCOObject(from: nativeInstance.mainPart().toCObject()) + } + } + + /** data of the RFC 822 formatted message. It's the input of the parser.*/ + public func data() -> Data? { + return mailCoreAutoreleasePool { + return Data(cdata: nativeInstance.data()) + } + } + + /** HTML rendering of the message to be displayed in a web view. delegate can be nil.*/ + public func htmlRendering(withDelegate delegate: MCOHTMLRendererDelegate?) -> String? { + return mailCoreAutoreleasePool { + let htmlRenderCallback = MCOAbstractMessageRendererCallback(message: self) + htmlRenderCallback.setHtmlRenderDelegate(delegate: delegate) + let result = self.nativeInstance.htmlRendering(htmlRenderCallback.cast()).string() + return result + } + } + + /** HTML rendering of the body of the message to be displayed in a web view.*/ + public func htmlBodyRendering() -> String? { + return mailCoreAutoreleasePool { + return nativeInstance.htmlBodyRendering().string() + } + } + + /** Text rendering of the message.*/ + public func plainTextRendering() -> String? { + return mailCoreAutoreleasePool { + return nativeInstance.plainTextRendering().string() + } + } + + /** Text rendering of the body of the message. All end of line will be removed and white spaces cleaned up. + This method can be used to generate the summary of the message.*/ + public func plainTextBodyRendering() -> String? { + return mailCoreAutoreleasePool { + return nativeInstance.plainTextBodyRenderingAndStripWhitespace(true).string() + } + } + + /** Text rendering of the body of the message. All end of line will be removed and white spaces cleaned up if requested. + This method can be used to generate the summary of the message.*/ + public func plainTextBodyRenderingAndStripWhitespace(stripWhitespace: Bool) -> String? { + return mailCoreAutoreleasePool { + return nativeInstance.plainTextBodyRenderingAndStripWhitespace(stripWhitespace).string() + } + } + + public func saveToFile(fileName: String) { + mailCoreAutoreleasePool { + self.nativeInstance.saveToFile(fileName.mailCoreString()) + } + } +} diff --git a/src/swift/rfc822/MessagePart.swift b/src/swift/rfc822/MessagePart.swift new file mode 100644 index 000000000..e4964d4ac --- /dev/null +++ b/src/swift/rfc822/MessagePart.swift @@ -0,0 +1,44 @@ +// +// MCOMessagePart.swift +// mailcore2 +// +// Created by Andrew on 7/26/17. +// Copyright © 2017 MailCore. All rights reserved. +// + +import Foundation +import CMailCore + +public class MCOMessagePart : MCOAbstractMessagePart { + + private var nativeInstance:CMessagePart; + + public required init(mailCoreObject: CObject) { + self.nativeInstance = CMessagePart.init(cobject: mailCoreObject) + self.nativeInstance.retain() + super.init(mailCoreObject: mailCoreObject) + } + + deinit { + self.nativeInstance.release() + } + + override func cast() -> CObject { + return self.nativeInstance.toCObject() + } + + /** A part identifier is of the form 1.2.1*/ + public var partID: String? { + get { + return mailCoreAutoreleasePool { + nativeInstance.partID.string() + } + } + set { + mailCoreAutoreleasePool { + nativeInstance.partID = newValue?.mailCoreString() ?? MailCoreString() + } + } + } + +} diff --git a/src/swift/rfc822/Multipart.swift b/src/swift/rfc822/Multipart.swift new file mode 100644 index 000000000..2c1677764 --- /dev/null +++ b/src/swift/rfc822/Multipart.swift @@ -0,0 +1,44 @@ +// +// Multipart.swift +// mailcore2 +// +// Created by Andrew on 8/15/17. +// Copyright © 2017 MailCore. All rights reserved. +// + +import Foundation +import CMailCore + +public class MCOMultipart : MCOAbstractMultipart { + + private var nativeInstance: CMultipart + + public required init(mailCoreObject: CObject) { + self.nativeInstance = CMultipart(cobject: mailCoreObject) + self.nativeInstance.retain() + super.init(mailCoreObject: mailCoreObject) + } + + deinit { + self.nativeInstance.release() + } + + override func cast() -> CObject { + return self.nativeInstance.toCObject() + } + + /** A part identifier is of the form 1.2.1*/ + public var partID: String? { + get { + return mailCoreAutoreleasePool { + nativeInstance.partID.string() + } + } + set { + mailCoreAutoreleasePool { + nativeInstance.partID = newValue?.mailCoreString() ?? MailCoreString() + } + } + } + +} diff --git a/src/swift/smtp/SMTPOperation.swift b/src/swift/smtp/SMTPOperation.swift new file mode 100644 index 000000000..3af0d6447 --- /dev/null +++ b/src/swift/smtp/SMTPOperation.swift @@ -0,0 +1,63 @@ +import Foundation +import CMailCore + +public class MCOSMTPOperation: MCOOperation { + + public typealias CompletionBlock = (Error?) -> Void + + internal var operation: CSMTPOperation + public var session: MCOSMTPSession? + private var completionBlock: CompletionBlock? + + internal init(operation: CSMTPOperation) { + self.operation = operation + self.operation.retain() + super.init(operation.cOperation) + } + + deinit { + self.operation.release() + } + + public func start(completionBlock: CompletionBlock?) { + self.completionBlock = completionBlock + start() + } + + public override func cancel() { + completionBlock?(MailCoreError.error(code: ErrorCanceled)) + self.completionBlock = nil + super.cancel() + } + + override public func operationCompleted() { + guard let completionBlock = self.completionBlock else { + return + } + + mailCoreAutoreleasePool { + let errorCode = operation.error + if errorCode == ErrorNone { + completionBlock(nil) + } + else { + var error = MailCoreError.error(code: errorCode) + if operation.lastSMTPResponse.instance != nil || operation.lastSMTPResponseCode != 0 { + var userInfo = [String: Any]() + if let response = operation.lastSMTPResponse.string() { + userInfo["MCOSMTPResponseKey"] = response + } + if operation.lastSMTPResponseCode != 0 { + userInfo["MCOSMTPResponseCodeKey"] = operation.lastSMTPResponseCode + } + error = MailCoreError.error(code: errorCode, userInfo: userInfo) + } + completionBlock(error) + } + } + self.completionBlock = nil + } + + + +} diff --git a/src/swift/smtp/SMTPSendOperation.swift b/src/swift/smtp/SMTPSendOperation.swift new file mode 100644 index 000000000..d546e6a89 --- /dev/null +++ b/src/swift/smtp/SMTPSendOperation.swift @@ -0,0 +1,22 @@ +import Foundation +import CMailCore + +public class MCOSMTPSendOperation : MCOSMTPOperation { + + public typealias MCOOperationProgressBlock = (UInt32, UInt32) -> Void + + override init(operation: CSMTPOperation) { + super.init(operation: operation) + self.operation = self.operation.setProgressBlocks(operationProgressCallback, Unmanaged.passUnretained(self).toOpaque()) + } + + public var progressBlock: MCOOperationProgressBlock? +} + +//MARK: C-Function +func operationProgressCallback(_ ref: UnsafeRawPointer?, _ current: UInt32, _ max: UInt32) { + let selfRef = Unmanaged.fromOpaque(ref!).takeUnretainedValue() + if selfRef.progressBlock != nil { + selfRef.progressBlock!(current, max) + } +} diff --git a/src/swift/smtp/SMTPSession.swift b/src/swift/smtp/SMTPSession.swift new file mode 100644 index 000000000..d12f7ba52 --- /dev/null +++ b/src/swift/smtp/SMTPSession.swift @@ -0,0 +1,300 @@ +import Foundation +import Dispatch +import CMailCore + +public class MCOSMTPSession: NSObjectCompat { + + var session:CSMTPSession; + + public override init() { + self.session = CSMTPSession_new(MCOConnectionLoggerLog, MCOConnectionLoggerRelease); + super.init() + } + + deinit { + self.session.release() + } + + /** This is the hostname of the SMTP server to connect to. */ + public var hostname : String? { + get { + return mailCoreAutoreleasePool { + self.session.hostname.string() + } + } + set { + mailCoreAutoreleasePool { + self.session.hostname = newValue?.mailCoreString() ?? MailCoreString() + } + } + } + + /** This is the port of the SMTP server to connect to. */ + public var port : UInt32 { + get { return self.session.port } + set { self.session.port = newValue } + } + + /** This is the username of the account. */ + public var username : String? { + get { + return mailCoreAutoreleasePool { + self.session.username.string() + } + } + set { + mailCoreAutoreleasePool { + self.session.username = newValue?.mailCoreString() ?? MailCoreString() + } + } + } + + /** This is the password of the account. */ + public var password : String? { + get { + return mailCoreAutoreleasePool { + self.session.password.string() + } + } + set { + mailCoreAutoreleasePool { + self.session.password = newValue?.mailCoreString() ?? MailCoreString() + } + } + } + + /** This is the OAuth2 token. */ + public var OAuth2Token : String? { + get { + return mailCoreAutoreleasePool { + self.session.OAuth2Token.string() + } + } + set { + mailCoreAutoreleasePool { + self.session.OAuth2Token = newValue?.mailCoreString() ?? MailCoreString() + } + } + } + + /** + This is the authentication type to use to connect. + `MCOAuthTypeSASLNone` means that it uses the clear-text is used (and is the default). + @warning *Important*: Over an encrypted connection like TLS, the password will still be secure + */ + public var authType : MCOAuthType { + get { return MCOAuthType(cAuthType: self.session.authType) } + set { self.session.authType = newValue.toCAuthType() } + } + + /** + This is the encryption type to use. + See MCOConnectionType for more information. + */ + public var connectionType : ConnectionType { + get { return self.session.connectionType } + set { self.session.connectionType = newValue } + } + + /** This is the timeout of the connection. */ + public var timeout : TimeInterval { + get { return Double(self.session.timeout) } + set { self.session.timeout = time_t(newValue) } + } + + /** When set to YES, the connection will fail if the certificate is incorrect. */ + public var isCheckCertificateEnabled : Bool { + get { return self.session.isCheckCertificateEnabled } + set { self.session.isCheckCertificateEnabled = newValue } + } + + /** + If set to YES, when sending the EHLO or HELO command, use IP address instead of hostname. + Default is NO. + */ + public var isUseHeloIPEnabled : Bool { + get { return self.session.useHeloIPEnabled } + set { self.session.useHeloIPEnabled = newValue } + } + + /** + Sets logger callback. The network traffic will be sent to this block. + + [session setConnectionLogger:^(void * connectionID, MCOConnectionLogType type, NSData * data) { + ... + }]; + */ + public func setConnectionLogger(_ newValue: MCOConnectionLogger?) { + if let newValue = newValue { + self.session.setConnectionLogger(newValue.getRetainedPointer()) + } + else { + self.session.setConnectionLogger(nil) + } + } + + /** This property provides some hints to MCOSMTPSession about where it's called from. + It will make MCOSMTPSession safe. It will also set all the callbacks of operations to run on this given queue. + Defaults to the main queue. + This property should be used only if there's performance issue using MCOSMTPSession in the main thread. */ + /** The queue this operation dispatches the callback on. Defaults to the main queue. + This property should be used only if there's performance issue creating or calling the callback + in the main thread. */ + public var dispatchQueue: DispatchQueue? { + get { + return DispatchQueue.queueFromWrapped(self.session.dispatchQueue()) + } + set { + self.session.setDispatchQueue(newValue?.wrapped) + } + } + + + /** + The value will be YES when asynchronous operations are running, else it will return NO. + */ + public var isOperationQueueRunning : Bool { + get { + return mailCoreAutoreleasePool { + return self.session.isOperationQueueRunning + } + } + } + + /** + Sets operation running callback. It will be called when operations start or stop running. + + [session setOperationQueueRunningChangeBlock:^{ + if ([session isOperationQueueRunning]) { + ... + } + else { + ... + } + }]; + */ + public var operationQueueRunningChangeBlock : OperationQueueRunningChangeBlock { + get { return self.session.operationQueueRunningChangeBlock; } + set { self.session.operationQueueRunningChangeBlock = newValue } + } + + /** + Cancel all operations + */ + //- (void) cancelAllOperations; + public func cancelAllOperations() { + mailCoreAutoreleasePool { + self.session.cancelAllOperations(); + } + } + + /** @name MCOOperations */ + + /** + Returns an operation that will perform a login. + + MCOSMTPOperation * op = [session loginOperation]; + [op start:^(NSError * __nullable error) { + ... + }]; + */ + public func loginOperation() -> MCOSMTPOperation{ + return mailCoreAutoreleasePool { + return MCOSMTPOperation(operation: self.session.loginOperation()); + } + } + + /** + Returns an operation that will send the given message through SMTP. + It will use the recipient set in the message data (To, Cc and Bcc). + It will also filter out Bcc from the content of the message. + + Generate RFC 822 data using MCOMessageBuilder + + MCOSMTPOperation * op = [session sendOperationWithData:rfc822Data]; + [op start:^(NSError * __nullable error) { + ... + }]; + */ + public func sendOperationWithData(messageData: Data) -> MCOSMTPSendOperation{ + return mailCoreAutoreleasePool { + return MCOSMTPSendOperation(operation: self.session.sendMessageOperation(messageData.mailCoreData())) + } + } + + /** + Returns an operation that will send the given message through SMTP. + It will use the sender and recipient set from the parameters. + It will also filter out Bcc from the content of the message. + + Generate RFC 822 data using MCOMessageBuilder + + MCOSMTPOperation * op = [session sendOperationWithData:rfc822Data + from:[MCOAddress addressWithMailbox:@"hoa@etpan.org"] + recipients:[NSArray arrayWithObject:[MCOAddress addressWithMailbox:@"laura@etpan.org"]]]; + [op start:^(NSError * __nullable error) { + ... + }]; + */ + public func sendOperationWithData(messageData: Data, from: MCOAddress, recipients: Array) -> MCOSMTPSendOperation { + return mailCoreAutoreleasePool { + return MCOSMTPSendOperation(operation: self.session.sendOperationWithDataAndFromAndRecipients(messageData.mailCoreData(), from.nativeInstance, recipients.mailCoreArray())); + } + } + + + /** + Returns an operation that will send the message from the given file through SMTP. + It will use the sender and recipient set from the parameters. + It will also filter out Bcc from the content of the message. + + MCOSMTPOperation * op = [session sendOperationWithContentsOfFile:rfc822DataFilename + from:[MCOAddress addressWithMailbox:@"hoa@etpan.org"] + recipients:[NSArray arrayWithObject: + [MCOAddress addressWithMailbox:@"laura@etpan.org"]]]; + [op start:^(NSError * __nullable error) { + ... + }]; + */ + public func sendOperationWithContentsOfFile(path: String, from: MCOAddress, recipients: Array) -> MCOSMTPSendOperation { + return mailCoreAutoreleasePool { + return MCOSMTPSendOperation(operation: self.session.sendOperationWithContentsOfFile(path.mailCoreString(), from.nativeInstance, recipients.mailCoreArray())) + } + } + + + /** + Returns an operation that will check whether the SMTP account is valid. + + MCOSMTPOperation * op = [session checkAccountOperationWithFrom:[MCOAddress addressWithMailbox:@"hoa@etpan.org"]]; + [op start:^(NSError * __nullable error) { + ... + }]; + */ + public func checkAccountOperation(from: MCOAddress) -> MCOSMTPOperation { + return mailCoreAutoreleasePool { + return MCOSMTPOperation(operation: self.session.checkAccountOperation(from.nativeInstance)); + } + } + + public func checkAccountOperation(from: MCOAddress, to: MCOAddress) -> MCOSMTPOperation { + return mailCoreAutoreleasePool { + return MCOSMTPOperation(operation: self.session.checkAccountOperationWithFromAndTo(from.nativeInstance, to.nativeInstance)); + } + } + + /** + Returns an operation that will perform a No-Op. + + MCOSMTPOperation * op = [session noopOperation]; + [op start:^(NSError * __nullable error) { + ... + }]; + */ + public func noopOperation(from: MCOAddress) -> MCOSMTPOperation { + return mailCoreAutoreleasePool { + return MCOSMTPOperation(operation: self.session.noopOperation()); + } + } + +} diff --git a/src/swift/utils/AndroidShim.swift b/src/swift/utils/AndroidShim.swift new file mode 100644 index 000000000..3b0432a04 --- /dev/null +++ b/src/swift/utils/AndroidShim.swift @@ -0,0 +1,8 @@ +import Foundation +import Dispatch +import CMailCore + +//TODO: move C/C++ mailcore to CMailCore module on Apple +public typealias Encoding = CMailCore.Encoding +public typealias ConnectionType = CMailCore.ConnectionType +public typealias PartType = CMailCore.PartType diff --git a/src/swift/utils/CEnumInt.swift b/src/swift/utils/CEnumInt.swift new file mode 100644 index 000000000..25565280c --- /dev/null +++ b/src/swift/utils/CEnumInt.swift @@ -0,0 +1,13 @@ +// +// CEnumInt.swift +// SmartMailMessageParser +// +// Created by Alexander Smarus on 03/06/19. +// Copyright © 2019 Readdle. All rights reserved. +// + +#if os(Windows) +public typealias CEnumInt = Int32 +#else +public typealias CEnumInt = UInt32 +#endif diff --git a/src/swift/utils/ConnectionLoggerHelper.swift b/src/swift/utils/ConnectionLoggerHelper.swift new file mode 100644 index 000000000..504477e41 --- /dev/null +++ b/src/swift/utils/ConnectionLoggerHelper.swift @@ -0,0 +1,42 @@ +// +// SwiftConnectionLogger.swift +// mailcore2 +// +// Created by Andrew on 7/31/17. +// Copyright © 2017 MailCore. All rights reserved. +// + +import Foundation +import CMailCore + +public typealias ConnectionLogger = (_:UnsafeMutableRawPointer?, _:ConnectionLogType, _:Data?) -> Void + +public class MCOConnectionLogger: NSObject { + + fileprivate var logger: ConnectionLogger + + public init(_ logger: @escaping ConnectionLogger) { + self.logger = logger + } + + func getRetainedPointer() -> UnsafeMutableRawPointer { + // Make unbalanced retain + return Unmanaged.passRetained(self).toOpaque() + } + +} + +public func MCOConnectionLoggerLog(_ sender: UnsafeMutableRawPointer?, _ logType:ConnectionLogType, _ data: CData, _ userInfo: UnsafeMutableRawPointer?) { + if let userInfo = userInfo { + let selfSelf = Unmanaged.fromOpaque(userInfo).takeUnretainedValue() + selfSelf.logger(sender, logType, Data(cdata: data)) + } +} + +public func MCOConnectionLoggerRelease(_ userInfo: UnsafeMutableRawPointer?) { + if let userInfo = userInfo { + // Make unbalanced release + Unmanaged.fromOpaque(userInfo).release() + } +} + diff --git a/src/swift/utils/DispatchQueue+Mailcore.swift b/src/swift/utils/DispatchQueue+Mailcore.swift new file mode 100644 index 000000000..2dde8dd84 --- /dev/null +++ b/src/swift/utils/DispatchQueue+Mailcore.swift @@ -0,0 +1,47 @@ +// +// DispatchQueue+Readdle.swift +// mailcore2 +// +// Created by Andrew on 9/12/17. +// Copyright © 2017 MailCore. All rights reserved. +// + +import Foundation +import Dispatch + +#if os(Android) || os(Windows) + import CDispatch + + typealias CDispatchQueue = dispatch_queue_t + + fileprivate class _DispatchQueue { + let __wrapped: CDispatchQueue + + init(queue: CDispatchQueue) { + __wrapped = queue + } + } +#else + typealias CDispatchQueue = DispatchQueue // dispatch_queue_t is unavailable in Swift iOS/macOS +#endif + +extension DispatchQueue { + + class func queueFromWrapped(_ cdispatch: CDispatchQueue) -> DispatchQueue { + #if os(Android) || os(Windows) + return unsafeBitCast(_DispatchQueue(queue: cdispatch), to: DispatchQueue.self) + #else + return cdispatch + #endif + } + + var wrapped: CDispatchQueue { + #if os(Android) || os(Windows) + return unsafeBitCast(self, to: _DispatchQueue.self).__wrapped + #else + return self + #endif + } + + +} diff --git a/src/swift/utils/LibetpanHelper.swift b/src/swift/utils/LibetpanHelper.swift new file mode 100644 index 000000000..b507cd865 --- /dev/null +++ b/src/swift/utils/LibetpanHelper.swift @@ -0,0 +1,47 @@ +// +// LibetpanHelper.swift +// mailcore2 +// +// Created by Andrew on 9/25/17. +// Copyright © 2017 MailCore. All rights reserved. +// + +import Foundation +import CMailCore + +public class LibetpanHelper { + + public class func date(fromRFC2822String string: String?) -> Date? { + guard let string = string else { + return nil + } + + return string.withCString({ cString in + let env_date = UnsafeMutablePointer.init(mutating: cString) + + // next code copied from MCOMessageHeader::importIMAPEnvelope(struct mailimap_envelope * env) + var date_time: UnsafeMutablePointer? + var cur_token: size_t = 0 + var r: Int = Int(mailimf_date_time_parse(env_date, Int(strlen(env_date)), &cur_token, &date_time)) + var timestamp: time_t + if r == MAILIMF_NO_ERROR { + timestamp = MailCoreTimestampFromDate(date_time) + mailimf_date_time_free(date_time) + } + else { + var imap_date: UnsafeMutablePointer? + r = Int(mailimap_hack_date_time_parse(env_date, &imap_date, 0, nil)) + if r == MAILIMAP_NO_ERROR { + timestamp = MailCoreTimestampFromIMAPDate(imap_date) + mailimap_date_time_free(imap_date) + } + else { + return nil + } + } + return Date(timeIntervalSince1970: Double(timestamp)) + }) + } + +} + diff --git a/src/swift/utils/MailCoreError.swift b/src/swift/utils/MailCoreError.swift new file mode 100644 index 000000000..0805eae2e --- /dev/null +++ b/src/swift/utils/MailCoreError.swift @@ -0,0 +1,73 @@ +import Foundation +import CMailCore + +public let MailCoreErrorDomain = "MailCoreErrorDomain" + +// Swift-only features: Global variables defined in Swift +// Class for using from Objective-C [MailCoreErrors domain] +public class MailCoreErrors: NSObjectCompat { + + public class func domain() -> String { + return MailCoreErrorDomain + } + +} + +// This enum is not Error because Enum with raw type cannot have cases with arguments (e.g. userInfo) +@objc public enum MailCoreError : IntEnum { + + case errorNone // 0 + case errorConnection + case errorTLSNotAvailable + case errorParse + case errorCertificate + case errorAuthentication + case errorGmailIMAPNotEnabled + case errorGmailExceededBandwidthLimit + case errorGmailTooManySimultaneousConnections + case errorMobileMeMoved + case errorYahooUnavailable // 10 + case errorNonExistantFolder + case errorRename + case errorDelete + case errorCreate + case errorSubscribe + case errorAppend + case errorCopy + case errorExpunge + case errorFetch + case errorIdle // 20 + case errorIdentity + case errorNamespace + case errorStore + case errorCapability + case errorStartTLSNotAvailable + case errorSendMessageIllegalAttachment + case errorStorageLimit + case errorSendMessageNotAllowed + case errorNeedsConnectToWebmail + case errorSendMessage // 30 + case errorAuthenticationRequired + case errorFetchMessageList + case errorDeleteMessage + case errorInvalidAccount + case errorFile + case errorCompression + case errorNoSender + case errorNoRecipient + case errorNoop + case errorGmailApplicationSpecificPasswordRequired // 40 + case errorServerDate + case errorNoValidServerFound + case errorCustomCommand + case errorYahooSendMessageSpamSuspected + case errorYahooSendMessageDailyLimitExceeded + case errorOutlookLoginViaWebBrowser + case errorTiscaliSimplePassword + case errorCanceled + + internal static func error(code: ErrorCode, userInfo: [String: Any]? = nil) -> NSError { + return NSError(domain: MailCoreErrorDomain, code: Int(code.rawValue), userInfo: userInfo) + } + +} diff --git a/src/swift/utils/NSObjectCompat.swift b/src/swift/utils/NSObjectCompat.swift new file mode 100644 index 000000000..45b95ab1c --- /dev/null +++ b/src/swift/utils/NSObjectCompat.swift @@ -0,0 +1,26 @@ +// +// MCONSObjectCompat.swift +// mailcore2 +// +// Created by Anton Pogonets on 17.10.17. +// Copyright © 2017 MailCore. All rights reserved. +// + +import Foundation +import CMailCore + +#if swift(>=4) && !os(Android) && !os(Windows) + @objc(mco_NSObjectCompat) + @objcMembers + public class NSObjectCompat: NSObject {} +#else + public class NSObjectCompat: NSObject {} +#endif + +public func mailCoreAutoreleasePool(invoking body: () throws -> Result) rethrows -> Result { + let autoreleasePool = CAutoreleasePool_init() + defer { + autoreleasePool.release() + } + return try body() +} diff --git a/src/swift/utils/Operation.swift b/src/swift/utils/Operation.swift new file mode 100644 index 000000000..3b23793d1 --- /dev/null +++ b/src/swift/utils/Operation.swift @@ -0,0 +1,154 @@ +import Foundation +import Dispatch +import CMailCore + +public class MCOOperation: NSObjectCompat { + + internal var nativeInstance: COperation! + + internal init(_ cOperation: COperation) { + super.init() + nativeInstance = cOperation + nativeInstance.retain() + nativeInstance = nativeInstance.setCompletionBlock(operationCompletedCallback, Unmanaged.passUnretained(self).toOpaque()) + } + + deinit { + nativeInstance = nativeInstance.clearCompletionBlock() + nativeInstance.release() + } + + /** The queue this operation dispatches the callback on. Defaults to the main queue. + This property should be used only if there's performance issue creating or calling the callback + in the main thread. */ + public var callbackDispatchQueue: DispatchQueue? { + get { + return DispatchQueue.queueFromWrapped(nativeInstance.callbackDispatchQueue()) + } + set { + nativeInstance.setCallbackDispatchQueue(newValue?.wrapped) + } + } + + /** Returns whether the operation is cancelled.*/ + public var isCancelled: Bool { + get { return nativeInstance.isCancelled(); } + } + + /** Returns whether the operation should run even if it's cancelled.*/ + public var shouldRunWhenCancelled: Bool { + get { return nativeInstance.shouldRunWhenCancelled; } + set { nativeInstance.shouldRunWhenCancelled = newValue; } + } + + /** This methods is called on the main thread when the asynchronous operation is finished. + Needs to be overriden by subclasses.*/ + public func operationCompleted() { + + } + + /** Cancel the operation.*/ + public func cancel() { + mailCoreAutoreleasePool { + // cancel first, because MCOperationQueue.cpp check isCancelled() before call completion + // which will call operationCompletedCallback, which causes to access to deallocated object + nativeInstance.cancel(); + } + _ = tryFinish(self) + } + + internal func start() { + mailCoreAutoreleasePool { + guard tryStart(self) else { + assert(false) + return + } + + nativeInstance.start(); + } + } + +#if os(Android) + public static func setMainQueue(_ mainQueue: DispatchQueue) { + CObject.setMainQueue(mainQueue.wrapped) + } +#endif +} + +// MARK: - C Functions + +public func operationCompletedCallback(ref: UnsafeRawPointer?) { + guard let ref = ref else { + assert(false) + return + } + + guard let operation = tryFinish(ref) else { + return + } + + operation.operationCompleted() +} + +// MARK: - Scheduled logic helpers + +private var scheduled = Set() +private let scheduledLock = NSLock() + +private func tryStart(_ op: MCOOperation) -> Bool { + let unmanaged = Unmanaged.passUnretained(op) + let pointer = unmanaged.toOpaque() + + scheduledLock.lock() + defer { + scheduledLock.unlock() + } + + if scheduled.contains(pointer) { + return false + } + + scheduled.insert(pointer) + _ = unmanaged.retain() + + return true +} + +private func tryFinish(_ op: MCOOperation) -> Bool { + let unmanaged = Unmanaged.passUnretained(op) + let pointer = unmanaged.toOpaque() + + scheduledLock.lock() + defer { + scheduledLock.unlock() + } + + guard scheduled.contains(pointer) else { + return false + } + + scheduled.remove(pointer) + unmanaged.release() + + return true +} + +private func tryFinish(_ pointer: UnsafeRawPointer) -> MCOOperation? { + scheduledLock.lock() + defer { + scheduledLock.unlock() + } + + guard scheduled.contains(pointer) else { + return nil + } + + let unmanaged = Unmanaged.fromOpaque(pointer) + + let operation = unmanaged.takeUnretainedValue() + + scheduled.remove(pointer) + unmanaged.release() + + return operation +} diff --git a/src/swift/utils/RSMLibetpanHelper.h b/src/swift/utils/RSMLibetpanHelper.h new file mode 100644 index 000000000..32507dc6d --- /dev/null +++ b/src/swift/utils/RSMLibetpanHelper.h @@ -0,0 +1,15 @@ +// +// RSMLibetpanHelper.h +// SmartMail +// +// Created by Viktor Gedzenko on 1/27/15. +// Copyright (c) 2015 Readdle. All rights reserved. +// + +#import + +@interface LibetpanHelper : NSObject + ++ (NSDate *)dateFromRFC2822String:(NSString *)string; + +@end diff --git a/src/swift/utils/RSMLibetpanHelper.mm b/src/swift/utils/RSMLibetpanHelper.mm new file mode 100644 index 000000000..8a0b82856 --- /dev/null +++ b/src/swift/utils/RSMLibetpanHelper.mm @@ -0,0 +1,54 @@ +// +// RSMLibetpanHelper.m +// SmartMail +// +// Created by Viktor Gedzenko on 1/27/15. +// Copyright (c) 2015 Readdle. All rights reserved. +// + +#import "RSMLibetpanHelper.h" +#include "MCLibetpan.h" +#include + +@implementation LibetpanHelper + +extern "C" { + extern int mailimap_hack_date_time_parse(char * str, + struct mailimap_date_time ** result, + size_t progr_rate, + progress_function * progr_fun); +} + ++ (NSDate *)dateFromRFC2822String:(NSString *)string { + if (string == nil) { + return nil; + } + + const char *env_date = [string UTF8String]; + + // next code copied from MCOMessageHeader::importIMAPEnvelope(struct mailimap_envelope * env) + struct mailimf_date_time * date_time; + size_t cur_token = 0; + int r = mailimf_date_time_parse(env_date, strlen(env_date), &cur_token, &date_time); + + time_t timestamp; + if (r == MAILIMF_NO_ERROR) { + timestamp = mailcore::timestampFromDate(date_time); + mailimf_date_time_free(date_time); + } + else { + struct mailimap_date_time * imap_date; + r = mailimap_hack_date_time_parse((char *)env_date, &imap_date, 0, NULL); + if (r == MAILIMAP_NO_ERROR) { + timestamp = mailcore::timestampFromIMAPDate(imap_date); + mailimap_date_time_free(imap_date); + } + else { + return nil; + } + } + + return [NSDate dateWithTimeIntervalSince1970:timestamp]; +} + +@end diff --git a/src/swift/utils/SwiftCompatibility.swift b/src/swift/utils/SwiftCompatibility.swift new file mode 100644 index 000000000..36a8e4859 --- /dev/null +++ b/src/swift/utils/SwiftCompatibility.swift @@ -0,0 +1,13 @@ +// +// Created by Alexander Smarus on 2019-07-22. +// + +import Foundation + +#if os(Windows) +// Windows compiler doesn't recognize Int in @objc enums +// error: '@objc' enum raw type 'Int' is not an integer type +public typealias IntEnum = Int32 +#else +public typealias IntEnum = Int +#endif diff --git a/tests/test-all.cpp b/tests/test-all.cpp index c970e2c87..12bdf5792 100644 --- a/tests/test-all.cpp +++ b/tests/test-all.cpp @@ -139,7 +139,7 @@ static void testMessageParser(mailcore::Data * data) static void testIMAP() { mailcore::IMAPSession * session; - mailcore::ErrorCode error; + mailcore::ErrorCode error = mailcore::ErrorNone; session = new mailcore::IMAPSession(); session->setHostname(MCSTR("imap.gmail.com")); @@ -163,7 +163,7 @@ static void testIMAPMove() { mailcore::IMAPSession * session; mailcore::HashMap *uidMapping; - mailcore::ErrorCode error; + mailcore::ErrorCode error = mailcore::ErrorNone; session = new mailcore::IMAPSession(); session->setHostname(MCSTR("imap.mail.ru")); @@ -184,7 +184,7 @@ static void testIMAPMove() static void testIMAPCapability() { mailcore::IMAPSession * session; - mailcore::ErrorCode error; + mailcore::ErrorCode error = mailcore::ErrorNone; session = new mailcore::IMAPSession(); session->setHostname(MCSTR("imap.mail.ru")); @@ -203,7 +203,7 @@ static void testIMAPCapability() static void testSMTP(mailcore::Data * data) { mailcore::SMTPSession * smtp; - mailcore::ErrorCode error; + mailcore::ErrorCode error = mailcore::ErrorNone; smtp = new mailcore::SMTPSession(); @@ -239,7 +239,7 @@ static void parseAddressesFromRfc822(mailcore::String * filename, mailcore::Arra static void testSendingMessageFromFileViaSMTP(mailcore::Data * data) { mailcore::SMTPSession * smtp; - mailcore::ErrorCode error; + mailcore::ErrorCode error = mailcore::ErrorNone; mailcore::String * filename = temporaryFilenameForTest(); data->writeToFile(filename); @@ -264,7 +264,7 @@ static void testSendingMessageFromFileViaSMTP(mailcore::Data * data) static void testPOP() { mailcore::POPSession * session; - mailcore::ErrorCode error; + mailcore::ErrorCode error = mailcore::ErrorNone; session = new mailcore::POPSession(); session->setHostname(MCSTR("pop.gmail.com")); @@ -282,7 +282,7 @@ static void testPOP() static void testNNTP() { mailcore::NNTPSession * session; - mailcore::ErrorCode error; + mailcore::ErrorCode error = mailcore::ErrorNone; session = new mailcore::NNTPSession(); session->setHostname(MCSTR("news.gmane.org.")); diff --git a/unittest/IMAPInterruptCurrentCommandTests.swift b/unittest/IMAPInterruptCurrentCommandTests.swift new file mode 100644 index 000000000..427fe09c2 --- /dev/null +++ b/unittest/IMAPInterruptCurrentCommandTests.swift @@ -0,0 +1,223 @@ +// +// IMAPInterruptCurrentCommandTests.swift +// mailcore2 +// +// Tests for IMAPOperation::interruptCurrentCommand(). +// + +// Darwin only: the tests need a POSIX listening socket, and the Android job builds the test target +// without running it. Nothing here is platform-specific beyond that socket. +#if canImport(Darwin) + +import Darwin +import Dispatch +import Foundation +import XCTest + +#if SWIFT_PACKAGE +import CMailCore +#endif + +@testable import MailCore + +/// A TCP endpoint that accepts connections and then says nothing at all. A client connected to it +/// sits in its first read until the socket timeout expires - exactly the state that +/// `interruptCurrentCommand()` has to break, and reproducible without an IMAP server. +private final class SilentTCPEndpoint { + + private let listeningSocket: Int32 + private let acceptQueue = DispatchQueue(label: "SilentTCPEndpoint.accept") + private let lock = NSLock() + private var acceptedSockets: [Int32] = [] + private var isClosed = false + + let port: UInt16 + + init() throws { + // Everything below works on a local descriptor: a closure that touched `listeningSocket` + // would capture self before `port` is initialized. + let fileDescriptor = socket(AF_INET, SOCK_STREAM, 0) + guard fileDescriptor >= 0 else { + throw NSError(domain: "SilentTCPEndpoint", code: Int(errno), userInfo: nil) + } + + var reuse: Int32 = 1 + setsockopt(fileDescriptor, SOL_SOCKET, SO_REUSEADDR, &reuse, socklen_t(MemoryLayout.size)) + + var address = sockaddr_in() + address.sin_family = sa_family_t(AF_INET) + address.sin_port = 0 // any free port + address.sin_addr = in_addr(s_addr: inet_addr("127.0.0.1")) + + let bound = withUnsafePointer(to: &address) { pointer -> Int32 in + return pointer.withMemoryRebound(to: sockaddr.self, capacity: 1) { sockaddrPointer in + return bind(fileDescriptor, sockaddrPointer, socklen_t(MemoryLayout.size)) + } + } + + guard bound == 0, listen(fileDescriptor, 8) == 0 else { + close(fileDescriptor) + throw NSError(domain: "SilentTCPEndpoint", code: Int(errno), userInfo: nil) + } + + var boundAddress = sockaddr_in() + var length = socklen_t(MemoryLayout.size) + let named = withUnsafeMutablePointer(to: &boundAddress) { pointer -> Int32 in + return pointer.withMemoryRebound(to: sockaddr.self, capacity: 1) { sockaddrPointer in + return getsockname(fileDescriptor, sockaddrPointer, &length) + } + } + + guard named == 0 else { + close(fileDescriptor) + throw NSError(domain: "SilentTCPEndpoint", code: Int(errno), userInfo: nil) + } + + listeningSocket = fileDescriptor + port = UInt16(bigEndian: boundAddress.sin_port) + + acceptQueue.async { [weak self] in + self?.acceptConnections() + } + } + + private func acceptConnections() { + while true { + let accepted = accept(listeningSocket, nil, nil) + guard accepted >= 0 else { + return // the listening socket was closed + } + + // Held open and silent on purpose. + lock.lock() + let closed = isClosed + if closed { + lock.unlock() + Darwin.close(accepted) + return + } + acceptedSockets.append(accepted) + lock.unlock() + } + } + + func stop() { + lock.lock() + guard !isClosed else { + lock.unlock() + return + } + isClosed = true + let sockets = acceptedSockets + acceptedSockets = [] + lock.unlock() + + Darwin.close(listeningSocket) + for accepted in sockets { + Darwin.close(accepted) + } + } +} + +final class IMAPInterruptCurrentCommandTests: XCTestCase { + + /// Well above every wait below: a command left to its own devices must not be able to finish on + /// its own and pass a test that is about being interrupted. + private let sessionTimeout: TimeInterval = 60 + + private func makeSession(port: UInt16) -> MCOIMAPSession { + let session = MCOIMAPSession() + session.hostname = "127.0.0.1" + session.port = UInt32(port) + session.connectionType = ConnectionTypeClear + session.username = "user" + session.password = "password" + session.timeout = sessionTimeout + session.maximumConnections = 1 + return session + } + + /// Runs the test body off the main thread while the main thread keeps spinning its run loop. + /// mailcore hands parts of an operation's lifecycle to the main queue and waits for them, so a + /// test that blocks the main thread never gets its operation started in the first place. + private func runOffMainThread(timeout: TimeInterval, _ body: @escaping () -> Void) { + let finished = expectation(description: "test body") + + DispatchQueue.global(qos: .userInitiated).async { + body() + finished.fulfill() + } + + waitForExpectations(timeout: timeout) + } + + private func start(_ operation: MCOIMAPOperation) -> DispatchSemaphore { + let finished = DispatchSemaphore(value: 0) + operation.start { _ in + finished.signal() + } + return finished + } + + func testInterruptEndsTheWaitOfTheRunningCommand() throws { + let endpoint = try SilentTCPEndpoint() + defer { endpoint.stop() } + + let session = makeSession(port: endpoint.port) + + runOffMainThread(timeout: 30) { + let operation = session.connectOperation() + let finished = self.start(operation) + + // The endpoint accepts the connection and stays silent, so the command is stuck reading + // the greeting. + XCTAssertEqual(finished.wait(timeout: .now() + 2), .timedOut, + "The command was expected to be blocked on the socket") + + XCTAssertTrue(operation.interruptCurrentCommand(), + "The running operation was expected to report that it interrupted a command") + + // Left alone this would return only when the 60s socket timeout expires. + XCTAssertEqual(finished.wait(timeout: .now() + 10), .success, + "interruptCurrentCommand() did not unblock the running command") + } + } + + func testInterruptDoesNothingForAnOperationThatIsNotRunning() throws { + let endpoint = try SilentTCPEndpoint() + defer { endpoint.stop() } + + let session = makeSession(port: endpoint.port) + + runOffMainThread(timeout: 60) { + // One connection, so the second operation waits in the queue while the first one blocks. + let running = session.connectOperation() + let runningFinished = self.start(running) + + XCTAssertEqual(runningFinished.wait(timeout: .now() + 2), .timedOut, + "The first command was expected to be blocked on the socket") + + let queued = session.noopOperation() + let queuedFinished = self.start(queued) + + // The queued operation owns no connection, so interrupting on its behalf must not touch + // the stream the running one is blocked on. + XCTAssertFalse(queued.interruptCurrentCommand(), + "A queued operation has no command of its own to interrupt") + + XCTAssertEqual(runningFinished.wait(timeout: .now() + 3), .timedOut, + "A queued operation must not interrupt the command of the running one") + + // ... while the running operation can still be interrupted itself. + XCTAssertTrue(running.interruptCurrentCommand(), + "The running operation was expected to report that it interrupted a command") + + XCTAssertEqual(runningFinished.wait(timeout: .now() + 10), .success, + "interruptCurrentCommand() did not unblock the running command") + XCTAssertEqual(queuedFinished.wait(timeout: .now() + 10), .success, + "The queued operation was expected to finish once the connection was freed") + } + } +} + +#endif diff --git a/unittest/LibetpanHelperTests.swift b/unittest/LibetpanHelperTests.swift new file mode 100644 index 000000000..639acd79e --- /dev/null +++ b/unittest/LibetpanHelperTests.swift @@ -0,0 +1,25 @@ +// +// RSMLibetpanHelperTests.swift +// MailCoreTests +// +// Created by Andrew on 9/25/17. +// Copyright © 2017 MailCore. All rights reserved. +// + +import Foundation +import XCTest + +import MailCore + +public class LibetpanHelperTests: XCTestCase { + + override public func setUp() { + NSTimeZone.default = TimeZone(identifier: "Europe/Kiev")! + } + + func testDates() { + XCTAssertNil(LibetpanHelper.date(fromRFC2822String: "Wed, 22 April 2015 05:10:18")) + XCTAssertEqual(LibetpanHelper.date(fromRFC2822String: "Tue, 14 Apr 2015 16:40:45 +0300")?.timeIntervalSinceReferenceDate, 450711645) + XCTAssertEqual(LibetpanHelper.date(fromRFC2822String: "Wed, 22 Apr 2015 13:47:36 +0000")?.timeIntervalSinceReferenceDate, 451403256) + } +} diff --git a/unittest/data/parser/output/mbox/jwz/103 b/unittest/data/parser/output/mbox/jwz/103 index dedad034b..37053fd6d 100644 --- a/unittest/data/parser/output/mbox/jwz/103 +++ b/unittest/data/parser/output/mbox/jwz/103 @@ -1 +1 @@ -{"header":{"cc":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"S\/MIME Test Account","mailbox":"smime@strataware.com"},{"class":"mailcore::Address","displayName":"Eric Rosenquist","mailbox":"rosenqui@strataware.com"}]},"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Lisa Repka","mailbox":"repka@netscape.com"},{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"}]},"from":{"class":"mailcore::Address","displayName":"Eric Rosenquist","mailbox":"rosenqui@strataware.com"},"extraHeaders":{"Return-Path":"","Content-Type":"multipart\/mixed; boundary=\"-ABC\"","X-Mozilla-Status":"0005","Received":"from maleman.mcom.com ([198.93.92.3]) by dredd.mcom.com\u000a (Netscape Mail Server v2.01) with SMTP id AAA16354;\u000a Fri, 8 Nov 1996 11:45:02 -0700","Mime-Version":"1.0","Content-Length":"3409"},"date":"847482318","messageID":"199611081945.OAA29470@krusty.strataware.com","receivedDate":"847482318","subject":"My encryption certificate for S\/MIME testing","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"us-ascii","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"1","mimeType":"application\/x-pkcs7-mime","inlineAttachment":"1","class":"mailcore::Attachment","filename":"eric.p7c"}]}}} \ No newline at end of file +{"header":{"cc":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"S\/MIME Test Account","mailbox":"smime@strataware.com"},{"class":"mailcore::Address","displayName":"Eric Rosenquist","mailbox":"rosenqui@strataware.com"}]},"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Lisa Repka","mailbox":"repka@netscape.com"},{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"}]},"from":{"class":"mailcore::Address","displayName":"Eric Rosenquist","mailbox":"rosenqui@strataware.com"},"extraHeaders":{"Return-Path":"","Content-Type":"multipart\/mixed; boundary=\"-ABC\"","X-Mozilla-Status":"0005","Received":"from maleman.mcom.com ([198.93.92.3]) by dredd.mcom.com\u000a (Netscape Mail Server v2.01) with SMTP id AAA16354;\u000a Fri, 8 Nov 1996 11:45:02 -0700","Mime-Version":"1.0","Content-Length":"3409"},"date":"847482318","messageID":"199611081945.OAA29470@krusty.strataware.com","receivedDate":"847482318","subject":"My encryption certificate for S\/MIME testing","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"1","mimeType":"application\/x-pkcs7-mime","inlineAttachment":"1","class":"mailcore::Attachment","filename":"eric.p7c"}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/104 b/unittest/data/parser/output/mbox/jwz/104 index 4fb431c49..9bbd1d688 100644 --- a/unittest/data/parser/output/mbox/jwz/104 +++ b/unittest/data/parser/output/mbox/jwz/104 @@ -1 +1 @@ -{"header":{"cc":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Eric Rosenquist","mailbox":"rosenqui@strataware.com"},{"class":"mailcore::Address","displayName":"Michel Ranger","mailbox":"rangerm@entrust.com"},{"class":"mailcore::Address","displayName":"Ron Vandergeest","mailbox":"rvander@entrust.com"}]},"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"S\/MIME Developers","mailbox":"smime-dev@RSA.COM"}]},"from":{"class":"mailcore::Address","displayName":"Eric Rosenquist","mailbox":"rosenqui@strataware.com"},"extraHeaders":{"Return-Path":"","Content-Type":"multipart\/mixed; boundary=\"961121152248_14052\"","X-Mozilla-Status":"0005","Received":"from maleman.mcom.com ([198.93.92.3]) by dredd.mcom.com\u000a (Netscape Mail Server v2.01) with SMTP id AAA27656;\u000a Thu, 21 Nov 1996 13:20:43 -0700","Mime-Version":"1.0","Content-Length":"5854","Precedence":"bulk"},"date":"848610623","sender":{"class":"mailcore::Address","mailbox":"owner-smime-dev@RSA.COM"},"messageID":"199611212110.QAA14653@krusty.strataware.com","receivedDate":"848610623","subject":"My encryption certificate for S\/MIME testing","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"us-ascii","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"1","mimeType":"application\/x-pkcs7-mime","inlineAttachment":"1","class":"mailcore::Attachment","filename":"eric.p7c"}]}}} \ No newline at end of file +{"header":{"cc":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Eric Rosenquist","mailbox":"rosenqui@strataware.com"},{"class":"mailcore::Address","displayName":"Michel Ranger","mailbox":"rangerm@entrust.com"},{"class":"mailcore::Address","displayName":"Ron Vandergeest","mailbox":"rvander@entrust.com"}]},"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"S\/MIME Developers","mailbox":"smime-dev@RSA.COM"}]},"from":{"class":"mailcore::Address","displayName":"Eric Rosenquist","mailbox":"rosenqui@strataware.com"},"extraHeaders":{"Return-Path":"","Content-Type":"multipart\/mixed; boundary=\"961121152248_14052\"","X-Mozilla-Status":"0005","Received":"from maleman.mcom.com ([198.93.92.3]) by dredd.mcom.com\u000a (Netscape Mail Server v2.01) with SMTP id AAA27656;\u000a Thu, 21 Nov 1996 13:20:43 -0700","Mime-Version":"1.0","Content-Length":"5854","Precedence":"bulk"},"date":"848610623","sender":{"class":"mailcore::Address","mailbox":"owner-smime-dev@RSA.COM"},"messageID":"199611212110.QAA14653@krusty.strataware.com","receivedDate":"848610623","subject":"My encryption certificate for S\/MIME testing","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"1","mimeType":"application\/x-pkcs7-mime","inlineAttachment":"1","class":"mailcore::Attachment","filename":"eric.p7c"}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/112 b/unittest/data/parser/output/mbox/jwz/112 index 092c7a21f..6f40e689d 100644 --- a/unittest/data/parser/output/mbox/jwz/112 +++ b/unittest/data/parser/output/mbox/jwz/112 @@ -1 +1 @@ -{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"jwz@netscape.com"}]},"from":{"class":"mailcore::Address","displayName":"Blake Ramsdell","mailbox":"blaker@craswell.com"},"extraHeaders":{"Return-Path":"","Content-Type":"multipart\/signed; boundary=\u000a \"---=_=_ 659214770-385040-15143392 _=_=---\"; micalg=rsa-sha1; protocol=\u000a \"application\/x-pkcs7-signature\"","MIME-Version":"1.0","X-Mozilla-Status":"0001","X-Mailer":"Windows Eudora Pro Version 3.0 (32)","Received":"from maleman.mcom.com ([198.93.92.3]) by dredd.mcom.com\u000a (Netscape Mail Server v2.02) with SMTP id AAA19910\u000a for ; Fri, 13 Dec 1996 15:00:10 -0800","X-Sender":"blaker@mail.craswell.com","Content-Length":"4392"},"date":"850518621","messageID":"3.0.32.19961213151017.0091ed80@mail.craswell.com","receivedDate":"850518621","subject":"Encrypted message","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/signed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"us-ascii","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"1","mimeType":"application\/x-pkcs7-signature","class":"mailcore::Attachment","filename":"smime.p7s","attachment":"1"}]}}} \ No newline at end of file +{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"jwz@netscape.com"}]},"from":{"class":"mailcore::Address","displayName":"Blake Ramsdell","mailbox":"blaker@craswell.com"},"extraHeaders":{"Return-Path":"","Content-Type":"multipart\/signed; boundary=\u000a \"---=_=_ 659214770-385040-15143392 _=_=---\"; micalg=rsa-sha1; protocol=\u000a \"application\/x-pkcs7-signature\"","MIME-Version":"1.0","X-Mozilla-Status":"0001","X-Mailer":"Windows Eudora Pro Version 3.0 (32)","Received":"from maleman.mcom.com ([198.93.92.3]) by dredd.mcom.com\u000a (Netscape Mail Server v2.02) with SMTP id AAA19910\u000a for ; Fri, 13 Dec 1996 15:00:10 -0800","X-Sender":"blaker@mail.craswell.com","Content-Length":"4392"},"date":"850518621","messageID":"3.0.32.19961213151017.0091ed80@mail.craswell.com","receivedDate":"850518621","subject":"Encrypted message","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/signed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"1","mimeType":"application\/x-pkcs7-signature","class":"mailcore::Attachment","filename":"smime.p7s","attachment":"1"}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/117 b/unittest/data/parser/output/mbox/jwz/117 index 7bdcad2a5..3005eb38b 100644 --- a/unittest/data/parser/output/mbox/jwz/117 +++ b/unittest/data/parser/output/mbox/jwz/117 @@ -1 +1 @@ -{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"}]},"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"Return-Path":"","Content-Type":"multipart\/mixed; boundary=\"------------31DF237C2F1C\"","MIME-Version":"1.0","X-Mozilla-Status":"0001","X-Mailer":"Mozilla 3.01 (X11; U; IRIX 6.2 IP22)","Received":"from gruntle ([205.217.227.10]) by dredd.mcom.com\u000a (Netscape Mail Server v2.02) with SMTP id AAA4104\u000a for ; Fri, 7 Mar 1997 02:51:05 -0800","Content-Length":"3188","Organization":"Netscape Communications Corporation, Mozilla Division"},"date":"857731867","sender":{"class":"mailcore::Address","mailbox":"jwz@netscape.com"},"messageID":"331FF31B.ABD@netscape.com","receivedDate":"857731867","subject":"forwarded encrypted message (mult\/mixed)","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"us-ascii","class":"mailcore::Attachment"},{"partType":"message","header":{"date":"978307200","messageID":"MyMessageID123@mail.gmail.com","receivedDate":"978307200","class":"mailcore::MessageHeader"},"class":"mailcore::MessagePart","mainPart":{"partType":"single","uniqueID":"1","mimeType":"text\/plain","class":"mailcore::Attachment"}}]}}} \ No newline at end of file +{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"}]},"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"Return-Path":"","Content-Type":"multipart\/mixed; boundary=\"------------31DF237C2F1C\"","MIME-Version":"1.0","X-Mozilla-Status":"0001","X-Mailer":"Mozilla 3.01 (X11; U; IRIX 6.2 IP22)","Received":"from gruntle ([205.217.227.10]) by dredd.mcom.com\u000a (Netscape Mail Server v2.02) with SMTP id AAA4104\u000a for ; Fri, 7 Mar 1997 02:51:05 -0800","Content-Length":"3188","Organization":"Netscape Communications Corporation, Mozilla Division"},"date":"857731867","sender":{"class":"mailcore::Address","mailbox":"jwz@netscape.com"},"messageID":"331FF31B.ABD@netscape.com","receivedDate":"857731867","subject":"forwarded encrypted message (mult\/mixed)","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"message","header":{"date":"978307200","messageID":"MyMessageID123@mail.gmail.com","receivedDate":"978307200","class":"mailcore::MessageHeader"},"class":"mailcore::MessagePart","mainPart":{"partType":"single","uniqueID":"1","mimeType":"text\/plain","class":"mailcore::Attachment"}}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/118 b/unittest/data/parser/output/mbox/jwz/118 index f20c61f25..c1a4823ee 100644 --- a/unittest/data/parser/output/mbox/jwz/118 +++ b/unittest/data/parser/output/mbox/jwz/118 @@ -1 +1 @@ -{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"jwz@netscape.com"}]},"from":{"class":"mailcore::Address","displayName":"Dan Hugo","mailbox":"dhugo@netscape.com"},"extraHeaders":{"Return-Path":"","Content-Type":"multipart\/signed; protocol=\"application\/x-pkcs7-signature\"; micalg=sha1; boundary=\"------------ms088B4AC60B9FCF022C11E60D\"","MIME-Version":"1.0","X-Mozilla-Status":"0001","X-Mailer":"Mozilla 3.01 (X11; I; IRIX 5.3 IP22)","Received":"from ghoti ([207.1.147.41]) by dredd.mcom.com\u000a (Netscape Mail Server v2.02) with SMTP id AAA8103\u000a for ; Mon, 17 Mar 1997 17:17:40 -0800","Content-Length":"6011"},"date":"858647855","sender":{"class":"mailcore::Address","mailbox":"dhugo@netscape.com"},"messageID":"332DED2F.F5365D61@netscape.com","receivedDate":"858647855","subject":"This is signed","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/signed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"us-ascii","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"1","mimeType":"application\/x-pkcs7-signature","class":"mailcore::Attachment","filename":"smime.p7s","attachment":"1"}]}}} \ No newline at end of file +{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"jwz@netscape.com"}]},"from":{"class":"mailcore::Address","displayName":"Dan Hugo","mailbox":"dhugo@netscape.com"},"extraHeaders":{"Return-Path":"","Content-Type":"multipart\/signed; protocol=\"application\/x-pkcs7-signature\"; micalg=sha1; boundary=\"------------ms088B4AC60B9FCF022C11E60D\"","MIME-Version":"1.0","X-Mozilla-Status":"0001","X-Mailer":"Mozilla 3.01 (X11; I; IRIX 5.3 IP22)","Received":"from ghoti ([207.1.147.41]) by dredd.mcom.com\u000a (Netscape Mail Server v2.02) with SMTP id AAA8103\u000a for ; Mon, 17 Mar 1997 17:17:40 -0800","Content-Length":"6011"},"date":"858647855","sender":{"class":"mailcore::Address","mailbox":"dhugo@netscape.com"},"messageID":"332DED2F.F5365D61@netscape.com","receivedDate":"858647855","subject":"This is signed","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/signed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"1","mimeType":"application\/x-pkcs7-signature","class":"mailcore::Attachment","filename":"smime.p7s","attachment":"1"}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/120 b/unittest/data/parser/output/mbox/jwz/120 index 4deb86a6e..bf7978565 100644 --- a/unittest/data/parser/output/mbox/jwz/120 +++ b/unittest/data/parser/output/mbox/jwz/120 @@ -1 +1 @@ -{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"}]},"from":{"class":"mailcore::Address","mailbox":"danw@ayce.com"},"extraHeaders":{"Return-Path":"","Content-Type":"multipart\/signed; protocol=\"application\/x-pkcs7-signature\"; micalg=sha1; boundary=\"------------ms1FB3ACBABA2E8DEE155566A8\"","MIME-Version":"1.0","X-Mozilla-Status":"0015","X-Mailer":"Mozilla 4.0b3 [en] (Win95; I)","Received":"from maleman.mcom.com ([198.93.92.3]) by dredd.mcom.com\u000a (Netscape Mail Server v2.02) with SMTP id AAA10068\u000a for ; Tue, 15 Apr 1997 05:06:21 -0700","Content-Length":"2813","Organization":"ayce","X-Priority":"3 (Normal)"},"date":"861105956","messageID":"33536F24.BBDEA09D@ayce.com","receivedDate":"861105956","subject":"Re: Obtaining other people's certificates","class":"mailcore::MessageHeader","replyTo":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"danw@ayce.com"}]},"references":["33522A52.3AC8BA5A@ayce.com","3352D2BC.94342FC7@netscape.com"]},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/signed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"us-ascii","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"1","mimeType":"application\/x-pkcs7-signature","class":"mailcore::Attachment","filename":"smime.p7s","attachment":"1"}]}}} \ No newline at end of file +{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"}]},"from":{"class":"mailcore::Address","mailbox":"danw@ayce.com"},"extraHeaders":{"Return-Path":"","Content-Type":"multipart\/signed; protocol=\"application\/x-pkcs7-signature\"; micalg=sha1; boundary=\"------------ms1FB3ACBABA2E8DEE155566A8\"","MIME-Version":"1.0","X-Mozilla-Status":"0015","X-Mailer":"Mozilla 4.0b3 [en] (Win95; I)","Received":"from maleman.mcom.com ([198.93.92.3]) by dredd.mcom.com\u000a (Netscape Mail Server v2.02) with SMTP id AAA10068\u000a for ; Tue, 15 Apr 1997 05:06:21 -0700","Content-Length":"2813","Organization":"ayce","X-Priority":"3 (Normal)"},"date":"861105956","messageID":"33536F24.BBDEA09D@ayce.com","receivedDate":"861105956","subject":"Re: Obtaining other people's certificates","class":"mailcore::MessageHeader","replyTo":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"danw@ayce.com"}]},"references":["33522A52.3AC8BA5A@ayce.com","3352D2BC.94342FC7@netscape.com"]},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/signed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"1","mimeType":"application\/x-pkcs7-signature","class":"mailcore::Attachment","filename":"smime.p7s","attachment":"1"}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/122 b/unittest/data/parser/output/mbox/jwz/122 index 61a8d1bd5..8c63b9a2e 100644 --- a/unittest/data/parser/output/mbox/jwz/122 +++ b/unittest/data/parser/output/mbox/jwz/122 @@ -1 +1 @@ -{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Bob Lord","mailbox":"lord@netscape.com"}]},"from":{"class":"mailcore::Address","displayName":"Jason Lawrence Weisberger","mailbox":"jweis@why.bother.com"},"extraHeaders":{"Content-ID":"","Return-Path":"","Content-Type":"MULTIPART\/SIGNED; PROTOCOL=\"application\/x-pkcs7-signature\"; MICALG=sha1; BOUNDARY=------------ms2B7C383EE860EA977E7C30B4","MIME-Version":"1.0","X-Status":"","X-UID":"2572","Received":"from maleman.mcom.com ([198.93.92.3]) by judge.mcom.com\u000a (Netscape Mail Server v2.02) with SMTP id AAA22528\u000a for ; Thu, 17 Apr 1997 16:05:58 -0700","X-IMAP-Date":"17-Apr-1997 16:05:58 +0000"},"date":"861314624","messageID":"Pine.LNX.3.95.970417145937.5309P-100000@why.bother.com","receivedDate":"861314624","subject":"Re: Hey!","class":"mailcore::MessageHeader","inReplyTo":["3356A902.3F89787@netscape.com"]},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/signed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/PLAIN","charset":"US-ASCII","class":"mailcore::Attachment"}]}}} \ No newline at end of file +{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Bob Lord","mailbox":"lord@netscape.com"}]},"from":{"class":"mailcore::Address","displayName":"Jason Lawrence Weisberger","mailbox":"jweis@why.bother.com"},"extraHeaders":{"Content-ID":"","Return-Path":"","Content-Type":"MULTIPART\/SIGNED; PROTOCOL=\"application\/x-pkcs7-signature\"; MICALG=sha1; BOUNDARY=------------ms2B7C383EE860EA977E7C30B4","MIME-Version":"1.0","X-Status":"","X-UID":"2572","Received":"from maleman.mcom.com ([198.93.92.3]) by judge.mcom.com\u000a (Netscape Mail Server v2.02) with SMTP id AAA22528\u000a for ; Thu, 17 Apr 1997 16:05:58 -0700","X-IMAP-Date":"17-Apr-1997 16:05:58 +0000"},"date":"861314624","messageID":"Pine.LNX.3.95.970417145937.5309P-100000@why.bother.com","receivedDate":"861314624","subject":"Re: Hey!","class":"mailcore::MessageHeader","inReplyTo":["3356A902.3F89787@netscape.com"]},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/signed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/PLAIN","charset":"utf-8","class":"mailcore::Attachment"}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/123 b/unittest/data/parser/output/mbox/jwz/123 index a889586bb..3026b2ae9 100644 --- a/unittest/data/parser/output/mbox/jwz/123 +++ b/unittest/data/parser/output/mbox/jwz/123 @@ -1 +1 @@ -{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Bob Lord","mailbox":"lord@netscape.com"}]},"from":{"class":"mailcore::Address","displayName":"Jason Lawrence Weisberger","mailbox":"jweis@why.bother.com"},"extraHeaders":{"Content-ID":"","Return-Path":"","Content-Type":"MULTIPART\/SIGNED; PROTOCOL=\"application\/x-pkcs7-signature\"; MICALG=sha1; BOUNDARY=------------ms7014A498B2DAEA7AB832BC0A","MIME-Version":"1.0","X-Status":"","X-UID":"5624","Received":"from maleman.mcom.com ([198.93.92.3]) by judge.mcom.com\u000a (Netscape Mail Server v2.02) with SMTP id AAA18232\u000a for ; Mon, 12 May 1997 23:43:52 -0700","X-IMAP-Date":"12-May-1997 23:43:53 +0000"},"date":"863502405","messageID":"Pine.LNX.3.95.970512224621.25674T-311000@why.bother.com","receivedDate":"863502405","subject":"Re: [Fwd: the one true mail client?]","class":"mailcore::MessageHeader","inReplyTo":["3377D934.E7717CD0@netscape.com"]},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/signed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/PLAIN","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"contentID":"Pine.LNX.3.95.970512224621.25674W@why.bother.com","partType":"single","uniqueID":"2","mimeType":"text\/PLAIN","charset":"us-ascii","class":"mailcore::Attachment"},{"partType":"message","header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"lord@netscape.com"}]},"from":{"class":"mailcore::Address","mailbox":"friedman@netscape.com"},"extraHeaders":{"Return-Path":"","X-Status":"","X-UID":"5585","Received":"from netscape.com ([205.217.237.47]) by judge.mcom.com\u000a (Netscape Mail Server v2.02) with ESMTP id AAA16893\u000a for ; Mon, 12 May 1997 18:52:24 -0700","X-IMAP-Date":"12-May-1997 18:52:24 +0000"},"date":"863488342","messageID":"199705130152.SAA20422@oink.mcom.com","receivedDate":"863488342","subject":"Re: the one true mail client?","class":"mailcore::MessageHeader","replyTo":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"friedman@netscape.com"}]},"inReplyTo":["lord@netscape.com"],"references":["33650DE6.143C8A9C@netscape.com","337747C1.2C4EB494@netscape.com","337749C1.EDC1403E@netscape.com","33779383.F9C729DB@netscape.com","3377C898.98133783@netscape.com"]},"class":"mailcore::MessagePart","mainPart":{"partType":"single","uniqueID":"4","mimeType":"text\/plain","charset":"us-ascii","class":"mailcore::Attachment"}},{"contentID":"Pine.LNX.3.95.970512224621.25674Y@why.bother.com","partType":"single","uniqueID":"3","mimeType":"text\/X-VCARD","charset":"us-ascii","contentDescription":"Card for Bob Lord","class":"mailcore::Attachment","filename":"vcard.vcf"}]}},{"contentID":"Pine.LNX.3.95.970512224621.25674Z@why.bother.com","partType":"single","uniqueID":"1","mimeType":"application\/X-PKCS7-SIGNATURE","contentDescription":"S\/MIME Cryptographic Signature","class":"mailcore::Attachment","filename":"smime.p7s"}]}}} \ No newline at end of file +{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Bob Lord","mailbox":"lord@netscape.com"}]},"from":{"class":"mailcore::Address","displayName":"Jason Lawrence Weisberger","mailbox":"jweis@why.bother.com"},"extraHeaders":{"Content-ID":"","Return-Path":"","Content-Type":"MULTIPART\/SIGNED; PROTOCOL=\"application\/x-pkcs7-signature\"; MICALG=sha1; BOUNDARY=------------ms7014A498B2DAEA7AB832BC0A","MIME-Version":"1.0","X-Status":"","X-UID":"5624","Received":"from maleman.mcom.com ([198.93.92.3]) by judge.mcom.com\u000a (Netscape Mail Server v2.02) with SMTP id AAA18232\u000a for ; Mon, 12 May 1997 23:43:52 -0700","X-IMAP-Date":"12-May-1997 23:43:53 +0000"},"date":"863502405","messageID":"Pine.LNX.3.95.970512224621.25674T-311000@why.bother.com","receivedDate":"863502405","subject":"Re: [Fwd: the one true mail client?]","class":"mailcore::MessageHeader","inReplyTo":["3377D934.E7717CD0@netscape.com"]},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/signed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/PLAIN","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"contentID":"Pine.LNX.3.95.970512224621.25674W@why.bother.com","partType":"single","uniqueID":"2","mimeType":"text\/PLAIN","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"message","header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"lord@netscape.com"}]},"from":{"class":"mailcore::Address","mailbox":"friedman@netscape.com"},"extraHeaders":{"Return-Path":"","X-Status":"","X-UID":"5585","Received":"from netscape.com ([205.217.237.47]) by judge.mcom.com\u000a (Netscape Mail Server v2.02) with ESMTP id AAA16893\u000a for ; Mon, 12 May 1997 18:52:24 -0700","X-IMAP-Date":"12-May-1997 18:52:24 +0000"},"date":"863488342","messageID":"199705130152.SAA20422@oink.mcom.com","receivedDate":"863488342","subject":"Re: the one true mail client?","class":"mailcore::MessageHeader","replyTo":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"friedman@netscape.com"}]},"inReplyTo":["lord@netscape.com"],"references":["33650DE6.143C8A9C@netscape.com","337747C1.2C4EB494@netscape.com","337749C1.EDC1403E@netscape.com","33779383.F9C729DB@netscape.com","3377C898.98133783@netscape.com"]},"class":"mailcore::MessagePart","mainPart":{"partType":"single","uniqueID":"4","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"}},{"contentID":"Pine.LNX.3.95.970512224621.25674Y@why.bother.com","partType":"single","uniqueID":"3","mimeType":"text\/X-VCARD","charset":"utf-8","contentDescription":"Card for Bob Lord","class":"mailcore::Attachment","filename":"vcard.vcf"}]}},{"contentID":"Pine.LNX.3.95.970512224621.25674Z@why.bother.com","partType":"single","uniqueID":"1","mimeType":"application\/X-PKCS7-SIGNATURE","contentDescription":"S\/MIME Cryptographic Signature","class":"mailcore::Attachment","filename":"smime.p7s"}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/126 b/unittest/data/parser/output/mbox/jwz/126 index 7cb90b809..cea52fc5a 100644 --- a/unittest/data/parser/output/mbox/jwz/126 +++ b/unittest/data/parser/output/mbox/jwz/126 @@ -1 +1 @@ -{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"smime-dev@RSA.COM"}]},"from":{"class":"mailcore::Address","mailbox":"jgildred@opensoft.com"},"extraHeaders":{"Return-Path":"owner-smime-dev@RSA.COM","Content-Type":"multipart\/signed; protocol=\"application\/x-pkcs7-signature\"; micalg=rsa-md5; boundary=\"===OpenSoft===11339510===2===\"","Status":"U","X-Mozilla-Status":"0005","X-UIDL":"834432008.000","X-Mailer":"OpenSoft ExpressMail Version 1.0","Received":"from maleman.mcom.com (maleman.mcom.com [198.93.92.3]) by urchin.netscape.com (8.6.12\/8.6.9) with ESMTP id LAA06225; Mon, 10 Jun 1996 11:39:15 -0700","Mime-Version":"1.0","Content-Length":"2957","Precedence":"bulk"},"date":"834435472","sender":{"class":"mailcore::Address","mailbox":"owner-smime-dev@RSA.COM"},"messageID":"9606101835.AA29051@www","receivedDate":"834435472","subject":"Signed Confirmation","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/signed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"us-ascii","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"1","mimeType":"application\/x-pkcs7-signature","class":"mailcore::Attachment"}]}}} \ No newline at end of file +{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"smime-dev@RSA.COM"}]},"from":{"class":"mailcore::Address","mailbox":"jgildred@opensoft.com"},"extraHeaders":{"Return-Path":"owner-smime-dev@RSA.COM","Content-Type":"multipart\/signed; protocol=\"application\/x-pkcs7-signature\"; micalg=rsa-md5; boundary=\"===OpenSoft===11339510===2===\"","Status":"U","X-Mozilla-Status":"0005","X-UIDL":"834432008.000","X-Mailer":"OpenSoft ExpressMail Version 1.0","Received":"from maleman.mcom.com (maleman.mcom.com [198.93.92.3]) by urchin.netscape.com (8.6.12\/8.6.9) with ESMTP id LAA06225; Mon, 10 Jun 1996 11:39:15 -0700","Mime-Version":"1.0","Content-Length":"2957","Precedence":"bulk"},"date":"834435472","sender":{"class":"mailcore::Address","mailbox":"owner-smime-dev@RSA.COM"},"messageID":"9606101835.AA29051@www","receivedDate":"834435472","subject":"Signed Confirmation","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/signed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"1","mimeType":"application\/x-pkcs7-signature","class":"mailcore::Attachment"}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/127 b/unittest/data/parser/output/mbox/jwz/127 index 662670dda..c4adb20cb 100644 --- a/unittest/data/parser/output/mbox/jwz/127 +++ b/unittest/data/parser/output/mbox/jwz/127 @@ -1 +1 @@ -{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"'smime-dev@rsa.com'","mailbox":"smime-dev@RSA.COM"}]},"from":{"class":"mailcore::Address","displayName":"Peter Williams","mailbox":"peter@verisign.com"},"extraHeaders":{"Return-Path":"owner-smime-dev@RSA.COM","Content-Type":"multipart\/mixed; boundary=\"---- =_NextPart_000_01BB9E4D.CA434FE0\"","X-Mozilla-Status":"0001","X-UIDL":"db360888b99be53e578173dc6a65a828","Received":"from maleman.mcom.com (maleman.mcom.com [198.93.92.3]) by urchin.mcom.com (8.7.5\/8.7.3) with SMTP id NAA01603; Mon, 9 Sep 1996 13:04:54 -0700 (PDT)","Mime-Version":"1.0","Content-Length":"2880","Precedence":"bulk"},"date":"842298758","sender":{"class":"mailcore::Address","mailbox":"owner-smime-dev@RSA.COM"},"messageID":"01BB9E4D.CA27D8A0@Peter.verisign.com","receivedDate":"842298758","subject":"plase help by returning what gets delivered...","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"us-ascii","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"1","mimeType":"text\/html","class":"mailcore::Attachment","filename":"Page1.htm"},{"partType":"single","uniqueID":"2","mimeType":"application\/x-pkcs7-signature","class":"mailcore::Attachment","filename":"Page1.p7s"}]}}} \ No newline at end of file +{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"'smime-dev@rsa.com'","mailbox":"smime-dev@RSA.COM"}]},"from":{"class":"mailcore::Address","displayName":"Peter Williams","mailbox":"peter@verisign.com"},"extraHeaders":{"Return-Path":"owner-smime-dev@RSA.COM","Content-Type":"multipart\/mixed; boundary=\"---- =_NextPart_000_01BB9E4D.CA434FE0\"","X-Mozilla-Status":"0001","X-UIDL":"db360888b99be53e578173dc6a65a828","Received":"from maleman.mcom.com (maleman.mcom.com [198.93.92.3]) by urchin.mcom.com (8.7.5\/8.7.3) with SMTP id NAA01603; Mon, 9 Sep 1996 13:04:54 -0700 (PDT)","Mime-Version":"1.0","Content-Length":"2880","Precedence":"bulk"},"date":"842298758","sender":{"class":"mailcore::Address","mailbox":"owner-smime-dev@RSA.COM"},"messageID":"01BB9E4D.CA27D8A0@Peter.verisign.com","receivedDate":"842298758","subject":"plase help by returning what gets delivered...","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"1","mimeType":"text\/html","class":"mailcore::Attachment","filename":"Page1.htm"},{"partType":"single","uniqueID":"2","mimeType":"application\/x-pkcs7-signature","class":"mailcore::Attachment","filename":"Page1.p7s"}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/129 b/unittest/data/parser/output/mbox/jwz/129 index c5c5962f8..079a7ea73 100644 --- a/unittest/data/parser/output/mbox/jwz/129 +++ b/unittest/data/parser/output/mbox/jwz/129 @@ -1 +1 @@ -{"header":{"cc":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"alex@verisign.com"}]},"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"smime-dev@RSA.COM"},{"class":"mailcore::Address","mailbox":"smime-editor@RSA.COM"}]},"from":{"class":"mailcore::Address","displayName":"Blake Ramsdell","mailbox":"blaker@craswell.com"},"extraHeaders":{"Content-Type":"multipart\/signed; boundary=\u000a \"---=_=_ 10156253-385044-15062624 _=_=---\"; micalg=rsa-sha1; protocol=\u000a \"application\/x-pkcs7-signature\"","X-Mailer":"Windows Eudora Pro Version 3.0b33 (32)","Mime-Version":"1.0","X-Sender":"blaker@mail.craswell.com","Precedence":"bulk"},"date":"844748829","sender":{"class":"mailcore::Address","mailbox":"owner-smime-dev@RSA.COM"},"messageID":"3.0b33.32.19961007212705.0091cdb0@mail.craswell.com","receivedDate":"844748829","subject":"A cert from deming software","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/signed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"us-ascii","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"1","mimeType":"application\/x-pkcs7-signature","class":"mailcore::Attachment","filename":"smime.p7s","attachment":"1"}]}}} \ No newline at end of file +{"header":{"cc":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"alex@verisign.com"}]},"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"smime-dev@RSA.COM"},{"class":"mailcore::Address","mailbox":"smime-editor@RSA.COM"}]},"from":{"class":"mailcore::Address","displayName":"Blake Ramsdell","mailbox":"blaker@craswell.com"},"extraHeaders":{"Content-Type":"multipart\/signed; boundary=\u000a \"---=_=_ 10156253-385044-15062624 _=_=---\"; micalg=rsa-sha1; protocol=\u000a \"application\/x-pkcs7-signature\"","X-Mailer":"Windows Eudora Pro Version 3.0b33 (32)","Mime-Version":"1.0","X-Sender":"blaker@mail.craswell.com","Precedence":"bulk"},"date":"844748829","sender":{"class":"mailcore::Address","mailbox":"owner-smime-dev@RSA.COM"},"messageID":"3.0b33.32.19961007212705.0091cdb0@mail.craswell.com","receivedDate":"844748829","subject":"A cert from deming software","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/signed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"1","mimeType":"application\/x-pkcs7-signature","class":"mailcore::Attachment","filename":"smime.p7s","attachment":"1"}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/130 b/unittest/data/parser/output/mbox/jwz/130 index 04a83720d..6a459f8f2 100644 --- a/unittest/data/parser/output/mbox/jwz/130 +++ b/unittest/data/parser/output/mbox/jwz/130 @@ -1 +1 @@ -{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"'set-discuss@commerce.net'","mailbox":"set-discuss@commerce.net"},{"class":"mailcore::Address","displayName":"'smime-dev@rsa.com'","mailbox":"smime-dev@RSA.COM"}]},"from":{"class":"mailcore::Address","displayName":"Kurt Stammberger","mailbox":"kurt@RSA.COM"},"extraHeaders":{"Return-Path":"owner-smime-dev@RSA.COM","Content-Type":"multipart\/mixed; boundary=\"---- =_NextPart_000_01BBBCFC.5826AA10\"","X-Mozilla-Status":"0005","X-UIDL":"4f6d764354ec3f5fa6e9ac0c33439a8c","X-Mailer":"Microsoft Exchange Server Internet Mail Connector Version 4.0.993.5","Received":"from maleman.mcom.com (maleman.mcom.com [198.93.92.3]) by urchin.mcom.com (8.7.5\/8.7.3) with SMTP id OAA13788; Fri, 18 Oct 1996 14:03:45 -0700 (PDT)","Mime-Version":"1.0","Precedence":"bulk"},"date":"845672266","sender":{"class":"mailcore::Address","mailbox":"owner-smime-dev@RSA.COM"},"messageID":"c=US%a=_%p=RSA_Data_Securit%l=LOBESTER-961018205746Z-5325@LOBESTER.rsa.com","receivedDate":"845672266","subject":"S\/MIME Cert","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"us-ascii","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"1","mimeType":"application\/octet-stream","class":"mailcore::Attachment","filename":"verisign.p7m"}]}}} \ No newline at end of file +{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"'set-discuss@commerce.net'","mailbox":"set-discuss@commerce.net"},{"class":"mailcore::Address","displayName":"'smime-dev@rsa.com'","mailbox":"smime-dev@RSA.COM"}]},"from":{"class":"mailcore::Address","displayName":"Kurt Stammberger","mailbox":"kurt@RSA.COM"},"extraHeaders":{"Return-Path":"owner-smime-dev@RSA.COM","Content-Type":"multipart\/mixed; boundary=\"---- =_NextPart_000_01BBBCFC.5826AA10\"","X-Mozilla-Status":"0005","X-UIDL":"4f6d764354ec3f5fa6e9ac0c33439a8c","X-Mailer":"Microsoft Exchange Server Internet Mail Connector Version 4.0.993.5","Received":"from maleman.mcom.com (maleman.mcom.com [198.93.92.3]) by urchin.mcom.com (8.7.5\/8.7.3) with SMTP id OAA13788; Fri, 18 Oct 1996 14:03:45 -0700 (PDT)","Mime-Version":"1.0","Precedence":"bulk"},"date":"845672266","sender":{"class":"mailcore::Address","mailbox":"owner-smime-dev@RSA.COM"},"messageID":"c=US%a=_%p=RSA_Data_Securit%l=LOBESTER-961018205746Z-5325@LOBESTER.rsa.com","receivedDate":"845672266","subject":"S\/MIME Cert","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"1","mimeType":"application\/octet-stream","class":"mailcore::Attachment","filename":"verisign.p7m"}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/131 b/unittest/data/parser/output/mbox/jwz/131 index 4f79d4d24..3492f98b1 100644 --- a/unittest/data/parser/output/mbox/jwz/131 +++ b/unittest/data/parser/output/mbox/jwz/131 @@ -1 +1 @@ -{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"smime-dev@RSA.COM"}]},"from":{"class":"mailcore::Address","mailbox":"jgildred@opensoft.com"},"extraHeaders":{"Return-Path":"","Content-Type":"multipart\/signed; protocol=\"application\/x-pkcs7-signature\"; micalg=rsa-sha; boundary=\"===OpenSoft===247233737===5===\"","X-Mozilla-Status":"0001","X-Mailer":"OpenSoft ExpressMail Version 1.0","Received":"from maleman.mcom.com ([198.93.92.3]) by dredd.mcom.com\u000a (Netscape Mail Server v2.01) with SMTP id AAA20354;\u000a Tue, 29 Oct 1996 12:15:27 -0700","Mime-Version":"1.0","Content-Length":"4051","Precedence":"bulk"},"date":"846619920","sender":{"class":"mailcore::Address","mailbox":"owner-smime-dev@RSA.COM"},"messageID":"MSG961029151201#15@server1.opensoft.com","receivedDate":"846619920","subject":"Signed SHA1 with VeriSign certification","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/signed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"us-ascii","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"1","mimeType":"application\/x-pkcs7-signature","class":"mailcore::Attachment"}]}}} \ No newline at end of file +{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"smime-dev@RSA.COM"}]},"from":{"class":"mailcore::Address","mailbox":"jgildred@opensoft.com"},"extraHeaders":{"Return-Path":"","Content-Type":"multipart\/signed; protocol=\"application\/x-pkcs7-signature\"; micalg=rsa-sha; boundary=\"===OpenSoft===247233737===5===\"","X-Mozilla-Status":"0001","X-Mailer":"OpenSoft ExpressMail Version 1.0","Received":"from maleman.mcom.com ([198.93.92.3]) by dredd.mcom.com\u000a (Netscape Mail Server v2.01) with SMTP id AAA20354;\u000a Tue, 29 Oct 1996 12:15:27 -0700","Mime-Version":"1.0","Content-Length":"4051","Precedence":"bulk"},"date":"846619920","sender":{"class":"mailcore::Address","mailbox":"owner-smime-dev@RSA.COM"},"messageID":"MSG961029151201#15@server1.opensoft.com","receivedDate":"846619920","subject":"Signed SHA1 with VeriSign certification","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/signed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"1","mimeType":"application\/x-pkcs7-signature","class":"mailcore::Attachment"}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/139 b/unittest/data/parser/output/mbox/jwz/139 index 01e8da2c5..7fd9885d1 100644 --- a/unittest/data/parser/output/mbox/jwz/139 +++ b/unittest/data/parser/output/mbox/jwz/139 @@ -1 +1 @@ -{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Mark Crispin","mailbox":"mrc@Tomobiki-Cho.CAC.Washington.EDU"}]},"from":{"class":"mailcore::Address","displayName":"Nathaniel Borenstein","mailbox":"nsb"},"extraHeaders":{"Content-Type":"multipart\/alternative; \u000a\u0009boundary=\"Interpart.Boundary.ce1ICbq0M2YtM1U0gA\"","MIME-Version":"1.0","Received":"from Messages.8.5.N.CUILIB.3.45.SNAP.NOT.LINKED.greenbush.galaxy.sun4.41\u000a via MS.5.6.greenbush.galaxy.sun4_41;\u000a Mon, 4 May 1992 10:01:12 -0400 (EDT)","X-Andrew-Authenticated-As":"4099;greenbush.galaxy;Nathaniel Borenstein","X-Andrew-Message-Size":"171+3"},"date":"704988072","messageID":"Ie1ICcG0M2Yt01U0or@thumper.bellcore.com","receivedDate":"704988072","subject":"Re: MIME: Some real world FACTS of life","class":"mailcore::MessageHeader","inReplyTo":["MS-C.704934000.1103527590.mrc@Tomobiki-Cho.CAC.Washington.EDU"],"references":["MS-C.704934000.1103527590.mrc@Tomobiki-Cho.CAC.Washington.EDU"]},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/alternative","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"1","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"2","mimeType":"audio\/basic","contentDescription":"Danger, danger!","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"3","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"4","mimeType":"audio\/basic","contentDescription":"illogical","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"5","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"6","mimeType":"audio\/basic","contentDescription":"Does not compute!","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"7","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"}]}}]}}} \ No newline at end of file +{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Mark Crispin","mailbox":"mrc@Tomobiki-Cho.CAC.Washington.EDU"}]},"from":{"class":"mailcore::Address","displayName":"Nathaniel Borenstein","mailbox":"nsb"},"extraHeaders":{"Content-Type":"multipart\/alternative; \u000a\u0009boundary=\"Interpart.Boundary.ce1ICbq0M2YtM1U0gA\"","MIME-Version":"1.0","Received":"from Messages.8.5.N.CUILIB.3.45.SNAP.NOT.LINKED.greenbush.galaxy.sun4.41\u000a via MS.5.6.greenbush.galaxy.sun4_41;\u000a Mon, 4 May 1992 10:01:12 -0400 (EDT)","X-Andrew-Authenticated-As":"4099;greenbush.galaxy;Nathaniel Borenstein","X-Andrew-Message-Size":"171+3"},"date":"704988072","messageID":"Ie1ICcG0M2Yt01U0or@thumper.bellcore.com","receivedDate":"704988072","subject":"Re: MIME: Some real world FACTS of life","class":"mailcore::MessageHeader","inReplyTo":["MS-C.704934000.1103527590.mrc@Tomobiki-Cho.CAC.Washington.EDU"],"references":["MS-C.704934000.1103527590.mrc@Tomobiki-Cho.CAC.Washington.EDU"]},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/alternative","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"1","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"2","mimeType":"audio\/basic","contentDescription":"Danger, danger!","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"3","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"4","mimeType":"audio\/basic","contentDescription":"illogical","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"5","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"6","mimeType":"audio\/basic","contentDescription":"Does not compute!","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"7","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"}]}}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/142 b/unittest/data/parser/output/mbox/jwz/142 index 81df5c6da..fb312f9b6 100644 --- a/unittest/data/parser/output/mbox/jwz/142 +++ b/unittest/data/parser/output/mbox/jwz/142 @@ -1 +1 @@ -{"header":{"cc":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"mhtml@SEGATE.SUNET.SE"}]},"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"lewisg@Exchange.Microsoft.com"}]},"from":{"class":"mailcore::Address","mailbox":"izzy@nugget.scr.atm.com"},"extraHeaders":{"Return-Path":"owner-mhtml@SEGATE.SUNET.SE","Content-Type":"multipart\/mixed;\u000a boundary=\"=_27tW56g.bO1996u.N16d000A.r09Y.36:0008d3\"","MIME-Version":"1.0","X-Mozilla-Status":"0011","X-UIDL":"9f218600f41793d7a03f4710763907fb","Content-Transfer-Encoding":"7bit","X-Mailer":"Emissary V2.03, by Attachmate Corp.","Received":"from maleman.mcom.com (maleman.mcom.com [198.93.92.3]) by urchin.mcom.com (8.7.5\/8.7.3) with SMTP id JAA29055 for ; Fri, 27 Sep 1996 09:44:42 -0700 (PDT)","Content-Length":"4879"},"date":"843842214","sender":{"class":"mailcore::Address","mailbox":"owner-mhtml@SEGATE.SUNET.SE"},"messageID":"19960927163654.izzy@scr.atm.com","receivedDate":"843842214","subject":"RE: problem with relative urls and applets","class":"mailcore::MessageHeader","inReplyTo":["MHTML%96092703403599@SEGATE.SUNET.SE"]},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"us-ascii","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"1","mimeType":"application\/vcard","inlineAttachment":"1","contentDescription":"The Sender's Signature","class":"mailcore::Attachment","filename":"MJOSEPH.VCF"}]}}} \ No newline at end of file +{"header":{"cc":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"mhtml@SEGATE.SUNET.SE"}]},"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"lewisg@Exchange.Microsoft.com"}]},"from":{"class":"mailcore::Address","mailbox":"izzy@nugget.scr.atm.com"},"extraHeaders":{"Return-Path":"owner-mhtml@SEGATE.SUNET.SE","Content-Type":"multipart\/mixed;\u000a boundary=\"=_27tW56g.bO1996u.N16d000A.r09Y.36:0008d3\"","MIME-Version":"1.0","X-Mozilla-Status":"0011","X-UIDL":"9f218600f41793d7a03f4710763907fb","Content-Transfer-Encoding":"7bit","X-Mailer":"Emissary V2.03, by Attachmate Corp.","Received":"from maleman.mcom.com (maleman.mcom.com [198.93.92.3]) by urchin.mcom.com (8.7.5\/8.7.3) with SMTP id JAA29055 for ; Fri, 27 Sep 1996 09:44:42 -0700 (PDT)","Content-Length":"4879"},"date":"843842214","sender":{"class":"mailcore::Address","mailbox":"owner-mhtml@SEGATE.SUNET.SE"},"messageID":"19960927163654.izzy@scr.atm.com","receivedDate":"843842214","subject":"RE: problem with relative urls and applets","class":"mailcore::MessageHeader","inReplyTo":["MHTML%96092703403599@SEGATE.SUNET.SE"]},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"1","mimeType":"application\/vcard","inlineAttachment":"1","contentDescription":"The Sender's Signature","class":"mailcore::Attachment","filename":"MJOSEPH.VCF"}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/144 b/unittest/data/parser/output/mbox/jwz/144 index 48df50d0d..d8263b04b 100644 --- a/unittest/data/parser/output/mbox/jwz/144 +++ b/unittest/data/parser/output/mbox/jwz/144 @@ -1 +1 @@ -{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Nathaniel Borenstein","mailbox":"nsb"}]},"from":{"class":"mailcore::Address","displayName":"Darren New","mailbox":"dnew"},"extraHeaders":{"Return-Path":"","Content-Type":"multipart\/alternative; \u000a\u0009boundary=\"Interpart.Boundary.keAvi9O0M2U=AU4XRw\"","Received":"from nevada.bellcore.com by greenbush.bellcore.com (4.1\/4.7)\u000a\u0009id for nsb; Mon, 8 Jun 92 15:57:08 EDT","Mime-Version":"1.0","X-Andrew-Message-Size":"8538+4"},"date":"708033419","messageID":"0eAvi=C0M2U=0U4XZI@thumper.bellcore.com","receivedDate":"708033419","subject":"Fwd: revised MIME architecture","class":"mailcore::MessageHeader","references":["9206062231.AA23867@pixel.convex.com"]},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/alternative","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"1","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"2","mimeType":"message\/external-body","contentDescription":"Object of type 'message\/external-body;","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"3","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"4","mimeType":"text\/SGML","contentDescription":"Object of type 'text\/SGML","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"5","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"6","mimeType":"message\/external-body","contentDescription":"Object of type 'message\/external-body","class":"mailcore::Attachment","filename":"\/hypertext\/WWW\/TheProject.html"},{"partType":"single","uniqueID":"7","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"8","mimeType":"image\/gif","contentDescription":"Object of type 'image\/gif","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"9","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"}]}}]}}} \ No newline at end of file +{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Nathaniel Borenstein","mailbox":"nsb"}]},"from":{"class":"mailcore::Address","displayName":"Darren New","mailbox":"dnew"},"extraHeaders":{"Return-Path":"","Content-Type":"multipart\/alternative; \u000a\u0009boundary=\"Interpart.Boundary.keAvi9O0M2U=AU4XRw\"","Received":"from nevada.bellcore.com by greenbush.bellcore.com (4.1\/4.7)\u000a\u0009id for nsb; Mon, 8 Jun 92 15:57:08 EDT","Mime-Version":"1.0","X-Andrew-Message-Size":"8538+4"},"date":"708033419","messageID":"0eAvi=C0M2U=0U4XZI@thumper.bellcore.com","receivedDate":"708033419","subject":"Fwd: revised MIME architecture","class":"mailcore::MessageHeader","references":["9206062231.AA23867@pixel.convex.com"]},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/alternative","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"1","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"2","mimeType":"message\/external-body","contentDescription":"Object of type 'message\/external-body;","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"3","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"4","mimeType":"text\/SGML","contentDescription":"Object of type 'text\/SGML","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"5","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"6","mimeType":"message\/external-body","contentDescription":"Object of type 'message\/external-body","class":"mailcore::Attachment","filename":"\/hypertext\/WWW\/TheProject.html"},{"partType":"single","uniqueID":"7","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"8","mimeType":"image\/gif","contentDescription":"Object of type 'image\/gif","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"9","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"}]}}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/16 b/unittest/data/parser/output/mbox/jwz/16 index 17e593a95..205415d47 100644 --- a/unittest/data/parser/output/mbox/jwz/16 +++ b/unittest/data/parser/output/mbox/jwz/16 @@ -1 +1 @@ -{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"ysato@etl.go.jp"}]},"from":{"class":"mailcore::Address","displayName":"Nathaniel Borenstein","mailbox":"nsb"},"extraHeaders":{"MIME-Version":"1.0","Received":"from Messages.8.5.N.CUILIB.3.45.SNAP.NOT.LINKED.greenbush.galaxy.sun4.41\u000a via MS.5.6.greenbush.galaxy.sun4_41;\u000a Tue, 16 Jun 1992 09:46:49 -0400 (EDT)","X-Andrew-Authenticated-As":"4099;greenbush.galaxy;Nathaniel Borenstein","Content-type":"text\/plain; charset=US-ASCII"},"date":"708702409","messageID":"4eDT39K0M2YtMC_2lL@thumper.bellcore.com","receivedDate":"708702409","subject":"Re: MIME & int'l mail","class":"mailcore::MessageHeader","inReplyTo":["gEJO+.ysato@etl.go.jp"],"references":["UeCBvVq0M2Yt4oUA83@thumper.bellcore.com","gEJO+.ysato@etl.go.jp"]},"class":"mailcore::MessageParser","mainPart":{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"US-ASCII","class":"mailcore::Attachment"}} \ No newline at end of file +{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"ysato@etl.go.jp"}]},"from":{"class":"mailcore::Address","displayName":"Nathaniel Borenstein","mailbox":"nsb"},"extraHeaders":{"MIME-Version":"1.0","Received":"from Messages.8.5.N.CUILIB.3.45.SNAP.NOT.LINKED.greenbush.galaxy.sun4.41\u000a via MS.5.6.greenbush.galaxy.sun4_41;\u000a Tue, 16 Jun 1992 09:46:49 -0400 (EDT)","X-Andrew-Authenticated-As":"4099;greenbush.galaxy;Nathaniel Borenstein","Content-type":"text\/plain; charset=US-ASCII"},"date":"708702409","messageID":"4eDT39K0M2YtMC_2lL@thumper.bellcore.com","receivedDate":"708702409","subject":"Re: MIME & int'l mail","class":"mailcore::MessageHeader","inReplyTo":["gEJO+.ysato@etl.go.jp"],"references":["UeCBvVq0M2Yt4oUA83@thumper.bellcore.com","gEJO+.ysato@etl.go.jp"]},"class":"mailcore::MessageParser","mainPart":{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/17 b/unittest/data/parser/output/mbox/jwz/17 index 5d1c1dbc0..66461345c 100644 --- a/unittest/data/parser/output/mbox/jwz/17 +++ b/unittest/data/parser/output/mbox/jwz/17 @@ -1 +1 @@ -{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"atotic@mcom.com"},{"class":"mailcore::Address","mailbox":"jwz@mcom.com"}]},"from":{"class":"mailcore::Address","mailbox":"atotic@netscape.com"},"extraHeaders":{"Content-Type":"multipart\/mixed; boundary=\"========================_26885646==_\"","Received":"from neon.netscape.com (steroid.mcom.com [198.93.92.10]) by abattoir.netscape.com (8.6.10\/8.6.9) with ESMTP id QAA26158 for ; Mon, 26 Jun 1995 16:50:29 -0700","Mime-Version":"1.0","X-Sender":"atotic@198.93.92.10","X-VM-v5-Data":"([nil nil nil nil nil nil nil nil nil]\u000a\u0009[nil \"Mon\" \"26\" \"June\" \"1995\" \"16:53:52\" \"-0800\" \"Aleksandar Totic\" \"atotic@netscape.com\" nil \"6272\" \"AppleDouble example\" \"^Date:\" nil nil \"6\" nil nil (mark number \" 26-Jun-95 16:53 Aleks Toti6272 AppleDouble example\u00a5n\") nil]\u000a\u0009nil)"},"date":"804214432","messageID":"ac15067506021004778a@[198.93.92.66]","receivedDate":"804214432","subject":"AppleDouble example","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"us-ascii","class":"mailcore::Attachment"},{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"1","mimeType":"application\/applefile","class":"mailcore::Attachment","filename":"%Aete_Editor_b1","attachment":"1"},{"partType":"single","uniqueID":"2","mimeType":"application\/octet-stream","class":"mailcore::Attachment","filename":"Aete_Editor_b1","attachment":"1"}]}}]}}} \ No newline at end of file +{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"atotic@mcom.com"},{"class":"mailcore::Address","mailbox":"jwz@mcom.com"}]},"from":{"class":"mailcore::Address","mailbox":"atotic@netscape.com"},"extraHeaders":{"Content-Type":"multipart\/mixed; boundary=\"========================_26885646==_\"","Received":"from neon.netscape.com (steroid.mcom.com [198.93.92.10]) by abattoir.netscape.com (8.6.10\/8.6.9) with ESMTP id QAA26158 for ; Mon, 26 Jun 1995 16:50:29 -0700","Mime-Version":"1.0","X-Sender":"atotic@198.93.92.10","X-VM-v5-Data":"([nil nil nil nil nil nil nil nil nil]\u000a\u0009[nil \"Mon\" \"26\" \"June\" \"1995\" \"16:53:52\" \"-0800\" \"Aleksandar Totic\" \"atotic@netscape.com\" nil \"6272\" \"AppleDouble example\" \"^Date:\" nil nil \"6\" nil nil (mark number \" 26-Jun-95 16:53 Aleks Toti6272 AppleDouble example\u00a5n\") nil]\u000a\u0009nil)"},"date":"804214432","messageID":"ac15067506021004778a@[198.93.92.66]","receivedDate":"804214432","subject":"AppleDouble example","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"1","mimeType":"application\/applefile","class":"mailcore::Attachment","filename":"%Aete_Editor_b1","attachment":"1"},{"partType":"single","uniqueID":"2","mimeType":"application\/octet-stream","class":"mailcore::Attachment","filename":"Aete_Editor_b1","attachment":"1"}]}}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/18 b/unittest/data/parser/output/mbox/jwz/18 index 5d1c1dbc0..66461345c 100644 --- a/unittest/data/parser/output/mbox/jwz/18 +++ b/unittest/data/parser/output/mbox/jwz/18 @@ -1 +1 @@ -{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"atotic@mcom.com"},{"class":"mailcore::Address","mailbox":"jwz@mcom.com"}]},"from":{"class":"mailcore::Address","mailbox":"atotic@netscape.com"},"extraHeaders":{"Content-Type":"multipart\/mixed; boundary=\"========================_26885646==_\"","Received":"from neon.netscape.com (steroid.mcom.com [198.93.92.10]) by abattoir.netscape.com (8.6.10\/8.6.9) with ESMTP id QAA26158 for ; Mon, 26 Jun 1995 16:50:29 -0700","Mime-Version":"1.0","X-Sender":"atotic@198.93.92.10","X-VM-v5-Data":"([nil nil nil nil nil nil nil nil nil]\u000a\u0009[nil \"Mon\" \"26\" \"June\" \"1995\" \"16:53:52\" \"-0800\" \"Aleksandar Totic\" \"atotic@netscape.com\" nil \"6272\" \"AppleDouble example\" \"^Date:\" nil nil \"6\" nil nil (mark number \" 26-Jun-95 16:53 Aleks Toti6272 AppleDouble example\u00a5n\") nil]\u000a\u0009nil)"},"date":"804214432","messageID":"ac15067506021004778a@[198.93.92.66]","receivedDate":"804214432","subject":"AppleDouble example","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"us-ascii","class":"mailcore::Attachment"},{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"1","mimeType":"application\/applefile","class":"mailcore::Attachment","filename":"%Aete_Editor_b1","attachment":"1"},{"partType":"single","uniqueID":"2","mimeType":"application\/octet-stream","class":"mailcore::Attachment","filename":"Aete_Editor_b1","attachment":"1"}]}}]}}} \ No newline at end of file +{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"atotic@mcom.com"},{"class":"mailcore::Address","mailbox":"jwz@mcom.com"}]},"from":{"class":"mailcore::Address","mailbox":"atotic@netscape.com"},"extraHeaders":{"Content-Type":"multipart\/mixed; boundary=\"========================_26885646==_\"","Received":"from neon.netscape.com (steroid.mcom.com [198.93.92.10]) by abattoir.netscape.com (8.6.10\/8.6.9) with ESMTP id QAA26158 for ; Mon, 26 Jun 1995 16:50:29 -0700","Mime-Version":"1.0","X-Sender":"atotic@198.93.92.10","X-VM-v5-Data":"([nil nil nil nil nil nil nil nil nil]\u000a\u0009[nil \"Mon\" \"26\" \"June\" \"1995\" \"16:53:52\" \"-0800\" \"Aleksandar Totic\" \"atotic@netscape.com\" nil \"6272\" \"AppleDouble example\" \"^Date:\" nil nil \"6\" nil nil (mark number \" 26-Jun-95 16:53 Aleks Toti6272 AppleDouble example\u00a5n\") nil]\u000a\u0009nil)"},"date":"804214432","messageID":"ac15067506021004778a@[198.93.92.66]","receivedDate":"804214432","subject":"AppleDouble example","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"1","mimeType":"application\/applefile","class":"mailcore::Attachment","filename":"%Aete_Editor_b1","attachment":"1"},{"partType":"single","uniqueID":"2","mimeType":"application\/octet-stream","class":"mailcore::Attachment","filename":"Aete_Editor_b1","attachment":"1"}]}}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/19 b/unittest/data/parser/output/mbox/jwz/19 index 32b7403ab..ca56693c3 100644 --- a/unittest/data/parser/output/mbox/jwz/19 +++ b/unittest/data/parser/output/mbox/jwz/19 @@ -1 +1 @@ -{"header":{"from":{"class":"mailcore::Address","displayName":"Gary Bolstridge","mailbox":"gary@GAROPA.NPT.NUWC.NAVY.MIL"},"extraHeaders":{"Content-Type":"Message\/rfc822","Lines":"16","Newsgroups":"rec.arts.bonsai","Comments":"Gated by NETNEWS@AUVM.AMERICAN.EDU","Mailer":"Elm [revision: 70.85]","Mime-Version":"1.0","Path":"flop.mcom.com!news.Stanford.EDU!bloom-beacon.mit.edu!hookup!paladin.american.edu!auvm!GAROPA.NPT.NUWC.NAVY.MIL!gary","X-Vue-Mime-Level":"4","X-Hpvue$Revision":"1.8 $"},"date":"798897009","sender":{"class":"mailcore::Address","displayName":"Internet Bonsai Club","mailbox":"BONSAI@CMS.CC.WAYNE.EDU"},"messageID":"BONSAI%95042607552288@CMS.CC.WAYNE.EDU","receivedDate":"798897009","subject":"Re: Newsletters & Shows","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"message","header":{"date":"978307200","messageID":"MyMessageID123@mail.gmail.com","receivedDate":"978307200","class":"mailcore::MessageHeader"},"class":"mailcore::MessagePart","mainPart":{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"us-ascii","class":"mailcore::Attachment"}}} \ No newline at end of file +{"header":{"from":{"class":"mailcore::Address","displayName":"Gary Bolstridge","mailbox":"gary@GAROPA.NPT.NUWC.NAVY.MIL"},"extraHeaders":{"Content-Type":"Message\/rfc822","Lines":"16","Newsgroups":"rec.arts.bonsai","Comments":"Gated by NETNEWS@AUVM.AMERICAN.EDU","Mailer":"Elm [revision: 70.85]","Mime-Version":"1.0","Path":"flop.mcom.com!news.Stanford.EDU!bloom-beacon.mit.edu!hookup!paladin.american.edu!auvm!GAROPA.NPT.NUWC.NAVY.MIL!gary","X-Vue-Mime-Level":"4","X-Hpvue$Revision":"1.8 $"},"date":"798897009","sender":{"class":"mailcore::Address","displayName":"Internet Bonsai Club","mailbox":"BONSAI@CMS.CC.WAYNE.EDU"},"messageID":"BONSAI%95042607552288@CMS.CC.WAYNE.EDU","receivedDate":"798897009","subject":"Re: Newsletters & Shows","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"message","header":{"date":"978307200","messageID":"MyMessageID123@mail.gmail.com","receivedDate":"978307200","class":"mailcore::MessageHeader"},"class":"mailcore::MessagePart","mainPart":{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/21 b/unittest/data/parser/output/mbox/jwz/21 index a1a1c3e0d..fd4e39c2b 100644 --- a/unittest/data/parser/output/mbox/jwz/21 +++ b/unittest/data/parser/output/mbox/jwz/21 @@ -1 +1 @@ -{"header":{"from":{"class":"mailcore::Address","mailbox":"MAILER-DAEMON@netscape.com"},"extraHeaders":{"Content-Type":"multipart\/mixed; boundary=\"RAA17252.798941312\/neon.netscape.com\"","Lines":"109","Approved":"usenet@netscape.com","NNTP-Posting-Host":"flop.mcom.com","Newsgroups":"mcom.incoming.client","Mime-Version":"1.0","Path":"flop.mcom.com!news-mail-gateway","Organization":"Local Mail\/News Gateway"},"date":"798941315","sender":{"class":"mailcore::Address","mailbox":"daemon@flop.mcom.com"},"messageID":"199504270008.RAA17252@neon.netscape.com","receivedDate":"798941315","subject":"Returned mail: Host unknown (Name server: maine.link.net: host not found)","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","class":"mailcore::Attachment"},{"partType":"message","header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"drwebb@maine.link.net"}]},"from":{"class":"mailcore::Address","displayName":"Christopher Lamey","mailbox":"client@netscape.com"},"extraHeaders":{"Return-Path":"client@netscape.com","X-URL":"news:server-2504951544190001@ub.mcom.com","Newsgroups":"mcom.incoming.client","X-Mailer":"Mozilla 1.1N (Macintosh; I; 68K)","Received":"from cronos.mcom.com (cronos.mcom.com [198.93.94.116]) by neon.netscape.com (950215.SGI.8.6.10\/8.6.9) with SMTP id RAA17240 for ; Wed, 26 Apr 1995 17:08:30 -0700","Organization":"Netscape Communications"},"date":"3954676448","messageID":"199504270008.RAA17240@neon.netscape.com","receivedDate":"3954676448","subject":"Re: 90 Day product Support","class":"mailcore::MessageHeader","references":["199504251257.IAA09959@maine.mainelink.net","server-2504951544190001@ub.mcom.com"]},"class":"mailcore::MessagePart","mainPart":{"partType":"single","uniqueID":"1","mimeType":"text\/plain","charset":"us-ascii","class":"mailcore::Attachment"}}]}}} \ No newline at end of file +{"header":{"from":{"class":"mailcore::Address","mailbox":"MAILER-DAEMON@netscape.com"},"extraHeaders":{"Content-Type":"multipart\/mixed; boundary=\"RAA17252.798941312\/neon.netscape.com\"","Lines":"109","Approved":"usenet@netscape.com","NNTP-Posting-Host":"flop.mcom.com","Newsgroups":"mcom.incoming.client","Mime-Version":"1.0","Path":"flop.mcom.com!news-mail-gateway","Organization":"Local Mail\/News Gateway"},"date":"798941315","sender":{"class":"mailcore::Address","mailbox":"daemon@flop.mcom.com"},"messageID":"199504270008.RAA17252@neon.netscape.com","receivedDate":"798941315","subject":"Returned mail: Host unknown (Name server: maine.link.net: host not found)","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","class":"mailcore::Attachment"},{"partType":"message","header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"drwebb@maine.link.net"}]},"from":{"class":"mailcore::Address","displayName":"Christopher Lamey","mailbox":"client@netscape.com"},"extraHeaders":{"Return-Path":"client@netscape.com","X-URL":"news:server-2504951544190001@ub.mcom.com","Newsgroups":"mcom.incoming.client","X-Mailer":"Mozilla 1.1N (Macintosh; I; 68K)","Received":"from cronos.mcom.com (cronos.mcom.com [198.93.94.116]) by neon.netscape.com (950215.SGI.8.6.10\/8.6.9) with SMTP id RAA17240 for ; Wed, 26 Apr 1995 17:08:30 -0700","Organization":"Netscape Communications"},"date":"3954676448","messageID":"199504270008.RAA17240@neon.netscape.com","receivedDate":"3954676448","subject":"Re: 90 Day product Support","class":"mailcore::MessageHeader","references":["199504251257.IAA09959@maine.mainelink.net","server-2504951544190001@ub.mcom.com"]},"class":"mailcore::MessagePart","mainPart":{"partType":"single","uniqueID":"1","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"}}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/30 b/unittest/data/parser/output/mbox/jwz/30 index 623b0f93b..9bf2f86d7 100644 --- a/unittest/data/parser/output/mbox/jwz/30 +++ b/unittest/data/parser/output/mbox/jwz/30 @@ -1 +1 @@ -{"header":{"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"X-URL":"news:3nl0gd$l55@flop.mcom.com","Content-Type":"message\/rfc822","Lines":"103","NNTP-Posting-Host":"lr1-port2.mcom.com","Newsgroups":"mcom.test","X-Mailer":"Mozilla 1.1 (X11; U; Linux 1.1.47 i586)","Content-Transfer-Encoding":"7bit","Mime-Version":"1.0","Path":"flop.mcom.com!usenet","Organization":"Netscape Communications Corporation, Mozilla Division"},"date":"798886220","messageID":"3nl1gc$lkb@flop.mcom.com","receivedDate":"798886220","subject":"Re: attach this, spanky","class":"mailcore::MessageHeader","references":["3na39m$3lf@flop.mcom.com","3nkvv6$kmf@flop.mcom.com","3nl02e$kmf@flop.mcom.com","3nl0gd$l55@flop.mcom.com"]},"class":"mailcore::MessageParser","mainPart":{"partType":"message","header":{"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"X-URL":"news:3nl02e$kmf@flop.mcom.com","Lines":"86","NNTP-Posting-Host":"lr1-port2.mcom.com","Newsgroups":"mcom.test","X-Mailer":"Mozilla 1.1 (X11; U; Linux 1.1.47 i586)","Path":"flop.mcom.com!usenet","Organization":"Netscape Communications Corporation, Mozilla Division"},"date":"798885197","messageID":"3nl0gd$l55@flop.mcom.com","receivedDate":"798885197","subject":"Re: attach this, spanky","class":"mailcore::MessageHeader","references":["3na39m$3lf@flop.mcom.com","3nkvv6$kmf@flop.mcom.com","3nl02e$kmf@flop.mcom.com"]},"class":"mailcore::MessagePart","mainPart":{"partType":"message","header":{"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"X-URL":"news:3nkvv6$kmf@flop.mcom.com","Lines":"69","NNTP-Posting-Host":"lr1-port2.mcom.com","Newsgroups":"mcom.test","X-Mailer":"Mozilla 1.1 (X11; U; Linux 1.1.47 i586)","Path":"flop.mcom.com!usenet","Organization":"Netscape Communications Corporation, Mozilla Division"},"date":"798884750","messageID":"3nl02e$kmf@flop.mcom.com","receivedDate":"798884750","subject":"Re: attach this, spanky","class":"mailcore::MessageHeader","references":["3na39m$3lf@flop.mcom.com","3nkvv6$kmf@flop.mcom.com"]},"class":"mailcore::MessagePart","mainPart":{"partType":"message","header":{"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"X-URL":"news:3na39m$3lf@flop.mcom.com","Lines":"52","NNTP-Posting-Host":"lr1-port2.mcom.com","Newsgroups":"mcom.test","X-Mailer":"Mozilla 1.1 (X11; U; Linux 1.1.47 i586)","Path":"flop.mcom.com!usenet","Organization":"Netscape Communications Corporation, Mozilla Division"},"date":"798884646","messageID":"3nkvv6$kmf@flop.mcom.com","receivedDate":"798884646","subject":"attach this, spanky","class":"mailcore::MessageHeader","references":["3na39m$3lf@flop.mcom.com"]},"class":"mailcore::MessagePart","mainPart":{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"us-ascii","class":"mailcore::Attachment"},{"partType":"message","header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"sharoni"}]},"from":{"class":"mailcore::Address","displayName":"Sharon Iimura","mailbox":"sharoni"},"extraHeaders":{"X-URL":"http:\/\/home.netscape.com\/eng\/mozilla\/1.1\/unix-1.1.html","Lines":"22","NNTP-Posting-Host":"diva.mcom.com","Newsgroups":"mcom.test","X-Mailer":"Mozilla 1.1 (X11; U; SunOS 5.4 sun4m)","Path":"flop.mcom.com!usenet","Organization":"Netscape Communications Corporations"},"date":"798527606","messageID":"3na39m$3lf@flop.mcom.com","receivedDate":"798527606","subject":"Test for Bug 4498","class":"mailcore::MessageHeader"},"class":"mailcore::MessagePart","mainPart":{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"1","mimeType":"text\/plain","charset":"us-ascii","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"2","mimeType":"text\/html","class":"mailcore::Attachment"}]}}}]}}}}}} \ No newline at end of file +{"header":{"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"X-URL":"news:3nl0gd$l55@flop.mcom.com","Content-Type":"message\/rfc822","Lines":"103","NNTP-Posting-Host":"lr1-port2.mcom.com","Newsgroups":"mcom.test","X-Mailer":"Mozilla 1.1 (X11; U; Linux 1.1.47 i586)","Content-Transfer-Encoding":"7bit","Mime-Version":"1.0","Path":"flop.mcom.com!usenet","Organization":"Netscape Communications Corporation, Mozilla Division"},"date":"798886220","messageID":"3nl1gc$lkb@flop.mcom.com","receivedDate":"798886220","subject":"Re: attach this, spanky","class":"mailcore::MessageHeader","references":["3na39m$3lf@flop.mcom.com","3nkvv6$kmf@flop.mcom.com","3nl02e$kmf@flop.mcom.com","3nl0gd$l55@flop.mcom.com"]},"class":"mailcore::MessageParser","mainPart":{"partType":"message","header":{"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"X-URL":"news:3nl02e$kmf@flop.mcom.com","Lines":"86","NNTP-Posting-Host":"lr1-port2.mcom.com","Newsgroups":"mcom.test","X-Mailer":"Mozilla 1.1 (X11; U; Linux 1.1.47 i586)","Path":"flop.mcom.com!usenet","Organization":"Netscape Communications Corporation, Mozilla Division"},"date":"798885197","messageID":"3nl0gd$l55@flop.mcom.com","receivedDate":"798885197","subject":"Re: attach this, spanky","class":"mailcore::MessageHeader","references":["3na39m$3lf@flop.mcom.com","3nkvv6$kmf@flop.mcom.com","3nl02e$kmf@flop.mcom.com"]},"class":"mailcore::MessagePart","mainPart":{"partType":"message","header":{"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"X-URL":"news:3nkvv6$kmf@flop.mcom.com","Lines":"69","NNTP-Posting-Host":"lr1-port2.mcom.com","Newsgroups":"mcom.test","X-Mailer":"Mozilla 1.1 (X11; U; Linux 1.1.47 i586)","Path":"flop.mcom.com!usenet","Organization":"Netscape Communications Corporation, Mozilla Division"},"date":"798884750","messageID":"3nl02e$kmf@flop.mcom.com","receivedDate":"798884750","subject":"Re: attach this, spanky","class":"mailcore::MessageHeader","references":["3na39m$3lf@flop.mcom.com","3nkvv6$kmf@flop.mcom.com"]},"class":"mailcore::MessagePart","mainPart":{"partType":"message","header":{"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"X-URL":"news:3na39m$3lf@flop.mcom.com","Lines":"52","NNTP-Posting-Host":"lr1-port2.mcom.com","Newsgroups":"mcom.test","X-Mailer":"Mozilla 1.1 (X11; U; Linux 1.1.47 i586)","Path":"flop.mcom.com!usenet","Organization":"Netscape Communications Corporation, Mozilla Division"},"date":"798884646","messageID":"3nkvv6$kmf@flop.mcom.com","receivedDate":"798884646","subject":"attach this, spanky","class":"mailcore::MessageHeader","references":["3na39m$3lf@flop.mcom.com"]},"class":"mailcore::MessagePart","mainPart":{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"message","header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"sharoni"}]},"from":{"class":"mailcore::Address","displayName":"Sharon Iimura","mailbox":"sharoni"},"extraHeaders":{"X-URL":"http:\/\/home.netscape.com\/eng\/mozilla\/1.1\/unix-1.1.html","Lines":"22","NNTP-Posting-Host":"diva.mcom.com","Newsgroups":"mcom.test","X-Mailer":"Mozilla 1.1 (X11; U; SunOS 5.4 sun4m)","Path":"flop.mcom.com!usenet","Organization":"Netscape Communications Corporations"},"date":"798527606","messageID":"3na39m$3lf@flop.mcom.com","receivedDate":"798527606","subject":"Test for Bug 4498","class":"mailcore::MessageHeader"},"class":"mailcore::MessagePart","mainPart":{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"1","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"2","mimeType":"text\/html","class":"mailcore::Attachment"}]}}}]}}}}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/33 b/unittest/data/parser/output/mbox/jwz/33 index c812c554c..6a4845535 100644 --- a/unittest/data/parser/output/mbox/jwz/33 +++ b/unittest/data/parser/output/mbox/jwz/33 @@ -1 +1 @@ -{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"msgs"}]},"from":{"class":"mailcore::Address","displayName":"Tom Brinck","mailbox":"hammer"},"extraHeaders":{"Return-Path":"","Content-Type":"multipart\/alternative; \u000a\u0009boundary=\"Interpart.Boundary.ge=Dx0m0M26IQ17rd0\"","Received":"from greenbush.bellcore.com by bambam.bellcore.com (4.1\/4.7)\u000a\u0009id for andrew; Wed, 3 Jun 92 13:20:09 EDT","Mime-Version":"1.0","X-Andrew-Authenticated-As":"0;bambam.galaxy;The Root of All Evil","X-Andrew-Message-Size":"323+1"},"date":"707592001","messageID":"8e=Dx1S0M26IE17rlY@thumper.bellcore.com","receivedDate":"707592001","subject":"misdirected chinese mail","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/alternative","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"1","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"2","mimeType":"image\/x-xbm","contentDescription":"Push here to see your name","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"3","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"}]}}]}}} \ No newline at end of file +{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"msgs"}]},"from":{"class":"mailcore::Address","displayName":"Tom Brinck","mailbox":"hammer"},"extraHeaders":{"Return-Path":"","Content-Type":"multipart\/alternative; \u000a\u0009boundary=\"Interpart.Boundary.ge=Dx0m0M26IQ17rd0\"","Received":"from greenbush.bellcore.com by bambam.bellcore.com (4.1\/4.7)\u000a\u0009id for andrew; Wed, 3 Jun 92 13:20:09 EDT","Mime-Version":"1.0","X-Andrew-Authenticated-As":"0;bambam.galaxy;The Root of All Evil","X-Andrew-Message-Size":"323+1"},"date":"707592001","messageID":"8e=Dx1S0M26IE17rlY@thumper.bellcore.com","receivedDate":"707592001","subject":"misdirected chinese mail","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/alternative","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"1","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"2","mimeType":"image\/x-xbm","contentDescription":"Push here to see your name","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"3","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"}]}}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/38 b/unittest/data/parser/output/mbox/jwz/38 index f8ee3f647..8ba87fd2b 100644 --- a/unittest/data/parser/output/mbox/jwz/38 +++ b/unittest/data/parser/output/mbox/jwz/38 @@ -1 +1 @@ -{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"}]},"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"Content-Type":"multipart\/mixed; boundary=\"------------167E2781446B\"","MIME-Version":"1.0","X-Mozilla-Status":"0001","X-Mailer":"Mozilla 3.0b5 (X11; U; IRIX 5.3 IP22)","Content-Length":"3748","Organization":"Netscape Communications Corporation, Mozilla Division"},"date":"834733549","messageID":"31C105ED.41C62@netscape.com","receivedDate":"834733549","subject":"attached image cache test (test 2: inline disposition)","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"message","header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"}]},"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"X-Mailer":"Mozilla 3.0b5 (X11; U; IRIX 5.3 IP22)","Organization":"Netscape Communications Corporation, Mozilla Division"},"date":"834732836","messageID":"31C10324.41C62@netscape.com","receivedDate":"834732836","subject":"test message one (a message with a text\/plain body)","class":"mailcore::MessageHeader"},"class":"mailcore::MessagePart","mainPart":{"partType":"single","uniqueID":"5","mimeType":"text\/plain","charset":"us-ascii","class":"mailcore::Attachment"}},{"partType":"single","uniqueID":"0","mimeType":"image\/gif","inlineAttachment":"1","class":"mailcore::Attachment","filename":"one.gif"},{"partType":"single","uniqueID":"1","mimeType":"image\/gif","inlineAttachment":"1","class":"mailcore::Attachment","filename":"two.gif"},{"partType":"single","uniqueID":"2","mimeType":"image\/gif","inlineAttachment":"1","class":"mailcore::Attachment","filename":"three.gif"},{"partType":"single","uniqueID":"3","mimeType":"image\/gif","inlineAttachment":"1","class":"mailcore::Attachment","filename":"four.gif"},{"partType":"message","header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"}]},"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"X-Mailer":"Mozilla 3.0b5 (X11; U; IRIX 5.3 IP22)","Organization":"Netscape Communications Corporation, Mozilla Division"},"date":"834732851","messageID":"31C10333.167E2@netscape.com","receivedDate":"834732851","subject":"test message two (a message with a text\/plain body)","class":"mailcore::MessageHeader"},"class":"mailcore::MessagePart","mainPart":{"partType":"single","uniqueID":"6","mimeType":"text\/plain","charset":"us-ascii","class":"mailcore::Attachment"}},{"partType":"message","header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"}]},"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"X-Mailer":"Mozilla 3.0b5 (X11; U; IRIX 5.3 IP22)","Organization":"Netscape Communications Corporation, Mozilla Division"},"date":"834733814","messageID":"31C106F6.59E22@netscape.com","receivedDate":"834733814","subject":"a message which contains a message\u000a\u0009(which contains a message, which has a text\/plain body)","class":"mailcore::MessageHeader"},"class":"mailcore::MessagePart","mainPart":{"partType":"message","header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"}]},"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"X-Mailer":"Mozilla 3.0b5 (X11; U; IRIX 5.3 IP22)","Organization":"Netscape Communications Corporation, Mozilla Division"},"date":"834733795","messageID":"31C106E3.15FB2@netscape.com","receivedDate":"834733795","subject":"a message which contains a message\u000a\u0009(which has a text\/plain body)","class":"mailcore::MessageHeader"},"class":"mailcore::MessagePart","mainPart":{"partType":"message","header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"}]},"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"X-Mailer":"Mozilla 3.0b5 (X11; U; IRIX 5.3 IP22)","Organization":"Netscape Communications Corporation, Mozilla Division"},"date":"834733778","messageID":"31C106D2.794B2@netscape.com","receivedDate":"834733778","subject":"a message with a text\/plain body","class":"mailcore::MessageHeader"},"class":"mailcore::MessagePart","mainPart":{"partType":"single","uniqueID":"7","mimeType":"text\/plain","charset":"us-ascii","class":"mailcore::Attachment"}}}},{"partType":"single","uniqueID":"4","mimeType":"text\/html","inlineAttachment":"1","class":"mailcore::Attachment"}]}}} \ No newline at end of file +{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"}]},"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"Content-Type":"multipart\/mixed; boundary=\"------------167E2781446B\"","MIME-Version":"1.0","X-Mozilla-Status":"0001","X-Mailer":"Mozilla 3.0b5 (X11; U; IRIX 5.3 IP22)","Content-Length":"3748","Organization":"Netscape Communications Corporation, Mozilla Division"},"date":"834733549","messageID":"31C105ED.41C62@netscape.com","receivedDate":"834733549","subject":"attached image cache test (test 2: inline disposition)","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"message","header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"}]},"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"X-Mailer":"Mozilla 3.0b5 (X11; U; IRIX 5.3 IP22)","Organization":"Netscape Communications Corporation, Mozilla Division"},"date":"834732836","messageID":"31C10324.41C62@netscape.com","receivedDate":"834732836","subject":"test message one (a message with a text\/plain body)","class":"mailcore::MessageHeader"},"class":"mailcore::MessagePart","mainPart":{"partType":"single","uniqueID":"5","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"}},{"partType":"single","uniqueID":"0","mimeType":"image\/gif","inlineAttachment":"1","class":"mailcore::Attachment","filename":"one.gif"},{"partType":"single","uniqueID":"1","mimeType":"image\/gif","inlineAttachment":"1","class":"mailcore::Attachment","filename":"two.gif"},{"partType":"single","uniqueID":"2","mimeType":"image\/gif","inlineAttachment":"1","class":"mailcore::Attachment","filename":"three.gif"},{"partType":"single","uniqueID":"3","mimeType":"image\/gif","inlineAttachment":"1","class":"mailcore::Attachment","filename":"four.gif"},{"partType":"message","header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"}]},"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"X-Mailer":"Mozilla 3.0b5 (X11; U; IRIX 5.3 IP22)","Organization":"Netscape Communications Corporation, Mozilla Division"},"date":"834732851","messageID":"31C10333.167E2@netscape.com","receivedDate":"834732851","subject":"test message two (a message with a text\/plain body)","class":"mailcore::MessageHeader"},"class":"mailcore::MessagePart","mainPart":{"partType":"single","uniqueID":"6","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"}},{"partType":"message","header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"}]},"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"X-Mailer":"Mozilla 3.0b5 (X11; U; IRIX 5.3 IP22)","Organization":"Netscape Communications Corporation, Mozilla Division"},"date":"834733814","messageID":"31C106F6.59E22@netscape.com","receivedDate":"834733814","subject":"a message which contains a message\u000a\u0009(which contains a message, which has a text\/plain body)","class":"mailcore::MessageHeader"},"class":"mailcore::MessagePart","mainPart":{"partType":"message","header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"}]},"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"X-Mailer":"Mozilla 3.0b5 (X11; U; IRIX 5.3 IP22)","Organization":"Netscape Communications Corporation, Mozilla Division"},"date":"834733795","messageID":"31C106E3.15FB2@netscape.com","receivedDate":"834733795","subject":"a message which contains a message\u000a\u0009(which has a text\/plain body)","class":"mailcore::MessageHeader"},"class":"mailcore::MessagePart","mainPart":{"partType":"message","header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"}]},"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"X-Mailer":"Mozilla 3.0b5 (X11; U; IRIX 5.3 IP22)","Organization":"Netscape Communications Corporation, Mozilla Division"},"date":"834733778","messageID":"31C106D2.794B2@netscape.com","receivedDate":"834733778","subject":"a message with a text\/plain body","class":"mailcore::MessageHeader"},"class":"mailcore::MessagePart","mainPart":{"partType":"single","uniqueID":"7","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"}}}},{"partType":"single","uniqueID":"4","mimeType":"text\/html","inlineAttachment":"1","class":"mailcore::Attachment"}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/39 b/unittest/data/parser/output/mbox/jwz/39 index 8a8ebda21..d59bec00c 100644 --- a/unittest/data/parser/output/mbox/jwz/39 +++ b/unittest/data/parser/output/mbox/jwz/39 @@ -1 +1 @@ -{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"}]},"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"Content-Type":"multipart\/mixed; boundary=\"------------167E2781446B\"","MIME-Version":"1.0","X-Mozilla-Status":"0001","X-Mailer":"Mozilla 3.0b5 (X11; U; IRIX 5.3 IP22)","Content-Length":"3748","Organization":"Netscape Communications Corporation, Mozilla Division"},"date":"834733549","messageID":"31C105ED.41C6@netscape.com","receivedDate":"834733549","subject":"attached image cache test (test 1: attachment disposition)","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"message","header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"}]},"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"X-Mailer":"Mozilla 3.0b5 (X11; U; IRIX 5.3 IP22)","Organization":"Netscape Communications Corporation, Mozilla Division"},"date":"834732836","messageID":"31C10324.41C6@netscape.com","receivedDate":"834732836","subject":"test message one (a message with a text\/plain body)","class":"mailcore::MessageHeader"},"class":"mailcore::MessagePart","mainPart":{"partType":"single","uniqueID":"5","mimeType":"text\/plain","charset":"us-ascii","class":"mailcore::Attachment"}},{"partType":"single","uniqueID":"0","mimeType":"image\/gif","class":"mailcore::Attachment","filename":"one.gif","attachment":"1"},{"partType":"single","uniqueID":"1","mimeType":"image\/gif","class":"mailcore::Attachment","filename":"two.gif","attachment":"1"},{"partType":"single","uniqueID":"2","mimeType":"image\/gif","class":"mailcore::Attachment","filename":"three.gif","attachment":"1"},{"partType":"single","uniqueID":"3","mimeType":"image\/gif","class":"mailcore::Attachment","filename":"four.gif","attachment":"1"},{"partType":"message","header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"}]},"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"X-Mailer":"Mozilla 3.0b5 (X11; U; IRIX 5.3 IP22)","Organization":"Netscape Communications Corporation, Mozilla Division"},"date":"834732851","messageID":"31C10333.167E@netscape.com","receivedDate":"834732851","subject":"test message two (a message with a text\/plain body)","class":"mailcore::MessageHeader"},"class":"mailcore::MessagePart","mainPart":{"partType":"single","uniqueID":"6","mimeType":"text\/plain","charset":"us-ascii","class":"mailcore::Attachment"}},{"partType":"message","header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"}]},"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"X-Mailer":"Mozilla 3.0b5 (X11; U; IRIX 5.3 IP22)","Organization":"Netscape Communications Corporation, Mozilla Division"},"date":"834733814","messageID":"31C106F6.59E2@netscape.com","receivedDate":"834733814","subject":"a message which contains a message\u000a\u0009(which contains a message, which has a text\/plain body)","class":"mailcore::MessageHeader"},"class":"mailcore::MessagePart","mainPart":{"partType":"message","header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"}]},"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"X-Mailer":"Mozilla 3.0b5 (X11; U; IRIX 5.3 IP22)","Organization":"Netscape Communications Corporation, Mozilla Division"},"date":"834733795","messageID":"31C106E3.15FB@netscape.com","receivedDate":"834733795","subject":"a message which contains a message\u000a\u0009(which has a text\/plain body)","class":"mailcore::MessageHeader"},"class":"mailcore::MessagePart","mainPart":{"partType":"message","header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"}]},"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"X-Mailer":"Mozilla 3.0b5 (X11; U; IRIX 5.3 IP22)","Organization":"Netscape Communications Corporation, Mozilla Division"},"date":"834733778","messageID":"31C106D2.794B@netscape.com","receivedDate":"834733778","subject":"a message with a text\/plain body","class":"mailcore::MessageHeader"},"class":"mailcore::MessagePart","mainPart":{"partType":"single","uniqueID":"7","mimeType":"text\/plain","charset":"us-ascii","class":"mailcore::Attachment"}}}},{"partType":"single","uniqueID":"4","mimeType":"text\/html","class":"mailcore::Attachment","attachment":"1"}]}}} \ No newline at end of file +{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"}]},"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"Content-Type":"multipart\/mixed; boundary=\"------------167E2781446B\"","MIME-Version":"1.0","X-Mozilla-Status":"0001","X-Mailer":"Mozilla 3.0b5 (X11; U; IRIX 5.3 IP22)","Content-Length":"3748","Organization":"Netscape Communications Corporation, Mozilla Division"},"date":"834733549","messageID":"31C105ED.41C6@netscape.com","receivedDate":"834733549","subject":"attached image cache test (test 1: attachment disposition)","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"message","header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"}]},"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"X-Mailer":"Mozilla 3.0b5 (X11; U; IRIX 5.3 IP22)","Organization":"Netscape Communications Corporation, Mozilla Division"},"date":"834732836","messageID":"31C10324.41C6@netscape.com","receivedDate":"834732836","subject":"test message one (a message with a text\/plain body)","class":"mailcore::MessageHeader"},"class":"mailcore::MessagePart","mainPart":{"partType":"single","uniqueID":"5","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"}},{"partType":"single","uniqueID":"0","mimeType":"image\/gif","class":"mailcore::Attachment","filename":"one.gif","attachment":"1"},{"partType":"single","uniqueID":"1","mimeType":"image\/gif","class":"mailcore::Attachment","filename":"two.gif","attachment":"1"},{"partType":"single","uniqueID":"2","mimeType":"image\/gif","class":"mailcore::Attachment","filename":"three.gif","attachment":"1"},{"partType":"single","uniqueID":"3","mimeType":"image\/gif","class":"mailcore::Attachment","filename":"four.gif","attachment":"1"},{"partType":"message","header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"}]},"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"X-Mailer":"Mozilla 3.0b5 (X11; U; IRIX 5.3 IP22)","Organization":"Netscape Communications Corporation, Mozilla Division"},"date":"834732851","messageID":"31C10333.167E@netscape.com","receivedDate":"834732851","subject":"test message two (a message with a text\/plain body)","class":"mailcore::MessageHeader"},"class":"mailcore::MessagePart","mainPart":{"partType":"single","uniqueID":"6","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"}},{"partType":"message","header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"}]},"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"X-Mailer":"Mozilla 3.0b5 (X11; U; IRIX 5.3 IP22)","Organization":"Netscape Communications Corporation, Mozilla Division"},"date":"834733814","messageID":"31C106F6.59E2@netscape.com","receivedDate":"834733814","subject":"a message which contains a message\u000a\u0009(which contains a message, which has a text\/plain body)","class":"mailcore::MessageHeader"},"class":"mailcore::MessagePart","mainPart":{"partType":"message","header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"}]},"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"X-Mailer":"Mozilla 3.0b5 (X11; U; IRIX 5.3 IP22)","Organization":"Netscape Communications Corporation, Mozilla Division"},"date":"834733795","messageID":"31C106E3.15FB@netscape.com","receivedDate":"834733795","subject":"a message which contains a message\u000a\u0009(which has a text\/plain body)","class":"mailcore::MessageHeader"},"class":"mailcore::MessagePart","mainPart":{"partType":"message","header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"}]},"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"X-Mailer":"Mozilla 3.0b5 (X11; U; IRIX 5.3 IP22)","Organization":"Netscape Communications Corporation, Mozilla Division"},"date":"834733778","messageID":"31C106D2.794B@netscape.com","receivedDate":"834733778","subject":"a message with a text\/plain body","class":"mailcore::MessageHeader"},"class":"mailcore::MessagePart","mainPart":{"partType":"single","uniqueID":"7","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"}}}},{"partType":"single","uniqueID":"4","mimeType":"text\/html","class":"mailcore::Attachment","attachment":"1"}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/4 b/unittest/data/parser/output/mbox/jwz/4 index 1e5304b78..d3f1bb016 100644 --- a/unittest/data/parser/output/mbox/jwz/4 +++ b/unittest/data/parser/output/mbox/jwz/4 @@ -1 +1 @@ -{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Ned Freed","mailbox":"ned@innosoft.com"},{"class":"mailcore::Address","mailbox":"ysato@etl.go.jp"}]},"from":{"class":"mailcore::Address","displayName":"Nathaniel Borenstein","mailbox":"nsb"},"extraHeaders":{"Content-Type":"multipart\/alternative; \u000a\u0009boundary=\"Interpart.Boundary.IeCBvV20M2YtEoUA0A\"","MIME-Version":"1.0","Received":"from Messages.8.5.N.CUILIB.3.45.SNAP.NOT.LINKED.greenbush.galaxy.sun4.41\u000a via MS.5.6.greenbush.galaxy.sun4_41;\u000a Fri, 12 Jun 1992 13:29:05 -0400 (EDT)","X-Andrew-Authenticated-As":"4099;greenbush.galaxy;Nathaniel Borenstein","X-Andrew-Message-Size":"152+1"},"date":"708370145","messageID":"UeCBvVq0M2Yt4oUA83@thumper.bellcore.com","receivedDate":"708370145","subject":"MIME & int'l mail","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/alternative","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"1","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"2","mimeType":"image\/gif","contentDescription":"Some international characters","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"3","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"}]}}]}}} \ No newline at end of file +{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Ned Freed","mailbox":"ned@innosoft.com"},{"class":"mailcore::Address","mailbox":"ysato@etl.go.jp"}]},"from":{"class":"mailcore::Address","displayName":"Nathaniel Borenstein","mailbox":"nsb"},"extraHeaders":{"Content-Type":"multipart\/alternative; \u000a\u0009boundary=\"Interpart.Boundary.IeCBvV20M2YtEoUA0A\"","MIME-Version":"1.0","Received":"from Messages.8.5.N.CUILIB.3.45.SNAP.NOT.LINKED.greenbush.galaxy.sun4.41\u000a via MS.5.6.greenbush.galaxy.sun4_41;\u000a Fri, 12 Jun 1992 13:29:05 -0400 (EDT)","X-Andrew-Authenticated-As":"4099;greenbush.galaxy;Nathaniel Borenstein","X-Andrew-Message-Size":"152+1"},"date":"708370145","messageID":"UeCBvVq0M2Yt4oUA83@thumper.bellcore.com","receivedDate":"708370145","subject":"MIME & int'l mail","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/alternative","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"1","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"2","mimeType":"image\/gif","contentDescription":"Some international characters","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"3","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"}]}}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/47 b/unittest/data/parser/output/mbox/jwz/47 index 9d7abda22..851a6c1b7 100644 --- a/unittest/data/parser/output/mbox/jwz/47 +++ b/unittest/data/parser/output/mbox/jwz/47 @@ -1 +1 @@ -{"header":{"cc":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"Neil.Katin@eng.sun.com"},{"class":"mailcore::Address","mailbox":"ietf-822@dimacs.rutgers.edu"}]},"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Keld J|rn Simonsen","mailbox":"keld@dkuug.dk"}]},"from":{"class":"mailcore::Address","displayName":"Mark Crispin","mailbox":"MRC@panda.com"},"extraHeaders":{"Return-Path":"","Content-Type":"MULTIPART\/MIXED;boundary=\"16816888-2078917053-688452093:#2321\"","MIME-Version":"RFC-XXXX","Received":"from dimacs.rutgers.edu by thumper.bellcore.com (4.1\/4.7)\u000a\u0009id for andrew; Sat, 26 Oct 91 03:16:34 EDT","X-Andrew-Authenticated-As":"0;bambam.sins;The Root of All Evil"},"date":"688451978","sender":{"class":"mailcore::Address","displayName":"Mark Crispin","mailbox":"mrc@ikkoku-kan.panda.com"},"messageID":"MailManager.688451978.2321.mrc@Ikkoku-Kan.Panda.COM","receivedDate":"688451978","subject":"re: more content-charset stuff","class":"mailcore::MessageHeader","inReplyTo":["9110251926.AA11580@dkuug.dk"]},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"1","mimeType":"audio\/basic","contentDescription":"voice mail","class":"mailcore::Attachment"}]}}} \ No newline at end of file +{"header":{"cc":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"Neil.Katin@eng.sun.com"},{"class":"mailcore::Address","mailbox":"ietf-822@dimacs.rutgers.edu"}]},"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Keld J|rn Simonsen","mailbox":"keld@dkuug.dk"}]},"from":{"class":"mailcore::Address","displayName":"Mark Crispin","mailbox":"MRC@panda.com"},"extraHeaders":{"Return-Path":"","Content-Type":"MULTIPART\/MIXED;boundary=\"16816888-2078917053-688452093:#2321\"","MIME-Version":"RFC-XXXX","Received":"from dimacs.rutgers.edu by thumper.bellcore.com (4.1\/4.7)\u000a\u0009id for andrew; Sat, 26 Oct 91 03:16:34 EDT","X-Andrew-Authenticated-As":"0;bambam.sins;The Root of All Evil"},"date":"688451978","sender":{"class":"mailcore::Address","displayName":"Mark Crispin","mailbox":"mrc@ikkoku-kan.panda.com"},"messageID":"MailManager.688451978.2321.mrc@Ikkoku-Kan.Panda.COM","receivedDate":"688451978","subject":"re: more content-charset stuff","class":"mailcore::MessageHeader","inReplyTo":["9110251926.AA11580@dkuug.dk"]},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"1","mimeType":"audio\/basic","contentDescription":"voice mail","class":"mailcore::Attachment"}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/49 b/unittest/data/parser/output/mbox/jwz/49 index 562dd35c4..33fd29b73 100644 --- a/unittest/data/parser/output/mbox/jwz/49 +++ b/unittest/data/parser/output/mbox/jwz/49 @@ -1 +1 @@ -{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Marshall Rose","mailbox":"mrose@dbc.mtview.ca.us"}]},"from":{"class":"mailcore::Address","displayName":"Nathaniel Borenstein","mailbox":"nsb"},"extraHeaders":{"Content-Type":"multipart\/alternative; \u000a\u0009boundary=\"Interpart.Boundary.EegBWL:0M2YtE1Y78F\"","MIME-Version":"1.0","Received":"from Messages.8.5.N.CUILIB.3.45.SNAP.NOT.LINKED.greenbush.galaxy.sun4.41\u000a via MS.5.6.greenbush.galaxy.sun4_41;\u000a Fri, 11 Sep 1992 13:34:20 -0400 (EDT)","X-Andrew-Authenticated-As":"4099;greenbush.galaxy;Nathaniel Borenstein","X-Andrew-Message-Size":"948+7"},"date":"716232860","messageID":"8egBWQW0M2YtE1Y7Ea@thumper.bellcore.com","receivedDate":"716232860","subject":"Re: I'd like your opinion","class":"mailcore::MessageHeader","inReplyTo":["7821.715397074@dbc.mtview.ca.us"],"references":["7821.715397074@dbc.mtview.ca.us"]},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/alternative","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"1","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"2","mimeType":"image\/gif","contentDescription":"snapshot 1","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"3","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"4","mimeType":"image\/gif","contentDescription":"snapshot 2","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"5","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"6","mimeType":"image\/gif","contentDescription":"snapshot 3","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"7","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"8","mimeType":"image\/gif","contentDescription":"snapshot 4","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"9","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"10","mimeType":"image\/gif","contentDescription":"snapshot 5","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"11","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"12","mimeType":"image\/gif","contentDescription":"snapshot 6","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"13","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"14","mimeType":"image\/gif","contentDescription":"snapshot 7","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"15","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"}]}}]}}} \ No newline at end of file +{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Marshall Rose","mailbox":"mrose@dbc.mtview.ca.us"}]},"from":{"class":"mailcore::Address","displayName":"Nathaniel Borenstein","mailbox":"nsb"},"extraHeaders":{"Content-Type":"multipart\/alternative; \u000a\u0009boundary=\"Interpart.Boundary.EegBWL:0M2YtE1Y78F\"","MIME-Version":"1.0","Received":"from Messages.8.5.N.CUILIB.3.45.SNAP.NOT.LINKED.greenbush.galaxy.sun4.41\u000a via MS.5.6.greenbush.galaxy.sun4_41;\u000a Fri, 11 Sep 1992 13:34:20 -0400 (EDT)","X-Andrew-Authenticated-As":"4099;greenbush.galaxy;Nathaniel Borenstein","X-Andrew-Message-Size":"948+7"},"date":"716232860","messageID":"8egBWQW0M2YtE1Y7Ea@thumper.bellcore.com","receivedDate":"716232860","subject":"Re: I'd like your opinion","class":"mailcore::MessageHeader","inReplyTo":["7821.715397074@dbc.mtview.ca.us"],"references":["7821.715397074@dbc.mtview.ca.us"]},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/alternative","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"1","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"2","mimeType":"image\/gif","contentDescription":"snapshot 1","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"3","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"4","mimeType":"image\/gif","contentDescription":"snapshot 2","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"5","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"6","mimeType":"image\/gif","contentDescription":"snapshot 3","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"7","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"8","mimeType":"image\/gif","contentDescription":"snapshot 4","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"9","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"10","mimeType":"image\/gif","contentDescription":"snapshot 5","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"11","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"12","mimeType":"image\/gif","contentDescription":"snapshot 6","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"13","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"14","mimeType":"image\/gif","contentDescription":"snapshot 7","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"15","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"}]}}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/56 b/unittest/data/parser/output/mbox/jwz/56 index 114207f9e..c0a34e19b 100644 --- a/unittest/data/parser/output/mbox/jwz/56 +++ b/unittest/data/parser/output/mbox/jwz/56 @@ -1 +1 @@ -{"header":{"cc":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Brad Huntting","mailbox":"huntting@advtech.uswest.com"}]},"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Nathaniel Borenstein","mailbox":"nsb@thumper.bellcore.com"}]},"from":{"class":"mailcore::Address","displayName":"Brad Huntting","mailbox":"huntting@advtech.uswest.com"},"extraHeaders":{"Return-Path":"","Content-Type":"multipart\/alternative; \u000a\u0009boundary=\"Interpart.Boundary.4elpQlO23F868cEkpa\"","Received":"from thumper.bellcore.com by greenbush.bellcore.com (4.1\/4.7)\u000a\u0009id for nsb; Mon, 28 Sep 92 15:04:32 EDT","Mime-Version":"1.0","X-Andrew-Message-Size":"648+1"},"date":"717707057","messageID":"gelpQlq23F86McEkxs@futureworld","receivedDate":"717707057","subject":"Fwd: test of weather","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/alternative","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"1","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"2","mimeType":"image\/gif","contentDescription":"Weather map","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"3","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"}]}}]}}} \ No newline at end of file +{"header":{"cc":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Brad Huntting","mailbox":"huntting@advtech.uswest.com"}]},"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Nathaniel Borenstein","mailbox":"nsb@thumper.bellcore.com"}]},"from":{"class":"mailcore::Address","displayName":"Brad Huntting","mailbox":"huntting@advtech.uswest.com"},"extraHeaders":{"Return-Path":"","Content-Type":"multipart\/alternative; \u000a\u0009boundary=\"Interpart.Boundary.4elpQlO23F868cEkpa\"","Received":"from thumper.bellcore.com by greenbush.bellcore.com (4.1\/4.7)\u000a\u0009id for nsb; Mon, 28 Sep 92 15:04:32 EDT","Mime-Version":"1.0","X-Andrew-Message-Size":"648+1"},"date":"717707057","messageID":"gelpQlq23F86McEkxs@futureworld","receivedDate":"717707057","subject":"Fwd: test of weather","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/alternative","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"1","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"2","mimeType":"image\/gif","contentDescription":"Weather map","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"3","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"}]}}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/59 b/unittest/data/parser/output/mbox/jwz/59 index 586b2b065..cdc2f84bf 100644 --- a/unittest/data/parser/output/mbox/jwz/59 +++ b/unittest/data/parser/output/mbox/jwz/59 @@ -1 +1 @@ -{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"jwz@strumpet.mcom.com"}]},"from":{"class":"mailcore::Address","displayName":"Lou Montulli","mailbox":"montulli@mozilla.com"},"extraHeaders":{"Return-Path":"montulli@mozilla.com","Content-Type":"multipart\/mixed; boundary=\"------------FF6ABD31DF\"","MIME-Version":"1.0","X-Mailer":"Mozilla 3.0b4 (X11; U; IRIX 5.3 IP22)","Received":"from strumpet.mcom.com (strumpet.mcom.com [205.217.236.99]) by urchin.netscape.com (8.6.12\/8.6.9) with ESMTP id LAA15536 for ; Tue, 14 May 1996 11:00:09 -0700","Organization":"Mozilla World Headquarters"},"date":"832096743","sender":{"class":"mailcore::Address","mailbox":"montulli@strumpet.mcom.com"},"messageID":"3198C9E7.3F54@mozilla.com","receivedDate":"832096743","subject":"[Fwd: Netsurfer Digest: Vol. 02, #14 (HTML)]","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"us-ascii","class":"mailcore::Attachment"},{"partType":"message","header":{"from":{"class":"mailcore::Address","mailbox":"editor-bounce@netsurf.com"},"extraHeaders":{"X-Authentication-Warning":"zocalo.net: shrike set sender to editor-bounce@netsurf.com using -f","Apparently-To":"","Received":"from maleman.mcom.com (maleman.mcom.com [198.93.92.3]) by strumpet.mcom.com (8.6.10\/8.6.9) with ESMTP id JAA13279 for ; Tue, 14 May 1996 09:20:18 -0700","Precedence":"bulk"},"date":"832090812","messageID":"199605141620.JAA02498@zocalo.net","receivedDate":"832090812","subject":"Netsurfer Digest: Vol. 02, #14 (HTML)","class":"mailcore::MessageHeader"},"class":"mailcore::MessagePart","mainPart":{"partType":"single","uniqueID":"1","mimeType":"text\/html","class":"mailcore::Attachment"}}]}}} \ No newline at end of file +{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"jwz@strumpet.mcom.com"}]},"from":{"class":"mailcore::Address","displayName":"Lou Montulli","mailbox":"montulli@mozilla.com"},"extraHeaders":{"Return-Path":"montulli@mozilla.com","Content-Type":"multipart\/mixed; boundary=\"------------FF6ABD31DF\"","MIME-Version":"1.0","X-Mailer":"Mozilla 3.0b4 (X11; U; IRIX 5.3 IP22)","Received":"from strumpet.mcom.com (strumpet.mcom.com [205.217.236.99]) by urchin.netscape.com (8.6.12\/8.6.9) with ESMTP id LAA15536 for ; Tue, 14 May 1996 11:00:09 -0700","Organization":"Mozilla World Headquarters"},"date":"832096743","sender":{"class":"mailcore::Address","mailbox":"montulli@strumpet.mcom.com"},"messageID":"3198C9E7.3F54@mozilla.com","receivedDate":"832096743","subject":"[Fwd: Netsurfer Digest: Vol. 02, #14 (HTML)]","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"message","header":{"from":{"class":"mailcore::Address","mailbox":"editor-bounce@netsurf.com"},"extraHeaders":{"X-Authentication-Warning":"zocalo.net: shrike set sender to editor-bounce@netsurf.com using -f","Apparently-To":"","Received":"from maleman.mcom.com (maleman.mcom.com [198.93.92.3]) by strumpet.mcom.com (8.6.10\/8.6.9) with ESMTP id JAA13279 for ; Tue, 14 May 1996 09:20:18 -0700","Precedence":"bulk"},"date":"832090812","messageID":"199605141620.JAA02498@zocalo.net","receivedDate":"832090812","subject":"Netsurfer Digest: Vol. 02, #14 (HTML)","class":"mailcore::MessageHeader"},"class":"mailcore::MessagePart","mainPart":{"partType":"single","uniqueID":"1","mimeType":"text\/html","class":"mailcore::Attachment"}}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/6 b/unittest/data/parser/output/mbox/jwz/6 index f6169805d..2a9006ba1 100644 --- a/unittest/data/parser/output/mbox/jwz/6 +++ b/unittest/data/parser/output/mbox/jwz/6 @@ -1 +1 @@ -{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"ysato@etl.go.jp"}]},"from":{"class":"mailcore::Address","displayName":"Nathaniel Borenstein","mailbox":"nsb"},"extraHeaders":{"Content-Type":"multipart\/alternative; \u000a\u0009boundary=\"Interpart.Boundary.4eAAtte0M2Yt8fF9oM\"","MIME-Version":"1.0","Received":"from Messages.8.5.N.CUILIB.3.45.SNAP.NOT.LINKED.greenbush.galaxy.sun4.41\u000a via MS.5.6.greenbush.galaxy.sun4_41;\u000a Sat, 6 Jun 1992 10:42:04 -0400 (EDT)","X-Andrew-Authenticated-As":"4099;greenbush.galaxy;Nathaniel Borenstein","X-Andrew-Message-Size":"434+4"},"date":"707841724","messageID":"MeAAuwe0M2YtEfF9xR@thumper.bellcore.com","receivedDate":"707841724","subject":"Re: MIME example in VIN","class":"mailcore::MessageHeader","inReplyTo":["9206052121.AA02633@etlibs.etl.go.jp"],"references":["9206052121.AA02633@etlibs.etl.go.jp"]},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/alternative","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"1","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"2","mimeType":"image\/x-xwd","contentDescription":"Your mail to me","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"3","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"4","mimeType":"image\/x-xwd","contentDescription":"The way that message looked to ME","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"5","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"6","mimeType":"audio\/basic","contentDescription":"Note the use of the audio button..","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"7","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"8","mimeType":"image\/x-xwd","contentDescription":"Reply-in-progress picture","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"9","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"}]}}]}}} \ No newline at end of file +{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"ysato@etl.go.jp"}]},"from":{"class":"mailcore::Address","displayName":"Nathaniel Borenstein","mailbox":"nsb"},"extraHeaders":{"Content-Type":"multipart\/alternative; \u000a\u0009boundary=\"Interpart.Boundary.4eAAtte0M2Yt8fF9oM\"","MIME-Version":"1.0","Received":"from Messages.8.5.N.CUILIB.3.45.SNAP.NOT.LINKED.greenbush.galaxy.sun4.41\u000a via MS.5.6.greenbush.galaxy.sun4_41;\u000a Sat, 6 Jun 1992 10:42:04 -0400 (EDT)","X-Andrew-Authenticated-As":"4099;greenbush.galaxy;Nathaniel Borenstein","X-Andrew-Message-Size":"434+4"},"date":"707841724","messageID":"MeAAuwe0M2YtEfF9xR@thumper.bellcore.com","receivedDate":"707841724","subject":"Re: MIME example in VIN","class":"mailcore::MessageHeader","inReplyTo":["9206052121.AA02633@etlibs.etl.go.jp"],"references":["9206052121.AA02633@etlibs.etl.go.jp"]},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/alternative","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"1","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"2","mimeType":"image\/x-xwd","contentDescription":"Your mail to me","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"3","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"4","mimeType":"image\/x-xwd","contentDescription":"The way that message looked to ME","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"5","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"6","mimeType":"audio\/basic","contentDescription":"Note the use of the audio button..","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"7","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"8","mimeType":"image\/x-xwd","contentDescription":"Reply-in-progress picture","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"9","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"}]}}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/61 b/unittest/data/parser/output/mbox/jwz/61 index 96cec6ae8..513a0ac40 100644 --- a/unittest/data/parser/output/mbox/jwz/61 +++ b/unittest/data/parser/output/mbox/jwz/61 @@ -1 +1 @@ -{"header":{"from":{"class":"mailcore::Address","mailbox":"moore@cs.utk.edu"},"extraHeaders":{"Lines":"42","MIME-Version":"1.0","content-type":"multipart\/mixed; boundary=\"frotz\"","X-URI":"http:\/\/www.cs.utk.edu\/\u203emoore\/","Newsgroups":"comp.mail.mime","Path":"flop.mcom.com!news.Stanford.EDU!agate!library.ucla.edu!info.ucla.edu!csulb.edu!paris.ics.uci.edu!ucivax!gateway"},"date":"3964142388","messageID":"199508140639.CAA17658@wilma.cs.utk.edu","receivedDate":"3964142388","subject":"Re: MIME Content-MD5 header","class":"mailcore::MessageHeader","inReplyTo":["Q9+PDBACYxKwIAQs@turnpike.com"]},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"us-ascii","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"1","mimeType":"text\/plain","charset":"us-ascii","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"2","mimeType":"text\/plain","charset":"us-ascii","class":"mailcore::Attachment"}]}}} \ No newline at end of file +{"header":{"from":{"class":"mailcore::Address","mailbox":"moore@cs.utk.edu"},"extraHeaders":{"Lines":"42","MIME-Version":"1.0","content-type":"multipart\/mixed; boundary=\"frotz\"","X-URI":"http:\/\/www.cs.utk.edu\/\u203emoore\/","Newsgroups":"comp.mail.mime","Path":"flop.mcom.com!news.Stanford.EDU!agate!library.ucla.edu!info.ucla.edu!csulb.edu!paris.ics.uci.edu!ucivax!gateway"},"date":"3964142388","messageID":"199508140639.CAA17658@wilma.cs.utk.edu","receivedDate":"3964142388","subject":"Re: MIME Content-MD5 header","class":"mailcore::MessageHeader","inReplyTo":["Q9+PDBACYxKwIAQs@turnpike.com"]},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"1","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"2","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/63 b/unittest/data/parser/output/mbox/jwz/63 index 5a8b27d25..e770cf2e8 100644 --- a/unittest/data/parser/output/mbox/jwz/63 +++ b/unittest/data/parser/output/mbox/jwz/63 @@ -1 +1 @@ -{"header":{"cc":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"moore@cs.utk.edu"}]},"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Nathaniel Borenstein","mailbox":"nsb@thumper.bellcore.com"}]},"from":{"class":"mailcore::Address","displayName":"Keith Moore","mailbox":"moore@cs.utk.edu"},"extraHeaders":{"Return-Path":"","Content-Type":"multipart\/mixed; boundary=mumblefrotz","Received":"from thumper.bellcore.com by greenbush.bellcore.com (4.1\/4.7)\u000a\u0009id for nsb; Sun, 2 Feb 92 19:38:57 EST","Mime-Version":"1.0"},"date":"3852837506","sender":{"class":"mailcore::Address","mailbox":"moore@cs.utk.edu"},"messageID":"9202030038.AA22055@wilma.cs.utk.edu","receivedDate":"3852837506","subject":"Re: New richtext generation -- opinions? ","class":"mailcore::MessageHeader","inReplyTo":["EdX1sRu0M2YtELdGAD@thumper.bellcore.com"]},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"us-ascii","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"1","mimeType":"image\/pbm","contentDescription":"picture of your message","class":"mailcore::Attachment"}]}}} \ No newline at end of file +{"header":{"cc":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"moore@cs.utk.edu"}]},"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Nathaniel Borenstein","mailbox":"nsb@thumper.bellcore.com"}]},"from":{"class":"mailcore::Address","displayName":"Keith Moore","mailbox":"moore@cs.utk.edu"},"extraHeaders":{"Return-Path":"","Content-Type":"multipart\/mixed; boundary=mumblefrotz","Received":"from thumper.bellcore.com by greenbush.bellcore.com (4.1\/4.7)\u000a\u0009id for nsb; Sun, 2 Feb 92 19:38:57 EST","Mime-Version":"1.0"},"date":"3852837506","sender":{"class":"mailcore::Address","mailbox":"moore@cs.utk.edu"},"messageID":"9202030038.AA22055@wilma.cs.utk.edu","receivedDate":"3852837506","subject":"Re: New richtext generation -- opinions? ","class":"mailcore::MessageHeader","inReplyTo":["EdX1sRu0M2YtELdGAD@thumper.bellcore.com"]},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"1","mimeType":"image\/pbm","contentDescription":"picture of your message","class":"mailcore::Attachment"}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/64 b/unittest/data/parser/output/mbox/jwz/64 index 65ea6a75d..6f539edc5 100644 --- a/unittest/data/parser/output/mbox/jwz/64 +++ b/unittest/data/parser/output/mbox/jwz/64 @@ -1 +1 @@ -{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"mh-mime@dbc.mtview.ca.us"}]},"from":{"class":"mailcore::Address","displayName":"Marshall Rose","mailbox":"mrose@dbc.mtview.ca.us"},"extraHeaders":{"Return-Path":"","Content-Type":"multipart\/mixed; boundary=\"FOOFOO\"","Resent-From":"Marshall Rose ","Resent-Date":"Tue, 01 Sep 1992 18:29:38 -0700","Resent-To":"Nathaniel Borenstein ","Received":"from thumper.bellcore.com by greenbush.bellcore.com (4.1\/4.7)\u000a\u0009id for nsb; Tue, 1 Sep 92 21:31:43 EDT","Mime-Version":"1.0"},"date":"715397076","messageID":"7821.715397074@dbc.mtview.ca.us","receivedDate":"715397076","subject":"I'd like your opinion","class":"mailcore::MessageHeader","replyTo":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"mh-mime@dbc.mtview.ca.us"}]}},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"us-ascii","class":"mailcore::Attachment"},{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"1","mimeType":"text\/richtext","charset":"us-ascii","contentDescription":"Masthead","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"2","mimeType":"text\/richtext","charset":"us-ascii","contentDescription":"READ-ME","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"3","mimeType":"text\/richtext","charset":"us-ascii","contentDescription":"Disclaimer","class":"mailcore::Attachment"}]}},{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"4","mimeType":"text\/richtext","charset":"us-ascii","contentDescription":"Technical Article","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"5","mimeType":"text\/richtext","charset":"us-ascii","contentDescription":"Industry Comment","class":"mailcore::Attachment"},{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"9","mimeType":"text\/richtext","charset":"us-ascii","contentDescription":"Applications and Directions","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"10","mimeType":"text\/richtext","charset":"us-ascii","contentDescription":"Ask Dr. SNMP","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"11","mimeType":"text\/richtext","charset":"us-ascii","contentDescription":"Security and Protocols","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"12","mimeType":"text\/richtext","charset":"us-ascii","contentDescription":"Standards","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"13","mimeType":"text\/richtext","charset":"us-ascii","contentDescription":"Working Group Synopses","class":"mailcore::Attachment"}]}},{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"14","mimeType":"text\/richtext","charset":"us-ascii","contentDescription":"Activities Calendar","class":"mailcore::Attachment"}]}}]}},{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"6","mimeType":"text\/richtext","charset":"us-ascii","contentDescription":"Publication Information","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"7","mimeType":"text\/richtext","charset":"us-ascii","contentDescription":"Submissions","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"8","mimeType":"text\/richtext","charset":"us-ascii","contentDescription":"Subscriptions Information","class":"mailcore::Attachment"}]}}]}}]}}]}}} \ No newline at end of file +{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"mh-mime@dbc.mtview.ca.us"}]},"from":{"class":"mailcore::Address","displayName":"Marshall Rose","mailbox":"mrose@dbc.mtview.ca.us"},"extraHeaders":{"Return-Path":"","Content-Type":"multipart\/mixed; boundary=\"FOOFOO\"","Resent-From":"Marshall Rose ","Resent-Date":"Tue, 01 Sep 1992 18:29:38 -0700","Resent-To":"Nathaniel Borenstein ","Received":"from thumper.bellcore.com by greenbush.bellcore.com (4.1\/4.7)\u000a\u0009id for nsb; Tue, 1 Sep 92 21:31:43 EDT","Mime-Version":"1.0"},"date":"715397076","messageID":"7821.715397074@dbc.mtview.ca.us","receivedDate":"715397076","subject":"I'd like your opinion","class":"mailcore::MessageHeader","replyTo":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"mh-mime@dbc.mtview.ca.us"}]}},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"1","mimeType":"text\/richtext","charset":"utf-8","contentDescription":"Masthead","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"2","mimeType":"text\/richtext","charset":"utf-8","contentDescription":"READ-ME","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"3","mimeType":"text\/richtext","charset":"utf-8","contentDescription":"Disclaimer","class":"mailcore::Attachment"}]}},{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"4","mimeType":"text\/richtext","charset":"utf-8","contentDescription":"Technical Article","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"5","mimeType":"text\/richtext","charset":"utf-8","contentDescription":"Industry Comment","class":"mailcore::Attachment"},{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"9","mimeType":"text\/richtext","charset":"utf-8","contentDescription":"Applications and Directions","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"10","mimeType":"text\/richtext","charset":"utf-8","contentDescription":"Ask Dr. SNMP","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"11","mimeType":"text\/richtext","charset":"utf-8","contentDescription":"Security and Protocols","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"12","mimeType":"text\/richtext","charset":"utf-8","contentDescription":"Standards","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"13","mimeType":"text\/richtext","charset":"utf-8","contentDescription":"Working Group Synopses","class":"mailcore::Attachment"}]}},{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"14","mimeType":"text\/richtext","charset":"utf-8","contentDescription":"Activities Calendar","class":"mailcore::Attachment"}]}}]}},{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"6","mimeType":"text\/richtext","charset":"utf-8","contentDescription":"Publication Information","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"7","mimeType":"text\/richtext","charset":"utf-8","contentDescription":"Submissions","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"8","mimeType":"text\/richtext","charset":"utf-8","contentDescription":"Subscriptions Information","class":"mailcore::Attachment"}]}}]}}]}}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/66 b/unittest/data/parser/output/mbox/jwz/66 index 19c284036..ab067fc01 100644 --- a/unittest/data/parser/output/mbox/jwz/66 +++ b/unittest/data/parser/output/mbox/jwz/66 @@ -1 +1 @@ -{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"steindle@uts340.univ.trieste.it"}]},"from":{"class":"mailcore::Address","displayName":"Nathaniel Borenstein","mailbox":"nsb"},"extraHeaders":{"Content-Type":"multipart\/alternative; \u000a\u0009boundary=\"Interpart.Boundary.IfasKPO0M2Yt8whLBn\"","MIME-Version":"1.0","Received":"from Messages.8.5.N.CUILIB.3.45.SNAP.NOT.LINKED.greenbush.galaxy.sun4.41\u000a via MS.5.6.greenbush.galaxy.sun4_41;\u000a Mon, 8 Mar 1993 12:42:53 -0500 (EST)","X-Andrew-Authenticated-As":"4099;greenbush.galaxy;Nathaniel Borenstein","X-Andrew-Message-Size":"500+3"},"date":"731612573","messageID":"AfasKRC0M2Yt8whLIo@thumper.bellcore.com","receivedDate":"731612573","subject":"Re: MIME, how do you pronounce it?","class":"mailcore::MessageHeader","inReplyTo":["9303081733.AA21435@uts340.univ.trieste.it"],"references":["9303081733.AA21435@uts340.univ.trieste.it"]},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/alternative","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"1","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"2","mimeType":"audio\/basic","contentDescription":"Hallelujah!","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"3","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"4","mimeType":"audio\/basic","contentDescription":"Distress Calls","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"5","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"6","mimeType":"audio\/basic","contentDescription":"Woowoo!","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"7","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"}]}}]}}} \ No newline at end of file +{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"steindle@uts340.univ.trieste.it"}]},"from":{"class":"mailcore::Address","displayName":"Nathaniel Borenstein","mailbox":"nsb"},"extraHeaders":{"Content-Type":"multipart\/alternative; \u000a\u0009boundary=\"Interpart.Boundary.IfasKPO0M2Yt8whLBn\"","MIME-Version":"1.0","Received":"from Messages.8.5.N.CUILIB.3.45.SNAP.NOT.LINKED.greenbush.galaxy.sun4.41\u000a via MS.5.6.greenbush.galaxy.sun4_41;\u000a Mon, 8 Mar 1993 12:42:53 -0500 (EST)","X-Andrew-Authenticated-As":"4099;greenbush.galaxy;Nathaniel Borenstein","X-Andrew-Message-Size":"500+3"},"date":"731612573","messageID":"AfasKRC0M2Yt8whLIo@thumper.bellcore.com","receivedDate":"731612573","subject":"Re: MIME, how do you pronounce it?","class":"mailcore::MessageHeader","inReplyTo":["9303081733.AA21435@uts340.univ.trieste.it"],"references":["9303081733.AA21435@uts340.univ.trieste.it"]},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/alternative","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"1","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"2","mimeType":"audio\/basic","contentDescription":"Hallelujah!","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"3","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"4","mimeType":"audio\/basic","contentDescription":"Distress Calls","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"5","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"6","mimeType":"audio\/basic","contentDescription":"Woowoo!","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"7","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"}]}}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/71 b/unittest/data/parser/output/mbox/jwz/71 index c18578885..7029515eb 100644 --- a/unittest/data/parser/output/mbox/jwz/71 +++ b/unittest/data/parser/output/mbox/jwz/71 @@ -1 +1 @@ -{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"}]},"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"Content-Type":"multipart\/mixed; boundary=\"------------outer\"","MIME-Version":"1.0","X-Mozilla-Status":"0001","X-Mailer":"Mozilla 2.0 (X11; U; IRIX 5.3 IP22)","Organization":"Netscape Communications Corporation, Mozilla Division"},"date":"833680849","messageID":"31B0F5D1.41C6@netscape.com","receivedDate":"833680849","subject":"multipart\/alternative","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","class":"mailcore::Attachment"},{"partType":"multipart\/alternative","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"1","mimeType":"text\/plain","charset":"iso-8859-1","inlineAttachment":"1","class":"mailcore::Attachment","filename":"album-list.txt"},{"partType":"single","uniqueID":"2","mimeType":"text\/html","charset":"us-ascii","inlineAttachment":"1","class":"mailcore::Attachment","filename":"album-list.html"},{"partType":"single","uniqueID":"3","mimeType":"application\/postscript","inlineAttachment":"1","class":"mailcore::Attachment","filename":"album-list.ps"}]}}]}}} \ No newline at end of file +{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"}]},"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"Content-Type":"multipart\/mixed; boundary=\"------------outer\"","MIME-Version":"1.0","X-Mozilla-Status":"0001","X-Mailer":"Mozilla 2.0 (X11; U; IRIX 5.3 IP22)","Organization":"Netscape Communications Corporation, Mozilla Division"},"date":"833680849","messageID":"31B0F5D1.41C6@netscape.com","receivedDate":"833680849","subject":"multipart\/alternative","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","class":"mailcore::Attachment"},{"partType":"multipart\/alternative","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"1","mimeType":"text\/plain","charset":"iso-8859-1","inlineAttachment":"1","class":"mailcore::Attachment","filename":"album-list.txt"},{"partType":"single","uniqueID":"2","mimeType":"text\/html","charset":"utf-8","inlineAttachment":"1","class":"mailcore::Attachment","filename":"album-list.html"},{"partType":"single","uniqueID":"3","mimeType":"application\/postscript","inlineAttachment":"1","class":"mailcore::Attachment","filename":"album-list.ps"}]}}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/72 b/unittest/data/parser/output/mbox/jwz/72 index a8b93e184..4c42c1665 100644 --- a/unittest/data/parser/output/mbox/jwz/72 +++ b/unittest/data/parser/output/mbox/jwz/72 @@ -1 +1 @@ -{"header":{"from":{"class":"mailcore::Address","displayName":"Chromosome Terror","mailbox":"abrdlher@reading.ac.uk"},"extraHeaders":{"Content-ID":"","Content-Type":"MULTIPART\/MIXED; BOUNDARY=---Multi-Part-Message-Level-1-1-18170","Lines":"43","NNTP-Posting-Host":"suma3-e2.reading.ac.uk","Newsgroups":"soc.culture.spain","Mime-Version":"1.0","Path":"flop.mcom.com!news.Stanford.EDU!bloom-beacon.mit.edu!gatech!swrinde!pipex!sunsite.doc.ic.ac.uk!sunews!suma3!abrdlher","Organization":"University of Reading, U.K."},"date":"798926856","messageID":"Pine.SOL.3.91.950426210608.18431A-110000@suma3.reading.ac.uk","receivedDate":"798926856","subject":"Alternative medicine","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"contentID":"Pine.SOL.3.91.950426210608.18431C@suma3.reading.ac.uk","partType":"single","uniqueID":"0","mimeType":"text\/PLAIN","charset":"us-ascii","class":"mailcore::Attachment"},{"partType":"message","header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Pavilion Subscriber","mailbox":"Pavilion_sub@pavilion.co.uk"}]},"from":{"class":"mailcore::Address","displayName":"Chromosome Terror","mailbox":"J.I.De-las-Heras@reading.ac.uk"},"extraHeaders":{"Received":"from suma3.rdg.ac.uk by sums1.rdg.ac.uk with SMTP - Local (PP);\u000a Fri, 21 Apr 1995 12:28:34 +0100","content-length":"346"},"date":"798463730","messageID":"Pine.SOL.3.91.950421122449.28779E-100000@suma3.reading.ac.uk","receivedDate":"798463730","subject":"Re: Alternative Medicine ","class":"mailcore::MessageHeader","inReplyTo":["Pavilion_sub-2004950803380001@line07.gunn-du.pavilion.co.uk"]},"class":"mailcore::MessagePart","mainPart":{"partType":"single","uniqueID":"1","mimeType":"text\/PLAIN","charset":"US-ASCII","class":"mailcore::Attachment"}}]}}} \ No newline at end of file +{"header":{"from":{"class":"mailcore::Address","displayName":"Chromosome Terror","mailbox":"abrdlher@reading.ac.uk"},"extraHeaders":{"Content-ID":"","Content-Type":"MULTIPART\/MIXED; BOUNDARY=---Multi-Part-Message-Level-1-1-18170","Lines":"43","NNTP-Posting-Host":"suma3-e2.reading.ac.uk","Newsgroups":"soc.culture.spain","Mime-Version":"1.0","Path":"flop.mcom.com!news.Stanford.EDU!bloom-beacon.mit.edu!gatech!swrinde!pipex!sunsite.doc.ic.ac.uk!sunews!suma3!abrdlher","Organization":"University of Reading, U.K."},"date":"798926856","messageID":"Pine.SOL.3.91.950426210608.18431A-110000@suma3.reading.ac.uk","receivedDate":"798926856","subject":"Alternative medicine","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"contentID":"Pine.SOL.3.91.950426210608.18431C@suma3.reading.ac.uk","partType":"single","uniqueID":"0","mimeType":"text\/PLAIN","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"message","header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Pavilion Subscriber","mailbox":"Pavilion_sub@pavilion.co.uk"}]},"from":{"class":"mailcore::Address","displayName":"Chromosome Terror","mailbox":"J.I.De-las-Heras@reading.ac.uk"},"extraHeaders":{"Received":"from suma3.rdg.ac.uk by sums1.rdg.ac.uk with SMTP - Local (PP);\u000a Fri, 21 Apr 1995 12:28:34 +0100","content-length":"346"},"date":"798463730","messageID":"Pine.SOL.3.91.950421122449.28779E-100000@suma3.reading.ac.uk","receivedDate":"798463730","subject":"Re: Alternative Medicine ","class":"mailcore::MessageHeader","inReplyTo":["Pavilion_sub-2004950803380001@line07.gunn-du.pavilion.co.uk"]},"class":"mailcore::MessagePart","mainPart":{"partType":"single","uniqueID":"1","mimeType":"text\/PLAIN","charset":"utf-8","class":"mailcore::Attachment"}}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/73 b/unittest/data/parser/output/mbox/jwz/73 index d14df9073..fc301aa23 100644 --- a/unittest/data/parser/output/mbox/jwz/73 +++ b/unittest/data/parser/output/mbox/jwz/73 @@ -1 +1 @@ -{"header":{"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"Content-Type":"multipart\/related;\u000a boundary=\"------------25F71003F6609771F5544030\"","MIME-Version":"1.0","Newsgroup":"alt.fan.jwz"},"date":"859942524","messageID":"3341AE7C.665F552F.10@netscape.com","receivedDate":"859942524","subject":"multipart\/related MHTML test case","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/related","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"contentID":"3341AE7C.665F552F.10.part1@netscape.com","partType":"single","uniqueID":"0","mimeType":"text\/html","charset":"us-ascii","inlineAttachment":"1","contentLocation":"jwz\/index.html","class":"mailcore::Attachment"},{"contentID":"3341AE7C.665F552F.10.part2@netscape.com","partType":"single","uniqueID":"1","mimeType":"image\/jpeg","contentLocation":"http:\/\/www.netscape.com\/people\/jwz\/jwz6.jpg","class":"mailcore::Attachment"}]}}} \ No newline at end of file +{"header":{"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"Content-Type":"multipart\/related;\u000a boundary=\"------------25F71003F6609771F5544030\"","MIME-Version":"1.0","Newsgroup":"alt.fan.jwz"},"date":"859942524","messageID":"3341AE7C.665F552F.10@netscape.com","receivedDate":"859942524","subject":"multipart\/related MHTML test case","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/related","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"contentID":"3341AE7C.665F552F.10.part1@netscape.com","partType":"single","uniqueID":"0","mimeType":"text\/html","charset":"utf-8","inlineAttachment":"1","contentLocation":"jwz\/index.html","class":"mailcore::Attachment"},{"contentID":"3341AE7C.665F552F.10.part2@netscape.com","partType":"single","uniqueID":"1","mimeType":"image\/jpeg","contentLocation":"http:\/\/www.netscape.com\/people\/jwz\/jwz6.jpg","class":"mailcore::Attachment"}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/74 b/unittest/data/parser/output/mbox/jwz/74 index 3526988f9..aa9c0dac7 100644 --- a/unittest/data/parser/output/mbox/jwz/74 +++ b/unittest/data/parser/output/mbox/jwz/74 @@ -1 +1 @@ -{"header":{"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"Content-Type":"multipart\/related;\u000a boundary=\"------------25F71003F6609771F5544030\"","MIME-Version":"1.0","Newsgroup":"alt.fan.jwz"},"date":"859942524","messageID":"3341AE7C.665F552F.10@netscape.com","receivedDate":"859942524","subject":"multipart\/related MHTML test case","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/related","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"contentID":"3341AE7C.665F552F.10.part1@netscape.com","partType":"single","uniqueID":"0","mimeType":"text\/html","charset":"us-ascii","inlineAttachment":"1","contentLocation":"jwz\/index.html","class":"mailcore::Attachment"},{"contentID":"3341AE7C.665F552F.10.part2@netscape.com","partType":"single","uniqueID":"1","mimeType":"image\/jpeg","contentLocation":"jwz\/jwz6.jpg","class":"mailcore::Attachment"}]}}} \ No newline at end of file +{"header":{"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"Content-Type":"multipart\/related;\u000a boundary=\"------------25F71003F6609771F5544030\"","MIME-Version":"1.0","Newsgroup":"alt.fan.jwz"},"date":"859942524","messageID":"3341AE7C.665F552F.10@netscape.com","receivedDate":"859942524","subject":"multipart\/related MHTML test case","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/related","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"contentID":"3341AE7C.665F552F.10.part1@netscape.com","partType":"single","uniqueID":"0","mimeType":"text\/html","charset":"utf-8","inlineAttachment":"1","contentLocation":"jwz\/index.html","class":"mailcore::Attachment"},{"contentID":"3341AE7C.665F552F.10.part2@netscape.com","partType":"single","uniqueID":"1","mimeType":"image\/jpeg","contentLocation":"jwz\/jwz6.jpg","class":"mailcore::Attachment"}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/76 b/unittest/data/parser/output/mbox/jwz/76 index 155a8209b..fb7883af3 100644 --- a/unittest/data/parser/output/mbox/jwz/76 +++ b/unittest/data/parser/output/mbox/jwz/76 @@ -1 +1 @@ -{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Paul Phillips","mailbox":"paulp@go2net.com"}]},"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"FCC":"\/u\/jwz\/nsmail\/Inbox","Content-Type":"multipart\/mixed;\u000a boundary=\"------------25F71003F6609771F5544030\"","MIME-Version":"1.0","X-Mailer":"Mozilla 3.01 (X11; I; IRIX 6.2 IP22)","Organization":"Netscape Communications Corporation, Mozilla Division"},"date":"859942524","messageID":"3341AE7C.665F552F@netscape.com","receivedDate":"859942524","subject":"Netscape Announces Theme Park Plans","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","class":"mailcore::Attachment"},{"partType":"multipart\/related","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"contentID":"3341AE7C.665F552F.1@netscape.com","partType":"single","uniqueID":"1","mimeType":"text\/html","charset":"us-ascii","inlineAttachment":"1","class":"mailcore::Attachment","filename":"story12.htm"},{"contentID":"3341AE7C.665F552F.2@netscape.com","partType":"single","uniqueID":"2","mimeType":"image\/gif","inlineAttachment":"1","class":"mailcore::Attachment","filename":"netscape1223_communicator.gif"},{"contentID":"3341AE7C.665F552F.3@netscape.com","partType":"single","uniqueID":"3","mimeType":"image\/gif","inlineAttachment":"1","class":"mailcore::Attachment","filename":"inbanner.gif"},{"contentID":"3341AE7C.665F552F.4@netscape.com","partType":"single","uniqueID":"4","mimeType":"image\/gif","inlineAttachment":"1","class":"mailcore::Attachment","filename":"topnews.gif"},{"contentID":"3341AE7C.665F552F.5@netscape.com","partType":"single","uniqueID":"5","mimeType":"image\/gif","inlineAttachment":"1","class":"mailcore::Attachment","filename":"headline.gif"},{"contentID":"3341AE7C.665F552F.6@netscape.com","partType":"single","uniqueID":"6","mimeType":"image\/gif","inlineAttachment":"1","class":"mailcore::Attachment","filename":"plans.GIF"},{"contentID":"3341AE7C.665F552F.7@netscape.com","partType":"single","uniqueID":"7","mimeType":"image\/jpeg","inlineAttachment":"1","class":"mailcore::Attachment","filename":"pirates.jpg"},{"contentID":"3341AE7C.665F552F.8@netscape.com","partType":"single","uniqueID":"8","mimeType":"image\/jpeg","inlineAttachment":"1","class":"mailcore::Attachment","filename":"stockcoaster.jpg"}]}}]}}} \ No newline at end of file +{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Paul Phillips","mailbox":"paulp@go2net.com"}]},"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"FCC":"\/u\/jwz\/nsmail\/Inbox","Content-Type":"multipart\/mixed;\u000a boundary=\"------------25F71003F6609771F5544030\"","MIME-Version":"1.0","X-Mailer":"Mozilla 3.01 (X11; I; IRIX 6.2 IP22)","Organization":"Netscape Communications Corporation, Mozilla Division"},"date":"859942524","messageID":"3341AE7C.665F552F@netscape.com","receivedDate":"859942524","subject":"Netscape Announces Theme Park Plans","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","class":"mailcore::Attachment"},{"partType":"multipart\/related","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"contentID":"3341AE7C.665F552F.1@netscape.com","partType":"single","uniqueID":"1","mimeType":"text\/html","charset":"utf-8","inlineAttachment":"1","class":"mailcore::Attachment","filename":"story12.htm"},{"contentID":"3341AE7C.665F552F.2@netscape.com","partType":"single","uniqueID":"2","mimeType":"image\/gif","inlineAttachment":"1","class":"mailcore::Attachment","filename":"netscape1223_communicator.gif"},{"contentID":"3341AE7C.665F552F.3@netscape.com","partType":"single","uniqueID":"3","mimeType":"image\/gif","inlineAttachment":"1","class":"mailcore::Attachment","filename":"inbanner.gif"},{"contentID":"3341AE7C.665F552F.4@netscape.com","partType":"single","uniqueID":"4","mimeType":"image\/gif","inlineAttachment":"1","class":"mailcore::Attachment","filename":"topnews.gif"},{"contentID":"3341AE7C.665F552F.5@netscape.com","partType":"single","uniqueID":"5","mimeType":"image\/gif","inlineAttachment":"1","class":"mailcore::Attachment","filename":"headline.gif"},{"contentID":"3341AE7C.665F552F.6@netscape.com","partType":"single","uniqueID":"6","mimeType":"image\/gif","inlineAttachment":"1","class":"mailcore::Attachment","filename":"plans.GIF"},{"contentID":"3341AE7C.665F552F.7@netscape.com","partType":"single","uniqueID":"7","mimeType":"image\/jpeg","inlineAttachment":"1","class":"mailcore::Attachment","filename":"pirates.jpg"},{"contentID":"3341AE7C.665F552F.8@netscape.com","partType":"single","uniqueID":"8","mimeType":"image\/jpeg","inlineAttachment":"1","class":"mailcore::Attachment","filename":"stockcoaster.jpg"}]}}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/77 b/unittest/data/parser/output/mbox/jwz/77 index c06b6d9b7..5fbf7452a 100644 --- a/unittest/data/parser/output/mbox/jwz/77 +++ b/unittest/data/parser/output/mbox/jwz/77 @@ -1 +1 @@ -{"header":{"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"Content-Type":"multipart\/related;\u000a boundary=\"------------25F71003F6609771F5544030\"","MIME-Version":"1.0","Newsgroup":"alt.fan.jwz"},"date":"859942524","messageID":"3341AE7C.665F552F.4@netscape.com","receivedDate":"859942524","subject":"multipart\/related MHTML test case","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/related","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"contentID":"3341AE7C.665F552F.4.part1@netscape.com","partType":"single","uniqueID":"0","mimeType":"text\/html","charset":"us-ascii","inlineAttachment":"1","class":"mailcore::Attachment"},{"contentID":"3341AE7C.665F552F.4.part2@netscape.com","partType":"single","uniqueID":"1","mimeType":"image\/jpeg","class":"mailcore::Attachment"}]}}} \ No newline at end of file +{"header":{"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"Content-Type":"multipart\/related;\u000a boundary=\"------------25F71003F6609771F5544030\"","MIME-Version":"1.0","Newsgroup":"alt.fan.jwz"},"date":"859942524","messageID":"3341AE7C.665F552F.4@netscape.com","receivedDate":"859942524","subject":"multipart\/related MHTML test case","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/related","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"contentID":"3341AE7C.665F552F.4.part1@netscape.com","partType":"single","uniqueID":"0","mimeType":"text\/html","charset":"utf-8","inlineAttachment":"1","class":"mailcore::Attachment"},{"contentID":"3341AE7C.665F552F.4.part2@netscape.com","partType":"single","uniqueID":"1","mimeType":"image\/jpeg","class":"mailcore::Attachment"}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/78 b/unittest/data/parser/output/mbox/jwz/78 index 0d258f409..1095211aa 100644 --- a/unittest/data/parser/output/mbox/jwz/78 +++ b/unittest/data/parser/output/mbox/jwz/78 @@ -1 +1 @@ -{"header":{"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"Content-Type":"multipart\/related;\u000a boundary=\"------------25F71003F6609771F5544030\"","MIME-Version":"1.0","Newsgroup":"alt.fan.jwz"},"date":"859942524","messageID":"3341AE7C.665F552F.5@netscape.com","receivedDate":"859942524","subject":"multipart\/related MHTML test case","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/related","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"contentID":"3341AE7C.665F552F.5.part1@netscape.com","partType":"single","uniqueID":"0","mimeType":"text\/html","charset":"us-ascii","inlineAttachment":"1","class":"mailcore::Attachment"},{"contentID":"3341AE7C.665F552F.5.part2@netscape.com","partType":"single","uniqueID":"1","mimeType":"image\/jpeg","class":"mailcore::Attachment"}]}}} \ No newline at end of file +{"header":{"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"Content-Type":"multipart\/related;\u000a boundary=\"------------25F71003F6609771F5544030\"","MIME-Version":"1.0","Newsgroup":"alt.fan.jwz"},"date":"859942524","messageID":"3341AE7C.665F552F.5@netscape.com","receivedDate":"859942524","subject":"multipart\/related MHTML test case","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/related","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"contentID":"3341AE7C.665F552F.5.part1@netscape.com","partType":"single","uniqueID":"0","mimeType":"text\/html","charset":"utf-8","inlineAttachment":"1","class":"mailcore::Attachment"},{"contentID":"3341AE7C.665F552F.5.part2@netscape.com","partType":"single","uniqueID":"1","mimeType":"image\/jpeg","class":"mailcore::Attachment"}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/79 b/unittest/data/parser/output/mbox/jwz/79 index cc8149881..73eeaae97 100644 --- a/unittest/data/parser/output/mbox/jwz/79 +++ b/unittest/data/parser/output/mbox/jwz/79 @@ -1 +1 @@ -{"header":{"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"Content-Type":"multipart\/related;\u000a boundary=\"------------25F71003F6609771F5544030\"","MIME-Version":"1.0","Newsgroup":"alt.fan.jwz"},"date":"859942524","messageID":"3341AE7C.665F552F.6@netscape.com","receivedDate":"859942524","subject":"multipart\/related MHTML test case","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/related","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"contentID":"3341AE7C.665F552F.6.part1@netscape.com","partType":"single","uniqueID":"0","mimeType":"text\/html","charset":"us-ascii","inlineAttachment":"1","contentLocation":"http:\/\/www.netscape.com\/people\/index.html","class":"mailcore::Attachment"},{"contentID":"3341AE7C.665F552F.6.part2@netscape.com","partType":"single","uniqueID":"1","mimeType":"image\/jpeg","contentLocation":"http:\/\/www.netscape.com\/people\/jwz\/jwz6.jpg","class":"mailcore::Attachment"}]}}} \ No newline at end of file +{"header":{"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"Content-Type":"multipart\/related;\u000a boundary=\"------------25F71003F6609771F5544030\"","MIME-Version":"1.0","Newsgroup":"alt.fan.jwz"},"date":"859942524","messageID":"3341AE7C.665F552F.6@netscape.com","receivedDate":"859942524","subject":"multipart\/related MHTML test case","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/related","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"contentID":"3341AE7C.665F552F.6.part1@netscape.com","partType":"single","uniqueID":"0","mimeType":"text\/html","charset":"utf-8","inlineAttachment":"1","contentLocation":"http:\/\/www.netscape.com\/people\/index.html","class":"mailcore::Attachment"},{"contentID":"3341AE7C.665F552F.6.part2@netscape.com","partType":"single","uniqueID":"1","mimeType":"image\/jpeg","contentLocation":"http:\/\/www.netscape.com\/people\/jwz\/jwz6.jpg","class":"mailcore::Attachment"}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/80 b/unittest/data/parser/output/mbox/jwz/80 index 01d1c2d9f..b7971dd8f 100644 --- a/unittest/data/parser/output/mbox/jwz/80 +++ b/unittest/data/parser/output/mbox/jwz/80 @@ -1 +1 @@ -{"header":{"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"Content-Type":"multipart\/related;\u000a boundary=\"------------25F71003F6609771F5544030\"","MIME-Version":"1.0","Newsgroup":"alt.fan.jwz"},"date":"859942524","messageID":"3341AE7C.665F552F.7@netscape.com","receivedDate":"859942524","subject":"multipart\/related MHTML test case","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/related","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"contentID":"3341AE7C.665F552F.7.part1@netscape.com","partType":"single","uniqueID":"0","mimeType":"text\/html","charset":"us-ascii","inlineAttachment":"1","contentLocation":"jwz\/index.html","class":"mailcore::Attachment"},{"contentID":"3341AE7C.665F552F.7.part2@netscape.com","partType":"single","uniqueID":"1","mimeType":"image\/jpeg","contentLocation":"jwz\/jwz6.jpg","class":"mailcore::Attachment"}]}}} \ No newline at end of file +{"header":{"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"Content-Type":"multipart\/related;\u000a boundary=\"------------25F71003F6609771F5544030\"","MIME-Version":"1.0","Newsgroup":"alt.fan.jwz"},"date":"859942524","messageID":"3341AE7C.665F552F.7@netscape.com","receivedDate":"859942524","subject":"multipart\/related MHTML test case","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/related","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"contentID":"3341AE7C.665F552F.7.part1@netscape.com","partType":"single","uniqueID":"0","mimeType":"text\/html","charset":"utf-8","inlineAttachment":"1","contentLocation":"jwz\/index.html","class":"mailcore::Attachment"},{"contentID":"3341AE7C.665F552F.7.part2@netscape.com","partType":"single","uniqueID":"1","mimeType":"image\/jpeg","contentLocation":"jwz\/jwz6.jpg","class":"mailcore::Attachment"}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/81 b/unittest/data/parser/output/mbox/jwz/81 index db652fa4c..b8cccecb3 100644 --- a/unittest/data/parser/output/mbox/jwz/81 +++ b/unittest/data/parser/output/mbox/jwz/81 @@ -1 +1 @@ -{"header":{"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"Content-Type":"multipart\/related;\u000a boundary=\"------------25F71003F6609771F5544030\"","MIME-Version":"1.0","Newsgroup":"alt.fan.jwz"},"date":"859942524","messageID":"3341AE7C.665F552F.8@netscape.com","receivedDate":"859942524","subject":"multipart\/related MHTML test case","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/related","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"contentID":"3341AE7C.665F552F.8.part1@netscape.com","partType":"single","uniqueID":"0","mimeType":"text\/html","charset":"us-ascii","inlineAttachment":"1","contentLocation":"http:\/\/www.netscape.com\/people\/index.html","class":"mailcore::Attachment"},{"contentID":"3341AE7C.665F552F.8.part2@netscape.com","partType":"single","uniqueID":"1","mimeType":"image\/jpeg","contentLocation":"http:\/\/www.netscape.com\/people\/jwz\/jwz6.jpg","class":"mailcore::Attachment"}]}}} \ No newline at end of file +{"header":{"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"Content-Type":"multipart\/related;\u000a boundary=\"------------25F71003F6609771F5544030\"","MIME-Version":"1.0","Newsgroup":"alt.fan.jwz"},"date":"859942524","messageID":"3341AE7C.665F552F.8@netscape.com","receivedDate":"859942524","subject":"multipart\/related MHTML test case","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/related","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"contentID":"3341AE7C.665F552F.8.part1@netscape.com","partType":"single","uniqueID":"0","mimeType":"text\/html","charset":"utf-8","inlineAttachment":"1","contentLocation":"http:\/\/www.netscape.com\/people\/index.html","class":"mailcore::Attachment"},{"contentID":"3341AE7C.665F552F.8.part2@netscape.com","partType":"single","uniqueID":"1","mimeType":"image\/jpeg","contentLocation":"http:\/\/www.netscape.com\/people\/jwz\/jwz6.jpg","class":"mailcore::Attachment"}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/82 b/unittest/data/parser/output/mbox/jwz/82 index 338a64433..2442dc895 100644 --- a/unittest/data/parser/output/mbox/jwz/82 +++ b/unittest/data/parser/output/mbox/jwz/82 @@ -1 +1 @@ -{"header":{"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"Content-Type":"multipart\/related;\u000a boundary=\"------------25F71003F6609771F5544030\"","MIME-Version":"1.0","Newsgroup":"alt.fan.jwz"},"date":"859942524","messageID":"3341AE7C.665F552F.9@netscape.com","receivedDate":"859942524","subject":"multipart\/related MHTML test case","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/related","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"contentID":"3341AE7C.665F552F.9.part1@netscape.com","partType":"single","uniqueID":"0","mimeType":"text\/html","charset":"us-ascii","inlineAttachment":"1","contentLocation":"jwz\/index.html","class":"mailcore::Attachment"},{"contentID":"3341AE7C.665F552F.9.part2@netscape.com","partType":"single","uniqueID":"1","mimeType":"image\/jpeg","contentLocation":"http:\/\/www.netscape.com\/people\/jwz\/jwz6.jpg","class":"mailcore::Attachment"}]}}} \ No newline at end of file +{"header":{"from":{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"},"extraHeaders":{"Content-Type":"multipart\/related;\u000a boundary=\"------------25F71003F6609771F5544030\"","MIME-Version":"1.0","Newsgroup":"alt.fan.jwz"},"date":"859942524","messageID":"3341AE7C.665F552F.9@netscape.com","receivedDate":"859942524","subject":"multipart\/related MHTML test case","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/related","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"contentID":"3341AE7C.665F552F.9.part1@netscape.com","partType":"single","uniqueID":"0","mimeType":"text\/html","charset":"utf-8","inlineAttachment":"1","contentLocation":"jwz\/index.html","class":"mailcore::Attachment"},{"contentID":"3341AE7C.665F552F.9.part2@netscape.com","partType":"single","uniqueID":"1","mimeType":"image\/jpeg","contentLocation":"http:\/\/www.netscape.com\/people\/jwz\/jwz6.jpg","class":"mailcore::Attachment"}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/83 b/unittest/data/parser/output/mbox/jwz/83 index aa9afb462..5d39eb1d4 100644 --- a/unittest/data/parser/output/mbox/jwz/83 +++ b/unittest/data/parser/output/mbox/jwz/83 @@ -1 +1 @@ -{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"}]},"from":{"class":"mailcore::Address","displayName":"Chuck Simmons","mailbox":"chrlsim@futureone.com"},"extraHeaders":{"Return-Path":"","Content-Type":"multipart\/mixed; boundary=\"------------746A59DD382995F41B0947E\"","MIME-Version":"1.0","X-Mozilla-Status":"0001","X-Mailer":"Mozilla 3.01 (X11; U; Linux 2.0.0 i486)","Received":"from maleman.mcom.com ([198.93.92.3]) by dredd.mcom.com\u000a (Netscape Messaging Server 3.0) with SMTP id AAA8166\u000a for ; Mon, 18 Aug 1997 21:13:55 -0700","Content-Length":"747282","Organization":"Organized? You jest!"},"date":"871963627","sender":{"class":"mailcore::Address","mailbox":"chrlsim@futureone.com"},"messageID":"33F91BEB.10E2A9D5@futureone.com","receivedDate":"871963627","subject":"3.01 MIME prob message [Fwd: communicator 4.01 a conference problem]","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"us-ascii","class":"mailcore::Attachment"},{"partType":"message","header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"chrlsim@futureone.com"}]},"from":{"class":"mailcore::Address","displayName":"NIRI ELLERT","mailbox":"nirie3@gezernet.co.il"},"extraHeaders":{"X-Mailer":"Mozilla 4.01 [en] (Win95; I)","Received":"from gezer1.gezernet.co.il (gezer1.gezernet.co.il [192.116.212.2]) by future.futureone.com (8.8.2\/8.8.0) with ESMTP id OAA19067 for ; Mon, 18 Aug 1997 14:50:46 -0700 (MST)","Organization":"GEZERNET","X-Priority":"3 (Normal)"},"date":"871940146","messageID":"33F8C032.C5DC0CA2@gezernet.co.il","receivedDate":"871940146","subject":"communicator 4.01 a conference problem","class":"mailcore::MessageHeader","replyTo":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"nirie3@gezernet.co.il"}]}},"class":"mailcore::MessagePart","mainPart":{"partType":"multipart\/alternative","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"1","mimeType":"text\/plain","charset":"us-ascii","class":"mailcore::Attachment"},{"partType":"multipart\/related","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"2","mimeType":"text\/html","charset":"us-ascii","class":"mailcore::Attachment"},{"contentID":"part1.33F8C032.E4CBCE7F@gezernet.co.il","partType":"single","uniqueID":"3","mimeType":"image\/tiff","inlineAttachment":"1","class":"mailcore::Attachment","filename":"C:\u00a5win95\u00a5TEMP\u00a5nsmailRJ.tiff"}]}}]}}}]}}} \ No newline at end of file +{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Jamie Zawinski","mailbox":"jwz@netscape.com"}]},"from":{"class":"mailcore::Address","displayName":"Chuck Simmons","mailbox":"chrlsim@futureone.com"},"extraHeaders":{"Return-Path":"","Content-Type":"multipart\/mixed; boundary=\"------------746A59DD382995F41B0947E\"","MIME-Version":"1.0","X-Mozilla-Status":"0001","X-Mailer":"Mozilla 3.01 (X11; U; Linux 2.0.0 i486)","Received":"from maleman.mcom.com ([198.93.92.3]) by dredd.mcom.com\u000a (Netscape Messaging Server 3.0) with SMTP id AAA8166\u000a for ; Mon, 18 Aug 1997 21:13:55 -0700","Content-Length":"747282","Organization":"Organized? You jest!"},"date":"871963627","sender":{"class":"mailcore::Address","mailbox":"chrlsim@futureone.com"},"messageID":"33F91BEB.10E2A9D5@futureone.com","receivedDate":"871963627","subject":"3.01 MIME prob message [Fwd: communicator 4.01 a conference problem]","class":"mailcore::MessageHeader"},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"message","header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"chrlsim@futureone.com"}]},"from":{"class":"mailcore::Address","displayName":"NIRI ELLERT","mailbox":"nirie3@gezernet.co.il"},"extraHeaders":{"X-Mailer":"Mozilla 4.01 [en] (Win95; I)","Received":"from gezer1.gezernet.co.il (gezer1.gezernet.co.il [192.116.212.2]) by future.futureone.com (8.8.2\/8.8.0) with ESMTP id OAA19067 for ; Mon, 18 Aug 1997 14:50:46 -0700 (MST)","Organization":"GEZERNET","X-Priority":"3 (Normal)"},"date":"871940146","messageID":"33F8C032.C5DC0CA2@gezernet.co.il","receivedDate":"871940146","subject":"communicator 4.01 a conference problem","class":"mailcore::MessageHeader","replyTo":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"nirie3@gezernet.co.il"}]}},"class":"mailcore::MessagePart","mainPart":{"partType":"multipart\/alternative","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"1","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"multipart\/related","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"2","mimeType":"text\/html","charset":"utf-8","class":"mailcore::Attachment"},{"contentID":"part1.33F8C032.E4CBCE7F@gezernet.co.il","partType":"single","uniqueID":"3","mimeType":"image\/tiff","inlineAttachment":"1","class":"mailcore::Attachment","filename":"C:\u00a5win95\u00a5TEMP\u00a5nsmailRJ.tiff"}]}}]}}}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/89 b/unittest/data/parser/output/mbox/jwz/89 index 4f239cd41..1cdb662f5 100644 --- a/unittest/data/parser/output/mbox/jwz/89 +++ b/unittest/data/parser/output/mbox/jwz/89 @@ -1 +1 @@ -{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"crobinso@clam.rutgers.edu"}]},"from":{"class":"mailcore::Address","displayName":"zxc","mailbox":"zxc@uiuc.edu"},"extraHeaders":{"X-URL":"news:3nm097$gbj@clam.rutgers.edu","Content-Type":"text\/plain; charset=us-ascii","Lines":"28","NNTP-Posting-Host":"nuntana.animal.uiuc.edu","Newsgroups":"comp.os.linux.misc","X-Mailer":"Mozilla 1.1N (X11; I; Linux 1.2.3 i486)","Content-Transfer-Encoding":"7bit","Mime-Version":"1.0","Path":"flop.mcom.com!news.Stanford.EDU!bloom-beacon.mit.edu!spool.mu.edu!howland.reston.ans.net!vixen.cso.uiuc.edu!usenet","Organization":"University of Illinois at Urbana"},"date":"798920012","messageID":"3nm2gc$m6l@vixen.cso.uiuc.edu","receivedDate":"798920012","subject":"Re: Netscape1.1","class":"mailcore::MessageHeader","references":["3nm097$gbj@clam.rutgers.edu"]},"class":"mailcore::MessageParser","mainPart":{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"us-ascii","class":"mailcore::Attachment"}} \ No newline at end of file +{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"crobinso@clam.rutgers.edu"}]},"from":{"class":"mailcore::Address","displayName":"zxc","mailbox":"zxc@uiuc.edu"},"extraHeaders":{"X-URL":"news:3nm097$gbj@clam.rutgers.edu","Content-Type":"text\/plain; charset=us-ascii","Lines":"28","NNTP-Posting-Host":"nuntana.animal.uiuc.edu","Newsgroups":"comp.os.linux.misc","X-Mailer":"Mozilla 1.1N (X11; I; Linux 1.2.3 i486)","Content-Transfer-Encoding":"7bit","Mime-Version":"1.0","Path":"flop.mcom.com!news.Stanford.EDU!bloom-beacon.mit.edu!spool.mu.edu!howland.reston.ans.net!vixen.cso.uiuc.edu!usenet","Organization":"University of Illinois at Urbana"},"date":"798920012","messageID":"3nm2gc$m6l@vixen.cso.uiuc.edu","receivedDate":"798920012","subject":"Re: Netscape1.1","class":"mailcore::MessageHeader","references":["3nm097$gbj@clam.rutgers.edu"]},"class":"mailcore::MessageParser","mainPart":{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/90 b/unittest/data/parser/output/mbox/jwz/90 index a3d82ccdf..a68d381f4 100644 --- a/unittest/data/parser/output/mbox/jwz/90 +++ b/unittest/data/parser/output/mbox/jwz/90 @@ -1 +1 @@ -{"header":{"cc":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"John Lamb","mailbox":"lamb"},{"class":"mailcore::Address","displayName":"Michael Littman","mailbox":"mlittman"},{"class":"mailcore::Address","displayName":"David A. Braun","mailbox":"braun"}]},"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"ietf-822@dimacs.rutgers.edu"},{"class":"mailcore::Address","mailbox":"info-metamail"}]},"from":{"class":"mailcore::Address","displayName":"Nathaniel Borenstein","mailbox":"nsb"},"extraHeaders":{"Return-Path":"","Content-Type":"multipart\/alternative; \u000a\u0009boundary=\"Interpart.Boundary.Qdjbh920M2Yt4L5uUD\"","Received":"by greenbush.bellcore.com (4.1\/4.7)\u000a\u0009id for nsb; Wed, 11 Mar 92 16:27:44 EST","Mime-Version":"1.0","X-Andrew-Message-Size":"555+2"},"date":"700349257","messageID":"Edjbh9O0M2YtQL5uct@thumper.bellcore.com","receivedDate":"700349257","subject":"Barbershop MIME","class":"mailcore::MessageHeader","references":["QdjbYVC0M2Yt4L5stL@thumper.bellcore.com"]},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/alternative","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"1","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"2","mimeType":"message\/external-body","contentDescription":"Let Me Sing You Email (audio)","class":"mailcore::Attachment","filename":"quartet.au"},{"partType":"single","uniqueID":"3","mimeType":"text\/plain","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"4","mimeType":"message\/external-body","contentDescription":"The Telephone Chords, A Moment Immortalized","class":"mailcore::Attachment","filename":"quartet.gif"},{"partType":"single","uniqueID":"5","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"}]}}]}}} \ No newline at end of file +{"header":{"cc":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"John Lamb","mailbox":"lamb"},{"class":"mailcore::Address","displayName":"Michael Littman","mailbox":"mlittman"},{"class":"mailcore::Address","displayName":"David A. Braun","mailbox":"braun"}]},"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"ietf-822@dimacs.rutgers.edu"},{"class":"mailcore::Address","mailbox":"info-metamail"}]},"from":{"class":"mailcore::Address","displayName":"Nathaniel Borenstein","mailbox":"nsb"},"extraHeaders":{"Return-Path":"","Content-Type":"multipart\/alternative; \u000a\u0009boundary=\"Interpart.Boundary.Qdjbh920M2Yt4L5uUD\"","Received":"by greenbush.bellcore.com (4.1\/4.7)\u000a\u0009id for nsb; Wed, 11 Mar 92 16:27:44 EST","Mime-Version":"1.0","X-Andrew-Message-Size":"555+2"},"date":"700349257","messageID":"Edjbh9O0M2YtQL5uct@thumper.bellcore.com","receivedDate":"700349257","subject":"Barbershop MIME","class":"mailcore::MessageHeader","references":["QdjbYVC0M2Yt4L5stL@thumper.bellcore.com"]},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/alternative","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"1","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"2","mimeType":"message\/external-body","contentDescription":"Let Me Sing You Email (audio)","class":"mailcore::Attachment","filename":"quartet.au"},{"partType":"single","uniqueID":"3","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"4","mimeType":"message\/external-body","contentDescription":"The Telephone Chords, A Moment Immortalized","class":"mailcore::Attachment","filename":"quartet.gif"},{"partType":"single","uniqueID":"5","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"}]}}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/93 b/unittest/data/parser/output/mbox/jwz/93 index 881520ef6..74b4359e8 100644 --- a/unittest/data/parser/output/mbox/jwz/93 +++ b/unittest/data/parser/output/mbox/jwz/93 @@ -1 +1 @@ -{"header":{"cc":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"dave@expo.lcs.mit.edu"}]},"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Fred Hansen","mailbox":"wjh+@andrew.cmu.edu"}]},"from":{"class":"mailcore::Address","displayName":"Michael J. McInerny","mailbox":"mcinerny+@andrew.cmu.edu"},"extraHeaders":{"Return-Path":"","Content-Type":"multipart\/alternative; \u000a\u0009boundary=\"Interpart.Boundary.8eBYTr200hYx4uHkoz\"","Resent-Message-Id":"","Resent-From":"Fred Hansen ","Resent-Date":"Wed, 10 Jun 1992 14:49:18 -0400 (EDT)","Resent-To":"gk5g+@andrew.cmu.edu, nsb+@andrew.cmu.edu","Received":"from thumper.bellcore.com by greenbush.bellcore.com (4.1\/4.7)\u000a\u0009id for nsb; Wed, 10 Jun 92 14:51:18 EDT","Mime-Version":"1.0","X-Andrew-Message-Size":"762+8"},"date":"708200439","messageID":"MeBYTrq00hYx4uHkwL@andrew.cmu.edu","receivedDate":"708200439","subject":"Re: icons","class":"mailcore::MessageHeader","inReplyTo":["0eBXzMC00Vs4QNk9oL@andrew.cmu.edu"],"references":["9206101740.AA07174@kanga.lcs.mit.edu","0eBXzMC00Vs4QNk9oL@andrew.cmu.edu"]},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/alternative","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"1","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"2","mimeType":"image\/x-xwd","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"3","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"4","mimeType":"image\/x-xwd","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"5","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"6","mimeType":"image\/x-xwd","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"7","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"8","mimeType":"image\/x-xwd","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"9","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"10","mimeType":"image\/x-xwd","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"11","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"12","mimeType":"image\/x-xwd","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"13","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"14","mimeType":"image\/x-xwd","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"15","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"16","mimeType":"image\/x-xwd","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"17","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"}]}}]}}} \ No newline at end of file +{"header":{"cc":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"dave@expo.lcs.mit.edu"}]},"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Fred Hansen","mailbox":"wjh+@andrew.cmu.edu"}]},"from":{"class":"mailcore::Address","displayName":"Michael J. McInerny","mailbox":"mcinerny+@andrew.cmu.edu"},"extraHeaders":{"Return-Path":"","Content-Type":"multipart\/alternative; \u000a\u0009boundary=\"Interpart.Boundary.8eBYTr200hYx4uHkoz\"","Resent-Message-Id":"","Resent-From":"Fred Hansen ","Resent-Date":"Wed, 10 Jun 1992 14:49:18 -0400 (EDT)","Resent-To":"gk5g+@andrew.cmu.edu, nsb+@andrew.cmu.edu","Received":"from thumper.bellcore.com by greenbush.bellcore.com (4.1\/4.7)\u000a\u0009id for nsb; Wed, 10 Jun 92 14:51:18 EDT","Mime-Version":"1.0","X-Andrew-Message-Size":"762+8"},"date":"708200439","messageID":"MeBYTrq00hYx4uHkwL@andrew.cmu.edu","receivedDate":"708200439","subject":"Re: icons","class":"mailcore::MessageHeader","inReplyTo":["0eBXzMC00Vs4QNk9oL@andrew.cmu.edu"],"references":["9206101740.AA07174@kanga.lcs.mit.edu","0eBXzMC00Vs4QNk9oL@andrew.cmu.edu"]},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/alternative","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"1","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"2","mimeType":"image\/x-xwd","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"3","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"4","mimeType":"image\/x-xwd","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"5","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"6","mimeType":"image\/x-xwd","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"7","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"8","mimeType":"image\/x-xwd","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"9","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"10","mimeType":"image\/x-xwd","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"11","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"12","mimeType":"image\/x-xwd","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"13","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"14","mimeType":"image\/x-xwd","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"15","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"16","mimeType":"image\/x-xwd","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"17","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"}]}}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/94 b/unittest/data/parser/output/mbox/jwz/94 index 53acb6d40..b405cb09c 100644 --- a/unittest/data/parser/output/mbox/jwz/94 +++ b/unittest/data/parser/output/mbox/jwz/94 @@ -1 +1 @@ -{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"jbw@bigbird.bu.edu"}]},"from":{"class":"mailcore::Address","displayName":"Nathaniel Borenstein","mailbox":"nsb"},"extraHeaders":{"Content-Type":"multipart\/alternative; \u000a\u0009boundary=\"Interpart.Boundary.geteZma0M2Yt93sYwo\"","MIME-Version":"1.0","Received":"from Messages.8.5.N.CUILIB.3.45.SNAP.NOT.LINKED.greenbush.galaxy.sun4.41\u000a via MS.5.6.greenbush.galaxy.sun4_41;\u000a Thu, 22 Oct 1992 09:15:31 -0400 (EDT)","X-Andrew-Authenticated-As":"4099;greenbush.galaxy;Nathaniel Borenstein","X-Andrew-Message-Size":"546+1"},"date":"719759731","messageID":"keteZn20M2YtJ3sZ5q@thumper.bellcore.com","receivedDate":"719759731","subject":"Re: Could you translate (\u05dd\u05d5\u05dc\u05e9 \u05df\u05d1 \u05d9\u05dc\u05d8\u05e4\u05e0) for me?","class":"mailcore::MessageHeader","inReplyTo":["9210220105.AA19399@bigbird.bu.edu"],"references":["9210220105.AA19399@bigbird.bu.edu"]},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/alternative","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"1","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"2","mimeType":"image\/gif","contentDescription":"My screen reading your mail","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"3","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"}]}}]}}} \ No newline at end of file +{"header":{"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"jbw@bigbird.bu.edu"}]},"from":{"class":"mailcore::Address","displayName":"Nathaniel Borenstein","mailbox":"nsb"},"extraHeaders":{"Content-Type":"multipart\/alternative; \u000a\u0009boundary=\"Interpart.Boundary.geteZma0M2Yt93sYwo\"","MIME-Version":"1.0","Received":"from Messages.8.5.N.CUILIB.3.45.SNAP.NOT.LINKED.greenbush.galaxy.sun4.41\u000a via MS.5.6.greenbush.galaxy.sun4_41;\u000a Thu, 22 Oct 1992 09:15:31 -0400 (EDT)","X-Andrew-Authenticated-As":"4099;greenbush.galaxy;Nathaniel Borenstein","X-Andrew-Message-Size":"546+1"},"date":"719759731","messageID":"keteZn20M2YtJ3sZ5q@thumper.bellcore.com","receivedDate":"719759731","subject":"Re: Could you translate (\u05dd\u05d5\u05dc\u05e9 \u05df\u05d1 \u05d9\u05dc\u05d8\u05e4\u05e0) for me?","class":"mailcore::MessageHeader","inReplyTo":["9210220105.AA19399@bigbird.bu.edu"],"references":["9210220105.AA19399@bigbird.bu.edu"]},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/alternative","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"1","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"2","mimeType":"image\/gif","contentDescription":"My screen reading your mail","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"3","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"}]}}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/96 b/unittest/data/parser/output/mbox/jwz/96 index fd13526a9..58fa4ea40 100644 --- a/unittest/data/parser/output/mbox/jwz/96 +++ b/unittest/data/parser/output/mbox/jwz/96 @@ -1 +1 @@ -{"header":{"cc":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Jonathan Rosenberg","mailbox":"jxr"},{"class":"mailcore::Address","displayName":"Robert E Kraut","mailbox":"kraut"},{"class":"mailcore::Address","displayName":"Al Buzzard","mailbox":"alb"}]},"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Terry Crowley","mailbox":"tcrowley@diamond.bbn.com"}]},"from":{"class":"mailcore::Address","displayName":"Nathaniel Borenstein","mailbox":"nsb"},"extraHeaders":{"Content-Type":"multipart\/alternative; \u000a\u0009boundary=\"Interpart.Boundary.8fQc7B:0M2Yt47NCon\"","MIME-Version":"1.0","Received":"from Messages.8.5.N.CUILIB.3.45.SNAP.NOT.LINKED.greenbush.galaxy.sun4.41\u000a via MS.5.6.greenbush.galaxy.sun4_41;\u000a Fri, 5 Feb 1993 10:03:45 -0500 (EST)","X-Andrew-Authenticated-As":"4099;greenbush.galaxy;Nathaniel Borenstein","X-Andrew-Message-Size":"1184+2"},"date":"728924625","messageID":"AfQc7Fu0M2YtM7NCws@thumper.bellcore.com","receivedDate":"728924625","subject":"Re: Audio","class":"mailcore::MessageHeader","inReplyTo":["9302051445.AA10767@dilithium.bbn.com"],"references":["9302051445.AA10767@dilithium.bbn.com"]},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/alternative","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"1","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"2","mimeType":"audio\/basic","contentDescription":"I'm VERY happy!","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"3","mimeType":"text\/richtext","charset":"US-ASCII","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"4","mimeType":"image\/gif","contentDescription":"My daughter Miriam","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"5","mimeType":"text\/plain","charset":"US-ASCII","class":"mailcore::Attachment"}]}}]}}} \ No newline at end of file +{"header":{"cc":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Jonathan Rosenberg","mailbox":"jxr"},{"class":"mailcore::Address","displayName":"Robert E Kraut","mailbox":"kraut"},{"class":"mailcore::Address","displayName":"Al Buzzard","mailbox":"alb"}]},"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","displayName":"Terry Crowley","mailbox":"tcrowley@diamond.bbn.com"}]},"from":{"class":"mailcore::Address","displayName":"Nathaniel Borenstein","mailbox":"nsb"},"extraHeaders":{"Content-Type":"multipart\/alternative; \u000a\u0009boundary=\"Interpart.Boundary.8fQc7B:0M2Yt47NCon\"","MIME-Version":"1.0","Received":"from Messages.8.5.N.CUILIB.3.45.SNAP.NOT.LINKED.greenbush.galaxy.sun4.41\u000a via MS.5.6.greenbush.galaxy.sun4_41;\u000a Fri, 5 Feb 1993 10:03:45 -0500 (EST)","X-Andrew-Authenticated-As":"4099;greenbush.galaxy;Nathaniel Borenstein","X-Andrew-Message-Size":"1184+2"},"date":"728924625","messageID":"AfQc7Fu0M2YtM7NCws@thumper.bellcore.com","receivedDate":"728924625","subject":"Re: Audio","class":"mailcore::MessageHeader","inReplyTo":["9302051445.AA10767@dilithium.bbn.com"],"references":["9302051445.AA10767@dilithium.bbn.com"]},"class":"mailcore::MessageParser","mainPart":{"partType":"multipart\/alternative","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"0","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"multipart\/mixed","class":"mailcore::Multipart","parts":{"class":"mailcore::Array","items":[{"partType":"single","uniqueID":"1","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"2","mimeType":"audio\/basic","contentDescription":"I'm VERY happy!","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"3","mimeType":"text\/richtext","charset":"utf-8","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"4","mimeType":"image\/gif","contentDescription":"My daughter Miriam","class":"mailcore::Attachment"},{"partType":"single","uniqueID":"5","mimeType":"text\/plain","charset":"utf-8","class":"mailcore::Attachment"}]}}]}}} \ No newline at end of file diff --git a/unittest/data/parser/output/mbox/jwz/98 b/unittest/data/parser/output/mbox/jwz/98 index bf25c97cd..c90a76609 100644 --- a/unittest/data/parser/output/mbox/jwz/98 +++ b/unittest/data/parser/output/mbox/jwz/98 @@ -1 +1 @@ -{"header":{"from":{"class":"mailcore::Address","displayName":"Stefano Gazziano","mailbox":"GAZZIANO_S@CASACCIA.ENEA.IT"},"extraHeaders":{"Lines":"37","MIME-version":"1.0","Newsgroups":"comp.soft-sys.sas","Comments":"Gated by NETNEWS@AUVM.AMERICAN.EDU","Path":"flop.mcom.com!news.Stanford.EDU!bloom-beacon.mit.edu!news.kei.com!hookup!lll-winken.llnl.gov!uwm.edu!cs.utexas.edu!swrinde!gatech!paladin.american.edu!auvm!CASACCIA.ENEA.IT!GAZZIANO_S","Content-type":"MESSAGE\/RFC822"},"date":"798920507","sender":{"class":"mailcore::Address","displayName":"SAS(r) Discussion","mailbox":"SAS-L%VTVM1.BITNET@VTBIT.CC.VT.EDU"},"messageID":"01HPSYRPA1IAERWENE@ECA401.CASACCIA.ENEA.IT","receivedDate":"798920507","subject":"work space","class":"mailcore::MessageHeader","replyTo":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"GAZZIANO_S@CASACCIA.ENEA.IT"}]}},"class":"mailcore::MessageParser","mainPart":{"partType":"message","header":{"cc":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"gazziano_s@casaccia.enea.it"}]},"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"sas-l@uga.ucc.uga.edu"}]},"from":{"class":"mailcore::Address","mailbox":"GAZZIANO_S@casaccia.enea.it"},"extraHeaders":{"Received":"from ECA401.CASACCIA.ENEA.IT by ECA401.CASACCIA.ENEA.IT\u000a (PMDF V4.3-7 #3856) id <01HPSWPQHFQ8ERWELB@ECA401.CASACCIA.ENEA.IT>; Wed,\u000a 26 Apr 1995 17:31:53 +1","Return-path":""},"date":"798917078","messageID":"01HPSWRQOS4IERWELB@ECA401.CASACCIA.ENEA.IT","receivedDate":"798917078","subject":"work file space","class":"mailcore::MessageHeader"},"class":"mailcore::MessagePart","mainPart":{"partType":"single","uniqueID":"0","mimeType":"text\/PLAIN","charset":"US-ASCII","class":"mailcore::Attachment"}}} \ No newline at end of file +{"header":{"from":{"class":"mailcore::Address","displayName":"Stefano Gazziano","mailbox":"GAZZIANO_S@CASACCIA.ENEA.IT"},"extraHeaders":{"Lines":"37","MIME-version":"1.0","Newsgroups":"comp.soft-sys.sas","Comments":"Gated by NETNEWS@AUVM.AMERICAN.EDU","Path":"flop.mcom.com!news.Stanford.EDU!bloom-beacon.mit.edu!news.kei.com!hookup!lll-winken.llnl.gov!uwm.edu!cs.utexas.edu!swrinde!gatech!paladin.american.edu!auvm!CASACCIA.ENEA.IT!GAZZIANO_S","Content-type":"MESSAGE\/RFC822"},"date":"798920507","sender":{"class":"mailcore::Address","displayName":"SAS(r) Discussion","mailbox":"SAS-L%VTVM1.BITNET@VTBIT.CC.VT.EDU"},"messageID":"01HPSYRPA1IAERWENE@ECA401.CASACCIA.ENEA.IT","receivedDate":"798920507","subject":"work space","class":"mailcore::MessageHeader","replyTo":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"GAZZIANO_S@CASACCIA.ENEA.IT"}]}},"class":"mailcore::MessageParser","mainPart":{"partType":"message","header":{"cc":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"gazziano_s@casaccia.enea.it"}]},"to":{"class":"mailcore::Array","items":[{"class":"mailcore::Address","mailbox":"sas-l@uga.ucc.uga.edu"}]},"from":{"class":"mailcore::Address","mailbox":"GAZZIANO_S@casaccia.enea.it"},"extraHeaders":{"Received":"from ECA401.CASACCIA.ENEA.IT by ECA401.CASACCIA.ENEA.IT\u000a (PMDF V4.3-7 #3856) id <01HPSWPQHFQ8ERWELB@ECA401.CASACCIA.ENEA.IT>; Wed,\u000a 26 Apr 1995 17:31:53 +1","Return-path":""},"date":"798917078","messageID":"01HPSWRQOS4IERWELB@ECA401.CASACCIA.ENEA.IT","receivedDate":"798917078","subject":"work file space","class":"mailcore::MessageHeader"},"class":"mailcore::MessagePart","mainPart":{"partType":"single","uniqueID":"0","mimeType":"text\/PLAIN","charset":"utf-8","class":"mailcore::Attachment"}}} \ No newline at end of file diff --git a/unittest/data/summary/output/6144-russian.txt b/unittest/data/summary/output/6144-russian.txt index 7ca0d176a..4a0ee7d7c 100644 --- a/unittest/data/summary/output/6144-russian.txt +++ b/unittest/data/summary/output/6144-russian.txt @@ -1,6 +1,6 @@ From: YouTube Service To: geeksputnik -Subject: Comment posted on "þÔÏ ÌÕÞÛÅ Android ÉÌÉ iOS..?!" +Subject: Comment posted on "Что лучше Android или iOS..?!" Date: June 19, 2012 at 1:31:03 PM PDT help center (//support.google.com/youtube/) | e-mail options (http://www.youtube.com/account_notifications) | report spam (http://www.youtube.com/email_spam?v=1a&c=6y_XeTTXc2sopP-zAVkeppuiglcdENnn0ta7iTJML8lhl00Ga1846e-uWY2zggx35yEFrcA_QEfuUC2IhmW1Y_BfFT2K3J-zzMt0sr5qYAEdrcsh1zF151PE7Z9CCRQMpmPf5haaWwgGhnR_rj7AF19xIwpRb0XwYwX93-vVeed78hp1MO5V1nb5e1p2lyoI9CW181PDB6dhc5ErCMLkrA0ojLgrDKREkyb5oHwGojAmIEMf8ScRWprUx5Jh-nhR1YZiEdTNMh0zEH1v785gSpdoUX09md11uFAIuaWzhVTuxR57Cauv4SHwWy1sXaxHW9c_WsXvX0UfvTmzmJyODgF_Sfr6rw1Ucci_lm7avUCjo5J8GU10tZvBNG8D4d165s49tQEB2Di9Qy0C8rVYnmkXjrgftKdbzjw1Qf44mKb8gzBQrflhM6EpEmOqyBCW_oOC1SmVt-jW1Htr54PJuHzN8biLzF9_x8BgjA_FtYEdA9e5023lmyvP8vrWay8pTDHT0rj4cwvLq3W3tLfc-CFEu4O_57g0BoP1dnY54HK6Btn5J9N3jqn_jkjc3ah9e-gXh_oeBC2T3CMTRUwbcBY1bjFwFzdV8nSHNkW5XY772adaU9rBNdatiZRlrpc8AyTWe8Xn6xBji36LCKhIWL9nGtMCMKdIDRWOo54cWTHR3bYDn8mT2orQL6mlJfxubfpVWmu6e6L1ucjXXWMQWvc9Vgt8DMJ5IMDVmTLQwXbkibau3ip9I-mkdcJ9bM4-kGIiECYgONgXTuT8EnymVDenYobr6VTtN1F2oMhPHYqlHGW16N_wHixJR7Eo-64ufI-TAxwnVBr8Juz0Pj8vTZQiDQWcrBq1) | unsubscribe (http://www.youtube.com/email_unsubscribe?action_unsubscribe=Kjo1B9iv5uVZogkAfOisEbawUjd8MTM0MDEzNzg2M0AxMzQwMTM3ODYz&uid=PAOhq8sxM_gYTWmdIwDlXA&feature=em-comment_received) diff --git a/unittest/unittest.cpp b/unittest/unittest.cpp index 8db7cc04d..19551d436 100644 --- a/unittest/unittest.cpp +++ b/unittest/unittest.cpp @@ -2,6 +2,14 @@ #include #include #include +#include "MCMessageBuilder.h" +#include "MCMessageHeader.h" +#include "MCAddress.h" +#include "MCAttachment.h" +#include "MCMessageParser.h" +#include "MCMessagePart.h" +#include "MCMultiPart.h" +#include "MCIMAPNamespace.h" using namespace mailcore; @@ -336,7 +344,7 @@ static void testMUTF7(void) int main(int argc, char ** argv) { tzset(); - + if (argc < 2) { fprintf(stderr, "syntax: unittestcpp [unittestdatadir]\n"); exit(EXIT_FAILURE); @@ -365,4 +373,4 @@ int main(int argc, char ** argv) } exit(EXIT_SUCCESS); -} \ No newline at end of file +} diff --git a/unittest/unittest.swift b/unittest/unittest.swift new file mode 100644 index 000000000..ebac6d043 --- /dev/null +++ b/unittest/unittest.swift @@ -0,0 +1,403 @@ +// +// unittest.swift +// mailcore2 +// +// Created by Andrew on 12/5/16. +// Copyright © 2016 MailCore. All rights reserved. +// + +import Foundation +import Dispatch +import XCTest + +#if SWIFT_PACKAGE + import CMailCore +#endif + +@testable import MailCore + +fileprivate func equalAny(_ lhsValue: Any, _ rhsValue: Any) -> Bool { + if let lhsHashable = lhsValue as? AnyHashable, let rhsHashable = rhsValue as? AnyHashable { + if lhsHashable != rhsHashable { + print("EqualAny assert: \(type(of: lhsHashable)):\(lhsHashable) != \(type(of: rhsHashable)):\(rhsHashable)") + return false + } + } + else if let lhsArray = lhsValue as? Array, let rhsArray = rhsValue as? Array { + if equalArrays(lhsArray, rhsArray) == false { + //print("EqualAny assert: equalArrays \(lhsArray) != \(rhsArray)") + return false + } + } + else if let lhsDictionary = lhsValue as? Dictionary, let rhsDictionary = rhsValue as? Dictionary { + if equalDictionaries(lhsDictionary, rhsDictionary) == false { + //print("EqualAny assert: equalDictionaries \(lhsDictionary) != \(rhsDictionary)") + return false + } + } + else { + print("EqualAny unknown type") + assert(false) + return false + } + return true +} + + +fileprivate func equalDictionaries(_ lhs: Dictionary, _ rhs: Dictionary) -> Bool { + for (key, lhsValue) in lhs { + guard let rhsValue = rhs[key] else { + print("EqualDictionaries no value for \(key)") + return false + } + if equalAny(lhsValue, rhsValue) == false { + //print("EqualDictionaries: equalAny(\(lhsValue), \(rhsValue))") + print("Check for \(key) failed") + return false + } + } + return true +} + +fileprivate func equalArrays(_ lhs: Array, _ rhs: Array) -> Bool { + for (idx, lhsValue) in lhs.enumerated() { + let rhsValue = rhs[idx] + if equalAny(lhsValue, rhsValue) == false { + //print("EqualArrays: equalAny(\(lhsValue), \(rhsValue))") + return false + } + } + return true +} + +extension MCOMessageHeader { + func prepareForUnitTest() { + if fabs(date.timeIntervalSinceNow) <= 2 { + // Date might be generated, set to known date. + date = Date(timeIntervalSinceReferenceDate: 0) + } + if fabs(receivedDate.timeIntervalSinceNow) <= 2 { + // Date might be generated, set to known date. + receivedDate = Date(timeIntervalSinceReferenceDate: 0) + } + if self.nativeInstance.isMessageIDAutoGenerated() { + messageID = "MyMessageID123@mail.gmail.com" + } + } +} + +extension MCOAbstractPart { + func prepareForUnitTest() { + if let part = self as? MCOAbstractMessagePart { + part.prepareForUnitTest2() + } + else if let part = self as? MCOAbstractMultipart { + part.prepareForUnitTest2() + } + } +} + +extension MCOAbstractMessagePart { + func prepareForUnitTest2() { + header?.prepareForUnitTest() + mainPart?.prepareForUnitTest() + } +} +extension MCOAbstractMultipart { + + func prepareForUnitTest2() { + for part: MCOAbstractPart in parts ?? [] { + part.prepareForUnitTest() + } + } +} +extension FileManager { + + @discardableResult + func fileExists(atPath: String , isDirectory: inout Bool) -> Bool { + var isDirectoryObjC: ObjCBool = false + let result = self.fileExists(atPath: atPath, isDirectory: &isDirectoryObjC) + isDirectory = isDirectoryObjC.boolValue + return result + } + +} + +fileprivate let TEST_EMAIL = "comscams@gmail.com" +fileprivate let TEST_PASSWORD = "l4 d3 e2 r1" + +class unittest : XCTestCase { + + var _mainPath: URL! + var _builderPath: URL! + var _parserPath: URL! + var _builderOutputPath: URL! + var _parserOutputPath: URL! + var _charsetDetectionPath: URL! + var _summaryDetectionPath: URL! + var _summaryDetectionOutputPath: URL! + + override func setUp() { + super.setUp() + + #if os(Android) + _mainPath = Bundle.main.bundleURL.appendingPathComponent("resources/data") + MCOOperation.setMainQueue(DispatchQueue.main) + #else + _mainPath = Bundle.module.resourceURL!.appendingPathComponent("data") + #endif + + NSTimeZone.default = TimeZone(identifier: "America/Los_Angeles")! + setlocale(LC_ALL, "en_US.UTF-8") + setenv("TZ", "America/Los_Angeles", 1) + tzset() + + _builderPath = _mainPath.appendingPathComponent("builder/input") + _builderOutputPath = _mainPath.appendingPathComponent("builder/output") + _parserPath = _mainPath.appendingPathComponent("parser/input") + _parserOutputPath = _mainPath.appendingPathComponent("parser/output") + _charsetDetectionPath = _mainPath.appendingPathComponent("charset-detection") + _summaryDetectionPath = _mainPath.appendingPathComponent("summary/input") + _summaryDetectionOutputPath = _mainPath.appendingPathComponent("summary/output") + + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testMessageBuilder1() { + let builder = MCOMessageBuilder() + builder.header.from = MCOAddress(RFC822String: "Hoà ") + builder.header.to = [MCOAddress(RFC822String: "Foo Bar ")!] + builder.header.subject = "testMessageBuilder1" + builder.header.date = Date(timeIntervalSinceReferenceDate: 0) + builder.header.messageID = "MyMessageID123@mail.gmail.com" + builder.htmlBody = "This is a HTML content" + let path = _builderOutputPath.appendingPathComponent("builder1.eml") + print(path.path) + let expectedData = try! Data.init(contentsOf: path, options: []) + builder.setBoundaries(["1", "2", "3", "4", "5"]) + XCTAssertEqual(String(data: builder.data()!, encoding: String.Encoding.utf8), String(data: expectedData, encoding: String.Encoding.utf8)) + } + + func testMessageBuilder2() { + let builder = MCOMessageBuilder() + builder.header.from = MCOAddress(RFC822String: "Hoà ") + builder.header.to = [MCOAddress(RFC822String: "Foo Bar ")!, MCOAddress(RFC822String: "Other Recipient ")!] + builder.header.cc = [MCOAddress(RFC822String: "Carbon Copy ")!, MCOAddress(RFC822String: "Other Recipient ")!] + builder.header.subject = "testMessageBuilder2" + builder.header.date = Date(timeIntervalSinceReferenceDate: 0) + builder.header.messageID = "MyMessageID123@mail.gmail.com" + builder.htmlBody = "This is a HTML content" + var path = _builderPath.appendingPathComponent("photo.jpg") + builder.addAttachment(attachment: MCOAttachment.attachmentWithContentsOfFile(filename: path.path)!) + path = _builderPath.appendingPathComponent("photo2.jpg") + builder.addAttachment(attachment: MCOAttachment.attachmentWithContentsOfFile(filename: path.path)!) + builder.setBoundaries(["1", "2", "3", "4", "5"]) + path = _builderOutputPath.appendingPathComponent("builder2.eml") + let expectedData = try! Data(contentsOf: path, options: []) + //[[builder data] writeToFile:@"/Users/hoa/builder2-now.eml" atomically:YES]; + XCTAssertEqual(String(data: builder.data()!, encoding: String.Encoding.utf8), String(data: expectedData, encoding: String.Encoding.utf8)) + } + + func testMessageBuilder3() { + let builder = MCOMessageBuilder() + builder.header.from = MCOAddress(RFC822String: "Hoà ") + builder.header.to = [MCOAddress(RFC822String: "Foo Bar ")!, MCOAddress(RFC822String: "Other Recipient ")!] + builder.header.cc = [MCOAddress(RFC822String: "Carbon Copy ")!, MCOAddress(RFC822String: "Other Recipient ")!] + builder.header.subject = "testMessageBuilder3" + builder.header.date = Date(timeIntervalSinceReferenceDate: 0) + builder.header.messageID = "MyMessageID123@mail.gmail.com" + builder.htmlBody = "
This is a HTML content
" + var path = _builderPath.appendingPathComponent("photo.jpg") + builder.addAttachment(attachment: MCOAttachment.attachmentWithContentsOfFile(filename: path.path)!) + path = _builderPath.appendingPathComponent("photo2.jpg") + let attachment = MCOAttachment.attachmentWithContentsOfFile(filename: path.path)! + attachment.contentID = "123" + builder.addRelatedAttachment(attachment: attachment) + builder.setBoundaries(["1", "2", "3", "4", "5"]) + path = _builderOutputPath.appendingPathComponent("builder3.eml") + let expectedData = try? Data(contentsOf: path, options: []) + //[[builder data] writeToFile:@"/Users/hoa/builder3-now.eml" atomically:YES]; + XCTAssertEqual(String(data: builder.data()!, encoding: String.Encoding.utf8), String(data: expectedData!, encoding: String.Encoding.utf8)) + } + + func testMessageParser() { + var expectedData: Data! + do { + + let list = try FileManager.default.subpathsOfDirectory(atPath: _parserPath.path) + for name in list { + var path = _parserPath.appendingPathComponent(name) + var isDirectory = false + FileManager.default.fileExists(atPath: path.path , isDirectory: &isDirectory) + if isDirectory { + continue + } + + if path.lastPathComponent.starts(with: ".") { // Hidden files + continue + } + + let data = try Data(contentsOf: path, options: []) + let parser = MCOMessageParser(data: data) + parser.header.prepareForUnitTest() + parser.mainPart()?.prepareForUnitTest() + + let result: Dictionary = dictionaryUnsafeCast(parser.nativeInstance.serializable()) + + path = _parserOutputPath.appendingPathComponent(name) + expectedData = try Data(contentsOf: path, options: []) + let expectedResult = try JSONSerialization.jsonObject(with: expectedData, options: []) as! [AnyHashable: Any] + + let equal = equalDictionaries(result, expectedResult) + if !equal { + print("Parsed Result: \(result)") + print("Expected Result: \(expectedResult)") + let pathResult = path.path + ".compswift" + print("Save result to: \(pathResult)") + parser.saveToFile(fileName: pathResult ) + } + XCTAssertTrue(equal, "file \(name)"); + } + } + catch let e { + XCTFail(" " + String.init(describing: e) + "\n" + (String(data: expectedData, encoding: .utf8) ?? "error!")) + return + } + + } + + func testCharsetDetection() { + let list = try! FileManager.default.subpathsOfDirectory(atPath: _charsetDetectionPath.path) + for name in list { + let path = _charsetDetectionPath.appendingPathComponent(name) + var isDirectory = false + FileManager.default.fileExists(atPath: path.path , isDirectory: &isDirectory) + if isDirectory { + continue + } + if path.lastPathComponent.starts(with: ".") { // Hidden files + continue + } + + let data = try! Data(contentsOf: path, options: []) + let charset = data.mailCoreData().charsetWithFilteredHTML(false).string()!.lowercased() + XCTAssertEqual(path.deletingPathExtension().lastPathComponent, charset, "not equal"); + } + } + + func testSummary() { + let list = try! FileManager.default.subpathsOfDirectory(atPath: _summaryDetectionPath.path) + for name in list { + let path = _summaryDetectionPath.appendingPathComponent(name) + var isDirectory = false + XCTAssertTrue(FileManager.default.fileExists(atPath: path.path , isDirectory: &isDirectory)) + if isDirectory { + continue + } + if path.lastPathComponent.starts(with: ".") == true { // Hidden files + continue + } + + let data = try! Data(contentsOf: path, options: []) + let parser = MCOMessageParser(data: data) + parser.header.prepareForUnitTest() + parser.mainPart()?.prepareForUnitTest() + let str = parser.plainTextRendering() + + var resultPath = _summaryDetectionOutputPath.appendingPathComponent(name) + resultPath = resultPath.deletingPathExtension().appendingPathExtension("txt") + let resultData = try! Data(contentsOf: resultPath, options: []) + let resultString = String(data: resultData, encoding: .utf8) + + XCTAssertEqual(resultString!.stripingWhitespace(), str!.stripingWhitespace()) + } + + } + + func testMUTF7() { + let mutf7string = "~peter/mail/&U,BTFw-/&ZeVnLIqe-".mailCoreString() + let ns = CIMAPNamespace.namespaceWithPrefix("".mailCoreString(), 0x2f/*'/'*/) + let result = ns.componentsFromPath(mutf7string) + XCTAssertTrue(result.description().string() == "[~peter,mail,台北,日本語]") + XCTAssertTrue(mutf7string.mUTF7DecodedString().string() == "~peter/mail/台北/日本語") + XCTAssertTrue("~peter/mail/台北/日本語".mailCoreString().mUTF7EncodedString().isEqual(mutf7string)) + } + + func testDecodedDataUsingBase64Encoding() { + let str = "RU1QVFkK\r\n\r\n--_005" + + guard let uchars = str.data(using: .utf16LittleEndian) else { + XCTFail() + return + } + + let cStr = str.cString(using: .utf8) + let result = cStr?.withUnsafeBytes { bytes in + guard let bytes: UnsafePointer = Data.unwrapUnsafeBytes(bytes) else { + assert(false) + return "" + } + + var len: Int32 = -1 + let result = MCDecodeBase64ByLines(bytes, Int32(uchars.count / 2), &len) + + return String(cString: result!) + } + + XCTAssertEqual(result, "EMPTY\n") + } +} + +extension String { + + func stripingWhitespace() -> String { + let characterSet = CharacterSet.whitespacesAndNewlines + return trimmingCharacters(in: characterSet) + .replacingCharacters(from: characterSet, replacementChar: " ") + } + + func replacingCharacters(from charset: CharacterSet, replacementChar: Character, squashReplacement: Bool = true) -> String { + guard isEmpty == false else { + return self + } + + var result = [Unicode.Scalar]() + + if squashReplacement { + var hit = false + for scalar in unicodeScalars { + if charset.contains(scalar) { + hit = true + } + else { + if hit { + result.append(contentsOf: replacementChar.unicodeScalars) + hit = false + } + result.append(scalar) + } + } + + if hit { + result.append(contentsOf: replacementChar.unicodeScalars) + } + } + else { + for scalar in unicodeScalars { + if charset.contains(scalar) { + result.append(contentsOf: replacementChar.unicodeScalars) + } + else { + result.append(scalar) + } + } + } + + return String(UnicodeScalarView(result)) + } + +}