diff --git a/.codecov.yml b/.codecov.yml
index b0f249ec41f4..bc7cbef7732b 100644
--- a/.codecov.yml
+++ b/.codecov.yml
@@ -1,7 +1,11 @@
+# SPDX-FileCopyrightText: 2018-2024 Nextcloud GmbH and Nextcloud contributors
+# SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
codecov:
branch: master
ci:
- drone.nextcloud.com
+ notify:
+ after_n_builds: 2
coverage:
precision: 2
@@ -15,7 +19,12 @@ coverage:
comment:
layout: "header, diff, changes, uncovered, tree"
behavior: default
+ require_changes: true
+ after_n_builds: 2
+
+github_checks:
+ annotations: false
ignore:
- - "src/main/res/values*/*"
-
+ - "app/src/main/res/values*/*"
+
diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile
new file mode 100644
index 000000000000..152027db4f00
--- /dev/null
+++ b/.devcontainer/Dockerfile
@@ -0,0 +1,19 @@
+FROM ubuntu:noble@sha256:84e77dee7d1bc93fb029a45e3c6cb9d8aa4831ccfcc7103d36e876938d28895b
+
+ARG DEBIAN_FRONTEND=noninteractive
+ENV ANDROID_HOME=/usr/lib/android-sdk
+
+RUN apt-get update -y
+RUN apt-get install -y unzip wget openjdk-21-jdk vim
+
+RUN wget https://dl.google.com/android/repository/commandlinetools-linux-6858069_latest.zip -O /tmp/commandlinetools.zip
+RUN cd /tmp && unzip commandlinetools.zip
+RUN mkdir -p /usr/lib/android-sdk/cmdline-tools/
+RUN cd /tmp/ && mv cmdline-tools/ latest/ && mv latest/ /usr/lib/android-sdk/cmdline-tools/
+RUN mkdir /usr/lib/android-sdk/licenses/
+RUN chmod -R 755 /usr/lib/android-sdk/
+RUN mkdir -p "$HOME/.gradle" && \
+ echo "org.gradle.jvmargs=-Xmx6g -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 -XX:+UseParallelGC -XX:MaxMetaspaceSize=1g" > "$HOME/.gradle/gradle.properties" && \
+ echo "org.gradle.caching=true" >> "$HOME/.gradle/gradle.properties" && \
+ echo "org.gradle.parallel=true" >> "$HOME/.gradle/gradle.properties" && \
+ echo "org.gradle.configureondemand=true" >> "$HOME/.gradle/gradle.properties"
diff --git a/.devcontainer/Dockerfile.license b/.devcontainer/Dockerfile.license
new file mode 100644
index 000000000000..d078384126a1
--- /dev/null
+++ b/.devcontainer/Dockerfile.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors
+SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
diff --git a/.devcontainer/README.md b/.devcontainer/README.md
new file mode 100644
index 000000000000..60bcf908c5b7
--- /dev/null
+++ b/.devcontainer/README.md
@@ -0,0 +1,9 @@
+
+# Instructions
+
+1. Start a DevContainer either on GitHub Codespaces or locally in VSCode.
+2. Accept all licenses by running `yes | /usr/lib/android-sdk/cmdline-tools/latest/bin/sdkmanager --licenses`.
+3. You can now build the app using `./gradlew clean build`.
diff --git a/.devcontainer/devcontainer.env b/.devcontainer/devcontainer.env
new file mode 100644
index 000000000000..369163cf4fcf
--- /dev/null
+++ b/.devcontainer/devcontainer.env
@@ -0,0 +1,3 @@
+ANDROID_HOME=/usr/lib/android-sdk
+JAVA_OPTS="-Xmx8192M"
+GRADLE_OPTS="-Dorg.gradle.daemon=true"
diff --git a/.devcontainer/devcontainer.env.license b/.devcontainer/devcontainer.env.license
new file mode 100644
index 000000000000..d078384126a1
--- /dev/null
+++ b/.devcontainer/devcontainer.env.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors
+SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
new file mode 100644
index 000000000000..a13d6f9ee4e8
--- /dev/null
+++ b/.devcontainer/devcontainer.json
@@ -0,0 +1,4 @@
+{
+ "name": "NextcloudAndroid",
+ "dockerFile": "Dockerfile",
+}
diff --git a/.devcontainer/devcontainer.json.license b/.devcontainer/devcontainer.json.license
new file mode 100644
index 000000000000..d078384126a1
--- /dev/null
+++ b/.devcontainer/devcontainer.json.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors
+SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
diff --git a/.drone.yml b/.drone.yml
index d91fdeed2bfc..4da327c6a57b 100644
--- a/.drone.yml
+++ b/.drone.yml
@@ -1,48 +1,81 @@
+---
kind: pipeline
-name: generic
+type: docker
+name: tests-stable
+
+# SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
+# SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+
steps:
- - name: generic
- image: nextcloudci/android:android-48
+ - name: gplay
+ image: ghcr.io/nextcloud/continuous-integration-android16:latest
+ privileged: true
+ environment:
+ LOG_USERNAME:
+ from_secret: LOG_USERNAME
+ LOG_PASSWORD:
+ from_secret: LOG_PASSWORD
+ GIT_USERNAME:
+ from_secret: GIT_USERNAME
+ GITHUB_TOKEN:
+ from_secret: GIT_TOKEN
commands:
- - ./gradlew assembleGeneric
+ - scripts/checkIfRunDrone.sh $DRONE_PULL_REQUEST || exit 0
+ - emulator -avd android -no-snapshot -gpu swiftshader_indirect -no-window -no-audio -skin 500x833 &
+ - sed -i s'#false#true#'g app/src/main/res/values/setup.xml
+ - ./gradlew assembleGplayDebugAndroidTest
+ - scripts/wait_for_emulator.sh
+ - ./gradlew installGplayDebugAndroidTest
+ - scripts/wait_for_server.sh "server"
+ - scripts/deleteOldComments.sh "stable" "IT" $DRONE_PULL_REQUEST
+ - ./gradlew createGplayDebugCoverageReport -Pcoverage -Pandroid.testInstrumentationRunnerArguments.notAnnotation=com.owncloud.android.utils.ScreenshotTest || scripts/uploadReport.sh $LOG_USERNAME $LOG_PASSWORD $DRONE_BUILD_NUMBER "stable" "IT" $DRONE_PULL_REQUEST
- - name: notify
- image: drillster/drone-email
- settings:
- port: 587
- from: nextcloud-drone@kaminsky.me
- recipients_only: true
- username:
- from_secret: EMAIL_USERNAME
- password:
- from_secret: EMAIL_PASSWORD
- recipients:
- from_secret: EMAIL_RECIPIENTS
- host:
- from_secret: EMAIL_HOST
- when:
- event:
- - push
- status:
- - failure
- branch:
- - master
+services:
+ - name: server
+ image: ghcr.io/nextcloud/continuous-integration-shallow-server:latest # also change in updateScreenshots.sh
+ environment:
+ EVAL: true
+ SERVER_VERSION: 'stable30'
+ commands:
+ - BRANCH="$SERVER_VERSION" /usr/local/bin/initnc.sh
+ - echo 127.0.0.1 server >> /etc/hosts
+ - rm /etc/apt/sources.list.d/php.list
+ - apt-get update && apt-get install -y composer
+ - su www-data -c "OC_PASS=user1 php /var/www/html/occ user:add --password-from-env --display-name='User One' user1"
+ - su www-data -c "OC_PASS=user2 php /var/www/html/occ user:add --password-from-env --display-name='User Two' user2"
+ - su www-data -c "OC_PASS=user3 php /var/www/html/occ user:add --password-from-env --display-name='User Three' user3"
+ - su www-data -c "php /var/www/html/occ user:setting user2 files quota 1G"
+ - su www-data -c "php /var/www/html/occ group:add users"
+ - su www-data -c "php /var/www/html/occ group:adduser users user1"
+ - su www-data -c "php /var/www/html/occ group:adduser users user2"
+ - su www-data -c "git clone --depth 1 -b $SERVER_VERSION https://github.com/nextcloud/activity.git /var/www/html/apps/activity/"
+ - su www-data -c "php /var/www/html/occ app:enable activity"
+ - su www-data -c "git clone --depth 1 -b $SERVER_VERSION https://github.com/nextcloud/text.git /var/www/html/apps/text/"
+ - su www-data -c "php /var/www/html/occ app:enable text"
+ - su www-data -c "git clone --depth 1 -b $SERVER_VERSION https://github.com/nextcloud/end_to_end_encryption.git /var/www/html/apps/end_to_end_encryption/"
+ - su www-data -c "php /var/www/html/occ app:enable end_to_end_encryption"
+ - su www-data -c "git clone --depth 1 -b $SERVER_VERSION https://github.com/nextcloud/photos.git /var/www/html/apps/photos/"
+ - su www-data -c "cd /var/www/html/apps/photos; composer install --no-dev"
+ - su www-data -c "php /var/www/html/occ app:enable -f photos"
+ - su www-data -c "php /var/www/html/occ config:system:set ratelimit.protection.enabled --value false --type bool"
+ - /usr/local/bin/run.sh
trigger:
branch:
- master
+ - stable-*
event:
- - pull_request
- push
-
+ - pull_request
---
kind: pipeline
-name: gplay
+type: docker
+name: tests-master
steps:
- name: gplay
- image: nextcloudci/android:android-48
+ image: ghcr.io/nextcloud/continuous-integration-android16:latest
privileged: true
environment:
LOG_USERNAME:
@@ -51,72 +84,76 @@ steps:
from_secret: LOG_PASSWORD
GIT_USERNAME:
from_secret: GIT_USERNAME
- GIT_TOKEN:
+ GITHUB_TOKEN:
from_secret: GIT_TOKEN
- ORG_GRADLE_PROJECT_coverage: ''
commands:
- - ./gradlew assembleGplay
- - emulator -avd android-27 -no-window -no-audio &
- - ./wait_for_emulator.sh
- - ./gradlew assembleGplayDebug
- - ./gradlew jacocoTestGplayDebugUnitTestReport || scripts/uploadReport.sh $LOG_USERNAME $LOG_PASSWORD $DRONE_BUILD_NUMBER "Unit" $DRONE_PULL_REQUEST $GIT_USERNAME $GIT_TOKEN
- - ./gradlew installGplayDebugAndroidTest
- - ./gradlew createGplayDebugCoverageReport || scripts/uploadReport.sh $LOG_USERNAME $LOG_PASSWORD $DRONE_BUILD_NUMBER "IT" $DRONE_PULL_REQUEST $GIT_USERNAME $GIT_TOKEN
- - ./gradlew combinedTestReport
- - curl -o codecov.sh https://codecov.io/bash
- - bash ./codecov.sh -t fc506ba4-33c3-43e4-a760-aada38c24fd5
- - name: notify
- image: drillster/drone-email
- settings:
- port: 587
- from: nextcloud-drone@kaminsky.me
- recipients_only: true
- username:
- from_secret: EMAIL_USERNAME
- password:
- from_secret: EMAIL_PASSWORD
- recipients:
- from_secret: EMAIL_RECIPIENTS
- host:
- from_secret: EMAIL_HOST
- when:
- event:
- - push
- status:
- - failure
- branch:
- - master
+ - scripts/checkIfRunDrone.sh $DRONE_PULL_REQUEST || exit 0
+ - emulator -avd android -no-snapshot -gpu swiftshader_indirect -no-window -no-audio -skin 500x833 &
+ - sed -i s'#false#true#'g app/src/main/res/values/setup.xml
+ - scripts/runCombinedTest.sh $DRONE_PULL_REQUEST $LOG_USERNAME $LOG_PASSWORD $DRONE_BUILD_NUMBER
services:
- name: server
- image: nextcloudci/server:server-3
+ image: ghcr.io/nextcloud/continuous-integration-shallow-server:latest # also change in updateScreenshots.sh
+ environment:
+ EVAL: true
+ commands:
+ - /usr/local/bin/initnc.sh
+ - echo 127.0.0.1 server >> /etc/hosts
+ - rm /etc/apt/sources.list.d/php.list
+ - apt-get update && apt-get install -y composer
+ - su www-data -c "OC_PASS=user1 php /var/www/html/occ user:add --password-from-env --display-name='User One' user1"
+ - su www-data -c "OC_PASS=user2 php /var/www/html/occ user:add --password-from-env --display-name='User Two' user2"
+ - su www-data -c "OC_PASS=user3 php /var/www/html/occ user:add --password-from-env --display-name='User Three' user3"
+ - su www-data -c "php /var/www/html/occ user:setting user2 files quota 1G"
+ - su www-data -c "php /var/www/html/occ group:add users"
+ - su www-data -c "php /var/www/html/occ group:adduser users user1"
+ - su www-data -c "php /var/www/html/occ group:adduser users user2"
+ - su www-data -c "git clone --depth 1 -b master https://github.com/nextcloud/activity.git /var/www/html/apps/activity/"
+ - su www-data -c "php /var/www/html/occ app:enable activity"
+ - su www-data -c "git clone --depth 1 -b main https://github.com/nextcloud/text.git /var/www/html/apps/text/"
+ - su www-data -c "php /var/www/html/occ app:enable text"
+ - su www-data -c "git clone --depth 1 -b master https://github.com/nextcloud/end_to_end_encryption/ /var/www/html/apps/end_to_end_encryption/"
+ - su www-data -c "php /var/www/html/occ app:enable end_to_end_encryption"
+ - su www-data -c "git clone --depth 1 https://github.com/nextcloud/photos.git /var/www/html/apps/photos/"
+ - su www-data -c "cd /var/www/html/apps/photos; composer install --no-dev"
+ - su www-data -c "php /var/www/html/occ app:enable -f photos"
+ - su www-data -c "php /var/www/html/occ config:system:set ratelimit.protection.enabled --value false --type bool"
+ - /usr/local/bin/run.sh
trigger:
branch:
- master
+ - stable-*
event:
- push
- pull_request
+
---
kind: pipeline
-name: analysis
+type: docker
+name: allScreenshots
steps:
- - name: analysis
- image: nextcloudci/android:android-48
+ - name: runAllScreenshots
+ image: ghcr.io/nextcloud/continuous-integration-android16:latest
+ privileged: true
environment:
GIT_USERNAME:
from_secret: GIT_USERNAME
- GIT_TOKEN:
+ GITHUB_TOKEN:
from_secret: GIT_TOKEN
LOG_USERNAME:
from_secret: LOG_USERNAME
LOG_PASSWORD:
from_secret: LOG_PASSWORD
commands:
- - export BRANCH=$(scripts/analysis/getBranchName.sh $GIT_USERNAME $GIT_TOKEN $DRONE_PULL_REQUEST)
- - scripts/analysis/analysis-wrapper.sh $GIT_USERNAME $GIT_TOKEN $BRANCH $LOG_USERNAME $LOG_PASSWORD $DRONE_BUILD_NUMBER $DRONE_PULL_REQUEST
-
+ - emulator -avd android -no-snapshot -gpu swiftshader_indirect -no-window -no-audio -skin 500x833 &
+ - sed -i s'#false#true#'g app/src/main/res/values/setup.xml
+ - sed -i s'#showOnlyFailingTestsInReports = ciBuild#showOnlyFailingTestsInReports = false#' build.gradle.kts
+ - scripts/wait_for_emulator.sh
+ - scripts/runAllScreenshotCombinations noCI false
+ - scripts/screenshotSummary.sh
- name: notify
image: drillster/drone-email
settings:
@@ -138,41 +175,18 @@ steps:
- failure
branch:
- master
-
+ - stable-*
trigger:
- branch:
- - master
event:
- - push
- - pull_request
+ - cron
+ cron:
+ - allscreenshots
---
-kind: pipeline
-name: qa
-
-steps:
- - name: qa
- image: nextcloudci/android:android-48
- privileged: true
- environment:
- LOG_USERNAME:
- from_secret: LOG_USERNAME
- LOG_PASSWORD:
- from_secret: LOG_PASSWORD
- GIT_USERNAME:
- from_secret: GIT_USERNAME
- GIT_TOKEN:
- from_secret: GIT_TOKEN
- KS_PASS:
- from_secret: KS_PASS
- KEY_PASS:
- from_secret: KEY_PASS
- commands:
- - sed -i "/qa/,/\}/ s/versionCode .*/versionCode $DRONE_BUILD_NUMBER/" build.gradle
- - sed -i "/qa/,/\}/ s/versionName .*/versionName \"$DRONE_BUILD_NUMBER\"/" build.gradle
- - ./gradlew assembleQaDebug
- - /opt/android-sdk-linux/build-tools/*/apksigner sign --ks-pass pass:$KS_PASS --key-pass pass:$KEY_PASS --ks-key-alias key0 --ks scripts/QA_keystore.jks build/outputs/apk/qa/debug/qa-debug-*.apk
- - scripts/uploadArtifact.sh $LOG_USERNAME $LOG_PASSWORD $DRONE_BUILD_NUMBER $DRONE_PULL_REQUEST $GIT_USERNAME $GIT_TOKEN
+kind: secret
+name: GIT_TOKEN
+data: XIoa9IYq+xQ+N5iln8dlpWv0jV6ROr7HuE24ioUr4uQ8m8SjyH0yognWYLYLqnbTKrFWlFZiEMQTH/sZiWjRFvV1iL0=
+---
+kind: signature
+hmac: de23b70b660e9f78e936d89699fd24777a83c8caaad97d086bbc0c8a0373aa91
-trigger:
- event:
- - pull_request
+...
diff --git a/.editorconfig b/.editorconfig
index 8aa4377dd23a..67e5fa3c2eae 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -2,6 +2,9 @@
# see http://EditorConfig.org
+# SPDX-FileCopyrightText: 2018-2024 Nextcloud GmbH and Nextcloud contributors
+# SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+
# This is the file in the root of the project.
# For sub folders you can have other files that override only some settings.
# For these, this settings should be false.
@@ -13,6 +16,9 @@ max_line_length=120
indent_style=space
indent_size=4
+[*.yml]
+max_line_length=150
+
charset=utf-8
# Trimming is good for consistency
@@ -34,3 +40,12 @@ trim_trailing_whitespace=false
[.drone.yml]
indent_size=2
+
+[*.{kt,kts}]
+ktlint_code_style = android_studio
+# IDE does not follow this Ktlint rule strictly, but the default ordering is pretty good anyway, so let's ditch it
+ktlint_standard_import-ordering = disabled
+ktlint_standard_no-consecutive-comments = disabled
+ktlint_function_naming_ignore_when_annotated_with = Composable
+ij_kotlin_allow_trailing_comma = false
+ij_kotlin_allow_trailing_comma_on_call_site = false
diff --git a/.github/.config.yml b/.github/.config.yml
index 3f2ff8572b7a..001818407138 100644
--- a/.github/.config.yml
+++ b/.github/.config.yml
@@ -1,4 +1,3 @@
firstPRMergeComment: >
Thanks for your first pull request and welcome to the community!
Feel free to keep them coming! If you are looking for issues to tackle then have a look at this selection: https://github.com/nextcloud/android/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22
- Most developers hang out on IRC. So join \#nextcloud-mobile on Freenode for a chat!
diff --git a/.github/.config.yml.license b/.github/.config.yml.license
new file mode 100644
index 000000000000..f6133f557dce
--- /dev/null
+++ b/.github/.config.yml.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: 2018-2024 Nextcloud GmbH and Nextcloud contributors
+SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
index 378acfdbcc15..c7799c74190c 100644
--- a/.github/FUNDING.yml
+++ b/.github/FUNDING.yml
@@ -1,2 +1,4 @@
+# SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
+# SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
# You can add one username per supported platform and one custom link
-custom: https://www.bountysource.com/teams/nextcloud/issues?tracker_ids=38838206
+custom: https://nextcloud.com/include/
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
deleted file mode 100644
index 0540f9084776..000000000000
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ /dev/null
@@ -1,41 +0,0 @@
----
-name: Bug report
-about: Create a report to help us improve
-labels: bug
-
----
-
-### Actual behaviour
-- Tell us what happens
-
-### Expected behaviour
-- Tell us what should happen
-
-### Steps to reproduce
-1.
-2.
-3.
-
-
-### Environment data
-Android version:
-
-Device model:
-
-Stock or customized system:
-
-Nextcloud app version:
-
-Nextcloud server version:
-
-### Logs
-#### Web server error log
-```
-Insert your webserver log here
-```
-
-#### Nextcloud log (data/nextcloud.log)
-```
-Insert your Nextcloud log here
-```
-**NOTE:** Be super sure to remove sensitive data like passwords, note that everybody can look here! You can use the Issue Template application to prefill some of the required information: https://apps.nextcloud.com/apps/issuetemplate
diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
new file mode 100644
index 000000000000..84acb9771770
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -0,0 +1,132 @@
+name: "🛠Bug report: Nextcloud Android Client"
+description: "Submit a report and help us improve the Nextcloud Android Client"
+labels: ["bug", "0. Needs triage"]
+body:
+ - type: checkboxes
+ id: before-posting
+ attributes:
+ label: "âš ï¸ Before posting âš ï¸"
+ description: All conditions are **required**. Your issue can be closed if these are checked incorrectly.
+ options:
+ - label: This is a **bug**, not a question or an enhancement.
+ required: true
+ - label: I've [searched for similar issues](https://github.com/nextcloud/android/issues) and didn't find a duplicate.
+ required: true
+ - label: I've written a clear and descriptive title for this issue, not just "Bug" or "Crash".
+ required: true
+ - label: I agree to follow Nextcloud's [Code of Conduct](https://nextcloud.com/contribute/code-of-conduct/).
+ required: true
+ - type: textarea
+ id: repro-steps
+ attributes:
+ label: Steps to reproduce
+ description: |
+ What are the steps to reproduce this issue? Please be as specific as possible.
+ If you can't reproduce it, please add an explanation.
+ placeholder: |
+ 1.
+ 2.
+ 3.
+ validations:
+ required: true
+ - type: textarea
+ id: expected-behaviour
+ attributes:
+ label: Expected behaviour
+ description: Tell us what should happen.
+ validations:
+ required: true
+ - type: textarea
+ id: actual-behaviour
+ attributes:
+ label: Actual behaviour
+ description: Tell us what happens instead, as detailed as possible.
+ validations:
+ required: true
+# disabled because try.nextcloud.com is not working
+# - type: dropdown
+# id: repro-on-try
+# attributes:
+# label: Can you reproduce this problem on try.nextcloud.com?
+# description: |
+# 1. Create a demo account in [try.nextcloud.com](https://try.nextcloud.com). You'll be logged in automatically.
+# 2. Got to Settings -> Security and create a new app password
+# 3. Log in to this account with this app password by choosing "Alternative login with app token" during the login process.
+# options:
+# - "Yes"
+# - "No"
+# - Not applicable (explain in "additional information")
+# validations:
+# required: true
+ - type: markdown
+ attributes:
+ value: "## Environment information"
+ - type: input
+ id: android-version
+ attributes:
+ label: Android version
+ validations:
+ required: true
+ - type: input
+ id: device-model
+ attributes:
+ label: Device brand and model
+ validations:
+ required: true
+ - type: dropdown
+ id: stock-or-custom
+ attributes:
+ label: Stock or custom OS?
+ options:
+ - Stock
+ - Custom (explain in "additional information")
+ validations:
+ required: true
+ - type: input
+ id: app-version
+ attributes:
+ label: Nextcloud android app version
+ description: Check the _About_ section in the Settings screen
+ validations:
+ required: true
+ - type: input
+ id: server-version
+ attributes:
+ label: Nextcloud server version
+ description: Check _About_ in the top web menu (top right corner)
+ validations:
+ required: true
+ - type: dropdown
+ id: reverse-proxy
+ attributes:
+ label: Using a reverse proxy?
+ options:
+ - "I don't know"
+ - "Yes"
+ - "No"
+ validations:
+ required: true
+ - type: markdown
+ attributes:
+ value: "## Logs"
+ - type: textarea
+ id: android-logs
+ attributes:
+ label: Android logs
+ description: |
+ Please **drop a log file** here.
+ Log file can be obtained:
+ - At `storage/emulated/0/data/nextcloud.log` on beta or dev versions
+ - By using [`logcat`](https://github.com/nextcloud/android#getting-debug-info-via-logcat-mag) otherwise
+ If you are unable to post logs, explain why in "Additional information"
+ - type: textarea
+ id: server-logs
+ attributes:
+ label: Server error logs
+ description: Paste your server error logs here if available. Will be automatically formatted.
+ render: bash
+ - type: textarea
+ id: additional-info
+ attributes:
+ label: Additional information
+ description: Enter any additional information here
diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml.license b/.github/ISSUE_TEMPLATE/bug_report.yml.license
new file mode 100644
index 000000000000..8dae4293a3ac
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: 2022-2024 Nextcloud GmbH and Nextcloud contributors
+SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
new file mode 100644
index 000000000000..f7550392d92b
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -0,0 +1,16 @@
+# SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors
+# SPDX-License-Identifier: AGPL-3.0-or-later
+contact_links:
+ - name: 🚨 Report a security or privacy issue
+ url: https://hackerone.com/nextcloud
+ about: Report security and privacy related issues privately to the Nextcloud team, so we can coordinate the fix and release without potentially exposing all Nextcloud servers and users in the meantime.
+ - name: 🚨 报告安全或éšç§é—®é¢˜
+ url: https://hackerone.com/nextcloud
+ about: 请以ç§å¯†æ–¹å¼å‘ Nextcloud 团队报告安全和éšç§ç›¸å…³é—®é¢˜ï¼Œä»¥ä¾¿æˆ‘们能够å调修å¤å·¥ä½œå¹¶å®‰æŽ’å‘布计划,é¿å…åœ¨æ¤æœŸé—´å¯èƒ½æš´éœ²æ‰€æœ‰ Nextcloud æœåŠ¡å™¨å’Œç”¨æˆ·çš„é£Žé™©ã€‚
+ - name: â“ Community Support and Help
+ url: https://help.nextcloud.com/
+ about: Configuration, webserver/proxy or performance issues and other questions
+ - name: 💼 Nextcloud Enterprise
+ url: https://portal.nextcloud.com/
+ about: If you are a Nextcloud Enterprise customer, or need Professional support, so it can be resolved directly by our dedicated engineers more quickly
+blank_issues_enabled: false
diff --git a/.github/ISSUE_TEMPLATE/config.yml.license b/.github/ISSUE_TEMPLATE/config.yml.license
new file mode 100644
index 000000000000..8dae4293a3ac
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/config.yml.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: 2022-2024 Nextcloud GmbH and Nextcloud contributors
+SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
index 13d19caad38f..468572c9b6a6 100644
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -1,20 +1,48 @@
---
-name: Feature request
+name: 🚀 Feature request
about: Suggest an idea for this project
-labels: enhancement
-
+labels: enhancement, 0. Needs triage
---
-### Is your feature request related to a problem? Please describe.
+
+
+
+
+
+### How to use GitHub
+
+* Please use the 👠[reaction](https://blog.github.com/2016-03-10-add-reactions-to-pull-requests-issues-and-comments/) to show that you are interested into the same feature.
+* Please don't comment if you have no relevant information to add. It's just extra noise for everyone subscribed to this issue.
+* Subscribe to receive notifications on status change and new comments.
+
+
+**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
-### Describe the solution you'd like
+**Describe the solution you'd like**
A clear and concise description of what you want to happen.
-### Describe alternatives you've considered
+**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
-### Additional context
+**Additional context**
Add any other context or screenshots about the feature request here.
-
-**NOTE:** Be super sure to remove sensitive data like passwords, note that everybody can look here! You can use the Issue Template application to prefill some of the required information: https://apps.nextcloud.com/apps/issuetemplate
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md.license b/.github/ISSUE_TEMPLATE/feature_request.md.license
new file mode 100644
index 000000000000..8dae4293a3ac
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature_request.md.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: 2022-2024 Nextcloud GmbH and Nextcloud contributors
+SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
new file mode 100644
index 000000000000..4901055376bc
--- /dev/null
+++ b/.github/pull_request_template.md
@@ -0,0 +1,19 @@
+
+### ðŸ–¼ï¸ Screenshots
+
+ðŸšï¸ Before | 🡠After
+---|---
+B | A
+
+### ðŸ Checklist
+
+- [ ] Tests written, or not not needed
diff --git a/.github/pull_request_template.md.license b/.github/pull_request_template.md.license
new file mode 100644
index 000000000000..44275b2b58eb
--- /dev/null
+++ b/.github/pull_request_template.md.license
@@ -0,0 +1,3 @@
+SPDX-FileCopyrightText: 2023-2024 Nextcloud GmbH and Nextcloud contributors
+SPDX-FileCopyrightText: 2023 Marcel Hibbe
+SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
diff --git a/.github/stale.yml b/.github/stale.yml
deleted file mode 100644
index f3acdb140866..000000000000
--- a/.github/stale.yml
+++ /dev/null
@@ -1,21 +0,0 @@
-# Number of days of inactivity before an issue becomes stale
-daysUntilStale: 28
-# Number of days of inactivity before a stale issue is closed
-daysUntilClose: 14
-# Issues with these labels will never be considered stale
-exemptLabels:
- - 1. developing
- - 2. to review
- - 3. to release
- - approved
- - enhancement
- - overview
-# Label to use when marking an issue as stale
-staleLabel: stale
-# Comment to post when marking an issue as stale. Set to `false` to disable
-markComment: >
- This request did not receive an update in the last 4 weeks.
- Please take a look again and update the issue with new details,
- otherwise the issue will be automatically closed in 2 weeks. Thank you!
-# Comment to post when closing a stale issue. Set to `false` to disable
-closeComment: false
diff --git a/scripts/QA_keystore.jks b/.github/workflows/QA_keystore.jks
similarity index 100%
rename from scripts/QA_keystore.jks
rename to .github/workflows/QA_keystore.jks
diff --git a/.github/workflows/QA_keystore.jks.license b/.github/workflows/QA_keystore.jks.license
new file mode 100644
index 000000000000..f070b8a4c019
--- /dev/null
+++ b/.github/workflows/QA_keystore.jks.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: 2019-2024 Nextcloud GmbH and Nextcloud contributors
+SPDX-License-Identifier: AGPL-3.0-or-later
diff --git a/.github/workflows/analysis.yml b/.github/workflows/analysis.yml
new file mode 100644
index 000000000000..39aebc63a2e5
--- /dev/null
+++ b/.github/workflows/analysis.yml
@@ -0,0 +1,76 @@
+# synced from @nextcloud/android-config
+
+# SPDX-FileCopyrightText: 2023-2024 Nextcloud GmbH and Nextcloud contributors
+# SPDX-FileCopyrightText: 2025 Alper Ozturk
+# SPDX-FileCopyrightText: 2023 Tobias Kaminsky
+# SPDX-FileCopyrightText: 2023 Andy Scherzinger
+# SPDX-FileCopyrightText: 2023 Josh Richards
+# SPDX-FileCopyrightText: 2025 Marcel Hibbe
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+name: "Analysis"
+
+on:
+ pull_request:
+ branches: [ "master", "main", "stable-*" ]
+ push:
+ branches: [ "master", "main", "stable-*" ]
+
+permissions:
+ pull-requests: write
+ contents: write
+
+concurrency:
+ group: analysis-wrapper-${{ github.head_ref || github.run_id }}
+ cancel-in-progress: true
+
+jobs:
+ analysis:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Disabled on forks
+ if: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository }}
+ run: |
+ echo 'Can not analyze PRs from forks'
+ exit 1
+ - name: Setup variables # zizmor: ignore[template-injection]
+ id: get-vars
+ run: |
+ if [ -z "$GITHUB_HEAD_REF" ]; then
+ # push
+ {
+ echo "branch=$GITHUB_REF_NAME"
+ echo "pr=$GITHUB_RUN_ID"
+ echo "repo=${{ github.repository }}"
+ } >> "$GITHUB_OUTPUT"
+ else
+ # pull request
+ {
+ echo "branch=$GITHUB_HEAD_REF"
+ echo "pr=${{ github.event.pull_request.number }}"
+ echo "repo=${{ github.event.pull_request.head.repo.full_name }}"
+ } >> "$GITHUB_OUTPUT"
+ fi
+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ with:
+ persist-credentials: false
+ repository: ${{ steps.get-vars.outputs.repo }}
+ ref: ${{ steps.get-vars.outputs.branch }}
+ - name: Set up JDK 21
+ uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
+ with:
+ distribution: "temurin"
+ java-version: 21
+ - name: Install dependencies
+ run: |
+ sudo apt install python3-defusedxml
+ - name: Run analysis wrapper
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ run: |
+ mkdir -p "$HOME/.gradle"
+ {
+ echo "org.gradle.jvmargs=-Xmx1g -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8"
+ echo "org.gradle.configureondemand=true"
+ } > "$HOME/.gradle/gradle.properties"
+ scripts/analysis/analysis-wrapper.sh "${{ steps.get-vars.outputs.branch }}" "${{ secrets.LOG_USERNAME }}" "${{ secrets.LOG_PASSWORD }}" "$GITHUB_RUN_NUMBER" "${{ steps.get-vars.outputs.pr }}"
diff --git a/.github/workflows/assembleFlavors.yml b/.github/workflows/assembleFlavors.yml
new file mode 100644
index 000000000000..bf44361cc250
--- /dev/null
+++ b/.github/workflows/assembleFlavors.yml
@@ -0,0 +1,38 @@
+# SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors
+# SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+
+name: "Assemble"
+
+on:
+ pull_request:
+ branches: [ master, stable-* ]
+
+# Declare default permissions as read only.
+permissions: read-all
+
+concurrency:
+ group: assemble-flavors-${{ github.head_ref || github.run_id }}
+ cancel-in-progress: true
+
+jobs:
+ flavor:
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ flavor: [ Generic, Gplay, Huawei ]
+ steps:
+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ - name: set up JDK 21
+ uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
+ with:
+ distribution: "temurin"
+ java-version: 21
+ - uses: gradle/actions/wrapper-validation@50e97c2cd7a37755bbfafc9c5b7cafaece252f6e # v6.1.0
+ - name: Build ${{ matrix.flavor }}
+ run: |
+ echo "org.gradle.jvmargs=-Xmx6g -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 -XX:+UseParallelGC -XX:MaxMetaspaceSize=1g" >> gradle.properties
+ echo "org.gradle.caching=true" >> gradle.properties
+ echo "org.gradle.parallel=true" >> gradle.properties
+ echo "org.gradle.configureondemand=true" >> gradle.properties
+ ./gradlew assemble${{ matrix.flavor }}
diff --git a/.github/workflows/autoApproveSync.yml b/.github/workflows/autoApproveSync.yml
new file mode 100644
index 000000000000..c215be0b3e89
--- /dev/null
+++ b/.github/workflows/autoApproveSync.yml
@@ -0,0 +1,40 @@
+# synced from @nextcloud/android-config
+
+# SPDX-FileCopyrightText: 2022-2024 Nextcloud GmbH and Nextcloud contributors
+# SPDX-FileCopyrightText: 2023 Ãlvaro Brey
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+name: Auto approve sync
+on:
+ pull_request_target: # zizmor: ignore[dangerous-triggers]
+ branches:
+ - master
+ - main
+ types:
+ - opened
+ - reopened
+ - synchronize
+ - labeled
+
+concurrency:
+ group: sync-approve-${{ github.head_ref || github.run_id }}
+ cancel-in-progress: true
+
+permissions:
+ pull-requests: write
+
+jobs:
+ auto-approve:
+ name: Auto approve sync
+ runs-on: ubuntu-latest
+ if: ${{ contains(github.event.pull_request.labels.*.name, 'sync') && github.actor == 'nextcloud-android-bot' }}
+ steps:
+ - name: Disabled on forks
+ if: ${{ github.event.pull_request.head.repo.full_name != github.repository }}
+ run: |
+ echo 'Can not approve PRs from forks'
+ exit 1
+
+ - uses: hmarr/auto-approve-action@f0939ea97e9205ef24d872e76833fa908a770363 # v4.0.0
+ with:
+ github-token: "${{ secrets.GITHUB_TOKEN }}"
diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml
new file mode 100644
index 000000000000..a08122a435e0
--- /dev/null
+++ b/.github/workflows/check.yml
@@ -0,0 +1,32 @@
+# SPDX-FileCopyrightText: 2020-2024 Nextcloud GmbH and Nextcloud contributors
+# SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+
+name: Check
+
+on:
+ pull_request:
+ branches: [ master, stable-* ]
+
+# Declare default permissions as read only.
+permissions: read-all
+
+concurrency:
+ group: check-kotlin-${{ github.head_ref || github.run_id }}
+ cancel-in-progress: true
+
+jobs:
+ check:
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ task: [ detekt, spotlessKotlinCheck, lint ]
+ steps:
+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ - name: Set up JDK 21
+ uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
+ with:
+ distribution: "temurin"
+ java-version: 21
+ - name: Check ${{ matrix.task }}
+ run: ./gradlew ${{ matrix.task }}
diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml
new file mode 100644
index 000000000000..a6ef19196628
--- /dev/null
+++ b/.github/workflows/codeql.yml
@@ -0,0 +1,60 @@
+# synced from @nextcloud/android-config
+
+# SPDX-FileCopyrightText: 2022-2024 Nextcloud GmbH and Nextcloud contributors
+# SPDX-FileCopyrightText: 2023-2024 Andy Scherzinger
+# SPDX-FileCopyrightText: 2022 Tobias Kaminsky
+# SPDX-FileCopyrightText: 2022 Ãlvaro Brey
+# SPDX-FileCopyrightText: 2025 Marcel Hibbe
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+name: "CodeQL"
+
+on:
+ push:
+ branches: [ "master", "main", "stable-*" ]
+ pull_request:
+ branches: [ "master", "main" ]
+ schedule:
+ - cron: '24 18 * * 3'
+
+permissions:
+ contents: read
+
+jobs:
+ analyze:
+ name: Analyze
+ runs-on: ubuntu-latest
+ permissions:
+ actions: read
+ contents: read
+ security-events: write
+ strategy:
+ fail-fast: false
+ matrix:
+ language: [ 'java' ]
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ with:
+ persist-credentials: false
+ - name: Set Swap Space
+ if: runner.environment == 'github-hosted'
+ uses: pierotofy/set-swap-space@49819abfb41bd9b44fb781159c033dba90353a7c # v1.0
+ with:
+ swap-size-gb: 10
+ - name: Initialize CodeQL
+ uses: github/codeql-action/init@c10b8064de6f491fea524254123dbe5e09572f13 # v4.35.1
+ with:
+ languages: ${{ matrix.language }}
+ - name: Set up JDK 21
+ uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
+ with:
+ distribution: "temurin"
+ java-version: 21
+ - name: Assemble
+ run: |
+ mkdir -p "$HOME/.gradle"
+ echo "org.gradle.jvmargs=-Xmx3g -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError" > "$HOME/.gradle/gradle.properties"
+ ./gradlew --no-daemon assembleDebug
+ - name: Perform CodeQL Analysis
+ uses: github/codeql-action/analyze@c10b8064de6f491fea524254123dbe5e09572f13 # v4.35.1
diff --git a/.github/workflows/detectNewJavaFiles.yml b/.github/workflows/detectNewJavaFiles.yml
new file mode 100644
index 000000000000..908e3fd288f8
--- /dev/null
+++ b/.github/workflows/detectNewJavaFiles.yml
@@ -0,0 +1,43 @@
+# synced from @nextcloud/android-config
+
+# SPDX-FileCopyrightText: 2022-2024 Nextcloud GmbH and Nextcloud contributors
+# SPDX-FileCopyrightText: 2023 Andy Scherzinger
+# SPDX-FileCopyrightText: 2022 Tobias Kaminsky
+# SPDX-FileCopyrightText: 2022 Ãlvaro Brey
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+name: "Detect new java files"
+
+on:
+ pull_request:
+ branches: [ master, main, stable-* ]
+
+permissions: read-all
+
+concurrency:
+ group: detect-new-java-files-${{ github.head_ref || github.run_id }}
+ cancel-in-progress: true
+
+jobs:
+ detectNewJavaFiles:
+ runs-on: ubuntu-latest
+ steps:
+ - id: file_changes
+ uses: trilom/file-changes-action@a6ca26c14274c33b15e6499323aac178af06ad4b # v1.2.4
+ with:
+ output: ','
+ - name: Detect new java files
+ run: |
+ if [ -z '${{ steps.file_changes.outputs.files_added }}' ]; then
+ echo "No new files added"
+ exit 0
+ fi
+ new_java=$(echo '${{ steps.file_changes.outputs.files_added }}' | tr ',' '\n' | grep '\.java$' | cat)
+ if [ -n "$new_java" ]; then
+ # shellcheck disable=SC2016
+ printf 'New java files detected:\n```\n%s\n```\n' "$new_java" | tee "$GITHUB_STEP_SUMMARY"
+ exit 1
+ else
+ echo "No new java files detected"
+ exit 0
+ fi
diff --git a/.github/workflows/detectWrongSettings.yml b/.github/workflows/detectWrongSettings.yml
new file mode 100644
index 000000000000..ebc50bc54bcc
--- /dev/null
+++ b/.github/workflows/detectWrongSettings.yml
@@ -0,0 +1,30 @@
+# SPDX-FileCopyrightText: 2023-2024 Nextcloud GmbH and Nextcloud contributors
+# SPDX-FileCopyrightText: 2023 Tobias Kaminsky
+# SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+
+name: "Detect wrong settings"
+
+on:
+ pull_request:
+ branches: [ master, stable-* ]
+
+# Declare default permissions as read only.
+permissions: read-all
+
+concurrency:
+ group: detect-wrong-settings-${{ github.head_ref || github.run_id }}
+ cancel-in-progress: true
+
+jobs:
+ detectWrongSettings:
+ runs-on: ubuntu-24.04
+
+ steps:
+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ - name: Set up JDK 21
+ uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
+ with:
+ distribution: "temurin"
+ java-version: 21
+ - name: Detect SNAPSHOT
+ run: scripts/analysis/detectWrongSettings.sh
diff --git a/.github/workflows/lib.sh b/.github/workflows/lib.sh
new file mode 100644
index 000000000000..3bb8b10f7930
--- /dev/null
+++ b/.github/workflows/lib.sh
@@ -0,0 +1,27 @@
+#!/usr/bin/env bash
+#
+# SPDX-FileCopyrightText: 2022-2024 Nextcloud GmbH and Nextcloud contributors
+# SPDX-FileCopyrightText: 2022 Ãlvaro Brey
+# SPDX-License-Identifier: AGPL-3.0-or-later
+#
+
+## This file is intended to be sourced by other scripts
+
+
+function err() {
+ echo >&2 "$@"
+}
+
+
+function curl_gh() {
+ if [[ -n "$GITHUB_TOKEN" ]]
+ then
+ curl \
+ --silent \
+ --header "Authorization: token $GITHUB_TOKEN" \
+ "$@"
+ else
+ err "WARNING: No GITHUB_TOKEN found. Skipping API call"
+ fi
+
+}
diff --git a/.github/workflows/lib.sh.license b/.github/workflows/lib.sh.license
new file mode 100644
index 000000000000..23bad5cb8a9c
--- /dev/null
+++ b/.github/workflows/lib.sh.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: 2019-2025 Nextcloud GmbH and Nextcloud contributors
+SPDX-License-Identifier: AGPL-3.0-or-later
diff --git a/.github/workflows/pr-feedback.yml b/.github/workflows/pr-feedback.yml
new file mode 100644
index 000000000000..a3a2d1296c7a
--- /dev/null
+++ b/.github/workflows/pr-feedback.yml
@@ -0,0 +1,55 @@
+# This workflow is provided via the organization template repository
+#
+# https://github.com/nextcloud/.github
+# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
+
+# SPDX-FileCopyrightText: 2023-2024 Nextcloud GmbH and Nextcloud contributors
+# SPDX-FileCopyrightText: 2023 Marcel Klehr
+# SPDX-FileCopyrightText: 2023 Joas Schilling <213943+nickvergessen@users.noreply.github.com>
+# SPDX-FileCopyrightText: 2023 Daniel Kesselberg
+# SPDX-FileCopyrightText: 2023 Florian Steffens
+# SPDX-License-Identifier: MIT
+
+name: 'Ask for feedback on PRs'
+on:
+ schedule:
+ - cron: '30 1 * * *'
+
+permissions:
+ contents: read
+ pull-requests: write
+
+jobs:
+ pr-feedback:
+ if: ${{ github.repository_owner == 'nextcloud' }}
+ runs-on: ubuntu-latest
+ steps:
+ - name: The get-github-handles-from-website action
+ uses: marcelklehr/get-github-handles-from-website-action@06b2239db0a48fe1484ba0bfd966a3ab81a08308 # v1.0.1
+ id: scrape
+ with:
+ website: 'https://nextcloud.com/team/'
+
+ - name: Get blocklist
+ id: blocklist
+ run: |
+ blocklist=$(curl https://raw.githubusercontent.com/nextcloud/.github/master/non-community-usernames.txt | paste -s -d, -)
+ echo "blocklist=$blocklist" >> "$GITHUB_OUTPUT"
+
+ - uses: nextcloud/pr-feedback-action@5227c55be184087d0aef6338bee210d8620b6297 # main
+ with:
+ feedback-message: |
+ Hello there,
+ Thank you so much for taking the time and effort to create a pull request to our Nextcloud project.
+
+ We hope that the review process is going smooth and is helpful for you. We want to ensure your pull request is reviewed to your satisfaction. If you have a moment, our community management team would very much appreciate your feedback on your experience with this PR review process.
+
+ Your feedback is valuable to us as we continuously strive to improve our community developer experience. Please take a moment to complete our short survey by clicking on the following link: https://cloud.nextcloud.com/apps/forms/s/i9Ago4EQRZ7TWxjfmeEpPkf6
+
+ Thank you for contributing to Nextcloud and we hope to hear from you soon!
+
+ (If you believe you should not receive this message, you can add yourself to the [blocklist](https://github.com/nextcloud/.github/blob/master/non-community-usernames.txt).)
+ days-before-feedback: 14
+ start-date: '2024-04-30'
+ exempt-authors: '${{ steps.blocklist.outputs.blocklist }},${{ steps.scrape.outputs.users }}'
+ exempt-bots: true
diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml
new file mode 100644
index 000000000000..cca30141ac60
--- /dev/null
+++ b/.github/workflows/qa.yml
@@ -0,0 +1,85 @@
+# SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors
+# SPDX-FileCopyrightText: 2023 Andy Scherzinger
+# SPDX-License-Identifier: MIT
+name: "QA"
+
+on:
+ pull_request:
+ branches: [ main, master, stable-* ]
+
+permissions:
+ pull-requests: write
+ contents: read
+
+concurrency:
+ group: qa-build-${{ github.head_ref || github.run_id }}
+ cancel-in-progress: true
+
+jobs:
+ qa:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Check if secrets are available
+ run: echo "ok=${{ secrets.KS_PASS != '' }}" >> "$GITHUB_OUTPUT"
+ id: check-secrets
+
+ - name: Checkout
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ if: ${{ steps.check-secrets.outputs.ok == 'true' }}
+ with:
+ persist-credentials: false
+
+ - name: set up JDK 21
+ uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
+ if: ${{ steps.check-secrets.outputs.ok == 'true' }}
+ with:
+ distribution: "temurin"
+ java-version: 21
+
+ - name: Build QA
+ if: ${{ steps.check-secrets.outputs.ok == 'true' }}
+ env:
+ KS_PASS: ${{ secrets.KS_PASS }}
+ KEY_PASS: ${{ secrets.KEY_PASS }}
+ LOG_USERNAME: ${{ secrets.LOG_USERNAME }}
+ LOG_PASSWORD: ${{ secrets.LOG_PASSWORD }}
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ run: |
+ mkdir -p "$HOME/.gradle"
+ echo "org.gradle.jvmargs=-Xmx3g -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 -XX:+UseParallelGC -XX:MaxMetaspaceSize=1g" > "$HOME/.gradle/gradle.properties"
+ echo "org.gradle.caching=true; org.gradle.parallel=true; org.gradle.configureondemand=true" >> "$HOME/.gradle/gradle.properties"
+ [ -e app/build.gradle ] && sed -i "/qa/,/\}/ s/versionCode .*/versionCode ${{github.event.number}} /" "app/build.gradle"
+ [ -e app/build.gradle ] && sed -i "/qa/,/\}/ s/versionName .*/versionName \"${{github.event.number}}\"/" "app/build.gradle"
+ [ -e app/build.gradle.kts ] && sed -i "/qa/,/\}/ s/versionCode .*/versionCode = ${{github.event.number}} /" "app/build.gradle.kts"
+ [ -e app/build.gradle.kts ] && sed -i "/qa/,/\}/ s/versionName .*/versionName = \"${{github.event.number}}\"/" "app/build.gradle.kts"
+ ./gradlew assembleQaDebug
+ $(find /usr/local/lib/android/sdk/build-tools/*/apksigner | sort | tail -n1) sign --ks-pass pass:"$KS_PASS" --key-pass pass:"$KEY_PASS" --ks-key-alias key0 --ks ".github/workflows/QA_keystore.jks" app/build/outputs/apk/qa/debug/*qa-debug*.apk
+
+ - name: Upload APK
+ id: upload-apk
+ uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f
+ with:
+ path: app/build/outputs/apk/qa/debug/*qa-debug*.apk
+ retention-days: 7
+ archive: false
+
+ - name: Create QR Code
+ run: |
+ sudo apt-get -y install qrencode
+ qrencode -o qr.png "${{ steps.upload-apk.outputs.artifact-url }}"
+
+ - name: Upload QR
+ id: upload-qr
+ uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f
+ with:
+ path: qr.png
+ retention-days: 7
+ archive: false
+
+ - name: Comment PR
+ uses: thollander/actions-comment-pull-request@e4a76dd2b0a3c2027c3fd84147a67c22ee4c90fa
+ with:
+ message: |
+ APK file: ${{ steps.upload-apk.outputs.artifact-url }}
+ To test this change/fix you can simply download above APK file and install and test it in parallel to your existing Nextcloud app.
+  (please click on link to get QR code displayed)
diff --git a/.github/workflows/renovate-approve-merge.yml b/.github/workflows/renovate-approve-merge.yml
new file mode 100644
index 000000000000..b92491bf3215
--- /dev/null
+++ b/.github/workflows/renovate-approve-merge.yml
@@ -0,0 +1,61 @@
+# This workflow is provided via the organization template repository
+#
+# https://github.com/nextcloud/.github
+# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
+#
+# SPDX-FileCopyrightText: Nextcloud GmbH and Nextcloud contributors
+# SPDX-License-Identifier: MIT
+
+name: Auto approve renovate PRs
+
+on:
+ pull_request_target: # zizmor: ignore[dangerous-triggers]
+ branches:
+ - main
+ - master
+ - stable*
+
+permissions:
+ contents: read
+
+concurrency:
+ group: renovate-approve-merge-${{ github.head_ref || github.run_id }}
+ cancel-in-progress: true
+
+jobs:
+ auto-approve-merge:
+ if: github.event.pull_request.user.login == 'renovate[bot]'
+ runs-on: ubuntu-latest
+ permissions:
+ # for hmarr/auto-approve-action to approve PRs
+ pull-requests: write
+
+ steps:
+ - name: Disabled on forks
+ if: ${{ github.event.pull_request.head.repo.full_name != github.repository }}
+ run: |
+ echo 'Can not approve PRs from forks'
+ exit 1
+
+ - uses: mdecoleman/pr-branch-name@55795d86b4566d300d237883103f052125cc7508 # v3.0.0
+ id: branchname
+ with:
+ repo-token: ${{ secrets.GITHUB_TOKEN }}
+
+ # GitHub actions bot approve
+ - uses: hmarr/auto-approve-action@f0939ea97e9205ef24d872e76833fa908a770363 # v4.0.0
+ if: github.actor == 'renovate[bot]'
+ with:
+ github-token: ${{ secrets.GITHUB_TOKEN }}
+
+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ with:
+ ref: ${{ github.head_ref }}
+
+ # Enable GitHub auto merge
+ - name: Enable Pull Request Automerge
+ if: github.actor == 'renovate[bot]'
+ run: gh pr merge --merge --auto
+ env:
+ GH_TOKEN: ${{ secrets.AUTOMERGE }}
+
diff --git a/.github/workflows/reuse.yml b/.github/workflows/reuse.yml
new file mode 100644
index 000000000000..3f485f875f7e
--- /dev/null
+++ b/.github/workflows/reuse.yml
@@ -0,0 +1,27 @@
+# This workflow is provided via the organization template repository
+#
+# https://github.com/nextcloud/.github
+# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
+
+# SPDX-FileCopyrightText: 2022 Free Software Foundation Europe e.V.
+#
+# SPDX-License-Identifier: CC0-1.0
+
+name: REUSE Compliance Check
+
+on: [pull_request]
+
+permissions:
+ contents: read
+
+jobs:
+ reuse-compliance-check:
+ runs-on: ubuntu-latest-low
+ steps:
+ - name: Checkout
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ with:
+ persist-credentials: false
+
+ - name: REUSE Compliance Check
+ uses: fsfe/reuse-action@676e2d560c9a403aa252096d99fcab3e1132b0f5 # v6.0.0
diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml
new file mode 100644
index 000000000000..9a1c554023ab
--- /dev/null
+++ b/.github/workflows/scorecard.yml
@@ -0,0 +1,47 @@
+# synced from @nextcloud/android-config
+
+# SPDX-FileCopyrightText: 2023-2024 Nextcloud GmbH and Nextcloud contributors
+# SPDX-FileCopyrightText: 2023 Andy Scherzinger
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+name: Scorecard supply-chain security
+on:
+ branch_protection_rule:
+ schedule:
+ - cron: '32 23 * * 4'
+ push:
+ branches: [ "main", "master" ]
+
+# Declare default permissions as read only.
+permissions: read-all
+
+concurrency:
+ group: scorecard-supply-chain-security-${{ github.head_ref || github.run_id }}
+ cancel-in-progress: true
+
+jobs:
+ analysis:
+ name: Scorecard analysis
+ runs-on: ubuntu-latest
+ permissions:
+ # Needed to upload the results to code-scanning dashboard.
+ security-events: write
+
+ steps:
+ - name: "Checkout code"
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ with:
+ persist-credentials: false
+
+ - name: "Run analysis"
+ uses: ossf/scorecard-action@4eaacf0543bb3f2c246792bd56e8cdeffafb205a # v2.4.3
+ with:
+ results_file: results.sarif
+ results_format: sarif
+ publish_results: false
+
+ # Upload the results to GitHub's code scanning dashboard.
+ - name: "Upload to code-scanning"
+ uses: github/codeql-action/upload-sarif@c10b8064de6f491fea524254123dbe5e09572f13 # v4.35.1
+ with:
+ sarif_file: results.sarif
diff --git a/.github/workflows/screenShotTest.yml b/.github/workflows/screenShotTest.yml
new file mode 100644
index 000000000000..cf748ae4e842
--- /dev/null
+++ b/.github/workflows/screenShotTest.yml
@@ -0,0 +1,109 @@
+# SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors
+# SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+
+name: "Screenshot Test"
+
+on:
+ pull_request:
+ branches: [ master, stable-* ]
+
+permissions:
+ contents: read
+ pull-requests: write
+
+concurrency:
+ group: screenshot-test-${{ github.head_ref || github.run_id }}
+ cancel-in-progress: true
+
+jobs:
+ screenshot:
+ runs-on: ubuntu-24.04
+ strategy:
+ fail-fast: false
+ matrix:
+ scheme: [ Light ]
+ color: [ blue ]
+ api-level: [ 28 ]
+ steps:
+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+
+ - name: Gradle cache
+ uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4
+ with:
+ path: |
+ ~/.gradle/caches
+ ~/.gradle/wrapper
+ key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*') }}-${{ hashFiles('**/gradle/wrapper/gradle-wrapper.properties') }}
+ - name: AVD cache
+ uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4
+ id: avd-cache
+ with:
+ path: |
+ ~/.android/avd/*
+ ~/.android/adb*
+ key: avd-${{ matrix.api-level }}
+
+ - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
+ with:
+ distribution: "temurin"
+ java-version: 21
+
+ - name: Enable KVM group perms
+ run: |
+ echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
+ sudo udevadm control --reload-rules
+ sudo udevadm trigger --name-match=kvm
+
+ - name: create AVD and generate snapshot for caching
+ if: steps.avd-cache.outputs.cache-hit != 'true'
+ uses: reactivecircus/android-emulator-runner@b530d96654c385303d652368551fb075bc2f0b6b # v2.35.0
+ with:
+ api-level: ${{ matrix.api-level }}
+ force-avd-creation: false
+ arch: x86
+ sdcard-path-or-size: 100M
+ target: google_apis
+ emulator-options: -no-window -gpu swiftshader_indirect -no-snapshot -noaudio -no-boot-anim -skin 500x833
+ script: echo "Generated AVD snapshot for caching."
+
+ - name: Configure gradle daemon
+ run: |
+ mkdir -p $HOME/.gradle
+ echo "org.gradle.jvmargs=-Xmx6g -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 -XX:+UseParallelGC -XX:MaxMetaspaceSize=1g" > $HOME/.gradle/gradle.properties
+ echo "org.gradle.caching=true" >> $HOME/.gradle/gradle.properties
+ echo "org.gradle.parallel=true" >> $HOME/.gradle/gradle.properties
+ echo "org.gradle.configureondemand=true" >> $HOME/.gradle/gradle.properties
+
+ - name: Build generic flavor
+ run: ./gradlew assembleGenericDebug
+
+ - name: Delete old comments
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ if: ${{ always() }}
+ run: scripts/deleteOldComments.sh "${{ matrix.color }}-${{ matrix.scheme }}" "Screenshot" ${{github.event.number}}
+
+ - name: Run screenshot tests
+ env:
+ SHOT_TEST: "true"
+ uses: reactivecircus/android-emulator-runner@b530d96654c385303d652368551fb075bc2f0b6b # v2.35.0
+ with:
+ api-level: ${{ matrix.api-level }}
+ force-avd-creation: false
+ arch: x86
+ sdcard-path-or-size: 100M
+ target: google_apis
+ emulator-options: -no-window -gpu swiftshader_indirect -no-snapshot -noaudio -no-boot-anim -skin 500x833
+ script: ./gradlew uninstallAll genericDebugExecuteScreenshotTests -Dorg.gradle.jvmargs="--add-opens java.base/java.nio=ALL-UNNAMED --add-opens java.base/java.nio.channels=ALL-UNNAMED --add-exports java.base/sun.nio.ch=ALL-UNNAMED" -Pandroid.testInstrumentationRunnerArguments.annotation=com.owncloud.android.utils.ScreenshotTest -Pandroid.testInstrumentationRunnerArguments.COLOR=${{ matrix.color }} -Pandroid.testInstrumentationRunnerArguments.DARKMODE=${{ matrix.scheme }}
+ - name: upload failing results
+ if: ${{ failure() }}
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ run: scripts/uploadReport.sh "${{ secrets.LOG_USERNAME }}" "${{ secrets.LOG_PASSWORD }}" ${{github.event.number}} "${{ matrix.color }}-${{ matrix.scheme }}" "Screenshot" ${{github.event.number}}
+ - name: Archive Espresso results
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
+ if: ${{ always() }}
+ with:
+ name: Report-${{ matrix.color }}-${{ matrix.scheme }}
+ path: app/build/reports
+ retention-days: 4
diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml
new file mode 100644
index 000000000000..478c094b0e30
--- /dev/null
+++ b/.github/workflows/stale.yml
@@ -0,0 +1,35 @@
+# synced from @nextcloud/android-config
+
+# SPDX-FileCopyrightText: 2023-2024 Nextcloud GmbH and Nextcloud contributors
+# SPDX-FileCopyrightText: 2023 Tobias Kaminsky
+# SPDX-FileCopyrightText: 2022 Ãlvaro Brey
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+name: 'Close stale issues'
+on:
+ schedule:
+ - cron: '0 0 * * *'
+
+# Declare default permissions as read only.
+permissions: read-all
+
+jobs:
+ stale:
+ runs-on: ubuntu-latest
+ permissions:
+ issues: write
+ pull-requests: write
+ steps:
+ - uses: actions/stale@b5d41d4e1d5dceea10e7104786b73624c18a190f # v10.2.0
+ with:
+ days-before-stale: 28
+ days-before-close: 14
+ days-before-pr-close: -1
+ only-labels: 'bug,needs info'
+ exempt-issue-labels: 'no-stale'
+ stale-issue-message: >-
+ This bug report did not receive an update in the last 4 weeks.
+ Please take a look again and update the issue with new details,
+ otherwise the issue will be automatically closed in 2 weeks. Thank you!
+ exempt-all-pr-milestones: true
+ labels-to-remove-when-unstale: 'needs info'
diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml
new file mode 100644
index 000000000000..4b3dc2f50ca4
--- /dev/null
+++ b/.github/workflows/unit-tests.yml
@@ -0,0 +1,64 @@
+# SPDX-FileCopyrightText: 2022-2025 Nextcloud GmbH and contributors
+# SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+
+name: Unit tests
+
+on:
+ pull_request:
+ branches: [ master, stable-* ]
+ push:
+ branches: [ master, stable-* ]
+
+permissions:
+ contents: read
+ pull-requests: write
+
+concurrency:
+ group: unit-tests-${{ github.head_ref || github.run_id }}
+ cancel-in-progress: true
+
+jobs:
+ test:
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+
+ - name: Set up JDK 21
+ uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
+ with:
+ distribution: "temurin"
+ java-version: 21
+
+ - name: Delete old comments
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ if: ${{ always() }}
+ run: scripts/deleteOldComments.sh "test" "Unit" ${{github.event.number}}
+
+ - name: Setup Gradle
+ uses: gradle/actions/setup-gradle@50e97c2cd7a37755bbfafc9c5b7cafaece252f6e # v6.1.0
+
+ - name: Run unit tests with coverage
+ run: ./gradlew jacocoTestGplayDebugUnitTest
+
+ - name: Upload failing results
+ if: ${{ failure() }}
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ run: scripts/uploadReport.sh "${{ secrets.LOG_USERNAME }}" "${{ secrets.LOG_PASSWORD }}" ${{github.event.number}} "test" "Unit" ${{github.event.number}}
+
+ - name: Upload coverage to codecov
+ uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # v6.0.0
+ with:
+ token: ${{ secrets.CODECOV_TOKEN }}
+ flags: unit
+ fail_ci_if_error: true
+ files: app/build/reports/jacoco/jacocoTestGplayDebugUnitTestReport/jacoco.xml
+
+ - name: Upload jacoco artifacts
+ if: ${{ failure() }}
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
+ with:
+ name: test-results
+ path: app/build/reports/jacoco/jacocoTestGplayDebugUnitTestReport/html/
diff --git a/.github/workflows/uploadArtifact.sh b/.github/workflows/uploadArtifact.sh
new file mode 100755
index 000000000000..bf96572045ab
--- /dev/null
+++ b/.github/workflows/uploadArtifact.sh
@@ -0,0 +1,44 @@
+#!/usr/bin/env bash
+
+#
+# SPDX-FileCopyrightText: 2019-2024 Nextcloud GmbH and Nextcloud contributors
+# SPDX-FileCopyrightText: 2019-2022 Tobias Kaminsky
+# SPDX-License-Identifier: AGPL-3.0-or-later
+#
+
+#1: LOG_USERNAME
+#2: LOG_PASSWORD
+#3: DRONE_BUILD_NUMBER
+#4: DRONE_PULL_REQUEST
+
+
+PUBLIC_URL=https://www.kaminsky.me/nc-dev/android-artifacts
+USER=$1
+PASS=$2
+BUILD=$3
+PR=$4
+GITHUB_TOKEN=$5
+DAV_URL=https://nextcloud.kaminsky.me/remote.php/dav/files/$USER/android-artifacts/
+
+source .github/workflows/lib.sh
+REPO=$(cat scripts/repo)
+
+if ! test -e app/build/outputs/apk/qa/debug/*qa-debug*.apk ; then
+ exit 1
+fi
+echo "Uploaded artifact to $DAV_URL/$BUILD.apk"
+
+# delete all old comments, starting with "APK file:"
+oldComments=$(curl_gh -X GET https://api.github.com/repos/nextcloud/$REPO/issues/$PR/comments | jq '.[] | (.id |tostring) + "|" + (.user.login | test("github-actions") | tostring) + "|" + (.body | test("APK file:.*") | tostring)' | grep "true|true" | tr -d "\"" | cut -f1 -d"|")
+
+echo $oldComments | while read comment ; do
+ curl_gh -X DELETE https://api.github.com/repos/nextcloud/$REPO/issues/comments/$comment
+done
+
+sudo apt-get -y install qrencode
+
+qrencode -o $PR.png "$PUBLIC_URL/$BUILD.apk"
+
+curl -u $USER:$PASS -X PUT $DAV_URL/$BUILD.apk --upload-file app/build/outputs/apk/qa/debug/*qa-debug*.apk
+curl -u $USER:$PASS -X PUT $DAV_URL/$BUILD.png --upload-file $PR.png
+curl_gh -X POST https://api.github.com/repos/nextcloud/$REPO/issues/$PR/comments -d "{ \"body\" : \"APK file: $PUBLIC_URL/$BUILD.apk

To test this change/fix you can simply download above APK file and install and test it in parallel to your existing Nextcloud app. \" }"
diff --git a/.gitignore b/.gitignore
index 55eafe2d77cb..51120b52fc6c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,9 @@
+# SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
+# SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
# built application files
*.apk
*.ap_
+*.aab
# files for the dex VM
*.dex
@@ -19,19 +22,74 @@ target/
local.properties
tests/local.properties
+# Signing & secrets
+*.jks
+*.keystore
+keystore.properties
+release.properties
+google-services.json
+GoogleService-Info.plist
+*.p12
+*.pem
+secrets.properties
+.env
+.env.*
+
+# Windows
+Thumbs.db
+desktop.ini
+
# Mac .DS_Store files
.DS_Store
+# Linux/editor temp files
+*~
+*.swp
+*.swo
+.vscode/
+
# Proguard README
proguard-project.txt
tests/proguard-project.txt
# Android Studio and Gradle specific entries
.gradle
-.idea
-*.iml
+.idea/*
+!.idea/codeStyles/
build
/gradle.properties
-
+.attach_pid*
fastlane/Fastfile
+*.hprof
+
+# NDK / C++
+*.so
+obj/
+*.o
+*.a
+
+# Testing & coverage
+.kotlin/
+*.lcov
+test-results/
+jacoco/
+*.exec
+
+# fastlane specific
+**/fastlane/report.xml
+
+# deliver temporary files
+**/fastlane/Preview.html
+
+# snapshot generated screenshots
+**/fastlane/screenshots
+
+# scan temporary files
+**/fastlane/test_output
+/fastlane/vendor/
+/.bundle/
+/fastlane/.bundle
+# python
+**/__pycache__/
+/gradle/verification-keyring.gpg
diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
index 7cd663d7e01d..23a6687d1074 100644
--- a/.idea/codeStyles/Project.xml
+++ b/.idea/codeStyles/Project.xml
@@ -27,17 +27,11 @@
-
-
-
+
-
-
-
+
+
+
+
-
-
-
-
-
-
+
@@ -77,8 +74,10 @@
+
+
+
-
@@ -89,6 +88,7 @@
xmlns:android
+
^$
@@ -99,6 +99,7 @@
xmlns:.*
+
^$
@@ -110,6 +111,7 @@
.*:id
+
http://schemas.android.com/apk/res/android
@@ -120,6 +122,7 @@
.*:name
+
http://schemas.android.com/apk/res/android
@@ -130,6 +133,7 @@
name
+
^$
@@ -140,6 +144,7 @@
style
+
^$
@@ -150,6 +155,7 @@
.*
+
^$
@@ -161,6 +167,7 @@
.*
+
http://schemas.android.com/apk/res/android
@@ -172,6 +179,7 @@
.*
+
.*
@@ -181,5 +189,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/copyright/Nextcloud___Android_Client.xml b/.idea/copyright/Nextcloud___Android_Client.xml
new file mode 100644
index 000000000000..6d6e9dd68b2c
--- /dev/null
+++ b/.idea/copyright/Nextcloud___Android_Client.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml
new file mode 100644
index 000000000000..bc106e52608a
--- /dev/null
+++ b/.idea/copyright/profiles_settings.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/.idea/icon.svg b/.idea/icon.svg
new file mode 100644
index 000000000000..37273c65df5f
--- /dev/null
+++ b/.idea/icon.svg
@@ -0,0 +1,11 @@
+
+
+
diff --git a/.idea/inspectionProfiles/ktlint.xml b/.idea/inspectionProfiles/ktlint.xml
new file mode 100644
index 000000000000..631c09bc2163
--- /dev/null
+++ b/.idea/inspectionProfiles/ktlint.xml
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml
new file mode 100644
index 000000000000..64580d143203
--- /dev/null
+++ b/.idea/inspectionProfiles/profiles_settings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/.pullapprove.yml b/.pullapprove.yml
index cf0eceb6f477..02b4872e2d0a 100644
--- a/.pullapprove.yml
+++ b/.pullapprove.yml
@@ -1,5 +1,6 @@
version: 2
-
+# SPDX-FileCopyrightText: 2017-2024 Nextcloud GmbH and Nextcloud contributors
+# SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
# General settings to apply
always_pending:
title_regex: '(WIP|wip)'
diff --git a/.tx/config b/.tx/config
index d79fed33fc9c..f0d4139eff12 100644
--- a/.tx/config
+++ b/.tx/config
@@ -1,9 +1,10 @@
[main]
host = https://www.transifex.com
-[nextcloud.android]
-file_filter = src/main/res/values-/strings.xml
-source_file = src/main/res/values/strings.xml
-type = ANDROID
+[o:nextcloud:p:nextcloud:r:android]
+file_filter = app/src/main/res/values-/strings.xml
+source_file = app/src/main/res/values/strings.xml
source_lang = en
-lang_map = af_ZA: af-rZA, am_ET: am-rET, ar_AE: ar-rAE, ar_BH: ar-rBH, ar_DZ: ar-rDZ, ar_EG: ar-rEG, ar_IQ: ar-rIQ, ar_JO: ar-rJO, ar_KW: ar-rKW, ar_LB: ar-rLB, ar_LY: ar-rLY, ar_MA: ar-rMA, ar_OM: ar-rOM, ar_QA: ar-rQA, ar_SA: ar-rSA, ar_SY: ar-rSY, ar_TN: ar-rTN, ar_YE: ar-rYE, arn_CL: arn-rCL, as_IN: as-rIN, az_AZ: az-rAZ, ba_RU: ba-rRU, be_BY: be-rBY, bg_BG: bg-rBG, bn_BD: bn-rBD, bn_IN: bn-rIN, bo_CN: bo-rCN, br_FR: br-rFR, bs_BA: bs-rBA, ca_ES: ca-rES, co_FR: co-rFR, cs_CZ: cs-rCZ, cy_GB: cy-rGB, da_DK: da-rDK, de_AT: de-rAT, de_CH: de-rCH, de_DE: de-rDE, de_LI: de-rLI, de_LU: de-rLU, dsb_DE: dsb-rDE, dv_MV: dv-rMV, el_GR: el-rGR, en_AU: en-rAU, en_BZ: en-rBZ, en_CA: en-rCA, en_GB: b+en+001, en_IE: en-rIE, en_IN: en-rIN, en_JM: en-rJM, en_MY: en-rMY, en_NZ: en-rNZ, en_PH: en-rPH, en_SG: en-rSG, en_TT: en-rTT, en_US: en-rUS, en_ZA: en-rZA, en_ZW: en-rZW, en@pirate: en-rpirate, es_AR: es-rAR, es_BO: es-rBO, es_CL: es-rCL, es_CO: es-rCO, es_CR: es-rCR, es_DO: es-rDO, es_EC: es-rEC, es_ES: es-rES, es_GT: es-rGT, es_HN: es-rHN, es_MX: es-rMX, es_NI: es-rNI, es_PA: es-rPA, es_PE: es-rPE, es_PR: es-rPR, es_PY: es-rPY, es_SV: es-rSV, es_419: b+es+419, es_UY: es-rUY, es_VE: es-rVE, et_EE: et-rEE, eu_ES: eu-rES, fa_IR: fa-rIR, fi_FI: fi-rFI, fil_PH: fil-rPH, fo_FO: fo-rFO, fr_BE: fr-rBE, fr_CA: fr-rCA, fr_CH: fr-rCH, fr_FR: fr-rFR, fr_LU: fr-rLU, fr_MC: fr-rMC, fy_NL: fy-rNL, ga_IE: ga-rIE, gd_GB: gd-rGB, gl_ES: gl-rES, gsw_FR: gsw-rFR, gu_IN: gu-rIN, ha_NG: ha-rNG, he: iw, he_IL: he-rIL, hi_IN: hi-rIN, hr_BA: hr-rBA, hr_HR: hr-rHR, hsb_DE: hsb-rDE, hu_HU: hu-rHU, hy_AM: hy-rAM, id: in, id_ID: id-rID, ig_NG: ig-rNG, ii_CN: ii-rCN, is_IS: is-rIS, it_CH: it-rCH, it_IT: it-rIT, iu_CA: iu-rCA, ja_JP: ja-rJP, ka_GE: ka-rGE, kk_KZ: kk-rKZ, kl_GL: kl-rGL, km_KH: km-rKH, kn_IN: kn-rIN, ko_KR: ko-rKR, kok_IN: kok-rIN, ku_IQ: ku-rIQ, ky_KG: ky-rKG, lb_LU: lb-rLU, lo_LA: lo-rLA, lt_LT: lt-rLT, lv_LV: lv-rLV, mi_NZ: mi-rNZ, mk_MK: mk-rMK, ml_IN: ml-rIN, mn_CN: mn-rCN, mn_MN: mn-rMN, moh_CA: moh-rCA, mr_IN: mr-rIN, ms_BN: ms-rBN, ms_MY: ms-rMY, my_MM: my, mt_MT: mt-rMT, nb_NO: nb-rNO, ne_NP: ne-rNP, nl_BE: nl-rBE, nl_NL: nl-rNL, nn_NO: nn-rNO, nso_ZA: nso-rZA, oc_FR: oc-rFR, or_IN: or-rIN, pa_IN: pa-rIN, pl_PL: pl-rPL, prs_AF: prs-rAF, ps_AF: ps-rAF, pt_BR: pt-rBR, pt_PT: pt-rPT, qut_GT: qut-rGT, quz_BO: quz-rBO, quz_EC: quz-rEC, quz_PE: quz-rPE, rm_CH: rm-rCH, ro_RO: ro-rRO, ru_RU: ru-rRU, rw_RW: rw-rRW, sa_IN: sa-rIN, sah_RU: sah-rRU, se_FI: se-rFI, se_NO: se-rNO, se_SE: se-rSE, si_LK: si-rLK, sk_SK: sk-rSK, sl_SI: sl-rSI, sma_NO: sma-rNO, sma_SE: sma-rSE, smj_NO: smj-rNO, smj_SE: smj-rSE, smn_FI: smn-rFI, sms_FI: sms-rFI, sq_AL: sq-rAL, sr_BA: sr-rBA, sr_CS: sr-rCS, sr_ME: sr-rME, sr_RS: sr-rRS, sr@latin: sr-rSP, sv_FI: sv-rFI, sv_SE: sv-rSE, sw_KE: sw-rKE, syr_SY: syr-rSY, ta_IN: ta-rIN, ta_LK: ta-rLK, te_IN: te-rIN, tg_TJ: tg-rTJ, th_TH: th-rTH, tk_TM: tk-rTM, tn_ZA: tn-rZA, tr_TR: tr-rTR, tt_RU: tt-rRU, tzm_DZ: tzm-rDZ, ug_CN: ug-rCN, uk_UA: uk-rUA, ur_PK: ur-rPK, uz_UZ: uz-rUZ, vi_VN: vi-rVN, wo_SN: wo-rSN, xh_ZA: xh-rZA, yo_NG: yo-rNG, zh_CN: zh-rCN, zh_CN.GB2312:zh-rBG, zh_HK: zh-rHK, zh_MO: zh-rMO, zh_SG: zh-rSG, zh_TW: zh-rTW, zu_ZA: zu-rZA
+type = ANDROID
+lang_map = en_SG: en-rSG, es_PA: es-rPA, mr_IN: mr-rIN, cs_CZ: cs-rCZ, vi_VN: vi-rVN, fr_MC: fr-rMC, it_CH: it-rCH, ta_LK: ta-rLK, kk_KZ: kk-rKZ, mn_CN: mn-rCN, mt_MT: mt-rMT, sma_SE: sma-rSE, si_LK: si-rLK, pl_PL: pl-rPL, de_AT: de-rAT, ii_CN: ii-rCN, hi_IN: hi-rIN, ar_BH: ar-rBH, ar_JO: ar-rJO, es_NI: es-rNI, quz_BO: quz-rBO, sr_CS: sr-rCS, es_CO: es-rCO, es_GT: es-rGT, ml_IN: ml-rIN, rm_CH: rm-rCH, zh_CN.GB2312: zh-rBG, hr_BA: hr-rBA, se_FI: se-rFI, tn_ZA: tn-rZA, tzm_DZ: tzm-rDZ, en_ZA: en-rZA, es_419: b+es+419, en_IN: en-rIN, my_MM: my, se_NO: se-rNO, am_ET: am-rET, arn_CL: arn-rCL, en_MY: en-rMY, es_HN: es-rHN, es_UY: es-rUY, en_AU: en-rAU, id: in, ku_IQ: ku-rIQ, pt_BR: pt-rBR, xh_ZA: xh-rZA, co_FR: co-rFR, en_BZ: en-rBZ, ha_NG: ha-rNG, or_IN: or-rIN, dsb_DE: dsb-rDE, fo_FO: fo-rFO, fr_CA: fr-rCA, ky_KG: ky-rKG, ar_LB: ar-rLB, es_AR: es-rAR, is_IS: is-rIS, ar_KW: ar-rKW, en_GB: b+en+001, fy_NL: fy-rNL, ar_QA: ar-rQA, hy_AM: hy-rAM, mn_MN: mn-rMN, nl_BE: nl-rBE, ar_OM: ar-rOM, as_IN: as-rIN, cy_GB: cy-rGB, he: iw, it_IT: it-rIT, nso_ZA: nso-rZA, ba_RU: ba-rRU, wo_SN: wo-rSN, lb_LU: lb-rLU, quz_EC: quz-rEC, uz_UZ: uz-rUZ, zh_TW: zh-rTW, ar_MA: ar-rMA, es_CL: es-rCL, es_VE: es-rVE, da_DK: da-rDK, et_EE: et-rEE, af_ZA: af-rZA, en@pirate: en-rpirate, ga_IE: ga-rIE, kok_IN: kok-rIN, ur_PK: ur-rPK, tg_TJ: tg-rTJ, ne_NP: ne-rNP, es_CR: es-rCR, fil_PH: fil-rPH, fr_CH: fr-rCH, gl_ES: gl-rES, se_SE: se-rSE, sr_BA: sr-rBA, es_DO: es-rDO, ms_MY: ms-rMY, oc_FR: oc-rFR, syr_SY: syr-rSY, ug_CN: ug-rCN, en_CA: en-rCA, en_JM: en-rJM, ko_KR: ko-rKR, be_BY: be-rBY, zh_HK: zh-rHK, nb_NO: nb-rNO, fi_FI: fi-rFI, fr_FR: fr-rFR, ar_SA: ar-rSA, az_AZ: az-rAZ, he_IL: he-rIL, zh_CN: zh-rCN, bn_BD: bn-rBD, el_GR: el-rGR, en_PH: en-rPH, sr@latin: sr-rSP, br_FR: br-rFR, ta_IN: ta-rIN, hu_HU: hu-rHU, lt_LT: lt-rLT, ar_AE: ar-rAE, en_ZW: en-rZW, ar_TN: ar-rTN, ka_GE: ka-rGE, en_TT: en-rTT, mi_NZ: mi-rNZ, zu_ZA: zu-rZA, fa_IR: fa-rIR, fr_LU: fr-rLU, lo_LA: lo-rLA, ms_BN: ms-rBN, rw_RW: rw-rRW, sl_SI: sl-rSI, tt_RU: tt-rRU, de_LI: de-rLI, es_EC: es-rEC, ps_AF: ps-rAF, id_ID: id-rID, smn_FI: smn-rFI, bg_BG: bg-rBG, lv_LV: lv-rLV, te_IN: te-rIN, iu_CA: iu-rCA, sms_FI: sms-rFI, es_PE: es-rPE, gd_GB: gd-rGB, hr_HR: hr-rHR, moh_CA: moh-rCA, smj_SE: smj-rSE, ar_LY: ar-rLY, de_LU: de-rLU, es_BO: es-rBO, sq_AL: sq-rAL, ar_SY: ar-rSY, tr_TR: tr-rTR, sr_RS: sr-rRS, sv_SE: sv-rSE, kl_GL: kl-rGL, quz_PE: quz-rPE, de_DE: de-rDE, sv_FI: sv-rFI, tk_TM: tk-rTM, bo_CN: bo-rCN, gsw_FR: gsw-rFR, pt_PT: pt-rPT, dv_MV: dv-rMV, uk_UA: uk-rUA, ar_YE: ar-rYE, zh_SG: zh-rSG, sw_KE: sw-rKE, en_IE: en-rIE, en_US: en-rUS, es_SV: es-rSV, qut_GT: qut-rGT, th_TH: th-rTH, ar_DZ: ar-rDZ, gu_IN: gu-rIN, kn_IN: kn-rIN, mk_MK: mk-rMK, es_MX: es-rMX, ig_NG: ig-rNG, smj_NO: smj-rNO, bn_IN: bn-rIN, de_CH: de-rCH, sk_SK: sk-rSK, es_PR: es-rPR, yo_NG: yo-rNG, sma_NO: sma-rNO, sa_IN: sa-rIN, en_NZ: en-rNZ, ja_JP: ja-rJP, pa_IN: pa-rIN, es_PY: es-rPY, nn_NO: nn-rNO, ar_EG: ar-rEG, bs_BA: bs-rBA, eu_ES: eu-rES, fr_BE: fr-rBE, km_KH: km-rKH, ru_RU: ru-rRU, sah_RU: sah-rRU, ca_ES: ca-rES, sr_ME: sr-rME, ro_RO: ro-rRO, prs_AF: prs-rAF, zh_MO: zh-rMO, es_ES: es-rES, hsb_DE: hsb-rDE, nl_NL: nl-rNL, ar_IQ: ar-rIQ
+
diff --git a/.tx/config.license b/.tx/config.license
new file mode 100644
index 000000000000..39d0c459b123
--- /dev/null
+++ b/.tx/config.license
@@ -0,0 +1,3 @@
+SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
+SPDX-FileCopyrightText: 2012 Bartosz Przybylski
+SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
\ No newline at end of file
diff --git a/AGENTS.md b/AGENTS.md
new file mode 100644
index 000000000000..a825310a978c
--- /dev/null
+++ b/AGENTS.md
@@ -0,0 +1,114 @@
+
+# Agents.md
+
+This file provides guidance to all AI agents (Claude, Codex, Gemini, etc.) working with code in this repository.
+
+You are an experienced engineer specialized on Java, Kotlin and familiar with the platform-specific details of Android.
+
+## Your Role
+
+- You implement features and fix bugs.
+- Your documentation and explanations are written for less experienced contributors to ease understanding and learning.
+- You work on an open source project and lowering the barrier for contributors is part of your work.
+
+## Project Overview
+
+The Nextcloud Android Client is a application to synchronize files from Nextcloud Server with your Android device.
+Java, Kotlin, XML, Jetpack Compose are the key technologies used for building the app.
+
+## Project Structure: AI Agent Handling Guidelines
+
+'./app/src/main/java/com' main package of the project.
+'.app/src/main/java/com/nextcloud/utils/extensions' package used for creating extensions.
+'./app/src/main/res/values' used for translations. Only update
+'./app/src/main/res/values/strings.xml'. Do not modify any other translation files or folders. Ignore all values-
+directories (e.g., values-es, values-fr).
+
+## General Guidance
+
+Every new file needs to get a SPDX header in the first rows according to this template.
+The year in the first line must be replaced with the year when the file is created (for example, 2026 for files first added in 2026).
+The commenting signs need to be used depending on the file type.
+
+```plaintext
+SPDX-FileCopyrightText: Nextcloud GmbH and Nextcloud contributors
+SPDX-License-Identifier: AGPL-3.0-or-later
+```
+Kotlin/Java:
+```kotlin
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+```
+
+XML:
+```xml
+
+```
+
+Avoid creating source files that implement multiple types; instead, place each type in its own dedicated source file.
+
+## Design
+
+- Follow Material Design 3 guidelines
+- In addition to any Material Design wording guidelines, follow the Nextcloud wording guidelines at https://docs.nextcloud.com/server/latest/developer_manual/design/foundations.html#wording
+- Ensure the app works in both light and dark theme
+- Ensure the app works with different server primary colors by using the colorTheme of viewThemeUtils
+
+## Commit and Pull Request Guidelines
+
+### Commits
+
+- All commits must be signed off (`git commit -s`) per the Developer Certificate of Origin (DCO). All PRs target `master`. Backports use `/backport to stable-X.Y` in a PR comment.
+
+- Commit messages must follow the [Conventional Commits v1.0.0 specification](https://www.conventionalcommits.org/en/v1.0.0/#specification) — e.g. `feat(chat): add voice message playback`, `fix(call): handle MCU disconnect gracefully`.
+
+- Every commit made with AI assistance must include an `AI-assistant` trailer identifying the coding agent, its version, and the model(s) used:
+
+ ```
+ AI-assistant: Claude Code 2.1.80 (Claude Sonnet 4.6)
+ AI-assistant: Copilot 1.0.6 (Claude Sonnet 4.6)
+ ```
+
+ General pattern: `AI-assistant: ( )`
+
+ If multiple models are used for different roles, extend the trailer with named roles:
+
+ ```
+ AI-assistant: OpenCode v1.0.203 (plan: Claude Opus 4.5, edit: Claude Sonnet 4.5)
+ ```
+
+ Pattern with roles: `AI-assistant: (: , : )`
+
+### Pull Requests
+
+- Include a short summary of what changed. *Example:* `fix: prevent crash on empty todo title`.
+- **Pull Request**: When the agent creates a PR, it should include a description summarizing the changes and why they were made. If a GitHub issue exists, reference it (e.g., “Closes #123â€).
+
+## Code Style
+
+- Do not exceed 300 line of code per file.
+- Line length: **120 characters**
+- Standard Android Studio formatter with EditorConfig.
+- Kotlin preferred for new code; legacy Java still present.
+- Do not use decorative section-divider comments of any kind (e.g. `// ── Title ───`, `// ------`, `// ======`).
+- Every new file must end with exactly one empty trailing line (no more, no less).
+- Do not add comments, documentation for every function you created instead make it self explanatory as much as possible.
+- Create models, states in different files instead of doing it one single file.
+- Do not use magic number.
+- Apply fail fast principle instead of using nested if-else statements.
+- Do not use multiple boolean flags to determine states instead use enums or sealed classes.
+- Use modern Java for Java classes. Optionals, virtual threads, records, streams if necessary.
+- Avoid hardcoded strings, colors, dimensions. Use resources.
+- Run lint, spotbugsGplayDebug, detekt, spotlessKotlinCheck and fix findings inside the files that have been changed.
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1043c5be8d0c..3374f922b72c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,639 @@
+## 3.33.0 (September 10, 2025)
+
+- Migrate to Glide 4
+- Performance improvements
+- Fix gallery image scaling
+- Bugfixes
+
+Minimum: NC 18 Server, Android 8.1 Nougat
+
+For a full list, please see https://github.com/nextcloud/android/milestone/112
+
+## 3.32.3 (August 21, 2025)
+
+- Bugfixes
+
+Minimum: NC 18 Server, Android 8.0 Nougat
+
+For a full list, please see https://github.com/nextcloud/android/milestone/114
+
+## 3.32.2 (July 18, 2025)
+
+- Resolved image blurriness issue.
+- Fixed crash occurring in the conflict resolution dialog.
+- Addressed crash in the upload finish receiver event handler.
+
+Minimum: NC 18 Server, Android 8.0 Nougat
+
+For a full list, please see https://github.com/nextcloud/android/milestone/115
+
+## 3.32.1 (July 14, 2025)
+
+- Bug fixes.
+
+Minimum: NC 18 Server, Android 8.0 Nougat
+
+For a full list, please see https://github.com/nextcloud/android/milestone/113
+
+## 3.32.0 (July 2, 2025)
+
+- Minimum supported Android version is 8.0.
+- Scrolling performance has been increased in the media tab.
+- Multi-select feature added to the media tab.
+- Custom share permissions have been added.
+- Bug fixes.
+
+Minimum: NC 18 Server, Android 8.0 Nougat
+
+For a full list, please see https://github.com/nextcloud/android/milestone/107
+
+## 3.31.4 (June 3, 2025)
+
+- Add missing auto migration
+
+Minimum: NC 18 Server, Android 7.1 Nougat
+
+For a full list, please see https://github.com/nextcloud/android/milestone/110
+
+## 3.31.3 (May 28, 2025)
+
+- fix simple sign up
+- bugfixes
+- update translations
+
+Minimum: NC 18 Server, Android 7.1 Nougat
+
+For a full list, please see https://github.com/nextcloud/android/milestone/110
+
+## 3.31.2 (May 20, 2025)
+
+- bring back MANAGE_EXTERNAL_STORAGE permission
+
+Minimum: NC 18 Server, Android 7.1 Nougat
+
+For a full list, please see https://github.com/nextcloud/android/milestone/108
+
+## 3.31.1 (April 3, 2025)
+
+- Various bug fixes and performance enhancements
+
+Minimum: NC 18 Server, Android 7.1 Nougat
+
+For a full list, please see https://github.com/nextcloud/android/milestone/108
+
+## 3.31.0 (February 25, 2025)
+
+- New share layout
+- Various bug fixes and performance enhancements
+
+Minimum: NC 18 Server, Android 7.1 Nougat
+
+For a full list, please see https://github.com/nextcloud/android/milestone/100
+
+## 3.30.7 (January 6, 2025)
+
+- Fix crash of auto upload settings
+
+Minimum: NC 16 Server, Android 7.0 Nougat
+
+For a full list, please see https://github.com/nextcloud/android/milestone/104
+
+## 3.30.3 (October 22, 2024)
+
+- Bugfix for two way sync: sync only on wifi
+
+## 3.30.2 (October 21, 2024)
+
+- Bugfix for two way sync. Please check listed folders in settings -> internal two way sync
+
+Minimum: NC 16 Server, Android 7.0 Nougat
+
+For a full list, please see https://github.com/nextcloud/android/milestone/99
+
+## 3.30.1 (October 11, 2024)
+
+- Bugfixes
+
+Minimum: NC 16 Server, Android 7.0 Nougat
+
+For a full list, please see https://github.com/nextcloud/android/milestone/99
+
+## 3.29.1 (June 27, 2024)
+
+- Bugfixes
+
+Minimum: NC 16 Server, Android 7.0 Nougat
+
+For a full list, please see https://github.com/nextcloud/android/milestone/93
+
+
+
+## 3.29.0 (April 24, 2024)
+
+- NC Assistant
+- Client certificates
+- Personal files view
+- REUSE compliance
+- Bugfixes
+
+Minimum: NC 16 Server, Android 7.0 Nougat
+
+For a full list, please see https://github.com/nextcloud/android/milestone/89
+
+## 3.28.2 (April 4th, 2024)
+
+- Bugfixes
+
+Minimum: NC 16 Server, Android 7.0 Nougat
+
+For a full list, please see https://github.com/nextcloud/android/milestone/90
+
+## 3.28.1 (March 25th, 2024)
+
+- Bugfixes
+
+Minimum: NC 16 Server, Android 7.0 Nougat
+
+For a full list, please see https://github.com/nextcloud/android/milestone/90
+
+## 3.28.0 (February 13th, 2024)
+
+- E2E sharing
+- Bugfixes
+
+Minimum: NC 16 Server, Android 7.0 Nougat
+
+For a full list, please see https://github.com/nextcloud/android/milestone/88
+
+## 3.26.0 (September 16, 2023)
+
+- image editing
+- image details, with map
+- show other Nextcloud apps
+
+Minimum: NC 16 Server, Android 6.0 Marshmallow
+
+For a full list, please see https://github.com/nextcloud/android/milestone/84
+
+## 3.25.0 (June 13, 2023)
+
+- show Groupfolder
+- Tag in file listing
+
+Minimum: NC 16 Server, Android 6.0 Marshmallow
+
+For a full list, please see https://github.com/nextcloud/android/milestone/81
+
+## 3.24.1 (February 21, 2023)
+
+- Fix crash in previous version when connecting to old server versions
+
+Minimum: NC 16 Server, Android 6.0 Marshmallow
+
+For a full list, please see https://github.com/nextcloud/android/milestone/80
+
+## 3.24.0 (February 13, 2023)
+
+- Several performance optimizations by @starypatyk
+- Support multi-page document scanning and exporting to PDF
+- Many small bugfixes and improvements
+
+Minimum: NC 16 Server, Android 6.0 Marshmallow
+
+For a full list, please see https://github.com/nextcloud/android/milestone/78
+
+## 3.23.1 (December 21, 2022)
+
+- Bug fixes
+
+Minimum: NC 16 Server, Android 6.0 Marshmallow
+
+For a full list, please see https://github.com/nextcloud/android/milestone/79
+
+## 3.23.0 (December 1, 2022)
+
+- File actions menu redesign
+- Allow adding shortcuts to Home screen (@newhinton)
+- Many bugfixes and performance optimizations
+
+Minimum: NC 16 Server, Android 6.0 Marshmallow
+
+For a full list, please see https://github.com/nextcloud/android/milestone/74
+
+## 3.22.3 (November 3, 2022)
+
+- Bug fixes
+
+Minimum: NC 16 Server, Android 6.0 Marshmallow
+
+For a full list, please see https://github.com/nextcloud/android/milestone/76
+
+## 3.22.2 (October 24, 2022)
+
+- Bug fixes
+
+Minimum: NC 16 Server, Android 6.0 Marshmallow
+
+For a full list, please see https://github.com/nextcloud/android/milestone/75
+
+## 3.22.1 (October 20, 2022)
+
+- Bug fixes
+
+Minimum: NC 16 Server, Android 6.0 Marshmallow
+
+For a full list, please see https://github.com/nextcloud/android/milestone/73
+
+## 3.22.0 (October 19, 2022)
+
+- Material 3 UI revamp
+- Dashboard widgets for Android launcher
+- New tiled design for media view
+- Many bugfixes and improvements
+
+Minimum: NC 16 Server, Android 6.0 Marshmallow
+
+For a full list, please see https://github.com/nextcloud/android/milestone/70
+
+## 3.21.2 (September 1, 2022)
+
+- Bug fixes
+
+Minimum: NC 16 Server, Android 6.0 Marshmallow
+
+## 3.21.1 (August 26, 2022)
+
+- Bug fixes
+
+Minimum: NC 16 Server, Android 6.0 Marshmallow
+
+For a full list, please see https://github.com/nextcloud/android/milestone/72
+
+## 3.21.0 (August 8, 2022)
+
+- Fast scroll for all lists
+- Media view
+ - Group photos as timeline by month
+ - Filter options
+- File locking
+- File export to sdcard
+- Many bugfixes and improvements
+
+Minimum: NC 16 Server, Android 6.0 Marshmallow
+
+For a full list, please see https://github.com/nextcloud/android/milestone/66
+
+## 3.20.3 (June 13th, 2022)
+
+- Minor bug fixes
+
+Minimum: NC 16 Server, Android 6.0 Marshmallow
+
+For a full list, please see https://github.com/nextcloud/android/milestone/69
+
+## 3.20.2 (June 9th, 2022)
+
+- Several minor bugfixes
+
+Minimum: NC 16 Server, Android 6.0 Marshmallow
+
+For a full list, please see https://github.com/nextcloud/android/milestone/68
+
+## 3.20.1 (May 6th, 2022)
+
+- Several minor bugfixes
+
+Minimum: NC 16 Server, Android 6.0 Marshmallow
+
+For a full list, please see https://github.com/nextcloud/android/milestone/67
+## 3.20.0 (May 3rd, 2022)
+
+- Built-in PDF viewer
+- Built-in document scanner
+- Better choices for storage permissions
+- File locking support
+- Better UI for media gallery
+- Many bugfixes and improvements
+
+Minimum: NC 16 Server, Android 6.0 Marshmallow
+
+For a full list, please see https://github.com/nextcloud/android/milestone/64
+## 3.19.1 (March 10, 2022)
+
+- Minor fixes and improvements
+
+Minimum: NC 16 Server, Android 6.0 Marshmallow
+
+For a full list, please see https://github.com/nextcloud/android/milestone/65
+## 3.19.0 (February 3, 2022)
+
+- Support external storage in Media page
+- Connection fallback to IPv4 when IPv6 fails
+- Many other fixes and improvements
+
+Minimum: NC 16 Server, Android 6.0 Marshmallow
+
+For a full list, please see https://github.com/nextcloud/android/milestone/62
+## 3.18.1 (December 22, 2021)
+
+- Fix connection bug for usernames with spaces
+- Fix some crashes in search and share views
+- Fix login for server URLs in IP:port format
+- Lots of minor bug fixes
+
+Minimum: NC 16 Server, Android 6.0 Marshmallow
+
+For a full list, please see https://github.com/nextcloud/android/milestone/63
+
+## 3.18.0 (November 18, 2021)
+
+- Calendar backup/restore
+- Unified search
+- Sharing permissions improvements
+- Minor bug fixes
+
+Minimum: NC 16 Server, Android 6.0 Marshmallow
+
+For a full list, please see https://github.com/nextcloud/android/milestone/61
+
+## 3.17.1 (October, 20, 2021)
+
+- fix FIDO crash
+- fix crash in documents provider while offline
+- updated translations
+
+Minimum: NC 16 Server, Android 5.1 Lollipop
+
+
+For a full list, please see https://github.com/nextcloud/android/milestone/60
+
+## 3.17.0 (August, 19, 2021)
+
+- UI improvements (Avatar, password dialog)
+- New video player for better streaming
+- Many bug fixes
+- Drop Android 5.0, new min version Android 5.1
+
+Minimum: NC 16 Server, Android 5.1 Lollipop
+
+
+For a full list, please see https://github.com/nextcloud/android/milestone/59
+
+## 3.16.1 (June, 01, 2021)
+
+- Fix media tab not showing images/videos
+- Connectivity checks fixed
+- Crashing while retrieving avatar
+
+Minimum: NC 16 Server, Android 5.0 Lollipop
+
+
+For a full list, please see https://github.com/nextcloud/android/milestone/58
+
+## 3.16.0 (May, 05, 2021)
+
+- Enhance sharing
+- Update template section when creating new files
+- Pin protection update
+- Updated notification handling during updates @newhinton
+- UI improvements
+
+Minimum: NC 16 Server, Android 5.0 Lollipop
+
+
+For a full list, please see https://github.com/nextcloud/android/milestone/55
+
+## 3.15.1 (March, 10, 2021)
+
+- share fix
+- passcode fix
+- enhance share access
+
+Minimum: NC 16 Server, Android 5.0 Lollipop
+
+
+For a full list, please see https://github.com/nextcloud/android/milestone/57
+
+## 3.15.0 (February, 02, 2021)
+
+- Media instead of Photos: also show videos
+- UI Improvement (shimmer)
+- Bug fixes all over the place
+- Drop Android 4.4, new min version Android 5.0
+
+Minimum: NC 16 Server, Android 5.0 Lollipop
+
+
+For a full list, please see https://github.com/nextcloud/android/milestone/52
+
+## 3.14.3 (January, 13, 2021)
+
+- Fix crash when clicking "+" button
+- Fix push notifications on some devices
+- Fix updating of sharee list
+- Fix crash during setting status
+- Fix Crash Sharing files to Nextcloud via Android Apps
+
+For a full list, please see https://github.com/nextcloud/android/milestone/56
+
+## 3.14.2 (January, 13, 2021)
+
+- Fix push notifications on some devices
+- Fix updating of sharee list
+- Fix crash during setting status
+- Fix Crash Sharing files to Nextcloud via Android Apps
+
+For a full list, please see https://github.com/nextcloud/android/milestone/54
+
+## 3.14.1 (December, 02, 2020)
+
+- Fix crash due to service not started in time
+- Fix UI while media playback
+- Fix uploading direct camera images with more than one picture
+- Fix conflict handling on auto upload
+
+For a full list, please see https://github.com/nextcloud/android/milestone/53
+
+## 3.14.0 (November, 18, 2020)
+
+- Prevent Firebase crashes: Exodus will warn about tracker, but code wise it is disabled
+- Status support
+- Document storage enhancement @tgrote
+- Auto upload media detection improvements @AndyScherzinger
+- Sharing UI rewrite
+- Drop Android 4.3, new min version Android 4.4
+
+For a full list, please see https://github.com/nextcloud/android/milestone/50
+
+## 3.13.1 (September, 15, 2020)
+
+- bugfix release
+- auto upload obey metered network
+- fix adding account via qrCode
+- fix deleting password on share
+- fix conflict handling on auto upload
+- lots more
+
+For a full list, please see https://github.com/nextcloud/android/milestone/51
+
+## 3.13.0 (August, 18, 2020)
+
+- new UI overhaul @Shagequi @JorisBodin
+- E2EE beta support
+- dark mode enhancement @AndyScherzinger
+- warn on outdated NC16 server
+- requires Android 4.3 or newer
+
+For a full list, please see https://github.com/nextcloud/android/milestone/48
+
+## 3.12.1 (July, 07, 2020)
+
+- UI does not hang when changing auto upload
+- fix crash on contacts backup settings
+- bugfixes
+
+For a full list, please see https://github.com/nextcloud/android/milestone/49
+
+## 3.12.0 (June, 10, 2020)
+
+- add circle support for searching/displaying
+- if no offline editor is available, use OO/Cool/Text
+- add possibility to set expiration date on user/group shares (NC18+)
+- rich workspaces can be disabled on server side
+- improved loading view
+- requires Android 4.2 or newer
+
+For a full list, please see https://github.com/nextcloud/android/milestone/42
+
+## 3.11.1 (April, 23, 2020)
+
+- Crash while browsing files
+- auto upload:
+ - fix wrong conflict detection on custom folder
+ - allow to choose default conflict strategy @fodinabor
+ - fix hanging UI after saving
+- open office files online if no local app installed
+
+For a full list, please see https://github.com/nextcloud/android/milestone/47
+
+## 3.11.0 (March, 26, 2020)
+
+- not enough space dialog @Shagequi
+- fix shared search
+- upload existing images in auto upload @koying @ArisuOngaku
+- allow deep links @Charon77
+- support for circle
+- last version supporting Android 4.1
+
+For a full list, please see https://github.com/nextcloud/android/milestone/41
+
+## 3.10.1 (February, 05, 2020)
+
+- fix crash on self-signed certificates
+- fix openOffice open files with special chars
+
+For a full list, please see https://github.com/nextcloud/android/milestone/45
+
+## 3.10.0 (January, 17, 2020)
+
+- Dark theme (@dan0xii, @AndyScherzinger)
+- Rich workspace (NC18+)
+- collaborative text editor (NC18+)
+- links in Markdown previews clickable (@AndyScherzinger)
+- Show/Hide auto upload list items (@AndyScherzinger)
+- drop 4.0.x support
+- outdated server warning set to NC15
+- latest supported version NC13
+
+For a full list, please see https://github.com/nextcloud/android/milestone/40
+
+## 3.9.2 (December, 05, 2019)
+
+- HOTFIX: fix login loop
+- Fix crash on opening png images
+- Translation updates
+
+For a full list, please see https://github.com/nextcloud/android/milestone/44
+
+## 3.9.1 (December, 04, 2019)
+
+- Fix crash on opening png images
+- Translation updates
+
+For a full list, please see https://github.com/nextcloud/android/milestone/43
+
+## 3.9.0 (November, 12, 2019)
+
+- preview Markdown with syntax highlighting @AndyScherzinger
+- improved DavX5 integration @bitfireAT
+- AutoUpload: allow files to upload into subfolder
+- new media player service @ezaquarii
+- Remote wipe integration
+- Print from within Collabora
+- enhanced SingleSignOn
+- outdated server warning set to NC14
+
+For a full list, please see https://github.com/nextcloud/android/milestone/38
+
+## 3.8.1 (October, 11, 2019)
+
+- upload images into subfolder, if source folder also has subfolder
+- Fix registration of second account on first run
+- fix disappearing account list
+- fix recurring synced folder notification
+- fix vanishing images
+- auto upload: fix relative paths
+- bugfix release
+- updated translations
+
+For a full list, please see https://github.com/nextcloud/android/milestone/39
+
+## 3.8.0 (September, 14, 2019)
+
+- FIDO U2F support on login
+- load only 60 images on photo view, then load more on demand
+- do not auto upload .thumbnail files
+- allow to send crash report via email
+- paste clipboard into Collabora
+- use Conscrypt to support TLS1.3
+- show sharees in list view
+- remote wipe
+- same mimetype as server
+- fix reloading in activity stream
+- lots of bugfixes and refinements
+
+For a full list, please see https://github.com/nextcloud/android/milestone/35
+
+## 3.7.2 (August, 16, 2019)
+
+- Transifex update
+- bump to lib 1.5.0
+
+For a full list, please see https://github.com/nextcloud/android/milestone/37
+
+## 3.7.1 (July, 30, 2019)
+
+- fix for Global Scale
+
+For a full list, please see https://github.com/nextcloud/android/milestone/36
+
+## 3.7.0 (July, 09, 2019)
+
+- Collabora enhancements
+- Chromebook support
+- delete push notifications if read on other device (NC 18 and newer)
+- open file from notification
+- open file from Talk app
+- minimum supported server: NC12
+- end of life warning: NC13 and older
+- lots of bugfixes and refinements under the hood to provide an even more stable app
+
+For a full list, please see https://github.com/nextcloud/android/milestone/32
+
## 3.6.2 (May, 23, 2019)
- fix bug when creating preview
- fix crash on opening app
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
index e6138bc3399a..ae8a32dca556 100644
--- a/CODE_OF_CONDUCT.md
+++ b/CODE_OF_CONDUCT.md
@@ -1,3 +1,7 @@
+
In the Nextcloud community, participants from all over the world come together to create Free Software for a free internet. This is made possible by the support, hard work and enthusiasm of thousands of people, including those who create and use Nextcloud software.
Our code of conduct offers some guidance to ensure Nextcloud participants can cooperate effectively in a positive and inspiring atmosphere, and to explain how together we can strengthen and support each other.
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 4bf9fb7814e0..4b77f2d17e22 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,34 +1,51 @@
+
# [Nextcloud](https://nextcloud.com) Android app
-[](https://webchat.freenode.net/?channels=nextcloud)
-[](https://webchat.freenode.net/?channels=nextcloud-mobile)
-
-
# Index
-1. Guidelines
- 1. Issue reporting
- 1. Labels
- 1. PR
- 1. Issue
-1. Contributing to Source Code
- 1. Developing process
- 1. Android Studio formatter setup
- 1. Contribution process
- 1. Fork and download android/master repository
- 1. Create pull request
- 1. Create another pull request
- 1. Translations
-1. Releases
- 1. Types
- 1. Stable
- 1. Release Candidate
- 1. Dev
- 1. Version Name and number
- 1. Release cycle
- 1. Release Process
- 1. Stable
- 1. Release Candidate
- 1. Development Dev
+1. [Guidelines](#guidelines)
+ 1. [Issue reporting](#issue-reporting)
+ 1. [Labels](#labels)
+ 1. [Pull request](#pull-request)
+ 1. [Issue](#issue)
+ 1. [Bug workflow](#bug-workflow)
+1. [Contributing to Source Code](#contributing-to-source-code)
+ 1. [Developing process](#developing-process)
+ 1. [Branching model](#branching-model)
+ 1. [Formatter setup](#formatter-setup)
+ 1. [Build variants](#build-variants)
+ 1. [Git hooks](#git-hooks)
+ 1. [Contribution process](#contribution-process)
+ 1. [Fork and download android repository](#fork-and-download-android-repository)
+ 1. [Create pull request](#create-pull-request)
+ 1. [Create another pull request](#create-another-pull-request)
+ 1. [Backport pull request](#backport-pull-request)
+ 1. [Pull requests that also need changes on library](#pull-requests-that-also-need-changes-on-library)
+ 1. [Adding new files](#adding-new-files)
+ 1. [Testing](#testing)
+ 1. [File naming](#file-naming)
+ 1. [Menu files](#menu-files)
+ 1. [Translations](#translations)
+ 1. [Engineering practices](#engineering-practices)
+ 1. [Approach to technical debt](#approach-to-technical-debt)
+ 1. [Dependency injection](#dependency-injection)
+ 1. [Custom platform APIs](#custom-platform-apis)
+ 1. [Testing](#testing)
+1. [Releases](#releases)
+ 1. [Types](#types)
+ 1. [Stable](#stable)
+ 1. [Release Candidate](#release-candidate)
+ 1. [Dev](#dev)
+ 1. [Version Name and number](#version-name-and-number)
+ 1. [Stable / Release candidate](#stable-release-candidate)
+ 1. [Dev](#dev)
+ 1. [Release cycle](#release-cycle)
+ 1. [Release Process](#release-process)
+ 1. [Stable Release](#stable-release)
+ 1. [Release Candidate Release](#release-candidate-release)
+ 1. [Development Dev](#development-dev)
# Guidelines
@@ -56,6 +73,7 @@ If your issue appears to be a bug, and hasn't been reported, open a new issue.
### Bug workflow
+Every bug should be triaged in approved/needs info in a given time.
* approved: at least one other is able to reproduce it
* needs info: something unclear, or not able to reproduce
* if no response within 1 months, bug will be closed
@@ -89,12 +107,22 @@ We are all about quality while not sacrificing speed so we use a very pragmatic
* Hot fixes not relevant for an upcoming feature release but the latest release can target the bug fix branch directly
-### Android Studio formatter setup
+### Formatter setup
Our formatter setup is rather simple:
* Standard Android Studio
-* Line length 120 characters (Settings->Editor->Code Style->Right margin(columns): 120)
+* Line length 120 characters (Settings->Editor->Code Style->Right margin(columns): 120; also set by EditorConfig
* Auto optimize imports (Settings->Editor->Auto Import->Optimize imports on the fly)
+You can fix Check / check (spotlessKotlinCheck) via following commands:
+
+```bash
+./gradlew spotlessApply
+./gradlew detekt
+./gradlew spotlessCheck
+./gradlew spotlessKotlinCheck
+```
+
+See section [Git hooks](#git-hooks) to have these run automatically with your commits.
### Build variants
There are three build variants
@@ -102,23 +130,30 @@ There are three build variants
* gplay: with Google Stuff (Push notification), used for Google Play Store
* versionDev: based on master and library master, available as direct download and FDroid
+### Git hooks
+We provide git hooks to make development process easier for both the developer and the reviewers.
+They are stored in [/scripts/hooks](/scripts/hooks) and can be installed with:
+
+```bash
+./gradlew installGitHooks
+```
+
## Contribution process
* Contribute your code in the branch 'master'. It will give us a better chance to test your code before merging it with stable code.
* For your first contribution start a pull request on master.
-### 1. Fork and download android/master repository:
+### Fork and download android repository:
* Please follow [SETUP.md](https://github.com/nextcloud/android/blob/master/SETUP.md) to setup Nextcloud Android app work environment.
-### 2. Create pull request:
-* Commit your changes locally: ```git commit -a```
+### Create pull request:
+* Commit your changes locally. Remember to sign off your commits (`git commit -sm 'Your commit message'`).
* Push your changes to your GitHub repo: ```git push```
-* Browse to https://github.com/YOURGITHUBNAME/android/pulls and issue pull request
+* Browse to and issue pull request
* Enter description and send pull request.
-
-### 3. Create another pull request:
+### Create another pull request:
To make sure your new pull request does not contain commits which are already contained in previous PRs, create a new branch which is a clone of upstream/master.
* ```git fetch upstream```
@@ -127,16 +162,252 @@ To make sure your new pull request does not contain commits which are already co
* Push branch to server: ```git push -u origin name_of_local_master_branch```
* Use GitHub to issue PR
-### 4. Backport pull request:
-If some pull request is worth to backport to a dot release, label it as "backport-request".
-
-* create a new branch based on latest stable branch
-* git cherry-pick commits from origin pull request
-* create pull request on github with "Backport of #originPullRequest: description"
-* remove label "backport-request" from origin pull request
+### Backport pull request:
+Use backport-bot via "/backport to stable-version", e.g. "/backport to stable-3.7".
+This will automatically add "backport-request" label to PR and bot will create a new PR to targeted branch once the base PR is merged.
+If automatic backport fails, it will create a comment.
+
+### Pull requests that also need changes on library
+For speeding up developing, we do use a master snapshot of nextcloud-library, provided by jitpack.io.
+This means that if a breaking change is merged on library, master branch of the app will fail.
+To limit this risk please follow this approach:
+- on app PR: first use a reference to your library branch in build.gradle: ext -> androidLibraryVersion, e.g. androidLibraryVersion = "changeSearch-SNAPSHOT"
+- on library PR: use label "client change required" to indicate that this is breaking change. This will prevent GitHub from merging it.
+
+Once both PRs are reviewed and ready to merge:
+- on library PR: remove label and merge it (for a short time now master cannot be built!)
+- on app PR: change androidLibraryVersion back to "master-SNAPSHOT"
+- wait for CI and then merge
+
+With this approach the "downtime" of not building master is limited to the timestamp between merge lib PR and merging app PR, which is only limited by CI.
+
+### Adding new files
+If you create a new file it needs to contain a license header. We encourage you to use the same license (AGPL3+) as we do.
+Copyright of Nextcloud GmbH is optional.
+
+Source code of library:
+```java
+/*
+ * Nextcloud Android Library
+ *
+ * SPDX-FileCopyrightText: 2024 Your Name
+ * SPDX-License-Identifier: MIT
+ */
+ ```
+
+Source code of app:
+```java
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2024 Your Name
+ * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+ */
+ ```
+
+ XML (layout) file:
+ ```xml
+
+```
+
+### Testing
+- testing is very important, but is lacking a lot on this project. Starting with 2020 we aim to write tests for every
+ new pull request.
+- Code coverage can be found [here](https://codecov.io/gh/nextcloud/android).
+
+#### Unit tests
+- small, isolated tests, with no need of Android SDK
+- code coverage can be directly shown via right click on test and select "Run Test with Coverage"
+
+```
+./gradlew jacocoTestGplayDebugUnitTest
+```bash
+
+#### Instrumented tests
+- tests to see larger code working in correct way
+- tests that require parts of Android SDK
+
+- run all tests ```./gradlew createGplayDebugCoverageReport -Pcoverage=true```
+- run selective test class: ```./gradlew createGplayDebugCoverageReport -Pcoverage=true
+ -Pandroid.testInstrumentationRunnerArguments.class=com.owncloud.android.datamodel.FileDataStorageManagerContentProviderClientIT```
+- run multiple test classes:
+ - separate by ","
+ - ```./gradlew createGplayDebugCoverageReport -Pcoverage=true -Pandroid.testInstrumentationRunnerArguments.class=com.owncloud.android.datamodel.FileDataStorageManagerContentProviderClientIT,com.nextcloud.client.FileDisplayActivityIT```
+- run one test in class: ```./gradlew createGplayDebugCoverageReport -Pcoverage=true
+ -Pandroid.testInstrumentationRunnerArguments.class=com.owncloud.android.datamodel.FileDataStorageManagerContentProviderClientIT#saveFile```
+- JaCoCo results are shown as html: firefox ./build/reports/coverage/gplay/debug/index.html
+
+#### Instrumented tests with server communication
+It is best to avoid server communication, see https://github.com/nextcloud/android/pull/3624.
+But if a test requires a server, this is how it is done:
+- Have a Nextcloud service reachable by your test device. This can be an existing server in the internet or a locally deployed one
+as per the [server developer documentation](https://docs.nextcloud.com/server/latest/developer_manual/getting_started/devenv.html)
+- Create a separate(!) test user on that server, otherwise the tests will infer with productive data.
+- In `gradle.properties`, enter the URL, user name and password via the `NC_TEST_SERVER_...` attributes.
+ If you want to prevent an accidental commit of those, you can also store them in `~/.gradle/gradle.properties`.
+- Your test class should inherit from `AbstractOnServerIT`, e.g.: `public class DownloadIT extends AbstractOnServerIT { ...`
+ Note that this will automatically delete all files after each test run, so you absolutely NEED a separate test user as mentioned above.
+- All preconditions of your test regarding server data, e.g. existing files, need to be established by your test itself.
+ As a reference, see how `DownloadIT` first uploads the files it later tests the download with.
+- Clean up these preconditions again, also in the failure case, using one or multiple `@After` methods in your test class.
+
+#### UI tests
+We use [shot](https://github.com/Karumi/Shot) for taking screenshots and compare them.
+To exclude the shot dependency from normal builds, the dependency needs to be activated via an environment variable `SHOT_TEST`.
+For convenience, this and other prerequisites are encapsulated in utility scripts, so it is advised to use them
+- check screenshots: ```scripts/androidScreenshotTest ```
+ - check the script for a detailed documentation of the parameters
+- update/generate new screenshots: ```scripts/updateScreenshots.sh ```
+ - in this script are samples how to only execute a given class/test
+ - this will fire up docker & emulator to ensure that screenshots look the same
+- creating own UI comparison tests:
+ - add IntentsTestRule for launching activity directly:
+
+ ```java
+ @Rule public IntentsTestRule activityRule = new IntentsTestRule<>(SettingsActivity.class,
+ true,
+ false);
+ ```
+
+ - in test method:
+
+ ```java
+ Activity activity = activityRule.launchActivity(null);
+ …do something, e.g. navigate, create folder, etc. …
+ Screenshot.snapActivity(activity).record();
+ ```
+
+ - best practice is to first create test with emulator too see behaviour and then create screenshots
+
+## File naming
+
+The file naming patterns are inspired and based on [Ribot's Android Project And Code Guidelines](https://github.com/ribot/android-guidelines/blob/c1d8c9c904eb31bf01fe24aadb963b74281fe79a/project_and_code_guidelines.md).
+
+### Menu files
+
+Similar to layout files, menu files should match the name of the component. For example, if we are defining a menu file that is going to be used in the `UserProfileActivity`, then the name of the file should be `activity_user_profile.xml`. Same pattern applies for menus used in adapter view items, dialogs, etc.
+
+| Component | Class Name | Menu Name |
+| ---------------- | ---------------------- | ----------------------------- |
+| Activity | `UserProfileActivity` | `activity_user_profile.xml` |
+| Fragment | `SignUpFragment` | `fragment_sign_up.xml` |
+| Dialog | `ChangePasswordDialog` | `dialog_change_password.xml` |
+| AdapterView item | --- | `item_person.xml` |
+| Partial layout | --- | `partial_stats_bar.xml` |
+
+A good practice is to not include the word `menu` as part of the name because these files are already located in the `menu` directory. In case a component uses several menus in different places (via popup menus) then the resource name would be extended. For example, if the user profile activity has two popup menus for configuring the users settings and one for the handling group assignments then the file names for the menus would be: `activity_user_profile_user_settings.xml` and `activity_user_profile_group_assignments.xml`.
## Translations
-We manage translations via [Transifex](https://www.transifex.com/nextcloud/nextcloud/android/). So just request joining the translation team for Android on the site and start translating. All translations will then be automatically pushed to this repository, there is no need for any pull request for translations.
+
+We manage translations via [Transifex](https://app.transifex.com/nextcloud/nextcloud/android/). So just request joining the translation team for Android on the site and start translating. All translations will then be automatically pushed to this repository, there is no need for any pull request for translations.
+
+If you need to change a translation, do not change it, but give it new key. This way the translation stays backward compatible as we automatically backport translated strings to last versions.
+
+When submitting PRs with changed translations, please only submit changes to values/strings.xml and not changes to translated files. These will be overwritten by next merge of transifex-bot and increase PR review.
+
+## Engineering practices
+
+This section contains some general guidelines for new contributors, based on common issues flagged during code review.
+
+### Approach to technical debt
+
+TL;DR Non-Stop Litter Picking Party!
+
+We recognize the importance of technical debt that can slow down development, make bug fixing difficult and
+discourage future contributors.
+
+We are mindful of the [Broken Windows Theory](https://en.wikipedia.org/wiki/Broken_windows_theory) and we'd like
+actively promote and encourage contributors to apply The Scout's Rule: *"Always leave the campground cleaner than
+you found it"*. Simple, little improvements will sum up and will be very appreciated by Nextcloud team.
+
+We also promise to actively support and mentor contributors that help us to improve code quality, as we understand
+that this process is challenging and requires deep understanding of the application codebase.
+
+### Dependency injection
+
+TL;DR Avoid calling constructors inside constructors.
+
+In effort to modernize the codebase we are applying [Dependency Injection](https://en.wikipedia.org/wiki/Dependency_injection)
+whenever possible. We use 2 approaches: automatic and manual.
+
+We are using [Dagger 2](https://dagger.dev/) to inject dependencies into major Android components only:
+
+ * `Activity`
+ * `Fragment`
+ * `Service`
+ * `BroadcastReceiver`
+ * `ContentProvider`
+
+This process is fairly automatic, with `@Inject` annotation being sufficient to supply properly initialized
+objects. Android lifecycle callbacks allow us to do most of the work without effort.
+
+For other application sub-components we prefer to use constructor injection and manually provide required dependencies.
+
+This combination allows us to benefit from automation when it provides most value, does not tie rest of the code
+to any specific framework and stimulates continuous code modernization through iterative refactoring of all minor
+elements.
+
+### Custom platform APIs
+
+TL;DR Avoid Android platform APIs.
+
+Nextcloud Android application provides some replacements for native Android APIs to facilitate testing
+and expose higher-level, business-specific APIs.
+
+Generally, whenever you need:
+
+* account management
+* application preferences
+* background task scheduling
+* device hardware information
+* media playback
+* networking
+* logging
+* notifications management
+
+we have something more suitable.
+
+Our transition to new APIs is a continuous process. Contributors might be asked by code reviewers to
+refrain from using specific Android APIs considered problematic and to use Nextcloud APIs instead.
+In extreme cases we might decide to put specific features on hold until we provide platform API
+replacement.
+
+If in doubt, ask Nextcloud developers. App undergoes a process of intense refactoring and situation
+changes frequently.
+
+### Testing
+
+TL;DR If we can't write a test for it, it's not good.
+
+Test automation is challenging in mobile applications in general. We try to improve in this area
+and thereof we'd ask contributors to be mindful of their code testability:
+
+1. new code submitted to Nextcloud project should be provided with automatic tests
+2. contributions to existing code that is currently not covered by automatic tests
+ should at least not make future efforts more challenging
+3. whenever possible, testability should be improved even if the code is not covered by tests
+
+### Performance
+
+If you're interested in improving the app's performance, please check the [official documentation](https://developer.android.com/topic/performance)
+for ways you can inspect and improve performance.
+
+For additional analysis, set the `perfAnalysis` property
+in your Gradle build:
+
+```shell
+./gradlew installGplayDebug -P perfAnalysis
+```
+
+This will install the app with [LeakCanary](https://square.github.io/leakcanary/) and
+[StrictMode](https://developer.android.com/reference/android/os/StrictMode) enabled and configured.
+These tools can help find memory leaks, foreground operations that should be in background, and other performance
+problems.
# Releases
At the moment we are releasing the app in two app stores:
@@ -179,7 +450,7 @@ Examples for different versions:
* 8.12.2 ```80120200```
* 9.8.4-rc18 ```90080418```
-beware, that beta releases for an upcoming version will always use the minor and hotfix version of the release they are targeting. So to make sure the version code of the upcoming stable release will always be higher stable releases set the 2 beta digits to '99' as seen above in the examples.
+beware, that beta releases for an upcoming version will always use the minor and hotfix version of the release they are targeting. So to make sure the version code of the upcoming stable release will always be higher stable releases set the 2 beta digits to '99' as seen above in the examples. For major versions, as we're not a library and thus 'incompatible API changes' is not something that happens, decisions are essentially marketing-based. If we deem a release to be very impactful, we might increase the major version number.
### Dev
For dev the version name is in format YYYYMMDD. It is mainly as a reference for reporting bugs and is not related to stable/release candidates as it is an independent app.
@@ -189,7 +460,9 @@ For dev the version name is in format YYYYMMDD. It is mainly as a reference for
* after feature freeze a public release candidate on play store and f-droid is released
* ~2 weeks testing, bug fixing
* release final version on f-droid and play store
-* Bugfix releases (dot releases, e.g. 3.2.1) are released on demand from the branch created with first stable release (stable-3.2.x). If changes to the library are required, we do the same: create a branch from the version used in stable release (e.g. 1.1.0) and then release a dot release (1.1.1).
+* Bugfix releases (dot releases, e.g. 3.2.1) are released 4 weeks after stable version from the branch created with first stable release (stable-3.2.x). If changes to the library are required, we do the same: create a branch from the version used in stable release (e.g. 1.1.0) and then release a dot release (1.1.1).
+
+> Hotfixes as well as security fixes are released via bugfix releases (dot releases) but are released on demand in contrast to regular, scheduled bugfix releases.
To get an idea which PRs and issues will be part of the next release simply check our [milestone plan](https://github.com/nextcloud/android/milestones)
@@ -210,7 +483,7 @@ Release Candidate releases are based on the git [master](https://github.com/next
2. Create a [release/tag](https://github.com/nextcloud/android/releases) in git. Tag name following the naming schema: ```rc-Mayor.Minor.Hotfix-betaIncrement``` (e.g. rc-1.2.0-12) naming the version number following the [semantic versioning schema](http://semver.org/)
-### Dev Release
+### Developement Release
Dev releases are based on the [master](https://github.com/nextcloud/android/tree/master) branch and are done independently from stable releases for people willing to test new features and provide valuable feedback on new features to be incorporated before a feature gets released in the stable app.
The deployment/build is done once a day automatically. If code has changed a new apk will be published [here](https://download.nextcloud.com/android/dev) and it will, with a little delay, be available on [Fdroid](https://f-droid.org/repository/browse/?fdfilter=nextcloud&fdid=com.nextcloud.android.beta).
diff --git a/Gemfile b/Gemfile
new file mode 100644
index 000000000000..b734015f8209
--- /dev/null
+++ b/Gemfile
@@ -0,0 +1,10 @@
+# Autogenerated by fastlane
+#
+# Ensure this file is checked in to source control!
+
+source "https://rubygems.org"
+
+gem 'fastlane'
+
+plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile')
+eval_gemfile(plugins_path) if File.exist?(plugins_path)
diff --git a/Gemfile.license b/Gemfile.license
new file mode 100644
index 000000000000..7a2ef8e0aa05
--- /dev/null
+++ b/Gemfile.license
@@ -0,0 +1,2 @@
+# SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
+# SPDX-License-Identifier: CC0-1.0
diff --git a/Gemfile.lock b/Gemfile.lock
new file mode 100644
index 000000000000..36d96e16fd37
--- /dev/null
+++ b/Gemfile.lock
@@ -0,0 +1,233 @@
+GEM
+ remote: https://rubygems.org/
+ specs:
+ CFPropertyList (3.0.8)
+ abbrev (0.1.2)
+ addressable (2.9.0)
+ public_suffix (>= 2.0.2, < 8.0)
+ artifactory (3.0.17)
+ atomos (0.1.3)
+ aws-eventstream (1.4.0)
+ aws-partitions (1.1237.0)
+ aws-sdk-core (3.244.0)
+ aws-eventstream (~> 1, >= 1.3.0)
+ aws-partitions (~> 1, >= 1.992.0)
+ aws-sigv4 (~> 1.9)
+ base64
+ bigdecimal
+ jmespath (~> 1, >= 1.6.1)
+ logger
+ aws-sdk-kms (1.123.0)
+ aws-sdk-core (~> 3, >= 3.244.0)
+ aws-sigv4 (~> 1.5)
+ aws-sdk-s3 (1.219.0)
+ aws-sdk-core (~> 3, >= 3.244.0)
+ aws-sdk-kms (~> 1)
+ aws-sigv4 (~> 1.5)
+ aws-sigv4 (1.12.1)
+ aws-eventstream (~> 1, >= 1.0.2)
+ babosa (1.0.4)
+ base64 (0.3.0)
+ bigdecimal (3.3.1)
+ cgi (0.4.2)
+ claide (1.1.0)
+ colored (1.2)
+ colored2 (3.1.2)
+ commander (4.6.0)
+ highline (~> 2.0.0)
+ csv (3.3.5)
+ declarative (0.0.20)
+ digest-crc (0.7.0)
+ rake (>= 12.0.0, < 14.0.0)
+ domain_name (0.6.20240107)
+ dotenv (2.8.1)
+ emoji_regex (3.2.3)
+ excon (0.112.0)
+ faraday (1.10.5)
+ faraday-em_http (~> 1.0)
+ faraday-em_synchrony (~> 1.0)
+ faraday-excon (~> 1.1)
+ faraday-httpclient (~> 1.0)
+ faraday-multipart (~> 1.0)
+ faraday-net_http (~> 1.0)
+ faraday-net_http_persistent (~> 1.0)
+ faraday-patron (~> 1.0)
+ faraday-rack (~> 1.0)
+ faraday-retry (~> 1.0)
+ ruby2_keywords (>= 0.0.4)
+ faraday-cookie_jar (0.0.8)
+ faraday (>= 0.8.0)
+ http-cookie (>= 1.0.0)
+ faraday-em_http (1.0.0)
+ faraday-em_synchrony (1.0.1)
+ faraday-excon (1.1.0)
+ faraday-httpclient (1.0.1)
+ faraday-multipart (1.2.0)
+ multipart-post (~> 2.0)
+ faraday-net_http (1.0.2)
+ faraday-net_http_persistent (1.2.0)
+ faraday-patron (1.0.0)
+ faraday-rack (1.0.0)
+ faraday-retry (1.0.4)
+ faraday_middleware (1.2.1)
+ faraday (~> 1.0)
+ fastimage (2.4.1)
+ fastlane (2.229.0)
+ CFPropertyList (>= 2.3, < 4.0.0)
+ abbrev (~> 0.1.2)
+ addressable (>= 2.8, < 3.0.0)
+ artifactory (~> 3.0)
+ aws-sdk-s3 (~> 1.0)
+ babosa (>= 1.0.3, < 2.0.0)
+ bundler (>= 1.12.0, < 3.0.0)
+ colored (~> 1.2)
+ commander (~> 4.6)
+ csv (~> 3.3)
+ dotenv (>= 2.1.1, < 3.0.0)
+ emoji_regex (>= 0.1, < 4.0)
+ excon (>= 0.71.0, < 1.0.0)
+ faraday (~> 1.0)
+ faraday-cookie_jar (~> 0.0.6)
+ faraday_middleware (~> 1.0)
+ fastimage (>= 2.1.0, < 3.0.0)
+ fastlane-sirp (>= 1.0.0)
+ gh_inspector (>= 1.1.2, < 2.0.0)
+ google-apis-androidpublisher_v3 (~> 0.3)
+ google-apis-playcustomapp_v1 (~> 0.1)
+ google-cloud-env (>= 1.6.0, < 2.0.0)
+ google-cloud-storage (~> 1.31)
+ highline (~> 2.0)
+ http-cookie (~> 1.0.5)
+ json (< 3.0.0)
+ jwt (>= 2.1.0, < 3)
+ mini_magick (>= 4.9.4, < 5.0.0)
+ multipart-post (>= 2.0.0, < 3.0.0)
+ mutex_m (~> 0.3.0)
+ naturally (~> 2.2)
+ optparse (>= 0.1.1, < 1.0.0)
+ plist (>= 3.1.0, < 4.0.0)
+ rubyzip (>= 2.0.0, < 3.0.0)
+ security (= 0.1.5)
+ simctl (~> 1.6.3)
+ terminal-notifier (>= 2.0.0, < 3.0.0)
+ terminal-table (~> 3)
+ tty-screen (>= 0.6.3, < 1.0.0)
+ tty-spinner (>= 0.8.0, < 1.0.0)
+ word_wrap (~> 1.0.0)
+ xcodeproj (>= 1.13.0, < 2.0.0)
+ xcpretty (~> 0.4.1)
+ xcpretty-travis-formatter (>= 0.0.3, < 2.0.0)
+ fastlane-plugin-huawei_appgallery_connect (1.0.31)
+ cgi
+ fastlane-sirp (1.0.0)
+ sysrandom (~> 1.0)
+ gh_inspector (1.1.3)
+ google-apis-androidpublisher_v3 (0.54.0)
+ google-apis-core (>= 0.11.0, < 2.a)
+ google-apis-core (0.11.3)
+ addressable (~> 2.5, >= 2.5.1)
+ googleauth (>= 0.16.2, < 2.a)
+ httpclient (>= 2.8.1, < 3.a)
+ mini_mime (~> 1.0)
+ representable (~> 3.0)
+ retriable (>= 2.0, < 4.a)
+ rexml
+ google-apis-iamcredentials_v1 (0.17.0)
+ google-apis-core (>= 0.11.0, < 2.a)
+ google-apis-playcustomapp_v1 (0.13.0)
+ google-apis-core (>= 0.11.0, < 2.a)
+ google-apis-storage_v1 (0.31.0)
+ google-apis-core (>= 0.11.0, < 2.a)
+ google-cloud-core (1.8.0)
+ google-cloud-env (>= 1.0, < 3.a)
+ google-cloud-errors (~> 1.0)
+ google-cloud-env (1.6.0)
+ faraday (>= 0.17.3, < 3.0)
+ google-cloud-errors (1.6.0)
+ google-cloud-storage (1.47.0)
+ addressable (~> 2.8)
+ digest-crc (~> 0.4)
+ google-apis-iamcredentials_v1 (~> 0.1)
+ google-apis-storage_v1 (~> 0.31.0)
+ google-cloud-core (~> 1.6)
+ googleauth (>= 0.16.2, < 2.a)
+ mini_mime (~> 1.0)
+ googleauth (1.8.1)
+ faraday (>= 0.17.3, < 3.a)
+ jwt (>= 1.4, < 3.0)
+ multi_json (~> 1.11)
+ os (>= 0.9, < 2.0)
+ signet (>= 0.16, < 2.a)
+ highline (2.0.3)
+ http-cookie (1.0.8)
+ domain_name (~> 0.5)
+ httpclient (2.9.0)
+ mutex_m
+ jmespath (1.6.2)
+ json (2.19.3)
+ jwt (2.10.2)
+ base64
+ logger (1.7.0)
+ mini_magick (4.13.2)
+ mini_mime (1.1.5)
+ multi_json (1.20.1)
+ multipart-post (2.4.1)
+ mutex_m (0.3.0)
+ nanaimo (0.4.0)
+ naturally (2.3.0)
+ optparse (0.8.1)
+ os (1.1.4)
+ plist (3.7.2)
+ public_suffix (6.0.2)
+ rake (13.3.1)
+ representable (3.2.0)
+ declarative (< 0.1.0)
+ trailblazer-option (>= 0.1.1, < 0.2.0)
+ uber (< 0.2.0)
+ retriable (3.4.1)
+ rexml (3.4.4)
+ rouge (3.28.0)
+ ruby2_keywords (0.0.5)
+ rubyzip (2.4.1)
+ security (0.1.5)
+ signet (0.21.0)
+ addressable (~> 2.8)
+ faraday (>= 0.17.5, < 3.a)
+ jwt (>= 1.5, < 4.0)
+ multi_json (~> 1.10)
+ simctl (1.6.10)
+ CFPropertyList
+ naturally
+ sysrandom (1.0.5)
+ terminal-notifier (2.0.0)
+ terminal-table (3.0.2)
+ unicode-display_width (>= 1.1.1, < 3)
+ trailblazer-option (0.1.2)
+ tty-cursor (0.7.1)
+ tty-screen (0.8.2)
+ tty-spinner (0.9.3)
+ tty-cursor (~> 0.7)
+ uber (0.1.0)
+ unicode-display_width (2.6.0)
+ word_wrap (1.0.0)
+ xcodeproj (1.27.0)
+ CFPropertyList (>= 2.3.3, < 4.0)
+ atomos (~> 0.1.3)
+ claide (>= 1.0.2, < 2.0)
+ colored2 (~> 3.1)
+ nanaimo (~> 0.4.0)
+ rexml (>= 3.3.6, < 4.0)
+ xcpretty (0.4.1)
+ rouge (~> 3.28.0)
+ xcpretty-travis-formatter (1.0.1)
+ xcpretty (~> 0.2, >= 0.0.7)
+
+PLATFORMS
+ x86_64-linux
+
+DEPENDENCIES
+ fastlane
+ fastlane-plugin-huawei_appgallery_connect
+
+BUNDLED WITH
+ 2.5.4
diff --git a/Gemfile.lock.license b/Gemfile.lock.license
new file mode 100644
index 000000000000..7a2ef8e0aa05
--- /dev/null
+++ b/Gemfile.lock.license
@@ -0,0 +1,2 @@
+# SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
+# SPDX-License-Identifier: CC0-1.0
diff --git a/ICONS.txt b/ICONS.txt
deleted file mode 100644
index 3dffdb83c1d1..000000000000
--- a/ICONS.txt
+++ /dev/null
@@ -1,99 +0,0 @@
-Standard Google Material Design icons
-Copyright (c) 2014, Google (http://www.google.com/design/)
-uses the license at https://github.com/google/material-design-icons/blob/master/LICENSE
-
-Twitter icon graphic
-Copyright (c) 2014, Austin Andrews (http://materialdesignicons.com/),
-with Reserved Font Name Material Design Icons.
-
-This Font Software is licensed under the SIL Open Font License, Version 1.1.
-This license is copied below, and is also available with a FAQ at:
-http://scripts.sil.org/OFL
-
-
------------------------------------------------------------
-SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
------------------------------------------------------------
-
-PREAMBLE
-The goals of the Open Font License (OFL) are to stimulate worldwide
-development of collaborative font projects, to support the font creation
-efforts of academic and linguistic communities, and to provide a free and
-open framework in which fonts may be shared and improved in partnership
-with others.
-
-The OFL allows the licensed fonts to be used, studied, modified and
-redistributed freely as long as they are not sold by themselves. The
-fonts, including any derivative works, can be bundled, embedded,
-redistributed and/or sold with any software provided that any reserved
-names are not used by derivative works. The fonts and derivatives,
-however, cannot be released under any other type of license. The
-requirement for fonts to remain under this license does not apply
-to any document created using the fonts or their derivatives.
-
-DEFINITIONS
-"Font Software" refers to the set of files released by the Copyright
-Holder(s) under this license and clearly marked as such. This may
-include source files, build scripts and documentation.
-
-"Reserved Font Name" refers to any names specified as such after the
-copyright statement(s).
-
-"Original Version" refers to the collection of Font Software components as
-distributed by the Copyright Holder(s).
-
-"Modified Version" refers to any derivative made by adding to, deleting,
-or substituting -- in part or in whole -- any of the components of the
-Original Version, by changing formats or by porting the Font Software to a
-new environment.
-
-"Author" refers to any designer, engineer, programmer, technical
-writer or other person who contributed to the Font Software.
-
-PERMISSION & CONDITIONS
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of the Font Software, to use, study, copy, merge, embed, modify,
-redistribute, and sell modified and unmodified copies of the Font
-Software, subject to the following conditions:
-
-1) Neither the Font Software nor any of its individual components,
-in Original or Modified Versions, may be sold by itself.
-
-2) Original or Modified Versions of the Font Software may be bundled,
-redistributed and/or sold with any software, provided that each copy
-contains the above copyright notice and this license. These can be
-included either as stand-alone text files, human-readable headers or
-in the appropriate machine-readable metadata fields within text or
-binary files as long as those fields can be easily viewed by the user.
-
-3) No Modified Version of the Font Software may use the Reserved Font
-Name(s) unless explicit written permission is granted by the corresponding
-Copyright Holder. This restriction only applies to the primary font name as
-presented to the users.
-
-4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
-Software shall not be used to promote, endorse or advertise any
-Modified Version, except to acknowledge the contribution(s) of the
-Copyright Holder(s) and the Author(s) or with their explicit written
-permission.
-
-5) The Font Software, modified or unmodified, in part or in whole,
-must be distributed entirely under this license, and must not be
-distributed under any other license. The requirement for fonts to
-remain under this license does not apply to any document created
-using the Font Software.
-
-TERMINATION
-This license becomes null and void if any of the above conditions are
-not met.
-
-DISCLAIMER
-THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
-OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
-COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
-DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
-OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/LICENSES/AGPL-3.0-or-later.txt b/LICENSES/AGPL-3.0-or-later.txt
new file mode 100644
index 000000000000..0c97efd25b59
--- /dev/null
+++ b/LICENSES/AGPL-3.0-or-later.txt
@@ -0,0 +1,235 @@
+GNU AFFERO GENERAL PUBLIC LICENSE
+Version 3, 19 November 2007
+
+Copyright (C) 2007 Free Software Foundation, Inc.
+
+Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
+
+ Preamble
+
+The GNU Affero General Public License is a free, copyleft license for software and other kinds of works, specifically designed to ensure cooperation with the community in the case of network server software.
+
+The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, our General Public Licenses are intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users.
+
+When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.
+
+Developers that use our General Public Licenses protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License which gives you legal permission to copy, distribute and/or modify the software.
+
+A secondary benefit of defending all users' freedom is that improvements made in alternate versions of the program, if they receive widespread use, become available for other developers to incorporate. Many developers of free software are heartened and encouraged by the resulting cooperation. However, in the case of software used on network servers, this result may fail to come about. The GNU General Public License permits making a modified version and letting the public access it on a server without ever releasing its source code to the public.
+
+The GNU Affero General Public License is designed specifically to ensure that, in such cases, the modified source code becomes available to the community. It requires the operator of a network server to provide the source code of the modified version running there to the users of that server. Therefore, public use of a modified version, on a publicly accessible server, gives the public access to the source code of the modified version.
+
+An older license, called the Affero General Public License and published by Affero, was designed to accomplish similar goals. This is a different license, not a version of the Affero GPL, but Affero has released a new version of the Affero GPL which permits relicensing under this license.
+
+The precise terms and conditions for copying, distribution and modification follow.
+
+ TERMS AND CONDITIONS
+
+0. Definitions.
+
+"This License" refers to version 3 of the GNU Affero General Public License.
+
+"Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.
+
+"The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations.
+
+To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work.
+
+A "covered work" means either the unmodified Program or a work based on the Program.
+
+To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.
+
+To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.
+
+An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.
+
+1. Source Code.
+The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work.
+
+A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.
+
+The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.
+
+The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.
+
+The Corresponding Source for a work in source code form is that same work.
+
+2. Basic Permissions.
+All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.
+
+You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.
+
+Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.
+
+3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.
+
+When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures.
+
+4. Conveying Verbatim Copies.
+You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.
+
+You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.
+
+5. Conveying Modified Source Versions.
+You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.
+
+A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.
+
+6. Conveying Non-Source Forms.
+You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.
+
+ d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.
+
+A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.
+
+A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.
+
+"Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.
+
+If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).
+
+The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.
+
+Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.
+
+7. Additional Terms.
+"Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.
+
+When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.
+
+Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.
+
+All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.
+
+If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.
+
+Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.
+
+8. Termination.
+
+You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).
+
+However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.
+
+Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.
+
+9. Acceptance Not Required for Having Copies.
+
+You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.
+
+10. Automatic Licensing of Downstream Recipients.
+
+Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.
+
+An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.
+
+You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.
+
+11. Patents.
+
+A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version".
+
+A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.
+
+Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.
+
+In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.
+
+If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.
+
+If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.
+
+A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.
+
+Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.
+
+12. No Surrender of Others' Freedom.
+
+If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.
+
+13. Remote Network Interaction; Use with the GNU General Public License.
+
+Notwithstanding any other provision of this License, if you modify the Program, your modified version must prominently offer all users interacting with it remotely through a computer network (if your version supports such interaction) an opportunity to receive the Corresponding Source of your version by providing access to the Corresponding Source from a network server at no charge, through some standard or customary means of facilitating copying of software. This Corresponding Source shall include the Corresponding Source for any work covered by version 3 of the GNU General Public License that is incorporated pursuant to the following paragraph.
+
+Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the work with which it is combined will remain governed by version 3 of the GNU General Public License.
+
+14. Revised Versions of this License.
+
+The Free Software Foundation may publish revised and/or new versions of the GNU Affero General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU Affero General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU Affero General Public License, you may choose any version ever published by the Free Software Foundation.
+
+If the Program specifies that a proxy can decide which future versions of the GNU Affero General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program.
+
+Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.
+
+15. Disclaimer of Warranty.
+
+THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+16. Limitation of Liability.
+
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+17. Interpretation of Sections 15 and 16.
+
+If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.
+
+END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
+
+To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.
+
+
+ Copyright (C)
+
+ This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License along with this program. If not, see .
+
+Also add information on how to contact you by electronic and paper mail.
+
+If your software can interact with users remotely through a computer network, you should also make sure that it provides a way for users to get its source. For example, if your program is a web application, its interface could display a "Source" link that leads users to an archive of the code. There are many ways you could offer source, and different solutions will be better for different programs; see section 13 for the specific requirements.
+
+You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU AGPL, see .
diff --git a/LICENSES/Apache-2.0.txt b/LICENSES/Apache-2.0.txt
new file mode 100644
index 000000000000..137069b82387
--- /dev/null
+++ b/LICENSES/Apache-2.0.txt
@@ -0,0 +1,73 @@
+Apache License
+Version 2.0, January 2004
+http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
diff --git a/LICENSES/BSD-2-Clause.txt b/LICENSES/BSD-2-Clause.txt
new file mode 100644
index 000000000000..5f662b354cd4
--- /dev/null
+++ b/LICENSES/BSD-2-Clause.txt
@@ -0,0 +1,9 @@
+Copyright (c)
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+2. 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.
+
+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 HOLDER 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.
diff --git a/LICENSES/CC0-1.0.txt b/LICENSES/CC0-1.0.txt
new file mode 100644
index 000000000000..0e259d42c996
--- /dev/null
+++ b/LICENSES/CC0-1.0.txt
@@ -0,0 +1,121 @@
+Creative Commons Legal Code
+
+CC0 1.0 Universal
+
+ CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
+ LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
+ ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
+ INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
+ REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
+ PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
+ THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
+ HEREUNDER.
+
+Statement of Purpose
+
+The laws of most jurisdictions throughout the world automatically confer
+exclusive Copyright and Related Rights (defined below) upon the creator
+and subsequent owner(s) (each and all, an "owner") of an original work of
+authorship and/or a database (each, a "Work").
+
+Certain owners wish to permanently relinquish those rights to a Work for
+the purpose of contributing to a commons of creative, cultural and
+scientific works ("Commons") that the public can reliably and without fear
+of later claims of infringement build upon, modify, incorporate in other
+works, reuse and redistribute as freely as possible in any form whatsoever
+and for any purposes, including without limitation commercial purposes.
+These owners may contribute to the Commons to promote the ideal of a free
+culture and the further production of creative, cultural and scientific
+works, or to gain reputation or greater distribution for their Work in
+part through the use and efforts of others.
+
+For these and/or other purposes and motivations, and without any
+expectation of additional consideration or compensation, the person
+associating CC0 with a Work (the "Affirmer"), to the extent that he or she
+is an owner of Copyright and Related Rights in the Work, voluntarily
+elects to apply CC0 to the Work and publicly distribute the Work under its
+terms, with knowledge of his or her Copyright and Related Rights in the
+Work and the meaning and intended legal effect of CC0 on those rights.
+
+1. Copyright and Related Rights. A Work made available under CC0 may be
+protected by copyright and related or neighboring rights ("Copyright and
+Related Rights"). Copyright and Related Rights include, but are not
+limited to, the following:
+
+ i. the right to reproduce, adapt, distribute, perform, display,
+ communicate, and translate a Work;
+ ii. moral rights retained by the original author(s) and/or performer(s);
+iii. publicity and privacy rights pertaining to a person's image or
+ likeness depicted in a Work;
+ iv. rights protecting against unfair competition in regards to a Work,
+ subject to the limitations in paragraph 4(a), below;
+ v. rights protecting the extraction, dissemination, use and reuse of data
+ in a Work;
+ vi. database rights (such as those arising under Directive 96/9/EC of the
+ European Parliament and of the Council of 11 March 1996 on the legal
+ protection of databases, and under any national implementation
+ thereof, including any amended or successor version of such
+ directive); and
+vii. other similar, equivalent or corresponding rights throughout the
+ world based on applicable law or treaty, and any national
+ implementations thereof.
+
+2. Waiver. To the greatest extent permitted by, but not in contravention
+of, applicable law, Affirmer hereby overtly, fully, permanently,
+irrevocably and unconditionally waives, abandons, and surrenders all of
+Affirmer's Copyright and Related Rights and associated claims and causes
+of action, whether now known or unknown (including existing as well as
+future claims and causes of action), in the Work (i) in all territories
+worldwide, (ii) for the maximum duration provided by applicable law or
+treaty (including future time extensions), (iii) in any current or future
+medium and for any number of copies, and (iv) for any purpose whatsoever,
+including without limitation commercial, advertising or promotional
+purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
+member of the public at large and to the detriment of Affirmer's heirs and
+successors, fully intending that such Waiver shall not be subject to
+revocation, rescission, cancellation, termination, or any other legal or
+equitable action to disrupt the quiet enjoyment of the Work by the public
+as contemplated by Affirmer's express Statement of Purpose.
+
+3. Public License Fallback. Should any part of the Waiver for any reason
+be judged legally invalid or ineffective under applicable law, then the
+Waiver shall be preserved to the maximum extent permitted taking into
+account Affirmer's express Statement of Purpose. In addition, to the
+extent the Waiver is so judged Affirmer hereby grants to each affected
+person a royalty-free, non transferable, non sublicensable, non exclusive,
+irrevocable and unconditional license to exercise Affirmer's Copyright and
+Related Rights in the Work (i) in all territories worldwide, (ii) for the
+maximum duration provided by applicable law or treaty (including future
+time extensions), (iii) in any current or future medium and for any number
+of copies, and (iv) for any purpose whatsoever, including without
+limitation commercial, advertising or promotional purposes (the
+"License"). The License shall be deemed effective as of the date CC0 was
+applied by Affirmer to the Work. Should any part of the License for any
+reason be judged legally invalid or ineffective under applicable law, such
+partial invalidity or ineffectiveness shall not invalidate the remainder
+of the License, and in such case Affirmer hereby affirms that he or she
+will not (i) exercise any of his or her remaining Copyright and Related
+Rights in the Work or (ii) assert any associated claims and causes of
+action with respect to the Work, in either case contrary to Affirmer's
+express Statement of Purpose.
+
+4. Limitations and Disclaimers.
+
+ a. No trademark or patent rights held by Affirmer are waived, abandoned,
+ surrendered, licensed or otherwise affected by this document.
+ b. Affirmer offers the Work as-is and makes no representations or
+ warranties of any kind concerning the Work, express, implied,
+ statutory or otherwise, including without limitation warranties of
+ title, merchantability, fitness for a particular purpose, non
+ infringement, or the absence of latent or other defects, accuracy, or
+ the present or absence of errors, whether or not discoverable, all to
+ the greatest extent permissible under applicable law.
+ c. Affirmer disclaims responsibility for clearing rights of other persons
+ that may apply to the Work or any use thereof, including without
+ limitation any person's Copyright and Related Rights in the Work.
+ Further, Affirmer disclaims responsibility for obtaining any necessary
+ consents, permissions or other rights required for any use of the
+ Work.
+ d. Affirmer understands and acknowledges that Creative Commons is not a
+ party to this document and has no duty or obligation with respect to
+ this CC0 or use of the Work.
diff --git a/LICENSES/GPL-2.0-only.txt b/LICENSES/GPL-2.0-only.txt
new file mode 100644
index 000000000000..17cb286430a4
--- /dev/null
+++ b/LICENSES/GPL-2.0-only.txt
@@ -0,0 +1,117 @@
+GNU GENERAL PUBLIC LICENSE
+Version 2, June 1991
+
+Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+
+Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
+
+Preamble
+
+The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too.
+
+When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.
+
+To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.
+
+For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
+
+We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.
+
+Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations.
+
+Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.
+
+The precise terms and conditions for copying, distribution and modification follow.
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does.
+
+1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.
+
+2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.
+
+3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.
+
+If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.
+
+4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
+
+5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it.
+
+6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.
+
+7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.
+
+This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.
+
+8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.
+
+9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.
+
+10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.
+
+NO WARRANTY
+
+11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+END OF TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Programs
+
+If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
+
+To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.
+
+ one line to give the program's name and an idea of what it does. Copyright (C) yyyy name of author
+
+ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+signature of Ty Coon, 1 April 1989 Ty Coon, President of Vice
diff --git a/LICENSES/GPL-3.0-or-later.txt b/LICENSES/GPL-3.0-or-later.txt
new file mode 100644
index 000000000000..f6cdd22a6c1f
--- /dev/null
+++ b/LICENSES/GPL-3.0-or-later.txt
@@ -0,0 +1,232 @@
+GNU GENERAL PUBLIC LICENSE
+Version 3, 29 June 2007
+
+Copyright © 2007 Free Software Foundation, Inc.
+
+Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
+
+Preamble
+
+The GNU General Public License is a free, copyleft license for software and other kinds of works.
+
+The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too.
+
+When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.
+
+To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.
+
+For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
+
+Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.
+
+For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.
+
+Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.
+
+Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free.
+
+The precise terms and conditions for copying, distribution and modification follow.
+
+TERMS AND CONDITIONS
+
+0. Definitions.
+
+“This License†refers to version 3 of the GNU General Public License.
+
+“Copyright†also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.
+
+“The Program†refers to any copyrightable work licensed under this License. Each licensee is addressed as “youâ€. “Licensees†and “recipients†may be individuals or organizations.
+
+To “modify†a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version†of the earlier work or a work “based on†the earlier work.
+
+A “covered work†means either the unmodified Program or a work based on the Program.
+
+To “propagate†a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.
+
+To “convey†a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.
+
+An interactive user interface displays “Appropriate Legal Notices†to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.
+
+1. Source Code.
+The “source code†for a work means the preferred form of the work for making modifications to it. “Object code†means any non-source form of a work.
+
+A “Standard Interface†means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.
+
+The “System Libraries†of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Componentâ€, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.
+
+The “Corresponding Source†for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.
+
+The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.
+
+The Corresponding Source for a work in source code form is that same work.
+
+2. Basic Permissions.
+All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.
+
+You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.
+
+Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.
+
+3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.
+
+When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures.
+
+4. Conveying Verbatim Copies.
+You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.
+
+You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.
+
+5. Conveying Modified Source Versions.
+You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all noticesâ€.
+
+ c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.
+
+A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate†if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.
+
+6. Conveying Non-Source Forms.
+You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.
+
+ d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.
+
+A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.
+
+A “User Product†is either (1) a “consumer productâ€, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used†refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.
+
+“Installation Information†for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.
+
+If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).
+
+The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.
+
+Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.
+
+7. Additional Terms.
+“Additional permissions†are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.
+
+When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.
+
+Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.
+
+All other non-permissive additional terms are considered “further restrictions†within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.
+
+If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.
+
+Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.
+
+8. Termination.
+You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).
+
+However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.
+
+Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.
+
+9. Acceptance Not Required for Having Copies.
+You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.
+
+10. Automatic Licensing of Downstream Recipients.
+Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.
+
+An “entity transaction†is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.
+
+You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.
+
+11. Patents.
+A “contributor†is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor versionâ€.
+
+A contributor's “essential patent claims†are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control†includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.
+
+Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.
+
+In the following three paragraphs, a “patent license†is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant†such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.
+
+If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying†means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.
+
+If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.
+
+A patent license is “discriminatory†if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.
+
+Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.
+
+12. No Surrender of Others' Freedom.
+If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.
+
+13. Use with the GNU Affero General Public License.
+Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.
+
+14. Revised Versions of this License.
+The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version†applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.
+
+If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program.
+
+Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.
+
+15. Disclaimer of Warranty.
+THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS†WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+16. Limitation of Liability.
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+17. Interpretation of Sections 15 and 16.
+If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.
+
+END OF TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Programs
+
+If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
+
+To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright†line and a pointer to where the full notice is found.
+
+
+ Copyright (C)
+
+ This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along with this program. If not, see .
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:
+
+ Copyright (C)
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an “about boxâ€.
+
+You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer†for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see .
+
+The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read .
diff --git a/LICENSES/LGPL-2.1-or-later.txt b/LICENSES/LGPL-2.1-or-later.txt
new file mode 100644
index 000000000000..c9aa53018e76
--- /dev/null
+++ b/LICENSES/LGPL-2.1-or-later.txt
@@ -0,0 +1,175 @@
+GNU LESSER GENERAL PUBLIC LICENSE
+
+Version 2.1, February 1999
+
+Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.]
+
+Preamble
+
+The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users.
+
+This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below.
+
+When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things.
+
+To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it.
+
+For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights.
+
+We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library.
+
+To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others.
+
+Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license.
+
+Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs.
+
+When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library.
+
+We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances.
+
+For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License.
+
+In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system.
+
+Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library.
+
+The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run.
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you".
+
+A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables.
+
+The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".)
+
+"Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library.
+
+Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does.
+
+1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library.
+
+You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.
+
+2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful.
+
+(For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.
+
+3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices.
+
+Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy.
+
+This option is useful when you wish to copy part of the code of the Library into a program that is not a library.
+
+4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange.
+
+If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code.
+
+5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License.
+
+However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables.
+
+When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law.
+
+If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.)
+
+Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself.
+
+6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications.
+
+You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things:
+
+ a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy.
+
+For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.
+
+It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute.
+
+7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above.
+
+ b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work.
+
+8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
+
+9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it.
+
+10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License.
+
+11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.
+
+This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.
+
+12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.
+
+13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation.
+
+14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.
+
+NO WARRANTY
+
+15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+END OF TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Libraries
+
+If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License).
+
+To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.
+
+ one line to give the library's name and an idea of what it does.
+ Copyright (C) year name of author
+
+ This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names:
+
+Yoyodyne, Inc., hereby disclaims all copyright interest in
+the library `Frob' (a library for tweaking knobs) written
+by James Random Hacker.
+
+signature of Ty Coon, 1 April 1990
+Ty Coon, President of Vice
+That's all there is to it!
diff --git a/LICENSES/LicenseRef-NextcloudTrademarks.txt b/LICENSES/LicenseRef-NextcloudTrademarks.txt
new file mode 100644
index 000000000000..464a30b58bdc
--- /dev/null
+++ b/LICENSES/LicenseRef-NextcloudTrademarks.txt
@@ -0,0 +1,9 @@
+The Nextcloud marks
+Nextcloud and the Nextcloud logo is a registered trademark of Nextcloud GmbH in Germany and/or other countries.
+These guidelines cover the following marks pertaining both to the product names and the logo: “Nextcloudâ€
+and the blue/white cloud logo with or without the word Nextcloud; the service “Nextcloud Enterpriseâ€;
+and our products: “Nextcloud Filesâ€; “Nextcloud Groupware†and “Nextcloud Talkâ€.
+This set of marks is collectively referred to as the “Nextcloud marks.â€
+
+Use of Nextcloud logos and other marks is only permitted under the guidelines provided by the Nextcloud GmbH.
+A copy can be found at https://nextcloud.com/trademarks/
diff --git a/LICENSES/LicenseRef-XTrademarks.txt b/LICENSES/LicenseRef-XTrademarks.txt
new file mode 100644
index 000000000000..46b698359da0
--- /dev/null
+++ b/LICENSES/LicenseRef-XTrademarks.txt
@@ -0,0 +1,49 @@
+Trademark policy
+April 2023
+
+
+You may not violate others’ intellectual property rights, including copyright and trademark.
+
+A trademark is a word, logo, phrase, or device that distinguishes a trademark holder’s good or service in the marketplace. Trademark law may prevent others from using a trademark in an unauthorized or confusing manner.
+
+
+What is in violation of this policy?
+
+Using another’s trademark in a way that may mislead or confuse people about your affiliation may be a violation of our trademark policy.
+
+
+What is not a violation of this policy?
+
+Referencing another’s trademark is not automatically a violation of X's trademark policy. Examples of non-violations include:
+
+* using a trademark in a way that is outside the scope of the trademark registration e.g., in a different territory, or a different class of goods or services than that identified in the registration; and
+* using a trademark in a nominative or other fair use manner. For more information, see our Misleading and deceptive identities policy (https://help.twitter.com/en/rules-and-policies/twitter-impersonation-and-deceptive-identities-policy.html).
+
+
+Who can report violations of this policy?
+
+X only investigates requests that are submitted by the trademark holder or their authorized representative e.g., a legal representative or other representative for a brand.
+
+
+How can I report violations of this policy?
+
+You can submit a trademark report through our trademark report form (https://help.twitter.com/forms/trademark). Please provide all the information requested in the form. If you submit an incomplete report, we’ll need to follow up about the missing information. Please note that this will result in a delay in processing your report.
+
+Note: We may provide the account holder with your name and other information included in the copy of the report.
+
+
+What happens if you violate this policy?
+
+If we determine that you violated our trademark policy, we may suspend your account. Depending on the type of violation, we may give you an opportunity to comply with our policies. In other instances, an account may be permanently suspended upon first review. If you believe that your account was suspended in error, you can submit an appeal (https://help.twitter.com/forms/general?subtopic=suspended).
+
+
+Additional resources
+
+Learn more about our range of enforcement options (https://help.twitter.com/rules-and-policies/enforcement-options) and our approach to policy development and enforcement (https://help.twitter.com/rules-and-policies/enforcement-philosophy).
+
+
+Legal disclaimer
+
+By using the X trademarks and resources on this site, you agree to follow the X Trademark Guidelines in our Brand Guidelines — as well as our Terms of Service and all other X rules and policies. If you have any questions, contact us at trademarks@x.com.
+
+A copy can be found at https://about.x.com/en/who-we-are/brand-toolkit and https://help.twitter.com/en/rules-and-policies/x-trademark-policy
diff --git a/LICENSES/MIT.txt b/LICENSES/MIT.txt
new file mode 100644
index 000000000000..2071b23b0e08
--- /dev/null
+++ b/LICENSES/MIT.txt
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/README.md b/README.md
index 56db64c4f366..1a23a124eb06 100644
--- a/README.md
+++ b/README.md
@@ -1,74 +1,123 @@
-# [Nextcloud](https://nextcloud.com) Android app
+
+# [Nextcloud](https://nextcloud.com) Android app :iphone:
-[](https://drone.nextcloud.com/nextcloud/android) [](https://www.codacy.com/app/Nextcloud/android?utm_source=github.com&utm_medium=referral&utm_content=nextcloud/android&utm_campaign=Badge_Grade) [](https://github.com/nextcloud/android/releases/latest) [](https://webchat.freenode.net/?channels=nextcloud-mobile)
+[](https://api.reuse.software/info/github.com/nextcloud/android) [](https://drone.nextcloud.com/nextcloud/android) [](https://app.codacy.com/gh/nextcloud/android/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade) [](https://github.com/nextcloud/android/releases/latest)
[
](https://play.google.com/store/apps/details?id=com.nextcloud.client)
+alt="Download from Google Play"
+height="80">](https://play.google.com/store/apps/details?id=com.nextcloud.client)
[
](https://f-droid.org/packages/com.nextcloud.client/)
+alt="Get it on F-Droid"
+height="80">](https://f-droid.org/packages/com.nextcloud.client/)
+[
](https://apps.obtainium.imranr.dev/redirect?r=obtainium://app/%7B%22id%22%3A%22com.nextcloud.client%22%2C%22url%22%3A%22https%3A%2F%2Fgithub.com%2Fnextcloud%2Fandroid%22%2C%22author%22%3A%22nextcloud%22%2C%22name%22%3A%22Nextcloud%22%2C%22preferredApkIndex%22%3A0%2C%22additionalSettings%22%3A%22%7B%5C%22includePrereleases%5C%22%3Afalse%2C%5C%22fallbackToOlderReleases%5C%22%3Atrue%2C%5C%22filterReleaseTitlesByRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22filterReleaseNotesByRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22verifyLatestTag%5C%22%3Afalse%2C%5C%22sortMethodChoice%5C%22%3A%5C%22date%5C%22%2C%5C%22useLatestAssetDateAsReleaseDate%5C%22%3Afalse%2C%5C%22releaseTitleAsVersion%5C%22%3Afalse%2C%5C%22trackOnly%5C%22%3Afalse%2C%5C%22versionExtractionRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22matchGroupToUse%5C%22%3A%5C%22%5C%22%2C%5C%22versionDetection%5C%22%3Atrue%2C%5C%22releaseDateAsVersion%5C%22%3Afalse%2C%5C%22useVersionCodeAsOSVersion%5C%22%3Afalse%2C%5C%22apkFilterRegEx%5C%22%3A%5C%22%5Enextcloud.*%5C%22%2C%5C%22invertAPKFilter%5C%22%3Afalse%2C%5C%22autoApkFilterByArch%5C%22%3Atrue%2C%5C%22appName%5C%22%3A%5C%22%5C%22%2C%5C%22appAuthor%5C%22%3A%5C%22%5C%22%2C%5C%22shizukuPretendToBeGooglePlay%5C%22%3Afalse%2C%5C%22allowInsecure%5C%22%3Afalse%2C%5C%22exemptFromBackgroundUpdates%5C%22%3Afalse%2C%5C%22skipUpdateNotifications%5C%22%3Afalse%2C%5C%22about%5C%22%3A%5C%22Nextcloud%20ist%20eine%20Cloudanwendung%2C%20die%20selbst%20gehostet%20werden%20kann.%5C%22%2C%5C%22refreshBeforeDownload%5C%22%3Atrue%7D%22%2C%22overrideSource%22%3Anull%7D)
+
+Signing certificate fingerprint to [verify](https://developer.android.com/studio/command-line/apksigner#usage-verify) the APK using the official Android documentation.
+- APK with "gplay" name, found [here](https://github.com/nextcloud/android/releases) or distributed via Google Play Store
+- APK with "nextcloud", found [here](https://github.com/nextcloud/android/releases)
+- not suitable for Fdroid downloads, as Fdroid is signing it on their own
+```
+SHA-256: fb009522f65e25802261b67b10a45fd70e610031976f40b28a649e152ded0373
+SHA-1: 74aa1702e714941be481e1f7ce4a8f779c19dcea
+```
**The Android client for [Nextcloud](https://nextcloud.com). Easily work with your data on your Nextcloud.**

-## How to contribute
-If you want to [contribute](https://nextcloud.com/contribute/) to Nextcloud, you are very welcome:
+## Getting help :rescue\_worker\_helmet:
+
+Note: The section *Known Problems / FAQs* below may already document your situation.
+
+If you need assistance or want to ask a question about the Android app, you are welcome to [ask for support](https://help.nextcloud.com/c/clients/android) in the [Nextcloud Help Forum](https://help.nextcloud.com). If you have found a probable bug or have an enhancement idea, feel free to [open a new Issue on GitHub](https://github.com/nextcloud/android/issues).
+
+If you're not sure if something is a bug or a configuration matter (with your client, server, proxy, etc.), the [Nextcloud Help Forum](https://help.nextcloud.com) is probably the best place to start so that you can get feedback (you can always return here, after getting feedback there, to report a suspected bug).
-- on our IRC channels [](https://webchat.freenode.net/?channels=nextcloud) and [](https://webchat.freenode.net/?channels=nextcloud-mobile) on freenode
-- our forum at https://help.nextcloud.com
-- for translations of the app on [Transifex](https://www.transifex.com/nextcloud/nextcloud/android/)
-- opening issues and PRs (including a corresponding issue)
+Keep in mind, that this repository only manages the Android app. If you find bugs or have problems with the server/backend, you should use the Nextcloud Help Forum to ask for help or report the bug to the [Nextcloud server team](https://github.com/nextcloud/server)!
-## Contribution Guidelines & License
+## How to contribute :rocket:
+
+If you want to [contribute](https://nextcloud.com/contribute/) to the Nextcloud Android client app, there are many ways to help whether or not you are a coder:
+
+* helping out other users on our forum at https://help.nextcloud.com
+* providing translations of the app on [Transifex](https://app.transifex.com/nextcloud/nextcloud/android/)
+* reporting problems / suggesting enhancements by [opening new issues](https://github.com/nextcloud/android/issues/new/choose)
+* implementing proposed bug fixes and enhancement ideas by submitting PRs (associated with a corresponding issue preferably)
+* reviewing [pull requests](https://github.com/nextcloud/android/pulls) and providing feedback on code, implementation, and functionality
+* Add [automated tests](CONTRIBUTING.md#testing) for existing functionality
+* installing and testing [pull request builds](https://github.com/nextcloud/android/pulls), [daily/dev builds](https://github.com/nextcloud/android#development-version-hammer), or [RCs/release candidate builds](https://github.com/nextcloud/android/releases)
+* enhancing Admin, User, or Developer [documentation](https://github.com/nextcloud/documentation/)
+* hitting hard on the latest stable release by testing fundamental features and evaluating the user experience
+* proactively getting familiar with [how to gather debug logs](https://github.com/nextcloud/android#getting-debug-info-via-logcat-mag) from your devices (so that you are prepared to provide a detailed report if you encounter a problem with the app in the future)
+
+## Contribution Guidelines & License :scroll:
[GPLv2](https://github.com/nextcloud/android/blob/master/LICENSE.txt). All contributions to this repository from June, 16 2016 on are considered to be licensed under the AGPLv3 or any later version.
Nextcloud doesn't require a CLA (Contributor License Agreement). The copyright belongs to all the individual contributors. Therefore we recommend that every contributor adds following line to the header of a file, if they changed it substantially:
-```
-@copyright Copyright (c) , ()
-```
+ SPDX-FileCopyrightText:
Please read the [Code of Conduct](https://nextcloud.com/community/code-of-conduct/). This document offers some guidance to ensure Nextcloud participants can cooperate effectively in a positive and inspiring atmosphere, and to explain how together we can strengthen and support each other.
Please review the [guidelines for contributing](https://github.com/nextcloud/android/blob/master/CONTRIBUTING.md) to this repository.
-More information how to contribute: [https://nextcloud.com/contribute/](https://nextcloud.com/contribute/)
+More information on how to contribute:
+
+## Start contributing :hammer\_and\_wrench:
-## Start contributing
Make sure you read [SETUP.md](https://github.com/nextcloud/android/blob/master/SETUP.md) and [CONTRIBUTING.md](https://github.com/nextcloud/android/blob/master/CONTRIBUTING.md) before you start working on this project. But basically: fork this repository and contribute back using pull requests to the master branch.
-Easy starting points are also reviewing [pull requests](https://github.com/nextcloud/android/pulls) and working on [starter issues](https://github.com/nextcloud/android/issues?q=is%3Aopen+is%3Aissue+label%3A%22starter+issue%22).
+Easy starting points are also reviewing [pull requests](https://github.com/nextcloud/android/pulls) and working on [starter issues](https://github.com/nextcloud/android/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22).
+
+## Logs
+
+### Getting debug info via logcat :mag:
-### Getting debug info via logcat
-#### With a computer:
-- connect the device via USB
-- open command prompt/terminal
-- enter `adb logcat | grep "$(adb shell ps | awk '/com.nextcloud.client/{print $2}')" > logcatOutput.txt` to save the output to this file
+#### With a linux computer:
+
+* enable USB-Debugging in your smartphones developer settings and connect it via USB
+* open command prompt/terminal
+* enter `adb logcat --pid=$(adb shell pidof -s 'com.nextcloud.client') > logcatOutput.txt` to save the output to this file
**Note:** You must have [adb](https://developer.android.com/studio/releases/platform-tools.html) installed first!
-#### On a device (with root)
-- open terminal app *(can be enabled in developer options)*
-- get root access via "su"
-- enter `logcat -d -f /sdcard/logcatOutput.txt`
-- you will have to filter the output manually, as above approach is not working on device
+#### On Windows:
+
+* download and install [Minimal ADB and fastboot](https://forum.xda-developers.com/t/tool-minimal-adb-and-fastboot-2-9-18.2317790/#post-42407269)
+* enable USB-Debugging in your smartphones developer settings and connect it via USB
+* launch Minimal ADB and fastboot
+* enter `adb shell pidof -s 'com.nextcloud.client'` and use the output as `` in the following command:
+* `adb logcat --pid= > "%USERPROFILE%\Downloads\logcatOutput.txt"` (This will produce a `logcatOutput.txt` file in your downloads)
+* if the processID is `18841`, an example command is: `adb logcat --pid=18841 > "%USERPROFILE%\Downloads\logcatOutput.txt"` (You might cancel the process after a while manually: it will not be exited automatically.)
+* For a PowerShell terminal, replace `%USERPROFILE%` with `$env:USERPROFILE` in the commands above.
-or
+#### On a device (with root) :wrench:
-- use [CatLog](https://play.google.com/store/apps/details?id=com.nolanlawson.logcat) or [aLogcat](https://play.google.com/store/apps/details?id=org.jtb.alogcat)
+* open terminal app *(can be enabled in developer options)*
+* get root access via "su"
+* enter `logcat -d --pid $(pidof -s com.nextcloud.client) -f /sdcard/logcatOutput.txt`
+
+or
+
+* use [CatLog](https://play.google.com/store/apps/details?id=com.nolanlawson.logcat) or [aLogcat](https://play.google.com/store/apps/details?id=org.jtb.alogcat)
**Note:** Your device needs to be rooted for this approach!
-## Development version
-- [APK (direct download)](https://download.nextcloud.com/android/dev/latest.apk)
-- [F-Droid](https://f-droid.org/repository/browse/?fdfilter=nextcloud&fdid=com.nextcloud.android.beta)
+## Development version :hammer:
+
+* [APK (direct download)](https://download.nextcloud.com/android/dev/latest.apk)
+* [F-Droid](https://f-droid.org/en/packages/com.nextcloud.android.beta/)
+
+## Known Problems and FAQs
-## Support
+### Push notifications do not work on F-Droid editions
-If you need assistance or want to ask a question about the Android app, you are welcome to [ask for support](https://help.nextcloud.com/c/clients/android) in our Forums or the [IRC-Channel](https://webchat.freenode.net/?channels=nextcloud-mobile). If you have found a bug, feel free to [open a new Issue on GitHub](https://github.com/nextcloud/android/issues). Keep in mind, that this repository only manages the Android app. If you find bugs or have problems with the server/backend, you should ask the [Nextcloud server team](https://github.com/nextcloud/server) for help!
+Push Notifications are not currently supported in the F-Droid builds due to dependencies on Google Play services.
-## Remarks
+## Remarks :scroll:
Google Play and the Google Play logo are trademarks of Google Inc.
diff --git a/REUSE.toml b/REUSE.toml
new file mode 100644
index 000000000000..428de14d9e48
--- /dev/null
+++ b/REUSE.toml
@@ -0,0 +1,42 @@
+# SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
+# SPDX-License-Identifier: AGPL-3.0-or-later
+version = 1
+SPDX-PackageName = "Nextcloud Android"
+SPDX-PackageSupplier = "Nextcloud Android team "
+SPDX-PackageDownloadLocation = "https://github.com/nextcloud/android"
+
+[[annotations]]
+path = "gradle/wrapper/gradle-wrapper.jar"
+precedence = "aggregate"
+SPDX-FileCopyrightText = "2015-2021 the original authors"
+SPDX-License-Identifier = "Apache-2.0"
+
+[[annotations]]
+path = ["user_manual/images/android-1.png", "user_manual/images/android-2.png", "user_manual/images/android-3.png", "user_manual/images/android-4.png", "user_manual/images/android-10.png", "user_manual/images/davdroid-1-button-in-nextcloud-app.png", "user_manual/images/davdroid-2-install-davdroid.png", "user_manual/images/davdroid-3-enter-password.png", "user_manual/images/davdroid-4-specify-owner-email.png"]
+precedence = "aggregate"
+SPDX-FileCopyrightText = "2016-2024 Nextcloud GmbH and Nextcloud contributors"
+SPDX-License-Identifier = "AGPL-3.0-or-later"
+
+[[annotations]]
+path = ["user_manual/conf.py", "user_manual/android_app.rst", "user_manual/index.rst", "user_manual/conf.py", "user_manual/Makefile"]
+precedence = "aggregate"
+SPDX-FileCopyrightText = "2015-2016 ownCloud Inc., 2016-2024 Nextcloud GmbH"
+SPDX-License-Identifier = "GPL-2.0-only"
+
+[[annotations]]
+path = ["user_manual/images/android-11.png", "user_manual/images/android-12.png", "user_manual/images/android-13.png", "user_manual/images/android-14.png", "user_manual/images/android-15.png", "user_manual/images/android-5.png", "user_manual/images/android-6.png", "user_manual/images/android-8.png", "user_manual/images/android-9.png"]
+precedence = "aggregate"
+SPDX-FileCopyrightText = "2015-2016 ownCloud Inc."
+SPDX-License-Identifier = "GPL-2.0-only"
+
+[[annotations]]
+path = ["app/src/**/res/mipmap-**dpi/ic_launcher.png", "app/src/**/ic_launcher-web.png", "src/**/fastlane/metadata/en-US/images/*.png", "src/generic/fastlane/metadata/android/en-US/images/icon.png", "src/versionDev/fastlane/metadata/android/en-US/images/icon.png", "app/src/main/ic_launcher-web-round.png"]
+precedence = "aggregate"
+SPDX-FileCopyrightText = "2017-2025 Nextcloud GmbH "
+SPDX-License-Identifier = "LicenseRef-NextcloudTrademarks"
+
+[[annotations]]
+path = [".idea/**", "app/schemas/com.nextcloud.client.database.NextcloudDatabase/**.json", "app/screenshots/generic/debug/**.png", "app/src/main/res/values-**/strings.xml", "src/**/fastlane/metadata/**/*.txt", "src/versionDev/fastlane/metadata/android/**/changelogs/**.txt", "app/src/androidTest/assets/**", "app/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker", "app/src/**/google-services.json", "app/src/main/res/drawable-**dpi/checker_16_16.png", "app/src/main/res/raw/encryption_key_words.txt", "app/src/main/resources/ical4j.properties", "app/src/main/res/drawable-**dpi/apk.png", "app/src/main/res/drawable-**dpi/fdroid.png", "app/src/main/res/drawable-**dpi/playstore.png", "app/src/main/res/drawable-**dpi/background.png", "app/src/main/res/drawable-**dpi/background_nc18.png"]
+precedence = "aggregate"
+SPDX-FileCopyrightText = "2016-2025 Nextcloud GmbH and Nextcloud contributors"
+SPDX-License-Identifier = "AGPL-3.0-or-later"
diff --git a/Readme-AR.md b/Readme-AR.md
new file mode 100644
index 000000000000..98735aa56eb1
--- /dev/null
+++ b/Readme-AR.md
@@ -0,0 +1,120 @@
+
+# تطبيق [Nextcloud](https://nextcloud.com)لأجهزة أندرويد 📱
+
+[](https://api.reuse.software/info/github.com/nextcloud/android)
+[](https://drone.nextcloud.com/nextcloud/android)
+[](https://app.codacy.com/gh/nextcloud/android/dashboard)
+[](https://github.com/nextcloud/android/releases/latest)
+
+[
](https://play.google.com/store/apps/details?id=com.nextcloud.client)
+[
](https://f-droid.org/packages/com.nextcloud.client/)
+
+## التØÙ‚Ù‚ من توقيع التطبيق ðŸ”
+
+للتأكد من ØµØØ© مل٠APK:
+
+- مل٠APK باسم "gplay" Ù…ØªÙˆÙØ± [هنا](https://github.com/nextcloud/android/releases) أو عبر متجر Google Play
+- مل٠APK باسم "nextcloud" Ù…ØªÙˆÙØ± [هنا](https://github.com/nextcloud/android/releases)
+- غير مناسب لتØÙ…يلات F-DroidØŒ لأن F-Droid يقوم بتوقيعه Ø¨Ù†ÙØ³Ù‡
+
+```plaintext
+SHA-256: fb009522f65e25802261b67b10a45fd70e610031976f40b28a649e152ded0373
+SHA-1: 74aa1702e714941be481e1f7ce4a8f779c19dcea
+```
+
+**تطبيق Nextcloud لأندرويد ÙŠØªÙŠØ Ù„Ùƒ إدارة بياناتك بسهولة على خادم Nextcloud الخاص بك.**
+
+## Ø§Ù„ØØµÙˆÙ„ على الدعم 🆘
+
+إذا واجهت مشكلة أو لديك سؤال، يمكنك زيارة [منتدى الدعم](https://help.nextcloud.com/c/clients/android).
+إذا Ø§ÙƒØªØ´ÙØª خطأ أو لديك Ø§Ù‚ØªØ±Ø§Ø Ù„ØªØØ³ÙŠÙ† التطبيق، يمكنك [ÙØªØ قضية جديدة على GitHub](https://github.com/nextcloud/android/issues).
+
+إذا لم تكن متأكدًا ما إذا كانت المشكلة ناتجة عن التطبيق أو الإعدادات أو الخادم، ÙØ§Ø¨Ø¯Ø£ بالسؤال ÙÙŠ المنتدى، ثم عد إلى GitHub إذا لزم الأمر.
+
+> Ù…Ù„Ø§ØØ¸Ø©: هذا المستودع خاص بتطبيق أندرويد Ùقط. إذا كانت المشكلة ÙÙŠ الخادم، يرجى التواصل مع [ÙØ±ÙŠÙ‚ خادم Nextcloud](https://github.com/nextcloud/server).
+
+## كي٠تساهم ÙÙŠ المشروع 🚀
+
+هناك العديد من الطرق للمساهمة، سواء كنت مبرمجًا أو لا:
+
+- مساعدة المستخدمين ÙÙŠ المنتدى: https://help.nextcloud.com
+- ترجمة التطبيق عبر [Transifex](https://app.transifex.com/nextcloud/nextcloud/android/)
+- الإبلاغ عن المشاكل أو تقديم Ø§Ù‚ØªØ±Ø§ØØ§Øª عبر [GitHub Issues](https://github.com/nextcloud/android/issues/new/choose)
+- تنÙيذ Ø¥ØµÙ„Ø§ØØ§Øª أو ØªØØ³ÙŠÙ†Ø§Øª عبر Pull Requests
+- مراجعة [طلبات الدمج](https://github.com/nextcloud/android/pulls)
+- اختبار النسخ التجريبية أو اليومية أو Ø§Ù„Ù…Ø±Ø´ØØ© للإصدار
+- ØªØØ³ÙŠÙ† [التوثيق](https://github.com/nextcloud/documentation/)
+- اختبار الميزات الأساسية ÙÙŠ آخر إصدار مستقر
+- تعلم كيÙية جمع سجلات الأخطاء (logcat) لتقديم تقارير دقيقة
+
+## إرشادات المساهمة والترخيص 📜
+
+- الترخيص: [GPLv2](https://github.com/nextcloud/android/blob/master/LICENSE.txt)
+- جميع المساهمات بعد 16 يونيو 2016 تعتبر مرخصة ØªØØª AGPLv3 أو أي إصدار لاØÙ‚
+- لا ØØ§Ø¬Ø© لتوقيع Ø§ØªÙØ§Ù‚ية مساهم (CLA)
+- ÙŠÙÙØ¶Ù„ Ø¥Ø¶Ø§ÙØ© السطر التالي ÙÙŠ رأس المل٠عند إجراء تغييرات كبيرة:
+
+```plaintext
+SPDX-FileCopyrightText: <السنة> <اسمك> <بريدك الإلكتروني>
+```
+
+يرجى قراءة [مدونة السلوك](https://nextcloud.com/community/code-of-conduct/) لضمان بيئة تعاون إيجابية.
+راجع أيضًا [إرشادات المساهمة](https://github.com/nextcloud/android/blob/master/CONTRIBUTING.md).
+
+## ابدأ بالمساهمة 🔧
+
+- اقرأ [SETUP.md](https://github.com/nextcloud/android/blob/master/SETUP.md) و[CONTRIBUTING.md](https://github.com/nextcloud/android/blob/master/CONTRIBUTING.md)
+- قم بعمل fork للمستودع وابدأ بإرسال Pull Requests إلى ÙØ±Ø¹ master
+- يمكنك البدء بمراجعة [طلبات الدمج](https://github.com/nextcloud/android/pulls) أو العمل على [القضايا المبتدئة](https://github.com/nextcloud/android/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22)
+
+## جمع سجلات الأخطاء (logcat) ðŸ”
+
+### على لينكس:
+
+- ÙØ¹Ù‘Ù„ USB-Debugging على هاتÙÙƒ
+- Ø§ÙØªØ الطرÙية وأدخل:
+
+```bash
+adb logcat --pid=$(adb shell pidof -s 'com.nextcloud.client') > logcatOutput.txt
+```
+
+> تأكد من تثبيت [adb](https://developer.android.com/studio/releases/platform-tools.html)
+
+### على ويندوز:
+
+- ØÙ…ّل [Minimal ADB and Fastboot](https://forum.xda-developers.com/t/tool-minimal-adb-and-fastboot-2-9-18.2317790/#post-42407269)
+- ÙØ¹Ù‘Ù„ USB-Debugging
+- Ø§ÙØªØ البرنامج وأدخل:
+
+```bash
+adb shell pidof -s 'com.nextcloud.client'
+```
+
+- استخدم الناتج كـ `` ÙÙŠ الأمر التالي:
+
+```bash
+adb logcat --pid= > "%USERPROFILE%\Downloads\logcatOutput.txt"
+```
+
+### على الجهاز (مع صلاØÙŠØ§Øª root):
+
+```bash
+su
+logcat -d --pid $(pidof -s com.nextcloud.client) -f /sdcard/logcatOutput.txt
+```
+
+أو استخدم تطبيقات مثل [CatLog](https://play.google.com/store/apps/details?id=com.nolanlawson.logcat) أو [aLogcat](https://play.google.com/store/apps/details?id=org.jtb.alogcat)
+
+## النسخة التطويرية 🛠ï¸
+
+- [تØÙ…يل مباشر للـ APK](https://download.nextcloud.com/android/dev/latest.apk)
+- [F-Droid النسخة التجريبية](https://f-droid.org/en/packages/com.nextcloud.android.beta/)
+
+## المشاكل Ø§Ù„Ù…Ø¹Ø±ÙˆÙØ© والأسئلة الشائعة
+
+### الإشعارات الÙورية لا تعمل ÙÙŠ نسخ F-Droid
+
+بسبب اعتمادها على خدمات Google PlayØŒ لا تعمل الإشعارات الÙورية ÙÙŠ نسخ F-Droid ØØ§Ù„يًا.
diff --git a/SECURITY.md b/SECURITY.md
new file mode 100644
index 000000000000..b0adf5772082
--- /dev/null
+++ b/SECURITY.md
@@ -0,0 +1,71 @@
+
+# Security Policy
+
+# 💡 TLDR: Report issues at [hackerone.com/nextcloud](https://hackerone.com/nextcloud)
+
+# Security Policy
+
+[Security](https://nextcloud.com/security/) is very important to us.
+
+If you believe you have found a security vulnerability that meets our definition of a security
+vulnerability, please report is as described below.
+
+## Context
+
+Please review our [threat model and accepted risks](https://nextcloud.com/security/threat-model) to learn what
+is currently considered a security vulnerability versus expected behavior. And review what is considered
+[in scope or bounty eligible](https://hackerone.com/nextcloud/policy_scopes).
+
+
+## Reporting a Vulnerability
+
+**âš ï¸ Please do _not_ report security vulnerabilities through public GitHub issues.**
+
+If you have discovered a security matter with Nextcloud, please read our
+[responsible disclosure guidelines](https://nextcloud.com/security/) and contact us at
+[hackerone.com/nextcloud](https://hackerone.com/nextcloud).
+
+Your report should include:
+
+- Product version
+- A vulnerability description
+- Reproduction steps
+- Any other details you think are likely to be important
+
+### What to Expect
+
+You should receive an initial acknowledgement within 24 hours in most cases.
+
+A member of the security team will confirm the vulnerability, determine its impact, follow-up with any questions,
+and coordinate the fix and publication.
+
+The fix will be applied to all applicable and still supported stable branches, tested, and packaged in the next security release.
+The vulnerability will be publicly announced after the release. Finally, your name will be added
+to the [hall of fame](https://hackerone.com/nextcloud/thanks) as a thank you from the entire Nextcloud
+community.
+
+If the vulnerability involves an app that is not maintained by Nextcloud (i.e. hosted by the
+Nextcloud project but community maintained, or hosted elsewhere), the security team will try to coordinate with the
+current maintainer and help to get the issue fixed in similar fashion.
+
+### Bug Bounties
+
+If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Details
+on past bounty ranges can be found at [hackerone.com/nextcloud](https://hackerone.com/nextcloud).
+
+## Existing Security Advisories
+
+Published security advisories for the Nextcloud Server, Clients and Apps can be viewed at
+[https://github.com/nextcloud/security-advisories/security/advisories](https://github.com/nextcloud/security-advisories/security/advisories).
+
+## Supported Versions
+
+Only the latest version is supported. We release every second month a feature release (currently 3.x) and inbetween a bug fix release (3.x.y).
+
+## Additional Information
+
+Please visit [https://nextcloud.com/security/](https://nextcloud.com/security/) for further information about Nextcloud security.
+Please visit [https://nextcloud.com/security/threat-model](https://nextcloud.com/security/threat-model) for our threat model and accepted risks.
diff --git a/SETUP.md b/SETUP.md
index 5de4d029725e..d1a6e6aec837 100644
--- a/SETUP.md
+++ b/SETUP.md
@@ -1,3 +1,7 @@
+
These instructions will help you to set up your development environment, get the source code of the Nextcloud for Android app and build it by yourself. If you want to help developing the app take a look to the [contribution guidelines][0].
Sections 1) and 2) are common for any environment. The rest of the sections describe how to set up a project in different tool environments. Nowadays we recommend to use Android Studio (section 2), but you can also build the app from the command line (section 3).
@@ -32,7 +36,7 @@ The next steps will assume you have a GitHub account and that you will get the c
* In a web browser, go to https://github.com/nextcloud/android, and click the 'Fork' button near the top right corner.
* Open a terminal and go on with the next steps in it.
-* Clone your forked repository: ```git clone --recursive https://github.com/YOURGITHUBNAME/android.git```.
+* Clone your forked repository: ```git clone https://github.com/YOURGITHUBNAME/android.git```.
* Move to the project folder with ```cd android```.
* Pull any changes from your remote branch 'master': ```git pull origin master```
* Make official Nextcloud repo known as upstream: ```git remote add upstream https://github.com/nextcloud/android.git```
@@ -49,10 +53,9 @@ We recommend to use the last version available in the stable channel of Android
To set up the project in Android Studio follow the next steps:
-* Make sure you have called ```git submodule update``` whenever you switched branches
* Open Android Studio and select 'Import Project (Eclipse ADT, Gradle, etc)'. Browse through your file system to the folder 'android' where the project is located. Android Studio will then create the '.iml' files it needs. If you ever close the project but the files are still there, you just select 'Open Project…'. The file chooser will show an Android face as the folder icon, which you can select to reopen the project.
* Android Studio will try to build the project directly after importing it. To build it manually, follow the menu path 'Build'/'Make Project', or just click the 'Play' button in the toolbar to build and run it in a mobile device or an emulator. The resulting APK file will be saved in the 'build/outputs/apk/' subdirectory in the project folder.
-* Setup Android Studio editor configurtation for the project: ```Settings``` → ```Editor``` → ```Code Style``` → ```Scheme: Project``` and ```Enable EditorConfig support```
+* Setup Android Studio editor configuration for the project: ```Settings``` → ```Editor``` → ```Code Style``` → ```Scheme: Project``` and ```Enable EditorConfig support```
### 3. Working in a terminal with Gradle:
@@ -60,7 +63,6 @@ To set up the project in Android Studio follow the next steps:
[Gradle][7] is the build system used by Android Studio to manage the building operations on Android apps. You do not need to install Gradle in your system, and Google recommends not to do it, but instead trusting on the [Gradle wrapper][8] included in the project.
* Open a terminal and go to the 'android' directory that contains the repository.
-* Make sure you have called ```git submodule update``` whenever you switched branches
* Run the 'clean' and 'build' tasks using the Gradle wrapper provided
- Windows: ```gradlew.bat clean build```
- Mac OS/Linux: ```./gradlew clean build```
@@ -91,17 +93,24 @@ The app is currently equipped to be built with three flavours:
#### 1. Direct usage of library project
This is handy if one wants to make changes both to files app and library:
-- in files app root: ln -s $pathToLibraryProject nextcloud-android-library
-- uncomment in build.gradle:
- - `// implementation project('nextcloud-android-library')`
-- comment in build.gradle:
- - `genericImplementation 'com.github.nextcloud:android-library:master-SNAPSHOT'`
- - `gplayImplementation 'com.github.nextcloud:android-library:master-SNAPSHOT'`
- - `versionDevImplementation 'com.github.nextcloud:android-library:master-SNAPSHOT'`
-- comment in settings.gradle:
- - `include ':'`
-- uncomment in settings.gradle:
- - `//include 'nextcloud-android-library'`
-- sync project with gradle files
+
+- Add the following to `settings.gradle`:
+ ```groovy
+ includeBuild('[path to library clone]') {
+ dependencySubstitution {
+ substitute module('com.github.nextcloud:android-library') using project(':library')
+ }
+ }
+ ```
+- Sync project with gradle files
Now every change in library can be directly used in files app.
+
+### 6. Troubleshooting
+
+#### 1. Compilation fails with "java.lang.OutOfMemoryError: Java heap space" error
+The default settings for Gradle is to limit the compilation to 1GB of heap.
+You can increase that value by :
+- adding `org.gradle.jvmargs=-Xmx4G` to `gradle.properties`
+- running gradlew(.bat) with this command line : `GRADLE_OPTS="-Xmx4G" ./gradlew clean build"
+
diff --git a/THIRD_PARTY.txt b/THIRD_PARTY.txt
deleted file mode 100644
index 01bfc8ae1239..000000000000
--- a/THIRD_PARTY.txt
+++ /dev/null
@@ -1,68 +0,0 @@
-###################################################################
- Nextcloud Android client
-
- Copyright (C) 2016 Nextcloud Project
- Copyright (C) 2012-2016 ownCloud GmbH
- Copyright (C) 2012 Bartek Przybylski
-###################################################################
-
-
-###########
-# LICENSE #
-###########
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License versions 2,
-as published by the Free Software Foundation.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-The source distribution of this program should include a full copy
-of the GNU GPL version 2 license in the LICENSE.txt file located
-in its root directory. If not, see .
-
-
-########################
-# THIRD PARTY LICENSES #
-########################
-
-Both the source and binary distributions of this software contain
-some third party software. All the third party software included
-or linked is redistributed under the terms and conditions of their
-original licenses. These licenses are compatible the GPL license
-that govern this software, for the purposes they are being used.
-
-The third party software included and used by this project is:
-
- * Apache JackRabbit 2.12.4. (included by the android-library project)
- Copyright (C) 2004-2016 The Apache Software Foundation.
- Licensed under Apache License, Version 2.0.
- The library is included in the Nextcloud client APK.
- See http://jackrabbit.apache.org/
-
- * TouchImageView, 1.2.0. commit 6dbeac4f11936185ba374c73144ac431c23c9aab
- Copyright (c) 2014 Michael Ortiz
- Licensed under MIT License
- This library is in the source code.
- See https://github.com/MikeOrtiz/TouchImageView
-
- * floatingactionbutton 1.10.21.
- Copyright (c) 2014 Jerzy Chalupski
- Licensed under Apache License, Version 2.0.
- The library is included in the Nextcloud client APK.
- See https://github.com/futuresimple/android-floating-action-button
-
- * AndroidSVG 1.2.1.
- Copyright (c) 2014 Paul LeBeau
- Licensed under Apache License, Version 2.0.
- The library is included in the Nextcloud client APK.
- See https://github.com/BigBadaboom/androidsvg
-
- * Disk LRU Cache 2.0.2.
- Copyright (c) 2013 Jake Wharton
- Licensed under Apache License, Version 2.0.
- The library is be included in the Nextcloud client APK.
- See https://github.com/JakeWharton/DiskLruCache
diff --git a/app/.gitignore b/app/.gitignore
new file mode 100644
index 000000000000..e666d0bcd5c1
--- /dev/null
+++ b/app/.gitignore
@@ -0,0 +1,3 @@
+# SPDX-FileCopyrightText: 2022-2024 Nextcloud GmbH and Nextcloud contributors
+# SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+/build
\ No newline at end of file
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
new file mode 100644
index 000000000000..3bfd4c229c72
--- /dev/null
+++ b/app/build.gradle.kts
@@ -0,0 +1,516 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2025 Jimly Asshiddiqy
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+@file:Suppress("UnstableApiUsage", "DEPRECATION")
+
+import com.android.build.gradle.internal.api.ApkVariantOutputImpl
+import com.github.spotbugs.snom.Confidence
+import com.github.spotbugs.snom.Effort
+import com.github.spotbugs.snom.SpotBugsTask
+import com.karumi.shot.ShotExtension
+import org.gradle.internal.jvm.Jvm
+import org.jetbrains.kotlin.gradle.dsl.JvmTarget
+import java.io.FileInputStream
+import java.util.Properties
+
+val shotTest = System.getenv("SHOT_TEST") == "true"
+val ciBuild = System.getenv("CI") == "true"
+val perfAnalysis = project.hasProperty("perfAnalysis")
+
+plugins {
+ alias(libs.plugins.android.application)
+ alias(libs.plugins.kotlin.compose)
+ alias(libs.plugins.spotless)
+ alias(libs.plugins.ksp)
+ alias(libs.plugins.kotlin.serialization)
+ alias(libs.plugins.kotlin.parcelize)
+ alias(libs.plugins.jetbrains.kotlin.android)
+ alias(libs.plugins.spotbugs)
+ alias(libs.plugins.detekt)
+ // needed to make renovate run without shot, as shot requires Android SDK
+ // https://github.com/pedrovgs/Shot/issues/300
+ if (System.getenv("SHOT_TEST") == "true") alias(libs.plugins.shot)
+ id("checkstyle")
+ id("pmd")
+}
+apply(from = "${rootProject.projectDir}/jacoco.gradle.kts")
+
+println("Gradle uses Java ${Jvm.current()}")
+
+configurations.configureEach {
+ // via prism4j, already using annotations explicitly
+ exclude(group = "org.jetbrains", module = "annotations-java5")
+
+ resolutionStrategy {
+ force(libs.objenesis)
+
+ eachDependency {
+ if (requested.group == "org.checkerframework" && requested.name != "checker-compat-qual") {
+ useVersion(libs.versions.checker.get())
+ because("https://github.com/google/ExoPlayer/issues/10007")
+ } else if (requested.group == "org.jacoco") {
+ useVersion(libs.versions.jacoco.get())
+ } else if (requested.group == "commons-logging" && requested.name == "commons-logging") {
+ useTarget(libs.slfj)
+ }
+ }
+ }
+}
+
+// semantic versioning for version code
+val versionMajor = 33
+val versionMinor = 2
+val versionPatch = 0
+val versionBuild = 0 // 0-50=Alpha / 51-98=RC / 90-99=stable
+
+val ndkEnv = buildMap {
+ file("${project.rootDir}/ndk.env").readLines().forEach {
+ val (key, value) = it.split("=")
+ put(key, value)
+ }
+}
+
+val configProps = Properties().apply {
+ val file = rootProject.file("gradle.properties")
+ if (file.exists()) load(FileInputStream(file))
+}
+
+val ncTestServerUsername = configProps["NC_TEST_SERVER_USERNAME"]
+val ncTestServerPassword = configProps["NC_TEST_SERVER_PASSWORD"]
+val ncTestServerBaseUrl = configProps["NC_TEST_SERVER_BASEURL"]
+
+android {
+ // install this NDK version and Cmake to produce smaller APKs. Build will still work if not installed
+ ndkVersion = "${ndkEnv["NDK_VERSION"]}"
+
+ namespace = "com.owncloud.android"
+ testNamespace = "${namespace}.test"
+
+ androidResources.generateLocaleConfig = true
+
+ defaultConfig {
+ testInstrumentationRunnerArguments += mapOf(
+ "TEST_SERVER_URL" to ncTestServerBaseUrl.toString(),
+ "TEST_SERVER_USERNAME" to ncTestServerUsername.toString(),
+ "TEST_SERVER_PASSWORD" to ncTestServerPassword.toString(),
+ "disableAnalytics" to "true"
+ )
+ applicationId = "com.nextcloud.client"
+ minSdk = 28
+ targetSdk = 36
+ compileSdk = 36
+
+ buildConfigField("boolean", "CI", ciBuild.toString())
+ buildConfigField("boolean", "RUNTIME_PERF_ANALYSIS", perfAnalysis.toString())
+
+ // arguments to be passed to functional tests
+ testInstrumentationRunner = if (shotTest) "com.karumi.shot.ShotTestRunner"
+ else "com.nextcloud.client.TestRunner"
+
+ versionCode = versionMajor * 10000000 + versionMinor * 10000 + versionPatch * 100 + versionBuild
+ versionName = when {
+ versionBuild > 89 -> "${versionMajor}.${versionMinor}.${versionPatch}"
+ versionBuild > 50 -> "${versionMajor}.${versionMinor}.${versionPatch} RC" + (versionBuild - 50)
+ else -> "${versionMajor}.${versionMinor}.${versionPatch} Alpha" + (versionBuild + 1)
+ }
+
+ // adapt structure from Eclipse to Gradle/Android Studio expectations;
+ // see http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Configuring-the-Structure
+
+ flavorDimensions += "default"
+
+ buildTypes {
+ release {
+ buildConfigField("String", "NC_TEST_SERVER_DATA_STRING", "\"\"")
+ }
+
+ debug {
+ enableUnitTestCoverage = project.hasProperty("coverage")
+ enableAndroidTestCoverage = project.hasProperty("coverage")
+ resConfigs("xxxhdpi")
+ }
+ }
+
+ productFlavors {
+ // used for f-droid
+ register("generic") {
+ applicationId = "com.nextcloud.client"
+ dimension = "default"
+ }
+
+ register("gplay") {
+ applicationId = "com.nextcloud.client"
+ dimension = "default"
+ }
+
+ register("huawei") {
+ applicationId = "com.nextcloud.client"
+ dimension = "default"
+ }
+
+ register("versionDev") {
+ applicationId = "com.nextcloud.android.beta"
+ dimension = "default"
+ versionCode = 20220322
+ versionName = "20220322"
+ }
+
+ register("qa") {
+ applicationId = "com.nextcloud.android.qa"
+ dimension = "default"
+ versionCode = 1
+ versionName = "1"
+ }
+ }
+ }
+
+ applicationVariants.configureEach {
+ outputs.configureEach {
+ if (this is ApkVariantOutputImpl) this.outputFileName = "${this.baseName}-${this.versionCode}.apk"
+ }
+ }
+
+ testOptions {
+ unitTests.isReturnDefaultValues = true
+ animationsDisabled = true
+ }
+
+ // adapt structure from Eclipse to Gradle/Android Studio expectations;
+ // see http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Configuring-the-Structure
+ packaging.resources {
+ excludes.addAll(listOf("META-INF/LICENSE*", "META-INF/versions/9/OSGI-INF/MANIFEST*"))
+ pickFirsts.add("MANIFEST.MF") // workaround for duplicated manifest on some dependencies
+ }
+
+ buildFeatures {
+ buildConfig = true
+ dataBinding = true
+ viewBinding = true
+ aidl = true
+ compose = true
+ }
+
+ compileOptions {
+ sourceCompatibility = JavaVersion.VERSION_21
+ targetCompatibility = JavaVersion.VERSION_21
+ }
+
+ lint {
+ abortOnError = true
+ warningsAsErrors = true
+ checkGeneratedSources = true
+ disable.addAll(
+ listOf(
+ "MissingTranslation",
+ "GradleDependency",
+ "VectorPath",
+ "IconMissingDensityFolder",
+ "IconDensities",
+ "GoogleAppIndexingWarning",
+ "MissingDefaultResource",
+ "InvalidPeriodicWorkRequestInterval",
+ "StringFormatInvalid",
+ "MissingQuantity",
+ "IconXmlAndPng",
+ "SelectedPhotoAccess",
+ "UnsafeIntentLaunch"
+ )
+ )
+ htmlOutput = layout.buildDirectory.file("reports/lint/lint.html").get().asFile
+ htmlReport = true
+ }
+
+ sourceSets {
+ // Adds exported schema location as test app assets.
+ getByName("androidTest") {
+ assets.srcDirs(files("$projectDir/schemas"))
+ }
+ }
+
+}
+
+ksp.arg("room.schemaLocation", "$projectDir/schemas")
+
+// Configure KSP for test variants
+ksp.arg("dagger.moduleName", project.name)
+
+kotlin.compilerOptions.jvmTarget.set(JvmTarget.JVM_21)
+
+spotless.kotlin {
+ target("**/*.kt")
+ ktlint()
+}
+
+detekt.config.setFrom("detekt.yml")
+
+if (shotTest) configure {
+ showOnlyFailingTestsInReports = ciBuild
+ // CI environment renders some shadows slightly different from local VMs
+ // Add a 0.5% tolerance to account for that
+ tolerance = if (ciBuild) 0.1 else 0.0
+}
+
+
+spotbugs {
+ ignoreFailures = true // should continue checking
+ effort = Effort.MAX
+ reportLevel = Confidence.valueOf("MEDIUM")
+}
+
+tasks.register("checkstyle") {
+ configFile = file("${rootProject.projectDir}/checkstyle.xml")
+ setConfigProperties(
+ "checkstyleSuppressionsPath" to file("${rootProject.rootDir}/suppressions.xml").absolutePath
+ )
+ source("src")
+ include("**/*.java")
+ exclude("**/gen/**")
+ classpath = files()
+}
+
+tasks.register("pmd") {
+ ruleSetFiles = files("${rootProject.rootDir}/ruleset.xml")
+ ignoreFailures = true // should continue checking
+ ruleSets = emptyList()
+
+ source("src")
+ include("**/*.java")
+ exclude("**/gen/**")
+
+ reports {
+ xml.outputLocation.set(layout.buildDirectory.file("reports/pmd/pmd.xml").get().asFile)
+ html.outputLocation.set(layout.buildDirectory.file("reports/pmd/pmd.html").get().asFile)
+ }
+}
+
+tasks.withType().configureEach {
+ val variantNameCap = name.replace("spotbugs", "")
+ val variantName = variantNameCap.substring(0, 1).lowercase() + variantNameCap.substring(1)
+ dependsOn("compile${variantNameCap}Sources")
+
+ classes = fileTree(
+ layout.buildDirectory.get().asFile.toString() +
+ "/intermediates/javac/${variantName}/compile${variantNameCap}JavaWithJavac/classes/"
+ )
+ excludeFilter.set(file("${project.rootDir}/scripts/analysis/spotbugs-filter.xml"))
+
+ reports.create("xml") {
+ required.set(true)
+ }
+ reports.create("html") {
+ required.set(true)
+ outputLocation.set(layout.buildDirectory.file("reports/spotbugs/spotbugs.html"))
+ setStylesheet("fancy.xsl")
+ }
+}
+
+// Run the compiler as a separate process
+tasks.withType().configureEach {
+ options.isFork = true
+
+ // Enable Incremental Compilation
+ options.isIncremental = true
+}
+
+tasks.withType().configureEach {
+ // Run tests in parallel
+ maxParallelForks = maxOf(1, Runtime.getRuntime().availableProcessors().div(2))
+
+ // increased logging for tests
+ testLogging.events("passed", "skipped", "failed")
+}
+
+tasks.named("check").configure {
+ dependsOn("checkstyle", "spotbugsGplayDebug", "pmd", "lint", "spotlessKotlinCheck", "detekt")
+}
+
+dependencies {
+ // region Nextcloud library
+ implementation(libs.android.library) {
+ exclude(group = "org.ogce", module = "xpp3") // unused in Android and brings wrong Junit version
+ }
+ // endregion
+
+ // region Splash Screen
+ implementation(libs.splashscreen)
+ // endregion
+
+ // region Jetpack Compose
+ implementation(platform(libs.compose.bom))
+ implementation(libs.material.icons.core)
+ implementation(libs.compose.ui)
+ implementation(libs.compose.ui.graphics)
+ implementation(libs.compose.material3)
+ implementation(libs.compose.activity)
+ implementation(libs.compose.ui.tooling.preview)
+ implementation(libs.foundation)
+ debugImplementation(libs.compose.ui.tooling)
+ // endregion
+
+ // region Media3
+ implementation(libs.bundles.media3)
+ // endregion
+
+ // region Room
+ implementation(libs.room.runtime)
+ ksp(libs.room.compiler)
+ androidTestImplementation(libs.room.testing)
+ // endregion
+
+ // region Espresso
+ androidTestImplementation(libs.bundles.espresso)
+ // endregion
+
+ // region Glide
+ implementation(libs.glide)
+ ksp(libs.ksp)
+ // endregion
+
+ // region UI
+ implementation(libs.bundles.ui)
+ // endregion
+
+ // region Worker
+ implementation(libs.work.runtime)
+ implementation(libs.work.runtime.ktx)
+ // endregion
+
+ // region Lifecycle
+ implementation(libs.lifecycle.viewmodel.ktx)
+ implementation(libs.lifecycle.service)
+ implementation(libs.lifecycle.runtime.ktx)
+ // endregion
+
+ // region JUnit
+ androidTestImplementation(libs.junit)
+ androidTestImplementation(libs.rules)
+ androidTestImplementation(libs.runner)
+ androidTestUtil(libs.orchestrator)
+ androidTestImplementation(libs.core.ktx)
+ androidTestImplementation(libs.core.testing)
+ // endregion
+
+ // region other libraries
+ compileOnly(libs.org.jbundle.util.osgi.wrapped.org.apache.http.client)
+ implementation(libs.commons.httpclient.commons.httpclient) // remove after entire switch to lib v2
+ implementation(libs.jackrabbit.webdav) // remove after entire switch to lib v2
+ implementation(libs.constraintlayout)
+ implementation(libs.legacy.support.v4)
+ implementation(libs.material)
+ implementation(libs.disklrucache)
+ implementation(libs.juniversalchardet) // need this version for Android <7
+ compileOnly(libs.annotations)
+ implementation(libs.commons.io)
+ implementation(libs.eventbus)
+ implementation(libs.ez.vcard)
+ implementation(libs.nnio)
+ implementation(libs.bcpkix.jdk18on)
+ implementation(libs.gson)
+ implementation(libs.sectioned.recyclerview)
+ implementation(libs.photoview)
+ implementation(libs.android.gif.drawable)
+ implementation(libs.qrcodescanner) // "com.github.blikoon:QRCodeScanner:0.1.2"
+ implementation(libs.flexbox)
+ implementation(libs.androidsvg)
+ implementation(libs.annotation)
+ implementation(libs.emoji.google)
+ // endregion
+
+ // region AppScan, document scanner not available on FDroid (generic) due to OpenCV binaries
+ // To enable the feature for another variant, add it here.
+ "gplayImplementation"(project(":appscan"))
+ "huaweiImplementation"(project(":appscan"))
+ "qaImplementation"(project(":appscan"))
+ // endregion
+
+ // region SpotBugs
+ spotbugsPlugins(libs.findsecbugs.plugin)
+ spotbugsPlugins(libs.fb.contrib)
+ // endregion
+
+ // region Dagger
+ implementation(libs.dagger)
+ implementation(libs.dagger.android)
+ implementation(libs.dagger.android.support)
+ ksp(libs.dagger.compiler)
+ ksp(libs.dagger.processor)
+ kspAndroidTest(libs.dagger.compiler)
+ // endregion
+
+ // region Crypto
+ implementation(libs.conscrypt.android)
+ // endregion
+
+ // region Library
+ implementation(libs.library)
+ // endregion
+
+ // region Shimmer
+ implementation(libs.loaderviewlibrary)
+ // endregion
+
+ // region Markdown rendering
+ implementation(libs.bundles.markdown.rendering)
+ // endregion
+
+ // region Image cropping / rotation
+ implementation(libs.android.image.cropper)
+ // endregion
+
+ // region Maps
+ implementation(libs.osmdroid.android)
+ // endregion
+
+ // region iCal4j
+ implementation(libs.ical4j) {
+ listOf("org.apache.commons", "commons-logging").forEach { groupName -> exclude(group = groupName) }
+ }
+ // endregion
+
+ // region LeakCanary
+ if (perfAnalysis) debugImplementation(libs.leakcanary)
+ // endregion
+
+ // region Local Unit Test
+ testImplementation(libs.bundles.unit.test)
+ // endregion
+
+ // region Mocking support
+ androidTestImplementation(libs.bundles.mocking)
+ // endregion
+
+ // region UIAutomator
+ // UIAutomator - for cross-app UI tests, and to grant screen is turned on in Espresso tests
+ // androidTestImplementation("androidx.test.uiautomator:uiautomator:2.2.0"
+ // fix conflict in dependencies; see http://g.co/androidstudio/app-test-app-conflict for details
+ // androidTestImplementation("com.android.support:support-annotations:${supportLibraryVersion}"
+ androidTestImplementation(libs.screengrab)
+ // endregion
+
+ // region Kotlin
+ implementation(libs.kotlin.stdlib)
+ // endregion
+
+ // region Stateless
+ implementation(libs.stateless4j)
+ // endregion
+
+ // region Google Play dependencies, upon each update first test: new registration, receive push
+ "gplayImplementation"(libs.bundles.gplay)
+ // endregion
+
+ // region common
+ implementation(libs.ui)
+ implementation(libs.common.core)
+ // endregion
+
+ // region Image loading
+ implementation(libs.coil)
+ // endregion
+
+ // kotlinx.serialization
+ implementation(libs.kotlinx.serialization.json)
+}
diff --git a/app/detekt.yml b/app/detekt.yml
new file mode 100644
index 000000000000..91abf2b4b70c
--- /dev/null
+++ b/app/detekt.yml
@@ -0,0 +1,414 @@
+# SPDX-FileCopyrightText: 2022-2024 Nextcloud GmbH and Nextcloud contributors
+# SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+build:
+ maxIssues: 2
+ weights:
+ # complexity: 2
+ # LongParameterList: 1
+ # style: 1
+ # comments: 1
+
+processors:
+ active: true
+ exclude:
+ # - 'FunctionCountProcessor'
+ # - 'PropertyCountProcessor'
+ # - 'ClassCountProcessor'
+ # - 'PackageCountProcessor'
+ # - 'KtFileCountProcessor'
+
+console-reports:
+ active: true
+ exclude:
+ # - 'ProjectStatisticsReport'
+ # - 'ComplexityReport'
+ # - 'NotificationReport'
+ # - 'FindingsReport'
+ # - 'BuildFailureReport'
+
+comments:
+ active: true
+ CommentOverPrivateFunction:
+ active: false
+ CommentOverPrivateProperty:
+ active: false
+ EndOfSentenceFormat:
+ active: false
+ endOfSentenceFormat: ([.?!][ \t\n\r\f<])|([.?!]$)
+ UndocumentedPublicClass:
+ active: false
+ searchInNestedClass: true
+ searchInInnerClass: true
+ searchInInnerObject: true
+ searchInInnerInterface: true
+ UndocumentedPublicFunction:
+ active: false
+
+complexity:
+ active: true
+ ComplexCondition:
+ active: true
+ threshold: 4
+ ComplexInterface:
+ active: false
+ threshold: 10
+ includeStaticDeclarations: false
+ ComplexMethod:
+ active: true
+ threshold: 10
+ ignoreSingleWhenExpression: false
+ ignoreSimpleWhenEntries: false
+ excludes: ['**/androidTest/**']
+ LabeledExpression:
+ active: false
+ ignoredLabels: []
+ LargeClass:
+ active: true
+ threshold: 600
+ LongMethod:
+ active: true
+ threshold: 60
+ excludes: ['**/androidTest/**']
+ LongParameterList:
+ active: true
+ functionThreshold: 7
+ constructorThreshold: 6
+ ignoreDefaultParameters: false
+ MethodOverloading:
+ active: false
+ threshold: 6
+ NestedBlockDepth:
+ active: true
+ threshold: 4
+ StringLiteralDuplication:
+ active: false
+ threshold: 3
+ ignoreAnnotation: true
+ excludeStringsWithLessThan5Characters: true
+ ignoreStringsRegex: '$^'
+ TooManyFunctions:
+ active: true
+ thresholdInFiles: 15
+ thresholdInClasses: 15
+ thresholdInInterfaces: 15
+ thresholdInObjects: 15
+ thresholdInEnums: 11
+ ignoreDeprecated: true
+ ignorePrivate: false
+ ignoreOverridden: true
+
+empty-blocks:
+ active: true
+ EmptyCatchBlock:
+ active: true
+ allowedExceptionNameRegex: "^(_|(ignore|expected).*)"
+ EmptyClassBlock:
+ active: true
+ EmptyDefaultConstructor:
+ active: true
+ EmptyDoWhileBlock:
+ active: true
+ EmptyElseBlock:
+ active: true
+ EmptyFinallyBlock:
+ active: true
+ EmptyForBlock:
+ active: true
+ EmptyFunctionBlock:
+ active: true
+ ignoreOverridden: false
+ EmptyIfBlock:
+ active: true
+ EmptyInitBlock:
+ active: true
+ EmptyKtFile:
+ active: true
+ EmptySecondaryConstructor:
+ active: true
+ EmptyWhenBlock:
+ active: true
+ EmptyWhileBlock:
+ active: true
+
+exceptions:
+ active: true
+ ExceptionRaisedInUnexpectedLocation:
+ active: false
+ methodNames: [toString,hashCode,equals,finalize]
+ InstanceOfCheckForException:
+ active: false
+ NotImplementedDeclaration:
+ active: false
+ PrintStackTrace:
+ active: false
+ RethrowCaughtException:
+ active: false
+ ReturnFromFinally:
+ active: false
+ SwallowedException:
+ active: false
+ ignoredExceptionTypes: [InterruptedException,NumberFormatException,ParseException,MalformedURLException]
+ ThrowingExceptionFromFinally:
+ active: false
+ ThrowingExceptionInMain:
+ active: false
+ ThrowingExceptionsWithoutMessageOrCause:
+ active: false
+ exceptions: [IllegalArgumentException,IllegalStateException,IOException]
+ ThrowingNewInstanceOfSameException:
+ active: false
+ TooGenericExceptionCaught:
+ active: true
+ exceptionNames:
+ - ArrayIndexOutOfBoundsException
+ - Error
+ - Exception
+ - IllegalMonitorStateException
+ - NullPointerException
+ - IndexOutOfBoundsException
+ - RuntimeException
+ - Throwable
+ allowedExceptionNameRegex: "^(_|(ignore|expected).*)"
+ TooGenericExceptionThrown:
+ active: true
+ exceptionNames:
+ - Error
+ - Exception
+ - Throwable
+ - RuntimeException
+
+naming:
+ active: true
+ ClassNaming:
+ active: true
+ classPattern: '[A-Z$][a-zA-Z0-9$]*'
+ ConstructorParameterNaming:
+ active: true
+ parameterPattern: '[a-z][A-Za-z0-9]*'
+ privateParameterPattern: '[a-z][A-Za-z0-9]*'
+ excludeClassPattern: '$^'
+ EnumNaming:
+ active: true
+ enumEntryPattern: '^[A-Z][_a-zA-Z0-9]*'
+ ForbiddenClassName:
+ active: false
+ forbiddenName: []
+ FunctionMaxLength:
+ active: false
+ maximumFunctionNameLength: 30
+ FunctionMinLength:
+ active: false
+ minimumFunctionNameLength: 3
+ FunctionNaming:
+ active: true
+ functionPattern: '^([a-z$A-Z][a-zA-Z$0-9]*)|(`.*`)$'
+ excludeClassPattern: '$^'
+ ignoreOverridden: true
+ excludes:
+ - "**/*Test.kt"
+ - "**/*IT.kt"
+ FunctionParameterNaming:
+ active: true
+ parameterPattern: '[a-z][A-Za-z0-9]*'
+ excludeClassPattern: '$^'
+ ignoreOverridden: true
+ MatchingDeclarationName:
+ active: true
+ MemberNameEqualsClassName:
+ active: false
+ ignoreOverridden: true
+ ObjectPropertyNaming:
+ active: true
+ constantPattern: '[A-Za-z][_A-Za-z0-9]*'
+ propertyPattern: '[A-Za-z][_A-Za-z0-9]*'
+ privatePropertyPattern: '(_)?[A-Za-z][_A-Za-z0-9]*'
+ PackageNaming:
+ active: true
+ packagePattern: '^[a-z]+(\.[a-z][A-Za-z0-9]*)*$'
+ TopLevelPropertyNaming:
+ active: true
+ constantPattern: '[A-Z][_A-Z0-9]*'
+ propertyPattern: '[A-Za-z][_A-Za-z0-9]*'
+ privatePropertyPattern: '(_)?[A-Za-z][A-Za-z0-9]*'
+ VariableMaxLength:
+ active: false
+ maximumVariableNameLength: 64
+ VariableMinLength:
+ active: false
+ minimumVariableNameLength: 1
+ VariableNaming:
+ active: true
+ variablePattern: '[a-z][A-Za-z0-9]*'
+ privateVariablePattern: '(_)?[a-z][A-Za-z0-9]*'
+ excludeClassPattern: '$^'
+ ignoreOverridden: true
+
+performance:
+ active: true
+ ArrayPrimitive:
+ active: false
+ ForEachOnRange:
+ active: true
+ SpreadOperator:
+ active: true
+ UnnecessaryTemporaryInstantiation:
+ active: true
+
+potential-bugs:
+ active: true
+ DuplicateCaseInWhenExpression:
+ active: true
+ EqualsAlwaysReturnsTrueOrFalse:
+ active: false
+ EqualsWithHashCodeExist:
+ active: true
+ ExplicitGarbageCollectionCall:
+ active: true
+ InvalidRange:
+ active: false
+ IteratorHasNextCallsNextMethod:
+ active: false
+ IteratorNotThrowingNoSuchElementException:
+ active: false
+ LateinitUsage:
+ active: false
+ ignoreAnnotated: []
+ ignoreOnClassesPattern: ""
+ UnconditionalJumpStatementInLoop:
+ active: false
+ UnreachableCode:
+ active: true
+ UnsafeCallOnNullableType:
+ active: false
+ UnsafeCast:
+ active: false
+ UselessPostfixExpression:
+ active: false
+ WrongEqualsTypeParameter:
+ active: false
+
+style:
+ active: true
+ CollapsibleIfStatements:
+ active: false
+ DataClassContainsFunctions:
+ active: false
+ conversionFunctionPrefix: [to]
+ EqualsNullCall:
+ active: false
+ EqualsOnSignatureLine:
+ active: false
+ ExplicitItLambdaParameter:
+ active: false
+ ExpressionBodySyntax:
+ active: false
+ includeLineWrapping: false
+ ForbiddenComment:
+ active: true
+ values: 'TODO:,FIXME:,STOPSHIP:'
+ ForbiddenImport:
+ active: false
+ imports: []
+ ForbiddenVoid:
+ active: false
+ FunctionOnlyReturningConstant:
+ active: false
+ ignoreOverridableFunction: true
+ excludedFunctions: [describeContents]
+ LoopWithTooManyJumpStatements:
+ active: false
+ maxJumpCount: 1
+ MagicNumber:
+ active: true
+ ignoreNumbers: ["-1","0","1","2"]
+ ignoreHashCodeFunction: true
+ ignorePropertyDeclaration: false
+ ignoreConstantDeclaration: true
+ ignoreCompanionObjectPropertyDeclaration: true
+ ignoreAnnotation: false
+ ignoreNamedArgument: true
+ ignoreEnums: false
+ excludes:
+ - "**/*Test.kt"
+ - "**/*IT.kt"
+ MandatoryBracesIfStatements:
+ active: false
+ MaxLineLength:
+ active: true
+ maxLineLength: 120
+ excludePackageStatements: true
+ excludeImportStatements: true
+ excludeCommentStatements: false
+ MayBeConst:
+ active: false
+ ModifierOrder:
+ active: true
+ NestedClassesVisibility:
+ active: false
+ NewLineAtEndOfFile:
+ active: true
+ NoTabs:
+ active: false
+ OptionalAbstractKeyword:
+ active: true
+ OptionalUnit:
+ active: false
+ OptionalWhenBraces:
+ active: false
+ PreferToOverPairSyntax:
+ active: false
+ ProtectedMemberInFinalClass:
+ active: false
+ RedundantVisibilityModifierRule:
+ active: false
+ ReturnCount:
+ active: true
+ max: 2
+ excludedFunctions: [equals]
+ excludeLabeled: false
+ excludeReturnFromLambda: true
+ SafeCast:
+ active: true
+ SerialVersionUIDInSerializableClass:
+ active: false
+ SpacingBetweenPackageAndImports:
+ active: false
+ ThrowsCount:
+ active: true
+ max: 2
+ TrailingWhitespace:
+ active: false
+ UnderscoresInNumericLiterals:
+ active: false
+ acceptableLength: 5
+ UnnecessaryAbstractClass:
+ active: false
+ ignoreAnnotated:
+ - "dagger.Module"
+ UnnecessaryApply:
+ active: false
+ UnnecessaryInheritance:
+ active: false
+ UnnecessaryLet:
+ active: false
+ UnnecessaryParentheses:
+ active: false
+ UntilInsteadOfRangeTo:
+ active: false
+ UnusedImports:
+ active: false
+ UnusedPrivateClass:
+ active: false
+ UnusedPrivateMember:
+ active: false
+ allowedNames: "(_|ignored|expected|serialVersionUID)"
+ UseDataClass:
+ active: false
+ ignoreAnnotated: []
+ UtilityClassWithPublicConstructor:
+ active: false
+ VarCouldBeVal:
+ active: false
+ WildcardImport:
+ active: true
+ excludeImports: [java.util.*,kotlinx.android.synthetic.*]
diff --git a/app/lint.xml b/app/lint.xml
new file mode 100644
index 000000000000..2316b422a838
--- /dev/null
+++ b/app/lint.xml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/schemas/com.nextcloud.client.database.NextcloudDatabase/100.json b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/100.json
new file mode 100644
index 000000000000..8d0c6556b2f3
--- /dev/null
+++ b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/100.json
@@ -0,0 +1,1308 @@
+{
+ "formatVersion": 1,
+ "database": {
+ "version": 100,
+ "identityHash": "0fa307b3a70cccc7f1486f39b59d6e2b",
+ "entities": [
+ {
+ "tableName": "arbitrary_data",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `cloud_id` TEXT, `key` TEXT, `value` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "cloudId",
+ "columnName": "cloud_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "key",
+ "columnName": "key",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "value",
+ "columnName": "value",
+ "affinity": "TEXT"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "capabilities",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `assistant` INTEGER, `account` TEXT, `version_mayor` INTEGER, `version_minor` INTEGER, `version_micro` INTEGER, `version_string` TEXT, `version_edition` TEXT, `extended_support` INTEGER, `core_pollinterval` INTEGER, `sharing_api_enabled` INTEGER, `sharing_public_enabled` INTEGER, `sharing_public_password_enforced` INTEGER, `sharing_public_expire_date_enabled` INTEGER, `sharing_public_expire_date_days` INTEGER, `sharing_public_expire_date_enforced` INTEGER, `sharing_public_send_mail` INTEGER, `sharing_public_upload` INTEGER, `sharing_user_send_mail` INTEGER, `sharing_resharing` INTEGER, `sharing_federation_outgoing` INTEGER, `sharing_federation_incoming` INTEGER, `files_bigfilechunking` INTEGER, `files_undelete` INTEGER, `files_versioning` INTEGER, `external_links` INTEGER, `server_name` TEXT, `server_color` TEXT, `server_text_color` TEXT, `server_element_color` TEXT, `server_slogan` TEXT, `server_logo` TEXT, `background_url` TEXT, `end_to_end_encryption` INTEGER, `end_to_end_encryption_keys_exist` INTEGER, `end_to_end_encryption_api_version` TEXT, `activity` INTEGER, `background_default` INTEGER, `background_plain` INTEGER, `richdocument` INTEGER, `richdocument_mimetype_list` TEXT, `richdocument_direct_editing` INTEGER, `richdocument_direct_templates` INTEGER, `richdocument_optional_mimetype_list` TEXT, `sharing_public_ask_for_optional_password` INTEGER, `richdocument_product_name` TEXT, `direct_editing_etag` TEXT, `user_status` INTEGER, `user_status_supports_emoji` INTEGER, `etag` TEXT, `files_locking_version` TEXT, `groupfolders` INTEGER, `drop_account` INTEGER, `security_guard` INTEGER, `forbidden_filename_characters` TEXT, `forbidden_filenames` TEXT, `forbidden_filename_extensions` TEXT, `forbidden_filename_basenames` TEXT, `files_download_limit` INTEGER, `files_download_limit_default` INTEGER, `recommendation` INTEGER, `notes_folder_path` TEXT, `default_permissions` INTEGER, `user_status_supports_busy` INTEGER, `windows_compatible_filenames` INTEGER, `has_valid_subscription` INTEGER, `client_integration_json` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "assistant",
+ "columnName": "assistant",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "versionMajor",
+ "columnName": "version_mayor",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "versionMinor",
+ "columnName": "version_minor",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "versionMicro",
+ "columnName": "version_micro",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "versionString",
+ "columnName": "version_string",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "versionEditor",
+ "columnName": "version_edition",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "extendedSupport",
+ "columnName": "extended_support",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "corePollinterval",
+ "columnName": "core_pollinterval",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingApiEnabled",
+ "columnName": "sharing_api_enabled",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicEnabled",
+ "columnName": "sharing_public_enabled",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicPasswordEnforced",
+ "columnName": "sharing_public_password_enforced",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnabled",
+ "columnName": "sharing_public_expire_date_enabled",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateDays",
+ "columnName": "sharing_public_expire_date_days",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnforced",
+ "columnName": "sharing_public_expire_date_enforced",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicSendMail",
+ "columnName": "sharing_public_send_mail",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicUpload",
+ "columnName": "sharing_public_upload",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingUserSendMail",
+ "columnName": "sharing_user_send_mail",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingResharing",
+ "columnName": "sharing_resharing",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingFederationOutgoing",
+ "columnName": "sharing_federation_outgoing",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingFederationIncoming",
+ "columnName": "sharing_federation_incoming",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesBigfilechunking",
+ "columnName": "files_bigfilechunking",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesUndelete",
+ "columnName": "files_undelete",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesVersioning",
+ "columnName": "files_versioning",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "externalLinks",
+ "columnName": "external_links",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "serverName",
+ "columnName": "server_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverColor",
+ "columnName": "server_color",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverTextColor",
+ "columnName": "server_text_color",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverElementColor",
+ "columnName": "server_element_color",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverSlogan",
+ "columnName": "server_slogan",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverLogo",
+ "columnName": "server_logo",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverBackgroundUrl",
+ "columnName": "background_url",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "endToEndEncryption",
+ "columnName": "end_to_end_encryption",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "endToEndEncryptionKeysExist",
+ "columnName": "end_to_end_encryption_keys_exist",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "endToEndEncryptionApiVersion",
+ "columnName": "end_to_end_encryption_api_version",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "activity",
+ "columnName": "activity",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "serverBackgroundDefault",
+ "columnName": "background_default",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "serverBackgroundPlain",
+ "columnName": "background_plain",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocument",
+ "columnName": "richdocument",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocumentMimetypeList",
+ "columnName": "richdocument_mimetype_list",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "richdocumentDirectEditing",
+ "columnName": "richdocument_direct_editing",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocumentTemplates",
+ "columnName": "richdocument_direct_templates",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocumentOptionalMimetypeList",
+ "columnName": "richdocument_optional_mimetype_list",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "sharingPublicAskForOptionalPassword",
+ "columnName": "sharing_public_ask_for_optional_password",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocumentProductName",
+ "columnName": "richdocument_product_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "directEditingEtag",
+ "columnName": "direct_editing_etag",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "userStatus",
+ "columnName": "user_status",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "userStatusSupportsEmoji",
+ "columnName": "user_status_supports_emoji",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "filesLockingVersion",
+ "columnName": "files_locking_version",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "groupfolders",
+ "columnName": "groupfolders",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "dropAccount",
+ "columnName": "drop_account",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "securityGuard",
+ "columnName": "security_guard",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "forbiddenFileNameCharacters",
+ "columnName": "forbidden_filename_characters",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "forbiddenFileNames",
+ "columnName": "forbidden_filenames",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "forbiddenFileNameExtensions",
+ "columnName": "forbidden_filename_extensions",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "forbiddenFilenameBaseNames",
+ "columnName": "forbidden_filename_basenames",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "filesDownloadLimit",
+ "columnName": "files_download_limit",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesDownloadLimitDefault",
+ "columnName": "files_download_limit_default",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "recommendation",
+ "columnName": "recommendation",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "notesFolderPath",
+ "columnName": "notes_folder_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "defaultPermissions",
+ "columnName": "default_permissions",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "userStatusSupportsBusy",
+ "columnName": "user_status_supports_busy",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isWCFEnabled",
+ "columnName": "windows_compatible_filenames",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "hasValidSubscription",
+ "columnName": "has_valid_subscription",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "clientIntegrationJson",
+ "columnName": "client_integration_json",
+ "affinity": "TEXT"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "external_links",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `icon_url` TEXT, `language` TEXT, `type` INTEGER, `name` TEXT, `url` TEXT, `redirect` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "iconUrl",
+ "columnName": "icon_url",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "language",
+ "columnName": "language",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "url",
+ "columnName": "url",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "redirect",
+ "columnName": "redirect",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "filelist",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `filename` TEXT, `encrypted_filename` TEXT, `path` TEXT, `path_decrypted` TEXT, `parent` INTEGER, `created` INTEGER, `modified` INTEGER, `content_type` TEXT, `content_length` INTEGER, `media_path` TEXT, `file_owner` TEXT, `last_sync_date` INTEGER, `last_sync_date_for_data` INTEGER, `modified_at_last_sync_for_data` INTEGER, `etag` TEXT, `etag_on_server` TEXT, `share_by_link` INTEGER, `permissions` TEXT, `remote_id` TEXT, `local_id` INTEGER NOT NULL DEFAULT -1, `update_thumbnail` INTEGER, `is_downloading` INTEGER, `favorite` INTEGER, `hidden` INTEGER, `is_encrypted` INTEGER, `etag_in_conflict` TEXT, `shared_via_users` INTEGER, `mount_type` INTEGER, `has_preview` INTEGER, `unread_comments_count` INTEGER, `owner_id` TEXT, `owner_display_name` TEXT, `note` TEXT, `sharees` TEXT, `rich_workspace` TEXT, `metadata_size` TEXT, `metadata_live_photo` TEXT, `locked` INTEGER, `lock_type` INTEGER, `lock_owner` TEXT, `lock_owner_display_name` TEXT, `lock_owner_editor` TEXT, `lock_timestamp` INTEGER, `lock_timeout` INTEGER, `lock_token` TEXT, `tags` TEXT, `metadata_gps` TEXT, `e2e_counter` INTEGER, `internal_two_way_sync_timestamp` INTEGER, `internal_two_way_sync_result` TEXT, `uploaded` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "filename",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "encryptedName",
+ "columnName": "encrypted_filename",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "pathDecrypted",
+ "columnName": "path_decrypted",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "parent",
+ "columnName": "parent",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "creation",
+ "columnName": "created",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "modified",
+ "columnName": "modified",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "contentType",
+ "columnName": "content_type",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "contentLength",
+ "columnName": "content_length",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "storagePath",
+ "columnName": "media_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "file_owner",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "lastSyncDate",
+ "columnName": "last_sync_date",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lastSyncDateForData",
+ "columnName": "last_sync_date_for_data",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "modifiedAtLastSyncForData",
+ "columnName": "modified_at_last_sync_for_data",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "etagOnServer",
+ "columnName": "etag_on_server",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "sharedViaLink",
+ "columnName": "share_by_link",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "remoteId",
+ "columnName": "remote_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "localId",
+ "columnName": "local_id",
+ "affinity": "INTEGER",
+ "notNull": true,
+ "defaultValue": "-1"
+ },
+ {
+ "fieldPath": "updateThumbnail",
+ "columnName": "update_thumbnail",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isDownloading",
+ "columnName": "is_downloading",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "favorite",
+ "columnName": "favorite",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isEncrypted",
+ "columnName": "is_encrypted",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "etagInConflict",
+ "columnName": "etag_in_conflict",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "sharedWithSharee",
+ "columnName": "shared_via_users",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "mountType",
+ "columnName": "mount_type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "hasPreview",
+ "columnName": "has_preview",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "unreadCommentsCount",
+ "columnName": "unread_comments_count",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "ownerId",
+ "columnName": "owner_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "ownerDisplayName",
+ "columnName": "owner_display_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "sharees",
+ "columnName": "sharees",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "richWorkspace",
+ "columnName": "rich_workspace",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "metadataSize",
+ "columnName": "metadata_size",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "metadataLivePhoto",
+ "columnName": "metadata_live_photo",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "locked",
+ "columnName": "locked",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lockType",
+ "columnName": "lock_type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lockOwner",
+ "columnName": "lock_owner",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "lockOwnerDisplayName",
+ "columnName": "lock_owner_display_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "lockOwnerEditor",
+ "columnName": "lock_owner_editor",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "lockTimestamp",
+ "columnName": "lock_timestamp",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lockTimeout",
+ "columnName": "lock_timeout",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lockToken",
+ "columnName": "lock_token",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "tags",
+ "columnName": "tags",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "metadataGPS",
+ "columnName": "metadata_gps",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "e2eCounter",
+ "columnName": "e2e_counter",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "internalTwoWaySync",
+ "columnName": "internal_two_way_sync_timestamp",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "internalTwoWaySyncResult",
+ "columnName": "internal_two_way_sync_result",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "uploaded",
+ "columnName": "uploaded",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "filesystem",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `is_folder` INTEGER, `found_at` INTEGER, `upload_triggered` INTEGER, `syncedfolder_id` TEXT, `crc32` TEXT, `modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "fileIsFolder",
+ "columnName": "is_folder",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "fileFoundRecently",
+ "columnName": "found_at",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "fileSentForUpload",
+ "columnName": "upload_triggered",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "syncedFolderId",
+ "columnName": "syncedfolder_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "crc32",
+ "columnName": "crc32",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "fileModified",
+ "columnName": "modified_at",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "ocshares",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `file_source` INTEGER, `item_source` INTEGER, `share_type` INTEGER, `shate_with` TEXT, `path` TEXT, `permissions` INTEGER, `shared_date` INTEGER, `expiration_date` INTEGER, `token` TEXT, `shared_with_display_name` TEXT, `is_directory` INTEGER, `user_id` TEXT, `id_remote_shared` INTEGER, `owner_share` TEXT, `is_password_protected` INTEGER, `note` TEXT, `hide_download` INTEGER, `share_link` TEXT, `share_label` TEXT, `download_limit_limit` INTEGER, `download_limit_count` INTEGER, `attributes` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "fileSource",
+ "columnName": "file_source",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "itemSource",
+ "columnName": "item_source",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "shareType",
+ "columnName": "share_type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "shareWith",
+ "columnName": "shate_with",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharedDate",
+ "columnName": "shared_date",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "expirationDate",
+ "columnName": "expiration_date",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "token",
+ "columnName": "token",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "shareWithDisplayName",
+ "columnName": "shared_with_display_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "isDirectory",
+ "columnName": "is_directory",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "userId",
+ "columnName": "user_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "idRemoteShared",
+ "columnName": "id_remote_shared",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "owner_share",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "isPasswordProtected",
+ "columnName": "is_password_protected",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "hideDownload",
+ "columnName": "hide_download",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "shareLink",
+ "columnName": "share_link",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "shareLabel",
+ "columnName": "share_label",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "downloadLimitLimit",
+ "columnName": "download_limit_limit",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "downloadLimitCount",
+ "columnName": "download_limit_count",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "attributes",
+ "columnName": "attributes",
+ "affinity": "TEXT"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "synced_folders",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `wifi_only` INTEGER, `charging_only` INTEGER, `existing` INTEGER, `enabled` INTEGER, `enabled_timestamp_ms` INTEGER, `subfolder_by_date` INTEGER, `account` TEXT, `upload_option` INTEGER, `name_collision_policy` INTEGER, `type` INTEGER, `hidden` INTEGER, `sub_folder_rule` INTEGER, `exclude_hidden` INTEGER, `last_scan_timestamp_ms` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "wifiOnly",
+ "columnName": "wifi_only",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "chargingOnly",
+ "columnName": "charging_only",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "existing",
+ "columnName": "existing",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "enabled",
+ "columnName": "enabled",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "enabledTimestampMs",
+ "columnName": "enabled_timestamp_ms",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "subfolderByDate",
+ "columnName": "subfolder_by_date",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "account",
+ "columnName": "account",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "uploadAction",
+ "columnName": "upload_option",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "subFolderRule",
+ "columnName": "sub_folder_rule",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "excludeHidden",
+ "columnName": "exclude_hidden",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lastScanTimestampMs",
+ "columnName": "last_scan_timestamp_ms",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "list_of_uploads",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `account_name` TEXT, `file_size` INTEGER, `status` INTEGER, `local_behaviour` INTEGER, `upload_time` INTEGER, `name_collision_policy` INTEGER, `is_create_remote_folder` INTEGER, `upload_end_timestamp` INTEGER, `upload_end_timestamp_long` INTEGER, `last_result` INTEGER, `is_while_charging_only` INTEGER, `is_wifi_only` INTEGER, `created_by` INTEGER, `folder_unlock_token` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "fileSize",
+ "columnName": "file_size",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "status",
+ "columnName": "status",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "localBehaviour",
+ "columnName": "local_behaviour",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "uploadTime",
+ "columnName": "upload_time",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isCreateRemoteFolder",
+ "columnName": "is_create_remote_folder",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "uploadEndTimestamp",
+ "columnName": "upload_end_timestamp",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "uploadEndTimestampLong",
+ "columnName": "upload_end_timestamp_long",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lastResult",
+ "columnName": "last_result",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isWhileChargingOnly",
+ "columnName": "is_while_charging_only",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isWifiOnly",
+ "columnName": "is_wifi_only",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "createdBy",
+ "columnName": "created_by",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "folderUnlockToken",
+ "columnName": "folder_unlock_token",
+ "affinity": "TEXT"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "virtual",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `type` TEXT, `ocfile_id` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "ocFileId",
+ "columnName": "ocfile_id",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "offline_operations",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `offline_operations_parent_oc_file_id` INTEGER, `offline_operations_path` TEXT, `offline_operations_type` TEXT, `offline_operations_file_name` TEXT, `offline_operations_created_at` INTEGER, `offline_operations_modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "parentOCFileId",
+ "columnName": "offline_operations_parent_oc_file_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "offline_operations_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "offline_operations_type",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "filename",
+ "columnName": "offline_operations_file_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "createdAt",
+ "columnName": "offline_operations_created_at",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "modifiedAt",
+ "columnName": "offline_operations_modified_at",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "recommended_files",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL, `directory` TEXT NOT NULL, `extension` TEXT NOT NULL, `mime_type` TEXT NOT NULL, `has_preview` INTEGER NOT NULL, `reason` TEXT NOT NULL, `timestamp` INTEGER NOT NULL, `account_name` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "directory",
+ "columnName": "directory",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "extension",
+ "columnName": "extension",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "mimeType",
+ "columnName": "mime_type",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "hasPreview",
+ "columnName": "has_preview",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "reason",
+ "columnName": "reason",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "timestamp",
+ "columnName": "timestamp",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account_name",
+ "affinity": "TEXT"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "assistant",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `accountName` TEXT, `type` TEXT, `status` TEXT, `userId` TEXT, `appId` TEXT, `input` TEXT, `output` TEXT, `completionExpectedAt` INTEGER, `progress` INTEGER, `lastUpdated` INTEGER, `scheduledAt` INTEGER, `endedAt` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "id",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "accountName",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "status",
+ "columnName": "status",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "userId",
+ "columnName": "userId",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "appId",
+ "columnName": "appId",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "input",
+ "columnName": "input",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "output",
+ "columnName": "output",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "completionExpectedAt",
+ "columnName": "completionExpectedAt",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "progress",
+ "columnName": "progress",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lastUpdated",
+ "columnName": "lastUpdated",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "scheduledAt",
+ "columnName": "scheduledAt",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "endedAt",
+ "columnName": "endedAt",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "id"
+ ]
+ }
+ }
+ ],
+ "setupQueries": [
+ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
+ "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '0fa307b3a70cccc7f1486f39b59d6e2b')"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/app/schemas/com.nextcloud.client.database.NextcloudDatabase/65.json b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/65.json
new file mode 100644
index 000000000000..cba9c61eda96
--- /dev/null
+++ b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/65.json
@@ -0,0 +1,1118 @@
+{
+ "formatVersion": 1,
+ "database": {
+ "version": 65,
+ "identityHash": "1aa68e80a3cb0006ef54981abad692a9",
+ "entities": [
+ {
+ "tableName": "arbitrary_data",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `cloud_id` TEXT, `key` TEXT, `value` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "cloudId",
+ "columnName": "cloud_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "key",
+ "columnName": "key",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "value",
+ "columnName": "value",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "capabilities",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `account` TEXT, `version_mayor` INTEGER, `version_minor` INTEGER, `version_micro` INTEGER, `version_string` TEXT, `version_edition` TEXT, `extended_support` INTEGER, `core_pollinterval` INTEGER, `sharing_api_enabled` INTEGER, `sharing_public_enabled` INTEGER, `sharing_public_password_enforced` INTEGER, `sharing_public_expire_date_enabled` INTEGER, `sharing_public_expire_date_days` INTEGER, `sharing_public_expire_date_enforced` INTEGER, `sharing_public_send_mail` INTEGER, `sharing_public_upload` INTEGER, `sharing_user_send_mail` INTEGER, `sharing_resharing` INTEGER, `sharing_federation_outgoing` INTEGER, `sharing_federation_incoming` INTEGER, `files_bigfilechunking` INTEGER, `files_undelete` INTEGER, `files_versioning` INTEGER, `external_links` INTEGER, `server_name` TEXT, `server_color` TEXT, `server_text_color` TEXT, `server_element_color` TEXT, `server_slogan` TEXT, `server_logo` TEXT, `background_url` TEXT, `end_to_end_encryption` INTEGER, `activity` INTEGER, `background_default` INTEGER, `background_plain` INTEGER, `richdocument` INTEGER, `richdocument_mimetype_list` TEXT, `richdocument_direct_editing` INTEGER, `richdocument_direct_templates` INTEGER, `richdocument_optional_mimetype_list` TEXT, `sharing_public_ask_for_optional_password` INTEGER, `richdocument_product_name` TEXT, `direct_editing_etag` TEXT, `user_status` INTEGER, `user_status_supports_emoji` INTEGER, `etag` TEXT, `files_locking_version` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMajor",
+ "columnName": "version_mayor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMinor",
+ "columnName": "version_minor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMicro",
+ "columnName": "version_micro",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionString",
+ "columnName": "version_string",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionEditor",
+ "columnName": "version_edition",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "extendedSupport",
+ "columnName": "extended_support",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "corePollinterval",
+ "columnName": "core_pollinterval",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingApiEnabled",
+ "columnName": "sharing_api_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicEnabled",
+ "columnName": "sharing_public_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicPasswordEnforced",
+ "columnName": "sharing_public_password_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnabled",
+ "columnName": "sharing_public_expire_date_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateDays",
+ "columnName": "sharing_public_expire_date_days",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnforced",
+ "columnName": "sharing_public_expire_date_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicSendMail",
+ "columnName": "sharing_public_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicUpload",
+ "columnName": "sharing_public_upload",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingUserSendMail",
+ "columnName": "sharing_user_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingResharing",
+ "columnName": "sharing_resharing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationOutgoing",
+ "columnName": "sharing_federation_outgoing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationIncoming",
+ "columnName": "sharing_federation_incoming",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesBigfilechunking",
+ "columnName": "files_bigfilechunking",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesUndelete",
+ "columnName": "files_undelete",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesVersioning",
+ "columnName": "files_versioning",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "externalLinks",
+ "columnName": "external_links",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverName",
+ "columnName": "server_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverColor",
+ "columnName": "server_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverTextColor",
+ "columnName": "server_text_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverElementColor",
+ "columnName": "server_element_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverSlogan",
+ "columnName": "server_slogan",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverLogo",
+ "columnName": "server_logo",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundUrl",
+ "columnName": "background_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryption",
+ "columnName": "end_to_end_encryption",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "activity",
+ "columnName": "activity",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundDefault",
+ "columnName": "background_default",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundPlain",
+ "columnName": "background_plain",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocument",
+ "columnName": "richdocument",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentMimetypeList",
+ "columnName": "richdocument_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentDirectEditing",
+ "columnName": "richdocument_direct_editing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentTemplates",
+ "columnName": "richdocument_direct_templates",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentOptionalMimetypeList",
+ "columnName": "richdocument_optional_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicAskForOptionalPassword",
+ "columnName": "sharing_public_ask_for_optional_password",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentProductName",
+ "columnName": "richdocument_product_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "directEditingEtag",
+ "columnName": "direct_editing_etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatus",
+ "columnName": "user_status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatusSupportsEmoji",
+ "columnName": "user_status_supports_emoji",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesLockingVersion",
+ "columnName": "files_locking_version",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "external_links",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `icon_url` TEXT, `language` TEXT, `type` INTEGER, `name` TEXT, `url` TEXT, `redirect` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "iconUrl",
+ "columnName": "icon_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "language",
+ "columnName": "language",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "url",
+ "columnName": "url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "redirect",
+ "columnName": "redirect",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filelist",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `filename` TEXT, `encrypted_filename` TEXT, `path` TEXT, `path_decrypted` TEXT, `parent` INTEGER, `created` INTEGER, `modified` INTEGER, `content_type` TEXT, `content_length` INTEGER, `media_path` TEXT, `file_owner` TEXT, `last_sync_date` INTEGER, `last_sync_date_for_data` INTEGER, `modified_at_last_sync_for_data` INTEGER, `etag` TEXT, `etag_on_server` TEXT, `share_by_link` INTEGER, `permissions` TEXT, `remote_id` TEXT, `update_thumbnail` INTEGER, `is_downloading` INTEGER, `favorite` INTEGER, `is_encrypted` INTEGER, `etag_in_conflict` TEXT, `shared_via_users` INTEGER, `mount_type` INTEGER, `has_preview` INTEGER, `unread_comments_count` INTEGER, `owner_id` TEXT, `owner_display_name` TEXT, `note` TEXT, `sharees` TEXT, `rich_workspace` TEXT, `metadata_size` TEXT, `locked` INTEGER, `lock_type` INTEGER, `lock_owner` TEXT, `lock_owner_display_name` TEXT, `lock_owner_editor` TEXT, `lock_timestamp` INTEGER, `lock_timeout` INTEGER, `lock_token` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "encryptedName",
+ "columnName": "encrypted_filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "pathDecrypted",
+ "columnName": "path_decrypted",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "parent",
+ "columnName": "parent",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "creation",
+ "columnName": "created",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modified",
+ "columnName": "modified",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentType",
+ "columnName": "content_type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentLength",
+ "columnName": "content_length",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "storagePath",
+ "columnName": "media_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "file_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDate",
+ "columnName": "last_sync_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDateForData",
+ "columnName": "last_sync_date_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modifiedAtLastSyncForData",
+ "columnName": "modified_at_last_sync_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagOnServer",
+ "columnName": "etag_on_server",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedViaLink",
+ "columnName": "share_by_link",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remoteId",
+ "columnName": "remote_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "updateThumbnail",
+ "columnName": "update_thumbnail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDownloading",
+ "columnName": "is_downloading",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "favorite",
+ "columnName": "favorite",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isEncrypted",
+ "columnName": "is_encrypted",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagInConflict",
+ "columnName": "etag_in_conflict",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedWithSharee",
+ "columnName": "shared_via_users",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "mountType",
+ "columnName": "mount_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hasPreview",
+ "columnName": "has_preview",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "unreadCommentsCount",
+ "columnName": "unread_comments_count",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerId",
+ "columnName": "owner_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerDisplayName",
+ "columnName": "owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharees",
+ "columnName": "sharees",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richWorkspace",
+ "columnName": "rich_workspace",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataSize",
+ "columnName": "metadata_size",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "locked",
+ "columnName": "locked",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockType",
+ "columnName": "lock_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwner",
+ "columnName": "lock_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerDisplayName",
+ "columnName": "lock_owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerEditor",
+ "columnName": "lock_owner_editor",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimestamp",
+ "columnName": "lock_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimeout",
+ "columnName": "lock_timeout",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockToken",
+ "columnName": "lock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filesystem",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `is_folder` INTEGER, `found_at` INTEGER, `upload_triggered` INTEGER, `syncedfolder_id` TEXT, `crc32` TEXT, `modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileIsFolder",
+ "columnName": "is_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileFoundRecently",
+ "columnName": "found_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSentForUpload",
+ "columnName": "upload_triggered",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "syncedFolderId",
+ "columnName": "syncedfolder_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "crc32",
+ "columnName": "crc32",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileModified",
+ "columnName": "modified_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "ocshares",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `file_source` INTEGER, `item_source` INTEGER, `share_type` INTEGER, `shate_with` TEXT, `path` TEXT, `permissions` INTEGER, `shared_date` INTEGER, `expiration_date` INTEGER, `token` TEXT, `shared_with_display_name` TEXT, `is_directory` INTEGER, `user_id` INTEGER, `id_remote_shared` INTEGER, `owner_share` TEXT, `is_password_protected` INTEGER, `note` TEXT, `hide_download` INTEGER, `share_link` TEXT, `share_label` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSource",
+ "columnName": "file_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "itemSource",
+ "columnName": "item_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareType",
+ "columnName": "share_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWith",
+ "columnName": "shate_with",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedDate",
+ "columnName": "shared_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "expirationDate",
+ "columnName": "expiration_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "token",
+ "columnName": "token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWithDisplayName",
+ "columnName": "shared_with_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDirectory",
+ "columnName": "is_directory",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userId",
+ "columnName": "user_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "idRemoteShared",
+ "columnName": "id_remote_shared",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "owner_share",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isPasswordProtected",
+ "columnName": "is_password_protected",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hideDownload",
+ "columnName": "hide_download",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLink",
+ "columnName": "share_link",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLabel",
+ "columnName": "share_label",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "synced_folders",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `wifi_only` INTEGER, `charging_only` INTEGER, `existing` INTEGER, `enabled` INTEGER, `enabled_timestamp_ms` INTEGER, `subfolder_by_date` INTEGER, `account` TEXT, `upload_option` INTEGER, `name_collision_policy` INTEGER, `type` INTEGER, `hidden` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "wifiOnly",
+ "columnName": "wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "chargingOnly",
+ "columnName": "charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "existing",
+ "columnName": "existing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabled",
+ "columnName": "enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabledTimestampMs",
+ "columnName": "enabled_timestamp_ms",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "subfolderByDate",
+ "columnName": "subfolder_by_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "account",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadAction",
+ "columnName": "upload_option",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "list_of_uploads",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `account_name` TEXT, `file_size` INTEGER, `status` INTEGER, `local_behaviour` INTEGER, `upload_time` INTEGER, `name_collision_policy` INTEGER, `is_create_remote_folder` INTEGER, `upload_end_timestamp` INTEGER, `last_result` INTEGER, `is_while_charging_only` INTEGER, `is_wifi_only` INTEGER, `created_by` INTEGER, `folder_unlock_token` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSize",
+ "columnName": "file_size",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "status",
+ "columnName": "status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localBehaviour",
+ "columnName": "local_behaviour",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadTime",
+ "columnName": "upload_time",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isCreateRemoteFolder",
+ "columnName": "is_create_remote_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadEndTimestamp",
+ "columnName": "upload_end_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastResult",
+ "columnName": "last_result",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWhileChargingOnly",
+ "columnName": "is_while_charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWifiOnly",
+ "columnName": "is_wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "createdBy",
+ "columnName": "created_by",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "folderUnlockToken",
+ "columnName": "folder_unlock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "virtual",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `type` TEXT, `ocfile_id` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ocFileId",
+ "columnName": "ocfile_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [],
+ "foreignKeys": []
+ }
+ ],
+ "views": [],
+ "setupQueries": [
+ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
+ "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '1aa68e80a3cb0006ef54981abad692a9')"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/app/schemas/com.nextcloud.client.database.NextcloudDatabase/66.json b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/66.json
new file mode 100644
index 000000000000..e001fe37169f
--- /dev/null
+++ b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/66.json
@@ -0,0 +1,1124 @@
+{
+ "formatVersion": 1,
+ "database": {
+ "version": 66,
+ "identityHash": "97be4a2bf1d8d2a4db027a996a823010",
+ "entities": [
+ {
+ "tableName": "arbitrary_data",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `cloud_id` TEXT, `key` TEXT, `value` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "cloudId",
+ "columnName": "cloud_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "key",
+ "columnName": "key",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "value",
+ "columnName": "value",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "capabilities",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `account` TEXT, `version_mayor` INTEGER, `version_minor` INTEGER, `version_micro` INTEGER, `version_string` TEXT, `version_edition` TEXT, `extended_support` INTEGER, `core_pollinterval` INTEGER, `sharing_api_enabled` INTEGER, `sharing_public_enabled` INTEGER, `sharing_public_password_enforced` INTEGER, `sharing_public_expire_date_enabled` INTEGER, `sharing_public_expire_date_days` INTEGER, `sharing_public_expire_date_enforced` INTEGER, `sharing_public_send_mail` INTEGER, `sharing_public_upload` INTEGER, `sharing_user_send_mail` INTEGER, `sharing_resharing` INTEGER, `sharing_federation_outgoing` INTEGER, `sharing_federation_incoming` INTEGER, `files_bigfilechunking` INTEGER, `files_undelete` INTEGER, `files_versioning` INTEGER, `external_links` INTEGER, `server_name` TEXT, `server_color` TEXT, `server_text_color` TEXT, `server_element_color` TEXT, `server_slogan` TEXT, `server_logo` TEXT, `background_url` TEXT, `end_to_end_encryption` INTEGER, `end_to_end_encryption_keys_exist` INTEGER, `activity` INTEGER, `background_default` INTEGER, `background_plain` INTEGER, `richdocument` INTEGER, `richdocument_mimetype_list` TEXT, `richdocument_direct_editing` INTEGER, `richdocument_direct_templates` INTEGER, `richdocument_optional_mimetype_list` TEXT, `sharing_public_ask_for_optional_password` INTEGER, `richdocument_product_name` TEXT, `direct_editing_etag` TEXT, `user_status` INTEGER, `user_status_supports_emoji` INTEGER, `etag` TEXT, `files_locking_version` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMajor",
+ "columnName": "version_mayor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMinor",
+ "columnName": "version_minor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMicro",
+ "columnName": "version_micro",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionString",
+ "columnName": "version_string",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionEditor",
+ "columnName": "version_edition",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "extendedSupport",
+ "columnName": "extended_support",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "corePollinterval",
+ "columnName": "core_pollinterval",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingApiEnabled",
+ "columnName": "sharing_api_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicEnabled",
+ "columnName": "sharing_public_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicPasswordEnforced",
+ "columnName": "sharing_public_password_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnabled",
+ "columnName": "sharing_public_expire_date_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateDays",
+ "columnName": "sharing_public_expire_date_days",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnforced",
+ "columnName": "sharing_public_expire_date_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicSendMail",
+ "columnName": "sharing_public_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicUpload",
+ "columnName": "sharing_public_upload",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingUserSendMail",
+ "columnName": "sharing_user_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingResharing",
+ "columnName": "sharing_resharing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationOutgoing",
+ "columnName": "sharing_federation_outgoing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationIncoming",
+ "columnName": "sharing_federation_incoming",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesBigfilechunking",
+ "columnName": "files_bigfilechunking",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesUndelete",
+ "columnName": "files_undelete",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesVersioning",
+ "columnName": "files_versioning",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "externalLinks",
+ "columnName": "external_links",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverName",
+ "columnName": "server_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverColor",
+ "columnName": "server_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverTextColor",
+ "columnName": "server_text_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverElementColor",
+ "columnName": "server_element_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverSlogan",
+ "columnName": "server_slogan",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverLogo",
+ "columnName": "server_logo",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundUrl",
+ "columnName": "background_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryption",
+ "columnName": "end_to_end_encryption",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryptionKeysExist",
+ "columnName": "end_to_end_encryption_keys_exist",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "activity",
+ "columnName": "activity",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundDefault",
+ "columnName": "background_default",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundPlain",
+ "columnName": "background_plain",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocument",
+ "columnName": "richdocument",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentMimetypeList",
+ "columnName": "richdocument_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentDirectEditing",
+ "columnName": "richdocument_direct_editing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentTemplates",
+ "columnName": "richdocument_direct_templates",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentOptionalMimetypeList",
+ "columnName": "richdocument_optional_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicAskForOptionalPassword",
+ "columnName": "sharing_public_ask_for_optional_password",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentProductName",
+ "columnName": "richdocument_product_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "directEditingEtag",
+ "columnName": "direct_editing_etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatus",
+ "columnName": "user_status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatusSupportsEmoji",
+ "columnName": "user_status_supports_emoji",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesLockingVersion",
+ "columnName": "files_locking_version",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "external_links",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `icon_url` TEXT, `language` TEXT, `type` INTEGER, `name` TEXT, `url` TEXT, `redirect` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "iconUrl",
+ "columnName": "icon_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "language",
+ "columnName": "language",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "url",
+ "columnName": "url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "redirect",
+ "columnName": "redirect",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filelist",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `filename` TEXT, `encrypted_filename` TEXT, `path` TEXT, `path_decrypted` TEXT, `parent` INTEGER, `created` INTEGER, `modified` INTEGER, `content_type` TEXT, `content_length` INTEGER, `media_path` TEXT, `file_owner` TEXT, `last_sync_date` INTEGER, `last_sync_date_for_data` INTEGER, `modified_at_last_sync_for_data` INTEGER, `etag` TEXT, `etag_on_server` TEXT, `share_by_link` INTEGER, `permissions` TEXT, `remote_id` TEXT, `update_thumbnail` INTEGER, `is_downloading` INTEGER, `favorite` INTEGER, `is_encrypted` INTEGER, `etag_in_conflict` TEXT, `shared_via_users` INTEGER, `mount_type` INTEGER, `has_preview` INTEGER, `unread_comments_count` INTEGER, `owner_id` TEXT, `owner_display_name` TEXT, `note` TEXT, `sharees` TEXT, `rich_workspace` TEXT, `metadata_size` TEXT, `locked` INTEGER, `lock_type` INTEGER, `lock_owner` TEXT, `lock_owner_display_name` TEXT, `lock_owner_editor` TEXT, `lock_timestamp` INTEGER, `lock_timeout` INTEGER, `lock_token` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "encryptedName",
+ "columnName": "encrypted_filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "pathDecrypted",
+ "columnName": "path_decrypted",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "parent",
+ "columnName": "parent",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "creation",
+ "columnName": "created",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modified",
+ "columnName": "modified",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentType",
+ "columnName": "content_type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentLength",
+ "columnName": "content_length",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "storagePath",
+ "columnName": "media_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "file_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDate",
+ "columnName": "last_sync_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDateForData",
+ "columnName": "last_sync_date_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modifiedAtLastSyncForData",
+ "columnName": "modified_at_last_sync_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagOnServer",
+ "columnName": "etag_on_server",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedViaLink",
+ "columnName": "share_by_link",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remoteId",
+ "columnName": "remote_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "updateThumbnail",
+ "columnName": "update_thumbnail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDownloading",
+ "columnName": "is_downloading",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "favorite",
+ "columnName": "favorite",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isEncrypted",
+ "columnName": "is_encrypted",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagInConflict",
+ "columnName": "etag_in_conflict",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedWithSharee",
+ "columnName": "shared_via_users",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "mountType",
+ "columnName": "mount_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hasPreview",
+ "columnName": "has_preview",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "unreadCommentsCount",
+ "columnName": "unread_comments_count",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerId",
+ "columnName": "owner_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerDisplayName",
+ "columnName": "owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharees",
+ "columnName": "sharees",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richWorkspace",
+ "columnName": "rich_workspace",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataSize",
+ "columnName": "metadata_size",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "locked",
+ "columnName": "locked",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockType",
+ "columnName": "lock_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwner",
+ "columnName": "lock_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerDisplayName",
+ "columnName": "lock_owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerEditor",
+ "columnName": "lock_owner_editor",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimestamp",
+ "columnName": "lock_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimeout",
+ "columnName": "lock_timeout",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockToken",
+ "columnName": "lock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filesystem",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `is_folder` INTEGER, `found_at` INTEGER, `upload_triggered` INTEGER, `syncedfolder_id` TEXT, `crc32` TEXT, `modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileIsFolder",
+ "columnName": "is_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileFoundRecently",
+ "columnName": "found_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSentForUpload",
+ "columnName": "upload_triggered",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "syncedFolderId",
+ "columnName": "syncedfolder_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "crc32",
+ "columnName": "crc32",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileModified",
+ "columnName": "modified_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "ocshares",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `file_source` INTEGER, `item_source` INTEGER, `share_type` INTEGER, `shate_with` TEXT, `path` TEXT, `permissions` INTEGER, `shared_date` INTEGER, `expiration_date` INTEGER, `token` TEXT, `shared_with_display_name` TEXT, `is_directory` INTEGER, `user_id` INTEGER, `id_remote_shared` INTEGER, `owner_share` TEXT, `is_password_protected` INTEGER, `note` TEXT, `hide_download` INTEGER, `share_link` TEXT, `share_label` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSource",
+ "columnName": "file_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "itemSource",
+ "columnName": "item_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareType",
+ "columnName": "share_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWith",
+ "columnName": "shate_with",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedDate",
+ "columnName": "shared_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "expirationDate",
+ "columnName": "expiration_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "token",
+ "columnName": "token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWithDisplayName",
+ "columnName": "shared_with_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDirectory",
+ "columnName": "is_directory",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userId",
+ "columnName": "user_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "idRemoteShared",
+ "columnName": "id_remote_shared",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "owner_share",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isPasswordProtected",
+ "columnName": "is_password_protected",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hideDownload",
+ "columnName": "hide_download",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLink",
+ "columnName": "share_link",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLabel",
+ "columnName": "share_label",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "synced_folders",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `wifi_only` INTEGER, `charging_only` INTEGER, `existing` INTEGER, `enabled` INTEGER, `enabled_timestamp_ms` INTEGER, `subfolder_by_date` INTEGER, `account` TEXT, `upload_option` INTEGER, `name_collision_policy` INTEGER, `type` INTEGER, `hidden` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "wifiOnly",
+ "columnName": "wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "chargingOnly",
+ "columnName": "charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "existing",
+ "columnName": "existing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabled",
+ "columnName": "enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabledTimestampMs",
+ "columnName": "enabled_timestamp_ms",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "subfolderByDate",
+ "columnName": "subfolder_by_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "account",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadAction",
+ "columnName": "upload_option",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "list_of_uploads",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `account_name` TEXT, `file_size` INTEGER, `status` INTEGER, `local_behaviour` INTEGER, `upload_time` INTEGER, `name_collision_policy` INTEGER, `is_create_remote_folder` INTEGER, `upload_end_timestamp` INTEGER, `last_result` INTEGER, `is_while_charging_only` INTEGER, `is_wifi_only` INTEGER, `created_by` INTEGER, `folder_unlock_token` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSize",
+ "columnName": "file_size",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "status",
+ "columnName": "status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localBehaviour",
+ "columnName": "local_behaviour",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadTime",
+ "columnName": "upload_time",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isCreateRemoteFolder",
+ "columnName": "is_create_remote_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadEndTimestamp",
+ "columnName": "upload_end_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastResult",
+ "columnName": "last_result",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWhileChargingOnly",
+ "columnName": "is_while_charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWifiOnly",
+ "columnName": "is_wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "createdBy",
+ "columnName": "created_by",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "folderUnlockToken",
+ "columnName": "folder_unlock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "virtual",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `type` TEXT, `ocfile_id` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ocFileId",
+ "columnName": "ocfile_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [],
+ "foreignKeys": []
+ }
+ ],
+ "views": [],
+ "setupQueries": [
+ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
+ "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '97be4a2bf1d8d2a4db027a996a823010')"
+ ]
+ }
+}
diff --git a/app/schemas/com.nextcloud.client.database.NextcloudDatabase/67.json b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/67.json
new file mode 100644
index 000000000000..15752cfeb4be
--- /dev/null
+++ b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/67.json
@@ -0,0 +1,1130 @@
+{
+ "formatVersion": 1,
+ "database": {
+ "version": 67,
+ "identityHash": "be969fd72e75dd6116b4fa746bcf5b6a",
+ "entities": [
+ {
+ "tableName": "arbitrary_data",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `cloud_id` TEXT, `key` TEXT, `value` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "cloudId",
+ "columnName": "cloud_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "key",
+ "columnName": "key",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "value",
+ "columnName": "value",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "capabilities",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `account` TEXT, `version_mayor` INTEGER, `version_minor` INTEGER, `version_micro` INTEGER, `version_string` TEXT, `version_edition` TEXT, `extended_support` INTEGER, `core_pollinterval` INTEGER, `sharing_api_enabled` INTEGER, `sharing_public_enabled` INTEGER, `sharing_public_password_enforced` INTEGER, `sharing_public_expire_date_enabled` INTEGER, `sharing_public_expire_date_days` INTEGER, `sharing_public_expire_date_enforced` INTEGER, `sharing_public_send_mail` INTEGER, `sharing_public_upload` INTEGER, `sharing_user_send_mail` INTEGER, `sharing_resharing` INTEGER, `sharing_federation_outgoing` INTEGER, `sharing_federation_incoming` INTEGER, `files_bigfilechunking` INTEGER, `files_undelete` INTEGER, `files_versioning` INTEGER, `external_links` INTEGER, `server_name` TEXT, `server_color` TEXT, `server_text_color` TEXT, `server_element_color` TEXT, `server_slogan` TEXT, `server_logo` TEXT, `background_url` TEXT, `end_to_end_encryption` INTEGER, `end_to_end_encryption_keys_exist` INTEGER, `activity` INTEGER, `background_default` INTEGER, `background_plain` INTEGER, `richdocument` INTEGER, `richdocument_mimetype_list` TEXT, `richdocument_direct_editing` INTEGER, `richdocument_direct_templates` INTEGER, `richdocument_optional_mimetype_list` TEXT, `sharing_public_ask_for_optional_password` INTEGER, `richdocument_product_name` TEXT, `direct_editing_etag` TEXT, `user_status` INTEGER, `user_status_supports_emoji` INTEGER, `etag` TEXT, `files_locking_version` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMajor",
+ "columnName": "version_mayor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMinor",
+ "columnName": "version_minor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMicro",
+ "columnName": "version_micro",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionString",
+ "columnName": "version_string",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionEditor",
+ "columnName": "version_edition",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "extendedSupport",
+ "columnName": "extended_support",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "corePollinterval",
+ "columnName": "core_pollinterval",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingApiEnabled",
+ "columnName": "sharing_api_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicEnabled",
+ "columnName": "sharing_public_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicPasswordEnforced",
+ "columnName": "sharing_public_password_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnabled",
+ "columnName": "sharing_public_expire_date_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateDays",
+ "columnName": "sharing_public_expire_date_days",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnforced",
+ "columnName": "sharing_public_expire_date_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicSendMail",
+ "columnName": "sharing_public_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicUpload",
+ "columnName": "sharing_public_upload",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingUserSendMail",
+ "columnName": "sharing_user_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingResharing",
+ "columnName": "sharing_resharing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationOutgoing",
+ "columnName": "sharing_federation_outgoing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationIncoming",
+ "columnName": "sharing_federation_incoming",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesBigfilechunking",
+ "columnName": "files_bigfilechunking",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesUndelete",
+ "columnName": "files_undelete",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesVersioning",
+ "columnName": "files_versioning",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "externalLinks",
+ "columnName": "external_links",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverName",
+ "columnName": "server_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverColor",
+ "columnName": "server_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverTextColor",
+ "columnName": "server_text_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverElementColor",
+ "columnName": "server_element_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverSlogan",
+ "columnName": "server_slogan",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverLogo",
+ "columnName": "server_logo",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundUrl",
+ "columnName": "background_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryption",
+ "columnName": "end_to_end_encryption",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryptionKeysExist",
+ "columnName": "end_to_end_encryption_keys_exist",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "activity",
+ "columnName": "activity",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundDefault",
+ "columnName": "background_default",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundPlain",
+ "columnName": "background_plain",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocument",
+ "columnName": "richdocument",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentMimetypeList",
+ "columnName": "richdocument_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentDirectEditing",
+ "columnName": "richdocument_direct_editing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentTemplates",
+ "columnName": "richdocument_direct_templates",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentOptionalMimetypeList",
+ "columnName": "richdocument_optional_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicAskForOptionalPassword",
+ "columnName": "sharing_public_ask_for_optional_password",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentProductName",
+ "columnName": "richdocument_product_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "directEditingEtag",
+ "columnName": "direct_editing_etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatus",
+ "columnName": "user_status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatusSupportsEmoji",
+ "columnName": "user_status_supports_emoji",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesLockingVersion",
+ "columnName": "files_locking_version",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "external_links",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `icon_url` TEXT, `language` TEXT, `type` INTEGER, `name` TEXT, `url` TEXT, `redirect` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "iconUrl",
+ "columnName": "icon_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "language",
+ "columnName": "language",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "url",
+ "columnName": "url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "redirect",
+ "columnName": "redirect",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filelist",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `filename` TEXT, `encrypted_filename` TEXT, `path` TEXT, `path_decrypted` TEXT, `parent` INTEGER, `created` INTEGER, `modified` INTEGER, `content_type` TEXT, `content_length` INTEGER, `media_path` TEXT, `file_owner` TEXT, `last_sync_date` INTEGER, `last_sync_date_for_data` INTEGER, `modified_at_last_sync_for_data` INTEGER, `etag` TEXT, `etag_on_server` TEXT, `share_by_link` INTEGER, `permissions` TEXT, `remote_id` TEXT, `local_id` INTEGER, `update_thumbnail` INTEGER, `is_downloading` INTEGER, `favorite` INTEGER, `is_encrypted` INTEGER, `etag_in_conflict` TEXT, `shared_via_users` INTEGER, `mount_type` INTEGER, `has_preview` INTEGER, `unread_comments_count` INTEGER, `owner_id` TEXT, `owner_display_name` TEXT, `note` TEXT, `sharees` TEXT, `rich_workspace` TEXT, `metadata_size` TEXT, `locked` INTEGER, `lock_type` INTEGER, `lock_owner` TEXT, `lock_owner_display_name` TEXT, `lock_owner_editor` TEXT, `lock_timestamp` INTEGER, `lock_timeout` INTEGER, `lock_token` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "encryptedName",
+ "columnName": "encrypted_filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "pathDecrypted",
+ "columnName": "path_decrypted",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "parent",
+ "columnName": "parent",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "creation",
+ "columnName": "created",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modified",
+ "columnName": "modified",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentType",
+ "columnName": "content_type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentLength",
+ "columnName": "content_length",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "storagePath",
+ "columnName": "media_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "file_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDate",
+ "columnName": "last_sync_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDateForData",
+ "columnName": "last_sync_date_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modifiedAtLastSyncForData",
+ "columnName": "modified_at_last_sync_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagOnServer",
+ "columnName": "etag_on_server",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedViaLink",
+ "columnName": "share_by_link",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remoteId",
+ "columnName": "remote_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localId",
+ "columnName": "local_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "updateThumbnail",
+ "columnName": "update_thumbnail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDownloading",
+ "columnName": "is_downloading",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "favorite",
+ "columnName": "favorite",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isEncrypted",
+ "columnName": "is_encrypted",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagInConflict",
+ "columnName": "etag_in_conflict",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedWithSharee",
+ "columnName": "shared_via_users",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "mountType",
+ "columnName": "mount_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hasPreview",
+ "columnName": "has_preview",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "unreadCommentsCount",
+ "columnName": "unread_comments_count",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerId",
+ "columnName": "owner_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerDisplayName",
+ "columnName": "owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharees",
+ "columnName": "sharees",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richWorkspace",
+ "columnName": "rich_workspace",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataSize",
+ "columnName": "metadata_size",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "locked",
+ "columnName": "locked",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockType",
+ "columnName": "lock_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwner",
+ "columnName": "lock_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerDisplayName",
+ "columnName": "lock_owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerEditor",
+ "columnName": "lock_owner_editor",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimestamp",
+ "columnName": "lock_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimeout",
+ "columnName": "lock_timeout",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockToken",
+ "columnName": "lock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filesystem",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `is_folder` INTEGER, `found_at` INTEGER, `upload_triggered` INTEGER, `syncedfolder_id` TEXT, `crc32` TEXT, `modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileIsFolder",
+ "columnName": "is_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileFoundRecently",
+ "columnName": "found_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSentForUpload",
+ "columnName": "upload_triggered",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "syncedFolderId",
+ "columnName": "syncedfolder_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "crc32",
+ "columnName": "crc32",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileModified",
+ "columnName": "modified_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "ocshares",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `file_source` INTEGER, `item_source` INTEGER, `share_type` INTEGER, `shate_with` TEXT, `path` TEXT, `permissions` INTEGER, `shared_date` INTEGER, `expiration_date` INTEGER, `token` TEXT, `shared_with_display_name` TEXT, `is_directory` INTEGER, `user_id` INTEGER, `id_remote_shared` INTEGER, `owner_share` TEXT, `is_password_protected` INTEGER, `note` TEXT, `hide_download` INTEGER, `share_link` TEXT, `share_label` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSource",
+ "columnName": "file_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "itemSource",
+ "columnName": "item_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareType",
+ "columnName": "share_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWith",
+ "columnName": "shate_with",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedDate",
+ "columnName": "shared_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "expirationDate",
+ "columnName": "expiration_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "token",
+ "columnName": "token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWithDisplayName",
+ "columnName": "shared_with_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDirectory",
+ "columnName": "is_directory",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userId",
+ "columnName": "user_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "idRemoteShared",
+ "columnName": "id_remote_shared",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "owner_share",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isPasswordProtected",
+ "columnName": "is_password_protected",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hideDownload",
+ "columnName": "hide_download",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLink",
+ "columnName": "share_link",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLabel",
+ "columnName": "share_label",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "synced_folders",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `wifi_only` INTEGER, `charging_only` INTEGER, `existing` INTEGER, `enabled` INTEGER, `enabled_timestamp_ms` INTEGER, `subfolder_by_date` INTEGER, `account` TEXT, `upload_option` INTEGER, `name_collision_policy` INTEGER, `type` INTEGER, `hidden` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "wifiOnly",
+ "columnName": "wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "chargingOnly",
+ "columnName": "charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "existing",
+ "columnName": "existing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabled",
+ "columnName": "enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabledTimestampMs",
+ "columnName": "enabled_timestamp_ms",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "subfolderByDate",
+ "columnName": "subfolder_by_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "account",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadAction",
+ "columnName": "upload_option",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "list_of_uploads",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `account_name` TEXT, `file_size` INTEGER, `status` INTEGER, `local_behaviour` INTEGER, `upload_time` INTEGER, `name_collision_policy` INTEGER, `is_create_remote_folder` INTEGER, `upload_end_timestamp` INTEGER, `last_result` INTEGER, `is_while_charging_only` INTEGER, `is_wifi_only` INTEGER, `created_by` INTEGER, `folder_unlock_token` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSize",
+ "columnName": "file_size",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "status",
+ "columnName": "status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localBehaviour",
+ "columnName": "local_behaviour",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadTime",
+ "columnName": "upload_time",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isCreateRemoteFolder",
+ "columnName": "is_create_remote_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadEndTimestamp",
+ "columnName": "upload_end_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastResult",
+ "columnName": "last_result",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWhileChargingOnly",
+ "columnName": "is_while_charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWifiOnly",
+ "columnName": "is_wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "createdBy",
+ "columnName": "created_by",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "folderUnlockToken",
+ "columnName": "folder_unlock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "virtual",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `type` TEXT, `ocfile_id` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ocFileId",
+ "columnName": "ocfile_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [],
+ "foreignKeys": []
+ }
+ ],
+ "views": [],
+ "setupQueries": [
+ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
+ "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'be969fd72e75dd6116b4fa746bcf5b6a')"
+ ]
+ }
+}
diff --git a/app/schemas/com.nextcloud.client.database.NextcloudDatabase/68.json b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/68.json
new file mode 100644
index 000000000000..7fb15fcf6d81
--- /dev/null
+++ b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/68.json
@@ -0,0 +1,1131 @@
+{
+ "formatVersion": 1,
+ "database": {
+ "version": 68,
+ "identityHash": "aae2b31e197f961249b1ecd2cb13cbd1",
+ "entities": [
+ {
+ "tableName": "arbitrary_data",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `cloud_id` TEXT, `key` TEXT, `value` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "cloudId",
+ "columnName": "cloud_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "key",
+ "columnName": "key",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "value",
+ "columnName": "value",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "capabilities",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `account` TEXT, `version_mayor` INTEGER, `version_minor` INTEGER, `version_micro` INTEGER, `version_string` TEXT, `version_edition` TEXT, `extended_support` INTEGER, `core_pollinterval` INTEGER, `sharing_api_enabled` INTEGER, `sharing_public_enabled` INTEGER, `sharing_public_password_enforced` INTEGER, `sharing_public_expire_date_enabled` INTEGER, `sharing_public_expire_date_days` INTEGER, `sharing_public_expire_date_enforced` INTEGER, `sharing_public_send_mail` INTEGER, `sharing_public_upload` INTEGER, `sharing_user_send_mail` INTEGER, `sharing_resharing` INTEGER, `sharing_federation_outgoing` INTEGER, `sharing_federation_incoming` INTEGER, `files_bigfilechunking` INTEGER, `files_undelete` INTEGER, `files_versioning` INTEGER, `external_links` INTEGER, `server_name` TEXT, `server_color` TEXT, `server_text_color` TEXT, `server_element_color` TEXT, `server_slogan` TEXT, `server_logo` TEXT, `background_url` TEXT, `end_to_end_encryption` INTEGER, `end_to_end_encryption_keys_exist` INTEGER, `activity` INTEGER, `background_default` INTEGER, `background_plain` INTEGER, `richdocument` INTEGER, `richdocument_mimetype_list` TEXT, `richdocument_direct_editing` INTEGER, `richdocument_direct_templates` INTEGER, `richdocument_optional_mimetype_list` TEXT, `sharing_public_ask_for_optional_password` INTEGER, `richdocument_product_name` TEXT, `direct_editing_etag` TEXT, `user_status` INTEGER, `user_status_supports_emoji` INTEGER, `etag` TEXT, `files_locking_version` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMajor",
+ "columnName": "version_mayor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMinor",
+ "columnName": "version_minor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMicro",
+ "columnName": "version_micro",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionString",
+ "columnName": "version_string",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionEditor",
+ "columnName": "version_edition",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "extendedSupport",
+ "columnName": "extended_support",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "corePollinterval",
+ "columnName": "core_pollinterval",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingApiEnabled",
+ "columnName": "sharing_api_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicEnabled",
+ "columnName": "sharing_public_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicPasswordEnforced",
+ "columnName": "sharing_public_password_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnabled",
+ "columnName": "sharing_public_expire_date_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateDays",
+ "columnName": "sharing_public_expire_date_days",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnforced",
+ "columnName": "sharing_public_expire_date_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicSendMail",
+ "columnName": "sharing_public_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicUpload",
+ "columnName": "sharing_public_upload",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingUserSendMail",
+ "columnName": "sharing_user_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingResharing",
+ "columnName": "sharing_resharing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationOutgoing",
+ "columnName": "sharing_federation_outgoing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationIncoming",
+ "columnName": "sharing_federation_incoming",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesBigfilechunking",
+ "columnName": "files_bigfilechunking",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesUndelete",
+ "columnName": "files_undelete",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesVersioning",
+ "columnName": "files_versioning",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "externalLinks",
+ "columnName": "external_links",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverName",
+ "columnName": "server_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverColor",
+ "columnName": "server_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverTextColor",
+ "columnName": "server_text_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverElementColor",
+ "columnName": "server_element_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverSlogan",
+ "columnName": "server_slogan",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverLogo",
+ "columnName": "server_logo",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundUrl",
+ "columnName": "background_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryption",
+ "columnName": "end_to_end_encryption",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryptionKeysExist",
+ "columnName": "end_to_end_encryption_keys_exist",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "activity",
+ "columnName": "activity",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundDefault",
+ "columnName": "background_default",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundPlain",
+ "columnName": "background_plain",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocument",
+ "columnName": "richdocument",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentMimetypeList",
+ "columnName": "richdocument_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentDirectEditing",
+ "columnName": "richdocument_direct_editing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentTemplates",
+ "columnName": "richdocument_direct_templates",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentOptionalMimetypeList",
+ "columnName": "richdocument_optional_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicAskForOptionalPassword",
+ "columnName": "sharing_public_ask_for_optional_password",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentProductName",
+ "columnName": "richdocument_product_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "directEditingEtag",
+ "columnName": "direct_editing_etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatus",
+ "columnName": "user_status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatusSupportsEmoji",
+ "columnName": "user_status_supports_emoji",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesLockingVersion",
+ "columnName": "files_locking_version",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "external_links",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `icon_url` TEXT, `language` TEXT, `type` INTEGER, `name` TEXT, `url` TEXT, `redirect` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "iconUrl",
+ "columnName": "icon_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "language",
+ "columnName": "language",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "url",
+ "columnName": "url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "redirect",
+ "columnName": "redirect",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filelist",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `filename` TEXT, `encrypted_filename` TEXT, `path` TEXT, `path_decrypted` TEXT, `parent` INTEGER, `created` INTEGER, `modified` INTEGER, `content_type` TEXT, `content_length` INTEGER, `media_path` TEXT, `file_owner` TEXT, `last_sync_date` INTEGER, `last_sync_date_for_data` INTEGER, `modified_at_last_sync_for_data` INTEGER, `etag` TEXT, `etag_on_server` TEXT, `share_by_link` INTEGER, `permissions` TEXT, `remote_id` TEXT, `local_id` INTEGER NOT NULL DEFAULT -1, `update_thumbnail` INTEGER, `is_downloading` INTEGER, `favorite` INTEGER, `is_encrypted` INTEGER, `etag_in_conflict` TEXT, `shared_via_users` INTEGER, `mount_type` INTEGER, `has_preview` INTEGER, `unread_comments_count` INTEGER, `owner_id` TEXT, `owner_display_name` TEXT, `note` TEXT, `sharees` TEXT, `rich_workspace` TEXT, `metadata_size` TEXT, `locked` INTEGER, `lock_type` INTEGER, `lock_owner` TEXT, `lock_owner_display_name` TEXT, `lock_owner_editor` TEXT, `lock_timestamp` INTEGER, `lock_timeout` INTEGER, `lock_token` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "encryptedName",
+ "columnName": "encrypted_filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "pathDecrypted",
+ "columnName": "path_decrypted",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "parent",
+ "columnName": "parent",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "creation",
+ "columnName": "created",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modified",
+ "columnName": "modified",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentType",
+ "columnName": "content_type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentLength",
+ "columnName": "content_length",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "storagePath",
+ "columnName": "media_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "file_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDate",
+ "columnName": "last_sync_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDateForData",
+ "columnName": "last_sync_date_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modifiedAtLastSyncForData",
+ "columnName": "modified_at_last_sync_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagOnServer",
+ "columnName": "etag_on_server",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedViaLink",
+ "columnName": "share_by_link",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remoteId",
+ "columnName": "remote_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localId",
+ "columnName": "local_id",
+ "affinity": "INTEGER",
+ "notNull": true,
+ "defaultValue": "-1"
+ },
+ {
+ "fieldPath": "updateThumbnail",
+ "columnName": "update_thumbnail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDownloading",
+ "columnName": "is_downloading",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "favorite",
+ "columnName": "favorite",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isEncrypted",
+ "columnName": "is_encrypted",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagInConflict",
+ "columnName": "etag_in_conflict",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedWithSharee",
+ "columnName": "shared_via_users",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "mountType",
+ "columnName": "mount_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hasPreview",
+ "columnName": "has_preview",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "unreadCommentsCount",
+ "columnName": "unread_comments_count",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerId",
+ "columnName": "owner_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerDisplayName",
+ "columnName": "owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharees",
+ "columnName": "sharees",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richWorkspace",
+ "columnName": "rich_workspace",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataSize",
+ "columnName": "metadata_size",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "locked",
+ "columnName": "locked",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockType",
+ "columnName": "lock_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwner",
+ "columnName": "lock_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerDisplayName",
+ "columnName": "lock_owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerEditor",
+ "columnName": "lock_owner_editor",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimestamp",
+ "columnName": "lock_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimeout",
+ "columnName": "lock_timeout",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockToken",
+ "columnName": "lock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filesystem",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `is_folder` INTEGER, `found_at` INTEGER, `upload_triggered` INTEGER, `syncedfolder_id` TEXT, `crc32` TEXT, `modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileIsFolder",
+ "columnName": "is_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileFoundRecently",
+ "columnName": "found_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSentForUpload",
+ "columnName": "upload_triggered",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "syncedFolderId",
+ "columnName": "syncedfolder_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "crc32",
+ "columnName": "crc32",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileModified",
+ "columnName": "modified_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "ocshares",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `file_source` INTEGER, `item_source` INTEGER, `share_type` INTEGER, `shate_with` TEXT, `path` TEXT, `permissions` INTEGER, `shared_date` INTEGER, `expiration_date` INTEGER, `token` TEXT, `shared_with_display_name` TEXT, `is_directory` INTEGER, `user_id` INTEGER, `id_remote_shared` INTEGER, `owner_share` TEXT, `is_password_protected` INTEGER, `note` TEXT, `hide_download` INTEGER, `share_link` TEXT, `share_label` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSource",
+ "columnName": "file_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "itemSource",
+ "columnName": "item_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareType",
+ "columnName": "share_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWith",
+ "columnName": "shate_with",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedDate",
+ "columnName": "shared_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "expirationDate",
+ "columnName": "expiration_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "token",
+ "columnName": "token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWithDisplayName",
+ "columnName": "shared_with_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDirectory",
+ "columnName": "is_directory",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userId",
+ "columnName": "user_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "idRemoteShared",
+ "columnName": "id_remote_shared",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "owner_share",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isPasswordProtected",
+ "columnName": "is_password_protected",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hideDownload",
+ "columnName": "hide_download",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLink",
+ "columnName": "share_link",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLabel",
+ "columnName": "share_label",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "synced_folders",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `wifi_only` INTEGER, `charging_only` INTEGER, `existing` INTEGER, `enabled` INTEGER, `enabled_timestamp_ms` INTEGER, `subfolder_by_date` INTEGER, `account` TEXT, `upload_option` INTEGER, `name_collision_policy` INTEGER, `type` INTEGER, `hidden` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "wifiOnly",
+ "columnName": "wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "chargingOnly",
+ "columnName": "charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "existing",
+ "columnName": "existing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabled",
+ "columnName": "enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabledTimestampMs",
+ "columnName": "enabled_timestamp_ms",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "subfolderByDate",
+ "columnName": "subfolder_by_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "account",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadAction",
+ "columnName": "upload_option",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "list_of_uploads",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `account_name` TEXT, `file_size` INTEGER, `status` INTEGER, `local_behaviour` INTEGER, `upload_time` INTEGER, `name_collision_policy` INTEGER, `is_create_remote_folder` INTEGER, `upload_end_timestamp` INTEGER, `last_result` INTEGER, `is_while_charging_only` INTEGER, `is_wifi_only` INTEGER, `created_by` INTEGER, `folder_unlock_token` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSize",
+ "columnName": "file_size",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "status",
+ "columnName": "status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localBehaviour",
+ "columnName": "local_behaviour",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadTime",
+ "columnName": "upload_time",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isCreateRemoteFolder",
+ "columnName": "is_create_remote_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadEndTimestamp",
+ "columnName": "upload_end_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastResult",
+ "columnName": "last_result",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWhileChargingOnly",
+ "columnName": "is_while_charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWifiOnly",
+ "columnName": "is_wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "createdBy",
+ "columnName": "created_by",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "folderUnlockToken",
+ "columnName": "folder_unlock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "virtual",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `type` TEXT, `ocfile_id` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ocFileId",
+ "columnName": "ocfile_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [],
+ "foreignKeys": []
+ }
+ ],
+ "views": [],
+ "setupQueries": [
+ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
+ "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'aae2b31e197f961249b1ecd2cb13cbd1')"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/app/schemas/com.nextcloud.client.database.NextcloudDatabase/69.json b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/69.json
new file mode 100644
index 000000000000..6f7912ee4857
--- /dev/null
+++ b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/69.json
@@ -0,0 +1,1137 @@
+{
+ "formatVersion": 1,
+ "database": {
+ "version": 69,
+ "identityHash": "4f593cdd41a85be7b67c756cf2848028",
+ "entities": [
+ {
+ "tableName": "arbitrary_data",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `cloud_id` TEXT, `key` TEXT, `value` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "cloudId",
+ "columnName": "cloud_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "key",
+ "columnName": "key",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "value",
+ "columnName": "value",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "capabilities",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `account` TEXT, `version_mayor` INTEGER, `version_minor` INTEGER, `version_micro` INTEGER, `version_string` TEXT, `version_edition` TEXT, `extended_support` INTEGER, `core_pollinterval` INTEGER, `sharing_api_enabled` INTEGER, `sharing_public_enabled` INTEGER, `sharing_public_password_enforced` INTEGER, `sharing_public_expire_date_enabled` INTEGER, `sharing_public_expire_date_days` INTEGER, `sharing_public_expire_date_enforced` INTEGER, `sharing_public_send_mail` INTEGER, `sharing_public_upload` INTEGER, `sharing_user_send_mail` INTEGER, `sharing_resharing` INTEGER, `sharing_federation_outgoing` INTEGER, `sharing_federation_incoming` INTEGER, `files_bigfilechunking` INTEGER, `files_undelete` INTEGER, `files_versioning` INTEGER, `external_links` INTEGER, `server_name` TEXT, `server_color` TEXT, `server_text_color` TEXT, `server_element_color` TEXT, `server_slogan` TEXT, `server_logo` TEXT, `background_url` TEXT, `end_to_end_encryption` INTEGER, `end_to_end_encryption_keys_exist` INTEGER, `activity` INTEGER, `background_default` INTEGER, `background_plain` INTEGER, `richdocument` INTEGER, `richdocument_mimetype_list` TEXT, `richdocument_direct_editing` INTEGER, `richdocument_direct_templates` INTEGER, `richdocument_optional_mimetype_list` TEXT, `sharing_public_ask_for_optional_password` INTEGER, `richdocument_product_name` TEXT, `direct_editing_etag` TEXT, `user_status` INTEGER, `user_status_supports_emoji` INTEGER, `etag` TEXT, `files_locking_version` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMajor",
+ "columnName": "version_mayor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMinor",
+ "columnName": "version_minor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMicro",
+ "columnName": "version_micro",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionString",
+ "columnName": "version_string",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionEditor",
+ "columnName": "version_edition",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "extendedSupport",
+ "columnName": "extended_support",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "corePollinterval",
+ "columnName": "core_pollinterval",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingApiEnabled",
+ "columnName": "sharing_api_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicEnabled",
+ "columnName": "sharing_public_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicPasswordEnforced",
+ "columnName": "sharing_public_password_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnabled",
+ "columnName": "sharing_public_expire_date_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateDays",
+ "columnName": "sharing_public_expire_date_days",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnforced",
+ "columnName": "sharing_public_expire_date_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicSendMail",
+ "columnName": "sharing_public_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicUpload",
+ "columnName": "sharing_public_upload",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingUserSendMail",
+ "columnName": "sharing_user_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingResharing",
+ "columnName": "sharing_resharing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationOutgoing",
+ "columnName": "sharing_federation_outgoing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationIncoming",
+ "columnName": "sharing_federation_incoming",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesBigfilechunking",
+ "columnName": "files_bigfilechunking",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesUndelete",
+ "columnName": "files_undelete",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesVersioning",
+ "columnName": "files_versioning",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "externalLinks",
+ "columnName": "external_links",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverName",
+ "columnName": "server_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverColor",
+ "columnName": "server_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverTextColor",
+ "columnName": "server_text_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverElementColor",
+ "columnName": "server_element_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverSlogan",
+ "columnName": "server_slogan",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverLogo",
+ "columnName": "server_logo",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundUrl",
+ "columnName": "background_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryption",
+ "columnName": "end_to_end_encryption",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryptionKeysExist",
+ "columnName": "end_to_end_encryption_keys_exist",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "activity",
+ "columnName": "activity",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundDefault",
+ "columnName": "background_default",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundPlain",
+ "columnName": "background_plain",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocument",
+ "columnName": "richdocument",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentMimetypeList",
+ "columnName": "richdocument_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentDirectEditing",
+ "columnName": "richdocument_direct_editing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentTemplates",
+ "columnName": "richdocument_direct_templates",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentOptionalMimetypeList",
+ "columnName": "richdocument_optional_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicAskForOptionalPassword",
+ "columnName": "sharing_public_ask_for_optional_password",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentProductName",
+ "columnName": "richdocument_product_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "directEditingEtag",
+ "columnName": "direct_editing_etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatus",
+ "columnName": "user_status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatusSupportsEmoji",
+ "columnName": "user_status_supports_emoji",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesLockingVersion",
+ "columnName": "files_locking_version",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "external_links",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `icon_url` TEXT, `language` TEXT, `type` INTEGER, `name` TEXT, `url` TEXT, `redirect` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "iconUrl",
+ "columnName": "icon_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "language",
+ "columnName": "language",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "url",
+ "columnName": "url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "redirect",
+ "columnName": "redirect",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filelist",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `filename` TEXT, `encrypted_filename` TEXT, `path` TEXT, `path_decrypted` TEXT, `parent` INTEGER, `created` INTEGER, `modified` INTEGER, `content_type` TEXT, `content_length` INTEGER, `media_path` TEXT, `file_owner` TEXT, `last_sync_date` INTEGER, `last_sync_date_for_data` INTEGER, `modified_at_last_sync_for_data` INTEGER, `etag` TEXT, `etag_on_server` TEXT, `share_by_link` INTEGER, `permissions` TEXT, `remote_id` TEXT, `local_id` INTEGER NOT NULL DEFAULT -1, `update_thumbnail` INTEGER, `is_downloading` INTEGER, `favorite` INTEGER, `is_encrypted` INTEGER, `etag_in_conflict` TEXT, `shared_via_users` INTEGER, `mount_type` INTEGER, `has_preview` INTEGER, `unread_comments_count` INTEGER, `owner_id` TEXT, `owner_display_name` TEXT, `note` TEXT, `sharees` TEXT, `rich_workspace` TEXT, `metadata_size` TEXT, `locked` INTEGER, `lock_type` INTEGER, `lock_owner` TEXT, `lock_owner_display_name` TEXT, `lock_owner_editor` TEXT, `lock_timestamp` INTEGER, `lock_timeout` INTEGER, `lock_token` TEXT, `tags` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "encryptedName",
+ "columnName": "encrypted_filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "pathDecrypted",
+ "columnName": "path_decrypted",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "parent",
+ "columnName": "parent",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "creation",
+ "columnName": "created",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modified",
+ "columnName": "modified",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentType",
+ "columnName": "content_type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentLength",
+ "columnName": "content_length",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "storagePath",
+ "columnName": "media_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "file_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDate",
+ "columnName": "last_sync_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDateForData",
+ "columnName": "last_sync_date_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modifiedAtLastSyncForData",
+ "columnName": "modified_at_last_sync_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagOnServer",
+ "columnName": "etag_on_server",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedViaLink",
+ "columnName": "share_by_link",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remoteId",
+ "columnName": "remote_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localId",
+ "columnName": "local_id",
+ "affinity": "INTEGER",
+ "notNull": true,
+ "defaultValue": "-1"
+ },
+ {
+ "fieldPath": "updateThumbnail",
+ "columnName": "update_thumbnail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDownloading",
+ "columnName": "is_downloading",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "favorite",
+ "columnName": "favorite",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isEncrypted",
+ "columnName": "is_encrypted",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagInConflict",
+ "columnName": "etag_in_conflict",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedWithSharee",
+ "columnName": "shared_via_users",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "mountType",
+ "columnName": "mount_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hasPreview",
+ "columnName": "has_preview",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "unreadCommentsCount",
+ "columnName": "unread_comments_count",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerId",
+ "columnName": "owner_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerDisplayName",
+ "columnName": "owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharees",
+ "columnName": "sharees",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richWorkspace",
+ "columnName": "rich_workspace",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataSize",
+ "columnName": "metadata_size",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "locked",
+ "columnName": "locked",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockType",
+ "columnName": "lock_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwner",
+ "columnName": "lock_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerDisplayName",
+ "columnName": "lock_owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerEditor",
+ "columnName": "lock_owner_editor",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimestamp",
+ "columnName": "lock_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimeout",
+ "columnName": "lock_timeout",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockToken",
+ "columnName": "lock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "tags",
+ "columnName": "tags",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filesystem",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `is_folder` INTEGER, `found_at` INTEGER, `upload_triggered` INTEGER, `syncedfolder_id` TEXT, `crc32` TEXT, `modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileIsFolder",
+ "columnName": "is_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileFoundRecently",
+ "columnName": "found_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSentForUpload",
+ "columnName": "upload_triggered",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "syncedFolderId",
+ "columnName": "syncedfolder_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "crc32",
+ "columnName": "crc32",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileModified",
+ "columnName": "modified_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "ocshares",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `file_source` INTEGER, `item_source` INTEGER, `share_type` INTEGER, `shate_with` TEXT, `path` TEXT, `permissions` INTEGER, `shared_date` INTEGER, `expiration_date` INTEGER, `token` TEXT, `shared_with_display_name` TEXT, `is_directory` INTEGER, `user_id` INTEGER, `id_remote_shared` INTEGER, `owner_share` TEXT, `is_password_protected` INTEGER, `note` TEXT, `hide_download` INTEGER, `share_link` TEXT, `share_label` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSource",
+ "columnName": "file_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "itemSource",
+ "columnName": "item_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareType",
+ "columnName": "share_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWith",
+ "columnName": "shate_with",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedDate",
+ "columnName": "shared_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "expirationDate",
+ "columnName": "expiration_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "token",
+ "columnName": "token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWithDisplayName",
+ "columnName": "shared_with_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDirectory",
+ "columnName": "is_directory",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userId",
+ "columnName": "user_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "idRemoteShared",
+ "columnName": "id_remote_shared",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "owner_share",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isPasswordProtected",
+ "columnName": "is_password_protected",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hideDownload",
+ "columnName": "hide_download",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLink",
+ "columnName": "share_link",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLabel",
+ "columnName": "share_label",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "synced_folders",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `wifi_only` INTEGER, `charging_only` INTEGER, `existing` INTEGER, `enabled` INTEGER, `enabled_timestamp_ms` INTEGER, `subfolder_by_date` INTEGER, `account` TEXT, `upload_option` INTEGER, `name_collision_policy` INTEGER, `type` INTEGER, `hidden` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "wifiOnly",
+ "columnName": "wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "chargingOnly",
+ "columnName": "charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "existing",
+ "columnName": "existing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabled",
+ "columnName": "enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabledTimestampMs",
+ "columnName": "enabled_timestamp_ms",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "subfolderByDate",
+ "columnName": "subfolder_by_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "account",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadAction",
+ "columnName": "upload_option",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "list_of_uploads",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `account_name` TEXT, `file_size` INTEGER, `status` INTEGER, `local_behaviour` INTEGER, `upload_time` INTEGER, `name_collision_policy` INTEGER, `is_create_remote_folder` INTEGER, `upload_end_timestamp` INTEGER, `last_result` INTEGER, `is_while_charging_only` INTEGER, `is_wifi_only` INTEGER, `created_by` INTEGER, `folder_unlock_token` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSize",
+ "columnName": "file_size",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "status",
+ "columnName": "status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localBehaviour",
+ "columnName": "local_behaviour",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadTime",
+ "columnName": "upload_time",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isCreateRemoteFolder",
+ "columnName": "is_create_remote_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadEndTimestamp",
+ "columnName": "upload_end_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastResult",
+ "columnName": "last_result",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWhileChargingOnly",
+ "columnName": "is_while_charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWifiOnly",
+ "columnName": "is_wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "createdBy",
+ "columnName": "created_by",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "folderUnlockToken",
+ "columnName": "folder_unlock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "virtual",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `type` TEXT, `ocfile_id` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ocFileId",
+ "columnName": "ocfile_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ }
+ ],
+ "views": [],
+ "setupQueries": [
+ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
+ "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '4f593cdd41a85be7b67c756cf2848028')"
+ ]
+ }
+}
diff --git a/app/schemas/com.nextcloud.client.database.NextcloudDatabase/70.json b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/70.json
new file mode 100644
index 000000000000..4f37cb7e7db8
--- /dev/null
+++ b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/70.json
@@ -0,0 +1,1143 @@
+{
+ "formatVersion": 1,
+ "database": {
+ "version": 70,
+ "identityHash": "94c41622b9c906e5e15633eaf4943d1d",
+ "entities": [
+ {
+ "tableName": "arbitrary_data",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `cloud_id` TEXT, `key` TEXT, `value` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "cloudId",
+ "columnName": "cloud_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "key",
+ "columnName": "key",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "value",
+ "columnName": "value",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "capabilities",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `account` TEXT, `version_mayor` INTEGER, `version_minor` INTEGER, `version_micro` INTEGER, `version_string` TEXT, `version_edition` TEXT, `extended_support` INTEGER, `core_pollinterval` INTEGER, `sharing_api_enabled` INTEGER, `sharing_public_enabled` INTEGER, `sharing_public_password_enforced` INTEGER, `sharing_public_expire_date_enabled` INTEGER, `sharing_public_expire_date_days` INTEGER, `sharing_public_expire_date_enforced` INTEGER, `sharing_public_send_mail` INTEGER, `sharing_public_upload` INTEGER, `sharing_user_send_mail` INTEGER, `sharing_resharing` INTEGER, `sharing_federation_outgoing` INTEGER, `sharing_federation_incoming` INTEGER, `files_bigfilechunking` INTEGER, `files_undelete` INTEGER, `files_versioning` INTEGER, `external_links` INTEGER, `server_name` TEXT, `server_color` TEXT, `server_text_color` TEXT, `server_element_color` TEXT, `server_slogan` TEXT, `server_logo` TEXT, `background_url` TEXT, `end_to_end_encryption` INTEGER, `end_to_end_encryption_keys_exist` INTEGER, `activity` INTEGER, `background_default` INTEGER, `background_plain` INTEGER, `richdocument` INTEGER, `richdocument_mimetype_list` TEXT, `richdocument_direct_editing` INTEGER, `richdocument_direct_templates` INTEGER, `richdocument_optional_mimetype_list` TEXT, `sharing_public_ask_for_optional_password` INTEGER, `richdocument_product_name` TEXT, `direct_editing_etag` TEXT, `user_status` INTEGER, `user_status_supports_emoji` INTEGER, `etag` TEXT, `files_locking_version` TEXT, `groupfolders` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMajor",
+ "columnName": "version_mayor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMinor",
+ "columnName": "version_minor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMicro",
+ "columnName": "version_micro",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionString",
+ "columnName": "version_string",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionEditor",
+ "columnName": "version_edition",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "extendedSupport",
+ "columnName": "extended_support",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "corePollinterval",
+ "columnName": "core_pollinterval",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingApiEnabled",
+ "columnName": "sharing_api_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicEnabled",
+ "columnName": "sharing_public_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicPasswordEnforced",
+ "columnName": "sharing_public_password_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnabled",
+ "columnName": "sharing_public_expire_date_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateDays",
+ "columnName": "sharing_public_expire_date_days",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnforced",
+ "columnName": "sharing_public_expire_date_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicSendMail",
+ "columnName": "sharing_public_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicUpload",
+ "columnName": "sharing_public_upload",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingUserSendMail",
+ "columnName": "sharing_user_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingResharing",
+ "columnName": "sharing_resharing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationOutgoing",
+ "columnName": "sharing_federation_outgoing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationIncoming",
+ "columnName": "sharing_federation_incoming",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesBigfilechunking",
+ "columnName": "files_bigfilechunking",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesUndelete",
+ "columnName": "files_undelete",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesVersioning",
+ "columnName": "files_versioning",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "externalLinks",
+ "columnName": "external_links",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverName",
+ "columnName": "server_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverColor",
+ "columnName": "server_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverTextColor",
+ "columnName": "server_text_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverElementColor",
+ "columnName": "server_element_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverSlogan",
+ "columnName": "server_slogan",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverLogo",
+ "columnName": "server_logo",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundUrl",
+ "columnName": "background_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryption",
+ "columnName": "end_to_end_encryption",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryptionKeysExist",
+ "columnName": "end_to_end_encryption_keys_exist",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "activity",
+ "columnName": "activity",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundDefault",
+ "columnName": "background_default",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundPlain",
+ "columnName": "background_plain",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocument",
+ "columnName": "richdocument",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentMimetypeList",
+ "columnName": "richdocument_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentDirectEditing",
+ "columnName": "richdocument_direct_editing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentTemplates",
+ "columnName": "richdocument_direct_templates",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentOptionalMimetypeList",
+ "columnName": "richdocument_optional_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicAskForOptionalPassword",
+ "columnName": "sharing_public_ask_for_optional_password",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentProductName",
+ "columnName": "richdocument_product_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "directEditingEtag",
+ "columnName": "direct_editing_etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatus",
+ "columnName": "user_status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatusSupportsEmoji",
+ "columnName": "user_status_supports_emoji",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesLockingVersion",
+ "columnName": "files_locking_version",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "groupfolders",
+ "columnName": "groupfolders",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "external_links",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `icon_url` TEXT, `language` TEXT, `type` INTEGER, `name` TEXT, `url` TEXT, `redirect` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "iconUrl",
+ "columnName": "icon_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "language",
+ "columnName": "language",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "url",
+ "columnName": "url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "redirect",
+ "columnName": "redirect",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filelist",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `filename` TEXT, `encrypted_filename` TEXT, `path` TEXT, `path_decrypted` TEXT, `parent` INTEGER, `created` INTEGER, `modified` INTEGER, `content_type` TEXT, `content_length` INTEGER, `media_path` TEXT, `file_owner` TEXT, `last_sync_date` INTEGER, `last_sync_date_for_data` INTEGER, `modified_at_last_sync_for_data` INTEGER, `etag` TEXT, `etag_on_server` TEXT, `share_by_link` INTEGER, `permissions` TEXT, `remote_id` TEXT, `local_id` INTEGER NOT NULL DEFAULT -1, `update_thumbnail` INTEGER, `is_downloading` INTEGER, `favorite` INTEGER, `is_encrypted` INTEGER, `etag_in_conflict` TEXT, `shared_via_users` INTEGER, `mount_type` INTEGER, `has_preview` INTEGER, `unread_comments_count` INTEGER, `owner_id` TEXT, `owner_display_name` TEXT, `note` TEXT, `sharees` TEXT, `rich_workspace` TEXT, `metadata_size` TEXT, `locked` INTEGER, `lock_type` INTEGER, `lock_owner` TEXT, `lock_owner_display_name` TEXT, `lock_owner_editor` TEXT, `lock_timestamp` INTEGER, `lock_timeout` INTEGER, `lock_token` TEXT, `tags` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "encryptedName",
+ "columnName": "encrypted_filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "pathDecrypted",
+ "columnName": "path_decrypted",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "parent",
+ "columnName": "parent",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "creation",
+ "columnName": "created",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modified",
+ "columnName": "modified",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentType",
+ "columnName": "content_type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentLength",
+ "columnName": "content_length",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "storagePath",
+ "columnName": "media_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "file_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDate",
+ "columnName": "last_sync_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDateForData",
+ "columnName": "last_sync_date_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modifiedAtLastSyncForData",
+ "columnName": "modified_at_last_sync_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagOnServer",
+ "columnName": "etag_on_server",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedViaLink",
+ "columnName": "share_by_link",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remoteId",
+ "columnName": "remote_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localId",
+ "columnName": "local_id",
+ "affinity": "INTEGER",
+ "notNull": true,
+ "defaultValue": "-1"
+ },
+ {
+ "fieldPath": "updateThumbnail",
+ "columnName": "update_thumbnail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDownloading",
+ "columnName": "is_downloading",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "favorite",
+ "columnName": "favorite",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isEncrypted",
+ "columnName": "is_encrypted",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagInConflict",
+ "columnName": "etag_in_conflict",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedWithSharee",
+ "columnName": "shared_via_users",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "mountType",
+ "columnName": "mount_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hasPreview",
+ "columnName": "has_preview",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "unreadCommentsCount",
+ "columnName": "unread_comments_count",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerId",
+ "columnName": "owner_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerDisplayName",
+ "columnName": "owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharees",
+ "columnName": "sharees",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richWorkspace",
+ "columnName": "rich_workspace",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataSize",
+ "columnName": "metadata_size",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "locked",
+ "columnName": "locked",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockType",
+ "columnName": "lock_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwner",
+ "columnName": "lock_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerDisplayName",
+ "columnName": "lock_owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerEditor",
+ "columnName": "lock_owner_editor",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimestamp",
+ "columnName": "lock_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimeout",
+ "columnName": "lock_timeout",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockToken",
+ "columnName": "lock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "tags",
+ "columnName": "tags",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filesystem",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `is_folder` INTEGER, `found_at` INTEGER, `upload_triggered` INTEGER, `syncedfolder_id` TEXT, `crc32` TEXT, `modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileIsFolder",
+ "columnName": "is_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileFoundRecently",
+ "columnName": "found_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSentForUpload",
+ "columnName": "upload_triggered",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "syncedFolderId",
+ "columnName": "syncedfolder_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "crc32",
+ "columnName": "crc32",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileModified",
+ "columnName": "modified_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "ocshares",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `file_source` INTEGER, `item_source` INTEGER, `share_type` INTEGER, `shate_with` TEXT, `path` TEXT, `permissions` INTEGER, `shared_date` INTEGER, `expiration_date` INTEGER, `token` TEXT, `shared_with_display_name` TEXT, `is_directory` INTEGER, `user_id` INTEGER, `id_remote_shared` INTEGER, `owner_share` TEXT, `is_password_protected` INTEGER, `note` TEXT, `hide_download` INTEGER, `share_link` TEXT, `share_label` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSource",
+ "columnName": "file_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "itemSource",
+ "columnName": "item_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareType",
+ "columnName": "share_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWith",
+ "columnName": "shate_with",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedDate",
+ "columnName": "shared_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "expirationDate",
+ "columnName": "expiration_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "token",
+ "columnName": "token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWithDisplayName",
+ "columnName": "shared_with_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDirectory",
+ "columnName": "is_directory",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userId",
+ "columnName": "user_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "idRemoteShared",
+ "columnName": "id_remote_shared",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "owner_share",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isPasswordProtected",
+ "columnName": "is_password_protected",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hideDownload",
+ "columnName": "hide_download",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLink",
+ "columnName": "share_link",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLabel",
+ "columnName": "share_label",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "synced_folders",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `wifi_only` INTEGER, `charging_only` INTEGER, `existing` INTEGER, `enabled` INTEGER, `enabled_timestamp_ms` INTEGER, `subfolder_by_date` INTEGER, `account` TEXT, `upload_option` INTEGER, `name_collision_policy` INTEGER, `type` INTEGER, `hidden` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "wifiOnly",
+ "columnName": "wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "chargingOnly",
+ "columnName": "charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "existing",
+ "columnName": "existing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabled",
+ "columnName": "enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabledTimestampMs",
+ "columnName": "enabled_timestamp_ms",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "subfolderByDate",
+ "columnName": "subfolder_by_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "account",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadAction",
+ "columnName": "upload_option",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "list_of_uploads",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `account_name` TEXT, `file_size` INTEGER, `status` INTEGER, `local_behaviour` INTEGER, `upload_time` INTEGER, `name_collision_policy` INTEGER, `is_create_remote_folder` INTEGER, `upload_end_timestamp` INTEGER, `last_result` INTEGER, `is_while_charging_only` INTEGER, `is_wifi_only` INTEGER, `created_by` INTEGER, `folder_unlock_token` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSize",
+ "columnName": "file_size",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "status",
+ "columnName": "status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localBehaviour",
+ "columnName": "local_behaviour",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadTime",
+ "columnName": "upload_time",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isCreateRemoteFolder",
+ "columnName": "is_create_remote_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadEndTimestamp",
+ "columnName": "upload_end_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastResult",
+ "columnName": "last_result",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWhileChargingOnly",
+ "columnName": "is_while_charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWifiOnly",
+ "columnName": "is_wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "createdBy",
+ "columnName": "created_by",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "folderUnlockToken",
+ "columnName": "folder_unlock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "virtual",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `type` TEXT, `ocfile_id` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ocFileId",
+ "columnName": "ocfile_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ }
+ ],
+ "views": [],
+ "setupQueries": [
+ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
+ "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '94c41622b9c906e5e15633eaf4943d1d')"
+ ]
+ }
+}
diff --git a/app/schemas/com.nextcloud.client.database.NextcloudDatabase/71.json b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/71.json
new file mode 100644
index 000000000000..e9a4ed24fe40
--- /dev/null
+++ b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/71.json
@@ -0,0 +1,1143 @@
+{
+ "formatVersion": 1,
+ "database": {
+ "version": 71,
+ "identityHash": "94c41622b9c906e5e15633eaf4943d1d",
+ "entities": [
+ {
+ "tableName": "arbitrary_data",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `cloud_id` TEXT, `key` TEXT, `value` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "cloudId",
+ "columnName": "cloud_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "key",
+ "columnName": "key",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "value",
+ "columnName": "value",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "capabilities",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `account` TEXT, `version_mayor` INTEGER, `version_minor` INTEGER, `version_micro` INTEGER, `version_string` TEXT, `version_edition` TEXT, `extended_support` INTEGER, `core_pollinterval` INTEGER, `sharing_api_enabled` INTEGER, `sharing_public_enabled` INTEGER, `sharing_public_password_enforced` INTEGER, `sharing_public_expire_date_enabled` INTEGER, `sharing_public_expire_date_days` INTEGER, `sharing_public_expire_date_enforced` INTEGER, `sharing_public_send_mail` INTEGER, `sharing_public_upload` INTEGER, `sharing_user_send_mail` INTEGER, `sharing_resharing` INTEGER, `sharing_federation_outgoing` INTEGER, `sharing_federation_incoming` INTEGER, `files_bigfilechunking` INTEGER, `files_undelete` INTEGER, `files_versioning` INTEGER, `external_links` INTEGER, `server_name` TEXT, `server_color` TEXT, `server_text_color` TEXT, `server_element_color` TEXT, `server_slogan` TEXT, `server_logo` TEXT, `background_url` TEXT, `end_to_end_encryption` INTEGER, `end_to_end_encryption_keys_exist` INTEGER, `activity` INTEGER, `background_default` INTEGER, `background_plain` INTEGER, `richdocument` INTEGER, `richdocument_mimetype_list` TEXT, `richdocument_direct_editing` INTEGER, `richdocument_direct_templates` INTEGER, `richdocument_optional_mimetype_list` TEXT, `sharing_public_ask_for_optional_password` INTEGER, `richdocument_product_name` TEXT, `direct_editing_etag` TEXT, `user_status` INTEGER, `user_status_supports_emoji` INTEGER, `etag` TEXT, `files_locking_version` TEXT, `groupfolders` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMajor",
+ "columnName": "version_mayor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMinor",
+ "columnName": "version_minor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMicro",
+ "columnName": "version_micro",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionString",
+ "columnName": "version_string",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionEditor",
+ "columnName": "version_edition",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "extendedSupport",
+ "columnName": "extended_support",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "corePollinterval",
+ "columnName": "core_pollinterval",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingApiEnabled",
+ "columnName": "sharing_api_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicEnabled",
+ "columnName": "sharing_public_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicPasswordEnforced",
+ "columnName": "sharing_public_password_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnabled",
+ "columnName": "sharing_public_expire_date_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateDays",
+ "columnName": "sharing_public_expire_date_days",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnforced",
+ "columnName": "sharing_public_expire_date_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicSendMail",
+ "columnName": "sharing_public_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicUpload",
+ "columnName": "sharing_public_upload",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingUserSendMail",
+ "columnName": "sharing_user_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingResharing",
+ "columnName": "sharing_resharing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationOutgoing",
+ "columnName": "sharing_federation_outgoing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationIncoming",
+ "columnName": "sharing_federation_incoming",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesBigfilechunking",
+ "columnName": "files_bigfilechunking",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesUndelete",
+ "columnName": "files_undelete",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesVersioning",
+ "columnName": "files_versioning",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "externalLinks",
+ "columnName": "external_links",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverName",
+ "columnName": "server_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverColor",
+ "columnName": "server_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverTextColor",
+ "columnName": "server_text_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverElementColor",
+ "columnName": "server_element_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverSlogan",
+ "columnName": "server_slogan",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverLogo",
+ "columnName": "server_logo",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundUrl",
+ "columnName": "background_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryption",
+ "columnName": "end_to_end_encryption",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryptionKeysExist",
+ "columnName": "end_to_end_encryption_keys_exist",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "activity",
+ "columnName": "activity",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundDefault",
+ "columnName": "background_default",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundPlain",
+ "columnName": "background_plain",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocument",
+ "columnName": "richdocument",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentMimetypeList",
+ "columnName": "richdocument_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentDirectEditing",
+ "columnName": "richdocument_direct_editing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentTemplates",
+ "columnName": "richdocument_direct_templates",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentOptionalMimetypeList",
+ "columnName": "richdocument_optional_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicAskForOptionalPassword",
+ "columnName": "sharing_public_ask_for_optional_password",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentProductName",
+ "columnName": "richdocument_product_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "directEditingEtag",
+ "columnName": "direct_editing_etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatus",
+ "columnName": "user_status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatusSupportsEmoji",
+ "columnName": "user_status_supports_emoji",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesLockingVersion",
+ "columnName": "files_locking_version",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "groupfolders",
+ "columnName": "groupfolders",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "external_links",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `icon_url` TEXT, `language` TEXT, `type` INTEGER, `name` TEXT, `url` TEXT, `redirect` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "iconUrl",
+ "columnName": "icon_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "language",
+ "columnName": "language",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "url",
+ "columnName": "url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "redirect",
+ "columnName": "redirect",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filelist",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `filename` TEXT, `encrypted_filename` TEXT, `path` TEXT, `path_decrypted` TEXT, `parent` INTEGER, `created` INTEGER, `modified` INTEGER, `content_type` TEXT, `content_length` INTEGER, `media_path` TEXT, `file_owner` TEXT, `last_sync_date` INTEGER, `last_sync_date_for_data` INTEGER, `modified_at_last_sync_for_data` INTEGER, `etag` TEXT, `etag_on_server` TEXT, `share_by_link` INTEGER, `permissions` TEXT, `remote_id` TEXT, `local_id` INTEGER NOT NULL DEFAULT -1, `update_thumbnail` INTEGER, `is_downloading` INTEGER, `favorite` INTEGER, `is_encrypted` INTEGER, `etag_in_conflict` TEXT, `shared_via_users` INTEGER, `mount_type` INTEGER, `has_preview` INTEGER, `unread_comments_count` INTEGER, `owner_id` TEXT, `owner_display_name` TEXT, `note` TEXT, `sharees` TEXT, `rich_workspace` TEXT, `metadata_size` TEXT, `locked` INTEGER, `lock_type` INTEGER, `lock_owner` TEXT, `lock_owner_display_name` TEXT, `lock_owner_editor` TEXT, `lock_timestamp` INTEGER, `lock_timeout` INTEGER, `lock_token` TEXT, `tags` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "encryptedName",
+ "columnName": "encrypted_filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "pathDecrypted",
+ "columnName": "path_decrypted",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "parent",
+ "columnName": "parent",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "creation",
+ "columnName": "created",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modified",
+ "columnName": "modified",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentType",
+ "columnName": "content_type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentLength",
+ "columnName": "content_length",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "storagePath",
+ "columnName": "media_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "file_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDate",
+ "columnName": "last_sync_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDateForData",
+ "columnName": "last_sync_date_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modifiedAtLastSyncForData",
+ "columnName": "modified_at_last_sync_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagOnServer",
+ "columnName": "etag_on_server",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedViaLink",
+ "columnName": "share_by_link",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remoteId",
+ "columnName": "remote_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localId",
+ "columnName": "local_id",
+ "affinity": "INTEGER",
+ "notNull": true,
+ "defaultValue": "-1"
+ },
+ {
+ "fieldPath": "updateThumbnail",
+ "columnName": "update_thumbnail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDownloading",
+ "columnName": "is_downloading",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "favorite",
+ "columnName": "favorite",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isEncrypted",
+ "columnName": "is_encrypted",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagInConflict",
+ "columnName": "etag_in_conflict",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedWithSharee",
+ "columnName": "shared_via_users",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "mountType",
+ "columnName": "mount_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hasPreview",
+ "columnName": "has_preview",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "unreadCommentsCount",
+ "columnName": "unread_comments_count",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerId",
+ "columnName": "owner_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerDisplayName",
+ "columnName": "owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharees",
+ "columnName": "sharees",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richWorkspace",
+ "columnName": "rich_workspace",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataSize",
+ "columnName": "metadata_size",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "locked",
+ "columnName": "locked",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockType",
+ "columnName": "lock_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwner",
+ "columnName": "lock_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerDisplayName",
+ "columnName": "lock_owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerEditor",
+ "columnName": "lock_owner_editor",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimestamp",
+ "columnName": "lock_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimeout",
+ "columnName": "lock_timeout",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockToken",
+ "columnName": "lock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "tags",
+ "columnName": "tags",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filesystem",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `is_folder` INTEGER, `found_at` INTEGER, `upload_triggered` INTEGER, `syncedfolder_id` TEXT, `crc32` TEXT, `modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileIsFolder",
+ "columnName": "is_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileFoundRecently",
+ "columnName": "found_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSentForUpload",
+ "columnName": "upload_triggered",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "syncedFolderId",
+ "columnName": "syncedfolder_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "crc32",
+ "columnName": "crc32",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileModified",
+ "columnName": "modified_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "ocshares",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `file_source` INTEGER, `item_source` INTEGER, `share_type` INTEGER, `shate_with` TEXT, `path` TEXT, `permissions` INTEGER, `shared_date` INTEGER, `expiration_date` INTEGER, `token` TEXT, `shared_with_display_name` TEXT, `is_directory` INTEGER, `user_id` INTEGER, `id_remote_shared` INTEGER, `owner_share` TEXT, `is_password_protected` INTEGER, `note` TEXT, `hide_download` INTEGER, `share_link` TEXT, `share_label` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSource",
+ "columnName": "file_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "itemSource",
+ "columnName": "item_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareType",
+ "columnName": "share_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWith",
+ "columnName": "shate_with",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedDate",
+ "columnName": "shared_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "expirationDate",
+ "columnName": "expiration_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "token",
+ "columnName": "token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWithDisplayName",
+ "columnName": "shared_with_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDirectory",
+ "columnName": "is_directory",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userId",
+ "columnName": "user_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "idRemoteShared",
+ "columnName": "id_remote_shared",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "owner_share",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isPasswordProtected",
+ "columnName": "is_password_protected",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hideDownload",
+ "columnName": "hide_download",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLink",
+ "columnName": "share_link",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLabel",
+ "columnName": "share_label",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "synced_folders",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `wifi_only` INTEGER, `charging_only` INTEGER, `existing` INTEGER, `enabled` INTEGER, `enabled_timestamp_ms` INTEGER, `subfolder_by_date` INTEGER, `account` TEXT, `upload_option` INTEGER, `name_collision_policy` INTEGER, `type` INTEGER, `hidden` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "wifiOnly",
+ "columnName": "wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "chargingOnly",
+ "columnName": "charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "existing",
+ "columnName": "existing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabled",
+ "columnName": "enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabledTimestampMs",
+ "columnName": "enabled_timestamp_ms",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "subfolderByDate",
+ "columnName": "subfolder_by_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "account",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadAction",
+ "columnName": "upload_option",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "list_of_uploads",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `account_name` TEXT, `file_size` INTEGER, `status` INTEGER, `local_behaviour` INTEGER, `upload_time` INTEGER, `name_collision_policy` INTEGER, `is_create_remote_folder` INTEGER, `upload_end_timestamp` INTEGER, `last_result` INTEGER, `is_while_charging_only` INTEGER, `is_wifi_only` INTEGER, `created_by` INTEGER, `folder_unlock_token` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSize",
+ "columnName": "file_size",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "status",
+ "columnName": "status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localBehaviour",
+ "columnName": "local_behaviour",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadTime",
+ "columnName": "upload_time",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isCreateRemoteFolder",
+ "columnName": "is_create_remote_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadEndTimestamp",
+ "columnName": "upload_end_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastResult",
+ "columnName": "last_result",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWhileChargingOnly",
+ "columnName": "is_while_charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWifiOnly",
+ "columnName": "is_wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "createdBy",
+ "columnName": "created_by",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "folderUnlockToken",
+ "columnName": "folder_unlock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "virtual",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `type` TEXT, `ocfile_id` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ocFileId",
+ "columnName": "ocfile_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ }
+ ],
+ "views": [],
+ "setupQueries": [
+ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
+ "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '94c41622b9c906e5e15633eaf4943d1d')"
+ ]
+ }
+}
diff --git a/app/schemas/com.nextcloud.client.database.NextcloudDatabase/72.json b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/72.json
new file mode 100644
index 000000000000..42beb5a2e6a6
--- /dev/null
+++ b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/72.json
@@ -0,0 +1,1149 @@
+{
+ "formatVersion": 1,
+ "database": {
+ "version": 72,
+ "identityHash": "588228aa504f37ac818ca4a664af5b3d",
+ "entities": [
+ {
+ "tableName": "arbitrary_data",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `cloud_id` TEXT, `key` TEXT, `value` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "cloudId",
+ "columnName": "cloud_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "key",
+ "columnName": "key",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "value",
+ "columnName": "value",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "capabilities",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `account` TEXT, `version_mayor` INTEGER, `version_minor` INTEGER, `version_micro` INTEGER, `version_string` TEXT, `version_edition` TEXT, `extended_support` INTEGER, `core_pollinterval` INTEGER, `sharing_api_enabled` INTEGER, `sharing_public_enabled` INTEGER, `sharing_public_password_enforced` INTEGER, `sharing_public_expire_date_enabled` INTEGER, `sharing_public_expire_date_days` INTEGER, `sharing_public_expire_date_enforced` INTEGER, `sharing_public_send_mail` INTEGER, `sharing_public_upload` INTEGER, `sharing_user_send_mail` INTEGER, `sharing_resharing` INTEGER, `sharing_federation_outgoing` INTEGER, `sharing_federation_incoming` INTEGER, `files_bigfilechunking` INTEGER, `files_undelete` INTEGER, `files_versioning` INTEGER, `external_links` INTEGER, `server_name` TEXT, `server_color` TEXT, `server_text_color` TEXT, `server_element_color` TEXT, `server_slogan` TEXT, `server_logo` TEXT, `background_url` TEXT, `end_to_end_encryption` INTEGER, `end_to_end_encryption_keys_exist` INTEGER, `activity` INTEGER, `background_default` INTEGER, `background_plain` INTEGER, `richdocument` INTEGER, `richdocument_mimetype_list` TEXT, `richdocument_direct_editing` INTEGER, `richdocument_direct_templates` INTEGER, `richdocument_optional_mimetype_list` TEXT, `sharing_public_ask_for_optional_password` INTEGER, `richdocument_product_name` TEXT, `direct_editing_etag` TEXT, `user_status` INTEGER, `user_status_supports_emoji` INTEGER, `etag` TEXT, `files_locking_version` TEXT, `groupfolders` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMajor",
+ "columnName": "version_mayor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMinor",
+ "columnName": "version_minor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMicro",
+ "columnName": "version_micro",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionString",
+ "columnName": "version_string",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionEditor",
+ "columnName": "version_edition",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "extendedSupport",
+ "columnName": "extended_support",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "corePollinterval",
+ "columnName": "core_pollinterval",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingApiEnabled",
+ "columnName": "sharing_api_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicEnabled",
+ "columnName": "sharing_public_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicPasswordEnforced",
+ "columnName": "sharing_public_password_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnabled",
+ "columnName": "sharing_public_expire_date_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateDays",
+ "columnName": "sharing_public_expire_date_days",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnforced",
+ "columnName": "sharing_public_expire_date_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicSendMail",
+ "columnName": "sharing_public_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicUpload",
+ "columnName": "sharing_public_upload",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingUserSendMail",
+ "columnName": "sharing_user_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingResharing",
+ "columnName": "sharing_resharing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationOutgoing",
+ "columnName": "sharing_federation_outgoing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationIncoming",
+ "columnName": "sharing_federation_incoming",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesBigfilechunking",
+ "columnName": "files_bigfilechunking",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesUndelete",
+ "columnName": "files_undelete",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesVersioning",
+ "columnName": "files_versioning",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "externalLinks",
+ "columnName": "external_links",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverName",
+ "columnName": "server_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverColor",
+ "columnName": "server_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverTextColor",
+ "columnName": "server_text_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverElementColor",
+ "columnName": "server_element_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverSlogan",
+ "columnName": "server_slogan",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverLogo",
+ "columnName": "server_logo",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundUrl",
+ "columnName": "background_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryption",
+ "columnName": "end_to_end_encryption",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryptionKeysExist",
+ "columnName": "end_to_end_encryption_keys_exist",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "activity",
+ "columnName": "activity",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundDefault",
+ "columnName": "background_default",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundPlain",
+ "columnName": "background_plain",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocument",
+ "columnName": "richdocument",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentMimetypeList",
+ "columnName": "richdocument_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentDirectEditing",
+ "columnName": "richdocument_direct_editing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentTemplates",
+ "columnName": "richdocument_direct_templates",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentOptionalMimetypeList",
+ "columnName": "richdocument_optional_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicAskForOptionalPassword",
+ "columnName": "sharing_public_ask_for_optional_password",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentProductName",
+ "columnName": "richdocument_product_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "directEditingEtag",
+ "columnName": "direct_editing_etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatus",
+ "columnName": "user_status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatusSupportsEmoji",
+ "columnName": "user_status_supports_emoji",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesLockingVersion",
+ "columnName": "files_locking_version",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "groupfolders",
+ "columnName": "groupfolders",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "external_links",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `icon_url` TEXT, `language` TEXT, `type` INTEGER, `name` TEXT, `url` TEXT, `redirect` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "iconUrl",
+ "columnName": "icon_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "language",
+ "columnName": "language",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "url",
+ "columnName": "url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "redirect",
+ "columnName": "redirect",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filelist",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `filename` TEXT, `encrypted_filename` TEXT, `path` TEXT, `path_decrypted` TEXT, `parent` INTEGER, `created` INTEGER, `modified` INTEGER, `content_type` TEXT, `content_length` INTEGER, `media_path` TEXT, `file_owner` TEXT, `last_sync_date` INTEGER, `last_sync_date_for_data` INTEGER, `modified_at_last_sync_for_data` INTEGER, `etag` TEXT, `etag_on_server` TEXT, `share_by_link` INTEGER, `permissions` TEXT, `remote_id` TEXT, `local_id` INTEGER NOT NULL DEFAULT -1, `update_thumbnail` INTEGER, `is_downloading` INTEGER, `favorite` INTEGER, `is_encrypted` INTEGER, `etag_in_conflict` TEXT, `shared_via_users` INTEGER, `mount_type` INTEGER, `has_preview` INTEGER, `unread_comments_count` INTEGER, `owner_id` TEXT, `owner_display_name` TEXT, `note` TEXT, `sharees` TEXT, `rich_workspace` TEXT, `metadata_size` TEXT, `locked` INTEGER, `lock_type` INTEGER, `lock_owner` TEXT, `lock_owner_display_name` TEXT, `lock_owner_editor` TEXT, `lock_timestamp` INTEGER, `lock_timeout` INTEGER, `lock_token` TEXT, `tags` TEXT, `metadata_gps` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "encryptedName",
+ "columnName": "encrypted_filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "pathDecrypted",
+ "columnName": "path_decrypted",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "parent",
+ "columnName": "parent",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "creation",
+ "columnName": "created",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modified",
+ "columnName": "modified",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentType",
+ "columnName": "content_type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentLength",
+ "columnName": "content_length",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "storagePath",
+ "columnName": "media_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "file_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDate",
+ "columnName": "last_sync_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDateForData",
+ "columnName": "last_sync_date_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modifiedAtLastSyncForData",
+ "columnName": "modified_at_last_sync_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagOnServer",
+ "columnName": "etag_on_server",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedViaLink",
+ "columnName": "share_by_link",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remoteId",
+ "columnName": "remote_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localId",
+ "columnName": "local_id",
+ "affinity": "INTEGER",
+ "notNull": true,
+ "defaultValue": "-1"
+ },
+ {
+ "fieldPath": "updateThumbnail",
+ "columnName": "update_thumbnail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDownloading",
+ "columnName": "is_downloading",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "favorite",
+ "columnName": "favorite",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isEncrypted",
+ "columnName": "is_encrypted",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagInConflict",
+ "columnName": "etag_in_conflict",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedWithSharee",
+ "columnName": "shared_via_users",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "mountType",
+ "columnName": "mount_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hasPreview",
+ "columnName": "has_preview",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "unreadCommentsCount",
+ "columnName": "unread_comments_count",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerId",
+ "columnName": "owner_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerDisplayName",
+ "columnName": "owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharees",
+ "columnName": "sharees",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richWorkspace",
+ "columnName": "rich_workspace",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataSize",
+ "columnName": "metadata_size",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "locked",
+ "columnName": "locked",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockType",
+ "columnName": "lock_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwner",
+ "columnName": "lock_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerDisplayName",
+ "columnName": "lock_owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerEditor",
+ "columnName": "lock_owner_editor",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimestamp",
+ "columnName": "lock_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimeout",
+ "columnName": "lock_timeout",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockToken",
+ "columnName": "lock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "tags",
+ "columnName": "tags",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataGPS",
+ "columnName": "metadata_gps",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filesystem",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `is_folder` INTEGER, `found_at` INTEGER, `upload_triggered` INTEGER, `syncedfolder_id` TEXT, `crc32` TEXT, `modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileIsFolder",
+ "columnName": "is_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileFoundRecently",
+ "columnName": "found_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSentForUpload",
+ "columnName": "upload_triggered",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "syncedFolderId",
+ "columnName": "syncedfolder_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "crc32",
+ "columnName": "crc32",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileModified",
+ "columnName": "modified_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "ocshares",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `file_source` INTEGER, `item_source` INTEGER, `share_type` INTEGER, `shate_with` TEXT, `path` TEXT, `permissions` INTEGER, `shared_date` INTEGER, `expiration_date` INTEGER, `token` TEXT, `shared_with_display_name` TEXT, `is_directory` INTEGER, `user_id` INTEGER, `id_remote_shared` INTEGER, `owner_share` TEXT, `is_password_protected` INTEGER, `note` TEXT, `hide_download` INTEGER, `share_link` TEXT, `share_label` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSource",
+ "columnName": "file_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "itemSource",
+ "columnName": "item_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareType",
+ "columnName": "share_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWith",
+ "columnName": "shate_with",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedDate",
+ "columnName": "shared_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "expirationDate",
+ "columnName": "expiration_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "token",
+ "columnName": "token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWithDisplayName",
+ "columnName": "shared_with_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDirectory",
+ "columnName": "is_directory",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userId",
+ "columnName": "user_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "idRemoteShared",
+ "columnName": "id_remote_shared",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "owner_share",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isPasswordProtected",
+ "columnName": "is_password_protected",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hideDownload",
+ "columnName": "hide_download",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLink",
+ "columnName": "share_link",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLabel",
+ "columnName": "share_label",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "synced_folders",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `wifi_only` INTEGER, `charging_only` INTEGER, `existing` INTEGER, `enabled` INTEGER, `enabled_timestamp_ms` INTEGER, `subfolder_by_date` INTEGER, `account` TEXT, `upload_option` INTEGER, `name_collision_policy` INTEGER, `type` INTEGER, `hidden` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "wifiOnly",
+ "columnName": "wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "chargingOnly",
+ "columnName": "charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "existing",
+ "columnName": "existing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabled",
+ "columnName": "enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabledTimestampMs",
+ "columnName": "enabled_timestamp_ms",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "subfolderByDate",
+ "columnName": "subfolder_by_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "account",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadAction",
+ "columnName": "upload_option",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "list_of_uploads",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `account_name` TEXT, `file_size` INTEGER, `status` INTEGER, `local_behaviour` INTEGER, `upload_time` INTEGER, `name_collision_policy` INTEGER, `is_create_remote_folder` INTEGER, `upload_end_timestamp` INTEGER, `last_result` INTEGER, `is_while_charging_only` INTEGER, `is_wifi_only` INTEGER, `created_by` INTEGER, `folder_unlock_token` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSize",
+ "columnName": "file_size",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "status",
+ "columnName": "status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localBehaviour",
+ "columnName": "local_behaviour",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadTime",
+ "columnName": "upload_time",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isCreateRemoteFolder",
+ "columnName": "is_create_remote_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadEndTimestamp",
+ "columnName": "upload_end_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastResult",
+ "columnName": "last_result",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWhileChargingOnly",
+ "columnName": "is_while_charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWifiOnly",
+ "columnName": "is_wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "createdBy",
+ "columnName": "created_by",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "folderUnlockToken",
+ "columnName": "folder_unlock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "virtual",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `type` TEXT, `ocfile_id` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ocFileId",
+ "columnName": "ocfile_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ }
+ ],
+ "views": [],
+ "setupQueries": [
+ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
+ "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '588228aa504f37ac818ca4a664af5b3d')"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/app/schemas/com.nextcloud.client.database.NextcloudDatabase/73.json b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/73.json
new file mode 100644
index 000000000000..0edac3d8e93f
--- /dev/null
+++ b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/73.json
@@ -0,0 +1,1155 @@
+{
+ "formatVersion": 1,
+ "database": {
+ "version": 73,
+ "identityHash": "ec3cffde64bdc99ac2b308e8ba15c481",
+ "entities": [
+ {
+ "tableName": "arbitrary_data",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `cloud_id` TEXT, `key` TEXT, `value` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "cloudId",
+ "columnName": "cloud_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "key",
+ "columnName": "key",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "value",
+ "columnName": "value",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "capabilities",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `account` TEXT, `version_mayor` INTEGER, `version_minor` INTEGER, `version_micro` INTEGER, `version_string` TEXT, `version_edition` TEXT, `extended_support` INTEGER, `core_pollinterval` INTEGER, `sharing_api_enabled` INTEGER, `sharing_public_enabled` INTEGER, `sharing_public_password_enforced` INTEGER, `sharing_public_expire_date_enabled` INTEGER, `sharing_public_expire_date_days` INTEGER, `sharing_public_expire_date_enforced` INTEGER, `sharing_public_send_mail` INTEGER, `sharing_public_upload` INTEGER, `sharing_user_send_mail` INTEGER, `sharing_resharing` INTEGER, `sharing_federation_outgoing` INTEGER, `sharing_federation_incoming` INTEGER, `files_bigfilechunking` INTEGER, `files_undelete` INTEGER, `files_versioning` INTEGER, `external_links` INTEGER, `server_name` TEXT, `server_color` TEXT, `server_text_color` TEXT, `server_element_color` TEXT, `server_slogan` TEXT, `server_logo` TEXT, `background_url` TEXT, `end_to_end_encryption` INTEGER, `end_to_end_encryption_keys_exist` INTEGER, `activity` INTEGER, `background_default` INTEGER, `background_plain` INTEGER, `richdocument` INTEGER, `richdocument_mimetype_list` TEXT, `richdocument_direct_editing` INTEGER, `richdocument_direct_templates` INTEGER, `richdocument_optional_mimetype_list` TEXT, `sharing_public_ask_for_optional_password` INTEGER, `richdocument_product_name` TEXT, `direct_editing_etag` TEXT, `user_status` INTEGER, `user_status_supports_emoji` INTEGER, `etag` TEXT, `files_locking_version` TEXT, `groupfolders` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMajor",
+ "columnName": "version_mayor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMinor",
+ "columnName": "version_minor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMicro",
+ "columnName": "version_micro",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionString",
+ "columnName": "version_string",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionEditor",
+ "columnName": "version_edition",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "extendedSupport",
+ "columnName": "extended_support",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "corePollinterval",
+ "columnName": "core_pollinterval",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingApiEnabled",
+ "columnName": "sharing_api_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicEnabled",
+ "columnName": "sharing_public_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicPasswordEnforced",
+ "columnName": "sharing_public_password_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnabled",
+ "columnName": "sharing_public_expire_date_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateDays",
+ "columnName": "sharing_public_expire_date_days",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnforced",
+ "columnName": "sharing_public_expire_date_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicSendMail",
+ "columnName": "sharing_public_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicUpload",
+ "columnName": "sharing_public_upload",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingUserSendMail",
+ "columnName": "sharing_user_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingResharing",
+ "columnName": "sharing_resharing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationOutgoing",
+ "columnName": "sharing_federation_outgoing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationIncoming",
+ "columnName": "sharing_federation_incoming",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesBigfilechunking",
+ "columnName": "files_bigfilechunking",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesUndelete",
+ "columnName": "files_undelete",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesVersioning",
+ "columnName": "files_versioning",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "externalLinks",
+ "columnName": "external_links",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverName",
+ "columnName": "server_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverColor",
+ "columnName": "server_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverTextColor",
+ "columnName": "server_text_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverElementColor",
+ "columnName": "server_element_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverSlogan",
+ "columnName": "server_slogan",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverLogo",
+ "columnName": "server_logo",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundUrl",
+ "columnName": "background_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryption",
+ "columnName": "end_to_end_encryption",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryptionKeysExist",
+ "columnName": "end_to_end_encryption_keys_exist",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "activity",
+ "columnName": "activity",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundDefault",
+ "columnName": "background_default",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundPlain",
+ "columnName": "background_plain",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocument",
+ "columnName": "richdocument",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentMimetypeList",
+ "columnName": "richdocument_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentDirectEditing",
+ "columnName": "richdocument_direct_editing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentTemplates",
+ "columnName": "richdocument_direct_templates",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentOptionalMimetypeList",
+ "columnName": "richdocument_optional_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicAskForOptionalPassword",
+ "columnName": "sharing_public_ask_for_optional_password",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentProductName",
+ "columnName": "richdocument_product_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "directEditingEtag",
+ "columnName": "direct_editing_etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatus",
+ "columnName": "user_status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatusSupportsEmoji",
+ "columnName": "user_status_supports_emoji",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesLockingVersion",
+ "columnName": "files_locking_version",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "groupfolders",
+ "columnName": "groupfolders",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "external_links",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `icon_url` TEXT, `language` TEXT, `type` INTEGER, `name` TEXT, `url` TEXT, `redirect` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "iconUrl",
+ "columnName": "icon_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "language",
+ "columnName": "language",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "url",
+ "columnName": "url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "redirect",
+ "columnName": "redirect",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filelist",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `filename` TEXT, `encrypted_filename` TEXT, `path` TEXT, `path_decrypted` TEXT, `parent` INTEGER, `created` INTEGER, `modified` INTEGER, `content_type` TEXT, `content_length` INTEGER, `media_path` TEXT, `file_owner` TEXT, `last_sync_date` INTEGER, `last_sync_date_for_data` INTEGER, `modified_at_last_sync_for_data` INTEGER, `etag` TEXT, `etag_on_server` TEXT, `share_by_link` INTEGER, `permissions` TEXT, `remote_id` TEXT, `local_id` INTEGER NOT NULL DEFAULT -1, `update_thumbnail` INTEGER, `is_downloading` INTEGER, `favorite` INTEGER, `is_encrypted` INTEGER, `etag_in_conflict` TEXT, `shared_via_users` INTEGER, `mount_type` INTEGER, `has_preview` INTEGER, `unread_comments_count` INTEGER, `owner_id` TEXT, `owner_display_name` TEXT, `note` TEXT, `sharees` TEXT, `rich_workspace` TEXT, `metadata_size` TEXT, `locked` INTEGER, `lock_type` INTEGER, `lock_owner` TEXT, `lock_owner_display_name` TEXT, `lock_owner_editor` TEXT, `lock_timestamp` INTEGER, `lock_timeout` INTEGER, `lock_token` TEXT, `tags` TEXT, `metadata_gps` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "encryptedName",
+ "columnName": "encrypted_filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "pathDecrypted",
+ "columnName": "path_decrypted",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "parent",
+ "columnName": "parent",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "creation",
+ "columnName": "created",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modified",
+ "columnName": "modified",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentType",
+ "columnName": "content_type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentLength",
+ "columnName": "content_length",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "storagePath",
+ "columnName": "media_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "file_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDate",
+ "columnName": "last_sync_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDateForData",
+ "columnName": "last_sync_date_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modifiedAtLastSyncForData",
+ "columnName": "modified_at_last_sync_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagOnServer",
+ "columnName": "etag_on_server",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedViaLink",
+ "columnName": "share_by_link",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remoteId",
+ "columnName": "remote_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localId",
+ "columnName": "local_id",
+ "affinity": "INTEGER",
+ "notNull": true,
+ "defaultValue": "-1"
+ },
+ {
+ "fieldPath": "updateThumbnail",
+ "columnName": "update_thumbnail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDownloading",
+ "columnName": "is_downloading",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "favorite",
+ "columnName": "favorite",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isEncrypted",
+ "columnName": "is_encrypted",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagInConflict",
+ "columnName": "etag_in_conflict",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedWithSharee",
+ "columnName": "shared_via_users",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "mountType",
+ "columnName": "mount_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hasPreview",
+ "columnName": "has_preview",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "unreadCommentsCount",
+ "columnName": "unread_comments_count",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerId",
+ "columnName": "owner_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerDisplayName",
+ "columnName": "owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharees",
+ "columnName": "sharees",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richWorkspace",
+ "columnName": "rich_workspace",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataSize",
+ "columnName": "metadata_size",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "locked",
+ "columnName": "locked",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockType",
+ "columnName": "lock_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwner",
+ "columnName": "lock_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerDisplayName",
+ "columnName": "lock_owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerEditor",
+ "columnName": "lock_owner_editor",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimestamp",
+ "columnName": "lock_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimeout",
+ "columnName": "lock_timeout",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockToken",
+ "columnName": "lock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "tags",
+ "columnName": "tags",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataGPS",
+ "columnName": "metadata_gps",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filesystem",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `is_folder` INTEGER, `found_at` INTEGER, `upload_triggered` INTEGER, `syncedfolder_id` TEXT, `crc32` TEXT, `modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileIsFolder",
+ "columnName": "is_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileFoundRecently",
+ "columnName": "found_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSentForUpload",
+ "columnName": "upload_triggered",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "syncedFolderId",
+ "columnName": "syncedfolder_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "crc32",
+ "columnName": "crc32",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileModified",
+ "columnName": "modified_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "ocshares",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `file_source` INTEGER, `item_source` INTEGER, `share_type` INTEGER, `shate_with` TEXT, `path` TEXT, `permissions` INTEGER, `shared_date` INTEGER, `expiration_date` INTEGER, `token` TEXT, `shared_with_display_name` TEXT, `is_directory` INTEGER, `user_id` INTEGER, `id_remote_shared` INTEGER, `owner_share` TEXT, `is_password_protected` INTEGER, `note` TEXT, `hide_download` INTEGER, `share_link` TEXT, `share_label` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSource",
+ "columnName": "file_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "itemSource",
+ "columnName": "item_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareType",
+ "columnName": "share_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWith",
+ "columnName": "shate_with",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedDate",
+ "columnName": "shared_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "expirationDate",
+ "columnName": "expiration_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "token",
+ "columnName": "token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWithDisplayName",
+ "columnName": "shared_with_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDirectory",
+ "columnName": "is_directory",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userId",
+ "columnName": "user_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "idRemoteShared",
+ "columnName": "id_remote_shared",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "owner_share",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isPasswordProtected",
+ "columnName": "is_password_protected",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hideDownload",
+ "columnName": "hide_download",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLink",
+ "columnName": "share_link",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLabel",
+ "columnName": "share_label",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "synced_folders",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `wifi_only` INTEGER, `charging_only` INTEGER, `existing` INTEGER, `enabled` INTEGER, `enabled_timestamp_ms` INTEGER, `subfolder_by_date` INTEGER, `account` TEXT, `upload_option` INTEGER, `name_collision_policy` INTEGER, `type` INTEGER, `hidden` INTEGER, `sub_folder_rule` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "wifiOnly",
+ "columnName": "wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "chargingOnly",
+ "columnName": "charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "existing",
+ "columnName": "existing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabled",
+ "columnName": "enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabledTimestampMs",
+ "columnName": "enabled_timestamp_ms",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "subfolderByDate",
+ "columnName": "subfolder_by_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "account",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadAction",
+ "columnName": "upload_option",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "subFolderRule",
+ "columnName": "sub_folder_rule",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "list_of_uploads",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `account_name` TEXT, `file_size` INTEGER, `status` INTEGER, `local_behaviour` INTEGER, `upload_time` INTEGER, `name_collision_policy` INTEGER, `is_create_remote_folder` INTEGER, `upload_end_timestamp` INTEGER, `last_result` INTEGER, `is_while_charging_only` INTEGER, `is_wifi_only` INTEGER, `created_by` INTEGER, `folder_unlock_token` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSize",
+ "columnName": "file_size",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "status",
+ "columnName": "status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localBehaviour",
+ "columnName": "local_behaviour",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadTime",
+ "columnName": "upload_time",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isCreateRemoteFolder",
+ "columnName": "is_create_remote_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadEndTimestamp",
+ "columnName": "upload_end_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastResult",
+ "columnName": "last_result",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWhileChargingOnly",
+ "columnName": "is_while_charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWifiOnly",
+ "columnName": "is_wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "createdBy",
+ "columnName": "created_by",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "folderUnlockToken",
+ "columnName": "folder_unlock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "virtual",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `type` TEXT, `ocfile_id` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ocFileId",
+ "columnName": "ocfile_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ }
+ ],
+ "views": [],
+ "setupQueries": [
+ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
+ "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'ec3cffde64bdc99ac2b308e8ba15c481')"
+ ]
+ }
+}
diff --git a/app/schemas/com.nextcloud.client.database.NextcloudDatabase/74.json b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/74.json
new file mode 100644
index 000000000000..d37b3654d96b
--- /dev/null
+++ b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/74.json
@@ -0,0 +1,1161 @@
+{
+ "formatVersion": 1,
+ "database": {
+ "version": 74,
+ "identityHash": "7e73c045ac6d52d6c7c1626eefbc21e9",
+ "entities": [
+ {
+ "tableName": "arbitrary_data",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `cloud_id` TEXT, `key` TEXT, `value` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "cloudId",
+ "columnName": "cloud_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "key",
+ "columnName": "key",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "value",
+ "columnName": "value",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "capabilities",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `account` TEXT, `version_mayor` INTEGER, `version_minor` INTEGER, `version_micro` INTEGER, `version_string` TEXT, `version_edition` TEXT, `extended_support` INTEGER, `core_pollinterval` INTEGER, `sharing_api_enabled` INTEGER, `sharing_public_enabled` INTEGER, `sharing_public_password_enforced` INTEGER, `sharing_public_expire_date_enabled` INTEGER, `sharing_public_expire_date_days` INTEGER, `sharing_public_expire_date_enforced` INTEGER, `sharing_public_send_mail` INTEGER, `sharing_public_upload` INTEGER, `sharing_user_send_mail` INTEGER, `sharing_resharing` INTEGER, `sharing_federation_outgoing` INTEGER, `sharing_federation_incoming` INTEGER, `files_bigfilechunking` INTEGER, `files_undelete` INTEGER, `files_versioning` INTEGER, `external_links` INTEGER, `server_name` TEXT, `server_color` TEXT, `server_text_color` TEXT, `server_element_color` TEXT, `server_slogan` TEXT, `server_logo` TEXT, `background_url` TEXT, `end_to_end_encryption` INTEGER, `end_to_end_encryption_keys_exist` INTEGER, `activity` INTEGER, `background_default` INTEGER, `background_plain` INTEGER, `richdocument` INTEGER, `richdocument_mimetype_list` TEXT, `richdocument_direct_editing` INTEGER, `richdocument_direct_templates` INTEGER, `richdocument_optional_mimetype_list` TEXT, `sharing_public_ask_for_optional_password` INTEGER, `richdocument_product_name` TEXT, `direct_editing_etag` TEXT, `user_status` INTEGER, `user_status_supports_emoji` INTEGER, `etag` TEXT, `files_locking_version` TEXT, `groupfolders` INTEGER, `drop_account` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMajor",
+ "columnName": "version_mayor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMinor",
+ "columnName": "version_minor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMicro",
+ "columnName": "version_micro",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionString",
+ "columnName": "version_string",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionEditor",
+ "columnName": "version_edition",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "extendedSupport",
+ "columnName": "extended_support",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "corePollinterval",
+ "columnName": "core_pollinterval",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingApiEnabled",
+ "columnName": "sharing_api_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicEnabled",
+ "columnName": "sharing_public_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicPasswordEnforced",
+ "columnName": "sharing_public_password_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnabled",
+ "columnName": "sharing_public_expire_date_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateDays",
+ "columnName": "sharing_public_expire_date_days",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnforced",
+ "columnName": "sharing_public_expire_date_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicSendMail",
+ "columnName": "sharing_public_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicUpload",
+ "columnName": "sharing_public_upload",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingUserSendMail",
+ "columnName": "sharing_user_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingResharing",
+ "columnName": "sharing_resharing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationOutgoing",
+ "columnName": "sharing_federation_outgoing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationIncoming",
+ "columnName": "sharing_federation_incoming",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesBigfilechunking",
+ "columnName": "files_bigfilechunking",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesUndelete",
+ "columnName": "files_undelete",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesVersioning",
+ "columnName": "files_versioning",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "externalLinks",
+ "columnName": "external_links",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverName",
+ "columnName": "server_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverColor",
+ "columnName": "server_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverTextColor",
+ "columnName": "server_text_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverElementColor",
+ "columnName": "server_element_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverSlogan",
+ "columnName": "server_slogan",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverLogo",
+ "columnName": "server_logo",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundUrl",
+ "columnName": "background_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryption",
+ "columnName": "end_to_end_encryption",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryptionKeysExist",
+ "columnName": "end_to_end_encryption_keys_exist",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "activity",
+ "columnName": "activity",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundDefault",
+ "columnName": "background_default",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundPlain",
+ "columnName": "background_plain",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocument",
+ "columnName": "richdocument",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentMimetypeList",
+ "columnName": "richdocument_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentDirectEditing",
+ "columnName": "richdocument_direct_editing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentTemplates",
+ "columnName": "richdocument_direct_templates",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentOptionalMimetypeList",
+ "columnName": "richdocument_optional_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicAskForOptionalPassword",
+ "columnName": "sharing_public_ask_for_optional_password",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentProductName",
+ "columnName": "richdocument_product_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "directEditingEtag",
+ "columnName": "direct_editing_etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatus",
+ "columnName": "user_status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatusSupportsEmoji",
+ "columnName": "user_status_supports_emoji",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesLockingVersion",
+ "columnName": "files_locking_version",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "groupfolders",
+ "columnName": "groupfolders",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "dropAccount",
+ "columnName": "drop_account",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "external_links",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `icon_url` TEXT, `language` TEXT, `type` INTEGER, `name` TEXT, `url` TEXT, `redirect` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "iconUrl",
+ "columnName": "icon_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "language",
+ "columnName": "language",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "url",
+ "columnName": "url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "redirect",
+ "columnName": "redirect",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filelist",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `filename` TEXT, `encrypted_filename` TEXT, `path` TEXT, `path_decrypted` TEXT, `parent` INTEGER, `created` INTEGER, `modified` INTEGER, `content_type` TEXT, `content_length` INTEGER, `media_path` TEXT, `file_owner` TEXT, `last_sync_date` INTEGER, `last_sync_date_for_data` INTEGER, `modified_at_last_sync_for_data` INTEGER, `etag` TEXT, `etag_on_server` TEXT, `share_by_link` INTEGER, `permissions` TEXT, `remote_id` TEXT, `local_id` INTEGER NOT NULL DEFAULT -1, `update_thumbnail` INTEGER, `is_downloading` INTEGER, `favorite` INTEGER, `is_encrypted` INTEGER, `etag_in_conflict` TEXT, `shared_via_users` INTEGER, `mount_type` INTEGER, `has_preview` INTEGER, `unread_comments_count` INTEGER, `owner_id` TEXT, `owner_display_name` TEXT, `note` TEXT, `sharees` TEXT, `rich_workspace` TEXT, `metadata_size` TEXT, `locked` INTEGER, `lock_type` INTEGER, `lock_owner` TEXT, `lock_owner_display_name` TEXT, `lock_owner_editor` TEXT, `lock_timestamp` INTEGER, `lock_timeout` INTEGER, `lock_token` TEXT, `tags` TEXT, `metadata_gps` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "encryptedName",
+ "columnName": "encrypted_filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "pathDecrypted",
+ "columnName": "path_decrypted",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "parent",
+ "columnName": "parent",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "creation",
+ "columnName": "created",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modified",
+ "columnName": "modified",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentType",
+ "columnName": "content_type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentLength",
+ "columnName": "content_length",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "storagePath",
+ "columnName": "media_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "file_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDate",
+ "columnName": "last_sync_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDateForData",
+ "columnName": "last_sync_date_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modifiedAtLastSyncForData",
+ "columnName": "modified_at_last_sync_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagOnServer",
+ "columnName": "etag_on_server",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedViaLink",
+ "columnName": "share_by_link",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remoteId",
+ "columnName": "remote_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localId",
+ "columnName": "local_id",
+ "affinity": "INTEGER",
+ "notNull": true,
+ "defaultValue": "-1"
+ },
+ {
+ "fieldPath": "updateThumbnail",
+ "columnName": "update_thumbnail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDownloading",
+ "columnName": "is_downloading",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "favorite",
+ "columnName": "favorite",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isEncrypted",
+ "columnName": "is_encrypted",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagInConflict",
+ "columnName": "etag_in_conflict",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedWithSharee",
+ "columnName": "shared_via_users",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "mountType",
+ "columnName": "mount_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hasPreview",
+ "columnName": "has_preview",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "unreadCommentsCount",
+ "columnName": "unread_comments_count",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerId",
+ "columnName": "owner_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerDisplayName",
+ "columnName": "owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharees",
+ "columnName": "sharees",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richWorkspace",
+ "columnName": "rich_workspace",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataSize",
+ "columnName": "metadata_size",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "locked",
+ "columnName": "locked",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockType",
+ "columnName": "lock_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwner",
+ "columnName": "lock_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerDisplayName",
+ "columnName": "lock_owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerEditor",
+ "columnName": "lock_owner_editor",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimestamp",
+ "columnName": "lock_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimeout",
+ "columnName": "lock_timeout",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockToken",
+ "columnName": "lock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "tags",
+ "columnName": "tags",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataGPS",
+ "columnName": "metadata_gps",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filesystem",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `is_folder` INTEGER, `found_at` INTEGER, `upload_triggered` INTEGER, `syncedfolder_id` TEXT, `crc32` TEXT, `modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileIsFolder",
+ "columnName": "is_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileFoundRecently",
+ "columnName": "found_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSentForUpload",
+ "columnName": "upload_triggered",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "syncedFolderId",
+ "columnName": "syncedfolder_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "crc32",
+ "columnName": "crc32",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileModified",
+ "columnName": "modified_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "ocshares",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `file_source` INTEGER, `item_source` INTEGER, `share_type` INTEGER, `shate_with` TEXT, `path` TEXT, `permissions` INTEGER, `shared_date` INTEGER, `expiration_date` INTEGER, `token` TEXT, `shared_with_display_name` TEXT, `is_directory` INTEGER, `user_id` INTEGER, `id_remote_shared` INTEGER, `owner_share` TEXT, `is_password_protected` INTEGER, `note` TEXT, `hide_download` INTEGER, `share_link` TEXT, `share_label` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSource",
+ "columnName": "file_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "itemSource",
+ "columnName": "item_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareType",
+ "columnName": "share_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWith",
+ "columnName": "shate_with",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedDate",
+ "columnName": "shared_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "expirationDate",
+ "columnName": "expiration_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "token",
+ "columnName": "token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWithDisplayName",
+ "columnName": "shared_with_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDirectory",
+ "columnName": "is_directory",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userId",
+ "columnName": "user_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "idRemoteShared",
+ "columnName": "id_remote_shared",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "owner_share",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isPasswordProtected",
+ "columnName": "is_password_protected",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hideDownload",
+ "columnName": "hide_download",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLink",
+ "columnName": "share_link",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLabel",
+ "columnName": "share_label",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "synced_folders",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `wifi_only` INTEGER, `charging_only` INTEGER, `existing` INTEGER, `enabled` INTEGER, `enabled_timestamp_ms` INTEGER, `subfolder_by_date` INTEGER, `account` TEXT, `upload_option` INTEGER, `name_collision_policy` INTEGER, `type` INTEGER, `hidden` INTEGER, `sub_folder_rule` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "wifiOnly",
+ "columnName": "wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "chargingOnly",
+ "columnName": "charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "existing",
+ "columnName": "existing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabled",
+ "columnName": "enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabledTimestampMs",
+ "columnName": "enabled_timestamp_ms",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "subfolderByDate",
+ "columnName": "subfolder_by_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "account",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadAction",
+ "columnName": "upload_option",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "subFolderRule",
+ "columnName": "sub_folder_rule",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "list_of_uploads",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `account_name` TEXT, `file_size` INTEGER, `status` INTEGER, `local_behaviour` INTEGER, `upload_time` INTEGER, `name_collision_policy` INTEGER, `is_create_remote_folder` INTEGER, `upload_end_timestamp` INTEGER, `last_result` INTEGER, `is_while_charging_only` INTEGER, `is_wifi_only` INTEGER, `created_by` INTEGER, `folder_unlock_token` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSize",
+ "columnName": "file_size",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "status",
+ "columnName": "status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localBehaviour",
+ "columnName": "local_behaviour",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadTime",
+ "columnName": "upload_time",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isCreateRemoteFolder",
+ "columnName": "is_create_remote_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadEndTimestamp",
+ "columnName": "upload_end_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastResult",
+ "columnName": "last_result",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWhileChargingOnly",
+ "columnName": "is_while_charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWifiOnly",
+ "columnName": "is_wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "createdBy",
+ "columnName": "created_by",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "folderUnlockToken",
+ "columnName": "folder_unlock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "virtual",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `type` TEXT, `ocfile_id` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ocFileId",
+ "columnName": "ocfile_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ }
+ ],
+ "views": [],
+ "setupQueries": [
+ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
+ "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '7e73c045ac6d52d6c7c1626eefbc21e9')"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/app/schemas/com.nextcloud.client.database.NextcloudDatabase/75.json b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/75.json
new file mode 100644
index 000000000000..2a7d08125b71
--- /dev/null
+++ b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/75.json
@@ -0,0 +1,1173 @@
+{
+ "formatVersion": 1,
+ "database": {
+ "version": 75,
+ "identityHash": "7558389fb83b310bead5d07c9a0bc722",
+ "entities": [
+ {
+ "tableName": "arbitrary_data",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `cloud_id` TEXT, `key` TEXT, `value` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "cloudId",
+ "columnName": "cloud_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "key",
+ "columnName": "key",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "value",
+ "columnName": "value",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "capabilities",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `account` TEXT, `version_mayor` INTEGER, `version_minor` INTEGER, `version_micro` INTEGER, `version_string` TEXT, `version_edition` TEXT, `extended_support` INTEGER, `core_pollinterval` INTEGER, `sharing_api_enabled` INTEGER, `sharing_public_enabled` INTEGER, `sharing_public_password_enforced` INTEGER, `sharing_public_expire_date_enabled` INTEGER, `sharing_public_expire_date_days` INTEGER, `sharing_public_expire_date_enforced` INTEGER, `sharing_public_send_mail` INTEGER, `sharing_public_upload` INTEGER, `sharing_user_send_mail` INTEGER, `sharing_resharing` INTEGER, `sharing_federation_outgoing` INTEGER, `sharing_federation_incoming` INTEGER, `files_bigfilechunking` INTEGER, `files_undelete` INTEGER, `files_versioning` INTEGER, `external_links` INTEGER, `server_name` TEXT, `server_color` TEXT, `server_text_color` TEXT, `server_element_color` TEXT, `server_slogan` TEXT, `server_logo` TEXT, `background_url` TEXT, `end_to_end_encryption` INTEGER, `end_to_end_encryption_keys_exist` INTEGER, `activity` INTEGER, `background_default` INTEGER, `background_plain` INTEGER, `richdocument` INTEGER, `richdocument_mimetype_list` TEXT, `richdocument_direct_editing` INTEGER, `richdocument_direct_templates` INTEGER, `richdocument_optional_mimetype_list` TEXT, `sharing_public_ask_for_optional_password` INTEGER, `richdocument_product_name` TEXT, `direct_editing_etag` TEXT, `user_status` INTEGER, `user_status_supports_emoji` INTEGER, `etag` TEXT, `files_locking_version` TEXT, `groupfolders` INTEGER, `drop_account` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMajor",
+ "columnName": "version_mayor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMinor",
+ "columnName": "version_minor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMicro",
+ "columnName": "version_micro",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionString",
+ "columnName": "version_string",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionEditor",
+ "columnName": "version_edition",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "extendedSupport",
+ "columnName": "extended_support",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "corePollinterval",
+ "columnName": "core_pollinterval",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingApiEnabled",
+ "columnName": "sharing_api_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicEnabled",
+ "columnName": "sharing_public_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicPasswordEnforced",
+ "columnName": "sharing_public_password_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnabled",
+ "columnName": "sharing_public_expire_date_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateDays",
+ "columnName": "sharing_public_expire_date_days",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnforced",
+ "columnName": "sharing_public_expire_date_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicSendMail",
+ "columnName": "sharing_public_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicUpload",
+ "columnName": "sharing_public_upload",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingUserSendMail",
+ "columnName": "sharing_user_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingResharing",
+ "columnName": "sharing_resharing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationOutgoing",
+ "columnName": "sharing_federation_outgoing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationIncoming",
+ "columnName": "sharing_federation_incoming",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesBigfilechunking",
+ "columnName": "files_bigfilechunking",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesUndelete",
+ "columnName": "files_undelete",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesVersioning",
+ "columnName": "files_versioning",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "externalLinks",
+ "columnName": "external_links",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverName",
+ "columnName": "server_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverColor",
+ "columnName": "server_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverTextColor",
+ "columnName": "server_text_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverElementColor",
+ "columnName": "server_element_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverSlogan",
+ "columnName": "server_slogan",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverLogo",
+ "columnName": "server_logo",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundUrl",
+ "columnName": "background_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryption",
+ "columnName": "end_to_end_encryption",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryptionKeysExist",
+ "columnName": "end_to_end_encryption_keys_exist",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "activity",
+ "columnName": "activity",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundDefault",
+ "columnName": "background_default",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundPlain",
+ "columnName": "background_plain",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocument",
+ "columnName": "richdocument",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentMimetypeList",
+ "columnName": "richdocument_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentDirectEditing",
+ "columnName": "richdocument_direct_editing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentTemplates",
+ "columnName": "richdocument_direct_templates",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentOptionalMimetypeList",
+ "columnName": "richdocument_optional_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicAskForOptionalPassword",
+ "columnName": "sharing_public_ask_for_optional_password",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentProductName",
+ "columnName": "richdocument_product_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "directEditingEtag",
+ "columnName": "direct_editing_etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatus",
+ "columnName": "user_status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatusSupportsEmoji",
+ "columnName": "user_status_supports_emoji",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesLockingVersion",
+ "columnName": "files_locking_version",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "groupfolders",
+ "columnName": "groupfolders",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "dropAccount",
+ "columnName": "drop_account",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "external_links",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `icon_url` TEXT, `language` TEXT, `type` INTEGER, `name` TEXT, `url` TEXT, `redirect` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "iconUrl",
+ "columnName": "icon_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "language",
+ "columnName": "language",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "url",
+ "columnName": "url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "redirect",
+ "columnName": "redirect",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filelist",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `filename` TEXT, `encrypted_filename` TEXT, `path` TEXT, `path_decrypted` TEXT, `parent` INTEGER, `created` INTEGER, `modified` INTEGER, `content_type` TEXT, `content_length` INTEGER, `media_path` TEXT, `file_owner` TEXT, `last_sync_date` INTEGER, `last_sync_date_for_data` INTEGER, `modified_at_last_sync_for_data` INTEGER, `etag` TEXT, `etag_on_server` TEXT, `share_by_link` INTEGER, `permissions` TEXT, `remote_id` TEXT, `local_id` INTEGER NOT NULL DEFAULT -1, `update_thumbnail` INTEGER, `is_downloading` INTEGER, `favorite` INTEGER, `hidden` INTEGER, `is_encrypted` INTEGER, `etag_in_conflict` TEXT, `shared_via_users` INTEGER, `mount_type` INTEGER, `has_preview` INTEGER, `unread_comments_count` INTEGER, `owner_id` TEXT, `owner_display_name` TEXT, `note` TEXT, `sharees` TEXT, `rich_workspace` TEXT, `metadata_size` TEXT, `metadata_live_photo` TEXT, `locked` INTEGER, `lock_type` INTEGER, `lock_owner` TEXT, `lock_owner_display_name` TEXT, `lock_owner_editor` TEXT, `lock_timestamp` INTEGER, `lock_timeout` INTEGER, `lock_token` TEXT, `tags` TEXT, `metadata_gps` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "encryptedName",
+ "columnName": "encrypted_filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "pathDecrypted",
+ "columnName": "path_decrypted",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "parent",
+ "columnName": "parent",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "creation",
+ "columnName": "created",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modified",
+ "columnName": "modified",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentType",
+ "columnName": "content_type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentLength",
+ "columnName": "content_length",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "storagePath",
+ "columnName": "media_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "file_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDate",
+ "columnName": "last_sync_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDateForData",
+ "columnName": "last_sync_date_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modifiedAtLastSyncForData",
+ "columnName": "modified_at_last_sync_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagOnServer",
+ "columnName": "etag_on_server",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedViaLink",
+ "columnName": "share_by_link",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remoteId",
+ "columnName": "remote_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localId",
+ "columnName": "local_id",
+ "affinity": "INTEGER",
+ "notNull": true,
+ "defaultValue": "-1"
+ },
+ {
+ "fieldPath": "updateThumbnail",
+ "columnName": "update_thumbnail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDownloading",
+ "columnName": "is_downloading",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "favorite",
+ "columnName": "favorite",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isEncrypted",
+ "columnName": "is_encrypted",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagInConflict",
+ "columnName": "etag_in_conflict",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedWithSharee",
+ "columnName": "shared_via_users",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "mountType",
+ "columnName": "mount_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hasPreview",
+ "columnName": "has_preview",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "unreadCommentsCount",
+ "columnName": "unread_comments_count",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerId",
+ "columnName": "owner_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerDisplayName",
+ "columnName": "owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharees",
+ "columnName": "sharees",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richWorkspace",
+ "columnName": "rich_workspace",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataSize",
+ "columnName": "metadata_size",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataLivePhoto",
+ "columnName": "metadata_live_photo",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "locked",
+ "columnName": "locked",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockType",
+ "columnName": "lock_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwner",
+ "columnName": "lock_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerDisplayName",
+ "columnName": "lock_owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerEditor",
+ "columnName": "lock_owner_editor",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimestamp",
+ "columnName": "lock_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimeout",
+ "columnName": "lock_timeout",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockToken",
+ "columnName": "lock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "tags",
+ "columnName": "tags",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataGPS",
+ "columnName": "metadata_gps",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filesystem",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `is_folder` INTEGER, `found_at` INTEGER, `upload_triggered` INTEGER, `syncedfolder_id` TEXT, `crc32` TEXT, `modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileIsFolder",
+ "columnName": "is_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileFoundRecently",
+ "columnName": "found_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSentForUpload",
+ "columnName": "upload_triggered",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "syncedFolderId",
+ "columnName": "syncedfolder_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "crc32",
+ "columnName": "crc32",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileModified",
+ "columnName": "modified_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "ocshares",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `file_source` INTEGER, `item_source` INTEGER, `share_type` INTEGER, `shate_with` TEXT, `path` TEXT, `permissions` INTEGER, `shared_date` INTEGER, `expiration_date` INTEGER, `token` TEXT, `shared_with_display_name` TEXT, `is_directory` INTEGER, `user_id` INTEGER, `id_remote_shared` INTEGER, `owner_share` TEXT, `is_password_protected` INTEGER, `note` TEXT, `hide_download` INTEGER, `share_link` TEXT, `share_label` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSource",
+ "columnName": "file_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "itemSource",
+ "columnName": "item_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareType",
+ "columnName": "share_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWith",
+ "columnName": "shate_with",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedDate",
+ "columnName": "shared_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "expirationDate",
+ "columnName": "expiration_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "token",
+ "columnName": "token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWithDisplayName",
+ "columnName": "shared_with_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDirectory",
+ "columnName": "is_directory",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userId",
+ "columnName": "user_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "idRemoteShared",
+ "columnName": "id_remote_shared",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "owner_share",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isPasswordProtected",
+ "columnName": "is_password_protected",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hideDownload",
+ "columnName": "hide_download",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLink",
+ "columnName": "share_link",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLabel",
+ "columnName": "share_label",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "synced_folders",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `wifi_only` INTEGER, `charging_only` INTEGER, `existing` INTEGER, `enabled` INTEGER, `enabled_timestamp_ms` INTEGER, `subfolder_by_date` INTEGER, `account` TEXT, `upload_option` INTEGER, `name_collision_policy` INTEGER, `type` INTEGER, `hidden` INTEGER, `sub_folder_rule` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "wifiOnly",
+ "columnName": "wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "chargingOnly",
+ "columnName": "charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "existing",
+ "columnName": "existing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabled",
+ "columnName": "enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabledTimestampMs",
+ "columnName": "enabled_timestamp_ms",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "subfolderByDate",
+ "columnName": "subfolder_by_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "account",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadAction",
+ "columnName": "upload_option",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "subFolderRule",
+ "columnName": "sub_folder_rule",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "list_of_uploads",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `account_name` TEXT, `file_size` INTEGER, `status` INTEGER, `local_behaviour` INTEGER, `upload_time` INTEGER, `name_collision_policy` INTEGER, `is_create_remote_folder` INTEGER, `upload_end_timestamp` INTEGER, `last_result` INTEGER, `is_while_charging_only` INTEGER, `is_wifi_only` INTEGER, `created_by` INTEGER, `folder_unlock_token` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSize",
+ "columnName": "file_size",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "status",
+ "columnName": "status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localBehaviour",
+ "columnName": "local_behaviour",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadTime",
+ "columnName": "upload_time",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isCreateRemoteFolder",
+ "columnName": "is_create_remote_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadEndTimestamp",
+ "columnName": "upload_end_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastResult",
+ "columnName": "last_result",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWhileChargingOnly",
+ "columnName": "is_while_charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWifiOnly",
+ "columnName": "is_wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "createdBy",
+ "columnName": "created_by",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "folderUnlockToken",
+ "columnName": "folder_unlock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "virtual",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `type` TEXT, `ocfile_id` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ocFileId",
+ "columnName": "ocfile_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ }
+ ],
+ "views": [],
+ "setupQueries": [
+ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
+ "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '7558389fb83b310bead5d07c9a0bc722')"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/app/schemas/com.nextcloud.client.database.NextcloudDatabase/76.json b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/76.json
new file mode 100644
index 000000000000..b907f637f9a8
--- /dev/null
+++ b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/76.json
@@ -0,0 +1,1179 @@
+{
+ "formatVersion": 1,
+ "database": {
+ "version": 76,
+ "identityHash": "0d639ab041aa87e6c2ef9504395545f7",
+ "entities": [
+ {
+ "tableName": "arbitrary_data",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `cloud_id` TEXT, `key` TEXT, `value` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "cloudId",
+ "columnName": "cloud_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "key",
+ "columnName": "key",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "value",
+ "columnName": "value",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "capabilities",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `account` TEXT, `version_mayor` INTEGER, `version_minor` INTEGER, `version_micro` INTEGER, `version_string` TEXT, `version_edition` TEXT, `extended_support` INTEGER, `core_pollinterval` INTEGER, `sharing_api_enabled` INTEGER, `sharing_public_enabled` INTEGER, `sharing_public_password_enforced` INTEGER, `sharing_public_expire_date_enabled` INTEGER, `sharing_public_expire_date_days` INTEGER, `sharing_public_expire_date_enforced` INTEGER, `sharing_public_send_mail` INTEGER, `sharing_public_upload` INTEGER, `sharing_user_send_mail` INTEGER, `sharing_resharing` INTEGER, `sharing_federation_outgoing` INTEGER, `sharing_federation_incoming` INTEGER, `files_bigfilechunking` INTEGER, `files_undelete` INTEGER, `files_versioning` INTEGER, `external_links` INTEGER, `server_name` TEXT, `server_color` TEXT, `server_text_color` TEXT, `server_element_color` TEXT, `server_slogan` TEXT, `server_logo` TEXT, `background_url` TEXT, `end_to_end_encryption` INTEGER, `end_to_end_encryption_keys_exist` INTEGER, `activity` INTEGER, `background_default` INTEGER, `background_plain` INTEGER, `richdocument` INTEGER, `richdocument_mimetype_list` TEXT, `richdocument_direct_editing` INTEGER, `richdocument_direct_templates` INTEGER, `richdocument_optional_mimetype_list` TEXT, `sharing_public_ask_for_optional_password` INTEGER, `richdocument_product_name` TEXT, `direct_editing_etag` TEXT, `user_status` INTEGER, `user_status_supports_emoji` INTEGER, `etag` TEXT, `files_locking_version` TEXT, `groupfolders` INTEGER, `drop_account` INTEGER, `security_guard` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMajor",
+ "columnName": "version_mayor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMinor",
+ "columnName": "version_minor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMicro",
+ "columnName": "version_micro",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionString",
+ "columnName": "version_string",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionEditor",
+ "columnName": "version_edition",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "extendedSupport",
+ "columnName": "extended_support",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "corePollinterval",
+ "columnName": "core_pollinterval",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingApiEnabled",
+ "columnName": "sharing_api_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicEnabled",
+ "columnName": "sharing_public_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicPasswordEnforced",
+ "columnName": "sharing_public_password_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnabled",
+ "columnName": "sharing_public_expire_date_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateDays",
+ "columnName": "sharing_public_expire_date_days",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnforced",
+ "columnName": "sharing_public_expire_date_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicSendMail",
+ "columnName": "sharing_public_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicUpload",
+ "columnName": "sharing_public_upload",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingUserSendMail",
+ "columnName": "sharing_user_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingResharing",
+ "columnName": "sharing_resharing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationOutgoing",
+ "columnName": "sharing_federation_outgoing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationIncoming",
+ "columnName": "sharing_federation_incoming",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesBigfilechunking",
+ "columnName": "files_bigfilechunking",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesUndelete",
+ "columnName": "files_undelete",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesVersioning",
+ "columnName": "files_versioning",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "externalLinks",
+ "columnName": "external_links",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverName",
+ "columnName": "server_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverColor",
+ "columnName": "server_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverTextColor",
+ "columnName": "server_text_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverElementColor",
+ "columnName": "server_element_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverSlogan",
+ "columnName": "server_slogan",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverLogo",
+ "columnName": "server_logo",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundUrl",
+ "columnName": "background_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryption",
+ "columnName": "end_to_end_encryption",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryptionKeysExist",
+ "columnName": "end_to_end_encryption_keys_exist",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "activity",
+ "columnName": "activity",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundDefault",
+ "columnName": "background_default",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundPlain",
+ "columnName": "background_plain",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocument",
+ "columnName": "richdocument",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentMimetypeList",
+ "columnName": "richdocument_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentDirectEditing",
+ "columnName": "richdocument_direct_editing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentTemplates",
+ "columnName": "richdocument_direct_templates",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentOptionalMimetypeList",
+ "columnName": "richdocument_optional_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicAskForOptionalPassword",
+ "columnName": "sharing_public_ask_for_optional_password",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentProductName",
+ "columnName": "richdocument_product_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "directEditingEtag",
+ "columnName": "direct_editing_etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatus",
+ "columnName": "user_status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatusSupportsEmoji",
+ "columnName": "user_status_supports_emoji",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesLockingVersion",
+ "columnName": "files_locking_version",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "groupfolders",
+ "columnName": "groupfolders",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "dropAccount",
+ "columnName": "drop_account",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "securityGuard",
+ "columnName": "security_guard",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "external_links",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `icon_url` TEXT, `language` TEXT, `type` INTEGER, `name` TEXT, `url` TEXT, `redirect` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "iconUrl",
+ "columnName": "icon_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "language",
+ "columnName": "language",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "url",
+ "columnName": "url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "redirect",
+ "columnName": "redirect",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filelist",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `filename` TEXT, `encrypted_filename` TEXT, `path` TEXT, `path_decrypted` TEXT, `parent` INTEGER, `created` INTEGER, `modified` INTEGER, `content_type` TEXT, `content_length` INTEGER, `media_path` TEXT, `file_owner` TEXT, `last_sync_date` INTEGER, `last_sync_date_for_data` INTEGER, `modified_at_last_sync_for_data` INTEGER, `etag` TEXT, `etag_on_server` TEXT, `share_by_link` INTEGER, `permissions` TEXT, `remote_id` TEXT, `local_id` INTEGER NOT NULL DEFAULT -1, `update_thumbnail` INTEGER, `is_downloading` INTEGER, `favorite` INTEGER, `hidden` INTEGER, `is_encrypted` INTEGER, `etag_in_conflict` TEXT, `shared_via_users` INTEGER, `mount_type` INTEGER, `has_preview` INTEGER, `unread_comments_count` INTEGER, `owner_id` TEXT, `owner_display_name` TEXT, `note` TEXT, `sharees` TEXT, `rich_workspace` TEXT, `metadata_size` TEXT, `metadata_live_photo` TEXT, `locked` INTEGER, `lock_type` INTEGER, `lock_owner` TEXT, `lock_owner_display_name` TEXT, `lock_owner_editor` TEXT, `lock_timestamp` INTEGER, `lock_timeout` INTEGER, `lock_token` TEXT, `tags` TEXT, `metadata_gps` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "encryptedName",
+ "columnName": "encrypted_filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "pathDecrypted",
+ "columnName": "path_decrypted",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "parent",
+ "columnName": "parent",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "creation",
+ "columnName": "created",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modified",
+ "columnName": "modified",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentType",
+ "columnName": "content_type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentLength",
+ "columnName": "content_length",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "storagePath",
+ "columnName": "media_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "file_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDate",
+ "columnName": "last_sync_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDateForData",
+ "columnName": "last_sync_date_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modifiedAtLastSyncForData",
+ "columnName": "modified_at_last_sync_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagOnServer",
+ "columnName": "etag_on_server",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedViaLink",
+ "columnName": "share_by_link",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remoteId",
+ "columnName": "remote_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localId",
+ "columnName": "local_id",
+ "affinity": "INTEGER",
+ "notNull": true,
+ "defaultValue": "-1"
+ },
+ {
+ "fieldPath": "updateThumbnail",
+ "columnName": "update_thumbnail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDownloading",
+ "columnName": "is_downloading",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "favorite",
+ "columnName": "favorite",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isEncrypted",
+ "columnName": "is_encrypted",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagInConflict",
+ "columnName": "etag_in_conflict",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedWithSharee",
+ "columnName": "shared_via_users",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "mountType",
+ "columnName": "mount_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hasPreview",
+ "columnName": "has_preview",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "unreadCommentsCount",
+ "columnName": "unread_comments_count",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerId",
+ "columnName": "owner_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerDisplayName",
+ "columnName": "owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharees",
+ "columnName": "sharees",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richWorkspace",
+ "columnName": "rich_workspace",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataSize",
+ "columnName": "metadata_size",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataLivePhoto",
+ "columnName": "metadata_live_photo",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "locked",
+ "columnName": "locked",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockType",
+ "columnName": "lock_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwner",
+ "columnName": "lock_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerDisplayName",
+ "columnName": "lock_owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerEditor",
+ "columnName": "lock_owner_editor",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimestamp",
+ "columnName": "lock_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimeout",
+ "columnName": "lock_timeout",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockToken",
+ "columnName": "lock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "tags",
+ "columnName": "tags",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataGPS",
+ "columnName": "metadata_gps",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filesystem",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `is_folder` INTEGER, `found_at` INTEGER, `upload_triggered` INTEGER, `syncedfolder_id` TEXT, `crc32` TEXT, `modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileIsFolder",
+ "columnName": "is_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileFoundRecently",
+ "columnName": "found_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSentForUpload",
+ "columnName": "upload_triggered",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "syncedFolderId",
+ "columnName": "syncedfolder_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "crc32",
+ "columnName": "crc32",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileModified",
+ "columnName": "modified_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "ocshares",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `file_source` INTEGER, `item_source` INTEGER, `share_type` INTEGER, `shate_with` TEXT, `path` TEXT, `permissions` INTEGER, `shared_date` INTEGER, `expiration_date` INTEGER, `token` TEXT, `shared_with_display_name` TEXT, `is_directory` INTEGER, `user_id` INTEGER, `id_remote_shared` INTEGER, `owner_share` TEXT, `is_password_protected` INTEGER, `note` TEXT, `hide_download` INTEGER, `share_link` TEXT, `share_label` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSource",
+ "columnName": "file_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "itemSource",
+ "columnName": "item_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareType",
+ "columnName": "share_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWith",
+ "columnName": "shate_with",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedDate",
+ "columnName": "shared_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "expirationDate",
+ "columnName": "expiration_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "token",
+ "columnName": "token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWithDisplayName",
+ "columnName": "shared_with_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDirectory",
+ "columnName": "is_directory",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userId",
+ "columnName": "user_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "idRemoteShared",
+ "columnName": "id_remote_shared",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "owner_share",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isPasswordProtected",
+ "columnName": "is_password_protected",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hideDownload",
+ "columnName": "hide_download",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLink",
+ "columnName": "share_link",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLabel",
+ "columnName": "share_label",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "synced_folders",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `wifi_only` INTEGER, `charging_only` INTEGER, `existing` INTEGER, `enabled` INTEGER, `enabled_timestamp_ms` INTEGER, `subfolder_by_date` INTEGER, `account` TEXT, `upload_option` INTEGER, `name_collision_policy` INTEGER, `type` INTEGER, `hidden` INTEGER, `sub_folder_rule` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "wifiOnly",
+ "columnName": "wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "chargingOnly",
+ "columnName": "charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "existing",
+ "columnName": "existing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabled",
+ "columnName": "enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabledTimestampMs",
+ "columnName": "enabled_timestamp_ms",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "subfolderByDate",
+ "columnName": "subfolder_by_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "account",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadAction",
+ "columnName": "upload_option",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "subFolderRule",
+ "columnName": "sub_folder_rule",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "list_of_uploads",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `account_name` TEXT, `file_size` INTEGER, `status` INTEGER, `local_behaviour` INTEGER, `upload_time` INTEGER, `name_collision_policy` INTEGER, `is_create_remote_folder` INTEGER, `upload_end_timestamp` INTEGER, `last_result` INTEGER, `is_while_charging_only` INTEGER, `is_wifi_only` INTEGER, `created_by` INTEGER, `folder_unlock_token` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSize",
+ "columnName": "file_size",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "status",
+ "columnName": "status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localBehaviour",
+ "columnName": "local_behaviour",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadTime",
+ "columnName": "upload_time",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isCreateRemoteFolder",
+ "columnName": "is_create_remote_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadEndTimestamp",
+ "columnName": "upload_end_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastResult",
+ "columnName": "last_result",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWhileChargingOnly",
+ "columnName": "is_while_charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWifiOnly",
+ "columnName": "is_wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "createdBy",
+ "columnName": "created_by",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "folderUnlockToken",
+ "columnName": "folder_unlock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "virtual",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `type` TEXT, `ocfile_id` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ocFileId",
+ "columnName": "ocfile_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ }
+ ],
+ "views": [],
+ "setupQueries": [
+ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
+ "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '0d639ab041aa87e6c2ef9504395545f7')"
+ ]
+ }
+}
diff --git a/app/schemas/com.nextcloud.client.database.NextcloudDatabase/77.json b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/77.json
new file mode 100644
index 000000000000..8031ac6b6431
--- /dev/null
+++ b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/77.json
@@ -0,0 +1,1191 @@
+{
+ "formatVersion": 1,
+ "database": {
+ "version": 77,
+ "identityHash": "a3c1d02f306c6613a9a0d392b6cfa7f8",
+ "entities": [
+ {
+ "tableName": "arbitrary_data",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `cloud_id` TEXT, `key` TEXT, `value` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "cloudId",
+ "columnName": "cloud_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "key",
+ "columnName": "key",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "value",
+ "columnName": "value",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "capabilities",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `account` TEXT, `version_mayor` INTEGER, `version_minor` INTEGER, `version_micro` INTEGER, `version_string` TEXT, `version_edition` TEXT, `extended_support` INTEGER, `core_pollinterval` INTEGER, `sharing_api_enabled` INTEGER, `sharing_public_enabled` INTEGER, `sharing_public_password_enforced` INTEGER, `sharing_public_expire_date_enabled` INTEGER, `sharing_public_expire_date_days` INTEGER, `sharing_public_expire_date_enforced` INTEGER, `sharing_public_send_mail` INTEGER, `sharing_public_upload` INTEGER, `sharing_user_send_mail` INTEGER, `sharing_resharing` INTEGER, `sharing_federation_outgoing` INTEGER, `sharing_federation_incoming` INTEGER, `files_bigfilechunking` INTEGER, `files_undelete` INTEGER, `files_versioning` INTEGER, `external_links` INTEGER, `server_name` TEXT, `server_color` TEXT, `server_text_color` TEXT, `server_element_color` TEXT, `server_slogan` TEXT, `server_logo` TEXT, `background_url` TEXT, `end_to_end_encryption` INTEGER, `end_to_end_encryption_keys_exist` INTEGER, `end_to_end_encryption_api_version` TEXT, `activity` INTEGER, `background_default` INTEGER, `background_plain` INTEGER, `richdocument` INTEGER, `richdocument_mimetype_list` TEXT, `richdocument_direct_editing` INTEGER, `richdocument_direct_templates` INTEGER, `richdocument_optional_mimetype_list` TEXT, `sharing_public_ask_for_optional_password` INTEGER, `richdocument_product_name` TEXT, `direct_editing_etag` TEXT, `user_status` INTEGER, `user_status_supports_emoji` INTEGER, `etag` TEXT, `files_locking_version` TEXT, `groupfolders` INTEGER, `drop_account` INTEGER, `security_guard` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMajor",
+ "columnName": "version_mayor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMinor",
+ "columnName": "version_minor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMicro",
+ "columnName": "version_micro",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionString",
+ "columnName": "version_string",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionEditor",
+ "columnName": "version_edition",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "extendedSupport",
+ "columnName": "extended_support",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "corePollinterval",
+ "columnName": "core_pollinterval",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingApiEnabled",
+ "columnName": "sharing_api_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicEnabled",
+ "columnName": "sharing_public_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicPasswordEnforced",
+ "columnName": "sharing_public_password_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnabled",
+ "columnName": "sharing_public_expire_date_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateDays",
+ "columnName": "sharing_public_expire_date_days",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnforced",
+ "columnName": "sharing_public_expire_date_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicSendMail",
+ "columnName": "sharing_public_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicUpload",
+ "columnName": "sharing_public_upload",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingUserSendMail",
+ "columnName": "sharing_user_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingResharing",
+ "columnName": "sharing_resharing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationOutgoing",
+ "columnName": "sharing_federation_outgoing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationIncoming",
+ "columnName": "sharing_federation_incoming",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesBigfilechunking",
+ "columnName": "files_bigfilechunking",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesUndelete",
+ "columnName": "files_undelete",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesVersioning",
+ "columnName": "files_versioning",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "externalLinks",
+ "columnName": "external_links",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverName",
+ "columnName": "server_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverColor",
+ "columnName": "server_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverTextColor",
+ "columnName": "server_text_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverElementColor",
+ "columnName": "server_element_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverSlogan",
+ "columnName": "server_slogan",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverLogo",
+ "columnName": "server_logo",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundUrl",
+ "columnName": "background_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryption",
+ "columnName": "end_to_end_encryption",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryptionKeysExist",
+ "columnName": "end_to_end_encryption_keys_exist",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryptionApiVersion",
+ "columnName": "end_to_end_encryption_api_version",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "activity",
+ "columnName": "activity",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundDefault",
+ "columnName": "background_default",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundPlain",
+ "columnName": "background_plain",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocument",
+ "columnName": "richdocument",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentMimetypeList",
+ "columnName": "richdocument_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentDirectEditing",
+ "columnName": "richdocument_direct_editing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentTemplates",
+ "columnName": "richdocument_direct_templates",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentOptionalMimetypeList",
+ "columnName": "richdocument_optional_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicAskForOptionalPassword",
+ "columnName": "sharing_public_ask_for_optional_password",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentProductName",
+ "columnName": "richdocument_product_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "directEditingEtag",
+ "columnName": "direct_editing_etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatus",
+ "columnName": "user_status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatusSupportsEmoji",
+ "columnName": "user_status_supports_emoji",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesLockingVersion",
+ "columnName": "files_locking_version",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "groupfolders",
+ "columnName": "groupfolders",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "dropAccount",
+ "columnName": "drop_account",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "securityGuard",
+ "columnName": "security_guard",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "external_links",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `icon_url` TEXT, `language` TEXT, `type` INTEGER, `name` TEXT, `url` TEXT, `redirect` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "iconUrl",
+ "columnName": "icon_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "language",
+ "columnName": "language",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "url",
+ "columnName": "url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "redirect",
+ "columnName": "redirect",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filelist",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `filename` TEXT, `encrypted_filename` TEXT, `path` TEXT, `path_decrypted` TEXT, `parent` INTEGER, `created` INTEGER, `modified` INTEGER, `content_type` TEXT, `content_length` INTEGER, `media_path` TEXT, `file_owner` TEXT, `last_sync_date` INTEGER, `last_sync_date_for_data` INTEGER, `modified_at_last_sync_for_data` INTEGER, `etag` TEXT, `etag_on_server` TEXT, `share_by_link` INTEGER, `permissions` TEXT, `remote_id` TEXT, `local_id` INTEGER NOT NULL DEFAULT -1, `update_thumbnail` INTEGER, `is_downloading` INTEGER, `favorite` INTEGER, `hidden` INTEGER, `is_encrypted` INTEGER, `etag_in_conflict` TEXT, `shared_via_users` INTEGER, `mount_type` INTEGER, `has_preview` INTEGER, `unread_comments_count` INTEGER, `owner_id` TEXT, `owner_display_name` TEXT, `note` TEXT, `sharees` TEXT, `rich_workspace` TEXT, `metadata_size` TEXT, `metadata_live_photo` TEXT, `locked` INTEGER, `lock_type` INTEGER, `lock_owner` TEXT, `lock_owner_display_name` TEXT, `lock_owner_editor` TEXT, `lock_timestamp` INTEGER, `lock_timeout` INTEGER, `lock_token` TEXT, `tags` TEXT, `metadata_gps` TEXT, `e2e_counter` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "encryptedName",
+ "columnName": "encrypted_filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "pathDecrypted",
+ "columnName": "path_decrypted",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "parent",
+ "columnName": "parent",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "creation",
+ "columnName": "created",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modified",
+ "columnName": "modified",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentType",
+ "columnName": "content_type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentLength",
+ "columnName": "content_length",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "storagePath",
+ "columnName": "media_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "file_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDate",
+ "columnName": "last_sync_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDateForData",
+ "columnName": "last_sync_date_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modifiedAtLastSyncForData",
+ "columnName": "modified_at_last_sync_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagOnServer",
+ "columnName": "etag_on_server",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedViaLink",
+ "columnName": "share_by_link",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remoteId",
+ "columnName": "remote_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localId",
+ "columnName": "local_id",
+ "affinity": "INTEGER",
+ "notNull": true,
+ "defaultValue": "-1"
+ },
+ {
+ "fieldPath": "updateThumbnail",
+ "columnName": "update_thumbnail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDownloading",
+ "columnName": "is_downloading",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "favorite",
+ "columnName": "favorite",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isEncrypted",
+ "columnName": "is_encrypted",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagInConflict",
+ "columnName": "etag_in_conflict",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedWithSharee",
+ "columnName": "shared_via_users",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "mountType",
+ "columnName": "mount_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hasPreview",
+ "columnName": "has_preview",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "unreadCommentsCount",
+ "columnName": "unread_comments_count",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerId",
+ "columnName": "owner_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerDisplayName",
+ "columnName": "owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharees",
+ "columnName": "sharees",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richWorkspace",
+ "columnName": "rich_workspace",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataSize",
+ "columnName": "metadata_size",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataLivePhoto",
+ "columnName": "metadata_live_photo",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "locked",
+ "columnName": "locked",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockType",
+ "columnName": "lock_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwner",
+ "columnName": "lock_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerDisplayName",
+ "columnName": "lock_owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerEditor",
+ "columnName": "lock_owner_editor",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimestamp",
+ "columnName": "lock_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimeout",
+ "columnName": "lock_timeout",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockToken",
+ "columnName": "lock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "tags",
+ "columnName": "tags",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataGPS",
+ "columnName": "metadata_gps",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "e2eCounter",
+ "columnName": "e2e_counter",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filesystem",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `is_folder` INTEGER, `found_at` INTEGER, `upload_triggered` INTEGER, `syncedfolder_id` TEXT, `crc32` TEXT, `modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileIsFolder",
+ "columnName": "is_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileFoundRecently",
+ "columnName": "found_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSentForUpload",
+ "columnName": "upload_triggered",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "syncedFolderId",
+ "columnName": "syncedfolder_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "crc32",
+ "columnName": "crc32",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileModified",
+ "columnName": "modified_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "ocshares",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `file_source` INTEGER, `item_source` INTEGER, `share_type` INTEGER, `shate_with` TEXT, `path` TEXT, `permissions` INTEGER, `shared_date` INTEGER, `expiration_date` INTEGER, `token` TEXT, `shared_with_display_name` TEXT, `is_directory` INTEGER, `user_id` INTEGER, `id_remote_shared` INTEGER, `owner_share` TEXT, `is_password_protected` INTEGER, `note` TEXT, `hide_download` INTEGER, `share_link` TEXT, `share_label` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSource",
+ "columnName": "file_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "itemSource",
+ "columnName": "item_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareType",
+ "columnName": "share_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWith",
+ "columnName": "shate_with",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedDate",
+ "columnName": "shared_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "expirationDate",
+ "columnName": "expiration_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "token",
+ "columnName": "token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWithDisplayName",
+ "columnName": "shared_with_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDirectory",
+ "columnName": "is_directory",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userId",
+ "columnName": "user_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "idRemoteShared",
+ "columnName": "id_remote_shared",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "owner_share",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isPasswordProtected",
+ "columnName": "is_password_protected",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hideDownload",
+ "columnName": "hide_download",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLink",
+ "columnName": "share_link",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLabel",
+ "columnName": "share_label",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "synced_folders",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `wifi_only` INTEGER, `charging_only` INTEGER, `existing` INTEGER, `enabled` INTEGER, `enabled_timestamp_ms` INTEGER, `subfolder_by_date` INTEGER, `account` TEXT, `upload_option` INTEGER, `name_collision_policy` INTEGER, `type` INTEGER, `hidden` INTEGER, `sub_folder_rule` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "wifiOnly",
+ "columnName": "wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "chargingOnly",
+ "columnName": "charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "existing",
+ "columnName": "existing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabled",
+ "columnName": "enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabledTimestampMs",
+ "columnName": "enabled_timestamp_ms",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "subfolderByDate",
+ "columnName": "subfolder_by_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "account",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadAction",
+ "columnName": "upload_option",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "subFolderRule",
+ "columnName": "sub_folder_rule",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "list_of_uploads",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `account_name` TEXT, `file_size` INTEGER, `status` INTEGER, `local_behaviour` INTEGER, `upload_time` INTEGER, `name_collision_policy` INTEGER, `is_create_remote_folder` INTEGER, `upload_end_timestamp` INTEGER, `last_result` INTEGER, `is_while_charging_only` INTEGER, `is_wifi_only` INTEGER, `created_by` INTEGER, `folder_unlock_token` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSize",
+ "columnName": "file_size",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "status",
+ "columnName": "status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localBehaviour",
+ "columnName": "local_behaviour",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadTime",
+ "columnName": "upload_time",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isCreateRemoteFolder",
+ "columnName": "is_create_remote_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadEndTimestamp",
+ "columnName": "upload_end_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastResult",
+ "columnName": "last_result",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWhileChargingOnly",
+ "columnName": "is_while_charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWifiOnly",
+ "columnName": "is_wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "createdBy",
+ "columnName": "created_by",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "folderUnlockToken",
+ "columnName": "folder_unlock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "virtual",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `type` TEXT, `ocfile_id` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ocFileId",
+ "columnName": "ocfile_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ }
+ ],
+ "views": [],
+ "setupQueries": [
+ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
+ "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'a3c1d02f306c6613a9a0d392b6cfa7f8')"
+ ]
+ }
+}
diff --git a/app/schemas/com.nextcloud.client.database.NextcloudDatabase/78.json b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/78.json
new file mode 100644
index 000000000000..9ac5f2e87f7f
--- /dev/null
+++ b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/78.json
@@ -0,0 +1,1197 @@
+{
+ "formatVersion": 1,
+ "database": {
+ "version": 78,
+ "identityHash": "f26afed3b9b87a3acb578947a26223ac",
+ "entities": [
+ {
+ "tableName": "arbitrary_data",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `cloud_id` TEXT, `key` TEXT, `value` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "cloudId",
+ "columnName": "cloud_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "key",
+ "columnName": "key",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "value",
+ "columnName": "value",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "capabilities",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `account` TEXT, `version_mayor` INTEGER, `version_minor` INTEGER, `version_micro` INTEGER, `version_string` TEXT, `version_edition` TEXT, `extended_support` INTEGER, `core_pollinterval` INTEGER, `sharing_api_enabled` INTEGER, `sharing_public_enabled` INTEGER, `sharing_public_password_enforced` INTEGER, `sharing_public_expire_date_enabled` INTEGER, `sharing_public_expire_date_days` INTEGER, `sharing_public_expire_date_enforced` INTEGER, `sharing_public_send_mail` INTEGER, `sharing_public_upload` INTEGER, `sharing_user_send_mail` INTEGER, `sharing_resharing` INTEGER, `sharing_federation_outgoing` INTEGER, `sharing_federation_incoming` INTEGER, `files_bigfilechunking` INTEGER, `files_undelete` INTEGER, `files_versioning` INTEGER, `external_links` INTEGER, `server_name` TEXT, `server_color` TEXT, `server_text_color` TEXT, `server_element_color` TEXT, `server_slogan` TEXT, `server_logo` TEXT, `background_url` TEXT, `end_to_end_encryption` INTEGER, `end_to_end_encryption_keys_exist` INTEGER, `end_to_end_encryption_api_version` TEXT, `activity` INTEGER, `background_default` INTEGER, `background_plain` INTEGER, `richdocument` INTEGER, `richdocument_mimetype_list` TEXT, `richdocument_direct_editing` INTEGER, `richdocument_direct_templates` INTEGER, `richdocument_optional_mimetype_list` TEXT, `sharing_public_ask_for_optional_password` INTEGER, `richdocument_product_name` TEXT, `direct_editing_etag` TEXT, `user_status` INTEGER, `user_status_supports_emoji` INTEGER, `etag` TEXT, `files_locking_version` TEXT, `groupfolders` INTEGER, `drop_account` INTEGER, `security_guard` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMajor",
+ "columnName": "version_mayor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMinor",
+ "columnName": "version_minor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMicro",
+ "columnName": "version_micro",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionString",
+ "columnName": "version_string",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionEditor",
+ "columnName": "version_edition",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "extendedSupport",
+ "columnName": "extended_support",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "corePollinterval",
+ "columnName": "core_pollinterval",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingApiEnabled",
+ "columnName": "sharing_api_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicEnabled",
+ "columnName": "sharing_public_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicPasswordEnforced",
+ "columnName": "sharing_public_password_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnabled",
+ "columnName": "sharing_public_expire_date_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateDays",
+ "columnName": "sharing_public_expire_date_days",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnforced",
+ "columnName": "sharing_public_expire_date_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicSendMail",
+ "columnName": "sharing_public_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicUpload",
+ "columnName": "sharing_public_upload",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingUserSendMail",
+ "columnName": "sharing_user_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingResharing",
+ "columnName": "sharing_resharing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationOutgoing",
+ "columnName": "sharing_federation_outgoing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationIncoming",
+ "columnName": "sharing_federation_incoming",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesBigfilechunking",
+ "columnName": "files_bigfilechunking",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesUndelete",
+ "columnName": "files_undelete",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesVersioning",
+ "columnName": "files_versioning",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "externalLinks",
+ "columnName": "external_links",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverName",
+ "columnName": "server_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverColor",
+ "columnName": "server_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverTextColor",
+ "columnName": "server_text_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverElementColor",
+ "columnName": "server_element_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverSlogan",
+ "columnName": "server_slogan",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverLogo",
+ "columnName": "server_logo",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundUrl",
+ "columnName": "background_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryption",
+ "columnName": "end_to_end_encryption",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryptionKeysExist",
+ "columnName": "end_to_end_encryption_keys_exist",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryptionApiVersion",
+ "columnName": "end_to_end_encryption_api_version",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "activity",
+ "columnName": "activity",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundDefault",
+ "columnName": "background_default",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundPlain",
+ "columnName": "background_plain",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocument",
+ "columnName": "richdocument",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentMimetypeList",
+ "columnName": "richdocument_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentDirectEditing",
+ "columnName": "richdocument_direct_editing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentTemplates",
+ "columnName": "richdocument_direct_templates",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentOptionalMimetypeList",
+ "columnName": "richdocument_optional_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicAskForOptionalPassword",
+ "columnName": "sharing_public_ask_for_optional_password",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentProductName",
+ "columnName": "richdocument_product_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "directEditingEtag",
+ "columnName": "direct_editing_etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatus",
+ "columnName": "user_status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatusSupportsEmoji",
+ "columnName": "user_status_supports_emoji",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesLockingVersion",
+ "columnName": "files_locking_version",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "groupfolders",
+ "columnName": "groupfolders",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "dropAccount",
+ "columnName": "drop_account",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "securityGuard",
+ "columnName": "security_guard",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "external_links",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `icon_url` TEXT, `language` TEXT, `type` INTEGER, `name` TEXT, `url` TEXT, `redirect` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "iconUrl",
+ "columnName": "icon_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "language",
+ "columnName": "language",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "url",
+ "columnName": "url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "redirect",
+ "columnName": "redirect",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filelist",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `filename` TEXT, `encrypted_filename` TEXT, `path` TEXT, `path_decrypted` TEXT, `parent` INTEGER, `created` INTEGER, `modified` INTEGER, `content_type` TEXT, `content_length` INTEGER, `media_path` TEXT, `file_owner` TEXT, `last_sync_date` INTEGER, `last_sync_date_for_data` INTEGER, `modified_at_last_sync_for_data` INTEGER, `etag` TEXT, `etag_on_server` TEXT, `share_by_link` INTEGER, `permissions` TEXT, `remote_id` TEXT, `local_id` INTEGER NOT NULL DEFAULT -1, `update_thumbnail` INTEGER, `is_downloading` INTEGER, `favorite` INTEGER, `hidden` INTEGER, `is_encrypted` INTEGER, `etag_in_conflict` TEXT, `shared_via_users` INTEGER, `mount_type` INTEGER, `has_preview` INTEGER, `unread_comments_count` INTEGER, `owner_id` TEXT, `owner_display_name` TEXT, `note` TEXT, `sharees` TEXT, `rich_workspace` TEXT, `metadata_size` TEXT, `metadata_live_photo` TEXT, `locked` INTEGER, `lock_type` INTEGER, `lock_owner` TEXT, `lock_owner_display_name` TEXT, `lock_owner_editor` TEXT, `lock_timestamp` INTEGER, `lock_timeout` INTEGER, `lock_token` TEXT, `tags` TEXT, `metadata_gps` TEXT, `e2e_counter` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "encryptedName",
+ "columnName": "encrypted_filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "pathDecrypted",
+ "columnName": "path_decrypted",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "parent",
+ "columnName": "parent",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "creation",
+ "columnName": "created",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modified",
+ "columnName": "modified",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentType",
+ "columnName": "content_type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentLength",
+ "columnName": "content_length",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "storagePath",
+ "columnName": "media_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "file_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDate",
+ "columnName": "last_sync_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDateForData",
+ "columnName": "last_sync_date_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modifiedAtLastSyncForData",
+ "columnName": "modified_at_last_sync_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagOnServer",
+ "columnName": "etag_on_server",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedViaLink",
+ "columnName": "share_by_link",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remoteId",
+ "columnName": "remote_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localId",
+ "columnName": "local_id",
+ "affinity": "INTEGER",
+ "notNull": true,
+ "defaultValue": "-1"
+ },
+ {
+ "fieldPath": "updateThumbnail",
+ "columnName": "update_thumbnail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDownloading",
+ "columnName": "is_downloading",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "favorite",
+ "columnName": "favorite",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isEncrypted",
+ "columnName": "is_encrypted",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagInConflict",
+ "columnName": "etag_in_conflict",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedWithSharee",
+ "columnName": "shared_via_users",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "mountType",
+ "columnName": "mount_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hasPreview",
+ "columnName": "has_preview",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "unreadCommentsCount",
+ "columnName": "unread_comments_count",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerId",
+ "columnName": "owner_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerDisplayName",
+ "columnName": "owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharees",
+ "columnName": "sharees",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richWorkspace",
+ "columnName": "rich_workspace",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataSize",
+ "columnName": "metadata_size",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataLivePhoto",
+ "columnName": "metadata_live_photo",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "locked",
+ "columnName": "locked",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockType",
+ "columnName": "lock_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwner",
+ "columnName": "lock_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerDisplayName",
+ "columnName": "lock_owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerEditor",
+ "columnName": "lock_owner_editor",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimestamp",
+ "columnName": "lock_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimeout",
+ "columnName": "lock_timeout",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockToken",
+ "columnName": "lock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "tags",
+ "columnName": "tags",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataGPS",
+ "columnName": "metadata_gps",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "e2eCounter",
+ "columnName": "e2e_counter",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filesystem",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `is_folder` INTEGER, `found_at` INTEGER, `upload_triggered` INTEGER, `syncedfolder_id` TEXT, `crc32` TEXT, `modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileIsFolder",
+ "columnName": "is_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileFoundRecently",
+ "columnName": "found_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSentForUpload",
+ "columnName": "upload_triggered",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "syncedFolderId",
+ "columnName": "syncedfolder_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "crc32",
+ "columnName": "crc32",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileModified",
+ "columnName": "modified_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "ocshares",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `file_source` INTEGER, `item_source` INTEGER, `share_type` INTEGER, `shate_with` TEXT, `path` TEXT, `permissions` INTEGER, `shared_date` INTEGER, `expiration_date` INTEGER, `token` TEXT, `shared_with_display_name` TEXT, `is_directory` INTEGER, `user_id` INTEGER, `id_remote_shared` INTEGER, `owner_share` TEXT, `is_password_protected` INTEGER, `note` TEXT, `hide_download` INTEGER, `share_link` TEXT, `share_label` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSource",
+ "columnName": "file_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "itemSource",
+ "columnName": "item_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareType",
+ "columnName": "share_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWith",
+ "columnName": "shate_with",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedDate",
+ "columnName": "shared_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "expirationDate",
+ "columnName": "expiration_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "token",
+ "columnName": "token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWithDisplayName",
+ "columnName": "shared_with_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDirectory",
+ "columnName": "is_directory",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userId",
+ "columnName": "user_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "idRemoteShared",
+ "columnName": "id_remote_shared",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "owner_share",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isPasswordProtected",
+ "columnName": "is_password_protected",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hideDownload",
+ "columnName": "hide_download",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLink",
+ "columnName": "share_link",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLabel",
+ "columnName": "share_label",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "synced_folders",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `wifi_only` INTEGER, `charging_only` INTEGER, `existing` INTEGER, `enabled` INTEGER, `enabled_timestamp_ms` INTEGER, `subfolder_by_date` INTEGER, `account` TEXT, `upload_option` INTEGER, `name_collision_policy` INTEGER, `type` INTEGER, `hidden` INTEGER, `sub_folder_rule` INTEGER, `exclude_hidden` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "wifiOnly",
+ "columnName": "wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "chargingOnly",
+ "columnName": "charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "existing",
+ "columnName": "existing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabled",
+ "columnName": "enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabledTimestampMs",
+ "columnName": "enabled_timestamp_ms",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "subfolderByDate",
+ "columnName": "subfolder_by_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "account",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadAction",
+ "columnName": "upload_option",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "subFolderRule",
+ "columnName": "sub_folder_rule",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "excludeHidden",
+ "columnName": "exclude_hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "list_of_uploads",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `account_name` TEXT, `file_size` INTEGER, `status` INTEGER, `local_behaviour` INTEGER, `upload_time` INTEGER, `name_collision_policy` INTEGER, `is_create_remote_folder` INTEGER, `upload_end_timestamp` INTEGER, `last_result` INTEGER, `is_while_charging_only` INTEGER, `is_wifi_only` INTEGER, `created_by` INTEGER, `folder_unlock_token` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSize",
+ "columnName": "file_size",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "status",
+ "columnName": "status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localBehaviour",
+ "columnName": "local_behaviour",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadTime",
+ "columnName": "upload_time",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isCreateRemoteFolder",
+ "columnName": "is_create_remote_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadEndTimestamp",
+ "columnName": "upload_end_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastResult",
+ "columnName": "last_result",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWhileChargingOnly",
+ "columnName": "is_while_charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWifiOnly",
+ "columnName": "is_wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "createdBy",
+ "columnName": "created_by",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "folderUnlockToken",
+ "columnName": "folder_unlock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "virtual",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `type` TEXT, `ocfile_id` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ocFileId",
+ "columnName": "ocfile_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ }
+ ],
+ "views": [],
+ "setupQueries": [
+ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
+ "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'f26afed3b9b87a3acb578947a26223ac')"
+ ]
+ }
+}
diff --git a/app/schemas/com.nextcloud.client.database.NextcloudDatabase/79.json b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/79.json
new file mode 100644
index 000000000000..708ca00a730e
--- /dev/null
+++ b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/79.json
@@ -0,0 +1,1203 @@
+{
+ "formatVersion": 1,
+ "database": {
+ "version": 79,
+ "identityHash": "ec997f271f9045e8483b260f036a168f",
+ "entities": [
+ {
+ "tableName": "arbitrary_data",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `cloud_id` TEXT, `key` TEXT, `value` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "cloudId",
+ "columnName": "cloud_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "key",
+ "columnName": "key",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "value",
+ "columnName": "value",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "capabilities",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `assistant` INTEGER, `account` TEXT, `version_mayor` INTEGER, `version_minor` INTEGER, `version_micro` INTEGER, `version_string` TEXT, `version_edition` TEXT, `extended_support` INTEGER, `core_pollinterval` INTEGER, `sharing_api_enabled` INTEGER, `sharing_public_enabled` INTEGER, `sharing_public_password_enforced` INTEGER, `sharing_public_expire_date_enabled` INTEGER, `sharing_public_expire_date_days` INTEGER, `sharing_public_expire_date_enforced` INTEGER, `sharing_public_send_mail` INTEGER, `sharing_public_upload` INTEGER, `sharing_user_send_mail` INTEGER, `sharing_resharing` INTEGER, `sharing_federation_outgoing` INTEGER, `sharing_federation_incoming` INTEGER, `files_bigfilechunking` INTEGER, `files_undelete` INTEGER, `files_versioning` INTEGER, `external_links` INTEGER, `server_name` TEXT, `server_color` TEXT, `server_text_color` TEXT, `server_element_color` TEXT, `server_slogan` TEXT, `server_logo` TEXT, `background_url` TEXT, `end_to_end_encryption` INTEGER, `end_to_end_encryption_keys_exist` INTEGER, `end_to_end_encryption_api_version` TEXT, `activity` INTEGER, `background_default` INTEGER, `background_plain` INTEGER, `richdocument` INTEGER, `richdocument_mimetype_list` TEXT, `richdocument_direct_editing` INTEGER, `richdocument_direct_templates` INTEGER, `richdocument_optional_mimetype_list` TEXT, `sharing_public_ask_for_optional_password` INTEGER, `richdocument_product_name` TEXT, `direct_editing_etag` TEXT, `user_status` INTEGER, `user_status_supports_emoji` INTEGER, `etag` TEXT, `files_locking_version` TEXT, `groupfolders` INTEGER, `drop_account` INTEGER, `security_guard` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "assistant",
+ "columnName": "assistant",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMajor",
+ "columnName": "version_mayor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMinor",
+ "columnName": "version_minor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMicro",
+ "columnName": "version_micro",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionString",
+ "columnName": "version_string",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionEditor",
+ "columnName": "version_edition",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "extendedSupport",
+ "columnName": "extended_support",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "corePollinterval",
+ "columnName": "core_pollinterval",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingApiEnabled",
+ "columnName": "sharing_api_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicEnabled",
+ "columnName": "sharing_public_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicPasswordEnforced",
+ "columnName": "sharing_public_password_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnabled",
+ "columnName": "sharing_public_expire_date_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateDays",
+ "columnName": "sharing_public_expire_date_days",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnforced",
+ "columnName": "sharing_public_expire_date_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicSendMail",
+ "columnName": "sharing_public_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicUpload",
+ "columnName": "sharing_public_upload",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingUserSendMail",
+ "columnName": "sharing_user_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingResharing",
+ "columnName": "sharing_resharing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationOutgoing",
+ "columnName": "sharing_federation_outgoing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationIncoming",
+ "columnName": "sharing_federation_incoming",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesBigfilechunking",
+ "columnName": "files_bigfilechunking",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesUndelete",
+ "columnName": "files_undelete",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesVersioning",
+ "columnName": "files_versioning",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "externalLinks",
+ "columnName": "external_links",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverName",
+ "columnName": "server_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverColor",
+ "columnName": "server_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverTextColor",
+ "columnName": "server_text_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverElementColor",
+ "columnName": "server_element_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverSlogan",
+ "columnName": "server_slogan",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverLogo",
+ "columnName": "server_logo",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundUrl",
+ "columnName": "background_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryption",
+ "columnName": "end_to_end_encryption",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryptionKeysExist",
+ "columnName": "end_to_end_encryption_keys_exist",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryptionApiVersion",
+ "columnName": "end_to_end_encryption_api_version",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "activity",
+ "columnName": "activity",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundDefault",
+ "columnName": "background_default",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundPlain",
+ "columnName": "background_plain",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocument",
+ "columnName": "richdocument",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentMimetypeList",
+ "columnName": "richdocument_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentDirectEditing",
+ "columnName": "richdocument_direct_editing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentTemplates",
+ "columnName": "richdocument_direct_templates",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentOptionalMimetypeList",
+ "columnName": "richdocument_optional_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicAskForOptionalPassword",
+ "columnName": "sharing_public_ask_for_optional_password",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentProductName",
+ "columnName": "richdocument_product_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "directEditingEtag",
+ "columnName": "direct_editing_etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatus",
+ "columnName": "user_status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatusSupportsEmoji",
+ "columnName": "user_status_supports_emoji",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesLockingVersion",
+ "columnName": "files_locking_version",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "groupfolders",
+ "columnName": "groupfolders",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "dropAccount",
+ "columnName": "drop_account",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "securityGuard",
+ "columnName": "security_guard",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "external_links",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `icon_url` TEXT, `language` TEXT, `type` INTEGER, `name` TEXT, `url` TEXT, `redirect` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "iconUrl",
+ "columnName": "icon_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "language",
+ "columnName": "language",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "url",
+ "columnName": "url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "redirect",
+ "columnName": "redirect",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filelist",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `filename` TEXT, `encrypted_filename` TEXT, `path` TEXT, `path_decrypted` TEXT, `parent` INTEGER, `created` INTEGER, `modified` INTEGER, `content_type` TEXT, `content_length` INTEGER, `media_path` TEXT, `file_owner` TEXT, `last_sync_date` INTEGER, `last_sync_date_for_data` INTEGER, `modified_at_last_sync_for_data` INTEGER, `etag` TEXT, `etag_on_server` TEXT, `share_by_link` INTEGER, `permissions` TEXT, `remote_id` TEXT, `local_id` INTEGER NOT NULL DEFAULT -1, `update_thumbnail` INTEGER, `is_downloading` INTEGER, `favorite` INTEGER, `hidden` INTEGER, `is_encrypted` INTEGER, `etag_in_conflict` TEXT, `shared_via_users` INTEGER, `mount_type` INTEGER, `has_preview` INTEGER, `unread_comments_count` INTEGER, `owner_id` TEXT, `owner_display_name` TEXT, `note` TEXT, `sharees` TEXT, `rich_workspace` TEXT, `metadata_size` TEXT, `metadata_live_photo` TEXT, `locked` INTEGER, `lock_type` INTEGER, `lock_owner` TEXT, `lock_owner_display_name` TEXT, `lock_owner_editor` TEXT, `lock_timestamp` INTEGER, `lock_timeout` INTEGER, `lock_token` TEXT, `tags` TEXT, `metadata_gps` TEXT, `e2e_counter` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "encryptedName",
+ "columnName": "encrypted_filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "pathDecrypted",
+ "columnName": "path_decrypted",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "parent",
+ "columnName": "parent",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "creation",
+ "columnName": "created",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modified",
+ "columnName": "modified",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentType",
+ "columnName": "content_type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentLength",
+ "columnName": "content_length",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "storagePath",
+ "columnName": "media_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "file_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDate",
+ "columnName": "last_sync_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDateForData",
+ "columnName": "last_sync_date_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modifiedAtLastSyncForData",
+ "columnName": "modified_at_last_sync_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagOnServer",
+ "columnName": "etag_on_server",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedViaLink",
+ "columnName": "share_by_link",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remoteId",
+ "columnName": "remote_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localId",
+ "columnName": "local_id",
+ "affinity": "INTEGER",
+ "notNull": true,
+ "defaultValue": "-1"
+ },
+ {
+ "fieldPath": "updateThumbnail",
+ "columnName": "update_thumbnail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDownloading",
+ "columnName": "is_downloading",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "favorite",
+ "columnName": "favorite",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isEncrypted",
+ "columnName": "is_encrypted",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagInConflict",
+ "columnName": "etag_in_conflict",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedWithSharee",
+ "columnName": "shared_via_users",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "mountType",
+ "columnName": "mount_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hasPreview",
+ "columnName": "has_preview",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "unreadCommentsCount",
+ "columnName": "unread_comments_count",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerId",
+ "columnName": "owner_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerDisplayName",
+ "columnName": "owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharees",
+ "columnName": "sharees",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richWorkspace",
+ "columnName": "rich_workspace",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataSize",
+ "columnName": "metadata_size",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataLivePhoto",
+ "columnName": "metadata_live_photo",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "locked",
+ "columnName": "locked",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockType",
+ "columnName": "lock_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwner",
+ "columnName": "lock_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerDisplayName",
+ "columnName": "lock_owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerEditor",
+ "columnName": "lock_owner_editor",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimestamp",
+ "columnName": "lock_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimeout",
+ "columnName": "lock_timeout",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockToken",
+ "columnName": "lock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "tags",
+ "columnName": "tags",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataGPS",
+ "columnName": "metadata_gps",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "e2eCounter",
+ "columnName": "e2e_counter",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filesystem",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `is_folder` INTEGER, `found_at` INTEGER, `upload_triggered` INTEGER, `syncedfolder_id` TEXT, `crc32` TEXT, `modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileIsFolder",
+ "columnName": "is_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileFoundRecently",
+ "columnName": "found_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSentForUpload",
+ "columnName": "upload_triggered",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "syncedFolderId",
+ "columnName": "syncedfolder_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "crc32",
+ "columnName": "crc32",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileModified",
+ "columnName": "modified_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "ocshares",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `file_source` INTEGER, `item_source` INTEGER, `share_type` INTEGER, `shate_with` TEXT, `path` TEXT, `permissions` INTEGER, `shared_date` INTEGER, `expiration_date` INTEGER, `token` TEXT, `shared_with_display_name` TEXT, `is_directory` INTEGER, `user_id` INTEGER, `id_remote_shared` INTEGER, `owner_share` TEXT, `is_password_protected` INTEGER, `note` TEXT, `hide_download` INTEGER, `share_link` TEXT, `share_label` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSource",
+ "columnName": "file_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "itemSource",
+ "columnName": "item_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareType",
+ "columnName": "share_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWith",
+ "columnName": "shate_with",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedDate",
+ "columnName": "shared_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "expirationDate",
+ "columnName": "expiration_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "token",
+ "columnName": "token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWithDisplayName",
+ "columnName": "shared_with_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDirectory",
+ "columnName": "is_directory",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userId",
+ "columnName": "user_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "idRemoteShared",
+ "columnName": "id_remote_shared",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "owner_share",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isPasswordProtected",
+ "columnName": "is_password_protected",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hideDownload",
+ "columnName": "hide_download",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLink",
+ "columnName": "share_link",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLabel",
+ "columnName": "share_label",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "synced_folders",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `wifi_only` INTEGER, `charging_only` INTEGER, `existing` INTEGER, `enabled` INTEGER, `enabled_timestamp_ms` INTEGER, `subfolder_by_date` INTEGER, `account` TEXT, `upload_option` INTEGER, `name_collision_policy` INTEGER, `type` INTEGER, `hidden` INTEGER, `sub_folder_rule` INTEGER, `exclude_hidden` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "wifiOnly",
+ "columnName": "wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "chargingOnly",
+ "columnName": "charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "existing",
+ "columnName": "existing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabled",
+ "columnName": "enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabledTimestampMs",
+ "columnName": "enabled_timestamp_ms",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "subfolderByDate",
+ "columnName": "subfolder_by_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "account",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadAction",
+ "columnName": "upload_option",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "subFolderRule",
+ "columnName": "sub_folder_rule",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "excludeHidden",
+ "columnName": "exclude_hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "list_of_uploads",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `account_name` TEXT, `file_size` INTEGER, `status` INTEGER, `local_behaviour` INTEGER, `upload_time` INTEGER, `name_collision_policy` INTEGER, `is_create_remote_folder` INTEGER, `upload_end_timestamp` INTEGER, `last_result` INTEGER, `is_while_charging_only` INTEGER, `is_wifi_only` INTEGER, `created_by` INTEGER, `folder_unlock_token` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSize",
+ "columnName": "file_size",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "status",
+ "columnName": "status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localBehaviour",
+ "columnName": "local_behaviour",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadTime",
+ "columnName": "upload_time",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isCreateRemoteFolder",
+ "columnName": "is_create_remote_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadEndTimestamp",
+ "columnName": "upload_end_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastResult",
+ "columnName": "last_result",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWhileChargingOnly",
+ "columnName": "is_while_charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWifiOnly",
+ "columnName": "is_wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "createdBy",
+ "columnName": "created_by",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "folderUnlockToken",
+ "columnName": "folder_unlock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "virtual",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `type` TEXT, `ocfile_id` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ocFileId",
+ "columnName": "ocfile_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ }
+ ],
+ "views": [],
+ "setupQueries": [
+ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
+ "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'ec997f271f9045e8483b260f036a168f')"
+ ]
+ }
+}
diff --git a/app/schemas/com.nextcloud.client.database.NextcloudDatabase/80.json b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/80.json
new file mode 100644
index 000000000000..f0e467cfda6c
--- /dev/null
+++ b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/80.json
@@ -0,0 +1,1203 @@
+{
+ "formatVersion": 1,
+ "database": {
+ "version": 80,
+ "identityHash": "dda37e2f97cecb10da04723f5c472d00",
+ "entities": [
+ {
+ "tableName": "arbitrary_data",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `cloud_id` TEXT, `key` TEXT, `value` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "cloudId",
+ "columnName": "cloud_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "key",
+ "columnName": "key",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "value",
+ "columnName": "value",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "capabilities",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `assistant` INTEGER, `account` TEXT, `version_mayor` INTEGER, `version_minor` INTEGER, `version_micro` INTEGER, `version_string` TEXT, `version_edition` TEXT, `extended_support` INTEGER, `core_pollinterval` INTEGER, `sharing_api_enabled` INTEGER, `sharing_public_enabled` INTEGER, `sharing_public_password_enforced` INTEGER, `sharing_public_expire_date_enabled` INTEGER, `sharing_public_expire_date_days` INTEGER, `sharing_public_expire_date_enforced` INTEGER, `sharing_public_send_mail` INTEGER, `sharing_public_upload` INTEGER, `sharing_user_send_mail` INTEGER, `sharing_resharing` INTEGER, `sharing_federation_outgoing` INTEGER, `sharing_federation_incoming` INTEGER, `files_bigfilechunking` INTEGER, `files_undelete` INTEGER, `files_versioning` INTEGER, `external_links` INTEGER, `server_name` TEXT, `server_color` TEXT, `server_text_color` TEXT, `server_element_color` TEXT, `server_slogan` TEXT, `server_logo` TEXT, `background_url` TEXT, `end_to_end_encryption` INTEGER, `end_to_end_encryption_keys_exist` INTEGER, `end_to_end_encryption_api_version` TEXT, `activity` INTEGER, `background_default` INTEGER, `background_plain` INTEGER, `richdocument` INTEGER, `richdocument_mimetype_list` TEXT, `richdocument_direct_editing` INTEGER, `richdocument_direct_templates` INTEGER, `richdocument_optional_mimetype_list` TEXT, `sharing_public_ask_for_optional_password` INTEGER, `richdocument_product_name` TEXT, `direct_editing_etag` TEXT, `user_status` INTEGER, `user_status_supports_emoji` INTEGER, `etag` TEXT, `files_locking_version` TEXT, `groupfolders` INTEGER, `drop_account` INTEGER, `security_guard` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "assistant",
+ "columnName": "assistant",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMajor",
+ "columnName": "version_mayor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMinor",
+ "columnName": "version_minor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMicro",
+ "columnName": "version_micro",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionString",
+ "columnName": "version_string",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionEditor",
+ "columnName": "version_edition",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "extendedSupport",
+ "columnName": "extended_support",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "corePollinterval",
+ "columnName": "core_pollinterval",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingApiEnabled",
+ "columnName": "sharing_api_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicEnabled",
+ "columnName": "sharing_public_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicPasswordEnforced",
+ "columnName": "sharing_public_password_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnabled",
+ "columnName": "sharing_public_expire_date_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateDays",
+ "columnName": "sharing_public_expire_date_days",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnforced",
+ "columnName": "sharing_public_expire_date_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicSendMail",
+ "columnName": "sharing_public_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicUpload",
+ "columnName": "sharing_public_upload",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingUserSendMail",
+ "columnName": "sharing_user_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingResharing",
+ "columnName": "sharing_resharing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationOutgoing",
+ "columnName": "sharing_federation_outgoing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationIncoming",
+ "columnName": "sharing_federation_incoming",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesBigfilechunking",
+ "columnName": "files_bigfilechunking",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesUndelete",
+ "columnName": "files_undelete",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesVersioning",
+ "columnName": "files_versioning",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "externalLinks",
+ "columnName": "external_links",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverName",
+ "columnName": "server_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverColor",
+ "columnName": "server_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverTextColor",
+ "columnName": "server_text_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverElementColor",
+ "columnName": "server_element_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverSlogan",
+ "columnName": "server_slogan",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverLogo",
+ "columnName": "server_logo",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundUrl",
+ "columnName": "background_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryption",
+ "columnName": "end_to_end_encryption",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryptionKeysExist",
+ "columnName": "end_to_end_encryption_keys_exist",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryptionApiVersion",
+ "columnName": "end_to_end_encryption_api_version",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "activity",
+ "columnName": "activity",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundDefault",
+ "columnName": "background_default",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundPlain",
+ "columnName": "background_plain",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocument",
+ "columnName": "richdocument",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentMimetypeList",
+ "columnName": "richdocument_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentDirectEditing",
+ "columnName": "richdocument_direct_editing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentTemplates",
+ "columnName": "richdocument_direct_templates",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentOptionalMimetypeList",
+ "columnName": "richdocument_optional_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicAskForOptionalPassword",
+ "columnName": "sharing_public_ask_for_optional_password",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentProductName",
+ "columnName": "richdocument_product_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "directEditingEtag",
+ "columnName": "direct_editing_etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatus",
+ "columnName": "user_status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatusSupportsEmoji",
+ "columnName": "user_status_supports_emoji",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesLockingVersion",
+ "columnName": "files_locking_version",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "groupfolders",
+ "columnName": "groupfolders",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "dropAccount",
+ "columnName": "drop_account",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "securityGuard",
+ "columnName": "security_guard",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "external_links",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `icon_url` TEXT, `language` TEXT, `type` INTEGER, `name` TEXT, `url` TEXT, `redirect` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "iconUrl",
+ "columnName": "icon_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "language",
+ "columnName": "language",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "url",
+ "columnName": "url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "redirect",
+ "columnName": "redirect",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filelist",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `filename` TEXT, `encrypted_filename` TEXT, `path` TEXT, `path_decrypted` TEXT, `parent` INTEGER, `created` INTEGER, `modified` INTEGER, `content_type` TEXT, `content_length` INTEGER, `media_path` TEXT, `file_owner` TEXT, `last_sync_date` INTEGER, `last_sync_date_for_data` INTEGER, `modified_at_last_sync_for_data` INTEGER, `etag` TEXT, `etag_on_server` TEXT, `share_by_link` INTEGER, `permissions` TEXT, `remote_id` TEXT, `local_id` INTEGER NOT NULL DEFAULT -1, `update_thumbnail` INTEGER, `is_downloading` INTEGER, `favorite` INTEGER, `hidden` INTEGER, `is_encrypted` INTEGER, `etag_in_conflict` TEXT, `shared_via_users` INTEGER, `mount_type` INTEGER, `has_preview` INTEGER, `unread_comments_count` INTEGER, `owner_id` TEXT, `owner_display_name` TEXT, `note` TEXT, `sharees` TEXT, `rich_workspace` TEXT, `metadata_size` TEXT, `metadata_live_photo` TEXT, `locked` INTEGER, `lock_type` INTEGER, `lock_owner` TEXT, `lock_owner_display_name` TEXT, `lock_owner_editor` TEXT, `lock_timestamp` INTEGER, `lock_timeout` INTEGER, `lock_token` TEXT, `tags` TEXT, `metadata_gps` TEXT, `e2e_counter` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "encryptedName",
+ "columnName": "encrypted_filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "pathDecrypted",
+ "columnName": "path_decrypted",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "parent",
+ "columnName": "parent",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "creation",
+ "columnName": "created",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modified",
+ "columnName": "modified",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentType",
+ "columnName": "content_type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentLength",
+ "columnName": "content_length",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "storagePath",
+ "columnName": "media_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "file_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDate",
+ "columnName": "last_sync_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDateForData",
+ "columnName": "last_sync_date_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modifiedAtLastSyncForData",
+ "columnName": "modified_at_last_sync_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagOnServer",
+ "columnName": "etag_on_server",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedViaLink",
+ "columnName": "share_by_link",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remoteId",
+ "columnName": "remote_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localId",
+ "columnName": "local_id",
+ "affinity": "INTEGER",
+ "notNull": true,
+ "defaultValue": "-1"
+ },
+ {
+ "fieldPath": "updateThumbnail",
+ "columnName": "update_thumbnail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDownloading",
+ "columnName": "is_downloading",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "favorite",
+ "columnName": "favorite",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isEncrypted",
+ "columnName": "is_encrypted",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagInConflict",
+ "columnName": "etag_in_conflict",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedWithSharee",
+ "columnName": "shared_via_users",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "mountType",
+ "columnName": "mount_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hasPreview",
+ "columnName": "has_preview",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "unreadCommentsCount",
+ "columnName": "unread_comments_count",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerId",
+ "columnName": "owner_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerDisplayName",
+ "columnName": "owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharees",
+ "columnName": "sharees",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richWorkspace",
+ "columnName": "rich_workspace",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataSize",
+ "columnName": "metadata_size",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataLivePhoto",
+ "columnName": "metadata_live_photo",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "locked",
+ "columnName": "locked",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockType",
+ "columnName": "lock_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwner",
+ "columnName": "lock_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerDisplayName",
+ "columnName": "lock_owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerEditor",
+ "columnName": "lock_owner_editor",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimestamp",
+ "columnName": "lock_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimeout",
+ "columnName": "lock_timeout",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockToken",
+ "columnName": "lock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "tags",
+ "columnName": "tags",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataGPS",
+ "columnName": "metadata_gps",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "e2eCounter",
+ "columnName": "e2e_counter",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filesystem",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `is_folder` INTEGER, `found_at` INTEGER, `upload_triggered` INTEGER, `syncedfolder_id` TEXT, `crc32` TEXT, `modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileIsFolder",
+ "columnName": "is_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileFoundRecently",
+ "columnName": "found_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSentForUpload",
+ "columnName": "upload_triggered",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "syncedFolderId",
+ "columnName": "syncedfolder_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "crc32",
+ "columnName": "crc32",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileModified",
+ "columnName": "modified_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "ocshares",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `file_source` INTEGER, `item_source` INTEGER, `share_type` INTEGER, `shate_with` TEXT, `path` TEXT, `permissions` INTEGER, `shared_date` INTEGER, `expiration_date` INTEGER, `token` TEXT, `shared_with_display_name` TEXT, `is_directory` INTEGER, `user_id` TEXT, `id_remote_shared` INTEGER, `owner_share` TEXT, `is_password_protected` INTEGER, `note` TEXT, `hide_download` INTEGER, `share_link` TEXT, `share_label` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSource",
+ "columnName": "file_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "itemSource",
+ "columnName": "item_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareType",
+ "columnName": "share_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWith",
+ "columnName": "shate_with",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedDate",
+ "columnName": "shared_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "expirationDate",
+ "columnName": "expiration_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "token",
+ "columnName": "token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWithDisplayName",
+ "columnName": "shared_with_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDirectory",
+ "columnName": "is_directory",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userId",
+ "columnName": "user_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "idRemoteShared",
+ "columnName": "id_remote_shared",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "owner_share",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isPasswordProtected",
+ "columnName": "is_password_protected",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hideDownload",
+ "columnName": "hide_download",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLink",
+ "columnName": "share_link",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLabel",
+ "columnName": "share_label",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "synced_folders",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `wifi_only` INTEGER, `charging_only` INTEGER, `existing` INTEGER, `enabled` INTEGER, `enabled_timestamp_ms` INTEGER, `subfolder_by_date` INTEGER, `account` TEXT, `upload_option` INTEGER, `name_collision_policy` INTEGER, `type` INTEGER, `hidden` INTEGER, `sub_folder_rule` INTEGER, `exclude_hidden` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "wifiOnly",
+ "columnName": "wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "chargingOnly",
+ "columnName": "charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "existing",
+ "columnName": "existing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabled",
+ "columnName": "enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabledTimestampMs",
+ "columnName": "enabled_timestamp_ms",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "subfolderByDate",
+ "columnName": "subfolder_by_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "account",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadAction",
+ "columnName": "upload_option",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "subFolderRule",
+ "columnName": "sub_folder_rule",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "excludeHidden",
+ "columnName": "exclude_hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "list_of_uploads",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `account_name` TEXT, `file_size` INTEGER, `status` INTEGER, `local_behaviour` INTEGER, `upload_time` INTEGER, `name_collision_policy` INTEGER, `is_create_remote_folder` INTEGER, `upload_end_timestamp` INTEGER, `last_result` INTEGER, `is_while_charging_only` INTEGER, `is_wifi_only` INTEGER, `created_by` INTEGER, `folder_unlock_token` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSize",
+ "columnName": "file_size",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "status",
+ "columnName": "status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localBehaviour",
+ "columnName": "local_behaviour",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadTime",
+ "columnName": "upload_time",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isCreateRemoteFolder",
+ "columnName": "is_create_remote_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadEndTimestamp",
+ "columnName": "upload_end_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastResult",
+ "columnName": "last_result",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWhileChargingOnly",
+ "columnName": "is_while_charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWifiOnly",
+ "columnName": "is_wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "createdBy",
+ "columnName": "created_by",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "folderUnlockToken",
+ "columnName": "folder_unlock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "virtual",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `type` TEXT, `ocfile_id` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ocFileId",
+ "columnName": "ocfile_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ }
+ ],
+ "views": [],
+ "setupQueries": [
+ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
+ "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'dda37e2f97cecb10da04723f5c472d00')"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/app/schemas/com.nextcloud.client.database.NextcloudDatabase/81.json b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/81.json
new file mode 100644
index 000000000000..3dd2580e23ed
--- /dev/null
+++ b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/81.json
@@ -0,0 +1,1209 @@
+{
+ "formatVersion": 1,
+ "database": {
+ "version": 81,
+ "identityHash": "082a63031678a67879428f688f02d3b5",
+ "entities": [
+ {
+ "tableName": "arbitrary_data",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `cloud_id` TEXT, `key` TEXT, `value` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "cloudId",
+ "columnName": "cloud_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "key",
+ "columnName": "key",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "value",
+ "columnName": "value",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "capabilities",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `assistant` INTEGER, `account` TEXT, `version_mayor` INTEGER, `version_minor` INTEGER, `version_micro` INTEGER, `version_string` TEXT, `version_edition` TEXT, `extended_support` INTEGER, `core_pollinterval` INTEGER, `sharing_api_enabled` INTEGER, `sharing_public_enabled` INTEGER, `sharing_public_password_enforced` INTEGER, `sharing_public_expire_date_enabled` INTEGER, `sharing_public_expire_date_days` INTEGER, `sharing_public_expire_date_enforced` INTEGER, `sharing_public_send_mail` INTEGER, `sharing_public_upload` INTEGER, `sharing_user_send_mail` INTEGER, `sharing_resharing` INTEGER, `sharing_federation_outgoing` INTEGER, `sharing_federation_incoming` INTEGER, `files_bigfilechunking` INTEGER, `files_undelete` INTEGER, `files_versioning` INTEGER, `external_links` INTEGER, `server_name` TEXT, `server_color` TEXT, `server_text_color` TEXT, `server_element_color` TEXT, `server_slogan` TEXT, `server_logo` TEXT, `background_url` TEXT, `end_to_end_encryption` INTEGER, `end_to_end_encryption_keys_exist` INTEGER, `end_to_end_encryption_api_version` TEXT, `activity` INTEGER, `background_default` INTEGER, `background_plain` INTEGER, `richdocument` INTEGER, `richdocument_mimetype_list` TEXT, `richdocument_direct_editing` INTEGER, `richdocument_direct_templates` INTEGER, `richdocument_optional_mimetype_list` TEXT, `sharing_public_ask_for_optional_password` INTEGER, `richdocument_product_name` TEXT, `direct_editing_etag` TEXT, `user_status` INTEGER, `user_status_supports_emoji` INTEGER, `etag` TEXT, `files_locking_version` TEXT, `groupfolders` INTEGER, `drop_account` INTEGER, `security_guard` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "assistant",
+ "columnName": "assistant",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMajor",
+ "columnName": "version_mayor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMinor",
+ "columnName": "version_minor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMicro",
+ "columnName": "version_micro",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionString",
+ "columnName": "version_string",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionEditor",
+ "columnName": "version_edition",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "extendedSupport",
+ "columnName": "extended_support",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "corePollinterval",
+ "columnName": "core_pollinterval",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingApiEnabled",
+ "columnName": "sharing_api_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicEnabled",
+ "columnName": "sharing_public_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicPasswordEnforced",
+ "columnName": "sharing_public_password_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnabled",
+ "columnName": "sharing_public_expire_date_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateDays",
+ "columnName": "sharing_public_expire_date_days",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnforced",
+ "columnName": "sharing_public_expire_date_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicSendMail",
+ "columnName": "sharing_public_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicUpload",
+ "columnName": "sharing_public_upload",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingUserSendMail",
+ "columnName": "sharing_user_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingResharing",
+ "columnName": "sharing_resharing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationOutgoing",
+ "columnName": "sharing_federation_outgoing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationIncoming",
+ "columnName": "sharing_federation_incoming",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesBigfilechunking",
+ "columnName": "files_bigfilechunking",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesUndelete",
+ "columnName": "files_undelete",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesVersioning",
+ "columnName": "files_versioning",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "externalLinks",
+ "columnName": "external_links",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverName",
+ "columnName": "server_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverColor",
+ "columnName": "server_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverTextColor",
+ "columnName": "server_text_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverElementColor",
+ "columnName": "server_element_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverSlogan",
+ "columnName": "server_slogan",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverLogo",
+ "columnName": "server_logo",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundUrl",
+ "columnName": "background_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryption",
+ "columnName": "end_to_end_encryption",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryptionKeysExist",
+ "columnName": "end_to_end_encryption_keys_exist",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryptionApiVersion",
+ "columnName": "end_to_end_encryption_api_version",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "activity",
+ "columnName": "activity",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundDefault",
+ "columnName": "background_default",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundPlain",
+ "columnName": "background_plain",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocument",
+ "columnName": "richdocument",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentMimetypeList",
+ "columnName": "richdocument_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentDirectEditing",
+ "columnName": "richdocument_direct_editing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentTemplates",
+ "columnName": "richdocument_direct_templates",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentOptionalMimetypeList",
+ "columnName": "richdocument_optional_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicAskForOptionalPassword",
+ "columnName": "sharing_public_ask_for_optional_password",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentProductName",
+ "columnName": "richdocument_product_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "directEditingEtag",
+ "columnName": "direct_editing_etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatus",
+ "columnName": "user_status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatusSupportsEmoji",
+ "columnName": "user_status_supports_emoji",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesLockingVersion",
+ "columnName": "files_locking_version",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "groupfolders",
+ "columnName": "groupfolders",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "dropAccount",
+ "columnName": "drop_account",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "securityGuard",
+ "columnName": "security_guard",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "external_links",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `icon_url` TEXT, `language` TEXT, `type` INTEGER, `name` TEXT, `url` TEXT, `redirect` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "iconUrl",
+ "columnName": "icon_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "language",
+ "columnName": "language",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "url",
+ "columnName": "url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "redirect",
+ "columnName": "redirect",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filelist",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `filename` TEXT, `encrypted_filename` TEXT, `path` TEXT, `path_decrypted` TEXT, `parent` INTEGER, `created` INTEGER, `modified` INTEGER, `content_type` TEXT, `content_length` INTEGER, `media_path` TEXT, `file_owner` TEXT, `last_sync_date` INTEGER, `last_sync_date_for_data` INTEGER, `modified_at_last_sync_for_data` INTEGER, `etag` TEXT, `etag_on_server` TEXT, `share_by_link` INTEGER, `permissions` TEXT, `remote_id` TEXT, `local_id` INTEGER NOT NULL DEFAULT -1, `update_thumbnail` INTEGER, `is_downloading` INTEGER, `favorite` INTEGER, `hidden` INTEGER, `is_encrypted` INTEGER, `etag_in_conflict` TEXT, `shared_via_users` INTEGER, `mount_type` INTEGER, `has_preview` INTEGER, `unread_comments_count` INTEGER, `owner_id` TEXT, `owner_display_name` TEXT, `note` TEXT, `sharees` TEXT, `rich_workspace` TEXT, `metadata_size` TEXT, `metadata_live_photo` TEXT, `locked` INTEGER, `lock_type` INTEGER, `lock_owner` TEXT, `lock_owner_display_name` TEXT, `lock_owner_editor` TEXT, `lock_timestamp` INTEGER, `lock_timeout` INTEGER, `lock_token` TEXT, `tags` TEXT, `metadata_gps` TEXT, `e2e_counter` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "encryptedName",
+ "columnName": "encrypted_filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "pathDecrypted",
+ "columnName": "path_decrypted",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "parent",
+ "columnName": "parent",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "creation",
+ "columnName": "created",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modified",
+ "columnName": "modified",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentType",
+ "columnName": "content_type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentLength",
+ "columnName": "content_length",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "storagePath",
+ "columnName": "media_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "file_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDate",
+ "columnName": "last_sync_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDateForData",
+ "columnName": "last_sync_date_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modifiedAtLastSyncForData",
+ "columnName": "modified_at_last_sync_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagOnServer",
+ "columnName": "etag_on_server",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedViaLink",
+ "columnName": "share_by_link",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remoteId",
+ "columnName": "remote_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localId",
+ "columnName": "local_id",
+ "affinity": "INTEGER",
+ "notNull": true,
+ "defaultValue": "-1"
+ },
+ {
+ "fieldPath": "updateThumbnail",
+ "columnName": "update_thumbnail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDownloading",
+ "columnName": "is_downloading",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "favorite",
+ "columnName": "favorite",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isEncrypted",
+ "columnName": "is_encrypted",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagInConflict",
+ "columnName": "etag_in_conflict",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedWithSharee",
+ "columnName": "shared_via_users",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "mountType",
+ "columnName": "mount_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hasPreview",
+ "columnName": "has_preview",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "unreadCommentsCount",
+ "columnName": "unread_comments_count",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerId",
+ "columnName": "owner_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerDisplayName",
+ "columnName": "owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharees",
+ "columnName": "sharees",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richWorkspace",
+ "columnName": "rich_workspace",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataSize",
+ "columnName": "metadata_size",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataLivePhoto",
+ "columnName": "metadata_live_photo",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "locked",
+ "columnName": "locked",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockType",
+ "columnName": "lock_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwner",
+ "columnName": "lock_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerDisplayName",
+ "columnName": "lock_owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerEditor",
+ "columnName": "lock_owner_editor",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimestamp",
+ "columnName": "lock_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimeout",
+ "columnName": "lock_timeout",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockToken",
+ "columnName": "lock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "tags",
+ "columnName": "tags",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataGPS",
+ "columnName": "metadata_gps",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "e2eCounter",
+ "columnName": "e2e_counter",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filesystem",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `is_folder` INTEGER, `found_at` INTEGER, `upload_triggered` INTEGER, `syncedfolder_id` TEXT, `crc32` TEXT, `modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileIsFolder",
+ "columnName": "is_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileFoundRecently",
+ "columnName": "found_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSentForUpload",
+ "columnName": "upload_triggered",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "syncedFolderId",
+ "columnName": "syncedfolder_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "crc32",
+ "columnName": "crc32",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileModified",
+ "columnName": "modified_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "ocshares",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `file_source` INTEGER, `item_source` INTEGER, `share_type` INTEGER, `shate_with` TEXT, `path` TEXT, `permissions` INTEGER, `shared_date` INTEGER, `expiration_date` INTEGER, `token` TEXT, `shared_with_display_name` TEXT, `is_directory` INTEGER, `user_id` TEXT, `id_remote_shared` INTEGER, `owner_share` TEXT, `is_password_protected` INTEGER, `note` TEXT, `hide_download` INTEGER, `share_link` TEXT, `share_label` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSource",
+ "columnName": "file_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "itemSource",
+ "columnName": "item_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareType",
+ "columnName": "share_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWith",
+ "columnName": "shate_with",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedDate",
+ "columnName": "shared_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "expirationDate",
+ "columnName": "expiration_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "token",
+ "columnName": "token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWithDisplayName",
+ "columnName": "shared_with_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDirectory",
+ "columnName": "is_directory",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userId",
+ "columnName": "user_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "idRemoteShared",
+ "columnName": "id_remote_shared",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "owner_share",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isPasswordProtected",
+ "columnName": "is_password_protected",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hideDownload",
+ "columnName": "hide_download",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLink",
+ "columnName": "share_link",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLabel",
+ "columnName": "share_label",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "synced_folders",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `wifi_only` INTEGER, `charging_only` INTEGER, `existing` INTEGER, `enabled` INTEGER, `enabled_timestamp_ms` INTEGER, `subfolder_by_date` INTEGER, `account` TEXT, `upload_option` INTEGER, `name_collision_policy` INTEGER, `type` INTEGER, `hidden` INTEGER, `sub_folder_rule` INTEGER, `exclude_hidden` INTEGER, `last_scan_timestamp_ms` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "wifiOnly",
+ "columnName": "wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "chargingOnly",
+ "columnName": "charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "existing",
+ "columnName": "existing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabled",
+ "columnName": "enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabledTimestampMs",
+ "columnName": "enabled_timestamp_ms",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "subfolderByDate",
+ "columnName": "subfolder_by_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "account",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadAction",
+ "columnName": "upload_option",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "subFolderRule",
+ "columnName": "sub_folder_rule",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "excludeHidden",
+ "columnName": "exclude_hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastScanTimestampMs",
+ "columnName": "last_scan_timestamp_ms",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "list_of_uploads",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `account_name` TEXT, `file_size` INTEGER, `status` INTEGER, `local_behaviour` INTEGER, `upload_time` INTEGER, `name_collision_policy` INTEGER, `is_create_remote_folder` INTEGER, `upload_end_timestamp` INTEGER, `last_result` INTEGER, `is_while_charging_only` INTEGER, `is_wifi_only` INTEGER, `created_by` INTEGER, `folder_unlock_token` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSize",
+ "columnName": "file_size",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "status",
+ "columnName": "status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localBehaviour",
+ "columnName": "local_behaviour",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadTime",
+ "columnName": "upload_time",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isCreateRemoteFolder",
+ "columnName": "is_create_remote_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadEndTimestamp",
+ "columnName": "upload_end_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastResult",
+ "columnName": "last_result",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWhileChargingOnly",
+ "columnName": "is_while_charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWifiOnly",
+ "columnName": "is_wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "createdBy",
+ "columnName": "created_by",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "folderUnlockToken",
+ "columnName": "folder_unlock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "virtual",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `type` TEXT, `ocfile_id` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ocFileId",
+ "columnName": "ocfile_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ }
+ ],
+ "views": [],
+ "setupQueries": [
+ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
+ "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '082a63031678a67879428f688f02d3b5')"
+ ]
+ }
+}
diff --git a/app/schemas/com.nextcloud.client.database.NextcloudDatabase/82.json b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/82.json
new file mode 100644
index 000000000000..e16d7c189e2e
--- /dev/null
+++ b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/82.json
@@ -0,0 +1,1233 @@
+{
+ "formatVersion": 1,
+ "database": {
+ "version": 82,
+ "identityHash": "e78b1402db9da7caff78c46fff585672",
+ "entities": [
+ {
+ "tableName": "arbitrary_data",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `cloud_id` TEXT, `key` TEXT, `value` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "cloudId",
+ "columnName": "cloud_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "key",
+ "columnName": "key",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "value",
+ "columnName": "value",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "capabilities",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `assistant` INTEGER, `account` TEXT, `version_mayor` INTEGER, `version_minor` INTEGER, `version_micro` INTEGER, `version_string` TEXT, `version_edition` TEXT, `extended_support` INTEGER, `core_pollinterval` INTEGER, `sharing_api_enabled` INTEGER, `sharing_public_enabled` INTEGER, `sharing_public_password_enforced` INTEGER, `sharing_public_expire_date_enabled` INTEGER, `sharing_public_expire_date_days` INTEGER, `sharing_public_expire_date_enforced` INTEGER, `sharing_public_send_mail` INTEGER, `sharing_public_upload` INTEGER, `sharing_user_send_mail` INTEGER, `sharing_resharing` INTEGER, `sharing_federation_outgoing` INTEGER, `sharing_federation_incoming` INTEGER, `files_bigfilechunking` INTEGER, `files_undelete` INTEGER, `files_versioning` INTEGER, `external_links` INTEGER, `server_name` TEXT, `server_color` TEXT, `server_text_color` TEXT, `server_element_color` TEXT, `server_slogan` TEXT, `server_logo` TEXT, `background_url` TEXT, `end_to_end_encryption` INTEGER, `end_to_end_encryption_keys_exist` INTEGER, `end_to_end_encryption_api_version` TEXT, `activity` INTEGER, `background_default` INTEGER, `background_plain` INTEGER, `richdocument` INTEGER, `richdocument_mimetype_list` TEXT, `richdocument_direct_editing` INTEGER, `richdocument_direct_templates` INTEGER, `richdocument_optional_mimetype_list` TEXT, `sharing_public_ask_for_optional_password` INTEGER, `richdocument_product_name` TEXT, `direct_editing_etag` TEXT, `user_status` INTEGER, `user_status_supports_emoji` INTEGER, `etag` TEXT, `files_locking_version` TEXT, `groupfolders` INTEGER, `drop_account` INTEGER, `security_guard` INTEGER, `forbidden_filename_characters` INTEGER, `forbidden_filenames` INTEGER, `forbidden_filename_extensions` INTEGER, `forbidden_filename_basenames` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "assistant",
+ "columnName": "assistant",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMajor",
+ "columnName": "version_mayor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMinor",
+ "columnName": "version_minor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMicro",
+ "columnName": "version_micro",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionString",
+ "columnName": "version_string",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionEditor",
+ "columnName": "version_edition",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "extendedSupport",
+ "columnName": "extended_support",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "corePollinterval",
+ "columnName": "core_pollinterval",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingApiEnabled",
+ "columnName": "sharing_api_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicEnabled",
+ "columnName": "sharing_public_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicPasswordEnforced",
+ "columnName": "sharing_public_password_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnabled",
+ "columnName": "sharing_public_expire_date_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateDays",
+ "columnName": "sharing_public_expire_date_days",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnforced",
+ "columnName": "sharing_public_expire_date_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicSendMail",
+ "columnName": "sharing_public_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicUpload",
+ "columnName": "sharing_public_upload",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingUserSendMail",
+ "columnName": "sharing_user_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingResharing",
+ "columnName": "sharing_resharing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationOutgoing",
+ "columnName": "sharing_federation_outgoing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationIncoming",
+ "columnName": "sharing_federation_incoming",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesBigfilechunking",
+ "columnName": "files_bigfilechunking",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesUndelete",
+ "columnName": "files_undelete",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesVersioning",
+ "columnName": "files_versioning",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "externalLinks",
+ "columnName": "external_links",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverName",
+ "columnName": "server_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverColor",
+ "columnName": "server_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverTextColor",
+ "columnName": "server_text_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverElementColor",
+ "columnName": "server_element_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverSlogan",
+ "columnName": "server_slogan",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverLogo",
+ "columnName": "server_logo",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundUrl",
+ "columnName": "background_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryption",
+ "columnName": "end_to_end_encryption",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryptionKeysExist",
+ "columnName": "end_to_end_encryption_keys_exist",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryptionApiVersion",
+ "columnName": "end_to_end_encryption_api_version",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "activity",
+ "columnName": "activity",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundDefault",
+ "columnName": "background_default",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundPlain",
+ "columnName": "background_plain",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocument",
+ "columnName": "richdocument",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentMimetypeList",
+ "columnName": "richdocument_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentDirectEditing",
+ "columnName": "richdocument_direct_editing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentTemplates",
+ "columnName": "richdocument_direct_templates",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentOptionalMimetypeList",
+ "columnName": "richdocument_optional_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicAskForOptionalPassword",
+ "columnName": "sharing_public_ask_for_optional_password",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentProductName",
+ "columnName": "richdocument_product_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "directEditingEtag",
+ "columnName": "direct_editing_etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatus",
+ "columnName": "user_status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatusSupportsEmoji",
+ "columnName": "user_status_supports_emoji",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesLockingVersion",
+ "columnName": "files_locking_version",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "groupfolders",
+ "columnName": "groupfolders",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "dropAccount",
+ "columnName": "drop_account",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "securityGuard",
+ "columnName": "security_guard",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "forbiddenFileNameCharacters",
+ "columnName": "forbidden_filename_characters",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "forbiddenFileNames",
+ "columnName": "forbidden_filenames",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "forbiddenFileNameExtensions",
+ "columnName": "forbidden_filename_extensions",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "forbiddenFilenameBaseNames",
+ "columnName": "forbidden_filename_basenames",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "external_links",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `icon_url` TEXT, `language` TEXT, `type` INTEGER, `name` TEXT, `url` TEXT, `redirect` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "iconUrl",
+ "columnName": "icon_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "language",
+ "columnName": "language",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "url",
+ "columnName": "url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "redirect",
+ "columnName": "redirect",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filelist",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `filename` TEXT, `encrypted_filename` TEXT, `path` TEXT, `path_decrypted` TEXT, `parent` INTEGER, `created` INTEGER, `modified` INTEGER, `content_type` TEXT, `content_length` INTEGER, `media_path` TEXT, `file_owner` TEXT, `last_sync_date` INTEGER, `last_sync_date_for_data` INTEGER, `modified_at_last_sync_for_data` INTEGER, `etag` TEXT, `etag_on_server` TEXT, `share_by_link` INTEGER, `permissions` TEXT, `remote_id` TEXT, `local_id` INTEGER NOT NULL DEFAULT -1, `update_thumbnail` INTEGER, `is_downloading` INTEGER, `favorite` INTEGER, `hidden` INTEGER, `is_encrypted` INTEGER, `etag_in_conflict` TEXT, `shared_via_users` INTEGER, `mount_type` INTEGER, `has_preview` INTEGER, `unread_comments_count` INTEGER, `owner_id` TEXT, `owner_display_name` TEXT, `note` TEXT, `sharees` TEXT, `rich_workspace` TEXT, `metadata_size` TEXT, `metadata_live_photo` TEXT, `locked` INTEGER, `lock_type` INTEGER, `lock_owner` TEXT, `lock_owner_display_name` TEXT, `lock_owner_editor` TEXT, `lock_timestamp` INTEGER, `lock_timeout` INTEGER, `lock_token` TEXT, `tags` TEXT, `metadata_gps` TEXT, `e2e_counter` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "encryptedName",
+ "columnName": "encrypted_filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "pathDecrypted",
+ "columnName": "path_decrypted",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "parent",
+ "columnName": "parent",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "creation",
+ "columnName": "created",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modified",
+ "columnName": "modified",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentType",
+ "columnName": "content_type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentLength",
+ "columnName": "content_length",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "storagePath",
+ "columnName": "media_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "file_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDate",
+ "columnName": "last_sync_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDateForData",
+ "columnName": "last_sync_date_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modifiedAtLastSyncForData",
+ "columnName": "modified_at_last_sync_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagOnServer",
+ "columnName": "etag_on_server",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedViaLink",
+ "columnName": "share_by_link",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remoteId",
+ "columnName": "remote_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localId",
+ "columnName": "local_id",
+ "affinity": "INTEGER",
+ "notNull": true,
+ "defaultValue": "-1"
+ },
+ {
+ "fieldPath": "updateThumbnail",
+ "columnName": "update_thumbnail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDownloading",
+ "columnName": "is_downloading",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "favorite",
+ "columnName": "favorite",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isEncrypted",
+ "columnName": "is_encrypted",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagInConflict",
+ "columnName": "etag_in_conflict",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedWithSharee",
+ "columnName": "shared_via_users",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "mountType",
+ "columnName": "mount_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hasPreview",
+ "columnName": "has_preview",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "unreadCommentsCount",
+ "columnName": "unread_comments_count",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerId",
+ "columnName": "owner_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerDisplayName",
+ "columnName": "owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharees",
+ "columnName": "sharees",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richWorkspace",
+ "columnName": "rich_workspace",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataSize",
+ "columnName": "metadata_size",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataLivePhoto",
+ "columnName": "metadata_live_photo",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "locked",
+ "columnName": "locked",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockType",
+ "columnName": "lock_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwner",
+ "columnName": "lock_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerDisplayName",
+ "columnName": "lock_owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerEditor",
+ "columnName": "lock_owner_editor",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimestamp",
+ "columnName": "lock_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimeout",
+ "columnName": "lock_timeout",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockToken",
+ "columnName": "lock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "tags",
+ "columnName": "tags",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataGPS",
+ "columnName": "metadata_gps",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "e2eCounter",
+ "columnName": "e2e_counter",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filesystem",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `is_folder` INTEGER, `found_at` INTEGER, `upload_triggered` INTEGER, `syncedfolder_id` TEXT, `crc32` TEXT, `modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileIsFolder",
+ "columnName": "is_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileFoundRecently",
+ "columnName": "found_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSentForUpload",
+ "columnName": "upload_triggered",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "syncedFolderId",
+ "columnName": "syncedfolder_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "crc32",
+ "columnName": "crc32",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileModified",
+ "columnName": "modified_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "ocshares",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `file_source` INTEGER, `item_source` INTEGER, `share_type` INTEGER, `shate_with` TEXT, `path` TEXT, `permissions` INTEGER, `shared_date` INTEGER, `expiration_date` INTEGER, `token` TEXT, `shared_with_display_name` TEXT, `is_directory` INTEGER, `user_id` TEXT, `id_remote_shared` INTEGER, `owner_share` TEXT, `is_password_protected` INTEGER, `note` TEXT, `hide_download` INTEGER, `share_link` TEXT, `share_label` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSource",
+ "columnName": "file_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "itemSource",
+ "columnName": "item_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareType",
+ "columnName": "share_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWith",
+ "columnName": "shate_with",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedDate",
+ "columnName": "shared_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "expirationDate",
+ "columnName": "expiration_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "token",
+ "columnName": "token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWithDisplayName",
+ "columnName": "shared_with_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDirectory",
+ "columnName": "is_directory",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userId",
+ "columnName": "user_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "idRemoteShared",
+ "columnName": "id_remote_shared",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "owner_share",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isPasswordProtected",
+ "columnName": "is_password_protected",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hideDownload",
+ "columnName": "hide_download",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLink",
+ "columnName": "share_link",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLabel",
+ "columnName": "share_label",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "synced_folders",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `wifi_only` INTEGER, `charging_only` INTEGER, `existing` INTEGER, `enabled` INTEGER, `enabled_timestamp_ms` INTEGER, `subfolder_by_date` INTEGER, `account` TEXT, `upload_option` INTEGER, `name_collision_policy` INTEGER, `type` INTEGER, `hidden` INTEGER, `sub_folder_rule` INTEGER, `exclude_hidden` INTEGER, `last_scan_timestamp_ms` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "wifiOnly",
+ "columnName": "wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "chargingOnly",
+ "columnName": "charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "existing",
+ "columnName": "existing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabled",
+ "columnName": "enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabledTimestampMs",
+ "columnName": "enabled_timestamp_ms",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "subfolderByDate",
+ "columnName": "subfolder_by_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "account",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadAction",
+ "columnName": "upload_option",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "subFolderRule",
+ "columnName": "sub_folder_rule",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "excludeHidden",
+ "columnName": "exclude_hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastScanTimestampMs",
+ "columnName": "last_scan_timestamp_ms",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "list_of_uploads",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `account_name` TEXT, `file_size` INTEGER, `status` INTEGER, `local_behaviour` INTEGER, `upload_time` INTEGER, `name_collision_policy` INTEGER, `is_create_remote_folder` INTEGER, `upload_end_timestamp` INTEGER, `last_result` INTEGER, `is_while_charging_only` INTEGER, `is_wifi_only` INTEGER, `created_by` INTEGER, `folder_unlock_token` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSize",
+ "columnName": "file_size",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "status",
+ "columnName": "status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localBehaviour",
+ "columnName": "local_behaviour",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadTime",
+ "columnName": "upload_time",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isCreateRemoteFolder",
+ "columnName": "is_create_remote_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadEndTimestamp",
+ "columnName": "upload_end_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastResult",
+ "columnName": "last_result",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWhileChargingOnly",
+ "columnName": "is_while_charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWifiOnly",
+ "columnName": "is_wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "createdBy",
+ "columnName": "created_by",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "folderUnlockToken",
+ "columnName": "folder_unlock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "virtual",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `type` TEXT, `ocfile_id` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ocFileId",
+ "columnName": "ocfile_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ }
+ ],
+ "views": [],
+ "setupQueries": [
+ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
+ "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'e78b1402db9da7caff78c46fff585672')"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/app/schemas/com.nextcloud.client.database.NextcloudDatabase/83.json b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/83.json
new file mode 100644
index 000000000000..c27bba8f602e
--- /dev/null
+++ b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/83.json
@@ -0,0 +1,1245 @@
+{
+ "formatVersion": 1,
+ "database": {
+ "version": 83,
+ "identityHash": "365a8731a100a61ae5029beb74acd02e",
+ "entities": [
+ {
+ "tableName": "arbitrary_data",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `cloud_id` TEXT, `key` TEXT, `value` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "cloudId",
+ "columnName": "cloud_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "key",
+ "columnName": "key",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "value",
+ "columnName": "value",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "capabilities",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `assistant` INTEGER, `account` TEXT, `version_mayor` INTEGER, `version_minor` INTEGER, `version_micro` INTEGER, `version_string` TEXT, `version_edition` TEXT, `extended_support` INTEGER, `core_pollinterval` INTEGER, `sharing_api_enabled` INTEGER, `sharing_public_enabled` INTEGER, `sharing_public_password_enforced` INTEGER, `sharing_public_expire_date_enabled` INTEGER, `sharing_public_expire_date_days` INTEGER, `sharing_public_expire_date_enforced` INTEGER, `sharing_public_send_mail` INTEGER, `sharing_public_upload` INTEGER, `sharing_user_send_mail` INTEGER, `sharing_resharing` INTEGER, `sharing_federation_outgoing` INTEGER, `sharing_federation_incoming` INTEGER, `files_bigfilechunking` INTEGER, `files_undelete` INTEGER, `files_versioning` INTEGER, `external_links` INTEGER, `server_name` TEXT, `server_color` TEXT, `server_text_color` TEXT, `server_element_color` TEXT, `server_slogan` TEXT, `server_logo` TEXT, `background_url` TEXT, `end_to_end_encryption` INTEGER, `end_to_end_encryption_keys_exist` INTEGER, `end_to_end_encryption_api_version` TEXT, `activity` INTEGER, `background_default` INTEGER, `background_plain` INTEGER, `richdocument` INTEGER, `richdocument_mimetype_list` TEXT, `richdocument_direct_editing` INTEGER, `richdocument_direct_templates` INTEGER, `richdocument_optional_mimetype_list` TEXT, `sharing_public_ask_for_optional_password` INTEGER, `richdocument_product_name` TEXT, `direct_editing_etag` TEXT, `user_status` INTEGER, `user_status_supports_emoji` INTEGER, `etag` TEXT, `files_locking_version` TEXT, `groupfolders` INTEGER, `drop_account` INTEGER, `security_guard` INTEGER, `forbidden_filename_characters` INTEGER, `forbidden_filenames` INTEGER, `forbidden_filename_extensions` INTEGER, `forbidden_filename_basenames` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "assistant",
+ "columnName": "assistant",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMajor",
+ "columnName": "version_mayor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMinor",
+ "columnName": "version_minor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMicro",
+ "columnName": "version_micro",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionString",
+ "columnName": "version_string",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionEditor",
+ "columnName": "version_edition",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "extendedSupport",
+ "columnName": "extended_support",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "corePollinterval",
+ "columnName": "core_pollinterval",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingApiEnabled",
+ "columnName": "sharing_api_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicEnabled",
+ "columnName": "sharing_public_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicPasswordEnforced",
+ "columnName": "sharing_public_password_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnabled",
+ "columnName": "sharing_public_expire_date_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateDays",
+ "columnName": "sharing_public_expire_date_days",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnforced",
+ "columnName": "sharing_public_expire_date_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicSendMail",
+ "columnName": "sharing_public_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicUpload",
+ "columnName": "sharing_public_upload",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingUserSendMail",
+ "columnName": "sharing_user_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingResharing",
+ "columnName": "sharing_resharing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationOutgoing",
+ "columnName": "sharing_federation_outgoing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationIncoming",
+ "columnName": "sharing_federation_incoming",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesBigfilechunking",
+ "columnName": "files_bigfilechunking",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesUndelete",
+ "columnName": "files_undelete",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesVersioning",
+ "columnName": "files_versioning",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "externalLinks",
+ "columnName": "external_links",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverName",
+ "columnName": "server_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverColor",
+ "columnName": "server_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverTextColor",
+ "columnName": "server_text_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverElementColor",
+ "columnName": "server_element_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverSlogan",
+ "columnName": "server_slogan",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverLogo",
+ "columnName": "server_logo",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundUrl",
+ "columnName": "background_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryption",
+ "columnName": "end_to_end_encryption",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryptionKeysExist",
+ "columnName": "end_to_end_encryption_keys_exist",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryptionApiVersion",
+ "columnName": "end_to_end_encryption_api_version",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "activity",
+ "columnName": "activity",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundDefault",
+ "columnName": "background_default",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundPlain",
+ "columnName": "background_plain",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocument",
+ "columnName": "richdocument",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentMimetypeList",
+ "columnName": "richdocument_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentDirectEditing",
+ "columnName": "richdocument_direct_editing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentTemplates",
+ "columnName": "richdocument_direct_templates",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentOptionalMimetypeList",
+ "columnName": "richdocument_optional_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicAskForOptionalPassword",
+ "columnName": "sharing_public_ask_for_optional_password",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentProductName",
+ "columnName": "richdocument_product_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "directEditingEtag",
+ "columnName": "direct_editing_etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatus",
+ "columnName": "user_status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatusSupportsEmoji",
+ "columnName": "user_status_supports_emoji",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesLockingVersion",
+ "columnName": "files_locking_version",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "groupfolders",
+ "columnName": "groupfolders",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "dropAccount",
+ "columnName": "drop_account",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "securityGuard",
+ "columnName": "security_guard",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "forbiddenFileNameCharacters",
+ "columnName": "forbidden_filename_characters",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "forbiddenFileNames",
+ "columnName": "forbidden_filenames",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "forbiddenFileNameExtensions",
+ "columnName": "forbidden_filename_extensions",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "forbiddenFilenameBaseNames",
+ "columnName": "forbidden_filename_basenames",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "external_links",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `icon_url` TEXT, `language` TEXT, `type` INTEGER, `name` TEXT, `url` TEXT, `redirect` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "iconUrl",
+ "columnName": "icon_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "language",
+ "columnName": "language",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "url",
+ "columnName": "url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "redirect",
+ "columnName": "redirect",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filelist",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `filename` TEXT, `encrypted_filename` TEXT, `path` TEXT, `path_decrypted` TEXT, `parent` INTEGER, `created` INTEGER, `modified` INTEGER, `content_type` TEXT, `content_length` INTEGER, `media_path` TEXT, `file_owner` TEXT, `last_sync_date` INTEGER, `last_sync_date_for_data` INTEGER, `modified_at_last_sync_for_data` INTEGER, `etag` TEXT, `etag_on_server` TEXT, `share_by_link` INTEGER, `permissions` TEXT, `remote_id` TEXT, `local_id` INTEGER NOT NULL DEFAULT -1, `update_thumbnail` INTEGER, `is_downloading` INTEGER, `favorite` INTEGER, `hidden` INTEGER, `is_encrypted` INTEGER, `etag_in_conflict` TEXT, `shared_via_users` INTEGER, `mount_type` INTEGER, `has_preview` INTEGER, `unread_comments_count` INTEGER, `owner_id` TEXT, `owner_display_name` TEXT, `note` TEXT, `sharees` TEXT, `rich_workspace` TEXT, `metadata_size` TEXT, `metadata_live_photo` TEXT, `locked` INTEGER, `lock_type` INTEGER, `lock_owner` TEXT, `lock_owner_display_name` TEXT, `lock_owner_editor` TEXT, `lock_timestamp` INTEGER, `lock_timeout` INTEGER, `lock_token` TEXT, `tags` TEXT, `metadata_gps` TEXT, `e2e_counter` INTEGER, `internal_two_way_sync_timestamp` INTEGER, `internal_two_way_sync_result` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "encryptedName",
+ "columnName": "encrypted_filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "pathDecrypted",
+ "columnName": "path_decrypted",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "parent",
+ "columnName": "parent",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "creation",
+ "columnName": "created",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modified",
+ "columnName": "modified",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentType",
+ "columnName": "content_type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentLength",
+ "columnName": "content_length",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "storagePath",
+ "columnName": "media_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "file_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDate",
+ "columnName": "last_sync_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDateForData",
+ "columnName": "last_sync_date_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modifiedAtLastSyncForData",
+ "columnName": "modified_at_last_sync_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagOnServer",
+ "columnName": "etag_on_server",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedViaLink",
+ "columnName": "share_by_link",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remoteId",
+ "columnName": "remote_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localId",
+ "columnName": "local_id",
+ "affinity": "INTEGER",
+ "notNull": true,
+ "defaultValue": "-1"
+ },
+ {
+ "fieldPath": "updateThumbnail",
+ "columnName": "update_thumbnail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDownloading",
+ "columnName": "is_downloading",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "favorite",
+ "columnName": "favorite",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isEncrypted",
+ "columnName": "is_encrypted",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagInConflict",
+ "columnName": "etag_in_conflict",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedWithSharee",
+ "columnName": "shared_via_users",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "mountType",
+ "columnName": "mount_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hasPreview",
+ "columnName": "has_preview",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "unreadCommentsCount",
+ "columnName": "unread_comments_count",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerId",
+ "columnName": "owner_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerDisplayName",
+ "columnName": "owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharees",
+ "columnName": "sharees",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richWorkspace",
+ "columnName": "rich_workspace",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataSize",
+ "columnName": "metadata_size",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataLivePhoto",
+ "columnName": "metadata_live_photo",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "locked",
+ "columnName": "locked",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockType",
+ "columnName": "lock_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwner",
+ "columnName": "lock_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerDisplayName",
+ "columnName": "lock_owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerEditor",
+ "columnName": "lock_owner_editor",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimestamp",
+ "columnName": "lock_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimeout",
+ "columnName": "lock_timeout",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockToken",
+ "columnName": "lock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "tags",
+ "columnName": "tags",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataGPS",
+ "columnName": "metadata_gps",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "e2eCounter",
+ "columnName": "e2e_counter",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "internalTwoWaySync",
+ "columnName": "internal_two_way_sync_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "internalTwoWaySyncResult",
+ "columnName": "internal_two_way_sync_result",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filesystem",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `is_folder` INTEGER, `found_at` INTEGER, `upload_triggered` INTEGER, `syncedfolder_id` TEXT, `crc32` TEXT, `modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileIsFolder",
+ "columnName": "is_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileFoundRecently",
+ "columnName": "found_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSentForUpload",
+ "columnName": "upload_triggered",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "syncedFolderId",
+ "columnName": "syncedfolder_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "crc32",
+ "columnName": "crc32",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileModified",
+ "columnName": "modified_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "ocshares",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `file_source` INTEGER, `item_source` INTEGER, `share_type` INTEGER, `shate_with` TEXT, `path` TEXT, `permissions` INTEGER, `shared_date` INTEGER, `expiration_date` INTEGER, `token` TEXT, `shared_with_display_name` TEXT, `is_directory` INTEGER, `user_id` TEXT, `id_remote_shared` INTEGER, `owner_share` TEXT, `is_password_protected` INTEGER, `note` TEXT, `hide_download` INTEGER, `share_link` TEXT, `share_label` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSource",
+ "columnName": "file_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "itemSource",
+ "columnName": "item_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareType",
+ "columnName": "share_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWith",
+ "columnName": "shate_with",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedDate",
+ "columnName": "shared_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "expirationDate",
+ "columnName": "expiration_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "token",
+ "columnName": "token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWithDisplayName",
+ "columnName": "shared_with_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDirectory",
+ "columnName": "is_directory",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userId",
+ "columnName": "user_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "idRemoteShared",
+ "columnName": "id_remote_shared",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "owner_share",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isPasswordProtected",
+ "columnName": "is_password_protected",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hideDownload",
+ "columnName": "hide_download",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLink",
+ "columnName": "share_link",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLabel",
+ "columnName": "share_label",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "synced_folders",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `wifi_only` INTEGER, `charging_only` INTEGER, `existing` INTEGER, `enabled` INTEGER, `enabled_timestamp_ms` INTEGER, `subfolder_by_date` INTEGER, `account` TEXT, `upload_option` INTEGER, `name_collision_policy` INTEGER, `type` INTEGER, `hidden` INTEGER, `sub_folder_rule` INTEGER, `exclude_hidden` INTEGER, `last_scan_timestamp_ms` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "wifiOnly",
+ "columnName": "wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "chargingOnly",
+ "columnName": "charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "existing",
+ "columnName": "existing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabled",
+ "columnName": "enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabledTimestampMs",
+ "columnName": "enabled_timestamp_ms",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "subfolderByDate",
+ "columnName": "subfolder_by_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "account",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadAction",
+ "columnName": "upload_option",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "subFolderRule",
+ "columnName": "sub_folder_rule",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "excludeHidden",
+ "columnName": "exclude_hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastScanTimestampMs",
+ "columnName": "last_scan_timestamp_ms",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "list_of_uploads",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `account_name` TEXT, `file_size` INTEGER, `status` INTEGER, `local_behaviour` INTEGER, `upload_time` INTEGER, `name_collision_policy` INTEGER, `is_create_remote_folder` INTEGER, `upload_end_timestamp` INTEGER, `last_result` INTEGER, `is_while_charging_only` INTEGER, `is_wifi_only` INTEGER, `created_by` INTEGER, `folder_unlock_token` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSize",
+ "columnName": "file_size",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "status",
+ "columnName": "status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localBehaviour",
+ "columnName": "local_behaviour",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadTime",
+ "columnName": "upload_time",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isCreateRemoteFolder",
+ "columnName": "is_create_remote_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadEndTimestamp",
+ "columnName": "upload_end_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastResult",
+ "columnName": "last_result",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWhileChargingOnly",
+ "columnName": "is_while_charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWifiOnly",
+ "columnName": "is_wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "createdBy",
+ "columnName": "created_by",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "folderUnlockToken",
+ "columnName": "folder_unlock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "virtual",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `type` TEXT, `ocfile_id` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ocFileId",
+ "columnName": "ocfile_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ }
+ ],
+ "views": [],
+ "setupQueries": [
+ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
+ "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '365a8731a100a61ae5029beb74acd02e')"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/app/schemas/com.nextcloud.client.database.NextcloudDatabase/84.json b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/84.json
new file mode 100644
index 000000000000..b703cbeaa0b1
--- /dev/null
+++ b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/84.json
@@ -0,0 +1,1301 @@
+{
+ "formatVersion": 1,
+ "database": {
+ "version": 84,
+ "identityHash": "70f2e2adb603afda7f87dbfb3b902e02",
+ "entities": [
+ {
+ "tableName": "arbitrary_data",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `cloud_id` TEXT, `key` TEXT, `value` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "cloudId",
+ "columnName": "cloud_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "key",
+ "columnName": "key",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "value",
+ "columnName": "value",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "capabilities",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `assistant` INTEGER, `account` TEXT, `version_mayor` INTEGER, `version_minor` INTEGER, `version_micro` INTEGER, `version_string` TEXT, `version_edition` TEXT, `extended_support` INTEGER, `core_pollinterval` INTEGER, `sharing_api_enabled` INTEGER, `sharing_public_enabled` INTEGER, `sharing_public_password_enforced` INTEGER, `sharing_public_expire_date_enabled` INTEGER, `sharing_public_expire_date_days` INTEGER, `sharing_public_expire_date_enforced` INTEGER, `sharing_public_send_mail` INTEGER, `sharing_public_upload` INTEGER, `sharing_user_send_mail` INTEGER, `sharing_resharing` INTEGER, `sharing_federation_outgoing` INTEGER, `sharing_federation_incoming` INTEGER, `files_bigfilechunking` INTEGER, `files_undelete` INTEGER, `files_versioning` INTEGER, `external_links` INTEGER, `server_name` TEXT, `server_color` TEXT, `server_text_color` TEXT, `server_element_color` TEXT, `server_slogan` TEXT, `server_logo` TEXT, `background_url` TEXT, `end_to_end_encryption` INTEGER, `end_to_end_encryption_keys_exist` INTEGER, `end_to_end_encryption_api_version` TEXT, `activity` INTEGER, `background_default` INTEGER, `background_plain` INTEGER, `richdocument` INTEGER, `richdocument_mimetype_list` TEXT, `richdocument_direct_editing` INTEGER, `richdocument_direct_templates` INTEGER, `richdocument_optional_mimetype_list` TEXT, `sharing_public_ask_for_optional_password` INTEGER, `richdocument_product_name` TEXT, `direct_editing_etag` TEXT, `user_status` INTEGER, `user_status_supports_emoji` INTEGER, `etag` TEXT, `files_locking_version` TEXT, `groupfolders` INTEGER, `drop_account` INTEGER, `security_guard` INTEGER, `forbidden_filename_characters` INTEGER, `forbidden_filenames` INTEGER, `forbidden_filename_extensions` INTEGER, `forbidden_filename_basenames` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "assistant",
+ "columnName": "assistant",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMajor",
+ "columnName": "version_mayor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMinor",
+ "columnName": "version_minor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMicro",
+ "columnName": "version_micro",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionString",
+ "columnName": "version_string",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionEditor",
+ "columnName": "version_edition",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "extendedSupport",
+ "columnName": "extended_support",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "corePollinterval",
+ "columnName": "core_pollinterval",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingApiEnabled",
+ "columnName": "sharing_api_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicEnabled",
+ "columnName": "sharing_public_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicPasswordEnforced",
+ "columnName": "sharing_public_password_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnabled",
+ "columnName": "sharing_public_expire_date_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateDays",
+ "columnName": "sharing_public_expire_date_days",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnforced",
+ "columnName": "sharing_public_expire_date_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicSendMail",
+ "columnName": "sharing_public_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicUpload",
+ "columnName": "sharing_public_upload",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingUserSendMail",
+ "columnName": "sharing_user_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingResharing",
+ "columnName": "sharing_resharing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationOutgoing",
+ "columnName": "sharing_federation_outgoing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationIncoming",
+ "columnName": "sharing_federation_incoming",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesBigfilechunking",
+ "columnName": "files_bigfilechunking",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesUndelete",
+ "columnName": "files_undelete",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesVersioning",
+ "columnName": "files_versioning",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "externalLinks",
+ "columnName": "external_links",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverName",
+ "columnName": "server_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverColor",
+ "columnName": "server_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverTextColor",
+ "columnName": "server_text_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverElementColor",
+ "columnName": "server_element_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverSlogan",
+ "columnName": "server_slogan",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverLogo",
+ "columnName": "server_logo",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundUrl",
+ "columnName": "background_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryption",
+ "columnName": "end_to_end_encryption",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryptionKeysExist",
+ "columnName": "end_to_end_encryption_keys_exist",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryptionApiVersion",
+ "columnName": "end_to_end_encryption_api_version",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "activity",
+ "columnName": "activity",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundDefault",
+ "columnName": "background_default",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundPlain",
+ "columnName": "background_plain",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocument",
+ "columnName": "richdocument",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentMimetypeList",
+ "columnName": "richdocument_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentDirectEditing",
+ "columnName": "richdocument_direct_editing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentTemplates",
+ "columnName": "richdocument_direct_templates",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentOptionalMimetypeList",
+ "columnName": "richdocument_optional_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicAskForOptionalPassword",
+ "columnName": "sharing_public_ask_for_optional_password",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentProductName",
+ "columnName": "richdocument_product_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "directEditingEtag",
+ "columnName": "direct_editing_etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatus",
+ "columnName": "user_status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatusSupportsEmoji",
+ "columnName": "user_status_supports_emoji",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesLockingVersion",
+ "columnName": "files_locking_version",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "groupfolders",
+ "columnName": "groupfolders",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "dropAccount",
+ "columnName": "drop_account",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "securityGuard",
+ "columnName": "security_guard",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "forbiddenFileNameCharacters",
+ "columnName": "forbidden_filename_characters",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "forbiddenFileNames",
+ "columnName": "forbidden_filenames",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "forbiddenFileNameExtensions",
+ "columnName": "forbidden_filename_extensions",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "forbiddenFilenameBaseNames",
+ "columnName": "forbidden_filename_basenames",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "external_links",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `icon_url` TEXT, `language` TEXT, `type` INTEGER, `name` TEXT, `url` TEXT, `redirect` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "iconUrl",
+ "columnName": "icon_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "language",
+ "columnName": "language",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "url",
+ "columnName": "url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "redirect",
+ "columnName": "redirect",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filelist",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `filename` TEXT, `encrypted_filename` TEXT, `path` TEXT, `path_decrypted` TEXT, `parent` INTEGER, `created` INTEGER, `modified` INTEGER, `content_type` TEXT, `content_length` INTEGER, `media_path` TEXT, `file_owner` TEXT, `last_sync_date` INTEGER, `last_sync_date_for_data` INTEGER, `modified_at_last_sync_for_data` INTEGER, `etag` TEXT, `etag_on_server` TEXT, `share_by_link` INTEGER, `permissions` TEXT, `remote_id` TEXT, `local_id` INTEGER NOT NULL DEFAULT -1, `update_thumbnail` INTEGER, `is_downloading` INTEGER, `favorite` INTEGER, `hidden` INTEGER, `is_encrypted` INTEGER, `etag_in_conflict` TEXT, `shared_via_users` INTEGER, `mount_type` INTEGER, `has_preview` INTEGER, `unread_comments_count` INTEGER, `owner_id` TEXT, `owner_display_name` TEXT, `note` TEXT, `sharees` TEXT, `rich_workspace` TEXT, `metadata_size` TEXT, `metadata_live_photo` TEXT, `locked` INTEGER, `lock_type` INTEGER, `lock_owner` TEXT, `lock_owner_display_name` TEXT, `lock_owner_editor` TEXT, `lock_timestamp` INTEGER, `lock_timeout` INTEGER, `lock_token` TEXT, `tags` TEXT, `metadata_gps` TEXT, `e2e_counter` INTEGER, `internal_two_way_sync_timestamp` INTEGER, `internal_two_way_sync_result` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "encryptedName",
+ "columnName": "encrypted_filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "pathDecrypted",
+ "columnName": "path_decrypted",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "parent",
+ "columnName": "parent",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "creation",
+ "columnName": "created",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modified",
+ "columnName": "modified",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentType",
+ "columnName": "content_type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentLength",
+ "columnName": "content_length",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "storagePath",
+ "columnName": "media_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "file_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDate",
+ "columnName": "last_sync_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDateForData",
+ "columnName": "last_sync_date_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modifiedAtLastSyncForData",
+ "columnName": "modified_at_last_sync_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagOnServer",
+ "columnName": "etag_on_server",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedViaLink",
+ "columnName": "share_by_link",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remoteId",
+ "columnName": "remote_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localId",
+ "columnName": "local_id",
+ "affinity": "INTEGER",
+ "notNull": true,
+ "defaultValue": "-1"
+ },
+ {
+ "fieldPath": "updateThumbnail",
+ "columnName": "update_thumbnail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDownloading",
+ "columnName": "is_downloading",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "favorite",
+ "columnName": "favorite",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isEncrypted",
+ "columnName": "is_encrypted",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagInConflict",
+ "columnName": "etag_in_conflict",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedWithSharee",
+ "columnName": "shared_via_users",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "mountType",
+ "columnName": "mount_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hasPreview",
+ "columnName": "has_preview",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "unreadCommentsCount",
+ "columnName": "unread_comments_count",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerId",
+ "columnName": "owner_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerDisplayName",
+ "columnName": "owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharees",
+ "columnName": "sharees",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richWorkspace",
+ "columnName": "rich_workspace",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataSize",
+ "columnName": "metadata_size",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataLivePhoto",
+ "columnName": "metadata_live_photo",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "locked",
+ "columnName": "locked",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockType",
+ "columnName": "lock_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwner",
+ "columnName": "lock_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerDisplayName",
+ "columnName": "lock_owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerEditor",
+ "columnName": "lock_owner_editor",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimestamp",
+ "columnName": "lock_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimeout",
+ "columnName": "lock_timeout",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockToken",
+ "columnName": "lock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "tags",
+ "columnName": "tags",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataGPS",
+ "columnName": "metadata_gps",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "e2eCounter",
+ "columnName": "e2e_counter",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "internalTwoWaySync",
+ "columnName": "internal_two_way_sync_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "internalTwoWaySyncResult",
+ "columnName": "internal_two_way_sync_result",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filesystem",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `is_folder` INTEGER, `found_at` INTEGER, `upload_triggered` INTEGER, `syncedfolder_id` TEXT, `crc32` TEXT, `modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileIsFolder",
+ "columnName": "is_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileFoundRecently",
+ "columnName": "found_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSentForUpload",
+ "columnName": "upload_triggered",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "syncedFolderId",
+ "columnName": "syncedfolder_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "crc32",
+ "columnName": "crc32",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileModified",
+ "columnName": "modified_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "ocshares",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `file_source` INTEGER, `item_source` INTEGER, `share_type` INTEGER, `shate_with` TEXT, `path` TEXT, `permissions` INTEGER, `shared_date` INTEGER, `expiration_date` INTEGER, `token` TEXT, `shared_with_display_name` TEXT, `is_directory` INTEGER, `user_id` TEXT, `id_remote_shared` INTEGER, `owner_share` TEXT, `is_password_protected` INTEGER, `note` TEXT, `hide_download` INTEGER, `share_link` TEXT, `share_label` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSource",
+ "columnName": "file_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "itemSource",
+ "columnName": "item_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareType",
+ "columnName": "share_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWith",
+ "columnName": "shate_with",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedDate",
+ "columnName": "shared_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "expirationDate",
+ "columnName": "expiration_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "token",
+ "columnName": "token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWithDisplayName",
+ "columnName": "shared_with_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDirectory",
+ "columnName": "is_directory",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userId",
+ "columnName": "user_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "idRemoteShared",
+ "columnName": "id_remote_shared",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "owner_share",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isPasswordProtected",
+ "columnName": "is_password_protected",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hideDownload",
+ "columnName": "hide_download",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLink",
+ "columnName": "share_link",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLabel",
+ "columnName": "share_label",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "synced_folders",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `wifi_only` INTEGER, `charging_only` INTEGER, `existing` INTEGER, `enabled` INTEGER, `enabled_timestamp_ms` INTEGER, `subfolder_by_date` INTEGER, `account` TEXT, `upload_option` INTEGER, `name_collision_policy` INTEGER, `type` INTEGER, `hidden` INTEGER, `sub_folder_rule` INTEGER, `exclude_hidden` INTEGER, `last_scan_timestamp_ms` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "wifiOnly",
+ "columnName": "wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "chargingOnly",
+ "columnName": "charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "existing",
+ "columnName": "existing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabled",
+ "columnName": "enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabledTimestampMs",
+ "columnName": "enabled_timestamp_ms",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "subfolderByDate",
+ "columnName": "subfolder_by_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "account",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadAction",
+ "columnName": "upload_option",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "subFolderRule",
+ "columnName": "sub_folder_rule",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "excludeHidden",
+ "columnName": "exclude_hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastScanTimestampMs",
+ "columnName": "last_scan_timestamp_ms",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "list_of_uploads",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `account_name` TEXT, `file_size` INTEGER, `status` INTEGER, `local_behaviour` INTEGER, `upload_time` INTEGER, `name_collision_policy` INTEGER, `is_create_remote_folder` INTEGER, `upload_end_timestamp` INTEGER, `last_result` INTEGER, `is_while_charging_only` INTEGER, `is_wifi_only` INTEGER, `created_by` INTEGER, `folder_unlock_token` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSize",
+ "columnName": "file_size",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "status",
+ "columnName": "status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localBehaviour",
+ "columnName": "local_behaviour",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadTime",
+ "columnName": "upload_time",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isCreateRemoteFolder",
+ "columnName": "is_create_remote_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadEndTimestamp",
+ "columnName": "upload_end_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastResult",
+ "columnName": "last_result",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWhileChargingOnly",
+ "columnName": "is_while_charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWifiOnly",
+ "columnName": "is_wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "createdBy",
+ "columnName": "created_by",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "folderUnlockToken",
+ "columnName": "folder_unlock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "virtual",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `type` TEXT, `ocfile_id` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ocFileId",
+ "columnName": "ocfile_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "offline_operations",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `offline_operations_parent_oc_file_id` INTEGER, `offline_operations_parent_path` TEXT, `offline_operations_type` TEXT, `offline_operations_path` TEXT, `offline_operations_file_name` TEXT, `offline_operations_created_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "parentOCFileId",
+ "columnName": "offline_operations_parent_oc_file_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "parentPath",
+ "columnName": "offline_operations_parent_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "offline_operations_type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "offline_operations_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filename",
+ "columnName": "offline_operations_file_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "createdAt",
+ "columnName": "offline_operations_created_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ }
+ ],
+ "views": [],
+ "setupQueries": [
+ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
+ "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '70f2e2adb603afda7f87dbfb3b902e02')"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/app/schemas/com.nextcloud.client.database.NextcloudDatabase/85.json b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/85.json
new file mode 100644
index 000000000000..5e2a33ba006c
--- /dev/null
+++ b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/85.json
@@ -0,0 +1,1301 @@
+{
+ "formatVersion": 1,
+ "database": {
+ "version": 85,
+ "identityHash": "2d24b9210a36150f221156d2e8f59665",
+ "entities": [
+ {
+ "tableName": "arbitrary_data",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `cloud_id` TEXT, `key` TEXT, `value` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "cloudId",
+ "columnName": "cloud_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "key",
+ "columnName": "key",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "value",
+ "columnName": "value",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "capabilities",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `assistant` INTEGER, `account` TEXT, `version_mayor` INTEGER, `version_minor` INTEGER, `version_micro` INTEGER, `version_string` TEXT, `version_edition` TEXT, `extended_support` INTEGER, `core_pollinterval` INTEGER, `sharing_api_enabled` INTEGER, `sharing_public_enabled` INTEGER, `sharing_public_password_enforced` INTEGER, `sharing_public_expire_date_enabled` INTEGER, `sharing_public_expire_date_days` INTEGER, `sharing_public_expire_date_enforced` INTEGER, `sharing_public_send_mail` INTEGER, `sharing_public_upload` INTEGER, `sharing_user_send_mail` INTEGER, `sharing_resharing` INTEGER, `sharing_federation_outgoing` INTEGER, `sharing_federation_incoming` INTEGER, `files_bigfilechunking` INTEGER, `files_undelete` INTEGER, `files_versioning` INTEGER, `external_links` INTEGER, `server_name` TEXT, `server_color` TEXT, `server_text_color` TEXT, `server_element_color` TEXT, `server_slogan` TEXT, `server_logo` TEXT, `background_url` TEXT, `end_to_end_encryption` INTEGER, `end_to_end_encryption_keys_exist` INTEGER, `end_to_end_encryption_api_version` TEXT, `activity` INTEGER, `background_default` INTEGER, `background_plain` INTEGER, `richdocument` INTEGER, `richdocument_mimetype_list` TEXT, `richdocument_direct_editing` INTEGER, `richdocument_direct_templates` INTEGER, `richdocument_optional_mimetype_list` TEXT, `sharing_public_ask_for_optional_password` INTEGER, `richdocument_product_name` TEXT, `direct_editing_etag` TEXT, `user_status` INTEGER, `user_status_supports_emoji` INTEGER, `etag` TEXT, `files_locking_version` TEXT, `groupfolders` INTEGER, `drop_account` INTEGER, `security_guard` INTEGER, `forbidden_filename_characters` INTEGER, `forbidden_filenames` INTEGER, `forbidden_filename_extensions` INTEGER, `forbidden_filename_basenames` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "assistant",
+ "columnName": "assistant",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMajor",
+ "columnName": "version_mayor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMinor",
+ "columnName": "version_minor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMicro",
+ "columnName": "version_micro",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionString",
+ "columnName": "version_string",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionEditor",
+ "columnName": "version_edition",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "extendedSupport",
+ "columnName": "extended_support",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "corePollinterval",
+ "columnName": "core_pollinterval",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingApiEnabled",
+ "columnName": "sharing_api_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicEnabled",
+ "columnName": "sharing_public_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicPasswordEnforced",
+ "columnName": "sharing_public_password_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnabled",
+ "columnName": "sharing_public_expire_date_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateDays",
+ "columnName": "sharing_public_expire_date_days",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnforced",
+ "columnName": "sharing_public_expire_date_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicSendMail",
+ "columnName": "sharing_public_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicUpload",
+ "columnName": "sharing_public_upload",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingUserSendMail",
+ "columnName": "sharing_user_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingResharing",
+ "columnName": "sharing_resharing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationOutgoing",
+ "columnName": "sharing_federation_outgoing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationIncoming",
+ "columnName": "sharing_federation_incoming",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesBigfilechunking",
+ "columnName": "files_bigfilechunking",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesUndelete",
+ "columnName": "files_undelete",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesVersioning",
+ "columnName": "files_versioning",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "externalLinks",
+ "columnName": "external_links",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverName",
+ "columnName": "server_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverColor",
+ "columnName": "server_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverTextColor",
+ "columnName": "server_text_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverElementColor",
+ "columnName": "server_element_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverSlogan",
+ "columnName": "server_slogan",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverLogo",
+ "columnName": "server_logo",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundUrl",
+ "columnName": "background_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryption",
+ "columnName": "end_to_end_encryption",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryptionKeysExist",
+ "columnName": "end_to_end_encryption_keys_exist",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryptionApiVersion",
+ "columnName": "end_to_end_encryption_api_version",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "activity",
+ "columnName": "activity",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundDefault",
+ "columnName": "background_default",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundPlain",
+ "columnName": "background_plain",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocument",
+ "columnName": "richdocument",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentMimetypeList",
+ "columnName": "richdocument_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentDirectEditing",
+ "columnName": "richdocument_direct_editing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentTemplates",
+ "columnName": "richdocument_direct_templates",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentOptionalMimetypeList",
+ "columnName": "richdocument_optional_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicAskForOptionalPassword",
+ "columnName": "sharing_public_ask_for_optional_password",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentProductName",
+ "columnName": "richdocument_product_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "directEditingEtag",
+ "columnName": "direct_editing_etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatus",
+ "columnName": "user_status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatusSupportsEmoji",
+ "columnName": "user_status_supports_emoji",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesLockingVersion",
+ "columnName": "files_locking_version",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "groupfolders",
+ "columnName": "groupfolders",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "dropAccount",
+ "columnName": "drop_account",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "securityGuard",
+ "columnName": "security_guard",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "forbiddenFileNameCharacters",
+ "columnName": "forbidden_filename_characters",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "forbiddenFileNames",
+ "columnName": "forbidden_filenames",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "forbiddenFileNameExtensions",
+ "columnName": "forbidden_filename_extensions",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "forbiddenFilenameBaseNames",
+ "columnName": "forbidden_filename_basenames",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "external_links",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `icon_url` TEXT, `language` TEXT, `type` INTEGER, `name` TEXT, `url` TEXT, `redirect` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "iconUrl",
+ "columnName": "icon_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "language",
+ "columnName": "language",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "url",
+ "columnName": "url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "redirect",
+ "columnName": "redirect",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filelist",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `filename` TEXT, `encrypted_filename` TEXT, `path` TEXT, `path_decrypted` TEXT, `parent` INTEGER, `created` INTEGER, `modified` INTEGER, `content_type` TEXT, `content_length` INTEGER, `media_path` TEXT, `file_owner` TEXT, `last_sync_date` INTEGER, `last_sync_date_for_data` INTEGER, `modified_at_last_sync_for_data` INTEGER, `etag` TEXT, `etag_on_server` TEXT, `share_by_link` INTEGER, `permissions` TEXT, `remote_id` TEXT, `local_id` INTEGER NOT NULL DEFAULT -1, `update_thumbnail` INTEGER, `is_downloading` INTEGER, `favorite` INTEGER, `hidden` INTEGER, `is_encrypted` INTEGER, `etag_in_conflict` TEXT, `shared_via_users` INTEGER, `mount_type` INTEGER, `has_preview` INTEGER, `unread_comments_count` INTEGER, `owner_id` TEXT, `owner_display_name` TEXT, `note` TEXT, `sharees` TEXT, `rich_workspace` TEXT, `metadata_size` TEXT, `metadata_live_photo` TEXT, `locked` INTEGER, `lock_type` INTEGER, `lock_owner` TEXT, `lock_owner_display_name` TEXT, `lock_owner_editor` TEXT, `lock_timestamp` INTEGER, `lock_timeout` INTEGER, `lock_token` TEXT, `tags` TEXT, `metadata_gps` TEXT, `e2e_counter` INTEGER, `internal_two_way_sync_timestamp` INTEGER, `internal_two_way_sync_result` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "encryptedName",
+ "columnName": "encrypted_filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "pathDecrypted",
+ "columnName": "path_decrypted",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "parent",
+ "columnName": "parent",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "creation",
+ "columnName": "created",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modified",
+ "columnName": "modified",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentType",
+ "columnName": "content_type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentLength",
+ "columnName": "content_length",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "storagePath",
+ "columnName": "media_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "file_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDate",
+ "columnName": "last_sync_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDateForData",
+ "columnName": "last_sync_date_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modifiedAtLastSyncForData",
+ "columnName": "modified_at_last_sync_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagOnServer",
+ "columnName": "etag_on_server",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedViaLink",
+ "columnName": "share_by_link",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remoteId",
+ "columnName": "remote_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localId",
+ "columnName": "local_id",
+ "affinity": "INTEGER",
+ "notNull": true,
+ "defaultValue": "-1"
+ },
+ {
+ "fieldPath": "updateThumbnail",
+ "columnName": "update_thumbnail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDownloading",
+ "columnName": "is_downloading",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "favorite",
+ "columnName": "favorite",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isEncrypted",
+ "columnName": "is_encrypted",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagInConflict",
+ "columnName": "etag_in_conflict",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedWithSharee",
+ "columnName": "shared_via_users",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "mountType",
+ "columnName": "mount_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hasPreview",
+ "columnName": "has_preview",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "unreadCommentsCount",
+ "columnName": "unread_comments_count",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerId",
+ "columnName": "owner_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerDisplayName",
+ "columnName": "owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharees",
+ "columnName": "sharees",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richWorkspace",
+ "columnName": "rich_workspace",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataSize",
+ "columnName": "metadata_size",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataLivePhoto",
+ "columnName": "metadata_live_photo",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "locked",
+ "columnName": "locked",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockType",
+ "columnName": "lock_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwner",
+ "columnName": "lock_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerDisplayName",
+ "columnName": "lock_owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerEditor",
+ "columnName": "lock_owner_editor",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimestamp",
+ "columnName": "lock_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimeout",
+ "columnName": "lock_timeout",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockToken",
+ "columnName": "lock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "tags",
+ "columnName": "tags",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataGPS",
+ "columnName": "metadata_gps",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "e2eCounter",
+ "columnName": "e2e_counter",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "internalTwoWaySync",
+ "columnName": "internal_two_way_sync_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "internalTwoWaySyncResult",
+ "columnName": "internal_two_way_sync_result",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filesystem",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `is_folder` INTEGER, `found_at` INTEGER, `upload_triggered` INTEGER, `syncedfolder_id` TEXT, `crc32` TEXT, `modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileIsFolder",
+ "columnName": "is_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileFoundRecently",
+ "columnName": "found_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSentForUpload",
+ "columnName": "upload_triggered",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "syncedFolderId",
+ "columnName": "syncedfolder_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "crc32",
+ "columnName": "crc32",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileModified",
+ "columnName": "modified_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "ocshares",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `file_source` INTEGER, `item_source` INTEGER, `share_type` INTEGER, `shate_with` TEXT, `path` TEXT, `permissions` INTEGER, `shared_date` INTEGER, `expiration_date` INTEGER, `token` TEXT, `shared_with_display_name` TEXT, `is_directory` INTEGER, `user_id` TEXT, `id_remote_shared` INTEGER, `owner_share` TEXT, `is_password_protected` INTEGER, `note` TEXT, `hide_download` INTEGER, `share_link` TEXT, `share_label` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSource",
+ "columnName": "file_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "itemSource",
+ "columnName": "item_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareType",
+ "columnName": "share_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWith",
+ "columnName": "shate_with",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedDate",
+ "columnName": "shared_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "expirationDate",
+ "columnName": "expiration_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "token",
+ "columnName": "token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWithDisplayName",
+ "columnName": "shared_with_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDirectory",
+ "columnName": "is_directory",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userId",
+ "columnName": "user_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "idRemoteShared",
+ "columnName": "id_remote_shared",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "owner_share",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isPasswordProtected",
+ "columnName": "is_password_protected",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hideDownload",
+ "columnName": "hide_download",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLink",
+ "columnName": "share_link",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLabel",
+ "columnName": "share_label",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "synced_folders",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `wifi_only` INTEGER, `charging_only` INTEGER, `existing` INTEGER, `enabled` INTEGER, `enabled_timestamp_ms` INTEGER, `subfolder_by_date` INTEGER, `account` TEXT, `upload_option` INTEGER, `name_collision_policy` INTEGER, `type` INTEGER, `hidden` INTEGER, `sub_folder_rule` INTEGER, `exclude_hidden` INTEGER, `last_scan_timestamp_ms` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "wifiOnly",
+ "columnName": "wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "chargingOnly",
+ "columnName": "charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "existing",
+ "columnName": "existing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabled",
+ "columnName": "enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabledTimestampMs",
+ "columnName": "enabled_timestamp_ms",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "subfolderByDate",
+ "columnName": "subfolder_by_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "account",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadAction",
+ "columnName": "upload_option",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "subFolderRule",
+ "columnName": "sub_folder_rule",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "excludeHidden",
+ "columnName": "exclude_hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastScanTimestampMs",
+ "columnName": "last_scan_timestamp_ms",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "list_of_uploads",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `account_name` TEXT, `file_size` INTEGER, `status` INTEGER, `local_behaviour` INTEGER, `upload_time` INTEGER, `name_collision_policy` INTEGER, `is_create_remote_folder` INTEGER, `upload_end_timestamp` INTEGER, `last_result` INTEGER, `is_while_charging_only` INTEGER, `is_wifi_only` INTEGER, `created_by` INTEGER, `folder_unlock_token` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSize",
+ "columnName": "file_size",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "status",
+ "columnName": "status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localBehaviour",
+ "columnName": "local_behaviour",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadTime",
+ "columnName": "upload_time",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isCreateRemoteFolder",
+ "columnName": "is_create_remote_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadEndTimestamp",
+ "columnName": "upload_end_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastResult",
+ "columnName": "last_result",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWhileChargingOnly",
+ "columnName": "is_while_charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWifiOnly",
+ "columnName": "is_wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "createdBy",
+ "columnName": "created_by",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "folderUnlockToken",
+ "columnName": "folder_unlock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "virtual",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `type` TEXT, `ocfile_id` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ocFileId",
+ "columnName": "ocfile_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "offline_operations",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `offline_operations_parent_oc_file_id` INTEGER, `offline_operations_path` TEXT, `offline_operations_type` TEXT, `offline_operations_file_name` TEXT, `offline_operations_created_at` INTEGER, `offline_operations_modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "parentOCFileId",
+ "columnName": "offline_operations_parent_oc_file_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "offline_operations_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "offline_operations_type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filename",
+ "columnName": "offline_operations_file_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "createdAt",
+ "columnName": "offline_operations_created_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modifiedAt",
+ "columnName": "offline_operations_modified_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ }
+ ],
+ "views": [],
+ "setupQueries": [
+ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
+ "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '2d24b9210a36150f221156d2e8f59665')"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/app/schemas/com.nextcloud.client.database.NextcloudDatabase/86.json b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/86.json
new file mode 100644
index 000000000000..2571f61f74b5
--- /dev/null
+++ b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/86.json
@@ -0,0 +1,1331 @@
+{
+ "formatVersion": 1,
+ "database": {
+ "version": 86,
+ "identityHash": "277489b9d4a6ee84f96d09dea39591ba",
+ "entities": [
+ {
+ "tableName": "arbitrary_data",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `cloud_id` TEXT, `key` TEXT, `value` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "cloudId",
+ "columnName": "cloud_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "key",
+ "columnName": "key",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "value",
+ "columnName": "value",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "capabilities",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `assistant` INTEGER, `account` TEXT, `version_mayor` INTEGER, `version_minor` INTEGER, `version_micro` INTEGER, `version_string` TEXT, `version_edition` TEXT, `extended_support` INTEGER, `core_pollinterval` INTEGER, `sharing_api_enabled` INTEGER, `sharing_public_enabled` INTEGER, `sharing_public_password_enforced` INTEGER, `sharing_public_expire_date_enabled` INTEGER, `sharing_public_expire_date_days` INTEGER, `sharing_public_expire_date_enforced` INTEGER, `sharing_public_send_mail` INTEGER, `sharing_public_upload` INTEGER, `sharing_user_send_mail` INTEGER, `sharing_resharing` INTEGER, `sharing_federation_outgoing` INTEGER, `sharing_federation_incoming` INTEGER, `files_bigfilechunking` INTEGER, `files_undelete` INTEGER, `files_versioning` INTEGER, `external_links` INTEGER, `server_name` TEXT, `server_color` TEXT, `server_text_color` TEXT, `server_element_color` TEXT, `server_slogan` TEXT, `server_logo` TEXT, `background_url` TEXT, `end_to_end_encryption` INTEGER, `end_to_end_encryption_keys_exist` INTEGER, `end_to_end_encryption_api_version` TEXT, `activity` INTEGER, `background_default` INTEGER, `background_plain` INTEGER, `richdocument` INTEGER, `richdocument_mimetype_list` TEXT, `richdocument_direct_editing` INTEGER, `richdocument_direct_templates` INTEGER, `richdocument_optional_mimetype_list` TEXT, `sharing_public_ask_for_optional_password` INTEGER, `richdocument_product_name` TEXT, `direct_editing_etag` TEXT, `user_status` INTEGER, `user_status_supports_emoji` INTEGER, `etag` TEXT, `files_locking_version` TEXT, `groupfolders` INTEGER, `drop_account` INTEGER, `security_guard` INTEGER, `forbidden_filename_characters` INTEGER, `forbidden_filenames` INTEGER, `forbidden_filename_extensions` INTEGER, `forbidden_filename_basenames` INTEGER, `files_download_limit` INTEGER, `files_download_limit_default` INTEGER, `recommendation` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "assistant",
+ "columnName": "assistant",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMajor",
+ "columnName": "version_mayor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMinor",
+ "columnName": "version_minor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMicro",
+ "columnName": "version_micro",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionString",
+ "columnName": "version_string",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionEditor",
+ "columnName": "version_edition",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "extendedSupport",
+ "columnName": "extended_support",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "corePollinterval",
+ "columnName": "core_pollinterval",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingApiEnabled",
+ "columnName": "sharing_api_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicEnabled",
+ "columnName": "sharing_public_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicPasswordEnforced",
+ "columnName": "sharing_public_password_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnabled",
+ "columnName": "sharing_public_expire_date_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateDays",
+ "columnName": "sharing_public_expire_date_days",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnforced",
+ "columnName": "sharing_public_expire_date_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicSendMail",
+ "columnName": "sharing_public_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicUpload",
+ "columnName": "sharing_public_upload",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingUserSendMail",
+ "columnName": "sharing_user_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingResharing",
+ "columnName": "sharing_resharing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationOutgoing",
+ "columnName": "sharing_federation_outgoing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationIncoming",
+ "columnName": "sharing_federation_incoming",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesBigfilechunking",
+ "columnName": "files_bigfilechunking",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesUndelete",
+ "columnName": "files_undelete",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesVersioning",
+ "columnName": "files_versioning",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "externalLinks",
+ "columnName": "external_links",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverName",
+ "columnName": "server_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverColor",
+ "columnName": "server_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverTextColor",
+ "columnName": "server_text_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverElementColor",
+ "columnName": "server_element_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverSlogan",
+ "columnName": "server_slogan",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverLogo",
+ "columnName": "server_logo",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundUrl",
+ "columnName": "background_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryption",
+ "columnName": "end_to_end_encryption",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryptionKeysExist",
+ "columnName": "end_to_end_encryption_keys_exist",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryptionApiVersion",
+ "columnName": "end_to_end_encryption_api_version",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "activity",
+ "columnName": "activity",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundDefault",
+ "columnName": "background_default",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundPlain",
+ "columnName": "background_plain",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocument",
+ "columnName": "richdocument",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentMimetypeList",
+ "columnName": "richdocument_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentDirectEditing",
+ "columnName": "richdocument_direct_editing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentTemplates",
+ "columnName": "richdocument_direct_templates",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentOptionalMimetypeList",
+ "columnName": "richdocument_optional_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicAskForOptionalPassword",
+ "columnName": "sharing_public_ask_for_optional_password",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentProductName",
+ "columnName": "richdocument_product_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "directEditingEtag",
+ "columnName": "direct_editing_etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatus",
+ "columnName": "user_status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatusSupportsEmoji",
+ "columnName": "user_status_supports_emoji",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesLockingVersion",
+ "columnName": "files_locking_version",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "groupfolders",
+ "columnName": "groupfolders",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "dropAccount",
+ "columnName": "drop_account",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "securityGuard",
+ "columnName": "security_guard",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "forbiddenFileNameCharacters",
+ "columnName": "forbidden_filename_characters",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "forbiddenFileNames",
+ "columnName": "forbidden_filenames",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "forbiddenFileNameExtensions",
+ "columnName": "forbidden_filename_extensions",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "forbiddenFilenameBaseNames",
+ "columnName": "forbidden_filename_basenames",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesDownloadLimit",
+ "columnName": "files_download_limit",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesDownloadLimitDefault",
+ "columnName": "files_download_limit_default",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "recommendation",
+ "columnName": "recommendation",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "external_links",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `icon_url` TEXT, `language` TEXT, `type` INTEGER, `name` TEXT, `url` TEXT, `redirect` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "iconUrl",
+ "columnName": "icon_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "language",
+ "columnName": "language",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "url",
+ "columnName": "url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "redirect",
+ "columnName": "redirect",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filelist",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `filename` TEXT, `encrypted_filename` TEXT, `path` TEXT, `path_decrypted` TEXT, `parent` INTEGER, `created` INTEGER, `modified` INTEGER, `content_type` TEXT, `content_length` INTEGER, `media_path` TEXT, `file_owner` TEXT, `last_sync_date` INTEGER, `last_sync_date_for_data` INTEGER, `modified_at_last_sync_for_data` INTEGER, `etag` TEXT, `etag_on_server` TEXT, `share_by_link` INTEGER, `permissions` TEXT, `remote_id` TEXT, `local_id` INTEGER NOT NULL DEFAULT -1, `update_thumbnail` INTEGER, `is_downloading` INTEGER, `favorite` INTEGER, `hidden` INTEGER, `is_encrypted` INTEGER, `etag_in_conflict` TEXT, `shared_via_users` INTEGER, `mount_type` INTEGER, `has_preview` INTEGER, `unread_comments_count` INTEGER, `owner_id` TEXT, `owner_display_name` TEXT, `note` TEXT, `sharees` TEXT, `rich_workspace` TEXT, `metadata_size` TEXT, `metadata_live_photo` TEXT, `locked` INTEGER, `lock_type` INTEGER, `lock_owner` TEXT, `lock_owner_display_name` TEXT, `lock_owner_editor` TEXT, `lock_timestamp` INTEGER, `lock_timeout` INTEGER, `lock_token` TEXT, `tags` TEXT, `metadata_gps` TEXT, `e2e_counter` INTEGER, `internal_two_way_sync_timestamp` INTEGER, `internal_two_way_sync_result` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "encryptedName",
+ "columnName": "encrypted_filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "pathDecrypted",
+ "columnName": "path_decrypted",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "parent",
+ "columnName": "parent",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "creation",
+ "columnName": "created",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modified",
+ "columnName": "modified",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentType",
+ "columnName": "content_type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentLength",
+ "columnName": "content_length",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "storagePath",
+ "columnName": "media_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "file_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDate",
+ "columnName": "last_sync_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDateForData",
+ "columnName": "last_sync_date_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modifiedAtLastSyncForData",
+ "columnName": "modified_at_last_sync_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagOnServer",
+ "columnName": "etag_on_server",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedViaLink",
+ "columnName": "share_by_link",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remoteId",
+ "columnName": "remote_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localId",
+ "columnName": "local_id",
+ "affinity": "INTEGER",
+ "notNull": true,
+ "defaultValue": "-1"
+ },
+ {
+ "fieldPath": "updateThumbnail",
+ "columnName": "update_thumbnail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDownloading",
+ "columnName": "is_downloading",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "favorite",
+ "columnName": "favorite",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isEncrypted",
+ "columnName": "is_encrypted",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagInConflict",
+ "columnName": "etag_in_conflict",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedWithSharee",
+ "columnName": "shared_via_users",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "mountType",
+ "columnName": "mount_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hasPreview",
+ "columnName": "has_preview",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "unreadCommentsCount",
+ "columnName": "unread_comments_count",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerId",
+ "columnName": "owner_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerDisplayName",
+ "columnName": "owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharees",
+ "columnName": "sharees",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richWorkspace",
+ "columnName": "rich_workspace",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataSize",
+ "columnName": "metadata_size",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataLivePhoto",
+ "columnName": "metadata_live_photo",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "locked",
+ "columnName": "locked",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockType",
+ "columnName": "lock_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwner",
+ "columnName": "lock_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerDisplayName",
+ "columnName": "lock_owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerEditor",
+ "columnName": "lock_owner_editor",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimestamp",
+ "columnName": "lock_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimeout",
+ "columnName": "lock_timeout",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockToken",
+ "columnName": "lock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "tags",
+ "columnName": "tags",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataGPS",
+ "columnName": "metadata_gps",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "e2eCounter",
+ "columnName": "e2e_counter",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "internalTwoWaySync",
+ "columnName": "internal_two_way_sync_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "internalTwoWaySyncResult",
+ "columnName": "internal_two_way_sync_result",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filesystem",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `is_folder` INTEGER, `found_at` INTEGER, `upload_triggered` INTEGER, `syncedfolder_id` TEXT, `crc32` TEXT, `modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileIsFolder",
+ "columnName": "is_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileFoundRecently",
+ "columnName": "found_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSentForUpload",
+ "columnName": "upload_triggered",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "syncedFolderId",
+ "columnName": "syncedfolder_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "crc32",
+ "columnName": "crc32",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileModified",
+ "columnName": "modified_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "ocshares",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `file_source` INTEGER, `item_source` INTEGER, `share_type` INTEGER, `shate_with` TEXT, `path` TEXT, `permissions` INTEGER, `shared_date` INTEGER, `expiration_date` INTEGER, `token` TEXT, `shared_with_display_name` TEXT, `is_directory` INTEGER, `user_id` TEXT, `id_remote_shared` INTEGER, `owner_share` TEXT, `is_password_protected` INTEGER, `note` TEXT, `hide_download` INTEGER, `share_link` TEXT, `share_label` TEXT, `download_limit_limit` INTEGER, `download_limit_count` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSource",
+ "columnName": "file_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "itemSource",
+ "columnName": "item_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareType",
+ "columnName": "share_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWith",
+ "columnName": "shate_with",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedDate",
+ "columnName": "shared_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "expirationDate",
+ "columnName": "expiration_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "token",
+ "columnName": "token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWithDisplayName",
+ "columnName": "shared_with_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDirectory",
+ "columnName": "is_directory",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userId",
+ "columnName": "user_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "idRemoteShared",
+ "columnName": "id_remote_shared",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "owner_share",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isPasswordProtected",
+ "columnName": "is_password_protected",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hideDownload",
+ "columnName": "hide_download",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLink",
+ "columnName": "share_link",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLabel",
+ "columnName": "share_label",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "downloadLimitLimit",
+ "columnName": "download_limit_limit",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "downloadLimitCount",
+ "columnName": "download_limit_count",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "synced_folders",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `wifi_only` INTEGER, `charging_only` INTEGER, `existing` INTEGER, `enabled` INTEGER, `enabled_timestamp_ms` INTEGER, `subfolder_by_date` INTEGER, `account` TEXT, `upload_option` INTEGER, `name_collision_policy` INTEGER, `type` INTEGER, `hidden` INTEGER, `sub_folder_rule` INTEGER, `exclude_hidden` INTEGER, `last_scan_timestamp_ms` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "wifiOnly",
+ "columnName": "wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "chargingOnly",
+ "columnName": "charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "existing",
+ "columnName": "existing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabled",
+ "columnName": "enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabledTimestampMs",
+ "columnName": "enabled_timestamp_ms",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "subfolderByDate",
+ "columnName": "subfolder_by_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "account",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadAction",
+ "columnName": "upload_option",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "subFolderRule",
+ "columnName": "sub_folder_rule",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "excludeHidden",
+ "columnName": "exclude_hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastScanTimestampMs",
+ "columnName": "last_scan_timestamp_ms",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "list_of_uploads",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `account_name` TEXT, `file_size` INTEGER, `status` INTEGER, `local_behaviour` INTEGER, `upload_time` INTEGER, `name_collision_policy` INTEGER, `is_create_remote_folder` INTEGER, `upload_end_timestamp` INTEGER, `last_result` INTEGER, `is_while_charging_only` INTEGER, `is_wifi_only` INTEGER, `created_by` INTEGER, `folder_unlock_token` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSize",
+ "columnName": "file_size",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "status",
+ "columnName": "status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localBehaviour",
+ "columnName": "local_behaviour",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadTime",
+ "columnName": "upload_time",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isCreateRemoteFolder",
+ "columnName": "is_create_remote_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadEndTimestamp",
+ "columnName": "upload_end_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastResult",
+ "columnName": "last_result",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWhileChargingOnly",
+ "columnName": "is_while_charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWifiOnly",
+ "columnName": "is_wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "createdBy",
+ "columnName": "created_by",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "folderUnlockToken",
+ "columnName": "folder_unlock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "virtual",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `type` TEXT, `ocfile_id` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ocFileId",
+ "columnName": "ocfile_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "offline_operations",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `offline_operations_parent_oc_file_id` INTEGER, `offline_operations_path` TEXT, `offline_operations_type` TEXT, `offline_operations_file_name` TEXT, `offline_operations_created_at` INTEGER, `offline_operations_modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "parentOCFileId",
+ "columnName": "offline_operations_parent_oc_file_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "offline_operations_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "offline_operations_type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filename",
+ "columnName": "offline_operations_file_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "createdAt",
+ "columnName": "offline_operations_created_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modifiedAt",
+ "columnName": "offline_operations_modified_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ }
+ ],
+ "views": [],
+ "setupQueries": [
+ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
+ "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '277489b9d4a6ee84f96d09dea39591ba')"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/app/schemas/com.nextcloud.client.database.NextcloudDatabase/87.json b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/87.json
new file mode 100644
index 000000000000..2bce6bc1ee01
--- /dev/null
+++ b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/87.json
@@ -0,0 +1,1337 @@
+{
+ "formatVersion": 1,
+ "database": {
+ "version": 87,
+ "identityHash": "c67369ca15672b4c84289aa188f49e50",
+ "entities": [
+ {
+ "tableName": "arbitrary_data",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `cloud_id` TEXT, `key` TEXT, `value` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "cloudId",
+ "columnName": "cloud_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "key",
+ "columnName": "key",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "value",
+ "columnName": "value",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "capabilities",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `assistant` INTEGER, `account` TEXT, `version_mayor` INTEGER, `version_minor` INTEGER, `version_micro` INTEGER, `version_string` TEXT, `version_edition` TEXT, `extended_support` INTEGER, `core_pollinterval` INTEGER, `sharing_api_enabled` INTEGER, `sharing_public_enabled` INTEGER, `sharing_public_password_enforced` INTEGER, `sharing_public_expire_date_enabled` INTEGER, `sharing_public_expire_date_days` INTEGER, `sharing_public_expire_date_enforced` INTEGER, `sharing_public_send_mail` INTEGER, `sharing_public_upload` INTEGER, `sharing_user_send_mail` INTEGER, `sharing_resharing` INTEGER, `sharing_federation_outgoing` INTEGER, `sharing_federation_incoming` INTEGER, `files_bigfilechunking` INTEGER, `files_undelete` INTEGER, `files_versioning` INTEGER, `external_links` INTEGER, `server_name` TEXT, `server_color` TEXT, `server_text_color` TEXT, `server_element_color` TEXT, `server_slogan` TEXT, `server_logo` TEXT, `background_url` TEXT, `end_to_end_encryption` INTEGER, `end_to_end_encryption_keys_exist` INTEGER, `end_to_end_encryption_api_version` TEXT, `activity` INTEGER, `background_default` INTEGER, `background_plain` INTEGER, `richdocument` INTEGER, `richdocument_mimetype_list` TEXT, `richdocument_direct_editing` INTEGER, `richdocument_direct_templates` INTEGER, `richdocument_optional_mimetype_list` TEXT, `sharing_public_ask_for_optional_password` INTEGER, `richdocument_product_name` TEXT, `direct_editing_etag` TEXT, `user_status` INTEGER, `user_status_supports_emoji` INTEGER, `etag` TEXT, `files_locking_version` TEXT, `groupfolders` INTEGER, `drop_account` INTEGER, `security_guard` INTEGER, `forbidden_filename_characters` INTEGER, `forbidden_filenames` INTEGER, `forbidden_filename_extensions` INTEGER, `forbidden_filename_basenames` INTEGER, `files_download_limit` INTEGER, `files_download_limit_default` INTEGER, `recommendation` INTEGER, `notes_folder_path` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "assistant",
+ "columnName": "assistant",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMajor",
+ "columnName": "version_mayor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMinor",
+ "columnName": "version_minor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMicro",
+ "columnName": "version_micro",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionString",
+ "columnName": "version_string",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionEditor",
+ "columnName": "version_edition",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "extendedSupport",
+ "columnName": "extended_support",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "corePollinterval",
+ "columnName": "core_pollinterval",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingApiEnabled",
+ "columnName": "sharing_api_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicEnabled",
+ "columnName": "sharing_public_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicPasswordEnforced",
+ "columnName": "sharing_public_password_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnabled",
+ "columnName": "sharing_public_expire_date_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateDays",
+ "columnName": "sharing_public_expire_date_days",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnforced",
+ "columnName": "sharing_public_expire_date_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicSendMail",
+ "columnName": "sharing_public_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicUpload",
+ "columnName": "sharing_public_upload",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingUserSendMail",
+ "columnName": "sharing_user_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingResharing",
+ "columnName": "sharing_resharing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationOutgoing",
+ "columnName": "sharing_federation_outgoing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationIncoming",
+ "columnName": "sharing_federation_incoming",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesBigfilechunking",
+ "columnName": "files_bigfilechunking",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesUndelete",
+ "columnName": "files_undelete",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesVersioning",
+ "columnName": "files_versioning",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "externalLinks",
+ "columnName": "external_links",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverName",
+ "columnName": "server_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverColor",
+ "columnName": "server_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverTextColor",
+ "columnName": "server_text_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverElementColor",
+ "columnName": "server_element_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverSlogan",
+ "columnName": "server_slogan",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverLogo",
+ "columnName": "server_logo",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundUrl",
+ "columnName": "background_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryption",
+ "columnName": "end_to_end_encryption",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryptionKeysExist",
+ "columnName": "end_to_end_encryption_keys_exist",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryptionApiVersion",
+ "columnName": "end_to_end_encryption_api_version",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "activity",
+ "columnName": "activity",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundDefault",
+ "columnName": "background_default",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundPlain",
+ "columnName": "background_plain",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocument",
+ "columnName": "richdocument",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentMimetypeList",
+ "columnName": "richdocument_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentDirectEditing",
+ "columnName": "richdocument_direct_editing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentTemplates",
+ "columnName": "richdocument_direct_templates",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentOptionalMimetypeList",
+ "columnName": "richdocument_optional_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicAskForOptionalPassword",
+ "columnName": "sharing_public_ask_for_optional_password",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentProductName",
+ "columnName": "richdocument_product_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "directEditingEtag",
+ "columnName": "direct_editing_etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatus",
+ "columnName": "user_status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatusSupportsEmoji",
+ "columnName": "user_status_supports_emoji",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesLockingVersion",
+ "columnName": "files_locking_version",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "groupfolders",
+ "columnName": "groupfolders",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "dropAccount",
+ "columnName": "drop_account",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "securityGuard",
+ "columnName": "security_guard",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "forbiddenFileNameCharacters",
+ "columnName": "forbidden_filename_characters",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "forbiddenFileNames",
+ "columnName": "forbidden_filenames",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "forbiddenFileNameExtensions",
+ "columnName": "forbidden_filename_extensions",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "forbiddenFilenameBaseNames",
+ "columnName": "forbidden_filename_basenames",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesDownloadLimit",
+ "columnName": "files_download_limit",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesDownloadLimitDefault",
+ "columnName": "files_download_limit_default",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "recommendation",
+ "columnName": "recommendation",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "notesFolderPath",
+ "columnName": "notes_folder_path",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "external_links",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `icon_url` TEXT, `language` TEXT, `type` INTEGER, `name` TEXT, `url` TEXT, `redirect` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "iconUrl",
+ "columnName": "icon_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "language",
+ "columnName": "language",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "url",
+ "columnName": "url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "redirect",
+ "columnName": "redirect",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filelist",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `filename` TEXT, `encrypted_filename` TEXT, `path` TEXT, `path_decrypted` TEXT, `parent` INTEGER, `created` INTEGER, `modified` INTEGER, `content_type` TEXT, `content_length` INTEGER, `media_path` TEXT, `file_owner` TEXT, `last_sync_date` INTEGER, `last_sync_date_for_data` INTEGER, `modified_at_last_sync_for_data` INTEGER, `etag` TEXT, `etag_on_server` TEXT, `share_by_link` INTEGER, `permissions` TEXT, `remote_id` TEXT, `local_id` INTEGER NOT NULL DEFAULT -1, `update_thumbnail` INTEGER, `is_downloading` INTEGER, `favorite` INTEGER, `hidden` INTEGER, `is_encrypted` INTEGER, `etag_in_conflict` TEXT, `shared_via_users` INTEGER, `mount_type` INTEGER, `has_preview` INTEGER, `unread_comments_count` INTEGER, `owner_id` TEXT, `owner_display_name` TEXT, `note` TEXT, `sharees` TEXT, `rich_workspace` TEXT, `metadata_size` TEXT, `metadata_live_photo` TEXT, `locked` INTEGER, `lock_type` INTEGER, `lock_owner` TEXT, `lock_owner_display_name` TEXT, `lock_owner_editor` TEXT, `lock_timestamp` INTEGER, `lock_timeout` INTEGER, `lock_token` TEXT, `tags` TEXT, `metadata_gps` TEXT, `e2e_counter` INTEGER, `internal_two_way_sync_timestamp` INTEGER, `internal_two_way_sync_result` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "encryptedName",
+ "columnName": "encrypted_filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "pathDecrypted",
+ "columnName": "path_decrypted",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "parent",
+ "columnName": "parent",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "creation",
+ "columnName": "created",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modified",
+ "columnName": "modified",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentType",
+ "columnName": "content_type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentLength",
+ "columnName": "content_length",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "storagePath",
+ "columnName": "media_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "file_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDate",
+ "columnName": "last_sync_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDateForData",
+ "columnName": "last_sync_date_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modifiedAtLastSyncForData",
+ "columnName": "modified_at_last_sync_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagOnServer",
+ "columnName": "etag_on_server",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedViaLink",
+ "columnName": "share_by_link",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remoteId",
+ "columnName": "remote_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localId",
+ "columnName": "local_id",
+ "affinity": "INTEGER",
+ "notNull": true,
+ "defaultValue": "-1"
+ },
+ {
+ "fieldPath": "updateThumbnail",
+ "columnName": "update_thumbnail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDownloading",
+ "columnName": "is_downloading",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "favorite",
+ "columnName": "favorite",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isEncrypted",
+ "columnName": "is_encrypted",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagInConflict",
+ "columnName": "etag_in_conflict",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedWithSharee",
+ "columnName": "shared_via_users",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "mountType",
+ "columnName": "mount_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hasPreview",
+ "columnName": "has_preview",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "unreadCommentsCount",
+ "columnName": "unread_comments_count",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerId",
+ "columnName": "owner_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerDisplayName",
+ "columnName": "owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharees",
+ "columnName": "sharees",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richWorkspace",
+ "columnName": "rich_workspace",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataSize",
+ "columnName": "metadata_size",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataLivePhoto",
+ "columnName": "metadata_live_photo",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "locked",
+ "columnName": "locked",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockType",
+ "columnName": "lock_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwner",
+ "columnName": "lock_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerDisplayName",
+ "columnName": "lock_owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerEditor",
+ "columnName": "lock_owner_editor",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimestamp",
+ "columnName": "lock_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimeout",
+ "columnName": "lock_timeout",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockToken",
+ "columnName": "lock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "tags",
+ "columnName": "tags",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataGPS",
+ "columnName": "metadata_gps",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "e2eCounter",
+ "columnName": "e2e_counter",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "internalTwoWaySync",
+ "columnName": "internal_two_way_sync_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "internalTwoWaySyncResult",
+ "columnName": "internal_two_way_sync_result",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filesystem",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `is_folder` INTEGER, `found_at` INTEGER, `upload_triggered` INTEGER, `syncedfolder_id` TEXT, `crc32` TEXT, `modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileIsFolder",
+ "columnName": "is_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileFoundRecently",
+ "columnName": "found_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSentForUpload",
+ "columnName": "upload_triggered",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "syncedFolderId",
+ "columnName": "syncedfolder_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "crc32",
+ "columnName": "crc32",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileModified",
+ "columnName": "modified_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "ocshares",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `file_source` INTEGER, `item_source` INTEGER, `share_type` INTEGER, `shate_with` TEXT, `path` TEXT, `permissions` INTEGER, `shared_date` INTEGER, `expiration_date` INTEGER, `token` TEXT, `shared_with_display_name` TEXT, `is_directory` INTEGER, `user_id` TEXT, `id_remote_shared` INTEGER, `owner_share` TEXT, `is_password_protected` INTEGER, `note` TEXT, `hide_download` INTEGER, `share_link` TEXT, `share_label` TEXT, `download_limit_limit` INTEGER, `download_limit_count` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSource",
+ "columnName": "file_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "itemSource",
+ "columnName": "item_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareType",
+ "columnName": "share_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWith",
+ "columnName": "shate_with",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedDate",
+ "columnName": "shared_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "expirationDate",
+ "columnName": "expiration_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "token",
+ "columnName": "token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWithDisplayName",
+ "columnName": "shared_with_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDirectory",
+ "columnName": "is_directory",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userId",
+ "columnName": "user_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "idRemoteShared",
+ "columnName": "id_remote_shared",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "owner_share",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isPasswordProtected",
+ "columnName": "is_password_protected",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hideDownload",
+ "columnName": "hide_download",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLink",
+ "columnName": "share_link",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLabel",
+ "columnName": "share_label",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "downloadLimitLimit",
+ "columnName": "download_limit_limit",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "downloadLimitCount",
+ "columnName": "download_limit_count",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "synced_folders",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `wifi_only` INTEGER, `charging_only` INTEGER, `existing` INTEGER, `enabled` INTEGER, `enabled_timestamp_ms` INTEGER, `subfolder_by_date` INTEGER, `account` TEXT, `upload_option` INTEGER, `name_collision_policy` INTEGER, `type` INTEGER, `hidden` INTEGER, `sub_folder_rule` INTEGER, `exclude_hidden` INTEGER, `last_scan_timestamp_ms` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "wifiOnly",
+ "columnName": "wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "chargingOnly",
+ "columnName": "charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "existing",
+ "columnName": "existing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabled",
+ "columnName": "enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabledTimestampMs",
+ "columnName": "enabled_timestamp_ms",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "subfolderByDate",
+ "columnName": "subfolder_by_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "account",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadAction",
+ "columnName": "upload_option",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "subFolderRule",
+ "columnName": "sub_folder_rule",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "excludeHidden",
+ "columnName": "exclude_hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastScanTimestampMs",
+ "columnName": "last_scan_timestamp_ms",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "list_of_uploads",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `account_name` TEXT, `file_size` INTEGER, `status` INTEGER, `local_behaviour` INTEGER, `upload_time` INTEGER, `name_collision_policy` INTEGER, `is_create_remote_folder` INTEGER, `upload_end_timestamp` INTEGER, `last_result` INTEGER, `is_while_charging_only` INTEGER, `is_wifi_only` INTEGER, `created_by` INTEGER, `folder_unlock_token` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSize",
+ "columnName": "file_size",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "status",
+ "columnName": "status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localBehaviour",
+ "columnName": "local_behaviour",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadTime",
+ "columnName": "upload_time",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isCreateRemoteFolder",
+ "columnName": "is_create_remote_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadEndTimestamp",
+ "columnName": "upload_end_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastResult",
+ "columnName": "last_result",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWhileChargingOnly",
+ "columnName": "is_while_charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWifiOnly",
+ "columnName": "is_wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "createdBy",
+ "columnName": "created_by",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "folderUnlockToken",
+ "columnName": "folder_unlock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "virtual",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `type` TEXT, `ocfile_id` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ocFileId",
+ "columnName": "ocfile_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "offline_operations",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `offline_operations_parent_oc_file_id` INTEGER, `offline_operations_path` TEXT, `offline_operations_type` TEXT, `offline_operations_file_name` TEXT, `offline_operations_created_at` INTEGER, `offline_operations_modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "parentOCFileId",
+ "columnName": "offline_operations_parent_oc_file_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "offline_operations_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "offline_operations_type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filename",
+ "columnName": "offline_operations_file_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "createdAt",
+ "columnName": "offline_operations_created_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modifiedAt",
+ "columnName": "offline_operations_modified_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ }
+ ],
+ "views": [],
+ "setupQueries": [
+ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
+ "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'c67369ca15672b4c84289aa188f49e50')"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/app/schemas/com.nextcloud.client.database.NextcloudDatabase/88.json b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/88.json
new file mode 100644
index 000000000000..925592424561
--- /dev/null
+++ b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/88.json
@@ -0,0 +1,1343 @@
+{
+ "formatVersion": 1,
+ "database": {
+ "version": 88,
+ "identityHash": "72369823c54307097d8ca60cf6944e2a",
+ "entities": [
+ {
+ "tableName": "arbitrary_data",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `cloud_id` TEXT, `key` TEXT, `value` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "cloudId",
+ "columnName": "cloud_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "key",
+ "columnName": "key",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "value",
+ "columnName": "value",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "capabilities",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `assistant` INTEGER, `account` TEXT, `version_mayor` INTEGER, `version_minor` INTEGER, `version_micro` INTEGER, `version_string` TEXT, `version_edition` TEXT, `extended_support` INTEGER, `core_pollinterval` INTEGER, `sharing_api_enabled` INTEGER, `sharing_public_enabled` INTEGER, `sharing_public_password_enforced` INTEGER, `sharing_public_expire_date_enabled` INTEGER, `sharing_public_expire_date_days` INTEGER, `sharing_public_expire_date_enforced` INTEGER, `sharing_public_send_mail` INTEGER, `sharing_public_upload` INTEGER, `sharing_user_send_mail` INTEGER, `sharing_resharing` INTEGER, `sharing_federation_outgoing` INTEGER, `sharing_federation_incoming` INTEGER, `files_bigfilechunking` INTEGER, `files_undelete` INTEGER, `files_versioning` INTEGER, `external_links` INTEGER, `server_name` TEXT, `server_color` TEXT, `server_text_color` TEXT, `server_element_color` TEXT, `server_slogan` TEXT, `server_logo` TEXT, `background_url` TEXT, `end_to_end_encryption` INTEGER, `end_to_end_encryption_keys_exist` INTEGER, `end_to_end_encryption_api_version` TEXT, `activity` INTEGER, `background_default` INTEGER, `background_plain` INTEGER, `richdocument` INTEGER, `richdocument_mimetype_list` TEXT, `richdocument_direct_editing` INTEGER, `richdocument_direct_templates` INTEGER, `richdocument_optional_mimetype_list` TEXT, `sharing_public_ask_for_optional_password` INTEGER, `richdocument_product_name` TEXT, `direct_editing_etag` TEXT, `user_status` INTEGER, `user_status_supports_emoji` INTEGER, `etag` TEXT, `files_locking_version` TEXT, `groupfolders` INTEGER, `drop_account` INTEGER, `security_guard` INTEGER, `forbidden_filename_characters` INTEGER, `forbidden_filenames` INTEGER, `forbidden_filename_extensions` INTEGER, `forbidden_filename_basenames` INTEGER, `files_download_limit` INTEGER, `files_download_limit_default` INTEGER, `recommendation` INTEGER, `notes_folder_path` TEXT, `default_permissions` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "assistant",
+ "columnName": "assistant",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMajor",
+ "columnName": "version_mayor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMinor",
+ "columnName": "version_minor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMicro",
+ "columnName": "version_micro",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionString",
+ "columnName": "version_string",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionEditor",
+ "columnName": "version_edition",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "extendedSupport",
+ "columnName": "extended_support",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "corePollinterval",
+ "columnName": "core_pollinterval",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingApiEnabled",
+ "columnName": "sharing_api_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicEnabled",
+ "columnName": "sharing_public_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicPasswordEnforced",
+ "columnName": "sharing_public_password_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnabled",
+ "columnName": "sharing_public_expire_date_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateDays",
+ "columnName": "sharing_public_expire_date_days",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnforced",
+ "columnName": "sharing_public_expire_date_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicSendMail",
+ "columnName": "sharing_public_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicUpload",
+ "columnName": "sharing_public_upload",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingUserSendMail",
+ "columnName": "sharing_user_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingResharing",
+ "columnName": "sharing_resharing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationOutgoing",
+ "columnName": "sharing_federation_outgoing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationIncoming",
+ "columnName": "sharing_federation_incoming",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesBigfilechunking",
+ "columnName": "files_bigfilechunking",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesUndelete",
+ "columnName": "files_undelete",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesVersioning",
+ "columnName": "files_versioning",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "externalLinks",
+ "columnName": "external_links",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverName",
+ "columnName": "server_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverColor",
+ "columnName": "server_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverTextColor",
+ "columnName": "server_text_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverElementColor",
+ "columnName": "server_element_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverSlogan",
+ "columnName": "server_slogan",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverLogo",
+ "columnName": "server_logo",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundUrl",
+ "columnName": "background_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryption",
+ "columnName": "end_to_end_encryption",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryptionKeysExist",
+ "columnName": "end_to_end_encryption_keys_exist",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryptionApiVersion",
+ "columnName": "end_to_end_encryption_api_version",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "activity",
+ "columnName": "activity",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundDefault",
+ "columnName": "background_default",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundPlain",
+ "columnName": "background_plain",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocument",
+ "columnName": "richdocument",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentMimetypeList",
+ "columnName": "richdocument_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentDirectEditing",
+ "columnName": "richdocument_direct_editing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentTemplates",
+ "columnName": "richdocument_direct_templates",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentOptionalMimetypeList",
+ "columnName": "richdocument_optional_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicAskForOptionalPassword",
+ "columnName": "sharing_public_ask_for_optional_password",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentProductName",
+ "columnName": "richdocument_product_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "directEditingEtag",
+ "columnName": "direct_editing_etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatus",
+ "columnName": "user_status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatusSupportsEmoji",
+ "columnName": "user_status_supports_emoji",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesLockingVersion",
+ "columnName": "files_locking_version",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "groupfolders",
+ "columnName": "groupfolders",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "dropAccount",
+ "columnName": "drop_account",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "securityGuard",
+ "columnName": "security_guard",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "forbiddenFileNameCharacters",
+ "columnName": "forbidden_filename_characters",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "forbiddenFileNames",
+ "columnName": "forbidden_filenames",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "forbiddenFileNameExtensions",
+ "columnName": "forbidden_filename_extensions",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "forbiddenFilenameBaseNames",
+ "columnName": "forbidden_filename_basenames",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesDownloadLimit",
+ "columnName": "files_download_limit",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesDownloadLimitDefault",
+ "columnName": "files_download_limit_default",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "recommendation",
+ "columnName": "recommendation",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "notesFolderPath",
+ "columnName": "notes_folder_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "defaultPermissions",
+ "columnName": "default_permissions",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "external_links",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `icon_url` TEXT, `language` TEXT, `type` INTEGER, `name` TEXT, `url` TEXT, `redirect` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "iconUrl",
+ "columnName": "icon_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "language",
+ "columnName": "language",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "url",
+ "columnName": "url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "redirect",
+ "columnName": "redirect",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filelist",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `filename` TEXT, `encrypted_filename` TEXT, `path` TEXT, `path_decrypted` TEXT, `parent` INTEGER, `created` INTEGER, `modified` INTEGER, `content_type` TEXT, `content_length` INTEGER, `media_path` TEXT, `file_owner` TEXT, `last_sync_date` INTEGER, `last_sync_date_for_data` INTEGER, `modified_at_last_sync_for_data` INTEGER, `etag` TEXT, `etag_on_server` TEXT, `share_by_link` INTEGER, `permissions` TEXT, `remote_id` TEXT, `local_id` INTEGER NOT NULL DEFAULT -1, `update_thumbnail` INTEGER, `is_downloading` INTEGER, `favorite` INTEGER, `hidden` INTEGER, `is_encrypted` INTEGER, `etag_in_conflict` TEXT, `shared_via_users` INTEGER, `mount_type` INTEGER, `has_preview` INTEGER, `unread_comments_count` INTEGER, `owner_id` TEXT, `owner_display_name` TEXT, `note` TEXT, `sharees` TEXT, `rich_workspace` TEXT, `metadata_size` TEXT, `metadata_live_photo` TEXT, `locked` INTEGER, `lock_type` INTEGER, `lock_owner` TEXT, `lock_owner_display_name` TEXT, `lock_owner_editor` TEXT, `lock_timestamp` INTEGER, `lock_timeout` INTEGER, `lock_token` TEXT, `tags` TEXT, `metadata_gps` TEXT, `e2e_counter` INTEGER, `internal_two_way_sync_timestamp` INTEGER, `internal_two_way_sync_result` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "encryptedName",
+ "columnName": "encrypted_filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "pathDecrypted",
+ "columnName": "path_decrypted",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "parent",
+ "columnName": "parent",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "creation",
+ "columnName": "created",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modified",
+ "columnName": "modified",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentType",
+ "columnName": "content_type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentLength",
+ "columnName": "content_length",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "storagePath",
+ "columnName": "media_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "file_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDate",
+ "columnName": "last_sync_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDateForData",
+ "columnName": "last_sync_date_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modifiedAtLastSyncForData",
+ "columnName": "modified_at_last_sync_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagOnServer",
+ "columnName": "etag_on_server",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedViaLink",
+ "columnName": "share_by_link",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remoteId",
+ "columnName": "remote_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localId",
+ "columnName": "local_id",
+ "affinity": "INTEGER",
+ "notNull": true,
+ "defaultValue": "-1"
+ },
+ {
+ "fieldPath": "updateThumbnail",
+ "columnName": "update_thumbnail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDownloading",
+ "columnName": "is_downloading",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "favorite",
+ "columnName": "favorite",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isEncrypted",
+ "columnName": "is_encrypted",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagInConflict",
+ "columnName": "etag_in_conflict",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedWithSharee",
+ "columnName": "shared_via_users",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "mountType",
+ "columnName": "mount_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hasPreview",
+ "columnName": "has_preview",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "unreadCommentsCount",
+ "columnName": "unread_comments_count",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerId",
+ "columnName": "owner_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerDisplayName",
+ "columnName": "owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharees",
+ "columnName": "sharees",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richWorkspace",
+ "columnName": "rich_workspace",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataSize",
+ "columnName": "metadata_size",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataLivePhoto",
+ "columnName": "metadata_live_photo",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "locked",
+ "columnName": "locked",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockType",
+ "columnName": "lock_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwner",
+ "columnName": "lock_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerDisplayName",
+ "columnName": "lock_owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerEditor",
+ "columnName": "lock_owner_editor",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimestamp",
+ "columnName": "lock_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimeout",
+ "columnName": "lock_timeout",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockToken",
+ "columnName": "lock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "tags",
+ "columnName": "tags",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataGPS",
+ "columnName": "metadata_gps",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "e2eCounter",
+ "columnName": "e2e_counter",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "internalTwoWaySync",
+ "columnName": "internal_two_way_sync_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "internalTwoWaySyncResult",
+ "columnName": "internal_two_way_sync_result",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filesystem",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `is_folder` INTEGER, `found_at` INTEGER, `upload_triggered` INTEGER, `syncedfolder_id` TEXT, `crc32` TEXT, `modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileIsFolder",
+ "columnName": "is_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileFoundRecently",
+ "columnName": "found_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSentForUpload",
+ "columnName": "upload_triggered",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "syncedFolderId",
+ "columnName": "syncedfolder_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "crc32",
+ "columnName": "crc32",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileModified",
+ "columnName": "modified_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "ocshares",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `file_source` INTEGER, `item_source` INTEGER, `share_type` INTEGER, `shate_with` TEXT, `path` TEXT, `permissions` INTEGER, `shared_date` INTEGER, `expiration_date` INTEGER, `token` TEXT, `shared_with_display_name` TEXT, `is_directory` INTEGER, `user_id` TEXT, `id_remote_shared` INTEGER, `owner_share` TEXT, `is_password_protected` INTEGER, `note` TEXT, `hide_download` INTEGER, `share_link` TEXT, `share_label` TEXT, `download_limit_limit` INTEGER, `download_limit_count` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSource",
+ "columnName": "file_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "itemSource",
+ "columnName": "item_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareType",
+ "columnName": "share_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWith",
+ "columnName": "shate_with",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedDate",
+ "columnName": "shared_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "expirationDate",
+ "columnName": "expiration_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "token",
+ "columnName": "token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWithDisplayName",
+ "columnName": "shared_with_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDirectory",
+ "columnName": "is_directory",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userId",
+ "columnName": "user_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "idRemoteShared",
+ "columnName": "id_remote_shared",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "owner_share",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isPasswordProtected",
+ "columnName": "is_password_protected",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hideDownload",
+ "columnName": "hide_download",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLink",
+ "columnName": "share_link",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLabel",
+ "columnName": "share_label",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "downloadLimitLimit",
+ "columnName": "download_limit_limit",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "downloadLimitCount",
+ "columnName": "download_limit_count",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "synced_folders",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `wifi_only` INTEGER, `charging_only` INTEGER, `existing` INTEGER, `enabled` INTEGER, `enabled_timestamp_ms` INTEGER, `subfolder_by_date` INTEGER, `account` TEXT, `upload_option` INTEGER, `name_collision_policy` INTEGER, `type` INTEGER, `hidden` INTEGER, `sub_folder_rule` INTEGER, `exclude_hidden` INTEGER, `last_scan_timestamp_ms` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "wifiOnly",
+ "columnName": "wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "chargingOnly",
+ "columnName": "charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "existing",
+ "columnName": "existing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabled",
+ "columnName": "enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabledTimestampMs",
+ "columnName": "enabled_timestamp_ms",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "subfolderByDate",
+ "columnName": "subfolder_by_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "account",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadAction",
+ "columnName": "upload_option",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "subFolderRule",
+ "columnName": "sub_folder_rule",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "excludeHidden",
+ "columnName": "exclude_hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastScanTimestampMs",
+ "columnName": "last_scan_timestamp_ms",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "list_of_uploads",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `account_name` TEXT, `file_size` INTEGER, `status` INTEGER, `local_behaviour` INTEGER, `upload_time` INTEGER, `name_collision_policy` INTEGER, `is_create_remote_folder` INTEGER, `upload_end_timestamp` INTEGER, `last_result` INTEGER, `is_while_charging_only` INTEGER, `is_wifi_only` INTEGER, `created_by` INTEGER, `folder_unlock_token` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSize",
+ "columnName": "file_size",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "status",
+ "columnName": "status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localBehaviour",
+ "columnName": "local_behaviour",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadTime",
+ "columnName": "upload_time",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isCreateRemoteFolder",
+ "columnName": "is_create_remote_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadEndTimestamp",
+ "columnName": "upload_end_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastResult",
+ "columnName": "last_result",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWhileChargingOnly",
+ "columnName": "is_while_charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWifiOnly",
+ "columnName": "is_wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "createdBy",
+ "columnName": "created_by",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "folderUnlockToken",
+ "columnName": "folder_unlock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "virtual",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `type` TEXT, `ocfile_id` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ocFileId",
+ "columnName": "ocfile_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "offline_operations",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `offline_operations_parent_oc_file_id` INTEGER, `offline_operations_path` TEXT, `offline_operations_type` TEXT, `offline_operations_file_name` TEXT, `offline_operations_created_at` INTEGER, `offline_operations_modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "parentOCFileId",
+ "columnName": "offline_operations_parent_oc_file_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "offline_operations_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "offline_operations_type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filename",
+ "columnName": "offline_operations_file_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "createdAt",
+ "columnName": "offline_operations_created_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modifiedAt",
+ "columnName": "offline_operations_modified_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ }
+ ],
+ "views": [],
+ "setupQueries": [
+ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
+ "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '72369823c54307097d8ca60cf6944e2a')"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/app/schemas/com.nextcloud.client.database.NextcloudDatabase/89.json b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/89.json
new file mode 100644
index 000000000000..e54001fc2fc8
--- /dev/null
+++ b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/89.json
@@ -0,0 +1,1349 @@
+{
+ "formatVersion": 1,
+ "database": {
+ "version": 89,
+ "identityHash": "7a70f9151914c24eb0e5350316b126f5",
+ "entities": [
+ {
+ "tableName": "arbitrary_data",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `cloud_id` TEXT, `key` TEXT, `value` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "cloudId",
+ "columnName": "cloud_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "key",
+ "columnName": "key",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "value",
+ "columnName": "value",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "capabilities",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `assistant` INTEGER, `account` TEXT, `version_mayor` INTEGER, `version_minor` INTEGER, `version_micro` INTEGER, `version_string` TEXT, `version_edition` TEXT, `extended_support` INTEGER, `core_pollinterval` INTEGER, `sharing_api_enabled` INTEGER, `sharing_public_enabled` INTEGER, `sharing_public_password_enforced` INTEGER, `sharing_public_expire_date_enabled` INTEGER, `sharing_public_expire_date_days` INTEGER, `sharing_public_expire_date_enforced` INTEGER, `sharing_public_send_mail` INTEGER, `sharing_public_upload` INTEGER, `sharing_user_send_mail` INTEGER, `sharing_resharing` INTEGER, `sharing_federation_outgoing` INTEGER, `sharing_federation_incoming` INTEGER, `files_bigfilechunking` INTEGER, `files_undelete` INTEGER, `files_versioning` INTEGER, `external_links` INTEGER, `server_name` TEXT, `server_color` TEXT, `server_text_color` TEXT, `server_element_color` TEXT, `server_slogan` TEXT, `server_logo` TEXT, `background_url` TEXT, `end_to_end_encryption` INTEGER, `end_to_end_encryption_keys_exist` INTEGER, `end_to_end_encryption_api_version` TEXT, `activity` INTEGER, `background_default` INTEGER, `background_plain` INTEGER, `richdocument` INTEGER, `richdocument_mimetype_list` TEXT, `richdocument_direct_editing` INTEGER, `richdocument_direct_templates` INTEGER, `richdocument_optional_mimetype_list` TEXT, `sharing_public_ask_for_optional_password` INTEGER, `richdocument_product_name` TEXT, `direct_editing_etag` TEXT, `user_status` INTEGER, `user_status_supports_emoji` INTEGER, `etag` TEXT, `files_locking_version` TEXT, `groupfolders` INTEGER, `drop_account` INTEGER, `security_guard` INTEGER, `forbidden_filename_characters` INTEGER, `forbidden_filenames` INTEGER, `forbidden_filename_extensions` INTEGER, `forbidden_filename_basenames` INTEGER, `files_download_limit` INTEGER, `files_download_limit_default` INTEGER, `recommendation` INTEGER, `notes_folder_path` TEXT, `default_permissions` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "assistant",
+ "columnName": "assistant",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMajor",
+ "columnName": "version_mayor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMinor",
+ "columnName": "version_minor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMicro",
+ "columnName": "version_micro",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionString",
+ "columnName": "version_string",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionEditor",
+ "columnName": "version_edition",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "extendedSupport",
+ "columnName": "extended_support",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "corePollinterval",
+ "columnName": "core_pollinterval",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingApiEnabled",
+ "columnName": "sharing_api_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicEnabled",
+ "columnName": "sharing_public_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicPasswordEnforced",
+ "columnName": "sharing_public_password_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnabled",
+ "columnName": "sharing_public_expire_date_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateDays",
+ "columnName": "sharing_public_expire_date_days",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnforced",
+ "columnName": "sharing_public_expire_date_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicSendMail",
+ "columnName": "sharing_public_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicUpload",
+ "columnName": "sharing_public_upload",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingUserSendMail",
+ "columnName": "sharing_user_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingResharing",
+ "columnName": "sharing_resharing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationOutgoing",
+ "columnName": "sharing_federation_outgoing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationIncoming",
+ "columnName": "sharing_federation_incoming",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesBigfilechunking",
+ "columnName": "files_bigfilechunking",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesUndelete",
+ "columnName": "files_undelete",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesVersioning",
+ "columnName": "files_versioning",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "externalLinks",
+ "columnName": "external_links",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverName",
+ "columnName": "server_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverColor",
+ "columnName": "server_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverTextColor",
+ "columnName": "server_text_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverElementColor",
+ "columnName": "server_element_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverSlogan",
+ "columnName": "server_slogan",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverLogo",
+ "columnName": "server_logo",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundUrl",
+ "columnName": "background_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryption",
+ "columnName": "end_to_end_encryption",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryptionKeysExist",
+ "columnName": "end_to_end_encryption_keys_exist",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryptionApiVersion",
+ "columnName": "end_to_end_encryption_api_version",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "activity",
+ "columnName": "activity",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundDefault",
+ "columnName": "background_default",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundPlain",
+ "columnName": "background_plain",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocument",
+ "columnName": "richdocument",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentMimetypeList",
+ "columnName": "richdocument_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentDirectEditing",
+ "columnName": "richdocument_direct_editing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentTemplates",
+ "columnName": "richdocument_direct_templates",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentOptionalMimetypeList",
+ "columnName": "richdocument_optional_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicAskForOptionalPassword",
+ "columnName": "sharing_public_ask_for_optional_password",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentProductName",
+ "columnName": "richdocument_product_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "directEditingEtag",
+ "columnName": "direct_editing_etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatus",
+ "columnName": "user_status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatusSupportsEmoji",
+ "columnName": "user_status_supports_emoji",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesLockingVersion",
+ "columnName": "files_locking_version",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "groupfolders",
+ "columnName": "groupfolders",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "dropAccount",
+ "columnName": "drop_account",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "securityGuard",
+ "columnName": "security_guard",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "forbiddenFileNameCharacters",
+ "columnName": "forbidden_filename_characters",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "forbiddenFileNames",
+ "columnName": "forbidden_filenames",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "forbiddenFileNameExtensions",
+ "columnName": "forbidden_filename_extensions",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "forbiddenFilenameBaseNames",
+ "columnName": "forbidden_filename_basenames",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesDownloadLimit",
+ "columnName": "files_download_limit",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesDownloadLimitDefault",
+ "columnName": "files_download_limit_default",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "recommendation",
+ "columnName": "recommendation",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "notesFolderPath",
+ "columnName": "notes_folder_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "defaultPermissions",
+ "columnName": "default_permissions",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "external_links",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `icon_url` TEXT, `language` TEXT, `type` INTEGER, `name` TEXT, `url` TEXT, `redirect` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "iconUrl",
+ "columnName": "icon_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "language",
+ "columnName": "language",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "url",
+ "columnName": "url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "redirect",
+ "columnName": "redirect",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filelist",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `filename` TEXT, `encrypted_filename` TEXT, `path` TEXT, `path_decrypted` TEXT, `parent` INTEGER, `created` INTEGER, `modified` INTEGER, `content_type` TEXT, `content_length` INTEGER, `media_path` TEXT, `file_owner` TEXT, `last_sync_date` INTEGER, `last_sync_date_for_data` INTEGER, `modified_at_last_sync_for_data` INTEGER, `etag` TEXT, `etag_on_server` TEXT, `share_by_link` INTEGER, `permissions` TEXT, `remote_id` TEXT, `local_id` INTEGER NOT NULL DEFAULT -1, `update_thumbnail` INTEGER, `is_downloading` INTEGER, `favorite` INTEGER, `hidden` INTEGER, `is_encrypted` INTEGER, `etag_in_conflict` TEXT, `shared_via_users` INTEGER, `mount_type` INTEGER, `has_preview` INTEGER, `unread_comments_count` INTEGER, `owner_id` TEXT, `owner_display_name` TEXT, `note` TEXT, `sharees` TEXT, `rich_workspace` TEXT, `metadata_size` TEXT, `metadata_live_photo` TEXT, `locked` INTEGER, `lock_type` INTEGER, `lock_owner` TEXT, `lock_owner_display_name` TEXT, `lock_owner_editor` TEXT, `lock_timestamp` INTEGER, `lock_timeout` INTEGER, `lock_token` TEXT, `tags` TEXT, `metadata_gps` TEXT, `e2e_counter` INTEGER, `internal_two_way_sync_timestamp` INTEGER, `internal_two_way_sync_result` TEXT, `uploaded` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "encryptedName",
+ "columnName": "encrypted_filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "pathDecrypted",
+ "columnName": "path_decrypted",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "parent",
+ "columnName": "parent",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "creation",
+ "columnName": "created",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modified",
+ "columnName": "modified",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentType",
+ "columnName": "content_type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentLength",
+ "columnName": "content_length",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "storagePath",
+ "columnName": "media_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "file_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDate",
+ "columnName": "last_sync_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDateForData",
+ "columnName": "last_sync_date_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modifiedAtLastSyncForData",
+ "columnName": "modified_at_last_sync_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagOnServer",
+ "columnName": "etag_on_server",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedViaLink",
+ "columnName": "share_by_link",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remoteId",
+ "columnName": "remote_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localId",
+ "columnName": "local_id",
+ "affinity": "INTEGER",
+ "notNull": true,
+ "defaultValue": "-1"
+ },
+ {
+ "fieldPath": "updateThumbnail",
+ "columnName": "update_thumbnail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDownloading",
+ "columnName": "is_downloading",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "favorite",
+ "columnName": "favorite",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isEncrypted",
+ "columnName": "is_encrypted",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagInConflict",
+ "columnName": "etag_in_conflict",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedWithSharee",
+ "columnName": "shared_via_users",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "mountType",
+ "columnName": "mount_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hasPreview",
+ "columnName": "has_preview",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "unreadCommentsCount",
+ "columnName": "unread_comments_count",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerId",
+ "columnName": "owner_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerDisplayName",
+ "columnName": "owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharees",
+ "columnName": "sharees",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richWorkspace",
+ "columnName": "rich_workspace",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataSize",
+ "columnName": "metadata_size",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataLivePhoto",
+ "columnName": "metadata_live_photo",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "locked",
+ "columnName": "locked",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockType",
+ "columnName": "lock_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwner",
+ "columnName": "lock_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerDisplayName",
+ "columnName": "lock_owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerEditor",
+ "columnName": "lock_owner_editor",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimestamp",
+ "columnName": "lock_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimeout",
+ "columnName": "lock_timeout",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockToken",
+ "columnName": "lock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "tags",
+ "columnName": "tags",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataGPS",
+ "columnName": "metadata_gps",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "e2eCounter",
+ "columnName": "e2e_counter",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "internalTwoWaySync",
+ "columnName": "internal_two_way_sync_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "internalTwoWaySyncResult",
+ "columnName": "internal_two_way_sync_result",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploaded",
+ "columnName": "uploaded",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filesystem",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `is_folder` INTEGER, `found_at` INTEGER, `upload_triggered` INTEGER, `syncedfolder_id` TEXT, `crc32` TEXT, `modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileIsFolder",
+ "columnName": "is_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileFoundRecently",
+ "columnName": "found_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSentForUpload",
+ "columnName": "upload_triggered",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "syncedFolderId",
+ "columnName": "syncedfolder_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "crc32",
+ "columnName": "crc32",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileModified",
+ "columnName": "modified_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "ocshares",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `file_source` INTEGER, `item_source` INTEGER, `share_type` INTEGER, `shate_with` TEXT, `path` TEXT, `permissions` INTEGER, `shared_date` INTEGER, `expiration_date` INTEGER, `token` TEXT, `shared_with_display_name` TEXT, `is_directory` INTEGER, `user_id` TEXT, `id_remote_shared` INTEGER, `owner_share` TEXT, `is_password_protected` INTEGER, `note` TEXT, `hide_download` INTEGER, `share_link` TEXT, `share_label` TEXT, `download_limit_limit` INTEGER, `download_limit_count` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSource",
+ "columnName": "file_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "itemSource",
+ "columnName": "item_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareType",
+ "columnName": "share_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWith",
+ "columnName": "shate_with",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedDate",
+ "columnName": "shared_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "expirationDate",
+ "columnName": "expiration_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "token",
+ "columnName": "token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWithDisplayName",
+ "columnName": "shared_with_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDirectory",
+ "columnName": "is_directory",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userId",
+ "columnName": "user_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "idRemoteShared",
+ "columnName": "id_remote_shared",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "owner_share",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isPasswordProtected",
+ "columnName": "is_password_protected",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hideDownload",
+ "columnName": "hide_download",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLink",
+ "columnName": "share_link",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLabel",
+ "columnName": "share_label",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "downloadLimitLimit",
+ "columnName": "download_limit_limit",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "downloadLimitCount",
+ "columnName": "download_limit_count",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "synced_folders",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `wifi_only` INTEGER, `charging_only` INTEGER, `existing` INTEGER, `enabled` INTEGER, `enabled_timestamp_ms` INTEGER, `subfolder_by_date` INTEGER, `account` TEXT, `upload_option` INTEGER, `name_collision_policy` INTEGER, `type` INTEGER, `hidden` INTEGER, `sub_folder_rule` INTEGER, `exclude_hidden` INTEGER, `last_scan_timestamp_ms` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "wifiOnly",
+ "columnName": "wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "chargingOnly",
+ "columnName": "charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "existing",
+ "columnName": "existing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabled",
+ "columnName": "enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabledTimestampMs",
+ "columnName": "enabled_timestamp_ms",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "subfolderByDate",
+ "columnName": "subfolder_by_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "account",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadAction",
+ "columnName": "upload_option",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "subFolderRule",
+ "columnName": "sub_folder_rule",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "excludeHidden",
+ "columnName": "exclude_hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastScanTimestampMs",
+ "columnName": "last_scan_timestamp_ms",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "list_of_uploads",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `account_name` TEXT, `file_size` INTEGER, `status` INTEGER, `local_behaviour` INTEGER, `upload_time` INTEGER, `name_collision_policy` INTEGER, `is_create_remote_folder` INTEGER, `upload_end_timestamp` INTEGER, `last_result` INTEGER, `is_while_charging_only` INTEGER, `is_wifi_only` INTEGER, `created_by` INTEGER, `folder_unlock_token` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSize",
+ "columnName": "file_size",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "status",
+ "columnName": "status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localBehaviour",
+ "columnName": "local_behaviour",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadTime",
+ "columnName": "upload_time",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isCreateRemoteFolder",
+ "columnName": "is_create_remote_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadEndTimestamp",
+ "columnName": "upload_end_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastResult",
+ "columnName": "last_result",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWhileChargingOnly",
+ "columnName": "is_while_charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWifiOnly",
+ "columnName": "is_wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "createdBy",
+ "columnName": "created_by",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "folderUnlockToken",
+ "columnName": "folder_unlock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "virtual",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `type` TEXT, `ocfile_id` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ocFileId",
+ "columnName": "ocfile_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "offline_operations",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `offline_operations_parent_oc_file_id` INTEGER, `offline_operations_path` TEXT, `offline_operations_type` TEXT, `offline_operations_file_name` TEXT, `offline_operations_created_at` INTEGER, `offline_operations_modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "parentOCFileId",
+ "columnName": "offline_operations_parent_oc_file_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "offline_operations_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "offline_operations_type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filename",
+ "columnName": "offline_operations_file_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "createdAt",
+ "columnName": "offline_operations_created_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modifiedAt",
+ "columnName": "offline_operations_modified_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ }
+ ],
+ "views": [],
+ "setupQueries": [
+ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
+ "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '7a70f9151914c24eb0e5350316b126f5')"
+ ]
+ }
+}
diff --git a/app/schemas/com.nextcloud.client.database.NextcloudDatabase/90.json b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/90.json
new file mode 100644
index 000000000000..c0b53e5fd543
--- /dev/null
+++ b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/90.json
@@ -0,0 +1,1355 @@
+{
+ "formatVersion": 1,
+ "database": {
+ "version": 90,
+ "identityHash": "93eb4d5fbf952984b6fc2df9f7c369e1",
+ "entities": [
+ {
+ "tableName": "arbitrary_data",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `cloud_id` TEXT, `key` TEXT, `value` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "cloudId",
+ "columnName": "cloud_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "key",
+ "columnName": "key",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "value",
+ "columnName": "value",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "capabilities",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `assistant` INTEGER, `account` TEXT, `version_mayor` INTEGER, `version_minor` INTEGER, `version_micro` INTEGER, `version_string` TEXT, `version_edition` TEXT, `extended_support` INTEGER, `core_pollinterval` INTEGER, `sharing_api_enabled` INTEGER, `sharing_public_enabled` INTEGER, `sharing_public_password_enforced` INTEGER, `sharing_public_expire_date_enabled` INTEGER, `sharing_public_expire_date_days` INTEGER, `sharing_public_expire_date_enforced` INTEGER, `sharing_public_send_mail` INTEGER, `sharing_public_upload` INTEGER, `sharing_user_send_mail` INTEGER, `sharing_resharing` INTEGER, `sharing_federation_outgoing` INTEGER, `sharing_federation_incoming` INTEGER, `files_bigfilechunking` INTEGER, `files_undelete` INTEGER, `files_versioning` INTEGER, `external_links` INTEGER, `server_name` TEXT, `server_color` TEXT, `server_text_color` TEXT, `server_element_color` TEXT, `server_slogan` TEXT, `server_logo` TEXT, `background_url` TEXT, `end_to_end_encryption` INTEGER, `end_to_end_encryption_keys_exist` INTEGER, `end_to_end_encryption_api_version` TEXT, `activity` INTEGER, `background_default` INTEGER, `background_plain` INTEGER, `richdocument` INTEGER, `richdocument_mimetype_list` TEXT, `richdocument_direct_editing` INTEGER, `richdocument_direct_templates` INTEGER, `richdocument_optional_mimetype_list` TEXT, `sharing_public_ask_for_optional_password` INTEGER, `richdocument_product_name` TEXT, `direct_editing_etag` TEXT, `user_status` INTEGER, `user_status_supports_emoji` INTEGER, `etag` TEXT, `files_locking_version` TEXT, `groupfolders` INTEGER, `drop_account` INTEGER, `security_guard` INTEGER, `forbidden_filename_characters` INTEGER, `forbidden_filenames` INTEGER, `forbidden_filename_extensions` INTEGER, `forbidden_filename_basenames` INTEGER, `files_download_limit` INTEGER, `files_download_limit_default` INTEGER, `recommendation` INTEGER, `notes_folder_path` TEXT, `default_permissions` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "assistant",
+ "columnName": "assistant",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMajor",
+ "columnName": "version_mayor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMinor",
+ "columnName": "version_minor",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionMicro",
+ "columnName": "version_micro",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionString",
+ "columnName": "version_string",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "versionEditor",
+ "columnName": "version_edition",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "extendedSupport",
+ "columnName": "extended_support",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "corePollinterval",
+ "columnName": "core_pollinterval",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingApiEnabled",
+ "columnName": "sharing_api_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicEnabled",
+ "columnName": "sharing_public_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicPasswordEnforced",
+ "columnName": "sharing_public_password_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnabled",
+ "columnName": "sharing_public_expire_date_enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateDays",
+ "columnName": "sharing_public_expire_date_days",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnforced",
+ "columnName": "sharing_public_expire_date_enforced",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicSendMail",
+ "columnName": "sharing_public_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicUpload",
+ "columnName": "sharing_public_upload",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingUserSendMail",
+ "columnName": "sharing_user_send_mail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingResharing",
+ "columnName": "sharing_resharing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationOutgoing",
+ "columnName": "sharing_federation_outgoing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingFederationIncoming",
+ "columnName": "sharing_federation_incoming",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesBigfilechunking",
+ "columnName": "files_bigfilechunking",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesUndelete",
+ "columnName": "files_undelete",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesVersioning",
+ "columnName": "files_versioning",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "externalLinks",
+ "columnName": "external_links",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverName",
+ "columnName": "server_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverColor",
+ "columnName": "server_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverTextColor",
+ "columnName": "server_text_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverElementColor",
+ "columnName": "server_element_color",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverSlogan",
+ "columnName": "server_slogan",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverLogo",
+ "columnName": "server_logo",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundUrl",
+ "columnName": "background_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryption",
+ "columnName": "end_to_end_encryption",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryptionKeysExist",
+ "columnName": "end_to_end_encryption_keys_exist",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "endToEndEncryptionApiVersion",
+ "columnName": "end_to_end_encryption_api_version",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "activity",
+ "columnName": "activity",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundDefault",
+ "columnName": "background_default",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "serverBackgroundPlain",
+ "columnName": "background_plain",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocument",
+ "columnName": "richdocument",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentMimetypeList",
+ "columnName": "richdocument_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentDirectEditing",
+ "columnName": "richdocument_direct_editing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentTemplates",
+ "columnName": "richdocument_direct_templates",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentOptionalMimetypeList",
+ "columnName": "richdocument_optional_mimetype_list",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharingPublicAskForOptionalPassword",
+ "columnName": "sharing_public_ask_for_optional_password",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richdocumentProductName",
+ "columnName": "richdocument_product_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "directEditingEtag",
+ "columnName": "direct_editing_etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatus",
+ "columnName": "user_status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userStatusSupportsEmoji",
+ "columnName": "user_status_supports_emoji",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesLockingVersion",
+ "columnName": "files_locking_version",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "groupfolders",
+ "columnName": "groupfolders",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "dropAccount",
+ "columnName": "drop_account",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "securityGuard",
+ "columnName": "security_guard",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "forbiddenFileNameCharacters",
+ "columnName": "forbidden_filename_characters",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "forbiddenFileNames",
+ "columnName": "forbidden_filenames",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "forbiddenFileNameExtensions",
+ "columnName": "forbidden_filename_extensions",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "forbiddenFilenameBaseNames",
+ "columnName": "forbidden_filename_basenames",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesDownloadLimit",
+ "columnName": "files_download_limit",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filesDownloadLimitDefault",
+ "columnName": "files_download_limit_default",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "recommendation",
+ "columnName": "recommendation",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "notesFolderPath",
+ "columnName": "notes_folder_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "defaultPermissions",
+ "columnName": "default_permissions",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "external_links",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `icon_url` TEXT, `language` TEXT, `type` INTEGER, `name` TEXT, `url` TEXT, `redirect` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "iconUrl",
+ "columnName": "icon_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "language",
+ "columnName": "language",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "url",
+ "columnName": "url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "redirect",
+ "columnName": "redirect",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filelist",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `filename` TEXT, `encrypted_filename` TEXT, `path` TEXT, `path_decrypted` TEXT, `parent` INTEGER, `created` INTEGER, `modified` INTEGER, `content_type` TEXT, `content_length` INTEGER, `media_path` TEXT, `file_owner` TEXT, `last_sync_date` INTEGER, `last_sync_date_for_data` INTEGER, `modified_at_last_sync_for_data` INTEGER, `etag` TEXT, `etag_on_server` TEXT, `share_by_link` INTEGER, `permissions` TEXT, `remote_id` TEXT, `local_id` INTEGER NOT NULL DEFAULT -1, `update_thumbnail` INTEGER, `is_downloading` INTEGER, `favorite` INTEGER, `hidden` INTEGER, `is_encrypted` INTEGER, `etag_in_conflict` TEXT, `shared_via_users` INTEGER, `mount_type` INTEGER, `has_preview` INTEGER, `unread_comments_count` INTEGER, `owner_id` TEXT, `owner_display_name` TEXT, `note` TEXT, `sharees` TEXT, `rich_workspace` TEXT, `metadata_size` TEXT, `metadata_live_photo` TEXT, `locked` INTEGER, `lock_type` INTEGER, `lock_owner` TEXT, `lock_owner_display_name` TEXT, `lock_owner_editor` TEXT, `lock_timestamp` INTEGER, `lock_timeout` INTEGER, `lock_token` TEXT, `tags` TEXT, `metadata_gps` TEXT, `e2e_counter` INTEGER, `internal_two_way_sync_timestamp` INTEGER, `internal_two_way_sync_result` TEXT, `uploaded` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "encryptedName",
+ "columnName": "encrypted_filename",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "pathDecrypted",
+ "columnName": "path_decrypted",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "parent",
+ "columnName": "parent",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "creation",
+ "columnName": "created",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modified",
+ "columnName": "modified",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentType",
+ "columnName": "content_type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentLength",
+ "columnName": "content_length",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "storagePath",
+ "columnName": "media_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "file_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDate",
+ "columnName": "last_sync_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSyncDateForData",
+ "columnName": "last_sync_date_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modifiedAtLastSyncForData",
+ "columnName": "modified_at_last_sync_for_data",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagOnServer",
+ "columnName": "etag_on_server",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedViaLink",
+ "columnName": "share_by_link",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remoteId",
+ "columnName": "remote_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localId",
+ "columnName": "local_id",
+ "affinity": "INTEGER",
+ "notNull": true,
+ "defaultValue": "-1"
+ },
+ {
+ "fieldPath": "updateThumbnail",
+ "columnName": "update_thumbnail",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDownloading",
+ "columnName": "is_downloading",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "favorite",
+ "columnName": "favorite",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isEncrypted",
+ "columnName": "is_encrypted",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etagInConflict",
+ "columnName": "etag_in_conflict",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedWithSharee",
+ "columnName": "shared_via_users",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "mountType",
+ "columnName": "mount_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hasPreview",
+ "columnName": "has_preview",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "unreadCommentsCount",
+ "columnName": "unread_comments_count",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerId",
+ "columnName": "owner_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ownerDisplayName",
+ "columnName": "owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharees",
+ "columnName": "sharees",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "richWorkspace",
+ "columnName": "rich_workspace",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataSize",
+ "columnName": "metadata_size",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataLivePhoto",
+ "columnName": "metadata_live_photo",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "locked",
+ "columnName": "locked",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockType",
+ "columnName": "lock_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwner",
+ "columnName": "lock_owner",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerDisplayName",
+ "columnName": "lock_owner_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockOwnerEditor",
+ "columnName": "lock_owner_editor",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimestamp",
+ "columnName": "lock_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockTimeout",
+ "columnName": "lock_timeout",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lockToken",
+ "columnName": "lock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "tags",
+ "columnName": "tags",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "metadataGPS",
+ "columnName": "metadata_gps",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "e2eCounter",
+ "columnName": "e2e_counter",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "internalTwoWaySync",
+ "columnName": "internal_two_way_sync_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "internalTwoWaySyncResult",
+ "columnName": "internal_two_way_sync_result",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploaded",
+ "columnName": "uploaded",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "filesystem",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `is_folder` INTEGER, `found_at` INTEGER, `upload_triggered` INTEGER, `syncedfolder_id` TEXT, `crc32` TEXT, `modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileIsFolder",
+ "columnName": "is_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileFoundRecently",
+ "columnName": "found_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSentForUpload",
+ "columnName": "upload_triggered",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "syncedFolderId",
+ "columnName": "syncedfolder_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "crc32",
+ "columnName": "crc32",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileModified",
+ "columnName": "modified_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "ocshares",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `file_source` INTEGER, `item_source` INTEGER, `share_type` INTEGER, `shate_with` TEXT, `path` TEXT, `permissions` INTEGER, `shared_date` INTEGER, `expiration_date` INTEGER, `token` TEXT, `shared_with_display_name` TEXT, `is_directory` INTEGER, `user_id` TEXT, `id_remote_shared` INTEGER, `owner_share` TEXT, `is_password_protected` INTEGER, `note` TEXT, `hide_download` INTEGER, `share_link` TEXT, `share_label` TEXT, `download_limit_limit` INTEGER, `download_limit_count` INTEGER, `attributes` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSource",
+ "columnName": "file_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "itemSource",
+ "columnName": "item_source",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareType",
+ "columnName": "share_type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWith",
+ "columnName": "shate_with",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sharedDate",
+ "columnName": "shared_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "expirationDate",
+ "columnName": "expiration_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "token",
+ "columnName": "token",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareWithDisplayName",
+ "columnName": "shared_with_display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isDirectory",
+ "columnName": "is_directory",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "userId",
+ "columnName": "user_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "idRemoteShared",
+ "columnName": "id_remote_shared",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "owner_share",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isPasswordProtected",
+ "columnName": "is_password_protected",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hideDownload",
+ "columnName": "hide_download",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLink",
+ "columnName": "share_link",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "shareLabel",
+ "columnName": "share_label",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "downloadLimitLimit",
+ "columnName": "download_limit_limit",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "downloadLimitCount",
+ "columnName": "download_limit_count",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "attributes",
+ "columnName": "attributes",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "synced_folders",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `wifi_only` INTEGER, `charging_only` INTEGER, `existing` INTEGER, `enabled` INTEGER, `enabled_timestamp_ms` INTEGER, `subfolder_by_date` INTEGER, `account` TEXT, `upload_option` INTEGER, `name_collision_policy` INTEGER, `type` INTEGER, `hidden` INTEGER, `sub_folder_rule` INTEGER, `exclude_hidden` INTEGER, `last_scan_timestamp_ms` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "wifiOnly",
+ "columnName": "wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "chargingOnly",
+ "columnName": "charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "existing",
+ "columnName": "existing",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabled",
+ "columnName": "enabled",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "enabledTimestampMs",
+ "columnName": "enabled_timestamp_ms",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "subfolderByDate",
+ "columnName": "subfolder_by_date",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "account",
+ "columnName": "account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadAction",
+ "columnName": "upload_option",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "subFolderRule",
+ "columnName": "sub_folder_rule",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "excludeHidden",
+ "columnName": "exclude_hidden",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastScanTimestampMs",
+ "columnName": "last_scan_timestamp_ms",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "list_of_uploads",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `account_name` TEXT, `file_size` INTEGER, `status` INTEGER, `local_behaviour` INTEGER, `upload_time` INTEGER, `name_collision_policy` INTEGER, `is_create_remote_folder` INTEGER, `upload_end_timestamp` INTEGER, `last_result` INTEGER, `is_while_charging_only` INTEGER, `is_wifi_only` INTEGER, `created_by` INTEGER, `folder_unlock_token` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "fileSize",
+ "columnName": "file_size",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "status",
+ "columnName": "status",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "localBehaviour",
+ "columnName": "local_behaviour",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadTime",
+ "columnName": "upload_time",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isCreateRemoteFolder",
+ "columnName": "is_create_remote_folder",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uploadEndTimestamp",
+ "columnName": "upload_end_timestamp",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastResult",
+ "columnName": "last_result",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWhileChargingOnly",
+ "columnName": "is_while_charging_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isWifiOnly",
+ "columnName": "is_wifi_only",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "createdBy",
+ "columnName": "created_by",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "folderUnlockToken",
+ "columnName": "folder_unlock_token",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "virtual",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `type` TEXT, `ocfile_id` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "ocFileId",
+ "columnName": "ocfile_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "offline_operations",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `offline_operations_parent_oc_file_id` INTEGER, `offline_operations_path` TEXT, `offline_operations_type` TEXT, `offline_operations_file_name` TEXT, `offline_operations_created_at` INTEGER, `offline_operations_modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "parentOCFileId",
+ "columnName": "offline_operations_parent_oc_file_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "offline_operations_path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "offline_operations_type",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filename",
+ "columnName": "offline_operations_file_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "createdAt",
+ "columnName": "offline_operations_created_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "modifiedAt",
+ "columnName": "offline_operations_modified_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ }
+ ],
+ "views": [],
+ "setupQueries": [
+ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
+ "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '93eb4d5fbf952984b6fc2df9f7c369e1')"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/app/schemas/com.nextcloud.client.database.NextcloudDatabase/91.json b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/91.json
new file mode 100644
index 000000000000..a338fc43eaaf
--- /dev/null
+++ b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/91.json
@@ -0,0 +1,1195 @@
+{
+ "formatVersion": 1,
+ "database": {
+ "version": 91,
+ "identityHash": "16f8a78a87d896adf01d545ed83142e5",
+ "entities": [
+ {
+ "tableName": "arbitrary_data",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `cloud_id` TEXT, `key` TEXT, `value` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "cloudId",
+ "columnName": "cloud_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "key",
+ "columnName": "key",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "value",
+ "columnName": "value",
+ "affinity": "TEXT"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "capabilities",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `assistant` INTEGER, `account` TEXT, `version_mayor` INTEGER, `version_minor` INTEGER, `version_micro` INTEGER, `version_string` TEXT, `version_edition` TEXT, `extended_support` INTEGER, `core_pollinterval` INTEGER, `sharing_api_enabled` INTEGER, `sharing_public_enabled` INTEGER, `sharing_public_password_enforced` INTEGER, `sharing_public_expire_date_enabled` INTEGER, `sharing_public_expire_date_days` INTEGER, `sharing_public_expire_date_enforced` INTEGER, `sharing_public_send_mail` INTEGER, `sharing_public_upload` INTEGER, `sharing_user_send_mail` INTEGER, `sharing_resharing` INTEGER, `sharing_federation_outgoing` INTEGER, `sharing_federation_incoming` INTEGER, `files_bigfilechunking` INTEGER, `files_undelete` INTEGER, `files_versioning` INTEGER, `external_links` INTEGER, `server_name` TEXT, `server_color` TEXT, `server_text_color` TEXT, `server_element_color` TEXT, `server_slogan` TEXT, `server_logo` TEXT, `background_url` TEXT, `end_to_end_encryption` INTEGER, `end_to_end_encryption_keys_exist` INTEGER, `end_to_end_encryption_api_version` TEXT, `activity` INTEGER, `background_default` INTEGER, `background_plain` INTEGER, `richdocument` INTEGER, `richdocument_mimetype_list` TEXT, `richdocument_direct_editing` INTEGER, `richdocument_direct_templates` INTEGER, `richdocument_optional_mimetype_list` TEXT, `sharing_public_ask_for_optional_password` INTEGER, `richdocument_product_name` TEXT, `direct_editing_etag` TEXT, `user_status` INTEGER, `user_status_supports_emoji` INTEGER, `etag` TEXT, `files_locking_version` TEXT, `groupfolders` INTEGER, `drop_account` INTEGER, `security_guard` INTEGER, `forbidden_filename_characters` INTEGER, `forbidden_filenames` INTEGER, `forbidden_filename_extensions` INTEGER, `forbidden_filename_basenames` INTEGER, `files_download_limit` INTEGER, `files_download_limit_default` INTEGER, `recommendation` INTEGER, `notes_folder_path` TEXT, `default_permissions` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "assistant",
+ "columnName": "assistant",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "versionMajor",
+ "columnName": "version_mayor",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "versionMinor",
+ "columnName": "version_minor",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "versionMicro",
+ "columnName": "version_micro",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "versionString",
+ "columnName": "version_string",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "versionEditor",
+ "columnName": "version_edition",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "extendedSupport",
+ "columnName": "extended_support",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "corePollinterval",
+ "columnName": "core_pollinterval",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingApiEnabled",
+ "columnName": "sharing_api_enabled",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicEnabled",
+ "columnName": "sharing_public_enabled",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicPasswordEnforced",
+ "columnName": "sharing_public_password_enforced",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnabled",
+ "columnName": "sharing_public_expire_date_enabled",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateDays",
+ "columnName": "sharing_public_expire_date_days",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnforced",
+ "columnName": "sharing_public_expire_date_enforced",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicSendMail",
+ "columnName": "sharing_public_send_mail",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicUpload",
+ "columnName": "sharing_public_upload",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingUserSendMail",
+ "columnName": "sharing_user_send_mail",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingResharing",
+ "columnName": "sharing_resharing",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingFederationOutgoing",
+ "columnName": "sharing_federation_outgoing",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingFederationIncoming",
+ "columnName": "sharing_federation_incoming",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesBigfilechunking",
+ "columnName": "files_bigfilechunking",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesUndelete",
+ "columnName": "files_undelete",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesVersioning",
+ "columnName": "files_versioning",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "externalLinks",
+ "columnName": "external_links",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "serverName",
+ "columnName": "server_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverColor",
+ "columnName": "server_color",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverTextColor",
+ "columnName": "server_text_color",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverElementColor",
+ "columnName": "server_element_color",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverSlogan",
+ "columnName": "server_slogan",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverLogo",
+ "columnName": "server_logo",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverBackgroundUrl",
+ "columnName": "background_url",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "endToEndEncryption",
+ "columnName": "end_to_end_encryption",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "endToEndEncryptionKeysExist",
+ "columnName": "end_to_end_encryption_keys_exist",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "endToEndEncryptionApiVersion",
+ "columnName": "end_to_end_encryption_api_version",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "activity",
+ "columnName": "activity",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "serverBackgroundDefault",
+ "columnName": "background_default",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "serverBackgroundPlain",
+ "columnName": "background_plain",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocument",
+ "columnName": "richdocument",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocumentMimetypeList",
+ "columnName": "richdocument_mimetype_list",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "richdocumentDirectEditing",
+ "columnName": "richdocument_direct_editing",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocumentTemplates",
+ "columnName": "richdocument_direct_templates",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocumentOptionalMimetypeList",
+ "columnName": "richdocument_optional_mimetype_list",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "sharingPublicAskForOptionalPassword",
+ "columnName": "sharing_public_ask_for_optional_password",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocumentProductName",
+ "columnName": "richdocument_product_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "directEditingEtag",
+ "columnName": "direct_editing_etag",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "userStatus",
+ "columnName": "user_status",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "userStatusSupportsEmoji",
+ "columnName": "user_status_supports_emoji",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "filesLockingVersion",
+ "columnName": "files_locking_version",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "groupfolders",
+ "columnName": "groupfolders",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "dropAccount",
+ "columnName": "drop_account",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "securityGuard",
+ "columnName": "security_guard",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "forbiddenFileNameCharacters",
+ "columnName": "forbidden_filename_characters",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "forbiddenFileNames",
+ "columnName": "forbidden_filenames",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "forbiddenFileNameExtensions",
+ "columnName": "forbidden_filename_extensions",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "forbiddenFilenameBaseNames",
+ "columnName": "forbidden_filename_basenames",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesDownloadLimit",
+ "columnName": "files_download_limit",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesDownloadLimitDefault",
+ "columnName": "files_download_limit_default",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "recommendation",
+ "columnName": "recommendation",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "notesFolderPath",
+ "columnName": "notes_folder_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "defaultPermissions",
+ "columnName": "default_permissions",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "external_links",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `icon_url` TEXT, `language` TEXT, `type` INTEGER, `name` TEXT, `url` TEXT, `redirect` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "iconUrl",
+ "columnName": "icon_url",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "language",
+ "columnName": "language",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "url",
+ "columnName": "url",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "redirect",
+ "columnName": "redirect",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "filelist",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `filename` TEXT, `encrypted_filename` TEXT, `path` TEXT, `path_decrypted` TEXT, `parent` INTEGER, `created` INTEGER, `modified` INTEGER, `content_type` TEXT, `content_length` INTEGER, `media_path` TEXT, `file_owner` TEXT, `last_sync_date` INTEGER, `last_sync_date_for_data` INTEGER, `modified_at_last_sync_for_data` INTEGER, `etag` TEXT, `etag_on_server` TEXT, `share_by_link` INTEGER, `permissions` TEXT, `remote_id` TEXT, `local_id` INTEGER NOT NULL DEFAULT -1, `update_thumbnail` INTEGER, `is_downloading` INTEGER, `favorite` INTEGER, `hidden` INTEGER, `is_encrypted` INTEGER, `etag_in_conflict` TEXT, `shared_via_users` INTEGER, `mount_type` INTEGER, `has_preview` INTEGER, `unread_comments_count` INTEGER, `owner_id` TEXT, `owner_display_name` TEXT, `note` TEXT, `sharees` TEXT, `rich_workspace` TEXT, `metadata_size` TEXT, `metadata_live_photo` TEXT, `locked` INTEGER, `lock_type` INTEGER, `lock_owner` TEXT, `lock_owner_display_name` TEXT, `lock_owner_editor` TEXT, `lock_timestamp` INTEGER, `lock_timeout` INTEGER, `lock_token` TEXT, `tags` TEXT, `metadata_gps` TEXT, `e2e_counter` INTEGER, `internal_two_way_sync_timestamp` INTEGER, `internal_two_way_sync_result` TEXT, `uploaded` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "filename",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "encryptedName",
+ "columnName": "encrypted_filename",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "pathDecrypted",
+ "columnName": "path_decrypted",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "parent",
+ "columnName": "parent",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "creation",
+ "columnName": "created",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "modified",
+ "columnName": "modified",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "contentType",
+ "columnName": "content_type",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "contentLength",
+ "columnName": "content_length",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "storagePath",
+ "columnName": "media_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "file_owner",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "lastSyncDate",
+ "columnName": "last_sync_date",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lastSyncDateForData",
+ "columnName": "last_sync_date_for_data",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "modifiedAtLastSyncForData",
+ "columnName": "modified_at_last_sync_for_data",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "etagOnServer",
+ "columnName": "etag_on_server",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "sharedViaLink",
+ "columnName": "share_by_link",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "remoteId",
+ "columnName": "remote_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "localId",
+ "columnName": "local_id",
+ "affinity": "INTEGER",
+ "notNull": true,
+ "defaultValue": "-1"
+ },
+ {
+ "fieldPath": "updateThumbnail",
+ "columnName": "update_thumbnail",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isDownloading",
+ "columnName": "is_downloading",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "favorite",
+ "columnName": "favorite",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isEncrypted",
+ "columnName": "is_encrypted",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "etagInConflict",
+ "columnName": "etag_in_conflict",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "sharedWithSharee",
+ "columnName": "shared_via_users",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "mountType",
+ "columnName": "mount_type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "hasPreview",
+ "columnName": "has_preview",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "unreadCommentsCount",
+ "columnName": "unread_comments_count",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "ownerId",
+ "columnName": "owner_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "ownerDisplayName",
+ "columnName": "owner_display_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "sharees",
+ "columnName": "sharees",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "richWorkspace",
+ "columnName": "rich_workspace",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "metadataSize",
+ "columnName": "metadata_size",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "metadataLivePhoto",
+ "columnName": "metadata_live_photo",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "locked",
+ "columnName": "locked",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lockType",
+ "columnName": "lock_type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lockOwner",
+ "columnName": "lock_owner",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "lockOwnerDisplayName",
+ "columnName": "lock_owner_display_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "lockOwnerEditor",
+ "columnName": "lock_owner_editor",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "lockTimestamp",
+ "columnName": "lock_timestamp",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lockTimeout",
+ "columnName": "lock_timeout",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lockToken",
+ "columnName": "lock_token",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "tags",
+ "columnName": "tags",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "metadataGPS",
+ "columnName": "metadata_gps",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "e2eCounter",
+ "columnName": "e2e_counter",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "internalTwoWaySync",
+ "columnName": "internal_two_way_sync_timestamp",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "internalTwoWaySyncResult",
+ "columnName": "internal_two_way_sync_result",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "uploaded",
+ "columnName": "uploaded",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "filesystem",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `is_folder` INTEGER, `found_at` INTEGER, `upload_triggered` INTEGER, `syncedfolder_id` TEXT, `crc32` TEXT, `modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "fileIsFolder",
+ "columnName": "is_folder",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "fileFoundRecently",
+ "columnName": "found_at",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "fileSentForUpload",
+ "columnName": "upload_triggered",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "syncedFolderId",
+ "columnName": "syncedfolder_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "crc32",
+ "columnName": "crc32",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "fileModified",
+ "columnName": "modified_at",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "ocshares",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `file_source` INTEGER, `item_source` INTEGER, `share_type` INTEGER, `shate_with` TEXT, `path` TEXT, `permissions` INTEGER, `shared_date` INTEGER, `expiration_date` INTEGER, `token` TEXT, `shared_with_display_name` TEXT, `is_directory` INTEGER, `user_id` TEXT, `id_remote_shared` INTEGER, `owner_share` TEXT, `is_password_protected` INTEGER, `note` TEXT, `hide_download` INTEGER, `share_link` TEXT, `share_label` TEXT, `download_limit_limit` INTEGER, `download_limit_count` INTEGER, `attributes` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "fileSource",
+ "columnName": "file_source",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "itemSource",
+ "columnName": "item_source",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "shareType",
+ "columnName": "share_type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "shareWith",
+ "columnName": "shate_with",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharedDate",
+ "columnName": "shared_date",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "expirationDate",
+ "columnName": "expiration_date",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "token",
+ "columnName": "token",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "shareWithDisplayName",
+ "columnName": "shared_with_display_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "isDirectory",
+ "columnName": "is_directory",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "userId",
+ "columnName": "user_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "idRemoteShared",
+ "columnName": "id_remote_shared",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "owner_share",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "isPasswordProtected",
+ "columnName": "is_password_protected",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "hideDownload",
+ "columnName": "hide_download",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "shareLink",
+ "columnName": "share_link",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "shareLabel",
+ "columnName": "share_label",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "downloadLimitLimit",
+ "columnName": "download_limit_limit",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "downloadLimitCount",
+ "columnName": "download_limit_count",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "attributes",
+ "columnName": "attributes",
+ "affinity": "TEXT"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "synced_folders",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `wifi_only` INTEGER, `charging_only` INTEGER, `existing` INTEGER, `enabled` INTEGER, `enabled_timestamp_ms` INTEGER, `subfolder_by_date` INTEGER, `account` TEXT, `upload_option` INTEGER, `name_collision_policy` INTEGER, `type` INTEGER, `hidden` INTEGER, `sub_folder_rule` INTEGER, `exclude_hidden` INTEGER, `last_scan_timestamp_ms` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "wifiOnly",
+ "columnName": "wifi_only",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "chargingOnly",
+ "columnName": "charging_only",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "existing",
+ "columnName": "existing",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "enabled",
+ "columnName": "enabled",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "enabledTimestampMs",
+ "columnName": "enabled_timestamp_ms",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "subfolderByDate",
+ "columnName": "subfolder_by_date",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "account",
+ "columnName": "account",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "uploadAction",
+ "columnName": "upload_option",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "subFolderRule",
+ "columnName": "sub_folder_rule",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "excludeHidden",
+ "columnName": "exclude_hidden",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lastScanTimestampMs",
+ "columnName": "last_scan_timestamp_ms",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "list_of_uploads",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `account_name` TEXT, `file_size` INTEGER, `status` INTEGER, `local_behaviour` INTEGER, `upload_time` INTEGER, `name_collision_policy` INTEGER, `is_create_remote_folder` INTEGER, `upload_end_timestamp` INTEGER, `last_result` INTEGER, `is_while_charging_only` INTEGER, `is_wifi_only` INTEGER, `created_by` INTEGER, `folder_unlock_token` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "fileSize",
+ "columnName": "file_size",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "status",
+ "columnName": "status",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "localBehaviour",
+ "columnName": "local_behaviour",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "uploadTime",
+ "columnName": "upload_time",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isCreateRemoteFolder",
+ "columnName": "is_create_remote_folder",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "uploadEndTimestamp",
+ "columnName": "upload_end_timestamp",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lastResult",
+ "columnName": "last_result",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isWhileChargingOnly",
+ "columnName": "is_while_charging_only",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isWifiOnly",
+ "columnName": "is_wifi_only",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "createdBy",
+ "columnName": "created_by",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "folderUnlockToken",
+ "columnName": "folder_unlock_token",
+ "affinity": "TEXT"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "virtual",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `type` TEXT, `ocfile_id` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "ocFileId",
+ "columnName": "ocfile_id",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "offline_operations",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `offline_operations_parent_oc_file_id` INTEGER, `offline_operations_path` TEXT, `offline_operations_type` TEXT, `offline_operations_file_name` TEXT, `offline_operations_created_at` INTEGER, `offline_operations_modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "parentOCFileId",
+ "columnName": "offline_operations_parent_oc_file_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "offline_operations_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "offline_operations_type",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "filename",
+ "columnName": "offline_operations_file_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "createdAt",
+ "columnName": "offline_operations_created_at",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "modifiedAt",
+ "columnName": "offline_operations_modified_at",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "recommended_files",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL, `directory` TEXT NOT NULL, `extension` TEXT NOT NULL, `mime_type` TEXT NOT NULL, `has_preview` INTEGER NOT NULL, `reason` TEXT NOT NULL, `timestamp` INTEGER NOT NULL)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "directory",
+ "columnName": "directory",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "extension",
+ "columnName": "extension",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "mimeType",
+ "columnName": "mime_type",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "hasPreview",
+ "columnName": "has_preview",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "reason",
+ "columnName": "reason",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "timestamp",
+ "columnName": "timestamp",
+ "affinity": "INTEGER",
+ "notNull": true
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ }
+ ],
+ "setupQueries": [
+ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
+ "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '16f8a78a87d896adf01d545ed83142e5')"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/app/schemas/com.nextcloud.client.database.NextcloudDatabase/92.json b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/92.json
new file mode 100644
index 000000000000..092bf97376ff
--- /dev/null
+++ b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/92.json
@@ -0,0 +1,1200 @@
+{
+ "formatVersion": 1,
+ "database": {
+ "version": 92,
+ "identityHash": "aeef27ff00555d37d8605e760a446863",
+ "entities": [
+ {
+ "tableName": "arbitrary_data",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `cloud_id` TEXT, `key` TEXT, `value` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "cloudId",
+ "columnName": "cloud_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "key",
+ "columnName": "key",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "value",
+ "columnName": "value",
+ "affinity": "TEXT"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "capabilities",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `assistant` INTEGER, `account` TEXT, `version_mayor` INTEGER, `version_minor` INTEGER, `version_micro` INTEGER, `version_string` TEXT, `version_edition` TEXT, `extended_support` INTEGER, `core_pollinterval` INTEGER, `sharing_api_enabled` INTEGER, `sharing_public_enabled` INTEGER, `sharing_public_password_enforced` INTEGER, `sharing_public_expire_date_enabled` INTEGER, `sharing_public_expire_date_days` INTEGER, `sharing_public_expire_date_enforced` INTEGER, `sharing_public_send_mail` INTEGER, `sharing_public_upload` INTEGER, `sharing_user_send_mail` INTEGER, `sharing_resharing` INTEGER, `sharing_federation_outgoing` INTEGER, `sharing_federation_incoming` INTEGER, `files_bigfilechunking` INTEGER, `files_undelete` INTEGER, `files_versioning` INTEGER, `external_links` INTEGER, `server_name` TEXT, `server_color` TEXT, `server_text_color` TEXT, `server_element_color` TEXT, `server_slogan` TEXT, `server_logo` TEXT, `background_url` TEXT, `end_to_end_encryption` INTEGER, `end_to_end_encryption_keys_exist` INTEGER, `end_to_end_encryption_api_version` TEXT, `activity` INTEGER, `background_default` INTEGER, `background_plain` INTEGER, `richdocument` INTEGER, `richdocument_mimetype_list` TEXT, `richdocument_direct_editing` INTEGER, `richdocument_direct_templates` INTEGER, `richdocument_optional_mimetype_list` TEXT, `sharing_public_ask_for_optional_password` INTEGER, `richdocument_product_name` TEXT, `direct_editing_etag` TEXT, `user_status` INTEGER, `user_status_supports_emoji` INTEGER, `etag` TEXT, `files_locking_version` TEXT, `groupfolders` INTEGER, `drop_account` INTEGER, `security_guard` INTEGER, `forbidden_filename_characters` INTEGER, `forbidden_filenames` INTEGER, `forbidden_filename_extensions` INTEGER, `forbidden_filename_basenames` INTEGER, `files_download_limit` INTEGER, `files_download_limit_default` INTEGER, `recommendation` INTEGER, `notes_folder_path` TEXT, `default_permissions` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "assistant",
+ "columnName": "assistant",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "versionMajor",
+ "columnName": "version_mayor",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "versionMinor",
+ "columnName": "version_minor",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "versionMicro",
+ "columnName": "version_micro",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "versionString",
+ "columnName": "version_string",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "versionEditor",
+ "columnName": "version_edition",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "extendedSupport",
+ "columnName": "extended_support",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "corePollinterval",
+ "columnName": "core_pollinterval",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingApiEnabled",
+ "columnName": "sharing_api_enabled",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicEnabled",
+ "columnName": "sharing_public_enabled",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicPasswordEnforced",
+ "columnName": "sharing_public_password_enforced",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnabled",
+ "columnName": "sharing_public_expire_date_enabled",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateDays",
+ "columnName": "sharing_public_expire_date_days",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnforced",
+ "columnName": "sharing_public_expire_date_enforced",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicSendMail",
+ "columnName": "sharing_public_send_mail",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicUpload",
+ "columnName": "sharing_public_upload",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingUserSendMail",
+ "columnName": "sharing_user_send_mail",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingResharing",
+ "columnName": "sharing_resharing",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingFederationOutgoing",
+ "columnName": "sharing_federation_outgoing",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingFederationIncoming",
+ "columnName": "sharing_federation_incoming",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesBigfilechunking",
+ "columnName": "files_bigfilechunking",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesUndelete",
+ "columnName": "files_undelete",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesVersioning",
+ "columnName": "files_versioning",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "externalLinks",
+ "columnName": "external_links",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "serverName",
+ "columnName": "server_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverColor",
+ "columnName": "server_color",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverTextColor",
+ "columnName": "server_text_color",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverElementColor",
+ "columnName": "server_element_color",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverSlogan",
+ "columnName": "server_slogan",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverLogo",
+ "columnName": "server_logo",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverBackgroundUrl",
+ "columnName": "background_url",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "endToEndEncryption",
+ "columnName": "end_to_end_encryption",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "endToEndEncryptionKeysExist",
+ "columnName": "end_to_end_encryption_keys_exist",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "endToEndEncryptionApiVersion",
+ "columnName": "end_to_end_encryption_api_version",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "activity",
+ "columnName": "activity",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "serverBackgroundDefault",
+ "columnName": "background_default",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "serverBackgroundPlain",
+ "columnName": "background_plain",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocument",
+ "columnName": "richdocument",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocumentMimetypeList",
+ "columnName": "richdocument_mimetype_list",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "richdocumentDirectEditing",
+ "columnName": "richdocument_direct_editing",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocumentTemplates",
+ "columnName": "richdocument_direct_templates",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocumentOptionalMimetypeList",
+ "columnName": "richdocument_optional_mimetype_list",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "sharingPublicAskForOptionalPassword",
+ "columnName": "sharing_public_ask_for_optional_password",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocumentProductName",
+ "columnName": "richdocument_product_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "directEditingEtag",
+ "columnName": "direct_editing_etag",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "userStatus",
+ "columnName": "user_status",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "userStatusSupportsEmoji",
+ "columnName": "user_status_supports_emoji",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "filesLockingVersion",
+ "columnName": "files_locking_version",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "groupfolders",
+ "columnName": "groupfolders",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "dropAccount",
+ "columnName": "drop_account",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "securityGuard",
+ "columnName": "security_guard",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "forbiddenFileNameCharacters",
+ "columnName": "forbidden_filename_characters",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "forbiddenFileNames",
+ "columnName": "forbidden_filenames",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "forbiddenFileNameExtensions",
+ "columnName": "forbidden_filename_extensions",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "forbiddenFilenameBaseNames",
+ "columnName": "forbidden_filename_basenames",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesDownloadLimit",
+ "columnName": "files_download_limit",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesDownloadLimitDefault",
+ "columnName": "files_download_limit_default",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "recommendation",
+ "columnName": "recommendation",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "notesFolderPath",
+ "columnName": "notes_folder_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "defaultPermissions",
+ "columnName": "default_permissions",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "external_links",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `icon_url` TEXT, `language` TEXT, `type` INTEGER, `name` TEXT, `url` TEXT, `redirect` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "iconUrl",
+ "columnName": "icon_url",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "language",
+ "columnName": "language",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "url",
+ "columnName": "url",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "redirect",
+ "columnName": "redirect",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "filelist",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `filename` TEXT, `encrypted_filename` TEXT, `path` TEXT, `path_decrypted` TEXT, `parent` INTEGER, `created` INTEGER, `modified` INTEGER, `content_type` TEXT, `content_length` INTEGER, `media_path` TEXT, `file_owner` TEXT, `last_sync_date` INTEGER, `last_sync_date_for_data` INTEGER, `modified_at_last_sync_for_data` INTEGER, `etag` TEXT, `etag_on_server` TEXT, `share_by_link` INTEGER, `permissions` TEXT, `remote_id` TEXT, `local_id` INTEGER NOT NULL DEFAULT -1, `update_thumbnail` INTEGER, `is_downloading` INTEGER, `favorite` INTEGER, `hidden` INTEGER, `is_encrypted` INTEGER, `etag_in_conflict` TEXT, `shared_via_users` INTEGER, `mount_type` INTEGER, `has_preview` INTEGER, `unread_comments_count` INTEGER, `owner_id` TEXT, `owner_display_name` TEXT, `note` TEXT, `sharees` TEXT, `rich_workspace` TEXT, `metadata_size` TEXT, `metadata_live_photo` TEXT, `locked` INTEGER, `lock_type` INTEGER, `lock_owner` TEXT, `lock_owner_display_name` TEXT, `lock_owner_editor` TEXT, `lock_timestamp` INTEGER, `lock_timeout` INTEGER, `lock_token` TEXT, `tags` TEXT, `metadata_gps` TEXT, `e2e_counter` INTEGER, `internal_two_way_sync_timestamp` INTEGER, `internal_two_way_sync_result` TEXT, `uploaded` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "filename",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "encryptedName",
+ "columnName": "encrypted_filename",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "pathDecrypted",
+ "columnName": "path_decrypted",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "parent",
+ "columnName": "parent",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "creation",
+ "columnName": "created",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "modified",
+ "columnName": "modified",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "contentType",
+ "columnName": "content_type",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "contentLength",
+ "columnName": "content_length",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "storagePath",
+ "columnName": "media_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "file_owner",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "lastSyncDate",
+ "columnName": "last_sync_date",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lastSyncDateForData",
+ "columnName": "last_sync_date_for_data",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "modifiedAtLastSyncForData",
+ "columnName": "modified_at_last_sync_for_data",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "etagOnServer",
+ "columnName": "etag_on_server",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "sharedViaLink",
+ "columnName": "share_by_link",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "remoteId",
+ "columnName": "remote_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "localId",
+ "columnName": "local_id",
+ "affinity": "INTEGER",
+ "notNull": true,
+ "defaultValue": "-1"
+ },
+ {
+ "fieldPath": "updateThumbnail",
+ "columnName": "update_thumbnail",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isDownloading",
+ "columnName": "is_downloading",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "favorite",
+ "columnName": "favorite",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isEncrypted",
+ "columnName": "is_encrypted",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "etagInConflict",
+ "columnName": "etag_in_conflict",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "sharedWithSharee",
+ "columnName": "shared_via_users",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "mountType",
+ "columnName": "mount_type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "hasPreview",
+ "columnName": "has_preview",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "unreadCommentsCount",
+ "columnName": "unread_comments_count",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "ownerId",
+ "columnName": "owner_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "ownerDisplayName",
+ "columnName": "owner_display_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "sharees",
+ "columnName": "sharees",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "richWorkspace",
+ "columnName": "rich_workspace",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "metadataSize",
+ "columnName": "metadata_size",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "metadataLivePhoto",
+ "columnName": "metadata_live_photo",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "locked",
+ "columnName": "locked",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lockType",
+ "columnName": "lock_type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lockOwner",
+ "columnName": "lock_owner",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "lockOwnerDisplayName",
+ "columnName": "lock_owner_display_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "lockOwnerEditor",
+ "columnName": "lock_owner_editor",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "lockTimestamp",
+ "columnName": "lock_timestamp",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lockTimeout",
+ "columnName": "lock_timeout",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lockToken",
+ "columnName": "lock_token",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "tags",
+ "columnName": "tags",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "metadataGPS",
+ "columnName": "metadata_gps",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "e2eCounter",
+ "columnName": "e2e_counter",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "internalTwoWaySync",
+ "columnName": "internal_two_way_sync_timestamp",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "internalTwoWaySyncResult",
+ "columnName": "internal_two_way_sync_result",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "uploaded",
+ "columnName": "uploaded",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "filesystem",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `is_folder` INTEGER, `found_at` INTEGER, `upload_triggered` INTEGER, `syncedfolder_id` TEXT, `crc32` TEXT, `modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "fileIsFolder",
+ "columnName": "is_folder",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "fileFoundRecently",
+ "columnName": "found_at",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "fileSentForUpload",
+ "columnName": "upload_triggered",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "syncedFolderId",
+ "columnName": "syncedfolder_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "crc32",
+ "columnName": "crc32",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "fileModified",
+ "columnName": "modified_at",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "ocshares",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `file_source` INTEGER, `item_source` INTEGER, `share_type` INTEGER, `shate_with` TEXT, `path` TEXT, `permissions` INTEGER, `shared_date` INTEGER, `expiration_date` INTEGER, `token` TEXT, `shared_with_display_name` TEXT, `is_directory` INTEGER, `user_id` TEXT, `id_remote_shared` INTEGER, `owner_share` TEXT, `is_password_protected` INTEGER, `note` TEXT, `hide_download` INTEGER, `share_link` TEXT, `share_label` TEXT, `download_limit_limit` INTEGER, `download_limit_count` INTEGER, `attributes` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "fileSource",
+ "columnName": "file_source",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "itemSource",
+ "columnName": "item_source",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "shareType",
+ "columnName": "share_type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "shareWith",
+ "columnName": "shate_with",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharedDate",
+ "columnName": "shared_date",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "expirationDate",
+ "columnName": "expiration_date",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "token",
+ "columnName": "token",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "shareWithDisplayName",
+ "columnName": "shared_with_display_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "isDirectory",
+ "columnName": "is_directory",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "userId",
+ "columnName": "user_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "idRemoteShared",
+ "columnName": "id_remote_shared",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "owner_share",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "isPasswordProtected",
+ "columnName": "is_password_protected",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "hideDownload",
+ "columnName": "hide_download",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "shareLink",
+ "columnName": "share_link",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "shareLabel",
+ "columnName": "share_label",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "downloadLimitLimit",
+ "columnName": "download_limit_limit",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "downloadLimitCount",
+ "columnName": "download_limit_count",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "attributes",
+ "columnName": "attributes",
+ "affinity": "TEXT"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "synced_folders",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `wifi_only` INTEGER, `charging_only` INTEGER, `existing` INTEGER, `enabled` INTEGER, `enabled_timestamp_ms` INTEGER, `subfolder_by_date` INTEGER, `account` TEXT, `upload_option` INTEGER, `name_collision_policy` INTEGER, `type` INTEGER, `hidden` INTEGER, `sub_folder_rule` INTEGER, `exclude_hidden` INTEGER, `last_scan_timestamp_ms` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "wifiOnly",
+ "columnName": "wifi_only",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "chargingOnly",
+ "columnName": "charging_only",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "existing",
+ "columnName": "existing",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "enabled",
+ "columnName": "enabled",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "enabledTimestampMs",
+ "columnName": "enabled_timestamp_ms",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "subfolderByDate",
+ "columnName": "subfolder_by_date",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "account",
+ "columnName": "account",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "uploadAction",
+ "columnName": "upload_option",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "subFolderRule",
+ "columnName": "sub_folder_rule",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "excludeHidden",
+ "columnName": "exclude_hidden",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lastScanTimestampMs",
+ "columnName": "last_scan_timestamp_ms",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "list_of_uploads",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `account_name` TEXT, `file_size` INTEGER, `status` INTEGER, `local_behaviour` INTEGER, `upload_time` INTEGER, `name_collision_policy` INTEGER, `is_create_remote_folder` INTEGER, `upload_end_timestamp` INTEGER, `last_result` INTEGER, `is_while_charging_only` INTEGER, `is_wifi_only` INTEGER, `created_by` INTEGER, `folder_unlock_token` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "fileSize",
+ "columnName": "file_size",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "status",
+ "columnName": "status",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "localBehaviour",
+ "columnName": "local_behaviour",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "uploadTime",
+ "columnName": "upload_time",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isCreateRemoteFolder",
+ "columnName": "is_create_remote_folder",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "uploadEndTimestamp",
+ "columnName": "upload_end_timestamp",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lastResult",
+ "columnName": "last_result",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isWhileChargingOnly",
+ "columnName": "is_while_charging_only",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isWifiOnly",
+ "columnName": "is_wifi_only",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "createdBy",
+ "columnName": "created_by",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "folderUnlockToken",
+ "columnName": "folder_unlock_token",
+ "affinity": "TEXT"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "virtual",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `type` TEXT, `ocfile_id` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "ocFileId",
+ "columnName": "ocfile_id",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "offline_operations",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `offline_operations_parent_oc_file_id` INTEGER, `offline_operations_path` TEXT, `offline_operations_type` TEXT, `offline_operations_file_name` TEXT, `offline_operations_created_at` INTEGER, `offline_operations_modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "parentOCFileId",
+ "columnName": "offline_operations_parent_oc_file_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "offline_operations_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "offline_operations_type",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "filename",
+ "columnName": "offline_operations_file_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "createdAt",
+ "columnName": "offline_operations_created_at",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "modifiedAt",
+ "columnName": "offline_operations_modified_at",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "recommended_files",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL, `directory` TEXT NOT NULL, `extension` TEXT NOT NULL, `mime_type` TEXT NOT NULL, `has_preview` INTEGER NOT NULL, `reason` TEXT NOT NULL, `timestamp` INTEGER NOT NULL, `account_name` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "directory",
+ "columnName": "directory",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "extension",
+ "columnName": "extension",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "mimeType",
+ "columnName": "mime_type",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "hasPreview",
+ "columnName": "has_preview",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "reason",
+ "columnName": "reason",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "timestamp",
+ "columnName": "timestamp",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account_name",
+ "affinity": "TEXT"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ }
+ ],
+ "setupQueries": [
+ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
+ "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'aeef27ff00555d37d8605e760a446863')"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/app/schemas/com.nextcloud.client.database.NextcloudDatabase/93.json b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/93.json
new file mode 100644
index 000000000000..c619e1b431f4
--- /dev/null
+++ b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/93.json
@@ -0,0 +1,1205 @@
+{
+ "formatVersion": 1,
+ "database": {
+ "version": 93,
+ "identityHash": "bbaa274a7bcf9daf381451c8e77d6930",
+ "entities": [
+ {
+ "tableName": "arbitrary_data",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `cloud_id` TEXT, `key` TEXT, `value` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "cloudId",
+ "columnName": "cloud_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "key",
+ "columnName": "key",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "value",
+ "columnName": "value",
+ "affinity": "TEXT"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "capabilities",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `assistant` INTEGER, `account` TEXT, `version_mayor` INTEGER, `version_minor` INTEGER, `version_micro` INTEGER, `version_string` TEXT, `version_edition` TEXT, `extended_support` INTEGER, `core_pollinterval` INTEGER, `sharing_api_enabled` INTEGER, `sharing_public_enabled` INTEGER, `sharing_public_password_enforced` INTEGER, `sharing_public_expire_date_enabled` INTEGER, `sharing_public_expire_date_days` INTEGER, `sharing_public_expire_date_enforced` INTEGER, `sharing_public_send_mail` INTEGER, `sharing_public_upload` INTEGER, `sharing_user_send_mail` INTEGER, `sharing_resharing` INTEGER, `sharing_federation_outgoing` INTEGER, `sharing_federation_incoming` INTEGER, `files_bigfilechunking` INTEGER, `files_undelete` INTEGER, `files_versioning` INTEGER, `external_links` INTEGER, `server_name` TEXT, `server_color` TEXT, `server_text_color` TEXT, `server_element_color` TEXT, `server_slogan` TEXT, `server_logo` TEXT, `background_url` TEXT, `end_to_end_encryption` INTEGER, `end_to_end_encryption_keys_exist` INTEGER, `end_to_end_encryption_api_version` TEXT, `activity` INTEGER, `background_default` INTEGER, `background_plain` INTEGER, `richdocument` INTEGER, `richdocument_mimetype_list` TEXT, `richdocument_direct_editing` INTEGER, `richdocument_direct_templates` INTEGER, `richdocument_optional_mimetype_list` TEXT, `sharing_public_ask_for_optional_password` INTEGER, `richdocument_product_name` TEXT, `direct_editing_etag` TEXT, `user_status` INTEGER, `user_status_supports_emoji` INTEGER, `etag` TEXT, `files_locking_version` TEXT, `groupfolders` INTEGER, `drop_account` INTEGER, `security_guard` INTEGER, `forbidden_filename_characters` INTEGER, `forbidden_filenames` INTEGER, `forbidden_filename_extensions` INTEGER, `forbidden_filename_basenames` INTEGER, `files_download_limit` INTEGER, `files_download_limit_default` INTEGER, `recommendation` INTEGER, `notes_folder_path` TEXT, `default_permissions` INTEGER, `user_status_supports_busy` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "assistant",
+ "columnName": "assistant",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "versionMajor",
+ "columnName": "version_mayor",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "versionMinor",
+ "columnName": "version_minor",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "versionMicro",
+ "columnName": "version_micro",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "versionString",
+ "columnName": "version_string",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "versionEditor",
+ "columnName": "version_edition",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "extendedSupport",
+ "columnName": "extended_support",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "corePollinterval",
+ "columnName": "core_pollinterval",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingApiEnabled",
+ "columnName": "sharing_api_enabled",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicEnabled",
+ "columnName": "sharing_public_enabled",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicPasswordEnforced",
+ "columnName": "sharing_public_password_enforced",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnabled",
+ "columnName": "sharing_public_expire_date_enabled",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateDays",
+ "columnName": "sharing_public_expire_date_days",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnforced",
+ "columnName": "sharing_public_expire_date_enforced",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicSendMail",
+ "columnName": "sharing_public_send_mail",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicUpload",
+ "columnName": "sharing_public_upload",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingUserSendMail",
+ "columnName": "sharing_user_send_mail",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingResharing",
+ "columnName": "sharing_resharing",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingFederationOutgoing",
+ "columnName": "sharing_federation_outgoing",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingFederationIncoming",
+ "columnName": "sharing_federation_incoming",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesBigfilechunking",
+ "columnName": "files_bigfilechunking",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesUndelete",
+ "columnName": "files_undelete",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesVersioning",
+ "columnName": "files_versioning",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "externalLinks",
+ "columnName": "external_links",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "serverName",
+ "columnName": "server_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverColor",
+ "columnName": "server_color",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverTextColor",
+ "columnName": "server_text_color",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverElementColor",
+ "columnName": "server_element_color",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverSlogan",
+ "columnName": "server_slogan",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverLogo",
+ "columnName": "server_logo",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverBackgroundUrl",
+ "columnName": "background_url",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "endToEndEncryption",
+ "columnName": "end_to_end_encryption",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "endToEndEncryptionKeysExist",
+ "columnName": "end_to_end_encryption_keys_exist",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "endToEndEncryptionApiVersion",
+ "columnName": "end_to_end_encryption_api_version",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "activity",
+ "columnName": "activity",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "serverBackgroundDefault",
+ "columnName": "background_default",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "serverBackgroundPlain",
+ "columnName": "background_plain",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocument",
+ "columnName": "richdocument",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocumentMimetypeList",
+ "columnName": "richdocument_mimetype_list",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "richdocumentDirectEditing",
+ "columnName": "richdocument_direct_editing",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocumentTemplates",
+ "columnName": "richdocument_direct_templates",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocumentOptionalMimetypeList",
+ "columnName": "richdocument_optional_mimetype_list",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "sharingPublicAskForOptionalPassword",
+ "columnName": "sharing_public_ask_for_optional_password",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocumentProductName",
+ "columnName": "richdocument_product_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "directEditingEtag",
+ "columnName": "direct_editing_etag",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "userStatus",
+ "columnName": "user_status",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "userStatusSupportsEmoji",
+ "columnName": "user_status_supports_emoji",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "filesLockingVersion",
+ "columnName": "files_locking_version",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "groupfolders",
+ "columnName": "groupfolders",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "dropAccount",
+ "columnName": "drop_account",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "securityGuard",
+ "columnName": "security_guard",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "forbiddenFileNameCharacters",
+ "columnName": "forbidden_filename_characters",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "forbiddenFileNames",
+ "columnName": "forbidden_filenames",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "forbiddenFileNameExtensions",
+ "columnName": "forbidden_filename_extensions",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "forbiddenFilenameBaseNames",
+ "columnName": "forbidden_filename_basenames",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesDownloadLimit",
+ "columnName": "files_download_limit",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesDownloadLimitDefault",
+ "columnName": "files_download_limit_default",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "recommendation",
+ "columnName": "recommendation",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "notesFolderPath",
+ "columnName": "notes_folder_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "defaultPermissions",
+ "columnName": "default_permissions",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "userStatusSupportsBusy",
+ "columnName": "user_status_supports_busy",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "external_links",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `icon_url` TEXT, `language` TEXT, `type` INTEGER, `name` TEXT, `url` TEXT, `redirect` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "iconUrl",
+ "columnName": "icon_url",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "language",
+ "columnName": "language",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "url",
+ "columnName": "url",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "redirect",
+ "columnName": "redirect",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "filelist",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `filename` TEXT, `encrypted_filename` TEXT, `path` TEXT, `path_decrypted` TEXT, `parent` INTEGER, `created` INTEGER, `modified` INTEGER, `content_type` TEXT, `content_length` INTEGER, `media_path` TEXT, `file_owner` TEXT, `last_sync_date` INTEGER, `last_sync_date_for_data` INTEGER, `modified_at_last_sync_for_data` INTEGER, `etag` TEXT, `etag_on_server` TEXT, `share_by_link` INTEGER, `permissions` TEXT, `remote_id` TEXT, `local_id` INTEGER NOT NULL DEFAULT -1, `update_thumbnail` INTEGER, `is_downloading` INTEGER, `favorite` INTEGER, `hidden` INTEGER, `is_encrypted` INTEGER, `etag_in_conflict` TEXT, `shared_via_users` INTEGER, `mount_type` INTEGER, `has_preview` INTEGER, `unread_comments_count` INTEGER, `owner_id` TEXT, `owner_display_name` TEXT, `note` TEXT, `sharees` TEXT, `rich_workspace` TEXT, `metadata_size` TEXT, `metadata_live_photo` TEXT, `locked` INTEGER, `lock_type` INTEGER, `lock_owner` TEXT, `lock_owner_display_name` TEXT, `lock_owner_editor` TEXT, `lock_timestamp` INTEGER, `lock_timeout` INTEGER, `lock_token` TEXT, `tags` TEXT, `metadata_gps` TEXT, `e2e_counter` INTEGER, `internal_two_way_sync_timestamp` INTEGER, `internal_two_way_sync_result` TEXT, `uploaded` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "filename",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "encryptedName",
+ "columnName": "encrypted_filename",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "pathDecrypted",
+ "columnName": "path_decrypted",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "parent",
+ "columnName": "parent",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "creation",
+ "columnName": "created",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "modified",
+ "columnName": "modified",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "contentType",
+ "columnName": "content_type",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "contentLength",
+ "columnName": "content_length",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "storagePath",
+ "columnName": "media_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "file_owner",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "lastSyncDate",
+ "columnName": "last_sync_date",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lastSyncDateForData",
+ "columnName": "last_sync_date_for_data",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "modifiedAtLastSyncForData",
+ "columnName": "modified_at_last_sync_for_data",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "etagOnServer",
+ "columnName": "etag_on_server",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "sharedViaLink",
+ "columnName": "share_by_link",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "remoteId",
+ "columnName": "remote_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "localId",
+ "columnName": "local_id",
+ "affinity": "INTEGER",
+ "notNull": true,
+ "defaultValue": "-1"
+ },
+ {
+ "fieldPath": "updateThumbnail",
+ "columnName": "update_thumbnail",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isDownloading",
+ "columnName": "is_downloading",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "favorite",
+ "columnName": "favorite",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isEncrypted",
+ "columnName": "is_encrypted",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "etagInConflict",
+ "columnName": "etag_in_conflict",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "sharedWithSharee",
+ "columnName": "shared_via_users",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "mountType",
+ "columnName": "mount_type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "hasPreview",
+ "columnName": "has_preview",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "unreadCommentsCount",
+ "columnName": "unread_comments_count",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "ownerId",
+ "columnName": "owner_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "ownerDisplayName",
+ "columnName": "owner_display_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "sharees",
+ "columnName": "sharees",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "richWorkspace",
+ "columnName": "rich_workspace",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "metadataSize",
+ "columnName": "metadata_size",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "metadataLivePhoto",
+ "columnName": "metadata_live_photo",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "locked",
+ "columnName": "locked",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lockType",
+ "columnName": "lock_type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lockOwner",
+ "columnName": "lock_owner",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "lockOwnerDisplayName",
+ "columnName": "lock_owner_display_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "lockOwnerEditor",
+ "columnName": "lock_owner_editor",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "lockTimestamp",
+ "columnName": "lock_timestamp",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lockTimeout",
+ "columnName": "lock_timeout",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lockToken",
+ "columnName": "lock_token",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "tags",
+ "columnName": "tags",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "metadataGPS",
+ "columnName": "metadata_gps",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "e2eCounter",
+ "columnName": "e2e_counter",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "internalTwoWaySync",
+ "columnName": "internal_two_way_sync_timestamp",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "internalTwoWaySyncResult",
+ "columnName": "internal_two_way_sync_result",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "uploaded",
+ "columnName": "uploaded",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "filesystem",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `is_folder` INTEGER, `found_at` INTEGER, `upload_triggered` INTEGER, `syncedfolder_id` TEXT, `crc32` TEXT, `modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "fileIsFolder",
+ "columnName": "is_folder",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "fileFoundRecently",
+ "columnName": "found_at",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "fileSentForUpload",
+ "columnName": "upload_triggered",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "syncedFolderId",
+ "columnName": "syncedfolder_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "crc32",
+ "columnName": "crc32",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "fileModified",
+ "columnName": "modified_at",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "ocshares",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `file_source` INTEGER, `item_source` INTEGER, `share_type` INTEGER, `shate_with` TEXT, `path` TEXT, `permissions` INTEGER, `shared_date` INTEGER, `expiration_date` INTEGER, `token` TEXT, `shared_with_display_name` TEXT, `is_directory` INTEGER, `user_id` TEXT, `id_remote_shared` INTEGER, `owner_share` TEXT, `is_password_protected` INTEGER, `note` TEXT, `hide_download` INTEGER, `share_link` TEXT, `share_label` TEXT, `download_limit_limit` INTEGER, `download_limit_count` INTEGER, `attributes` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "fileSource",
+ "columnName": "file_source",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "itemSource",
+ "columnName": "item_source",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "shareType",
+ "columnName": "share_type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "shareWith",
+ "columnName": "shate_with",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharedDate",
+ "columnName": "shared_date",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "expirationDate",
+ "columnName": "expiration_date",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "token",
+ "columnName": "token",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "shareWithDisplayName",
+ "columnName": "shared_with_display_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "isDirectory",
+ "columnName": "is_directory",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "userId",
+ "columnName": "user_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "idRemoteShared",
+ "columnName": "id_remote_shared",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "owner_share",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "isPasswordProtected",
+ "columnName": "is_password_protected",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "hideDownload",
+ "columnName": "hide_download",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "shareLink",
+ "columnName": "share_link",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "shareLabel",
+ "columnName": "share_label",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "downloadLimitLimit",
+ "columnName": "download_limit_limit",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "downloadLimitCount",
+ "columnName": "download_limit_count",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "attributes",
+ "columnName": "attributes",
+ "affinity": "TEXT"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "synced_folders",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `wifi_only` INTEGER, `charging_only` INTEGER, `existing` INTEGER, `enabled` INTEGER, `enabled_timestamp_ms` INTEGER, `subfolder_by_date` INTEGER, `account` TEXT, `upload_option` INTEGER, `name_collision_policy` INTEGER, `type` INTEGER, `hidden` INTEGER, `sub_folder_rule` INTEGER, `exclude_hidden` INTEGER, `last_scan_timestamp_ms` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "wifiOnly",
+ "columnName": "wifi_only",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "chargingOnly",
+ "columnName": "charging_only",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "existing",
+ "columnName": "existing",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "enabled",
+ "columnName": "enabled",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "enabledTimestampMs",
+ "columnName": "enabled_timestamp_ms",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "subfolderByDate",
+ "columnName": "subfolder_by_date",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "account",
+ "columnName": "account",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "uploadAction",
+ "columnName": "upload_option",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "subFolderRule",
+ "columnName": "sub_folder_rule",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "excludeHidden",
+ "columnName": "exclude_hidden",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lastScanTimestampMs",
+ "columnName": "last_scan_timestamp_ms",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "list_of_uploads",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `account_name` TEXT, `file_size` INTEGER, `status` INTEGER, `local_behaviour` INTEGER, `upload_time` INTEGER, `name_collision_policy` INTEGER, `is_create_remote_folder` INTEGER, `upload_end_timestamp` INTEGER, `last_result` INTEGER, `is_while_charging_only` INTEGER, `is_wifi_only` INTEGER, `created_by` INTEGER, `folder_unlock_token` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "fileSize",
+ "columnName": "file_size",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "status",
+ "columnName": "status",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "localBehaviour",
+ "columnName": "local_behaviour",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "uploadTime",
+ "columnName": "upload_time",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isCreateRemoteFolder",
+ "columnName": "is_create_remote_folder",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "uploadEndTimestamp",
+ "columnName": "upload_end_timestamp",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lastResult",
+ "columnName": "last_result",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isWhileChargingOnly",
+ "columnName": "is_while_charging_only",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isWifiOnly",
+ "columnName": "is_wifi_only",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "createdBy",
+ "columnName": "created_by",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "folderUnlockToken",
+ "columnName": "folder_unlock_token",
+ "affinity": "TEXT"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "virtual",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `type` TEXT, `ocfile_id` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "ocFileId",
+ "columnName": "ocfile_id",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "offline_operations",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `offline_operations_parent_oc_file_id` INTEGER, `offline_operations_path` TEXT, `offline_operations_type` TEXT, `offline_operations_file_name` TEXT, `offline_operations_created_at` INTEGER, `offline_operations_modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "parentOCFileId",
+ "columnName": "offline_operations_parent_oc_file_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "offline_operations_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "offline_operations_type",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "filename",
+ "columnName": "offline_operations_file_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "createdAt",
+ "columnName": "offline_operations_created_at",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "modifiedAt",
+ "columnName": "offline_operations_modified_at",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "recommended_files",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL, `directory` TEXT NOT NULL, `extension` TEXT NOT NULL, `mime_type` TEXT NOT NULL, `has_preview` INTEGER NOT NULL, `reason` TEXT NOT NULL, `timestamp` INTEGER NOT NULL, `account_name` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "directory",
+ "columnName": "directory",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "extension",
+ "columnName": "extension",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "mimeType",
+ "columnName": "mime_type",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "hasPreview",
+ "columnName": "has_preview",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "reason",
+ "columnName": "reason",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "timestamp",
+ "columnName": "timestamp",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account_name",
+ "affinity": "TEXT"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ }
+ ],
+ "setupQueries": [
+ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
+ "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'bbaa274a7bcf9daf381451c8e77d6930')"
+ ]
+ }
+}
diff --git a/app/schemas/com.nextcloud.client.database.NextcloudDatabase/94.json b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/94.json
new file mode 100644
index 000000000000..203afe31143a
--- /dev/null
+++ b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/94.json
@@ -0,0 +1,1210 @@
+{
+ "formatVersion": 1,
+ "database": {
+ "version": 94,
+ "identityHash": "84d16467d3052f332b38942987052f00",
+ "entities": [
+ {
+ "tableName": "arbitrary_data",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `cloud_id` TEXT, `key` TEXT, `value` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "cloudId",
+ "columnName": "cloud_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "key",
+ "columnName": "key",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "value",
+ "columnName": "value",
+ "affinity": "TEXT"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "capabilities",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `assistant` INTEGER, `account` TEXT, `version_mayor` INTEGER, `version_minor` INTEGER, `version_micro` INTEGER, `version_string` TEXT, `version_edition` TEXT, `extended_support` INTEGER, `core_pollinterval` INTEGER, `sharing_api_enabled` INTEGER, `sharing_public_enabled` INTEGER, `sharing_public_password_enforced` INTEGER, `sharing_public_expire_date_enabled` INTEGER, `sharing_public_expire_date_days` INTEGER, `sharing_public_expire_date_enforced` INTEGER, `sharing_public_send_mail` INTEGER, `sharing_public_upload` INTEGER, `sharing_user_send_mail` INTEGER, `sharing_resharing` INTEGER, `sharing_federation_outgoing` INTEGER, `sharing_federation_incoming` INTEGER, `files_bigfilechunking` INTEGER, `files_undelete` INTEGER, `files_versioning` INTEGER, `external_links` INTEGER, `server_name` TEXT, `server_color` TEXT, `server_text_color` TEXT, `server_element_color` TEXT, `server_slogan` TEXT, `server_logo` TEXT, `background_url` TEXT, `end_to_end_encryption` INTEGER, `end_to_end_encryption_keys_exist` INTEGER, `end_to_end_encryption_api_version` TEXT, `activity` INTEGER, `background_default` INTEGER, `background_plain` INTEGER, `richdocument` INTEGER, `richdocument_mimetype_list` TEXT, `richdocument_direct_editing` INTEGER, `richdocument_direct_templates` INTEGER, `richdocument_optional_mimetype_list` TEXT, `sharing_public_ask_for_optional_password` INTEGER, `richdocument_product_name` TEXT, `direct_editing_etag` TEXT, `user_status` INTEGER, `user_status_supports_emoji` INTEGER, `etag` TEXT, `files_locking_version` TEXT, `groupfolders` INTEGER, `drop_account` INTEGER, `security_guard` INTEGER, `forbidden_filename_characters` INTEGER, `forbidden_filenames` INTEGER, `forbidden_filename_extensions` INTEGER, `forbidden_filename_basenames` INTEGER, `files_download_limit` INTEGER, `files_download_limit_default` INTEGER, `recommendation` INTEGER, `notes_folder_path` TEXT, `default_permissions` INTEGER, `user_status_supports_busy` INTEGER, `windows_compatible_filenames` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "assistant",
+ "columnName": "assistant",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "versionMajor",
+ "columnName": "version_mayor",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "versionMinor",
+ "columnName": "version_minor",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "versionMicro",
+ "columnName": "version_micro",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "versionString",
+ "columnName": "version_string",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "versionEditor",
+ "columnName": "version_edition",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "extendedSupport",
+ "columnName": "extended_support",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "corePollinterval",
+ "columnName": "core_pollinterval",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingApiEnabled",
+ "columnName": "sharing_api_enabled",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicEnabled",
+ "columnName": "sharing_public_enabled",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicPasswordEnforced",
+ "columnName": "sharing_public_password_enforced",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnabled",
+ "columnName": "sharing_public_expire_date_enabled",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateDays",
+ "columnName": "sharing_public_expire_date_days",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnforced",
+ "columnName": "sharing_public_expire_date_enforced",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicSendMail",
+ "columnName": "sharing_public_send_mail",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicUpload",
+ "columnName": "sharing_public_upload",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingUserSendMail",
+ "columnName": "sharing_user_send_mail",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingResharing",
+ "columnName": "sharing_resharing",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingFederationOutgoing",
+ "columnName": "sharing_federation_outgoing",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingFederationIncoming",
+ "columnName": "sharing_federation_incoming",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesBigfilechunking",
+ "columnName": "files_bigfilechunking",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesUndelete",
+ "columnName": "files_undelete",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesVersioning",
+ "columnName": "files_versioning",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "externalLinks",
+ "columnName": "external_links",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "serverName",
+ "columnName": "server_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverColor",
+ "columnName": "server_color",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverTextColor",
+ "columnName": "server_text_color",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverElementColor",
+ "columnName": "server_element_color",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverSlogan",
+ "columnName": "server_slogan",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverLogo",
+ "columnName": "server_logo",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverBackgroundUrl",
+ "columnName": "background_url",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "endToEndEncryption",
+ "columnName": "end_to_end_encryption",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "endToEndEncryptionKeysExist",
+ "columnName": "end_to_end_encryption_keys_exist",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "endToEndEncryptionApiVersion",
+ "columnName": "end_to_end_encryption_api_version",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "activity",
+ "columnName": "activity",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "serverBackgroundDefault",
+ "columnName": "background_default",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "serverBackgroundPlain",
+ "columnName": "background_plain",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocument",
+ "columnName": "richdocument",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocumentMimetypeList",
+ "columnName": "richdocument_mimetype_list",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "richdocumentDirectEditing",
+ "columnName": "richdocument_direct_editing",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocumentTemplates",
+ "columnName": "richdocument_direct_templates",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocumentOptionalMimetypeList",
+ "columnName": "richdocument_optional_mimetype_list",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "sharingPublicAskForOptionalPassword",
+ "columnName": "sharing_public_ask_for_optional_password",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocumentProductName",
+ "columnName": "richdocument_product_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "directEditingEtag",
+ "columnName": "direct_editing_etag",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "userStatus",
+ "columnName": "user_status",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "userStatusSupportsEmoji",
+ "columnName": "user_status_supports_emoji",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "filesLockingVersion",
+ "columnName": "files_locking_version",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "groupfolders",
+ "columnName": "groupfolders",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "dropAccount",
+ "columnName": "drop_account",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "securityGuard",
+ "columnName": "security_guard",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "forbiddenFileNameCharacters",
+ "columnName": "forbidden_filename_characters",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "forbiddenFileNames",
+ "columnName": "forbidden_filenames",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "forbiddenFileNameExtensions",
+ "columnName": "forbidden_filename_extensions",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "forbiddenFilenameBaseNames",
+ "columnName": "forbidden_filename_basenames",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesDownloadLimit",
+ "columnName": "files_download_limit",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesDownloadLimitDefault",
+ "columnName": "files_download_limit_default",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "recommendation",
+ "columnName": "recommendation",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "notesFolderPath",
+ "columnName": "notes_folder_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "defaultPermissions",
+ "columnName": "default_permissions",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "userStatusSupportsBusy",
+ "columnName": "user_status_supports_busy",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isWCFEnabled",
+ "columnName": "windows_compatible_filenames",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "external_links",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `icon_url` TEXT, `language` TEXT, `type` INTEGER, `name` TEXT, `url` TEXT, `redirect` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "iconUrl",
+ "columnName": "icon_url",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "language",
+ "columnName": "language",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "url",
+ "columnName": "url",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "redirect",
+ "columnName": "redirect",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "filelist",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `filename` TEXT, `encrypted_filename` TEXT, `path` TEXT, `path_decrypted` TEXT, `parent` INTEGER, `created` INTEGER, `modified` INTEGER, `content_type` TEXT, `content_length` INTEGER, `media_path` TEXT, `file_owner` TEXT, `last_sync_date` INTEGER, `last_sync_date_for_data` INTEGER, `modified_at_last_sync_for_data` INTEGER, `etag` TEXT, `etag_on_server` TEXT, `share_by_link` INTEGER, `permissions` TEXT, `remote_id` TEXT, `local_id` INTEGER NOT NULL DEFAULT -1, `update_thumbnail` INTEGER, `is_downloading` INTEGER, `favorite` INTEGER, `hidden` INTEGER, `is_encrypted` INTEGER, `etag_in_conflict` TEXT, `shared_via_users` INTEGER, `mount_type` INTEGER, `has_preview` INTEGER, `unread_comments_count` INTEGER, `owner_id` TEXT, `owner_display_name` TEXT, `note` TEXT, `sharees` TEXT, `rich_workspace` TEXT, `metadata_size` TEXT, `metadata_live_photo` TEXT, `locked` INTEGER, `lock_type` INTEGER, `lock_owner` TEXT, `lock_owner_display_name` TEXT, `lock_owner_editor` TEXT, `lock_timestamp` INTEGER, `lock_timeout` INTEGER, `lock_token` TEXT, `tags` TEXT, `metadata_gps` TEXT, `e2e_counter` INTEGER, `internal_two_way_sync_timestamp` INTEGER, `internal_two_way_sync_result` TEXT, `uploaded` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "filename",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "encryptedName",
+ "columnName": "encrypted_filename",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "pathDecrypted",
+ "columnName": "path_decrypted",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "parent",
+ "columnName": "parent",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "creation",
+ "columnName": "created",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "modified",
+ "columnName": "modified",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "contentType",
+ "columnName": "content_type",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "contentLength",
+ "columnName": "content_length",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "storagePath",
+ "columnName": "media_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "file_owner",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "lastSyncDate",
+ "columnName": "last_sync_date",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lastSyncDateForData",
+ "columnName": "last_sync_date_for_data",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "modifiedAtLastSyncForData",
+ "columnName": "modified_at_last_sync_for_data",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "etagOnServer",
+ "columnName": "etag_on_server",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "sharedViaLink",
+ "columnName": "share_by_link",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "remoteId",
+ "columnName": "remote_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "localId",
+ "columnName": "local_id",
+ "affinity": "INTEGER",
+ "notNull": true,
+ "defaultValue": "-1"
+ },
+ {
+ "fieldPath": "updateThumbnail",
+ "columnName": "update_thumbnail",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isDownloading",
+ "columnName": "is_downloading",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "favorite",
+ "columnName": "favorite",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isEncrypted",
+ "columnName": "is_encrypted",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "etagInConflict",
+ "columnName": "etag_in_conflict",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "sharedWithSharee",
+ "columnName": "shared_via_users",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "mountType",
+ "columnName": "mount_type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "hasPreview",
+ "columnName": "has_preview",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "unreadCommentsCount",
+ "columnName": "unread_comments_count",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "ownerId",
+ "columnName": "owner_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "ownerDisplayName",
+ "columnName": "owner_display_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "sharees",
+ "columnName": "sharees",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "richWorkspace",
+ "columnName": "rich_workspace",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "metadataSize",
+ "columnName": "metadata_size",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "metadataLivePhoto",
+ "columnName": "metadata_live_photo",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "locked",
+ "columnName": "locked",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lockType",
+ "columnName": "lock_type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lockOwner",
+ "columnName": "lock_owner",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "lockOwnerDisplayName",
+ "columnName": "lock_owner_display_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "lockOwnerEditor",
+ "columnName": "lock_owner_editor",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "lockTimestamp",
+ "columnName": "lock_timestamp",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lockTimeout",
+ "columnName": "lock_timeout",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lockToken",
+ "columnName": "lock_token",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "tags",
+ "columnName": "tags",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "metadataGPS",
+ "columnName": "metadata_gps",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "e2eCounter",
+ "columnName": "e2e_counter",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "internalTwoWaySync",
+ "columnName": "internal_two_way_sync_timestamp",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "internalTwoWaySyncResult",
+ "columnName": "internal_two_way_sync_result",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "uploaded",
+ "columnName": "uploaded",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "filesystem",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `is_folder` INTEGER, `found_at` INTEGER, `upload_triggered` INTEGER, `syncedfolder_id` TEXT, `crc32` TEXT, `modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "fileIsFolder",
+ "columnName": "is_folder",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "fileFoundRecently",
+ "columnName": "found_at",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "fileSentForUpload",
+ "columnName": "upload_triggered",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "syncedFolderId",
+ "columnName": "syncedfolder_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "crc32",
+ "columnName": "crc32",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "fileModified",
+ "columnName": "modified_at",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "ocshares",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `file_source` INTEGER, `item_source` INTEGER, `share_type` INTEGER, `shate_with` TEXT, `path` TEXT, `permissions` INTEGER, `shared_date` INTEGER, `expiration_date` INTEGER, `token` TEXT, `shared_with_display_name` TEXT, `is_directory` INTEGER, `user_id` TEXT, `id_remote_shared` INTEGER, `owner_share` TEXT, `is_password_protected` INTEGER, `note` TEXT, `hide_download` INTEGER, `share_link` TEXT, `share_label` TEXT, `download_limit_limit` INTEGER, `download_limit_count` INTEGER, `attributes` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "fileSource",
+ "columnName": "file_source",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "itemSource",
+ "columnName": "item_source",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "shareType",
+ "columnName": "share_type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "shareWith",
+ "columnName": "shate_with",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharedDate",
+ "columnName": "shared_date",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "expirationDate",
+ "columnName": "expiration_date",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "token",
+ "columnName": "token",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "shareWithDisplayName",
+ "columnName": "shared_with_display_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "isDirectory",
+ "columnName": "is_directory",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "userId",
+ "columnName": "user_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "idRemoteShared",
+ "columnName": "id_remote_shared",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "owner_share",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "isPasswordProtected",
+ "columnName": "is_password_protected",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "hideDownload",
+ "columnName": "hide_download",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "shareLink",
+ "columnName": "share_link",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "shareLabel",
+ "columnName": "share_label",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "downloadLimitLimit",
+ "columnName": "download_limit_limit",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "downloadLimitCount",
+ "columnName": "download_limit_count",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "attributes",
+ "columnName": "attributes",
+ "affinity": "TEXT"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "synced_folders",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `wifi_only` INTEGER, `charging_only` INTEGER, `existing` INTEGER, `enabled` INTEGER, `enabled_timestamp_ms` INTEGER, `subfolder_by_date` INTEGER, `account` TEXT, `upload_option` INTEGER, `name_collision_policy` INTEGER, `type` INTEGER, `hidden` INTEGER, `sub_folder_rule` INTEGER, `exclude_hidden` INTEGER, `last_scan_timestamp_ms` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "wifiOnly",
+ "columnName": "wifi_only",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "chargingOnly",
+ "columnName": "charging_only",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "existing",
+ "columnName": "existing",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "enabled",
+ "columnName": "enabled",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "enabledTimestampMs",
+ "columnName": "enabled_timestamp_ms",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "subfolderByDate",
+ "columnName": "subfolder_by_date",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "account",
+ "columnName": "account",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "uploadAction",
+ "columnName": "upload_option",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "subFolderRule",
+ "columnName": "sub_folder_rule",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "excludeHidden",
+ "columnName": "exclude_hidden",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lastScanTimestampMs",
+ "columnName": "last_scan_timestamp_ms",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "list_of_uploads",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `account_name` TEXT, `file_size` INTEGER, `status` INTEGER, `local_behaviour` INTEGER, `upload_time` INTEGER, `name_collision_policy` INTEGER, `is_create_remote_folder` INTEGER, `upload_end_timestamp` INTEGER, `last_result` INTEGER, `is_while_charging_only` INTEGER, `is_wifi_only` INTEGER, `created_by` INTEGER, `folder_unlock_token` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "fileSize",
+ "columnName": "file_size",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "status",
+ "columnName": "status",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "localBehaviour",
+ "columnName": "local_behaviour",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "uploadTime",
+ "columnName": "upload_time",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isCreateRemoteFolder",
+ "columnName": "is_create_remote_folder",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "uploadEndTimestamp",
+ "columnName": "upload_end_timestamp",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lastResult",
+ "columnName": "last_result",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isWhileChargingOnly",
+ "columnName": "is_while_charging_only",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isWifiOnly",
+ "columnName": "is_wifi_only",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "createdBy",
+ "columnName": "created_by",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "folderUnlockToken",
+ "columnName": "folder_unlock_token",
+ "affinity": "TEXT"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "virtual",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `type` TEXT, `ocfile_id` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "ocFileId",
+ "columnName": "ocfile_id",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "offline_operations",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `offline_operations_parent_oc_file_id` INTEGER, `offline_operations_path` TEXT, `offline_operations_type` TEXT, `offline_operations_file_name` TEXT, `offline_operations_created_at` INTEGER, `offline_operations_modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "parentOCFileId",
+ "columnName": "offline_operations_parent_oc_file_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "offline_operations_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "offline_operations_type",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "filename",
+ "columnName": "offline_operations_file_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "createdAt",
+ "columnName": "offline_operations_created_at",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "modifiedAt",
+ "columnName": "offline_operations_modified_at",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "recommended_files",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL, `directory` TEXT NOT NULL, `extension` TEXT NOT NULL, `mime_type` TEXT NOT NULL, `has_preview` INTEGER NOT NULL, `reason` TEXT NOT NULL, `timestamp` INTEGER NOT NULL, `account_name` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "directory",
+ "columnName": "directory",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "extension",
+ "columnName": "extension",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "mimeType",
+ "columnName": "mime_type",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "hasPreview",
+ "columnName": "has_preview",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "reason",
+ "columnName": "reason",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "timestamp",
+ "columnName": "timestamp",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account_name",
+ "affinity": "TEXT"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ }
+ ],
+ "setupQueries": [
+ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
+ "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '84d16467d3052f332b38942987052f00')"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/app/schemas/com.nextcloud.client.database.NextcloudDatabase/95.json b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/95.json
new file mode 100644
index 000000000000..694e08c933bc
--- /dev/null
+++ b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/95.json
@@ -0,0 +1,1215 @@
+{
+ "formatVersion": 1,
+ "database": {
+ "version": 95,
+ "identityHash": "a2a95af369b3e75d48b6c454d1fe6c2d",
+ "entities": [
+ {
+ "tableName": "arbitrary_data",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `cloud_id` TEXT, `key` TEXT, `value` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "cloudId",
+ "columnName": "cloud_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "key",
+ "columnName": "key",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "value",
+ "columnName": "value",
+ "affinity": "TEXT"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "capabilities",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `assistant` INTEGER, `account` TEXT, `version_mayor` INTEGER, `version_minor` INTEGER, `version_micro` INTEGER, `version_string` TEXT, `version_edition` TEXT, `extended_support` INTEGER, `core_pollinterval` INTEGER, `sharing_api_enabled` INTEGER, `sharing_public_enabled` INTEGER, `sharing_public_password_enforced` INTEGER, `sharing_public_expire_date_enabled` INTEGER, `sharing_public_expire_date_days` INTEGER, `sharing_public_expire_date_enforced` INTEGER, `sharing_public_send_mail` INTEGER, `sharing_public_upload` INTEGER, `sharing_user_send_mail` INTEGER, `sharing_resharing` INTEGER, `sharing_federation_outgoing` INTEGER, `sharing_federation_incoming` INTEGER, `files_bigfilechunking` INTEGER, `files_undelete` INTEGER, `files_versioning` INTEGER, `external_links` INTEGER, `server_name` TEXT, `server_color` TEXT, `server_text_color` TEXT, `server_element_color` TEXT, `server_slogan` TEXT, `server_logo` TEXT, `background_url` TEXT, `end_to_end_encryption` INTEGER, `end_to_end_encryption_keys_exist` INTEGER, `end_to_end_encryption_api_version` TEXT, `activity` INTEGER, `background_default` INTEGER, `background_plain` INTEGER, `richdocument` INTEGER, `richdocument_mimetype_list` TEXT, `richdocument_direct_editing` INTEGER, `richdocument_direct_templates` INTEGER, `richdocument_optional_mimetype_list` TEXT, `sharing_public_ask_for_optional_password` INTEGER, `richdocument_product_name` TEXT, `direct_editing_etag` TEXT, `user_status` INTEGER, `user_status_supports_emoji` INTEGER, `etag` TEXT, `files_locking_version` TEXT, `groupfolders` INTEGER, `drop_account` INTEGER, `security_guard` INTEGER, `forbidden_filename_characters` INTEGER, `forbidden_filenames` INTEGER, `forbidden_filename_extensions` INTEGER, `forbidden_filename_basenames` INTEGER, `files_download_limit` INTEGER, `files_download_limit_default` INTEGER, `recommendation` INTEGER, `notes_folder_path` TEXT, `default_permissions` INTEGER, `user_status_supports_busy` INTEGER, `windows_compatible_filenames` INTEGER, `has_valid_subscription` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "assistant",
+ "columnName": "assistant",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "versionMajor",
+ "columnName": "version_mayor",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "versionMinor",
+ "columnName": "version_minor",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "versionMicro",
+ "columnName": "version_micro",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "versionString",
+ "columnName": "version_string",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "versionEditor",
+ "columnName": "version_edition",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "extendedSupport",
+ "columnName": "extended_support",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "corePollinterval",
+ "columnName": "core_pollinterval",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingApiEnabled",
+ "columnName": "sharing_api_enabled",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicEnabled",
+ "columnName": "sharing_public_enabled",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicPasswordEnforced",
+ "columnName": "sharing_public_password_enforced",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnabled",
+ "columnName": "sharing_public_expire_date_enabled",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateDays",
+ "columnName": "sharing_public_expire_date_days",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnforced",
+ "columnName": "sharing_public_expire_date_enforced",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicSendMail",
+ "columnName": "sharing_public_send_mail",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicUpload",
+ "columnName": "sharing_public_upload",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingUserSendMail",
+ "columnName": "sharing_user_send_mail",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingResharing",
+ "columnName": "sharing_resharing",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingFederationOutgoing",
+ "columnName": "sharing_federation_outgoing",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingFederationIncoming",
+ "columnName": "sharing_federation_incoming",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesBigfilechunking",
+ "columnName": "files_bigfilechunking",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesUndelete",
+ "columnName": "files_undelete",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesVersioning",
+ "columnName": "files_versioning",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "externalLinks",
+ "columnName": "external_links",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "serverName",
+ "columnName": "server_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverColor",
+ "columnName": "server_color",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverTextColor",
+ "columnName": "server_text_color",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverElementColor",
+ "columnName": "server_element_color",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverSlogan",
+ "columnName": "server_slogan",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverLogo",
+ "columnName": "server_logo",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverBackgroundUrl",
+ "columnName": "background_url",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "endToEndEncryption",
+ "columnName": "end_to_end_encryption",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "endToEndEncryptionKeysExist",
+ "columnName": "end_to_end_encryption_keys_exist",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "endToEndEncryptionApiVersion",
+ "columnName": "end_to_end_encryption_api_version",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "activity",
+ "columnName": "activity",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "serverBackgroundDefault",
+ "columnName": "background_default",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "serverBackgroundPlain",
+ "columnName": "background_plain",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocument",
+ "columnName": "richdocument",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocumentMimetypeList",
+ "columnName": "richdocument_mimetype_list",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "richdocumentDirectEditing",
+ "columnName": "richdocument_direct_editing",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocumentTemplates",
+ "columnName": "richdocument_direct_templates",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocumentOptionalMimetypeList",
+ "columnName": "richdocument_optional_mimetype_list",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "sharingPublicAskForOptionalPassword",
+ "columnName": "sharing_public_ask_for_optional_password",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocumentProductName",
+ "columnName": "richdocument_product_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "directEditingEtag",
+ "columnName": "direct_editing_etag",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "userStatus",
+ "columnName": "user_status",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "userStatusSupportsEmoji",
+ "columnName": "user_status_supports_emoji",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "filesLockingVersion",
+ "columnName": "files_locking_version",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "groupfolders",
+ "columnName": "groupfolders",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "dropAccount",
+ "columnName": "drop_account",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "securityGuard",
+ "columnName": "security_guard",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "forbiddenFileNameCharacters",
+ "columnName": "forbidden_filename_characters",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "forbiddenFileNames",
+ "columnName": "forbidden_filenames",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "forbiddenFileNameExtensions",
+ "columnName": "forbidden_filename_extensions",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "forbiddenFilenameBaseNames",
+ "columnName": "forbidden_filename_basenames",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesDownloadLimit",
+ "columnName": "files_download_limit",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesDownloadLimitDefault",
+ "columnName": "files_download_limit_default",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "recommendation",
+ "columnName": "recommendation",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "notesFolderPath",
+ "columnName": "notes_folder_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "defaultPermissions",
+ "columnName": "default_permissions",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "userStatusSupportsBusy",
+ "columnName": "user_status_supports_busy",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isWCFEnabled",
+ "columnName": "windows_compatible_filenames",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "hasValidSubscription",
+ "columnName": "has_valid_subscription",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "external_links",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `icon_url` TEXT, `language` TEXT, `type` INTEGER, `name` TEXT, `url` TEXT, `redirect` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "iconUrl",
+ "columnName": "icon_url",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "language",
+ "columnName": "language",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "url",
+ "columnName": "url",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "redirect",
+ "columnName": "redirect",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "filelist",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `filename` TEXT, `encrypted_filename` TEXT, `path` TEXT, `path_decrypted` TEXT, `parent` INTEGER, `created` INTEGER, `modified` INTEGER, `content_type` TEXT, `content_length` INTEGER, `media_path` TEXT, `file_owner` TEXT, `last_sync_date` INTEGER, `last_sync_date_for_data` INTEGER, `modified_at_last_sync_for_data` INTEGER, `etag` TEXT, `etag_on_server` TEXT, `share_by_link` INTEGER, `permissions` TEXT, `remote_id` TEXT, `local_id` INTEGER NOT NULL DEFAULT -1, `update_thumbnail` INTEGER, `is_downloading` INTEGER, `favorite` INTEGER, `hidden` INTEGER, `is_encrypted` INTEGER, `etag_in_conflict` TEXT, `shared_via_users` INTEGER, `mount_type` INTEGER, `has_preview` INTEGER, `unread_comments_count` INTEGER, `owner_id` TEXT, `owner_display_name` TEXT, `note` TEXT, `sharees` TEXT, `rich_workspace` TEXT, `metadata_size` TEXT, `metadata_live_photo` TEXT, `locked` INTEGER, `lock_type` INTEGER, `lock_owner` TEXT, `lock_owner_display_name` TEXT, `lock_owner_editor` TEXT, `lock_timestamp` INTEGER, `lock_timeout` INTEGER, `lock_token` TEXT, `tags` TEXT, `metadata_gps` TEXT, `e2e_counter` INTEGER, `internal_two_way_sync_timestamp` INTEGER, `internal_two_way_sync_result` TEXT, `uploaded` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "filename",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "encryptedName",
+ "columnName": "encrypted_filename",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "pathDecrypted",
+ "columnName": "path_decrypted",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "parent",
+ "columnName": "parent",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "creation",
+ "columnName": "created",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "modified",
+ "columnName": "modified",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "contentType",
+ "columnName": "content_type",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "contentLength",
+ "columnName": "content_length",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "storagePath",
+ "columnName": "media_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "file_owner",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "lastSyncDate",
+ "columnName": "last_sync_date",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lastSyncDateForData",
+ "columnName": "last_sync_date_for_data",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "modifiedAtLastSyncForData",
+ "columnName": "modified_at_last_sync_for_data",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "etagOnServer",
+ "columnName": "etag_on_server",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "sharedViaLink",
+ "columnName": "share_by_link",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "remoteId",
+ "columnName": "remote_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "localId",
+ "columnName": "local_id",
+ "affinity": "INTEGER",
+ "notNull": true,
+ "defaultValue": "-1"
+ },
+ {
+ "fieldPath": "updateThumbnail",
+ "columnName": "update_thumbnail",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isDownloading",
+ "columnName": "is_downloading",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "favorite",
+ "columnName": "favorite",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isEncrypted",
+ "columnName": "is_encrypted",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "etagInConflict",
+ "columnName": "etag_in_conflict",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "sharedWithSharee",
+ "columnName": "shared_via_users",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "mountType",
+ "columnName": "mount_type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "hasPreview",
+ "columnName": "has_preview",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "unreadCommentsCount",
+ "columnName": "unread_comments_count",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "ownerId",
+ "columnName": "owner_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "ownerDisplayName",
+ "columnName": "owner_display_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "sharees",
+ "columnName": "sharees",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "richWorkspace",
+ "columnName": "rich_workspace",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "metadataSize",
+ "columnName": "metadata_size",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "metadataLivePhoto",
+ "columnName": "metadata_live_photo",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "locked",
+ "columnName": "locked",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lockType",
+ "columnName": "lock_type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lockOwner",
+ "columnName": "lock_owner",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "lockOwnerDisplayName",
+ "columnName": "lock_owner_display_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "lockOwnerEditor",
+ "columnName": "lock_owner_editor",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "lockTimestamp",
+ "columnName": "lock_timestamp",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lockTimeout",
+ "columnName": "lock_timeout",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lockToken",
+ "columnName": "lock_token",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "tags",
+ "columnName": "tags",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "metadataGPS",
+ "columnName": "metadata_gps",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "e2eCounter",
+ "columnName": "e2e_counter",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "internalTwoWaySync",
+ "columnName": "internal_two_way_sync_timestamp",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "internalTwoWaySyncResult",
+ "columnName": "internal_two_way_sync_result",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "uploaded",
+ "columnName": "uploaded",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "filesystem",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `is_folder` INTEGER, `found_at` INTEGER, `upload_triggered` INTEGER, `syncedfolder_id` TEXT, `crc32` TEXT, `modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "fileIsFolder",
+ "columnName": "is_folder",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "fileFoundRecently",
+ "columnName": "found_at",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "fileSentForUpload",
+ "columnName": "upload_triggered",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "syncedFolderId",
+ "columnName": "syncedfolder_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "crc32",
+ "columnName": "crc32",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "fileModified",
+ "columnName": "modified_at",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "ocshares",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `file_source` INTEGER, `item_source` INTEGER, `share_type` INTEGER, `shate_with` TEXT, `path` TEXT, `permissions` INTEGER, `shared_date` INTEGER, `expiration_date` INTEGER, `token` TEXT, `shared_with_display_name` TEXT, `is_directory` INTEGER, `user_id` TEXT, `id_remote_shared` INTEGER, `owner_share` TEXT, `is_password_protected` INTEGER, `note` TEXT, `hide_download` INTEGER, `share_link` TEXT, `share_label` TEXT, `download_limit_limit` INTEGER, `download_limit_count` INTEGER, `attributes` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "fileSource",
+ "columnName": "file_source",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "itemSource",
+ "columnName": "item_source",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "shareType",
+ "columnName": "share_type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "shareWith",
+ "columnName": "shate_with",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharedDate",
+ "columnName": "shared_date",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "expirationDate",
+ "columnName": "expiration_date",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "token",
+ "columnName": "token",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "shareWithDisplayName",
+ "columnName": "shared_with_display_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "isDirectory",
+ "columnName": "is_directory",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "userId",
+ "columnName": "user_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "idRemoteShared",
+ "columnName": "id_remote_shared",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "owner_share",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "isPasswordProtected",
+ "columnName": "is_password_protected",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "hideDownload",
+ "columnName": "hide_download",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "shareLink",
+ "columnName": "share_link",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "shareLabel",
+ "columnName": "share_label",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "downloadLimitLimit",
+ "columnName": "download_limit_limit",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "downloadLimitCount",
+ "columnName": "download_limit_count",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "attributes",
+ "columnName": "attributes",
+ "affinity": "TEXT"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "synced_folders",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `wifi_only` INTEGER, `charging_only` INTEGER, `existing` INTEGER, `enabled` INTEGER, `enabled_timestamp_ms` INTEGER, `subfolder_by_date` INTEGER, `account` TEXT, `upload_option` INTEGER, `name_collision_policy` INTEGER, `type` INTEGER, `hidden` INTEGER, `sub_folder_rule` INTEGER, `exclude_hidden` INTEGER, `last_scan_timestamp_ms` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "wifiOnly",
+ "columnName": "wifi_only",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "chargingOnly",
+ "columnName": "charging_only",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "existing",
+ "columnName": "existing",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "enabled",
+ "columnName": "enabled",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "enabledTimestampMs",
+ "columnName": "enabled_timestamp_ms",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "subfolderByDate",
+ "columnName": "subfolder_by_date",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "account",
+ "columnName": "account",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "uploadAction",
+ "columnName": "upload_option",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "subFolderRule",
+ "columnName": "sub_folder_rule",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "excludeHidden",
+ "columnName": "exclude_hidden",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lastScanTimestampMs",
+ "columnName": "last_scan_timestamp_ms",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "list_of_uploads",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `account_name` TEXT, `file_size` INTEGER, `status` INTEGER, `local_behaviour` INTEGER, `upload_time` INTEGER, `name_collision_policy` INTEGER, `is_create_remote_folder` INTEGER, `upload_end_timestamp` INTEGER, `last_result` INTEGER, `is_while_charging_only` INTEGER, `is_wifi_only` INTEGER, `created_by` INTEGER, `folder_unlock_token` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "fileSize",
+ "columnName": "file_size",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "status",
+ "columnName": "status",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "localBehaviour",
+ "columnName": "local_behaviour",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "uploadTime",
+ "columnName": "upload_time",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isCreateRemoteFolder",
+ "columnName": "is_create_remote_folder",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "uploadEndTimestamp",
+ "columnName": "upload_end_timestamp",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lastResult",
+ "columnName": "last_result",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isWhileChargingOnly",
+ "columnName": "is_while_charging_only",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isWifiOnly",
+ "columnName": "is_wifi_only",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "createdBy",
+ "columnName": "created_by",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "folderUnlockToken",
+ "columnName": "folder_unlock_token",
+ "affinity": "TEXT"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "virtual",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `type` TEXT, `ocfile_id` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "ocFileId",
+ "columnName": "ocfile_id",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "offline_operations",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `offline_operations_parent_oc_file_id` INTEGER, `offline_operations_path` TEXT, `offline_operations_type` TEXT, `offline_operations_file_name` TEXT, `offline_operations_created_at` INTEGER, `offline_operations_modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "parentOCFileId",
+ "columnName": "offline_operations_parent_oc_file_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "offline_operations_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "offline_operations_type",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "filename",
+ "columnName": "offline_operations_file_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "createdAt",
+ "columnName": "offline_operations_created_at",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "modifiedAt",
+ "columnName": "offline_operations_modified_at",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "recommended_files",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL, `directory` TEXT NOT NULL, `extension` TEXT NOT NULL, `mime_type` TEXT NOT NULL, `has_preview` INTEGER NOT NULL, `reason` TEXT NOT NULL, `timestamp` INTEGER NOT NULL, `account_name` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "directory",
+ "columnName": "directory",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "extension",
+ "columnName": "extension",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "mimeType",
+ "columnName": "mime_type",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "hasPreview",
+ "columnName": "has_preview",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "reason",
+ "columnName": "reason",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "timestamp",
+ "columnName": "timestamp",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account_name",
+ "affinity": "TEXT"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ }
+ ],
+ "setupQueries": [
+ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
+ "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'a2a95af369b3e75d48b6c454d1fe6c2d')"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/app/schemas/com.nextcloud.client.database.NextcloudDatabase/96.json b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/96.json
new file mode 100644
index 000000000000..4dc4849f5551
--- /dev/null
+++ b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/96.json
@@ -0,0 +1,1293 @@
+{
+ "formatVersion": 1,
+ "database": {
+ "version": 96,
+ "identityHash": "0e9718354266517a340a89e16bb7d373",
+ "entities": [
+ {
+ "tableName": "arbitrary_data",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `cloud_id` TEXT, `key` TEXT, `value` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "cloudId",
+ "columnName": "cloud_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "key",
+ "columnName": "key",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "value",
+ "columnName": "value",
+ "affinity": "TEXT"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "capabilities",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `assistant` INTEGER, `account` TEXT, `version_mayor` INTEGER, `version_minor` INTEGER, `version_micro` INTEGER, `version_string` TEXT, `version_edition` TEXT, `extended_support` INTEGER, `core_pollinterval` INTEGER, `sharing_api_enabled` INTEGER, `sharing_public_enabled` INTEGER, `sharing_public_password_enforced` INTEGER, `sharing_public_expire_date_enabled` INTEGER, `sharing_public_expire_date_days` INTEGER, `sharing_public_expire_date_enforced` INTEGER, `sharing_public_send_mail` INTEGER, `sharing_public_upload` INTEGER, `sharing_user_send_mail` INTEGER, `sharing_resharing` INTEGER, `sharing_federation_outgoing` INTEGER, `sharing_federation_incoming` INTEGER, `files_bigfilechunking` INTEGER, `files_undelete` INTEGER, `files_versioning` INTEGER, `external_links` INTEGER, `server_name` TEXT, `server_color` TEXT, `server_text_color` TEXT, `server_element_color` TEXT, `server_slogan` TEXT, `server_logo` TEXT, `background_url` TEXT, `end_to_end_encryption` INTEGER, `end_to_end_encryption_keys_exist` INTEGER, `end_to_end_encryption_api_version` TEXT, `activity` INTEGER, `background_default` INTEGER, `background_plain` INTEGER, `richdocument` INTEGER, `richdocument_mimetype_list` TEXT, `richdocument_direct_editing` INTEGER, `richdocument_direct_templates` INTEGER, `richdocument_optional_mimetype_list` TEXT, `sharing_public_ask_for_optional_password` INTEGER, `richdocument_product_name` TEXT, `direct_editing_etag` TEXT, `user_status` INTEGER, `user_status_supports_emoji` INTEGER, `etag` TEXT, `files_locking_version` TEXT, `groupfolders` INTEGER, `drop_account` INTEGER, `security_guard` INTEGER, `forbidden_filename_characters` INTEGER, `forbidden_filenames` INTEGER, `forbidden_filename_extensions` INTEGER, `forbidden_filename_basenames` INTEGER, `files_download_limit` INTEGER, `files_download_limit_default` INTEGER, `recommendation` INTEGER, `notes_folder_path` TEXT, `default_permissions` INTEGER, `user_status_supports_busy` INTEGER, `windows_compatible_filenames` INTEGER, `has_valid_subscription` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "assistant",
+ "columnName": "assistant",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "versionMajor",
+ "columnName": "version_mayor",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "versionMinor",
+ "columnName": "version_minor",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "versionMicro",
+ "columnName": "version_micro",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "versionString",
+ "columnName": "version_string",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "versionEditor",
+ "columnName": "version_edition",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "extendedSupport",
+ "columnName": "extended_support",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "corePollinterval",
+ "columnName": "core_pollinterval",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingApiEnabled",
+ "columnName": "sharing_api_enabled",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicEnabled",
+ "columnName": "sharing_public_enabled",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicPasswordEnforced",
+ "columnName": "sharing_public_password_enforced",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnabled",
+ "columnName": "sharing_public_expire_date_enabled",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateDays",
+ "columnName": "sharing_public_expire_date_days",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnforced",
+ "columnName": "sharing_public_expire_date_enforced",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicSendMail",
+ "columnName": "sharing_public_send_mail",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicUpload",
+ "columnName": "sharing_public_upload",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingUserSendMail",
+ "columnName": "sharing_user_send_mail",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingResharing",
+ "columnName": "sharing_resharing",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingFederationOutgoing",
+ "columnName": "sharing_federation_outgoing",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingFederationIncoming",
+ "columnName": "sharing_federation_incoming",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesBigfilechunking",
+ "columnName": "files_bigfilechunking",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesUndelete",
+ "columnName": "files_undelete",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesVersioning",
+ "columnName": "files_versioning",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "externalLinks",
+ "columnName": "external_links",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "serverName",
+ "columnName": "server_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverColor",
+ "columnName": "server_color",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverTextColor",
+ "columnName": "server_text_color",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverElementColor",
+ "columnName": "server_element_color",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverSlogan",
+ "columnName": "server_slogan",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverLogo",
+ "columnName": "server_logo",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverBackgroundUrl",
+ "columnName": "background_url",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "endToEndEncryption",
+ "columnName": "end_to_end_encryption",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "endToEndEncryptionKeysExist",
+ "columnName": "end_to_end_encryption_keys_exist",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "endToEndEncryptionApiVersion",
+ "columnName": "end_to_end_encryption_api_version",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "activity",
+ "columnName": "activity",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "serverBackgroundDefault",
+ "columnName": "background_default",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "serverBackgroundPlain",
+ "columnName": "background_plain",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocument",
+ "columnName": "richdocument",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocumentMimetypeList",
+ "columnName": "richdocument_mimetype_list",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "richdocumentDirectEditing",
+ "columnName": "richdocument_direct_editing",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocumentTemplates",
+ "columnName": "richdocument_direct_templates",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocumentOptionalMimetypeList",
+ "columnName": "richdocument_optional_mimetype_list",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "sharingPublicAskForOptionalPassword",
+ "columnName": "sharing_public_ask_for_optional_password",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocumentProductName",
+ "columnName": "richdocument_product_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "directEditingEtag",
+ "columnName": "direct_editing_etag",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "userStatus",
+ "columnName": "user_status",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "userStatusSupportsEmoji",
+ "columnName": "user_status_supports_emoji",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "filesLockingVersion",
+ "columnName": "files_locking_version",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "groupfolders",
+ "columnName": "groupfolders",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "dropAccount",
+ "columnName": "drop_account",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "securityGuard",
+ "columnName": "security_guard",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "forbiddenFileNameCharacters",
+ "columnName": "forbidden_filename_characters",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "forbiddenFileNames",
+ "columnName": "forbidden_filenames",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "forbiddenFileNameExtensions",
+ "columnName": "forbidden_filename_extensions",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "forbiddenFilenameBaseNames",
+ "columnName": "forbidden_filename_basenames",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesDownloadLimit",
+ "columnName": "files_download_limit",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesDownloadLimitDefault",
+ "columnName": "files_download_limit_default",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "recommendation",
+ "columnName": "recommendation",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "notesFolderPath",
+ "columnName": "notes_folder_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "defaultPermissions",
+ "columnName": "default_permissions",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "userStatusSupportsBusy",
+ "columnName": "user_status_supports_busy",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isWCFEnabled",
+ "columnName": "windows_compatible_filenames",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "hasValidSubscription",
+ "columnName": "has_valid_subscription",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "external_links",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `icon_url` TEXT, `language` TEXT, `type` INTEGER, `name` TEXT, `url` TEXT, `redirect` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "iconUrl",
+ "columnName": "icon_url",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "language",
+ "columnName": "language",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "url",
+ "columnName": "url",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "redirect",
+ "columnName": "redirect",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "filelist",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `filename` TEXT, `encrypted_filename` TEXT, `path` TEXT, `path_decrypted` TEXT, `parent` INTEGER, `created` INTEGER, `modified` INTEGER, `content_type` TEXT, `content_length` INTEGER, `media_path` TEXT, `file_owner` TEXT, `last_sync_date` INTEGER, `last_sync_date_for_data` INTEGER, `modified_at_last_sync_for_data` INTEGER, `etag` TEXT, `etag_on_server` TEXT, `share_by_link` INTEGER, `permissions` TEXT, `remote_id` TEXT, `local_id` INTEGER NOT NULL DEFAULT -1, `update_thumbnail` INTEGER, `is_downloading` INTEGER, `favorite` INTEGER, `hidden` INTEGER, `is_encrypted` INTEGER, `etag_in_conflict` TEXT, `shared_via_users` INTEGER, `mount_type` INTEGER, `has_preview` INTEGER, `unread_comments_count` INTEGER, `owner_id` TEXT, `owner_display_name` TEXT, `note` TEXT, `sharees` TEXT, `rich_workspace` TEXT, `metadata_size` TEXT, `metadata_live_photo` TEXT, `locked` INTEGER, `lock_type` INTEGER, `lock_owner` TEXT, `lock_owner_display_name` TEXT, `lock_owner_editor` TEXT, `lock_timestamp` INTEGER, `lock_timeout` INTEGER, `lock_token` TEXT, `tags` TEXT, `metadata_gps` TEXT, `e2e_counter` INTEGER, `internal_two_way_sync_timestamp` INTEGER, `internal_two_way_sync_result` TEXT, `uploaded` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "filename",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "encryptedName",
+ "columnName": "encrypted_filename",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "pathDecrypted",
+ "columnName": "path_decrypted",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "parent",
+ "columnName": "parent",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "creation",
+ "columnName": "created",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "modified",
+ "columnName": "modified",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "contentType",
+ "columnName": "content_type",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "contentLength",
+ "columnName": "content_length",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "storagePath",
+ "columnName": "media_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "file_owner",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "lastSyncDate",
+ "columnName": "last_sync_date",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lastSyncDateForData",
+ "columnName": "last_sync_date_for_data",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "modifiedAtLastSyncForData",
+ "columnName": "modified_at_last_sync_for_data",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "etagOnServer",
+ "columnName": "etag_on_server",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "sharedViaLink",
+ "columnName": "share_by_link",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "remoteId",
+ "columnName": "remote_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "localId",
+ "columnName": "local_id",
+ "affinity": "INTEGER",
+ "notNull": true,
+ "defaultValue": "-1"
+ },
+ {
+ "fieldPath": "updateThumbnail",
+ "columnName": "update_thumbnail",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isDownloading",
+ "columnName": "is_downloading",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "favorite",
+ "columnName": "favorite",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isEncrypted",
+ "columnName": "is_encrypted",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "etagInConflict",
+ "columnName": "etag_in_conflict",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "sharedWithSharee",
+ "columnName": "shared_via_users",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "mountType",
+ "columnName": "mount_type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "hasPreview",
+ "columnName": "has_preview",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "unreadCommentsCount",
+ "columnName": "unread_comments_count",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "ownerId",
+ "columnName": "owner_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "ownerDisplayName",
+ "columnName": "owner_display_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "sharees",
+ "columnName": "sharees",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "richWorkspace",
+ "columnName": "rich_workspace",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "metadataSize",
+ "columnName": "metadata_size",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "metadataLivePhoto",
+ "columnName": "metadata_live_photo",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "locked",
+ "columnName": "locked",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lockType",
+ "columnName": "lock_type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lockOwner",
+ "columnName": "lock_owner",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "lockOwnerDisplayName",
+ "columnName": "lock_owner_display_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "lockOwnerEditor",
+ "columnName": "lock_owner_editor",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "lockTimestamp",
+ "columnName": "lock_timestamp",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lockTimeout",
+ "columnName": "lock_timeout",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lockToken",
+ "columnName": "lock_token",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "tags",
+ "columnName": "tags",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "metadataGPS",
+ "columnName": "metadata_gps",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "e2eCounter",
+ "columnName": "e2e_counter",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "internalTwoWaySync",
+ "columnName": "internal_two_way_sync_timestamp",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "internalTwoWaySyncResult",
+ "columnName": "internal_two_way_sync_result",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "uploaded",
+ "columnName": "uploaded",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "filesystem",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `is_folder` INTEGER, `found_at` INTEGER, `upload_triggered` INTEGER, `syncedfolder_id` TEXT, `crc32` TEXT, `modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "fileIsFolder",
+ "columnName": "is_folder",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "fileFoundRecently",
+ "columnName": "found_at",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "fileSentForUpload",
+ "columnName": "upload_triggered",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "syncedFolderId",
+ "columnName": "syncedfolder_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "crc32",
+ "columnName": "crc32",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "fileModified",
+ "columnName": "modified_at",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "ocshares",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `file_source` INTEGER, `item_source` INTEGER, `share_type` INTEGER, `shate_with` TEXT, `path` TEXT, `permissions` INTEGER, `shared_date` INTEGER, `expiration_date` INTEGER, `token` TEXT, `shared_with_display_name` TEXT, `is_directory` INTEGER, `user_id` TEXT, `id_remote_shared` INTEGER, `owner_share` TEXT, `is_password_protected` INTEGER, `note` TEXT, `hide_download` INTEGER, `share_link` TEXT, `share_label` TEXT, `download_limit_limit` INTEGER, `download_limit_count` INTEGER, `attributes` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "fileSource",
+ "columnName": "file_source",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "itemSource",
+ "columnName": "item_source",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "shareType",
+ "columnName": "share_type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "shareWith",
+ "columnName": "shate_with",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharedDate",
+ "columnName": "shared_date",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "expirationDate",
+ "columnName": "expiration_date",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "token",
+ "columnName": "token",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "shareWithDisplayName",
+ "columnName": "shared_with_display_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "isDirectory",
+ "columnName": "is_directory",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "userId",
+ "columnName": "user_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "idRemoteShared",
+ "columnName": "id_remote_shared",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "owner_share",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "isPasswordProtected",
+ "columnName": "is_password_protected",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "hideDownload",
+ "columnName": "hide_download",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "shareLink",
+ "columnName": "share_link",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "shareLabel",
+ "columnName": "share_label",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "downloadLimitLimit",
+ "columnName": "download_limit_limit",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "downloadLimitCount",
+ "columnName": "download_limit_count",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "attributes",
+ "columnName": "attributes",
+ "affinity": "TEXT"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "synced_folders",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `wifi_only` INTEGER, `charging_only` INTEGER, `existing` INTEGER, `enabled` INTEGER, `enabled_timestamp_ms` INTEGER, `subfolder_by_date` INTEGER, `account` TEXT, `upload_option` INTEGER, `name_collision_policy` INTEGER, `type` INTEGER, `hidden` INTEGER, `sub_folder_rule` INTEGER, `exclude_hidden` INTEGER, `last_scan_timestamp_ms` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "wifiOnly",
+ "columnName": "wifi_only",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "chargingOnly",
+ "columnName": "charging_only",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "existing",
+ "columnName": "existing",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "enabled",
+ "columnName": "enabled",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "enabledTimestampMs",
+ "columnName": "enabled_timestamp_ms",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "subfolderByDate",
+ "columnName": "subfolder_by_date",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "account",
+ "columnName": "account",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "uploadAction",
+ "columnName": "upload_option",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "subFolderRule",
+ "columnName": "sub_folder_rule",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "excludeHidden",
+ "columnName": "exclude_hidden",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lastScanTimestampMs",
+ "columnName": "last_scan_timestamp_ms",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "list_of_uploads",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `account_name` TEXT, `file_size` INTEGER, `status` INTEGER, `local_behaviour` INTEGER, `upload_time` INTEGER, `name_collision_policy` INTEGER, `is_create_remote_folder` INTEGER, `upload_end_timestamp` INTEGER, `last_result` INTEGER, `is_while_charging_only` INTEGER, `is_wifi_only` INTEGER, `created_by` INTEGER, `folder_unlock_token` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "fileSize",
+ "columnName": "file_size",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "status",
+ "columnName": "status",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "localBehaviour",
+ "columnName": "local_behaviour",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "uploadTime",
+ "columnName": "upload_time",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isCreateRemoteFolder",
+ "columnName": "is_create_remote_folder",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "uploadEndTimestamp",
+ "columnName": "upload_end_timestamp",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lastResult",
+ "columnName": "last_result",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isWhileChargingOnly",
+ "columnName": "is_while_charging_only",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isWifiOnly",
+ "columnName": "is_wifi_only",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "createdBy",
+ "columnName": "created_by",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "folderUnlockToken",
+ "columnName": "folder_unlock_token",
+ "affinity": "TEXT"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "virtual",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `type` TEXT, `ocfile_id` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "ocFileId",
+ "columnName": "ocfile_id",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "offline_operations",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `offline_operations_parent_oc_file_id` INTEGER, `offline_operations_path` TEXT, `offline_operations_type` TEXT, `offline_operations_file_name` TEXT, `offline_operations_created_at` INTEGER, `offline_operations_modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "parentOCFileId",
+ "columnName": "offline_operations_parent_oc_file_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "offline_operations_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "offline_operations_type",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "filename",
+ "columnName": "offline_operations_file_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "createdAt",
+ "columnName": "offline_operations_created_at",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "modifiedAt",
+ "columnName": "offline_operations_modified_at",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "recommended_files",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL, `directory` TEXT NOT NULL, `extension` TEXT NOT NULL, `mime_type` TEXT NOT NULL, `has_preview` INTEGER NOT NULL, `reason` TEXT NOT NULL, `timestamp` INTEGER NOT NULL, `account_name` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "directory",
+ "columnName": "directory",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "extension",
+ "columnName": "extension",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "mimeType",
+ "columnName": "mime_type",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "hasPreview",
+ "columnName": "has_preview",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "reason",
+ "columnName": "reason",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "timestamp",
+ "columnName": "timestamp",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account_name",
+ "affinity": "TEXT"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "assistant",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `accountName` TEXT, `type` TEXT, `status` TEXT, `userId` TEXT, `appId` TEXT, `input` TEXT, `output` TEXT, `completionExpectedAt` INTEGER, `progress` INTEGER, `lastUpdated` INTEGER, `scheduledAt` INTEGER, `endedAt` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "id",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "accountName",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "status",
+ "columnName": "status",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "userId",
+ "columnName": "userId",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "appId",
+ "columnName": "appId",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "input",
+ "columnName": "input",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "output",
+ "columnName": "output",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "completionExpectedAt",
+ "columnName": "completionExpectedAt",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "progress",
+ "columnName": "progress",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lastUpdated",
+ "columnName": "lastUpdated",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "scheduledAt",
+ "columnName": "scheduledAt",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "endedAt",
+ "columnName": "endedAt",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "id"
+ ]
+ }
+ }
+ ],
+ "setupQueries": [
+ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
+ "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '0e9718354266517a340a89e16bb7d373')"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/app/schemas/com.nextcloud.client.database.NextcloudDatabase/97.json b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/97.json
new file mode 100644
index 000000000000..27f506701672
--- /dev/null
+++ b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/97.json
@@ -0,0 +1,1298 @@
+{
+ "formatVersion": 1,
+ "database": {
+ "version": 97,
+ "identityHash": "1c5a77152bf79ee80f9e6eb2677d75a7",
+ "entities": [
+ {
+ "tableName": "arbitrary_data",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `cloud_id` TEXT, `key` TEXT, `value` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "cloudId",
+ "columnName": "cloud_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "key",
+ "columnName": "key",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "value",
+ "columnName": "value",
+ "affinity": "TEXT"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "capabilities",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `assistant` INTEGER, `account` TEXT, `version_mayor` INTEGER, `version_minor` INTEGER, `version_micro` INTEGER, `version_string` TEXT, `version_edition` TEXT, `extended_support` INTEGER, `core_pollinterval` INTEGER, `sharing_api_enabled` INTEGER, `sharing_public_enabled` INTEGER, `sharing_public_password_enforced` INTEGER, `sharing_public_expire_date_enabled` INTEGER, `sharing_public_expire_date_days` INTEGER, `sharing_public_expire_date_enforced` INTEGER, `sharing_public_send_mail` INTEGER, `sharing_public_upload` INTEGER, `sharing_user_send_mail` INTEGER, `sharing_resharing` INTEGER, `sharing_federation_outgoing` INTEGER, `sharing_federation_incoming` INTEGER, `files_bigfilechunking` INTEGER, `files_undelete` INTEGER, `files_versioning` INTEGER, `external_links` INTEGER, `server_name` TEXT, `server_color` TEXT, `server_text_color` TEXT, `server_element_color` TEXT, `server_slogan` TEXT, `server_logo` TEXT, `background_url` TEXT, `end_to_end_encryption` INTEGER, `end_to_end_encryption_keys_exist` INTEGER, `end_to_end_encryption_api_version` TEXT, `activity` INTEGER, `background_default` INTEGER, `background_plain` INTEGER, `richdocument` INTEGER, `richdocument_mimetype_list` TEXT, `richdocument_direct_editing` INTEGER, `richdocument_direct_templates` INTEGER, `richdocument_optional_mimetype_list` TEXT, `sharing_public_ask_for_optional_password` INTEGER, `richdocument_product_name` TEXT, `direct_editing_etag` TEXT, `user_status` INTEGER, `user_status_supports_emoji` INTEGER, `etag` TEXT, `files_locking_version` TEXT, `groupfolders` INTEGER, `drop_account` INTEGER, `security_guard` INTEGER, `forbidden_filename_characters` INTEGER, `forbidden_filenames` INTEGER, `forbidden_filename_extensions` INTEGER, `forbidden_filename_basenames` INTEGER, `files_download_limit` INTEGER, `files_download_limit_default` INTEGER, `recommendation` INTEGER, `notes_folder_path` TEXT, `default_permissions` INTEGER, `user_status_supports_busy` INTEGER, `windows_compatible_filenames` INTEGER, `has_valid_subscription` INTEGER, `client_integration_json` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "assistant",
+ "columnName": "assistant",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "versionMajor",
+ "columnName": "version_mayor",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "versionMinor",
+ "columnName": "version_minor",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "versionMicro",
+ "columnName": "version_micro",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "versionString",
+ "columnName": "version_string",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "versionEditor",
+ "columnName": "version_edition",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "extendedSupport",
+ "columnName": "extended_support",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "corePollinterval",
+ "columnName": "core_pollinterval",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingApiEnabled",
+ "columnName": "sharing_api_enabled",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicEnabled",
+ "columnName": "sharing_public_enabled",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicPasswordEnforced",
+ "columnName": "sharing_public_password_enforced",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnabled",
+ "columnName": "sharing_public_expire_date_enabled",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateDays",
+ "columnName": "sharing_public_expire_date_days",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnforced",
+ "columnName": "sharing_public_expire_date_enforced",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicSendMail",
+ "columnName": "sharing_public_send_mail",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicUpload",
+ "columnName": "sharing_public_upload",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingUserSendMail",
+ "columnName": "sharing_user_send_mail",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingResharing",
+ "columnName": "sharing_resharing",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingFederationOutgoing",
+ "columnName": "sharing_federation_outgoing",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingFederationIncoming",
+ "columnName": "sharing_federation_incoming",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesBigfilechunking",
+ "columnName": "files_bigfilechunking",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesUndelete",
+ "columnName": "files_undelete",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesVersioning",
+ "columnName": "files_versioning",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "externalLinks",
+ "columnName": "external_links",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "serverName",
+ "columnName": "server_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverColor",
+ "columnName": "server_color",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverTextColor",
+ "columnName": "server_text_color",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverElementColor",
+ "columnName": "server_element_color",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverSlogan",
+ "columnName": "server_slogan",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverLogo",
+ "columnName": "server_logo",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverBackgroundUrl",
+ "columnName": "background_url",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "endToEndEncryption",
+ "columnName": "end_to_end_encryption",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "endToEndEncryptionKeysExist",
+ "columnName": "end_to_end_encryption_keys_exist",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "endToEndEncryptionApiVersion",
+ "columnName": "end_to_end_encryption_api_version",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "activity",
+ "columnName": "activity",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "serverBackgroundDefault",
+ "columnName": "background_default",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "serverBackgroundPlain",
+ "columnName": "background_plain",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocument",
+ "columnName": "richdocument",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocumentMimetypeList",
+ "columnName": "richdocument_mimetype_list",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "richdocumentDirectEditing",
+ "columnName": "richdocument_direct_editing",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocumentTemplates",
+ "columnName": "richdocument_direct_templates",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocumentOptionalMimetypeList",
+ "columnName": "richdocument_optional_mimetype_list",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "sharingPublicAskForOptionalPassword",
+ "columnName": "sharing_public_ask_for_optional_password",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocumentProductName",
+ "columnName": "richdocument_product_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "directEditingEtag",
+ "columnName": "direct_editing_etag",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "userStatus",
+ "columnName": "user_status",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "userStatusSupportsEmoji",
+ "columnName": "user_status_supports_emoji",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "filesLockingVersion",
+ "columnName": "files_locking_version",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "groupfolders",
+ "columnName": "groupfolders",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "dropAccount",
+ "columnName": "drop_account",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "securityGuard",
+ "columnName": "security_guard",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "forbiddenFileNameCharacters",
+ "columnName": "forbidden_filename_characters",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "forbiddenFileNames",
+ "columnName": "forbidden_filenames",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "forbiddenFileNameExtensions",
+ "columnName": "forbidden_filename_extensions",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "forbiddenFilenameBaseNames",
+ "columnName": "forbidden_filename_basenames",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesDownloadLimit",
+ "columnName": "files_download_limit",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesDownloadLimitDefault",
+ "columnName": "files_download_limit_default",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "recommendation",
+ "columnName": "recommendation",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "notesFolderPath",
+ "columnName": "notes_folder_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "defaultPermissions",
+ "columnName": "default_permissions",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "userStatusSupportsBusy",
+ "columnName": "user_status_supports_busy",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isWCFEnabled",
+ "columnName": "windows_compatible_filenames",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "hasValidSubscription",
+ "columnName": "has_valid_subscription",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "clientIntegrationJson",
+ "columnName": "client_integration_json",
+ "affinity": "TEXT"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "external_links",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `icon_url` TEXT, `language` TEXT, `type` INTEGER, `name` TEXT, `url` TEXT, `redirect` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "iconUrl",
+ "columnName": "icon_url",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "language",
+ "columnName": "language",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "url",
+ "columnName": "url",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "redirect",
+ "columnName": "redirect",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "filelist",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `filename` TEXT, `encrypted_filename` TEXT, `path` TEXT, `path_decrypted` TEXT, `parent` INTEGER, `created` INTEGER, `modified` INTEGER, `content_type` TEXT, `content_length` INTEGER, `media_path` TEXT, `file_owner` TEXT, `last_sync_date` INTEGER, `last_sync_date_for_data` INTEGER, `modified_at_last_sync_for_data` INTEGER, `etag` TEXT, `etag_on_server` TEXT, `share_by_link` INTEGER, `permissions` TEXT, `remote_id` TEXT, `local_id` INTEGER NOT NULL DEFAULT -1, `update_thumbnail` INTEGER, `is_downloading` INTEGER, `favorite` INTEGER, `hidden` INTEGER, `is_encrypted` INTEGER, `etag_in_conflict` TEXT, `shared_via_users` INTEGER, `mount_type` INTEGER, `has_preview` INTEGER, `unread_comments_count` INTEGER, `owner_id` TEXT, `owner_display_name` TEXT, `note` TEXT, `sharees` TEXT, `rich_workspace` TEXT, `metadata_size` TEXT, `metadata_live_photo` TEXT, `locked` INTEGER, `lock_type` INTEGER, `lock_owner` TEXT, `lock_owner_display_name` TEXT, `lock_owner_editor` TEXT, `lock_timestamp` INTEGER, `lock_timeout` INTEGER, `lock_token` TEXT, `tags` TEXT, `metadata_gps` TEXT, `e2e_counter` INTEGER, `internal_two_way_sync_timestamp` INTEGER, `internal_two_way_sync_result` TEXT, `uploaded` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "filename",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "encryptedName",
+ "columnName": "encrypted_filename",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "pathDecrypted",
+ "columnName": "path_decrypted",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "parent",
+ "columnName": "parent",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "creation",
+ "columnName": "created",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "modified",
+ "columnName": "modified",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "contentType",
+ "columnName": "content_type",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "contentLength",
+ "columnName": "content_length",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "storagePath",
+ "columnName": "media_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "file_owner",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "lastSyncDate",
+ "columnName": "last_sync_date",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lastSyncDateForData",
+ "columnName": "last_sync_date_for_data",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "modifiedAtLastSyncForData",
+ "columnName": "modified_at_last_sync_for_data",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "etagOnServer",
+ "columnName": "etag_on_server",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "sharedViaLink",
+ "columnName": "share_by_link",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "remoteId",
+ "columnName": "remote_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "localId",
+ "columnName": "local_id",
+ "affinity": "INTEGER",
+ "notNull": true,
+ "defaultValue": "-1"
+ },
+ {
+ "fieldPath": "updateThumbnail",
+ "columnName": "update_thumbnail",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isDownloading",
+ "columnName": "is_downloading",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "favorite",
+ "columnName": "favorite",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isEncrypted",
+ "columnName": "is_encrypted",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "etagInConflict",
+ "columnName": "etag_in_conflict",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "sharedWithSharee",
+ "columnName": "shared_via_users",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "mountType",
+ "columnName": "mount_type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "hasPreview",
+ "columnName": "has_preview",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "unreadCommentsCount",
+ "columnName": "unread_comments_count",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "ownerId",
+ "columnName": "owner_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "ownerDisplayName",
+ "columnName": "owner_display_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "sharees",
+ "columnName": "sharees",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "richWorkspace",
+ "columnName": "rich_workspace",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "metadataSize",
+ "columnName": "metadata_size",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "metadataLivePhoto",
+ "columnName": "metadata_live_photo",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "locked",
+ "columnName": "locked",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lockType",
+ "columnName": "lock_type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lockOwner",
+ "columnName": "lock_owner",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "lockOwnerDisplayName",
+ "columnName": "lock_owner_display_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "lockOwnerEditor",
+ "columnName": "lock_owner_editor",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "lockTimestamp",
+ "columnName": "lock_timestamp",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lockTimeout",
+ "columnName": "lock_timeout",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lockToken",
+ "columnName": "lock_token",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "tags",
+ "columnName": "tags",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "metadataGPS",
+ "columnName": "metadata_gps",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "e2eCounter",
+ "columnName": "e2e_counter",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "internalTwoWaySync",
+ "columnName": "internal_two_way_sync_timestamp",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "internalTwoWaySyncResult",
+ "columnName": "internal_two_way_sync_result",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "uploaded",
+ "columnName": "uploaded",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "filesystem",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `is_folder` INTEGER, `found_at` INTEGER, `upload_triggered` INTEGER, `syncedfolder_id` TEXT, `crc32` TEXT, `modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "fileIsFolder",
+ "columnName": "is_folder",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "fileFoundRecently",
+ "columnName": "found_at",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "fileSentForUpload",
+ "columnName": "upload_triggered",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "syncedFolderId",
+ "columnName": "syncedfolder_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "crc32",
+ "columnName": "crc32",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "fileModified",
+ "columnName": "modified_at",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "ocshares",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `file_source` INTEGER, `item_source` INTEGER, `share_type` INTEGER, `shate_with` TEXT, `path` TEXT, `permissions` INTEGER, `shared_date` INTEGER, `expiration_date` INTEGER, `token` TEXT, `shared_with_display_name` TEXT, `is_directory` INTEGER, `user_id` TEXT, `id_remote_shared` INTEGER, `owner_share` TEXT, `is_password_protected` INTEGER, `note` TEXT, `hide_download` INTEGER, `share_link` TEXT, `share_label` TEXT, `download_limit_limit` INTEGER, `download_limit_count` INTEGER, `attributes` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "fileSource",
+ "columnName": "file_source",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "itemSource",
+ "columnName": "item_source",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "shareType",
+ "columnName": "share_type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "shareWith",
+ "columnName": "shate_with",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharedDate",
+ "columnName": "shared_date",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "expirationDate",
+ "columnName": "expiration_date",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "token",
+ "columnName": "token",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "shareWithDisplayName",
+ "columnName": "shared_with_display_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "isDirectory",
+ "columnName": "is_directory",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "userId",
+ "columnName": "user_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "idRemoteShared",
+ "columnName": "id_remote_shared",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "owner_share",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "isPasswordProtected",
+ "columnName": "is_password_protected",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "hideDownload",
+ "columnName": "hide_download",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "shareLink",
+ "columnName": "share_link",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "shareLabel",
+ "columnName": "share_label",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "downloadLimitLimit",
+ "columnName": "download_limit_limit",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "downloadLimitCount",
+ "columnName": "download_limit_count",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "attributes",
+ "columnName": "attributes",
+ "affinity": "TEXT"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "synced_folders",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `wifi_only` INTEGER, `charging_only` INTEGER, `existing` INTEGER, `enabled` INTEGER, `enabled_timestamp_ms` INTEGER, `subfolder_by_date` INTEGER, `account` TEXT, `upload_option` INTEGER, `name_collision_policy` INTEGER, `type` INTEGER, `hidden` INTEGER, `sub_folder_rule` INTEGER, `exclude_hidden` INTEGER, `last_scan_timestamp_ms` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "wifiOnly",
+ "columnName": "wifi_only",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "chargingOnly",
+ "columnName": "charging_only",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "existing",
+ "columnName": "existing",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "enabled",
+ "columnName": "enabled",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "enabledTimestampMs",
+ "columnName": "enabled_timestamp_ms",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "subfolderByDate",
+ "columnName": "subfolder_by_date",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "account",
+ "columnName": "account",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "uploadAction",
+ "columnName": "upload_option",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "subFolderRule",
+ "columnName": "sub_folder_rule",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "excludeHidden",
+ "columnName": "exclude_hidden",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lastScanTimestampMs",
+ "columnName": "last_scan_timestamp_ms",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "list_of_uploads",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `account_name` TEXT, `file_size` INTEGER, `status` INTEGER, `local_behaviour` INTEGER, `upload_time` INTEGER, `name_collision_policy` INTEGER, `is_create_remote_folder` INTEGER, `upload_end_timestamp` INTEGER, `last_result` INTEGER, `is_while_charging_only` INTEGER, `is_wifi_only` INTEGER, `created_by` INTEGER, `folder_unlock_token` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "fileSize",
+ "columnName": "file_size",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "status",
+ "columnName": "status",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "localBehaviour",
+ "columnName": "local_behaviour",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "uploadTime",
+ "columnName": "upload_time",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isCreateRemoteFolder",
+ "columnName": "is_create_remote_folder",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "uploadEndTimestamp",
+ "columnName": "upload_end_timestamp",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lastResult",
+ "columnName": "last_result",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isWhileChargingOnly",
+ "columnName": "is_while_charging_only",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isWifiOnly",
+ "columnName": "is_wifi_only",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "createdBy",
+ "columnName": "created_by",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "folderUnlockToken",
+ "columnName": "folder_unlock_token",
+ "affinity": "TEXT"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "virtual",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `type` TEXT, `ocfile_id` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "ocFileId",
+ "columnName": "ocfile_id",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "offline_operations",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `offline_operations_parent_oc_file_id` INTEGER, `offline_operations_path` TEXT, `offline_operations_type` TEXT, `offline_operations_file_name` TEXT, `offline_operations_created_at` INTEGER, `offline_operations_modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "parentOCFileId",
+ "columnName": "offline_operations_parent_oc_file_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "offline_operations_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "offline_operations_type",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "filename",
+ "columnName": "offline_operations_file_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "createdAt",
+ "columnName": "offline_operations_created_at",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "modifiedAt",
+ "columnName": "offline_operations_modified_at",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "recommended_files",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL, `directory` TEXT NOT NULL, `extension` TEXT NOT NULL, `mime_type` TEXT NOT NULL, `has_preview` INTEGER NOT NULL, `reason` TEXT NOT NULL, `timestamp` INTEGER NOT NULL, `account_name` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "directory",
+ "columnName": "directory",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "extension",
+ "columnName": "extension",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "mimeType",
+ "columnName": "mime_type",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "hasPreview",
+ "columnName": "has_preview",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "reason",
+ "columnName": "reason",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "timestamp",
+ "columnName": "timestamp",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account_name",
+ "affinity": "TEXT"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "assistant",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `accountName` TEXT, `type` TEXT, `status` TEXT, `userId` TEXT, `appId` TEXT, `input` TEXT, `output` TEXT, `completionExpectedAt` INTEGER, `progress` INTEGER, `lastUpdated` INTEGER, `scheduledAt` INTEGER, `endedAt` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "id",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "accountName",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "status",
+ "columnName": "status",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "userId",
+ "columnName": "userId",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "appId",
+ "columnName": "appId",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "input",
+ "columnName": "input",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "output",
+ "columnName": "output",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "completionExpectedAt",
+ "columnName": "completionExpectedAt",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "progress",
+ "columnName": "progress",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lastUpdated",
+ "columnName": "lastUpdated",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "scheduledAt",
+ "columnName": "scheduledAt",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "endedAt",
+ "columnName": "endedAt",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "id"
+ ]
+ }
+ }
+ ],
+ "setupQueries": [
+ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
+ "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '1c5a77152bf79ee80f9e6eb2677d75a7')"
+ ]
+ }
+}
diff --git a/app/schemas/com.nextcloud.client.database.NextcloudDatabase/98.json b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/98.json
new file mode 100644
index 000000000000..ff3d56813529
--- /dev/null
+++ b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/98.json
@@ -0,0 +1,1303 @@
+{
+ "formatVersion": 1,
+ "database": {
+ "version": 98,
+ "identityHash": "02ca435c31a732cd82a36717518c37b3",
+ "entities": [
+ {
+ "tableName": "arbitrary_data",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `cloud_id` TEXT, `key` TEXT, `value` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "cloudId",
+ "columnName": "cloud_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "key",
+ "columnName": "key",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "value",
+ "columnName": "value",
+ "affinity": "TEXT"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "capabilities",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `assistant` INTEGER, `account` TEXT, `version_mayor` INTEGER, `version_minor` INTEGER, `version_micro` INTEGER, `version_string` TEXT, `version_edition` TEXT, `extended_support` INTEGER, `core_pollinterval` INTEGER, `sharing_api_enabled` INTEGER, `sharing_public_enabled` INTEGER, `sharing_public_password_enforced` INTEGER, `sharing_public_expire_date_enabled` INTEGER, `sharing_public_expire_date_days` INTEGER, `sharing_public_expire_date_enforced` INTEGER, `sharing_public_send_mail` INTEGER, `sharing_public_upload` INTEGER, `sharing_user_send_mail` INTEGER, `sharing_resharing` INTEGER, `sharing_federation_outgoing` INTEGER, `sharing_federation_incoming` INTEGER, `files_bigfilechunking` INTEGER, `files_undelete` INTEGER, `files_versioning` INTEGER, `external_links` INTEGER, `server_name` TEXT, `server_color` TEXT, `server_text_color` TEXT, `server_element_color` TEXT, `server_slogan` TEXT, `server_logo` TEXT, `background_url` TEXT, `end_to_end_encryption` INTEGER, `end_to_end_encryption_keys_exist` INTEGER, `end_to_end_encryption_api_version` TEXT, `activity` INTEGER, `background_default` INTEGER, `background_plain` INTEGER, `richdocument` INTEGER, `richdocument_mimetype_list` TEXT, `richdocument_direct_editing` INTEGER, `richdocument_direct_templates` INTEGER, `richdocument_optional_mimetype_list` TEXT, `sharing_public_ask_for_optional_password` INTEGER, `richdocument_product_name` TEXT, `direct_editing_etag` TEXT, `user_status` INTEGER, `user_status_supports_emoji` INTEGER, `etag` TEXT, `files_locking_version` TEXT, `groupfolders` INTEGER, `drop_account` INTEGER, `security_guard` INTEGER, `forbidden_filename_characters` INTEGER, `forbidden_filenames` INTEGER, `forbidden_filename_extensions` INTEGER, `forbidden_filename_basenames` INTEGER, `files_download_limit` INTEGER, `files_download_limit_default` INTEGER, `recommendation` INTEGER, `notes_folder_path` TEXT, `default_permissions` INTEGER, `user_status_supports_busy` INTEGER, `windows_compatible_filenames` INTEGER, `has_valid_subscription` INTEGER, `client_integration_json` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "assistant",
+ "columnName": "assistant",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "versionMajor",
+ "columnName": "version_mayor",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "versionMinor",
+ "columnName": "version_minor",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "versionMicro",
+ "columnName": "version_micro",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "versionString",
+ "columnName": "version_string",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "versionEditor",
+ "columnName": "version_edition",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "extendedSupport",
+ "columnName": "extended_support",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "corePollinterval",
+ "columnName": "core_pollinterval",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingApiEnabled",
+ "columnName": "sharing_api_enabled",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicEnabled",
+ "columnName": "sharing_public_enabled",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicPasswordEnforced",
+ "columnName": "sharing_public_password_enforced",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnabled",
+ "columnName": "sharing_public_expire_date_enabled",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateDays",
+ "columnName": "sharing_public_expire_date_days",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnforced",
+ "columnName": "sharing_public_expire_date_enforced",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicSendMail",
+ "columnName": "sharing_public_send_mail",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicUpload",
+ "columnName": "sharing_public_upload",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingUserSendMail",
+ "columnName": "sharing_user_send_mail",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingResharing",
+ "columnName": "sharing_resharing",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingFederationOutgoing",
+ "columnName": "sharing_federation_outgoing",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingFederationIncoming",
+ "columnName": "sharing_federation_incoming",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesBigfilechunking",
+ "columnName": "files_bigfilechunking",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesUndelete",
+ "columnName": "files_undelete",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesVersioning",
+ "columnName": "files_versioning",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "externalLinks",
+ "columnName": "external_links",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "serverName",
+ "columnName": "server_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverColor",
+ "columnName": "server_color",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverTextColor",
+ "columnName": "server_text_color",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverElementColor",
+ "columnName": "server_element_color",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverSlogan",
+ "columnName": "server_slogan",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverLogo",
+ "columnName": "server_logo",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverBackgroundUrl",
+ "columnName": "background_url",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "endToEndEncryption",
+ "columnName": "end_to_end_encryption",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "endToEndEncryptionKeysExist",
+ "columnName": "end_to_end_encryption_keys_exist",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "endToEndEncryptionApiVersion",
+ "columnName": "end_to_end_encryption_api_version",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "activity",
+ "columnName": "activity",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "serverBackgroundDefault",
+ "columnName": "background_default",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "serverBackgroundPlain",
+ "columnName": "background_plain",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocument",
+ "columnName": "richdocument",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocumentMimetypeList",
+ "columnName": "richdocument_mimetype_list",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "richdocumentDirectEditing",
+ "columnName": "richdocument_direct_editing",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocumentTemplates",
+ "columnName": "richdocument_direct_templates",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocumentOptionalMimetypeList",
+ "columnName": "richdocument_optional_mimetype_list",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "sharingPublicAskForOptionalPassword",
+ "columnName": "sharing_public_ask_for_optional_password",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocumentProductName",
+ "columnName": "richdocument_product_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "directEditingEtag",
+ "columnName": "direct_editing_etag",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "userStatus",
+ "columnName": "user_status",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "userStatusSupportsEmoji",
+ "columnName": "user_status_supports_emoji",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "filesLockingVersion",
+ "columnName": "files_locking_version",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "groupfolders",
+ "columnName": "groupfolders",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "dropAccount",
+ "columnName": "drop_account",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "securityGuard",
+ "columnName": "security_guard",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "forbiddenFileNameCharacters",
+ "columnName": "forbidden_filename_characters",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "forbiddenFileNames",
+ "columnName": "forbidden_filenames",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "forbiddenFileNameExtensions",
+ "columnName": "forbidden_filename_extensions",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "forbiddenFilenameBaseNames",
+ "columnName": "forbidden_filename_basenames",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesDownloadLimit",
+ "columnName": "files_download_limit",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesDownloadLimitDefault",
+ "columnName": "files_download_limit_default",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "recommendation",
+ "columnName": "recommendation",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "notesFolderPath",
+ "columnName": "notes_folder_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "defaultPermissions",
+ "columnName": "default_permissions",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "userStatusSupportsBusy",
+ "columnName": "user_status_supports_busy",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isWCFEnabled",
+ "columnName": "windows_compatible_filenames",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "hasValidSubscription",
+ "columnName": "has_valid_subscription",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "clientIntegrationJson",
+ "columnName": "client_integration_json",
+ "affinity": "TEXT"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "external_links",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `icon_url` TEXT, `language` TEXT, `type` INTEGER, `name` TEXT, `url` TEXT, `redirect` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "iconUrl",
+ "columnName": "icon_url",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "language",
+ "columnName": "language",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "url",
+ "columnName": "url",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "redirect",
+ "columnName": "redirect",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "filelist",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `filename` TEXT, `encrypted_filename` TEXT, `path` TEXT, `path_decrypted` TEXT, `parent` INTEGER, `created` INTEGER, `modified` INTEGER, `content_type` TEXT, `content_length` INTEGER, `media_path` TEXT, `file_owner` TEXT, `last_sync_date` INTEGER, `last_sync_date_for_data` INTEGER, `modified_at_last_sync_for_data` INTEGER, `etag` TEXT, `etag_on_server` TEXT, `share_by_link` INTEGER, `permissions` TEXT, `remote_id` TEXT, `local_id` INTEGER NOT NULL DEFAULT -1, `update_thumbnail` INTEGER, `is_downloading` INTEGER, `favorite` INTEGER, `hidden` INTEGER, `is_encrypted` INTEGER, `etag_in_conflict` TEXT, `shared_via_users` INTEGER, `mount_type` INTEGER, `has_preview` INTEGER, `unread_comments_count` INTEGER, `owner_id` TEXT, `owner_display_name` TEXT, `note` TEXT, `sharees` TEXT, `rich_workspace` TEXT, `metadata_size` TEXT, `metadata_live_photo` TEXT, `locked` INTEGER, `lock_type` INTEGER, `lock_owner` TEXT, `lock_owner_display_name` TEXT, `lock_owner_editor` TEXT, `lock_timestamp` INTEGER, `lock_timeout` INTEGER, `lock_token` TEXT, `tags` TEXT, `metadata_gps` TEXT, `e2e_counter` INTEGER, `internal_two_way_sync_timestamp` INTEGER, `internal_two_way_sync_result` TEXT, `uploaded` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "filename",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "encryptedName",
+ "columnName": "encrypted_filename",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "pathDecrypted",
+ "columnName": "path_decrypted",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "parent",
+ "columnName": "parent",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "creation",
+ "columnName": "created",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "modified",
+ "columnName": "modified",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "contentType",
+ "columnName": "content_type",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "contentLength",
+ "columnName": "content_length",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "storagePath",
+ "columnName": "media_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "file_owner",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "lastSyncDate",
+ "columnName": "last_sync_date",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lastSyncDateForData",
+ "columnName": "last_sync_date_for_data",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "modifiedAtLastSyncForData",
+ "columnName": "modified_at_last_sync_for_data",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "etagOnServer",
+ "columnName": "etag_on_server",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "sharedViaLink",
+ "columnName": "share_by_link",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "remoteId",
+ "columnName": "remote_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "localId",
+ "columnName": "local_id",
+ "affinity": "INTEGER",
+ "notNull": true,
+ "defaultValue": "-1"
+ },
+ {
+ "fieldPath": "updateThumbnail",
+ "columnName": "update_thumbnail",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isDownloading",
+ "columnName": "is_downloading",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "favorite",
+ "columnName": "favorite",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isEncrypted",
+ "columnName": "is_encrypted",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "etagInConflict",
+ "columnName": "etag_in_conflict",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "sharedWithSharee",
+ "columnName": "shared_via_users",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "mountType",
+ "columnName": "mount_type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "hasPreview",
+ "columnName": "has_preview",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "unreadCommentsCount",
+ "columnName": "unread_comments_count",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "ownerId",
+ "columnName": "owner_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "ownerDisplayName",
+ "columnName": "owner_display_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "sharees",
+ "columnName": "sharees",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "richWorkspace",
+ "columnName": "rich_workspace",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "metadataSize",
+ "columnName": "metadata_size",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "metadataLivePhoto",
+ "columnName": "metadata_live_photo",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "locked",
+ "columnName": "locked",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lockType",
+ "columnName": "lock_type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lockOwner",
+ "columnName": "lock_owner",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "lockOwnerDisplayName",
+ "columnName": "lock_owner_display_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "lockOwnerEditor",
+ "columnName": "lock_owner_editor",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "lockTimestamp",
+ "columnName": "lock_timestamp",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lockTimeout",
+ "columnName": "lock_timeout",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lockToken",
+ "columnName": "lock_token",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "tags",
+ "columnName": "tags",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "metadataGPS",
+ "columnName": "metadata_gps",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "e2eCounter",
+ "columnName": "e2e_counter",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "internalTwoWaySync",
+ "columnName": "internal_two_way_sync_timestamp",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "internalTwoWaySyncResult",
+ "columnName": "internal_two_way_sync_result",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "uploaded",
+ "columnName": "uploaded",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "filesystem",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `is_folder` INTEGER, `found_at` INTEGER, `upload_triggered` INTEGER, `syncedfolder_id` TEXT, `crc32` TEXT, `modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "fileIsFolder",
+ "columnName": "is_folder",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "fileFoundRecently",
+ "columnName": "found_at",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "fileSentForUpload",
+ "columnName": "upload_triggered",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "syncedFolderId",
+ "columnName": "syncedfolder_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "crc32",
+ "columnName": "crc32",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "fileModified",
+ "columnName": "modified_at",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "ocshares",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `file_source` INTEGER, `item_source` INTEGER, `share_type` INTEGER, `shate_with` TEXT, `path` TEXT, `permissions` INTEGER, `shared_date` INTEGER, `expiration_date` INTEGER, `token` TEXT, `shared_with_display_name` TEXT, `is_directory` INTEGER, `user_id` TEXT, `id_remote_shared` INTEGER, `owner_share` TEXT, `is_password_protected` INTEGER, `note` TEXT, `hide_download` INTEGER, `share_link` TEXT, `share_label` TEXT, `download_limit_limit` INTEGER, `download_limit_count` INTEGER, `attributes` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "fileSource",
+ "columnName": "file_source",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "itemSource",
+ "columnName": "item_source",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "shareType",
+ "columnName": "share_type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "shareWith",
+ "columnName": "shate_with",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharedDate",
+ "columnName": "shared_date",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "expirationDate",
+ "columnName": "expiration_date",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "token",
+ "columnName": "token",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "shareWithDisplayName",
+ "columnName": "shared_with_display_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "isDirectory",
+ "columnName": "is_directory",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "userId",
+ "columnName": "user_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "idRemoteShared",
+ "columnName": "id_remote_shared",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "owner_share",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "isPasswordProtected",
+ "columnName": "is_password_protected",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "hideDownload",
+ "columnName": "hide_download",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "shareLink",
+ "columnName": "share_link",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "shareLabel",
+ "columnName": "share_label",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "downloadLimitLimit",
+ "columnName": "download_limit_limit",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "downloadLimitCount",
+ "columnName": "download_limit_count",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "attributes",
+ "columnName": "attributes",
+ "affinity": "TEXT"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "synced_folders",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `wifi_only` INTEGER, `charging_only` INTEGER, `existing` INTEGER, `enabled` INTEGER, `enabled_timestamp_ms` INTEGER, `subfolder_by_date` INTEGER, `account` TEXT, `upload_option` INTEGER, `name_collision_policy` INTEGER, `type` INTEGER, `hidden` INTEGER, `sub_folder_rule` INTEGER, `exclude_hidden` INTEGER, `last_scan_timestamp_ms` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "wifiOnly",
+ "columnName": "wifi_only",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "chargingOnly",
+ "columnName": "charging_only",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "existing",
+ "columnName": "existing",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "enabled",
+ "columnName": "enabled",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "enabledTimestampMs",
+ "columnName": "enabled_timestamp_ms",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "subfolderByDate",
+ "columnName": "subfolder_by_date",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "account",
+ "columnName": "account",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "uploadAction",
+ "columnName": "upload_option",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "subFolderRule",
+ "columnName": "sub_folder_rule",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "excludeHidden",
+ "columnName": "exclude_hidden",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lastScanTimestampMs",
+ "columnName": "last_scan_timestamp_ms",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "list_of_uploads",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `account_name` TEXT, `file_size` INTEGER, `status` INTEGER, `local_behaviour` INTEGER, `upload_time` INTEGER, `name_collision_policy` INTEGER, `is_create_remote_folder` INTEGER, `upload_end_timestamp` INTEGER, `upload_end_timestamp_long` INTEGER, `last_result` INTEGER, `is_while_charging_only` INTEGER, `is_wifi_only` INTEGER, `created_by` INTEGER, `folder_unlock_token` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "fileSize",
+ "columnName": "file_size",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "status",
+ "columnName": "status",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "localBehaviour",
+ "columnName": "local_behaviour",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "uploadTime",
+ "columnName": "upload_time",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isCreateRemoteFolder",
+ "columnName": "is_create_remote_folder",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "uploadEndTimestamp",
+ "columnName": "upload_end_timestamp",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "uploadEndTimestampLong",
+ "columnName": "upload_end_timestamp_long",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lastResult",
+ "columnName": "last_result",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isWhileChargingOnly",
+ "columnName": "is_while_charging_only",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isWifiOnly",
+ "columnName": "is_wifi_only",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "createdBy",
+ "columnName": "created_by",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "folderUnlockToken",
+ "columnName": "folder_unlock_token",
+ "affinity": "TEXT"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "virtual",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `type` TEXT, `ocfile_id` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "ocFileId",
+ "columnName": "ocfile_id",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "offline_operations",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `offline_operations_parent_oc_file_id` INTEGER, `offline_operations_path` TEXT, `offline_operations_type` TEXT, `offline_operations_file_name` TEXT, `offline_operations_created_at` INTEGER, `offline_operations_modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "parentOCFileId",
+ "columnName": "offline_operations_parent_oc_file_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "offline_operations_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "offline_operations_type",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "filename",
+ "columnName": "offline_operations_file_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "createdAt",
+ "columnName": "offline_operations_created_at",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "modifiedAt",
+ "columnName": "offline_operations_modified_at",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "recommended_files",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL, `directory` TEXT NOT NULL, `extension` TEXT NOT NULL, `mime_type` TEXT NOT NULL, `has_preview` INTEGER NOT NULL, `reason` TEXT NOT NULL, `timestamp` INTEGER NOT NULL, `account_name` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "directory",
+ "columnName": "directory",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "extension",
+ "columnName": "extension",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "mimeType",
+ "columnName": "mime_type",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "hasPreview",
+ "columnName": "has_preview",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "reason",
+ "columnName": "reason",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "timestamp",
+ "columnName": "timestamp",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account_name",
+ "affinity": "TEXT"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "assistant",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `accountName` TEXT, `type` TEXT, `status` TEXT, `userId` TEXT, `appId` TEXT, `input` TEXT, `output` TEXT, `completionExpectedAt` INTEGER, `progress` INTEGER, `lastUpdated` INTEGER, `scheduledAt` INTEGER, `endedAt` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "id",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "accountName",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "status",
+ "columnName": "status",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "userId",
+ "columnName": "userId",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "appId",
+ "columnName": "appId",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "input",
+ "columnName": "input",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "output",
+ "columnName": "output",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "completionExpectedAt",
+ "columnName": "completionExpectedAt",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "progress",
+ "columnName": "progress",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lastUpdated",
+ "columnName": "lastUpdated",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "scheduledAt",
+ "columnName": "scheduledAt",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "endedAt",
+ "columnName": "endedAt",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "id"
+ ]
+ }
+ }
+ ],
+ "setupQueries": [
+ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
+ "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '02ca435c31a732cd82a36717518c37b3')"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/app/schemas/com.nextcloud.client.database.NextcloudDatabase/99.json b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/99.json
new file mode 100644
index 000000000000..e9146d470f08
--- /dev/null
+++ b/app/schemas/com.nextcloud.client.database.NextcloudDatabase/99.json
@@ -0,0 +1,1308 @@
+{
+ "formatVersion": 1,
+ "database": {
+ "version": 99,
+ "identityHash": "29842d7d75a54c57a2203a5b041346d7",
+ "entities": [
+ {
+ "tableName": "arbitrary_data",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `cloud_id` TEXT, `key` TEXT, `value` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "cloudId",
+ "columnName": "cloud_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "key",
+ "columnName": "key",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "value",
+ "columnName": "value",
+ "affinity": "TEXT"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "capabilities",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `assistant` INTEGER, `account` TEXT, `version_mayor` INTEGER, `version_minor` INTEGER, `version_micro` INTEGER, `version_string` TEXT, `version_edition` TEXT, `extended_support` INTEGER, `core_pollinterval` INTEGER, `sharing_api_enabled` INTEGER, `sharing_public_enabled` INTEGER, `sharing_public_password_enforced` INTEGER, `sharing_public_expire_date_enabled` INTEGER, `sharing_public_expire_date_days` INTEGER, `sharing_public_expire_date_enforced` INTEGER, `sharing_public_send_mail` INTEGER, `sharing_public_upload` INTEGER, `sharing_user_send_mail` INTEGER, `sharing_resharing` INTEGER, `sharing_federation_outgoing` INTEGER, `sharing_federation_incoming` INTEGER, `files_bigfilechunking` INTEGER, `files_undelete` INTEGER, `files_versioning` INTEGER, `external_links` INTEGER, `server_name` TEXT, `server_color` TEXT, `server_text_color` TEXT, `server_element_color` TEXT, `server_slogan` TEXT, `server_logo` TEXT, `background_url` TEXT, `end_to_end_encryption` INTEGER, `end_to_end_encryption_keys_exist` INTEGER, `end_to_end_encryption_api_version` TEXT, `activity` INTEGER, `background_default` INTEGER, `background_plain` INTEGER, `richdocument` INTEGER, `richdocument_mimetype_list` TEXT, `richdocument_direct_editing` INTEGER, `richdocument_direct_templates` INTEGER, `richdocument_optional_mimetype_list` TEXT, `sharing_public_ask_for_optional_password` INTEGER, `richdocument_product_name` TEXT, `direct_editing_etag` TEXT, `user_status` INTEGER, `user_status_supports_emoji` INTEGER, `etag` TEXT, `files_locking_version` TEXT, `groupfolders` INTEGER, `drop_account` INTEGER, `security_guard` INTEGER, `forbidden_filename_characters` INTEGER, `forbidden_filenames` INTEGER, `forbidden_filename_extensions` INTEGER, `forbidden_filename_basenames` INTEGER, `files_download_limit` INTEGER, `files_download_limit_default` INTEGER, `recommendation` INTEGER, `notes_folder_path` TEXT, `default_permissions` INTEGER, `user_status_supports_busy` INTEGER, `windows_compatible_filenames` INTEGER, `has_valid_subscription` INTEGER, `client_integration_json` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "assistant",
+ "columnName": "assistant",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "versionMajor",
+ "columnName": "version_mayor",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "versionMinor",
+ "columnName": "version_minor",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "versionMicro",
+ "columnName": "version_micro",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "versionString",
+ "columnName": "version_string",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "versionEditor",
+ "columnName": "version_edition",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "extendedSupport",
+ "columnName": "extended_support",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "corePollinterval",
+ "columnName": "core_pollinterval",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingApiEnabled",
+ "columnName": "sharing_api_enabled",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicEnabled",
+ "columnName": "sharing_public_enabled",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicPasswordEnforced",
+ "columnName": "sharing_public_password_enforced",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnabled",
+ "columnName": "sharing_public_expire_date_enabled",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateDays",
+ "columnName": "sharing_public_expire_date_days",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicExpireDateEnforced",
+ "columnName": "sharing_public_expire_date_enforced",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicSendMail",
+ "columnName": "sharing_public_send_mail",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingPublicUpload",
+ "columnName": "sharing_public_upload",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingUserSendMail",
+ "columnName": "sharing_user_send_mail",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingResharing",
+ "columnName": "sharing_resharing",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingFederationOutgoing",
+ "columnName": "sharing_federation_outgoing",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharingFederationIncoming",
+ "columnName": "sharing_federation_incoming",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesBigfilechunking",
+ "columnName": "files_bigfilechunking",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesUndelete",
+ "columnName": "files_undelete",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesVersioning",
+ "columnName": "files_versioning",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "externalLinks",
+ "columnName": "external_links",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "serverName",
+ "columnName": "server_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverColor",
+ "columnName": "server_color",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverTextColor",
+ "columnName": "server_text_color",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverElementColor",
+ "columnName": "server_element_color",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverSlogan",
+ "columnName": "server_slogan",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverLogo",
+ "columnName": "server_logo",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "serverBackgroundUrl",
+ "columnName": "background_url",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "endToEndEncryption",
+ "columnName": "end_to_end_encryption",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "endToEndEncryptionKeysExist",
+ "columnName": "end_to_end_encryption_keys_exist",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "endToEndEncryptionApiVersion",
+ "columnName": "end_to_end_encryption_api_version",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "activity",
+ "columnName": "activity",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "serverBackgroundDefault",
+ "columnName": "background_default",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "serverBackgroundPlain",
+ "columnName": "background_plain",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocument",
+ "columnName": "richdocument",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocumentMimetypeList",
+ "columnName": "richdocument_mimetype_list",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "richdocumentDirectEditing",
+ "columnName": "richdocument_direct_editing",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocumentTemplates",
+ "columnName": "richdocument_direct_templates",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocumentOptionalMimetypeList",
+ "columnName": "richdocument_optional_mimetype_list",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "sharingPublicAskForOptionalPassword",
+ "columnName": "sharing_public_ask_for_optional_password",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "richdocumentProductName",
+ "columnName": "richdocument_product_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "directEditingEtag",
+ "columnName": "direct_editing_etag",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "userStatus",
+ "columnName": "user_status",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "userStatusSupportsEmoji",
+ "columnName": "user_status_supports_emoji",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "filesLockingVersion",
+ "columnName": "files_locking_version",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "groupfolders",
+ "columnName": "groupfolders",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "dropAccount",
+ "columnName": "drop_account",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "securityGuard",
+ "columnName": "security_guard",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "forbiddenFileNameCharacters",
+ "columnName": "forbidden_filename_characters",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "forbiddenFileNames",
+ "columnName": "forbidden_filenames",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "forbiddenFileNameExtensions",
+ "columnName": "forbidden_filename_extensions",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "forbiddenFilenameBaseNames",
+ "columnName": "forbidden_filename_basenames",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesDownloadLimit",
+ "columnName": "files_download_limit",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "filesDownloadLimitDefault",
+ "columnName": "files_download_limit_default",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "recommendation",
+ "columnName": "recommendation",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "notesFolderPath",
+ "columnName": "notes_folder_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "defaultPermissions",
+ "columnName": "default_permissions",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "userStatusSupportsBusy",
+ "columnName": "user_status_supports_busy",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isWCFEnabled",
+ "columnName": "windows_compatible_filenames",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "hasValidSubscription",
+ "columnName": "has_valid_subscription",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "clientIntegrationJson",
+ "columnName": "client_integration_json",
+ "affinity": "TEXT"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "external_links",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `icon_url` TEXT, `language` TEXT, `type` INTEGER, `name` TEXT, `url` TEXT, `redirect` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "iconUrl",
+ "columnName": "icon_url",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "language",
+ "columnName": "language",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "url",
+ "columnName": "url",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "redirect",
+ "columnName": "redirect",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "filelist",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `filename` TEXT, `encrypted_filename` TEXT, `path` TEXT, `path_decrypted` TEXT, `parent` INTEGER, `created` INTEGER, `modified` INTEGER, `content_type` TEXT, `content_length` INTEGER, `media_path` TEXT, `file_owner` TEXT, `last_sync_date` INTEGER, `last_sync_date_for_data` INTEGER, `modified_at_last_sync_for_data` INTEGER, `etag` TEXT, `etag_on_server` TEXT, `share_by_link` INTEGER, `permissions` TEXT, `remote_id` TEXT, `local_id` INTEGER NOT NULL DEFAULT -1, `update_thumbnail` INTEGER, `is_downloading` INTEGER, `favorite` INTEGER, `hidden` INTEGER, `is_encrypted` INTEGER, `etag_in_conflict` TEXT, `shared_via_users` INTEGER, `mount_type` INTEGER, `has_preview` INTEGER, `unread_comments_count` INTEGER, `owner_id` TEXT, `owner_display_name` TEXT, `note` TEXT, `sharees` TEXT, `rich_workspace` TEXT, `metadata_size` TEXT, `metadata_live_photo` TEXT, `locked` INTEGER, `lock_type` INTEGER, `lock_owner` TEXT, `lock_owner_display_name` TEXT, `lock_owner_editor` TEXT, `lock_timestamp` INTEGER, `lock_timeout` INTEGER, `lock_token` TEXT, `tags` TEXT, `metadata_gps` TEXT, `e2e_counter` INTEGER, `internal_two_way_sync_timestamp` INTEGER, `internal_two_way_sync_result` TEXT, `uploaded` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "filename",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "encryptedName",
+ "columnName": "encrypted_filename",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "pathDecrypted",
+ "columnName": "path_decrypted",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "parent",
+ "columnName": "parent",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "creation",
+ "columnName": "created",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "modified",
+ "columnName": "modified",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "contentType",
+ "columnName": "content_type",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "contentLength",
+ "columnName": "content_length",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "storagePath",
+ "columnName": "media_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "file_owner",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "lastSyncDate",
+ "columnName": "last_sync_date",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lastSyncDateForData",
+ "columnName": "last_sync_date_for_data",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "modifiedAtLastSyncForData",
+ "columnName": "modified_at_last_sync_for_data",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "etag",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "etagOnServer",
+ "columnName": "etag_on_server",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "sharedViaLink",
+ "columnName": "share_by_link",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "remoteId",
+ "columnName": "remote_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "localId",
+ "columnName": "local_id",
+ "affinity": "INTEGER",
+ "notNull": true,
+ "defaultValue": "-1"
+ },
+ {
+ "fieldPath": "updateThumbnail",
+ "columnName": "update_thumbnail",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isDownloading",
+ "columnName": "is_downloading",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "favorite",
+ "columnName": "favorite",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isEncrypted",
+ "columnName": "is_encrypted",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "etagInConflict",
+ "columnName": "etag_in_conflict",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "sharedWithSharee",
+ "columnName": "shared_via_users",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "mountType",
+ "columnName": "mount_type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "hasPreview",
+ "columnName": "has_preview",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "unreadCommentsCount",
+ "columnName": "unread_comments_count",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "ownerId",
+ "columnName": "owner_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "ownerDisplayName",
+ "columnName": "owner_display_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "sharees",
+ "columnName": "sharees",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "richWorkspace",
+ "columnName": "rich_workspace",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "metadataSize",
+ "columnName": "metadata_size",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "metadataLivePhoto",
+ "columnName": "metadata_live_photo",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "locked",
+ "columnName": "locked",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lockType",
+ "columnName": "lock_type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lockOwner",
+ "columnName": "lock_owner",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "lockOwnerDisplayName",
+ "columnName": "lock_owner_display_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "lockOwnerEditor",
+ "columnName": "lock_owner_editor",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "lockTimestamp",
+ "columnName": "lock_timestamp",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lockTimeout",
+ "columnName": "lock_timeout",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lockToken",
+ "columnName": "lock_token",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "tags",
+ "columnName": "tags",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "metadataGPS",
+ "columnName": "metadata_gps",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "e2eCounter",
+ "columnName": "e2e_counter",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "internalTwoWaySync",
+ "columnName": "internal_two_way_sync_timestamp",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "internalTwoWaySyncResult",
+ "columnName": "internal_two_way_sync_result",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "uploaded",
+ "columnName": "uploaded",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "filesystem",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `is_folder` INTEGER, `found_at` INTEGER, `upload_triggered` INTEGER, `syncedfolder_id` TEXT, `crc32` TEXT, `modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "fileIsFolder",
+ "columnName": "is_folder",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "fileFoundRecently",
+ "columnName": "found_at",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "fileSentForUpload",
+ "columnName": "upload_triggered",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "syncedFolderId",
+ "columnName": "syncedfolder_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "crc32",
+ "columnName": "crc32",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "fileModified",
+ "columnName": "modified_at",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "ocshares",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `file_source` INTEGER, `item_source` INTEGER, `share_type` INTEGER, `shate_with` TEXT, `path` TEXT, `permissions` INTEGER, `shared_date` INTEGER, `expiration_date` INTEGER, `token` TEXT, `shared_with_display_name` TEXT, `is_directory` INTEGER, `user_id` TEXT, `id_remote_shared` INTEGER, `owner_share` TEXT, `is_password_protected` INTEGER, `note` TEXT, `hide_download` INTEGER, `share_link` TEXT, `share_label` TEXT, `download_limit_limit` INTEGER, `download_limit_count` INTEGER, `attributes` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "fileSource",
+ "columnName": "file_source",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "itemSource",
+ "columnName": "item_source",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "shareType",
+ "columnName": "share_type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "shareWith",
+ "columnName": "shate_with",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "permissions",
+ "columnName": "permissions",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "sharedDate",
+ "columnName": "shared_date",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "expirationDate",
+ "columnName": "expiration_date",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "token",
+ "columnName": "token",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "shareWithDisplayName",
+ "columnName": "shared_with_display_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "isDirectory",
+ "columnName": "is_directory",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "userId",
+ "columnName": "user_id",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "idRemoteShared",
+ "columnName": "id_remote_shared",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "accountOwner",
+ "columnName": "owner_share",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "isPasswordProtected",
+ "columnName": "is_password_protected",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "note",
+ "columnName": "note",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "hideDownload",
+ "columnName": "hide_download",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "shareLink",
+ "columnName": "share_link",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "shareLabel",
+ "columnName": "share_label",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "downloadLimitLimit",
+ "columnName": "download_limit_limit",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "downloadLimitCount",
+ "columnName": "download_limit_count",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "attributes",
+ "columnName": "attributes",
+ "affinity": "TEXT"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "synced_folders",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `wifi_only` INTEGER, `charging_only` INTEGER, `existing` INTEGER, `enabled` INTEGER, `enabled_timestamp_ms` INTEGER, `subfolder_by_date` INTEGER, `account` TEXT, `upload_option` INTEGER, `name_collision_policy` INTEGER, `type` INTEGER, `hidden` INTEGER, `sub_folder_rule` INTEGER, `exclude_hidden` INTEGER, `last_scan_timestamp_ms` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "wifiOnly",
+ "columnName": "wifi_only",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "chargingOnly",
+ "columnName": "charging_only",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "existing",
+ "columnName": "existing",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "enabled",
+ "columnName": "enabled",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "enabledTimestampMs",
+ "columnName": "enabled_timestamp_ms",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "subfolderByDate",
+ "columnName": "subfolder_by_date",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "account",
+ "columnName": "account",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "uploadAction",
+ "columnName": "upload_option",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "hidden",
+ "columnName": "hidden",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "subFolderRule",
+ "columnName": "sub_folder_rule",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "excludeHidden",
+ "columnName": "exclude_hidden",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lastScanTimestampMs",
+ "columnName": "last_scan_timestamp_ms",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "list_of_uploads",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `local_path` TEXT, `remote_path` TEXT, `account_name` TEXT, `file_size` INTEGER, `status` INTEGER, `local_behaviour` INTEGER, `upload_time` INTEGER, `name_collision_policy` INTEGER, `is_create_remote_folder` INTEGER, `upload_end_timestamp` INTEGER, `upload_end_timestamp_long` INTEGER, `last_result` INTEGER, `is_while_charging_only` INTEGER, `is_wifi_only` INTEGER, `created_by` INTEGER, `folder_unlock_token` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "localPath",
+ "columnName": "local_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "remotePath",
+ "columnName": "remote_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "fileSize",
+ "columnName": "file_size",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "status",
+ "columnName": "status",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "localBehaviour",
+ "columnName": "local_behaviour",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "uploadTime",
+ "columnName": "upload_time",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "nameCollisionPolicy",
+ "columnName": "name_collision_policy",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isCreateRemoteFolder",
+ "columnName": "is_create_remote_folder",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "uploadEndTimestamp",
+ "columnName": "upload_end_timestamp",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "uploadEndTimestampLong",
+ "columnName": "upload_end_timestamp_long",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lastResult",
+ "columnName": "last_result",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isWhileChargingOnly",
+ "columnName": "is_while_charging_only",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "isWifiOnly",
+ "columnName": "is_wifi_only",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "createdBy",
+ "columnName": "created_by",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "folderUnlockToken",
+ "columnName": "folder_unlock_token",
+ "affinity": "TEXT"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "virtual",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `type` TEXT, `ocfile_id` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "ocFileId",
+ "columnName": "ocfile_id",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "offline_operations",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `offline_operations_parent_oc_file_id` INTEGER, `offline_operations_path` TEXT, `offline_operations_type` TEXT, `offline_operations_file_name` TEXT, `offline_operations_created_at` INTEGER, `offline_operations_modified_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "parentOCFileId",
+ "columnName": "offline_operations_parent_oc_file_id",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "path",
+ "columnName": "offline_operations_path",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "offline_operations_type",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "filename",
+ "columnName": "offline_operations_file_name",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "createdAt",
+ "columnName": "offline_operations_created_at",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "modifiedAt",
+ "columnName": "offline_operations_modified_at",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "recommended_files",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL, `directory` TEXT NOT NULL, `extension` TEXT NOT NULL, `mime_type` TEXT NOT NULL, `has_preview` INTEGER NOT NULL, `reason` TEXT NOT NULL, `timestamp` INTEGER NOT NULL, `account_name` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "directory",
+ "columnName": "directory",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "extension",
+ "columnName": "extension",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "mimeType",
+ "columnName": "mime_type",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "hasPreview",
+ "columnName": "has_preview",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "reason",
+ "columnName": "reason",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "timestamp",
+ "columnName": "timestamp",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "account_name",
+ "affinity": "TEXT"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "_id"
+ ]
+ }
+ },
+ {
+ "tableName": "assistant",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `accountName` TEXT, `type` TEXT, `status` TEXT, `userId` TEXT, `appId` TEXT, `input` TEXT, `output` TEXT, `completionExpectedAt` INTEGER, `progress` INTEGER, `lastUpdated` INTEGER, `scheduledAt` INTEGER, `endedAt` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "id",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "accountName",
+ "columnName": "accountName",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "status",
+ "columnName": "status",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "userId",
+ "columnName": "userId",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "appId",
+ "columnName": "appId",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "input",
+ "columnName": "input",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "output",
+ "columnName": "output",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "completionExpectedAt",
+ "columnName": "completionExpectedAt",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "progress",
+ "columnName": "progress",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "lastUpdated",
+ "columnName": "lastUpdated",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "scheduledAt",
+ "columnName": "scheduledAt",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "endedAt",
+ "columnName": "endedAt",
+ "affinity": "INTEGER"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "id"
+ ]
+ }
+ }
+ ],
+ "setupQueries": [
+ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
+ "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '29842d7d75a54c57a2203a5b041346d7')"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.ActivitiesFragmentIT_empty.png b/app/screenshots/generic/debug/com.nextcloud.client.ActivitiesFragmentIT_empty.png
new file mode 100644
index 000000000000..dd1710e0598c
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.ActivitiesFragmentIT_empty.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.ActivitiesFragmentIT_empty_light_white.png b/app/screenshots/generic/debug/com.nextcloud.client.ActivitiesFragmentIT_empty_light_white.png
new file mode 100644
index 000000000000..77c579d6b44f
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.ActivitiesFragmentIT_empty_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.ActivitiesFragmentIT_error.png b/app/screenshots/generic/debug/com.nextcloud.client.ActivitiesFragmentIT_error.png
new file mode 100644
index 000000000000..196a8e04cc79
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.ActivitiesFragmentIT_error.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.ActivitiesFragmentIT_error_light_white.png b/app/screenshots/generic/debug/com.nextcloud.client.ActivitiesFragmentIT_error_light_white.png
new file mode 100644
index 000000000000..d6e8ed794aad
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.ActivitiesFragmentIT_error_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.ActivitiesFragmentIT_loading.png b/app/screenshots/generic/debug/com.nextcloud.client.ActivitiesFragmentIT_loading.png
new file mode 100644
index 000000000000..a9acbd463afd
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.ActivitiesFragmentIT_loading.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.ActivitiesFragmentIT_openDrawer.png b/app/screenshots/generic/debug/com.nextcloud.client.ActivitiesFragmentIT_openDrawer.png
new file mode 100644
index 000000000000..833e68d68f6f
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.ActivitiesFragmentIT_openDrawer.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.ActivitiesFragmentIT_openDrawer_dark_black.png b/app/screenshots/generic/debug/com.nextcloud.client.ActivitiesFragmentIT_openDrawer_dark_black.png
new file mode 100644
index 000000000000..3076d94293cc
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.ActivitiesFragmentIT_openDrawer_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.ActivitiesFragmentIT_openDrawer_dark_blue.png b/app/screenshots/generic/debug/com.nextcloud.client.ActivitiesFragmentIT_openDrawer_dark_blue.png
new file mode 100644
index 000000000000..d5c15f37a336
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.ActivitiesFragmentIT_openDrawer_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.ActivitiesFragmentIT_openDrawer_dark_white.png b/app/screenshots/generic/debug/com.nextcloud.client.ActivitiesFragmentIT_openDrawer_dark_white.png
new file mode 100644
index 000000000000..218890965fd7
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.ActivitiesFragmentIT_openDrawer_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.ActivitiesFragmentIT_openDrawer_light_black.png b/app/screenshots/generic/debug/com.nextcloud.client.ActivitiesFragmentIT_openDrawer_light_black.png
new file mode 100644
index 000000000000..2acd76c3ab2b
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.ActivitiesFragmentIT_openDrawer_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.ActivitiesFragmentIT_openDrawer_light_white.png b/app/screenshots/generic/debug/com.nextcloud.client.ActivitiesFragmentIT_openDrawer_light_white.png
new file mode 100644
index 000000000000..c3c8cd4f0005
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.ActivitiesFragmentIT_openDrawer_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.ActivitiesFragmentIT_showActivities.png b/app/screenshots/generic/debug/com.nextcloud.client.ActivitiesFragmentIT_showActivities.png
new file mode 100644
index 000000000000..d2014c5fd4c4
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.ActivitiesFragmentIT_showActivities.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.ActivitiesFragmentIT_showActivities_light_white.png b/app/screenshots/generic/debug/com.nextcloud.client.ActivitiesFragmentIT_showActivities_light_white.png
new file mode 100644
index 000000000000..65ac34ec1002
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.ActivitiesFragmentIT_showActivities_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.AuthenticatorActivityIT_login.png b/app/screenshots/generic/debug/com.nextcloud.client.AuthenticatorActivityIT_login.png
new file mode 100644
index 000000000000..a351456e61ac
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.AuthenticatorActivityIT_login.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.AuthenticatorActivityIT_login_dark_black.png b/app/screenshots/generic/debug/com.nextcloud.client.AuthenticatorActivityIT_login_dark_black.png
new file mode 100644
index 000000000000..515349cef053
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.AuthenticatorActivityIT_login_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.AuthenticatorActivityIT_login_dark_blue.png b/app/screenshots/generic/debug/com.nextcloud.client.AuthenticatorActivityIT_login_dark_blue.png
new file mode 100644
index 000000000000..515349cef053
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.AuthenticatorActivityIT_login_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.AuthenticatorActivityIT_login_dark_white.png b/app/screenshots/generic/debug/com.nextcloud.client.AuthenticatorActivityIT_login_dark_white.png
new file mode 100644
index 000000000000..515349cef053
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.AuthenticatorActivityIT_login_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.AuthenticatorActivityIT_login_light_black.png b/app/screenshots/generic/debug/com.nextcloud.client.AuthenticatorActivityIT_login_light_black.png
new file mode 100644
index 000000000000..515349cef053
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.AuthenticatorActivityIT_login_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.AuthenticatorActivityIT_login_light_white.png b/app/screenshots/generic/debug/com.nextcloud.client.AuthenticatorActivityIT_login_light_white.png
new file mode 100644
index 000000000000..515349cef053
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.AuthenticatorActivityIT_login_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.CommunityFragmentIT_open.png b/app/screenshots/generic/debug/com.nextcloud.client.CommunityFragmentIT_open.png
new file mode 100644
index 000000000000..2b44c91846ac
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.CommunityFragmentIT_open.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.CommunityFragmentIT_open_dark_black.png b/app/screenshots/generic/debug/com.nextcloud.client.CommunityFragmentIT_open_dark_black.png
new file mode 100644
index 000000000000..290a8c11f25b
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.CommunityFragmentIT_open_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.CommunityFragmentIT_open_dark_blue.png b/app/screenshots/generic/debug/com.nextcloud.client.CommunityFragmentIT_open_dark_blue.png
new file mode 100644
index 000000000000..a8ae0ac0358d
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.CommunityFragmentIT_open_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.CommunityFragmentIT_open_dark_white.png b/app/screenshots/generic/debug/com.nextcloud.client.CommunityFragmentIT_open_dark_white.png
new file mode 100644
index 000000000000..d1a46b919cc4
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.CommunityFragmentIT_open_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.CommunityFragmentIT_open_light_black.png b/app/screenshots/generic/debug/com.nextcloud.client.CommunityFragmentIT_open_light_black.png
new file mode 100644
index 000000000000..21ef8e716ec2
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.CommunityFragmentIT_open_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.CommunityFragmentIT_open_light_white.png b/app/screenshots/generic/debug/com.nextcloud.client.CommunityFragmentIT_open_light_white.png
new file mode 100644
index 000000000000..f71a768f6904
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.CommunityFragmentIT_open_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityIT_shareToCircle.png b/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityIT_shareToCircle.png
new file mode 100644
index 000000000000..b2a4b29266b1
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityIT_shareToCircle.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityIT_showAccounts.png b/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityIT_showAccounts.png
new file mode 100644
index 000000000000..9652ab3c9f6e
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityIT_showAccounts.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityIT_showShares.png b/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityIT_showShares.png
new file mode 100644
index 000000000000..9e218692fad9
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityIT_showShares.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityScreenshotIT_drawer.png b/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityScreenshotIT_drawer.png
new file mode 100644
index 000000000000..5c12e09cc323
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityScreenshotIT_drawer.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityScreenshotIT_drawer_dark_black.png b/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityScreenshotIT_drawer_dark_black.png
new file mode 100644
index 000000000000..5cd78a4b2d07
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityScreenshotIT_drawer_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityScreenshotIT_drawer_dark_blue.png b/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityScreenshotIT_drawer_dark_blue.png
new file mode 100644
index 000000000000..038077ce095e
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityScreenshotIT_drawer_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityScreenshotIT_drawer_dark_white.png b/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityScreenshotIT_drawer_dark_white.png
new file mode 100644
index 000000000000..170e169bc22c
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityScreenshotIT_drawer_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityScreenshotIT_drawer_light_black.png b/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityScreenshotIT_drawer_light_black.png
new file mode 100644
index 000000000000..ee092b471201
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityScreenshotIT_drawer_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityScreenshotIT_drawer_light_white.png b/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityScreenshotIT_drawer_light_white.png
new file mode 100644
index 000000000000..ff64ce576f98
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityScreenshotIT_drawer_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityScreenshotIT_open.png b/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityScreenshotIT_open.png
new file mode 100644
index 000000000000..a2cae833232d
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityScreenshotIT_open.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityScreenshotIT_open_dark_black.png b/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityScreenshotIT_open_dark_black.png
new file mode 100644
index 000000000000..aafd6c283e5b
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityScreenshotIT_open_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityScreenshotIT_open_dark_blue.png b/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityScreenshotIT_open_dark_blue.png
new file mode 100644
index 000000000000..aafd6c283e5b
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityScreenshotIT_open_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityScreenshotIT_open_dark_white.png b/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityScreenshotIT_open_dark_white.png
new file mode 100644
index 000000000000..f730359e3d88
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityScreenshotIT_open_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityScreenshotIT_open_light_black.png b/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityScreenshotIT_open_light_black.png
new file mode 100644
index 000000000000..c66e6f381610
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityScreenshotIT_open_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityScreenshotIT_open_light_white.png b/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityScreenshotIT_open_light_white.png
new file mode 100644
index 000000000000..f3ad46459c2d
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityScreenshotIT_open_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityScreenshotIT_showMediaThenAllFiles.png b/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityScreenshotIT_showMediaThenAllFiles.png
new file mode 100644
index 000000000000..c3ad35c44b8d
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.FileDisplayActivityScreenshotIT_showMediaThenAllFiles.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.FirstRunActivityIT_open.png b/app/screenshots/generic/debug/com.nextcloud.client.FirstRunActivityIT_open.png
new file mode 100644
index 000000000000..bb9d8107c2a2
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.FirstRunActivityIT_open.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.FirstRunActivityIT_open_dark_black.png b/app/screenshots/generic/debug/com.nextcloud.client.FirstRunActivityIT_open_dark_black.png
new file mode 100644
index 000000000000..ac2e60fa9eb1
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.FirstRunActivityIT_open_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.FirstRunActivityIT_open_dark_blue.png b/app/screenshots/generic/debug/com.nextcloud.client.FirstRunActivityIT_open_dark_blue.png
new file mode 100644
index 000000000000..ac2e60fa9eb1
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.FirstRunActivityIT_open_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.FirstRunActivityIT_open_dark_white.png b/app/screenshots/generic/debug/com.nextcloud.client.FirstRunActivityIT_open_dark_white.png
new file mode 100644
index 000000000000..ac2e60fa9eb1
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.FirstRunActivityIT_open_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.FirstRunActivityIT_open_light_black.png b/app/screenshots/generic/debug/com.nextcloud.client.FirstRunActivityIT_open_light_black.png
new file mode 100644
index 000000000000..ac2e60fa9eb1
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.FirstRunActivityIT_open_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.FirstRunActivityIT_open_light_white.png b/app/screenshots/generic/debug/com.nextcloud.client.FirstRunActivityIT_open_light_white.png
new file mode 100644
index 000000000000..ac2e60fa9eb1
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.FirstRunActivityIT_open_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.SettingsActivityIT_open.png b/app/screenshots/generic/debug/com.nextcloud.client.SettingsActivityIT_open.png
new file mode 100644
index 000000000000..9015c835632b
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.SettingsActivityIT_open.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.SettingsActivityIT_open_dark_black.png b/app/screenshots/generic/debug/com.nextcloud.client.SettingsActivityIT_open_dark_black.png
new file mode 100644
index 000000000000..c7f41ff49511
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.SettingsActivityIT_open_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.SettingsActivityIT_open_dark_blue.png b/app/screenshots/generic/debug/com.nextcloud.client.SettingsActivityIT_open_dark_blue.png
new file mode 100644
index 000000000000..a096dafecb78
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.SettingsActivityIT_open_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.SettingsActivityIT_open_dark_white.png b/app/screenshots/generic/debug/com.nextcloud.client.SettingsActivityIT_open_dark_white.png
new file mode 100644
index 000000000000..c7f41ff49511
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.SettingsActivityIT_open_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.SettingsActivityIT_open_light_black.png b/app/screenshots/generic/debug/com.nextcloud.client.SettingsActivityIT_open_light_black.png
new file mode 100644
index 000000000000..6da4a72470b1
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.SettingsActivityIT_open_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.SettingsActivityIT_open_light_white.png b/app/screenshots/generic/debug/com.nextcloud.client.SettingsActivityIT_open_light_white.png
new file mode 100644
index 000000000000..45d083fa037d
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.SettingsActivityIT_open_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.SettingsActivityIT_showMnemonic_Error.png b/app/screenshots/generic/debug/com.nextcloud.client.SettingsActivityIT_showMnemonic_Error.png
new file mode 100644
index 000000000000..8a19c85feb54
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.SettingsActivityIT_showMnemonic_Error.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.SettingsActivityIT_showMnemonic_Error_dark_black.png b/app/screenshots/generic/debug/com.nextcloud.client.SettingsActivityIT_showMnemonic_Error_dark_black.png
new file mode 100644
index 000000000000..2b2b883ef224
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.SettingsActivityIT_showMnemonic_Error_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.SettingsActivityIT_showMnemonic_Error_dark_blue.png b/app/screenshots/generic/debug/com.nextcloud.client.SettingsActivityIT_showMnemonic_Error_dark_blue.png
new file mode 100644
index 000000000000..5f6b5864aacd
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.SettingsActivityIT_showMnemonic_Error_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.SettingsActivityIT_showMnemonic_Error_dark_white.png b/app/screenshots/generic/debug/com.nextcloud.client.SettingsActivityIT_showMnemonic_Error_dark_white.png
new file mode 100644
index 000000000000..2b2b883ef224
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.SettingsActivityIT_showMnemonic_Error_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.SettingsActivityIT_showMnemonic_Error_light_black.png b/app/screenshots/generic/debug/com.nextcloud.client.SettingsActivityIT_showMnemonic_Error_light_black.png
new file mode 100644
index 000000000000..fab5fbc443de
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.SettingsActivityIT_showMnemonic_Error_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.SettingsActivityIT_showMnemonic_Error_light_white.png b/app/screenshots/generic/debug/com.nextcloud.client.SettingsActivityIT_showMnemonic_Error_light_white.png
new file mode 100644
index 000000000000..96effe52cacf
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.SettingsActivityIT_showMnemonic_Error_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_open.png b/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_open.png
new file mode 100644
index 000000000000..ec519bc24003
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_open.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_openDrawer.png b/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_openDrawer.png
new file mode 100644
index 000000000000..f0934cfadd82
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_openDrawer.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_openDrawer_dark_blue.png b/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_openDrawer_dark_blue.png
new file mode 100644
index 000000000000..495e6d396284
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_openDrawer_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_openDrawer_dark_white.png b/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_openDrawer_dark_white.png
new file mode 100644
index 000000000000..2ef4149e4024
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_openDrawer_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_openDrawer_light_white.png b/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_openDrawer_light_white.png
new file mode 100644
index 000000000000..28f34bc03e6b
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_openDrawer_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_open_dark_black.png b/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_open_dark_black.png
new file mode 100644
index 000000000000..2abfddc00424
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_open_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_open_dark_blue.png b/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_open_dark_blue.png
new file mode 100644
index 000000000000..2abfddc00424
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_open_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_open_dark_white.png b/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_open_dark_white.png
new file mode 100644
index 000000000000..2abfddc00424
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_open_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_open_light_black.png b/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_open_light_black.png
new file mode 100644
index 000000000000..55399677cbcb
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_open_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_open_light_white.png b/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_open_light_white.png
new file mode 100644
index 000000000000..55399677cbcb
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_open_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_showPowerCheckDialog.png b/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_showPowerCheckDialog.png
new file mode 100644
index 000000000000..c99e6641857d
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_showPowerCheckDialog.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_testSyncedFolderDialog.png b/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_testSyncedFolderDialog.png
new file mode 100644
index 000000000000..99e5eb969be4
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_testSyncedFolderDialog.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_testSyncedFolderDialog_dark_black.png b/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_testSyncedFolderDialog_dark_black.png
new file mode 100644
index 000000000000..022759484724
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_testSyncedFolderDialog_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_testSyncedFolderDialog_dark_blue.png b/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_testSyncedFolderDialog_dark_blue.png
new file mode 100644
index 000000000000..7c69afc73dd6
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_testSyncedFolderDialog_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_testSyncedFolderDialog_dark_white.png b/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_testSyncedFolderDialog_dark_white.png
new file mode 100644
index 000000000000..022759484724
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_testSyncedFolderDialog_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_testSyncedFolderDialog_light_black.png b/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_testSyncedFolderDialog_light_black.png
new file mode 100644
index 000000000000..ecbca7c15182
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_testSyncedFolderDialog_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_testSyncedFolderDialog_light_white.png b/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_testSyncedFolderDialog_light_white.png
new file mode 100644
index 000000000000..bb43b1bccb90
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.SyncedFoldersActivityIT_testSyncedFolderDialog_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.UploadListActivityActivityIT_openDrawer.png b/app/screenshots/generic/debug/com.nextcloud.client.UploadListActivityActivityIT_openDrawer.png
new file mode 100644
index 000000000000..0d8d7edc40a1
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.UploadListActivityActivityIT_openDrawer.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.UploadListActivityActivityIT_openDrawer_dark_black.png b/app/screenshots/generic/debug/com.nextcloud.client.UploadListActivityActivityIT_openDrawer_dark_black.png
new file mode 100644
index 000000000000..5b2ff3d6debc
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.UploadListActivityActivityIT_openDrawer_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.UploadListActivityActivityIT_openDrawer_dark_blue.png b/app/screenshots/generic/debug/com.nextcloud.client.UploadListActivityActivityIT_openDrawer_dark_blue.png
new file mode 100644
index 000000000000..467ece0ee301
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.UploadListActivityActivityIT_openDrawer_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.UploadListActivityActivityIT_openDrawer_dark_white.png b/app/screenshots/generic/debug/com.nextcloud.client.UploadListActivityActivityIT_openDrawer_dark_white.png
new file mode 100644
index 000000000000..f08c5db01860
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.UploadListActivityActivityIT_openDrawer_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.UploadListActivityActivityIT_openDrawer_light_black.png b/app/screenshots/generic/debug/com.nextcloud.client.UploadListActivityActivityIT_openDrawer_light_black.png
new file mode 100644
index 000000000000..a65362bc150b
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.UploadListActivityActivityIT_openDrawer_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.UploadListActivityActivityIT_openDrawer_light_white.png b/app/screenshots/generic/debug/com.nextcloud.client.UploadListActivityActivityIT_openDrawer_light_white.png
new file mode 100644
index 000000000000..96e8a00fce37
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.UploadListActivityActivityIT_openDrawer_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.etm.EtmActivityTest_accounts.png b/app/screenshots/generic/debug/com.nextcloud.client.etm.EtmActivityTest_accounts.png
new file mode 100644
index 000000000000..555ae8fb8104
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.etm.EtmActivityTest_accounts.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.client.etm.EtmActivityTest_overview.png b/app/screenshots/generic/debug/com.nextcloud.client.etm.EtmActivityTest_overview.png
new file mode 100644
index 000000000000..774de814bc05
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.client.etm.EtmActivityTest_overview.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.ui.BitmapIT_glideSVG.png b/app/screenshots/generic/debug/com.nextcloud.ui.BitmapIT_glideSVG.png
new file mode 100644
index 000000000000..668c4cd0e8da
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.ui.BitmapIT_glideSVG.png differ
diff --git a/app/screenshots/generic/debug/com.nextcloud.ui.BitmapIT_roundBitmap.png b/app/screenshots/generic/debug/com.nextcloud.ui.BitmapIT_roundBitmap.png
new file mode 100644
index 000000000000..0a5549bba0ff
Binary files /dev/null and b/app/screenshots/generic/debug/com.nextcloud.ui.BitmapIT_roundBitmap.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepBoth.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepBoth.png
new file mode 100644
index 000000000000..e27697112456
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepBoth.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepBoth_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepBoth_dark_black.png
new file mode 100644
index 000000000000..0d3cc8251e19
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepBoth_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepBoth_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepBoth_dark_blue.png
new file mode 100644
index 000000000000..02f65be2ba82
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepBoth_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepBoth_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepBoth_dark_white.png
new file mode 100644
index 000000000000..49af02d39f34
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepBoth_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepBoth_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepBoth_light_black.png
new file mode 100644
index 000000000000..36b176be1255
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepBoth_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepBoth_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepBoth_light_white.png
new file mode 100644
index 000000000000..123a2bbe15e5
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepBoth_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepExisting.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepExisting.png
new file mode 100644
index 000000000000..b03c71c99048
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepExisting.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepExisting_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepExisting_dark_black.png
new file mode 100644
index 000000000000..45f089989f80
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepExisting_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepExisting_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepExisting_dark_blue.png
new file mode 100644
index 000000000000..68de8cefbfd6
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepExisting_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepExisting_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepExisting_dark_white.png
new file mode 100644
index 000000000000..b1ef98d892a0
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepExisting_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepExisting_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepExisting_light_black.png
new file mode 100644
index 000000000000..3c6e2e5f8e3b
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepExisting_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepExisting_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepExisting_light_white.png
new file mode 100644
index 000000000000..cef18345bfcb
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepExisting_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepNew.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepNew.png
new file mode 100644
index 000000000000..08bfbf1e8e0c
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepNew.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepNew_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepNew_dark_black.png
new file mode 100644
index 000000000000..54918671bc2f
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepNew_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepNew_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepNew_dark_blue.png
new file mode 100644
index 000000000000..595f7d7e305f
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepNew_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepNew_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepNew_dark_white.png
new file mode 100644
index 000000000000..48fb018c99cd
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepNew_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepNew_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepNew_light_black.png
new file mode 100644
index 000000000000..d9c9f27de941
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepNew_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepNew_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepNew_light_white.png
new file mode 100644
index 000000000000..38af7a8fea3d
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepNew_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_screenshotTextFiles.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_screenshotTextFiles.png
new file mode 100644
index 000000000000..e5b402d02f6c
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_screenshotTextFiles.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_screenshotTextFiles_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_screenshotTextFiles_dark_black.png
new file mode 100644
index 000000000000..27fe02f40468
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_screenshotTextFiles_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_screenshotTextFiles_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_screenshotTextFiles_dark_blue.png
new file mode 100644
index 000000000000..d550431458b9
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_screenshotTextFiles_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_screenshotTextFiles_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_screenshotTextFiles_dark_white.png
new file mode 100644
index 000000000000..e528ebbc7ab6
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_screenshotTextFiles_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_screenshotTextFiles_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_screenshotTextFiles_light_black.png
new file mode 100644
index 000000000000..21c9d22c3019
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_screenshotTextFiles_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_screenshotTextFiles_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_screenshotTextFiles_light_white.png
new file mode 100644
index 000000000000..ea036afb236d
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_screenshotTextFiles_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ContactsPreferenceActivityIT_openContactsPreference.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ContactsPreferenceActivityIT_openContactsPreference.png
new file mode 100644
index 000000000000..a3e76e7f4b64
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ContactsPreferenceActivityIT_openContactsPreference.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ContactsPreferenceActivityIT_openContactsPreference_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ContactsPreferenceActivityIT_openContactsPreference_dark_black.png
new file mode 100644
index 000000000000..c33972eea122
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ContactsPreferenceActivityIT_openContactsPreference_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ContactsPreferenceActivityIT_openContactsPreference_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ContactsPreferenceActivityIT_openContactsPreference_dark_blue.png
new file mode 100644
index 000000000000..da04a1348389
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ContactsPreferenceActivityIT_openContactsPreference_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ContactsPreferenceActivityIT_openContactsPreference_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ContactsPreferenceActivityIT_openContactsPreference_dark_white.png
new file mode 100644
index 000000000000..3174fd6f486e
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ContactsPreferenceActivityIT_openContactsPreference_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ContactsPreferenceActivityIT_openContactsPreference_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ContactsPreferenceActivityIT_openContactsPreference_light_black.png
new file mode 100644
index 000000000000..1f384ef69495
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ContactsPreferenceActivityIT_openContactsPreference_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ContactsPreferenceActivityIT_openContactsPreference_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ContactsPreferenceActivityIT_openContactsPreference_light_white.png
new file mode 100644
index 000000000000..a42bdeea85fc
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ContactsPreferenceActivityIT_openContactsPreference_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ContactsPreferenceActivityIT_openVCF.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ContactsPreferenceActivityIT_openVCF.png
new file mode 100644
index 000000000000..bd17b40c6ee8
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ContactsPreferenceActivityIT_openVCF.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ContactsPreferenceActivityIT_openVCF_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ContactsPreferenceActivityIT_openVCF_dark_black.png
new file mode 100644
index 000000000000..83a2d783f0df
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ContactsPreferenceActivityIT_openVCF_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ContactsPreferenceActivityIT_openVCF_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ContactsPreferenceActivityIT_openVCF_dark_blue.png
new file mode 100644
index 000000000000..83a2d783f0df
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ContactsPreferenceActivityIT_openVCF_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ContactsPreferenceActivityIT_openVCF_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ContactsPreferenceActivityIT_openVCF_dark_white.png
new file mode 100644
index 000000000000..83a2d783f0df
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ContactsPreferenceActivityIT_openVCF_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ContactsPreferenceActivityIT_openVCF_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ContactsPreferenceActivityIT_openVCF_light_black.png
new file mode 100644
index 000000000000..62734527a228
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ContactsPreferenceActivityIT_openVCF_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ContactsPreferenceActivityIT_openVCF_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ContactsPreferenceActivityIT_openVCF_light_white.png
new file mode 100644
index 000000000000..62734527a228
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ContactsPreferenceActivityIT_openVCF_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.FolderPickerActivityIT_open.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.FolderPickerActivityIT_open.png
new file mode 100644
index 000000000000..86f63418fba1
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.FolderPickerActivityIT_open.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.FolderPickerActivityIT_open_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.FolderPickerActivityIT_open_dark_black.png
new file mode 100644
index 000000000000..b573343b1dc2
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.FolderPickerActivityIT_open_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.FolderPickerActivityIT_open_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.FolderPickerActivityIT_open_dark_blue.png
new file mode 100644
index 000000000000..91f942609851
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.FolderPickerActivityIT_open_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.FolderPickerActivityIT_open_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.FolderPickerActivityIT_open_dark_white.png
new file mode 100644
index 000000000000..a354beacb9bb
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.FolderPickerActivityIT_open_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.FolderPickerActivityIT_open_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.FolderPickerActivityIT_open_light_black.png
new file mode 100644
index 000000000000..764d74a7ded2
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.FolderPickerActivityIT_open_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.FolderPickerActivityIT_open_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.FolderPickerActivityIT_open_light_white.png
new file mode 100644
index 000000000000..f834799ed859
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.FolderPickerActivityIT_open_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.FolderPickerActivityIT_testChooseLocationAction.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.FolderPickerActivityIT_testChooseLocationAction.png
new file mode 100644
index 000000000000..ffd12d364928
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.FolderPickerActivityIT_testChooseLocationAction.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.FolderPickerActivityIT_testMoveOrCopy.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.FolderPickerActivityIT_testMoveOrCopy.png
new file mode 100644
index 000000000000..25098f2820fa
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.FolderPickerActivityIT_testMoveOrCopy.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ManageAccountsActivityIT_open.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ManageAccountsActivityIT_open.png
new file mode 100644
index 000000000000..b32e2585dc84
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ManageAccountsActivityIT_open.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ManageAccountsActivityIT_open_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ManageAccountsActivityIT_open_dark_black.png
new file mode 100644
index 000000000000..8d45368eea59
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ManageAccountsActivityIT_open_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ManageAccountsActivityIT_open_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ManageAccountsActivityIT_open_dark_blue.png
new file mode 100644
index 000000000000..d24ac4a627d6
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ManageAccountsActivityIT_open_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ManageAccountsActivityIT_open_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ManageAccountsActivityIT_open_dark_white.png
new file mode 100644
index 000000000000..504ce4c9aa2a
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ManageAccountsActivityIT_open_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ManageAccountsActivityIT_open_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ManageAccountsActivityIT_open_light_black.png
new file mode 100644
index 000000000000..976a5b9c0f3b
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ManageAccountsActivityIT_open_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ManageAccountsActivityIT_open_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ManageAccountsActivityIT_open_light_white.png
new file mode 100644
index 000000000000..9c8c90fc6d92
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ManageAccountsActivityIT_open_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ManageAccountsActivityIT_userInfoDetail.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ManageAccountsActivityIT_userInfoDetail.png
new file mode 100644
index 000000000000..6b8b3d3b33b9
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ManageAccountsActivityIT_userInfoDetail.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ManageAccountsActivityIT_userInfoDetail_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ManageAccountsActivityIT_userInfoDetail_dark_black.png
new file mode 100644
index 000000000000..3c9b13df13c3
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ManageAccountsActivityIT_userInfoDetail_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ManageAccountsActivityIT_userInfoDetail_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ManageAccountsActivityIT_userInfoDetail_dark_blue.png
new file mode 100644
index 000000000000..ac4ec1b02d06
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ManageAccountsActivityIT_userInfoDetail_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ManageAccountsActivityIT_userInfoDetail_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ManageAccountsActivityIT_userInfoDetail_dark_white.png
new file mode 100644
index 000000000000..1c86ed3a504f
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ManageAccountsActivityIT_userInfoDetail_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ManageAccountsActivityIT_userInfoDetail_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ManageAccountsActivityIT_userInfoDetail_light_black.png
new file mode 100644
index 000000000000..ab5baaad7121
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ManageAccountsActivityIT_userInfoDetail_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ManageAccountsActivityIT_userInfoDetail_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ManageAccountsActivityIT_userInfoDetail_light_white.png
new file mode 100644
index 000000000000..6b960a72bef5
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ManageAccountsActivityIT_userInfoDetail_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_check.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_check.png
new file mode 100644
index 000000000000..0e9310c7e58f
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_check.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_check_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_check_dark_black.png
new file mode 100644
index 000000000000..0c8484f10dc0
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_check_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_check_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_check_dark_blue.png
new file mode 100644
index 000000000000..8402d80946a8
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_check_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_check_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_check_dark_white.png
new file mode 100644
index 000000000000..c52ed2377b94
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_check_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_check_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_check_light_black.png
new file mode 100644
index 000000000000..59c505f347dc
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_check_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_check_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_check_light_white.png
new file mode 100644
index 000000000000..21e37c910324
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_check_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_delete.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_delete.png
new file mode 100644
index 000000000000..cf556b7259af
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_delete.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_delete_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_delete_dark_black.png
new file mode 100644
index 000000000000..e2c6e00901c5
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_delete_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_delete_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_delete_dark_blue.png
new file mode 100644
index 000000000000..e02f1a068aab
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_delete_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_delete_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_delete_dark_white.png
new file mode 100644
index 000000000000..bf346d3780ef
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_delete_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_delete_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_delete_light_black.png
new file mode 100644
index 000000000000..375f9c00a308
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_delete_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_delete_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_delete_light_white.png
new file mode 100644
index 000000000000..118f9ccb7b5b
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_delete_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_request.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_request.png
new file mode 100644
index 000000000000..8ae67d62bf19
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_request.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_request_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_request_dark_black.png
new file mode 100644
index 000000000000..1b60952b5dbe
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_request_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_request_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_request_dark_blue.png
new file mode 100644
index 000000000000..833f1d214cc9
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_request_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_request_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_request_dark_white.png
new file mode 100644
index 000000000000..b12891f531dd
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_request_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_request_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_request_light_black.png
new file mode 100644
index 000000000000..1e2e88f240d3
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_request_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_request_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_request_light_white.png
new file mode 100644
index 000000000000..96fb3fcd5232
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_request_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ReceiveExternalFilesActivityIT_open.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ReceiveExternalFilesActivityIT_open.png
new file mode 100644
index 000000000000..dd22ad19223e
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ReceiveExternalFilesActivityIT_open.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ReceiveExternalFilesActivityIT_openMultiAccount.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ReceiveExternalFilesActivityIT_openMultiAccount.png
new file mode 100644
index 000000000000..417d65b1e48e
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.ReceiveExternalFilesActivityIT_openMultiAccount.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.UploadFilesActivityIT_localFolderPickerMode.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.UploadFilesActivityIT_localFolderPickerMode.png
new file mode 100644
index 000000000000..a463f861b32b
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.UploadFilesActivityIT_localFolderPickerMode.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.UploadFilesActivityIT_noneSelected.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.UploadFilesActivityIT_noneSelected.png
new file mode 100644
index 000000000000..97ec13325a98
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.UploadFilesActivityIT_noneSelected.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.UploadFilesActivityIT_open.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.UploadFilesActivityIT_open.png
new file mode 100644
index 000000000000..4e1d996b9b42
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.UploadFilesActivityIT_open.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.UploadFilesActivityIT_search.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.UploadFilesActivityIT_search.png
new file mode 100644
index 000000000000..a8960fa7d89a
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.UploadFilesActivityIT_search.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.UploadFilesActivityIT_selectAll.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.UploadFilesActivityIT_selectAll.png
new file mode 100644
index 000000000000..62949bb7fae2
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.UploadFilesActivityIT_selectAll.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.UserInfoActivityIT_fullUserInfoDetail.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.UserInfoActivityIT_fullUserInfoDetail.png
new file mode 100644
index 000000000000..db6f80f181d8
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.UserInfoActivityIT_fullUserInfoDetail.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.UserInfoActivityIT_fullUserInfoDetail_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.UserInfoActivityIT_fullUserInfoDetail_dark_black.png
new file mode 100644
index 000000000000..619404bcce1a
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.UserInfoActivityIT_fullUserInfoDetail_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.UserInfoActivityIT_fullUserInfoDetail_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.UserInfoActivityIT_fullUserInfoDetail_dark_blue.png
new file mode 100644
index 000000000000..3d9088c48f84
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.UserInfoActivityIT_fullUserInfoDetail_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.UserInfoActivityIT_fullUserInfoDetail_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.UserInfoActivityIT_fullUserInfoDetail_dark_white.png
new file mode 100644
index 000000000000..5aebab54c510
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.UserInfoActivityIT_fullUserInfoDetail_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.UserInfoActivityIT_fullUserInfoDetail_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.UserInfoActivityIT_fullUserInfoDetail_light_black.png
new file mode 100644
index 000000000000..7477c8f2a005
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.UserInfoActivityIT_fullUserInfoDetail_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.activity.UserInfoActivityIT_fullUserInfoDetail_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.UserInfoActivityIT_fullUserInfoDetail_light_white.png
new file mode 100644
index 000000000000..8c8eeb641c9b
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.activity.UserInfoActivityIT_fullUserInfoDetail_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog.png
new file mode 100644
index 000000000000..a3db7ab8dca9
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialogWithStatusDisabled.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialogWithStatusDisabled.png
new file mode 100644
index 000000000000..b1ba5c65760d
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialogWithStatusDisabled.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialogWithStatusDisabled_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialogWithStatusDisabled_dark_black.png
new file mode 100644
index 000000000000..0e49dae4655c
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialogWithStatusDisabled_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialogWithStatusDisabled_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialogWithStatusDisabled_dark_blue.png
new file mode 100644
index 000000000000..0e49dae4655c
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialogWithStatusDisabled_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialogWithStatusDisabled_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialogWithStatusDisabled_dark_white.png
new file mode 100644
index 000000000000..0e49dae4655c
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialogWithStatusDisabled_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialogWithStatusDisabled_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialogWithStatusDisabled_light_black.png
new file mode 100644
index 000000000000..35c6f8481ddc
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialogWithStatusDisabled_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialogWithStatusDisabled_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialogWithStatusDisabled_light_white.png
new file mode 100644
index 000000000000..35c6f8481ddc
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialogWithStatusDisabled_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_away.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_away.png
new file mode 100644
index 000000000000..695e7fca1079
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_away.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_away_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_away_dark_black.png
new file mode 100644
index 000000000000..380eb47e8c29
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_away_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_away_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_away_dark_blue.png
new file mode 100644
index 000000000000..380eb47e8c29
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_away_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_away_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_away_dark_white.png
new file mode 100644
index 000000000000..380eb47e8c29
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_away_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_away_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_away_light_black.png
new file mode 100644
index 000000000000..e91bc31681cf
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_away_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_away_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_away_light_white.png
new file mode 100644
index 000000000000..e91bc31681cf
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_away_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_dark_black.png
new file mode 100644
index 000000000000..eefb1ee62c90
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_dark_blue.png
new file mode 100644
index 000000000000..eefb1ee62c90
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_dark_white.png
new file mode 100644
index 000000000000..eefb1ee62c90
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_dnd.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_dnd.png
new file mode 100644
index 000000000000..2f551cf6ce2b
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_dnd.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_dnd_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_dnd_dark_black.png
new file mode 100644
index 000000000000..0176b9c55ba9
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_dnd_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_dnd_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_dnd_dark_blue.png
new file mode 100644
index 000000000000..0176b9c55ba9
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_dnd_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_dnd_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_dnd_dark_white.png
new file mode 100644
index 000000000000..0176b9c55ba9
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_dnd_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_dnd_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_dnd_light_black.png
new file mode 100644
index 000000000000..8eaf6071c9cd
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_dnd_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_dnd_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_dnd_light_white.png
new file mode 100644
index 000000000000..8eaf6071c9cd
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_dnd_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_fun.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_fun.png
new file mode 100644
index 000000000000..74df5cc73e1b
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_fun.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_fun_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_fun_dark_black.png
new file mode 100644
index 000000000000..414ccad9c59f
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_fun_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_fun_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_fun_dark_blue.png
new file mode 100644
index 000000000000..414ccad9c59f
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_fun_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_fun_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_fun_dark_white.png
new file mode 100644
index 000000000000..414ccad9c59f
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_fun_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_fun_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_fun_light_black.png
new file mode 100644
index 000000000000..bc93f99d9fb4
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_fun_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_fun_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_fun_light_white.png
new file mode 100644
index 000000000000..bc93f99d9fb4
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_fun_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_light_black.png
new file mode 100644
index 000000000000..c4699f164bfd
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_light_white.png
new file mode 100644
index 000000000000..c4699f164bfd
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_offline.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_offline.png
new file mode 100644
index 000000000000..a3db7ab8dca9
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_offline.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_offline_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_offline_dark_black.png
new file mode 100644
index 000000000000..eefb1ee62c90
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_offline_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_offline_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_offline_dark_blue.png
new file mode 100644
index 000000000000..eefb1ee62c90
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_offline_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_offline_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_offline_dark_white.png
new file mode 100644
index 000000000000..eefb1ee62c90
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_offline_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_offline_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_offline_light_black.png
new file mode 100644
index 000000000000..c4699f164bfd
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_offline_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_offline_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_offline_light_white.png
new file mode 100644
index 000000000000..c4699f164bfd
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_offline_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_online.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_online.png
new file mode 100644
index 000000000000..47a365dbfe41
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_online.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_online_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_online_dark_black.png
new file mode 100644
index 000000000000..05a0e82bb3e0
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_online_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_online_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_online_dark_blue.png
new file mode 100644
index 000000000000..05a0e82bb3e0
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_online_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_online_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_online_dark_white.png
new file mode 100644
index 000000000000..05a0e82bb3e0
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_online_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_online_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_online_light_black.png
new file mode 100644
index 000000000000..7cbb6f53d95d
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_online_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_online_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_online_light_white.png
new file mode 100644
index 000000000000..7cbb6f53d95d
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testAccountChooserDialog_online_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testBottomSheet.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testBottomSheet.png
new file mode 100644
index 000000000000..8e618f1c30f1
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testBottomSheet.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testBottomSheet_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testBottomSheet_dark_black.png
new file mode 100644
index 000000000000..dfd127399e4f
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testBottomSheet_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testBottomSheet_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testBottomSheet_dark_blue.png
new file mode 100644
index 000000000000..dfd127399e4f
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testBottomSheet_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testBottomSheet_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testBottomSheet_dark_white.png
new file mode 100644
index 000000000000..dfd127399e4f
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testBottomSheet_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testBottomSheet_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testBottomSheet_light_black.png
new file mode 100644
index 000000000000..9a2628d72ba6
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testBottomSheet_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testBottomSheet_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testBottomSheet_light_white.png
new file mode 100644
index 000000000000..9a2628d72ba6
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testBottomSheet_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testConfirmationDialogWithOneAction.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testConfirmationDialogWithOneAction.png
new file mode 100644
index 000000000000..6c51e11ace51
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testConfirmationDialogWithOneAction.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testConfirmationDialogWithThreeAction.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testConfirmationDialogWithThreeAction.png
new file mode 100644
index 000000000000..bbadc48e4378
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testConfirmationDialogWithThreeAction.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testConfirmationDialogWithThreeActionRTL.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testConfirmationDialogWithThreeActionRTL.png
new file mode 100644
index 000000000000..8366a9d6a932
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testConfirmationDialogWithThreeActionRTL.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testConfirmationDialogWithTwoAction.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testConfirmationDialogWithTwoAction.png
new file mode 100644
index 000000000000..0a1d6b9d6e49
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testConfirmationDialogWithTwoAction.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testEnforcedPasswordDialog.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testEnforcedPasswordDialog.png
new file mode 100644
index 000000000000..004590868963
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testEnforcedPasswordDialog.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testFileActionsBottomSheet.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testFileActionsBottomSheet.png
new file mode 100644
index 000000000000..de41df933ade
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testFileActionsBottomSheet.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testLoadingDialog.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testLoadingDialog.png
new file mode 100644
index 000000000000..126a08fd1daf
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testLoadingDialog.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testLoadingDialog_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testLoadingDialog_dark_black.png
new file mode 100644
index 000000000000..a05c4b43a67c
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testLoadingDialog_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testLoadingDialog_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testLoadingDialog_dark_blue.png
new file mode 100644
index 000000000000..a05c4b43a67c
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testLoadingDialog_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testLoadingDialog_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testLoadingDialog_dark_white.png
new file mode 100644
index 000000000000..a05c4b43a67c
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testLoadingDialog_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testLoadingDialog_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testLoadingDialog_light_black.png
new file mode 100644
index 000000000000..36dba6767394
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testLoadingDialog_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testLoadingDialog_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testLoadingDialog_light_white.png
new file mode 100644
index 000000000000..36dba6767394
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testLoadingDialog_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testNewFolderDialog.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testNewFolderDialog.png
new file mode 100644
index 000000000000..941ef2a75c08
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testNewFolderDialog.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testNewFolderDialog_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testNewFolderDialog_dark_black.png
new file mode 100644
index 000000000000..b0a6aa05e0a4
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testNewFolderDialog_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testNewFolderDialog_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testNewFolderDialog_dark_blue.png
new file mode 100644
index 000000000000..2e29eb1e4d59
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testNewFolderDialog_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testNewFolderDialog_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testNewFolderDialog_dark_white.png
new file mode 100644
index 000000000000..2e29eb1e4d59
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testNewFolderDialog_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testNewFolderDialog_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testNewFolderDialog_light_black.png
new file mode 100644
index 000000000000..81853f275f86
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testNewFolderDialog_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testNewFolderDialog_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testNewFolderDialog_light_white.png
new file mode 100644
index 000000000000..8847cef1ad01
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testNewFolderDialog_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testOptionalPasswordDialog.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testOptionalPasswordDialog.png
new file mode 100644
index 000000000000..3b12b3e180bf
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testOptionalPasswordDialog.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testProfileBottomSheet.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testProfileBottomSheet.png
new file mode 100644
index 000000000000..004bb415aedc
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testProfileBottomSheet.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFileDialog.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFileDialog.png
new file mode 100644
index 000000000000..1d8bf529e057
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFileDialog.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFileDialog_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFileDialog_dark_black.png
new file mode 100644
index 000000000000..996d430e17a3
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFileDialog_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFileDialog_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFileDialog_dark_blue.png
new file mode 100644
index 000000000000..996d430e17a3
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFileDialog_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFileDialog_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFileDialog_dark_white.png
new file mode 100644
index 000000000000..996d430e17a3
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFileDialog_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFileDialog_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFileDialog_light_black.png
new file mode 100644
index 000000000000..4b98224d13d9
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFileDialog_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFileDialog_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFileDialog_light_white.png
new file mode 100644
index 000000000000..4b98224d13d9
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFileDialog_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFilesDialog.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFilesDialog.png
new file mode 100644
index 000000000000..8feba86853c0
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFilesDialog.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFilesDialog_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFilesDialog_dark_black.png
new file mode 100644
index 000000000000..5e81324e51ea
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFilesDialog_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFilesDialog_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFilesDialog_dark_blue.png
new file mode 100644
index 000000000000..5e81324e51ea
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFilesDialog_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFilesDialog_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFilesDialog_dark_white.png
new file mode 100644
index 000000000000..5e81324e51ea
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFilesDialog_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFilesDialog_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFilesDialog_light_black.png
new file mode 100644
index 000000000000..ae3c10105b86
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFilesDialog_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFilesDialog_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFilesDialog_light_white.png
new file mode 100644
index 000000000000..ae3c10105b86
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFilesDialog_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFolderDialog.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFolderDialog.png
new file mode 100644
index 000000000000..0f890bebc3c1
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFolderDialog.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFolderDialog_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFolderDialog_dark_black.png
new file mode 100644
index 000000000000..2b7e033470ad
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFolderDialog_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFolderDialog_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFolderDialog_dark_blue.png
new file mode 100644
index 000000000000..2b7e033470ad
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFolderDialog_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFolderDialog_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFolderDialog_dark_white.png
new file mode 100644
index 000000000000..2b7e033470ad
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFolderDialog_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFolderDialog_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFolderDialog_light_black.png
new file mode 100644
index 000000000000..ab0580ec09a1
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFolderDialog_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFolderDialog_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFolderDialog_light_white.png
new file mode 100644
index 000000000000..ab0580ec09a1
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFolderDialog_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFoldersDialog.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFoldersDialog.png
new file mode 100644
index 000000000000..8feba86853c0
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFoldersDialog.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFoldersDialog_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFoldersDialog_dark_black.png
new file mode 100644
index 000000000000..5e81324e51ea
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFoldersDialog_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFoldersDialog_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFoldersDialog_dark_blue.png
new file mode 100644
index 000000000000..5e81324e51ea
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFoldersDialog_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFoldersDialog_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFoldersDialog_dark_white.png
new file mode 100644
index 000000000000..5e81324e51ea
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFoldersDialog_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFoldersDialog_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFoldersDialog_light_black.png
new file mode 100644
index 000000000000..ae3c10105b86
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFoldersDialog_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFoldersDialog_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFoldersDialog_light_white.png
new file mode 100644
index 000000000000..ae3c10105b86
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRemoveFoldersDialog_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRenameFileDialog.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRenameFileDialog.png
new file mode 100644
index 000000000000..8705ea84fb5e
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRenameFileDialog.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRenameFileDialog_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRenameFileDialog_dark_black.png
new file mode 100644
index 000000000000..4c6f318f4308
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRenameFileDialog_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRenameFileDialog_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRenameFileDialog_dark_blue.png
new file mode 100644
index 000000000000..225ffb05d1b1
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRenameFileDialog_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRenameFileDialog_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRenameFileDialog_dark_white.png
new file mode 100644
index 000000000000..225ffb05d1b1
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRenameFileDialog_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRenameFileDialog_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRenameFileDialog_light_black.png
new file mode 100644
index 000000000000..1472223440a5
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRenameFileDialog_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRenameFileDialog_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRenameFileDialog_light_white.png
new file mode 100644
index 000000000000..8d93463ee5da
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testRenameFileDialog_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testSslUntrustedCertDialog.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testSslUntrustedCertDialog.png
new file mode 100644
index 000000000000..24b3f52fbb56
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testSslUntrustedCertDialog.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testStoragePermissionDialog.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testStoragePermissionDialog.png
new file mode 100644
index 000000000000..7e4b3f586510
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testStoragePermissionDialog.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentTest_testAccountChooserDialog.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentTest_testAccountChooserDialog.png
new file mode 100644
index 000000000000..cbab280289e4
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentTest_testAccountChooserDialog.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentTest_testLoadingDialog.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentTest_testLoadingDialog.png
new file mode 100644
index 000000000000..4a35c427dba5
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentTest_testLoadingDialog.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentTest_testNewFolderDialog.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentTest_testNewFolderDialog.png
new file mode 100644
index 000000000000..441d947a6f94
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentTest_testNewFolderDialog.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentTest_testRemoveFileDialog.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentTest_testRemoveFileDialog.png
new file mode 100644
index 000000000000..b8dedb7d50ce
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentTest_testRemoveFileDialog.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentTest_testRemoveFilesDialog.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentTest_testRemoveFilesDialog.png
new file mode 100644
index 000000000000..acadc286142f
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentTest_testRemoveFilesDialog.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentTest_testRemoveFolderDialog.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentTest_testRemoveFolderDialog.png
new file mode 100644
index 000000000000..6ca09361074d
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentTest_testRemoveFolderDialog.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentTest_testRemoveFoldersDialog.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentTest_testRemoveFoldersDialog.png
new file mode 100644
index 000000000000..acadc286142f
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentTest_testRemoveFoldersDialog.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentTest_testRenameFileDialog.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentTest_testRenameFileDialog.png
new file mode 100644
index 000000000000..2e517af0c836
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.DialogFragmentTest_testRenameFileDialog.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SendFilesDialogTest_showDialogDifferentTypes_Screenshot.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SendFilesDialogTest_showDialogDifferentTypes_Screenshot.png
new file mode 100644
index 000000000000..fcec93d81b20
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SendFilesDialogTest_showDialogDifferentTypes_Screenshot.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SendFilesDialogTest_showDialog_Screenshot.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SendFilesDialogTest_showDialog_Screenshot.png
new file mode 100644
index 000000000000..fcec93d81b20
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SendFilesDialogTest_showDialog_Screenshot.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SendFilesDialogTest_showDialog_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SendFilesDialogTest_showDialog_dark_black.png
new file mode 100644
index 000000000000..aa423a97d6fe
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SendFilesDialogTest_showDialog_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SendFilesDialogTest_showDialog_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SendFilesDialogTest_showDialog_dark_blue.png
new file mode 100644
index 000000000000..aa423a97d6fe
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SendFilesDialogTest_showDialog_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SendFilesDialogTest_showDialog_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SendFilesDialogTest_showDialog_dark_white.png
new file mode 100644
index 000000000000..aa423a97d6fe
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SendFilesDialogTest_showDialog_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SendFilesDialogTest_showDialog_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SendFilesDialogTest_showDialog_light_black.png
new file mode 100644
index 000000000000..41c7ad94f3f7
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SendFilesDialogTest_showDialog_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SendFilesDialogTest_showDialog_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SendFilesDialogTest_showDialog_light_white.png
new file mode 100644
index 000000000000..41c7ad94f3f7
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SendFilesDialogTest_showDialog_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SendShareDialogTest_showDialog.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SendShareDialogTest_showDialog.png
new file mode 100644
index 000000000000..2526f3183c8a
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SendShareDialogTest_showDialog.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SendShareDialogTest_showDialog_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SendShareDialogTest_showDialog_dark_black.png
new file mode 100644
index 000000000000..472466eb5b62
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SendShareDialogTest_showDialog_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SendShareDialogTest_showDialog_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SendShareDialogTest_showDialog_dark_blue.png
new file mode 100644
index 000000000000..472466eb5b62
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SendShareDialogTest_showDialog_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SendShareDialogTest_showDialog_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SendShareDialogTest_showDialog_dark_white.png
new file mode 100644
index 000000000000..562136a415dd
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SendShareDialogTest_showDialog_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SendShareDialogTest_showDialog_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SendShareDialogTest_showDialog_light_black.png
new file mode 100644
index 000000000000..d5bf6d8a426e
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SendShareDialogTest_showDialog_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SendShareDialogTest_showDialog_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SendShareDialogTest_showDialog_light_white.png
new file mode 100644
index 000000000000..17f6105fdac8
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SendShareDialogTest_showDialog_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SetupEncryptionDialogFragmentIT_error.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SetupEncryptionDialogFragmentIT_error.png
new file mode 100644
index 000000000000..519a09839eea
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SetupEncryptionDialogFragmentIT_error.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SetupEncryptionDialogFragmentIT_error_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SetupEncryptionDialogFragmentIT_error_dark_black.png
new file mode 100644
index 000000000000..3fcc14f54a76
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SetupEncryptionDialogFragmentIT_error_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SetupEncryptionDialogFragmentIT_error_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SetupEncryptionDialogFragmentIT_error_dark_blue.png
new file mode 100644
index 000000000000..3fcc14f54a76
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SetupEncryptionDialogFragmentIT_error_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SetupEncryptionDialogFragmentIT_error_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SetupEncryptionDialogFragmentIT_error_dark_white.png
new file mode 100644
index 000000000000..631137e20bcb
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SetupEncryptionDialogFragmentIT_error_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SetupEncryptionDialogFragmentIT_error_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SetupEncryptionDialogFragmentIT_error_light_black.png
new file mode 100644
index 000000000000..4c97474349c5
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SetupEncryptionDialogFragmentIT_error_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SetupEncryptionDialogFragmentIT_error_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SetupEncryptionDialogFragmentIT_error_light_white.png
new file mode 100644
index 000000000000..d79cc4e97a7a
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SetupEncryptionDialogFragmentIT_error_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SetupEncryptionDialogFragmentIT_showMnemonic.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SetupEncryptionDialogFragmentIT_showMnemonic.png
new file mode 100644
index 000000000000..1ad442cbbbaf
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SetupEncryptionDialogFragmentIT_showMnemonic.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SetupEncryptionDialogFragmentIT_showMnemonic_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SetupEncryptionDialogFragmentIT_showMnemonic_dark_black.png
new file mode 100644
index 000000000000..951f517ad8a8
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SetupEncryptionDialogFragmentIT_showMnemonic_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SetupEncryptionDialogFragmentIT_showMnemonic_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SetupEncryptionDialogFragmentIT_showMnemonic_dark_blue.png
new file mode 100644
index 000000000000..4ee10a4f58bf
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SetupEncryptionDialogFragmentIT_showMnemonic_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SetupEncryptionDialogFragmentIT_showMnemonic_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SetupEncryptionDialogFragmentIT_showMnemonic_dark_white.png
new file mode 100644
index 000000000000..2b62362accdf
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SetupEncryptionDialogFragmentIT_showMnemonic_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SetupEncryptionDialogFragmentIT_showMnemonic_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SetupEncryptionDialogFragmentIT_showMnemonic_light_black.png
new file mode 100644
index 000000000000..f97fa92b9dc7
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SetupEncryptionDialogFragmentIT_showMnemonic_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SetupEncryptionDialogFragmentIT_showMnemonic_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SetupEncryptionDialogFragmentIT_showMnemonic_light_white.png
new file mode 100644
index 000000000000..f97e27060568
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SetupEncryptionDialogFragmentIT_showMnemonic_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SyncFileNotEnoughSpaceDialogFragmentTest_showNotEnoughSpaceDialogForFile.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SyncFileNotEnoughSpaceDialogFragmentTest_showNotEnoughSpaceDialogForFile.png
new file mode 100644
index 000000000000..4f329783e33c
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SyncFileNotEnoughSpaceDialogFragmentTest_showNotEnoughSpaceDialogForFile.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SyncFileNotEnoughSpaceDialogFragmentTest_showNotEnoughSpaceDialogForFolder.png b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SyncFileNotEnoughSpaceDialogFragmentTest_showNotEnoughSpaceDialogForFolder.png
new file mode 100644
index 000000000000..1257bde35868
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.dialog.SyncFileNotEnoughSpaceDialogFragmentTest_showNotEnoughSpaceDialogForFolder.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.AvatarIT_showAvatars.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.AvatarIT_showAvatars.png
new file mode 100644
index 000000000000..df3df20dff58
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.AvatarIT_showAvatars.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.AvatarIT_showAvatarsWithStatus.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.AvatarIT_showAvatarsWithStatus.png
new file mode 100644
index 000000000000..c8ab6125e68f
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.AvatarIT_showAvatarsWithStatus.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.AvatarIT_showAvatarsWithStatus_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.AvatarIT_showAvatarsWithStatus_dark_black.png
new file mode 100644
index 000000000000..3df457cd06de
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.AvatarIT_showAvatarsWithStatus_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.AvatarIT_showAvatarsWithStatus_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.AvatarIT_showAvatarsWithStatus_dark_blue.png
new file mode 100644
index 000000000000..3df457cd06de
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.AvatarIT_showAvatarsWithStatus_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.AvatarIT_showAvatarsWithStatus_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.AvatarIT_showAvatarsWithStatus_dark_white.png
new file mode 100644
index 000000000000..3df457cd06de
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.AvatarIT_showAvatarsWithStatus_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.AvatarIT_showAvatarsWithStatus_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.AvatarIT_showAvatarsWithStatus_light_black.png
new file mode 100644
index 000000000000..c8ab6125e68f
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.AvatarIT_showAvatarsWithStatus_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.AvatarIT_showAvatarsWithStatus_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.AvatarIT_showAvatarsWithStatus_light_white.png
new file mode 100644
index 000000000000..c8ab6125e68f
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.AvatarIT_showAvatarsWithStatus_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.AvatarIT_showAvatars_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.AvatarIT_showAvatars_dark_black.png
new file mode 100644
index 000000000000..12c02d54c47a
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.AvatarIT_showAvatars_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.AvatarIT_showAvatars_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.AvatarIT_showAvatars_dark_blue.png
new file mode 100644
index 000000000000..12c02d54c47a
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.AvatarIT_showAvatars_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.AvatarIT_showAvatars_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.AvatarIT_showAvatars_dark_white.png
new file mode 100644
index 000000000000..12c02d54c47a
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.AvatarIT_showAvatars_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.AvatarIT_showAvatars_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.AvatarIT_showAvatars_light_black.png
new file mode 100644
index 000000000000..ace71f3e38d2
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.AvatarIT_showAvatars_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.AvatarIT_showAvatars_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.AvatarIT_showAvatars_light_white.png
new file mode 100644
index 000000000000..ace71f3e38d2
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.AvatarIT_showAvatars_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.BackupListFragmentIT_showCalendarAndContactsList.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.BackupListFragmentIT_showCalendarAndContactsList.png
new file mode 100644
index 000000000000..9343c4fc283b
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.BackupListFragmentIT_showCalendarAndContactsList.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.BackupListFragmentIT_showCalendarList.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.BackupListFragmentIT_showCalendarList.png
new file mode 100644
index 000000000000..7dc05cac41c9
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.BackupListFragmentIT_showCalendarList.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.BackupListFragmentIT_showContactList.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.BackupListFragmentIT_showContactList.png
new file mode 100644
index 000000000000..1531dddecde7
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.BackupListFragmentIT_showContactList.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.BackupListFragmentIT_showLoading.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.BackupListFragmentIT_showLoading.png
new file mode 100644
index 000000000000..bd17b40c6ee8
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.BackupListFragmentIT_showLoading.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.ContactListFragmentIT_showContactListFragmentLoading.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.ContactListFragmentIT_showContactListFragmentLoading.png
new file mode 100644
index 000000000000..63844893acaa
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.ContactListFragmentIT_showContactListFragmentLoading.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.ContactListFragmentIT_showContactListFragmentLoading_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.ContactListFragmentIT_showContactListFragmentLoading_dark_black.png
new file mode 100644
index 000000000000..9741dfe64259
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.ContactListFragmentIT_showContactListFragmentLoading_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.ContactListFragmentIT_showContactListFragmentLoading_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.ContactListFragmentIT_showContactListFragmentLoading_dark_blue.png
new file mode 100644
index 000000000000..9741dfe64259
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.ContactListFragmentIT_showContactListFragmentLoading_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.ContactListFragmentIT_showContactListFragmentLoading_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.ContactListFragmentIT_showContactListFragmentLoading_dark_white.png
new file mode 100644
index 000000000000..9741dfe64259
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.ContactListFragmentIT_showContactListFragmentLoading_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.ContactListFragmentIT_showContactListFragmentLoading_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.ContactListFragmentIT_showContactListFragmentLoading_light_black.png
new file mode 100644
index 000000000000..63844893acaa
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.ContactListFragmentIT_showContactListFragmentLoading_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.ContactListFragmentIT_showContactListFragmentLoading_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.ContactListFragmentIT_showContactListFragmentLoading_light_white.png
new file mode 100644
index 000000000000..63844893acaa
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.ContactListFragmentIT_showContactListFragmentLoading_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivities.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivities.png
new file mode 100644
index 000000000000..73192a79800d
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivities.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivitiesError.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivitiesError.png
new file mode 100644
index 000000000000..2b6b39e4f757
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivitiesError.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivitiesError_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivitiesError_dark_black.png
new file mode 100644
index 000000000000..3df384bfd6aa
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivitiesError_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivitiesError_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivitiesError_dark_blue.png
new file mode 100644
index 000000000000..a380ae5eba8c
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivitiesError_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivitiesError_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivitiesError_dark_white.png
new file mode 100644
index 000000000000..9111644d39db
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivitiesError_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivitiesError_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivitiesError_light_black.png
new file mode 100644
index 000000000000..fc67ca48e1bf
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivitiesError_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivitiesError_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivitiesError_light_white.png
new file mode 100644
index 000000000000..614334184ed8
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivitiesError_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivitiesNone.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivitiesNone.png
new file mode 100644
index 000000000000..7befbd3576a4
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivitiesNone.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivitiesNone_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivitiesNone_dark_black.png
new file mode 100644
index 000000000000..e16a4980e9db
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivitiesNone_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivitiesNone_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivitiesNone_dark_blue.png
new file mode 100644
index 000000000000..296f881aee7f
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivitiesNone_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivitiesNone_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivitiesNone_dark_white.png
new file mode 100644
index 000000000000..f1f1e9869c14
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivitiesNone_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivitiesNone_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivitiesNone_light_black.png
new file mode 100644
index 000000000000..93e06caf80de
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivitiesNone_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivitiesNone_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivitiesNone_light_white.png
new file mode 100644
index 000000000000..9d05bfab8fda
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivitiesNone_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivities_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivities_dark_black.png
new file mode 100644
index 000000000000..2f3abdf027be
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivities_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivities_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivities_dark_blue.png
new file mode 100644
index 000000000000..8175a2e32af3
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivities_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivities_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivities_dark_white.png
new file mode 100644
index 000000000000..913e56f2ba52
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivities_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivities_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivities_light_black.png
new file mode 100644
index 000000000000..0dde55a7291c
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivities_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivities_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivities_light_white.png
new file mode 100644
index 000000000000..a939b688746c
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsActivities_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsSharing.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsSharing.png
new file mode 100644
index 000000000000..04a448a926b8
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsSharing.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsSharing_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsSharing_dark_black.png
new file mode 100644
index 000000000000..742fc5870722
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsSharing_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsSharing_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsSharing_dark_blue.png
new file mode 100644
index 000000000000..cd34ffd2d0ca
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsSharing_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsSharing_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsSharing_dark_white.png
new file mode 100644
index 000000000000..8240f9509c9b
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsSharing_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsSharing_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsSharing_light_black.png
new file mode 100644
index 000000000000..34038df7cbfd
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsSharing_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsSharing_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsSharing_light_white.png
new file mode 100644
index 000000000000..96a770766376
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetailsSharing_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetails_Activities.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetails_Activities.png
new file mode 100644
index 000000000000..a95c5c6de1c0
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetails_Activities.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetails_Sharing.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetails_Sharing.png
new file mode 100644
index 000000000000..555209fd7077
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showDetails_Sharing.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showFileDetailActivitiesFragment.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showFileDetailActivitiesFragment.png
new file mode 100644
index 000000000000..9295a4ecf5b5
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showFileDetailActivitiesFragment.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showFileDetailActivitiesFragment_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showFileDetailActivitiesFragment_dark_black.png
new file mode 100644
index 000000000000..2cce494ee469
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showFileDetailActivitiesFragment_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showFileDetailActivitiesFragment_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showFileDetailActivitiesFragment_dark_blue.png
new file mode 100644
index 000000000000..2cce494ee469
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showFileDetailActivitiesFragment_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showFileDetailActivitiesFragment_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showFileDetailActivitiesFragment_dark_white.png
new file mode 100644
index 000000000000..2cce494ee469
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showFileDetailActivitiesFragment_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showFileDetailActivitiesFragment_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showFileDetailActivitiesFragment_light_black.png
new file mode 100644
index 000000000000..d0062780ce86
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showFileDetailActivitiesFragment_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showFileDetailActivitiesFragment_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showFileDetailActivitiesFragment_light_white.png
new file mode 100644
index 000000000000..d0062780ce86
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showFileDetailActivitiesFragment_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showFileDetailDetailsFragment.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showFileDetailDetailsFragment.png
new file mode 100644
index 000000000000..6f4fd284e06e
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showFileDetailDetailsFragment.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showFileDetailSharingFragment.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showFileDetailSharingFragment.png
new file mode 100644
index 000000000000..30e9b9325982
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showFileDetailSharingFragment.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showFileDetailSharingFragment_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showFileDetailSharingFragment_dark_black.png
new file mode 100644
index 000000000000..28111501e0a3
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showFileDetailSharingFragment_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showFileDetailSharingFragment_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showFileDetailSharingFragment_dark_blue.png
new file mode 100644
index 000000000000..28111501e0a3
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showFileDetailSharingFragment_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showFileDetailSharingFragment_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showFileDetailSharingFragment_dark_white.png
new file mode 100644
index 000000000000..28111501e0a3
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showFileDetailSharingFragment_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showFileDetailSharingFragment_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showFileDetailSharingFragment_light_black.png
new file mode 100644
index 000000000000..d0e3d8e0b775
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showFileDetailSharingFragment_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showFileDetailSharingFragment_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showFileDetailSharingFragment_light_white.png
new file mode 100644
index 000000000000..d0e3d8e0b775
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT_showFileDetailSharingFragment_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesDownloadLimit.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesDownloadLimit.png
new file mode 100644
index 000000000000..ac96f0cce34c
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesDownloadLimit.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileAllShareTypes.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileAllShareTypes.png
new file mode 100644
index 000000000000..cc50640110c8
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileAllShareTypes.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileAllShareTypes_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileAllShareTypes_dark_black.png
new file mode 100644
index 000000000000..b9012ab0108e
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileAllShareTypes_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileAllShareTypes_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileAllShareTypes_dark_blue.png
new file mode 100644
index 000000000000..b9012ab0108e
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileAllShareTypes_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileAllShareTypes_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileAllShareTypes_dark_white.png
new file mode 100644
index 000000000000..f686f0eaca3b
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileAllShareTypes_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileAllShareTypes_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileAllShareTypes_light_black.png
new file mode 100644
index 000000000000..440609826ec2
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileAllShareTypes_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileAllShareTypes_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileAllShareTypes_light_white.png
new file mode 100644
index 000000000000..29262d82acd7
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileAllShareTypes_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileNone.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileNone.png
new file mode 100644
index 000000000000..365a99e5dafd
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileNone.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileNone_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileNone_dark_black.png
new file mode 100644
index 000000000000..b2e952bfb9b8
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileNone_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileNone_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileNone_dark_blue.png
new file mode 100644
index 000000000000..b2e952bfb9b8
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileNone_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileNone_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileNone_dark_white.png
new file mode 100644
index 000000000000..b2e952bfb9b8
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileNone_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileNone_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileNone_light_black.png
new file mode 100644
index 000000000000..f7929097a00c
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileNone_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileNone_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileNone_light_white.png
new file mode 100644
index 000000000000..f7929097a00c
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileNone_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileResharingNotAllowed.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileResharingNotAllowed.png
new file mode 100644
index 000000000000..341b02c88006
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileResharingNotAllowed.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileResharingNotAllowed_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileResharingNotAllowed_dark_black.png
new file mode 100644
index 000000000000..28111501e0a3
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileResharingNotAllowed_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileResharingNotAllowed_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileResharingNotAllowed_dark_blue.png
new file mode 100644
index 000000000000..28111501e0a3
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileResharingNotAllowed_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileResharingNotAllowed_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileResharingNotAllowed_dark_white.png
new file mode 100644
index 000000000000..28111501e0a3
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileResharingNotAllowed_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileResharingNotAllowed_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileResharingNotAllowed_light_black.png
new file mode 100644
index 000000000000..d0e3d8e0b775
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileResharingNotAllowed_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileResharingNotAllowed_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileResharingNotAllowed_light_white.png
new file mode 100644
index 000000000000..d0e3d8e0b775
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listSharesFileResharingNotAllowed_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listShares_file_allShareTypes.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listShares_file_allShareTypes.png
new file mode 100644
index 000000000000..c9634d7fc223
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listShares_file_allShareTypes.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listShares_file_none.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listShares_file_none.png
new file mode 100644
index 000000000000..eed7aa4f5556
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listShares_file_none.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listShares_file_resharing_not_allowed.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listShares_file_resharing_not_allowed.png
new file mode 100644
index 000000000000..7423f57ced0b
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_listShares_file_resharing_not_allowed.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_publicLink_optionMenu.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_publicLink_optionMenu.png
new file mode 100644
index 000000000000..eed7aa4f5556
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.FileDetailSharingFragmentIT_publicLink_optionMenu.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.GalleryFragmentIT_showEmpty.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.GalleryFragmentIT_showEmpty.png
new file mode 100644
index 000000000000..587ec2f2d624
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.GalleryFragmentIT_showEmpty.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.GalleryFragmentIT_showGallery.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.GalleryFragmentIT_showGallery.png
new file mode 100644
index 000000000000..7a45f94b068c
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.GalleryFragmentIT_showGallery.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.GroupfolderListFragmentIT_showEmpty.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.GroupfolderListFragmentIT_showEmpty.png
new file mode 100644
index 000000000000..a4a82a352d8f
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.GroupfolderListFragmentIT_showEmpty.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.GroupfolderListFragmentIT_showGroupfolder.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.GroupfolderListFragmentIT_showGroupfolder.png
new file mode 100644
index 000000000000..19389970038d
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.GroupfolderListFragmentIT_showGroupfolder.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.GroupfolderListFragmentIT_showGroupfolders.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.GroupfolderListFragmentIT_showGroupfolders.png
new file mode 100644
index 000000000000..939279deac25
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.GroupfolderListFragmentIT_showGroupfolders.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentIT_createAndShowShareToCircle.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentIT_createAndShowShareToCircle.png
new file mode 100644
index 000000000000..5f325fe862f2
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentIT_createAndShowShareToCircle.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentIT_createAndShowShareToGroup.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentIT_createAndShowShareToGroup.png
new file mode 100644
index 000000000000..a4fa4f5bb1b9
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentIT_createAndShowShareToGroup.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentIT_createAndShowShareToUser.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentIT_createAndShowShareToUser.png
new file mode 100644
index 000000000000..ed1549001c1a
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentIT_createAndShowShareToUser.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentIT_createAndShowShareViaLink.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentIT_createAndShowShareViaLink.png
new file mode 100644
index 000000000000..afd2879e1682
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentIT_createAndShowShareViaLink.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showFiles.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showFiles.png
new file mode 100644
index 000000000000..7e58a2293c47
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showFiles.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showFiles_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showFiles_dark_black.png
new file mode 100644
index 000000000000..9833a7abc367
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showFiles_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showFiles_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showFiles_dark_blue.png
new file mode 100644
index 000000000000..9833a7abc367
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showFiles_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showFiles_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showFiles_dark_white.png
new file mode 100644
index 000000000000..9833a7abc367
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showFiles_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showFiles_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showFiles_light_black.png
new file mode 100644
index 000000000000..745ac5c3fc0b
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showFiles_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showFiles_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showFiles_light_white.png
new file mode 100644
index 000000000000..745ac5c3fc0b
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showFiles_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showFolderTypes.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showFolderTypes.png
new file mode 100644
index 000000000000..e00c58cc90f4
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showFolderTypes.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showOneFile.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showOneFile.png
new file mode 100644
index 000000000000..696d50ef0f86
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showOneFile.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showRichWorkspace.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showRichWorkspace.png
new file mode 100644
index 000000000000..c8abed0013a9
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showRichWorkspace.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showRichWorkspace_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showRichWorkspace_dark_black.png
new file mode 100644
index 000000000000..0b9524f66eec
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showRichWorkspace_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showRichWorkspace_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showRichWorkspace_dark_blue.png
new file mode 100644
index 000000000000..0b9524f66eec
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showRichWorkspace_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showRichWorkspace_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showRichWorkspace_dark_white.png
new file mode 100644
index 000000000000..0b9524f66eec
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showRichWorkspace_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showRichWorkspace_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showRichWorkspace_light_black.png
new file mode 100644
index 000000000000..9abc237a68c0
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showRichWorkspace_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showRichWorkspace_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showRichWorkspace_light_white.png
new file mode 100644
index 000000000000..9abc237a68c0
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showRichWorkspace_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showSharedFiles.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showSharedFiles.png
new file mode 100644
index 000000000000..8f9e17c4bf22
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showSharedFiles.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showSharedFiles_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showSharedFiles_dark_black.png
new file mode 100644
index 000000000000..153ed95db150
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showSharedFiles_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showSharedFiles_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showSharedFiles_dark_blue.png
new file mode 100644
index 000000000000..153ed95db150
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showSharedFiles_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showSharedFiles_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showSharedFiles_dark_white.png
new file mode 100644
index 000000000000..05cb3b2f2245
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showSharedFiles_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showSharedFiles_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showSharedFiles_light_black.png
new file mode 100644
index 000000000000..435df38e1773
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showSharedFiles_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showSharedFiles_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showSharedFiles_light_white.png
new file mode 100644
index 000000000000..26cbbe26642b
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showSharedFiles_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.SharedListFragmentIT_showSharedFiles.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.SharedListFragmentIT_showSharedFiles.png
new file mode 100644
index 000000000000..4963d5325fa3
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.SharedListFragmentIT_showSharedFiles.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_empty.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_empty.png
new file mode 100644
index 000000000000..bb3975b6adcc
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_empty.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_empty_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_empty_dark_black.png
new file mode 100644
index 000000000000..80a9a974f817
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_empty_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_empty_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_empty_dark_blue.png
new file mode 100644
index 000000000000..80a9a974f817
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_empty_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_empty_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_empty_dark_white.png
new file mode 100644
index 000000000000..80a9a974f817
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_empty_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_empty_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_empty_light_black.png
new file mode 100644
index 000000000000..30e74ed6d0ac
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_empty_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_empty_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_empty_light_white.png
new file mode 100644
index 000000000000..30e74ed6d0ac
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_empty_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_error.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_error.png
new file mode 100644
index 000000000000..e2ec6b94b6f0
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_error.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_error_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_error_dark_black.png
new file mode 100644
index 000000000000..0e8c5518e3f2
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_error_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_error_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_error_dark_blue.png
new file mode 100644
index 000000000000..0e8c5518e3f2
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_error_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_error_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_error_dark_white.png
new file mode 100644
index 000000000000..0e8c5518e3f2
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_error_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_error_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_error_light_black.png
new file mode 100644
index 000000000000..1150a3fe64d3
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_error_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_error_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_error_light_white.png
new file mode 100644
index 000000000000..1150a3fe64d3
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_error_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_showNotifications.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_showNotifications.png
new file mode 100644
index 000000000000..ff2419da15a7
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_showNotifications.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_showNotifications_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_showNotifications_dark_black.png
new file mode 100644
index 000000000000..8fdf4c8e14a4
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_showNotifications_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_showNotifications_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_showNotifications_dark_blue.png
new file mode 100644
index 000000000000..574185bb33d5
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_showNotifications_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_showNotifications_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_showNotifications_dark_white.png
new file mode 100644
index 000000000000..f0cbda7f9a87
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_showNotifications_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_showNotifications_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_showNotifications_light_black.png
new file mode 100644
index 000000000000..8da4376f4738
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_showNotifications_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_showNotifications_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_showNotifications_light_white.png
new file mode 100644
index 000000000000..4a473e7873d9
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.fragment.notifications.NotificationsFragmentIT_showNotifications_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.preview.PreviewBitmapScreenshotIT_showBitmap.png b/app/screenshots/generic/debug/com.owncloud.android.ui.preview.PreviewBitmapScreenshotIT_showBitmap.png
new file mode 100644
index 000000000000..f159bacba6a8
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.preview.PreviewBitmapScreenshotIT_showBitmap.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.preview.PreviewImageFragmentIT_corruptImage.png b/app/screenshots/generic/debug/com.owncloud.android.ui.preview.PreviewImageFragmentIT_corruptImage.png
new file mode 100644
index 000000000000..4b4233de02d0
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.preview.PreviewImageFragmentIT_corruptImage.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.preview.PreviewImageFragmentIT_corruptImage_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.preview.PreviewImageFragmentIT_corruptImage_dark_blue.png
new file mode 100644
index 000000000000..5de752f43315
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.preview.PreviewImageFragmentIT_corruptImage_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.preview.PreviewImageFragmentIT_validImage.png b/app/screenshots/generic/debug/com.owncloud.android.ui.preview.PreviewImageFragmentIT_validImage.png
new file mode 100644
index 000000000000..85b58a4033ef
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.preview.PreviewImageFragmentIT_validImage.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.preview.PreviewImageFragmentIT_validImage_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.preview.PreviewImageFragmentIT_validImage_dark_blue.png
new file mode 100644
index 000000000000..5de752f43315
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.preview.PreviewImageFragmentIT_validImage_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.preview.PreviewTextFileFragmentTest_displayJavaSnippetFile.png b/app/screenshots/generic/debug/com.owncloud.android.ui.preview.PreviewTextFileFragmentTest_displayJavaSnippetFile.png
new file mode 100644
index 000000000000..3b286598637a
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.preview.PreviewTextFileFragmentTest_displayJavaSnippetFile.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.preview.PreviewTextFileFragmentTest_displaySimpleTextFile.png b/app/screenshots/generic/debug/com.owncloud.android.ui.preview.PreviewTextFileFragmentTest_displaySimpleTextFile.png
new file mode 100644
index 000000000000..22c0729ed11b
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.preview.PreviewTextFileFragmentTest_displaySimpleTextFile.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.preview.pdf.PreviewPdfFragmentScreenshotIT_showPdf.png b/app/screenshots/generic/debug/com.owncloud.android.ui.preview.pdf.PreviewPdfFragmentScreenshotIT_showPdf.png
new file mode 100644
index 000000000000..7a7493cdb4e8
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.preview.pdf.PreviewPdfFragmentScreenshotIT_showPdf.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_differentUser.png b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_differentUser.png
new file mode 100644
index 000000000000..dc7e9793ee1a
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_differentUser.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_empty.png b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_empty.png
new file mode 100644
index 000000000000..12c7db3c2255
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_empty.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_empty_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_empty_dark_black.png
new file mode 100644
index 000000000000..8931fa75a205
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_empty_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_empty_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_empty_dark_blue.png
new file mode 100644
index 000000000000..8931fa75a205
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_empty_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_empty_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_empty_dark_white.png
new file mode 100644
index 000000000000..8931fa75a205
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_empty_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_empty_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_empty_light_black.png
new file mode 100644
index 000000000000..13f8a3f5059e
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_empty_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_empty_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_empty_light_white.png
new file mode 100644
index 000000000000..13f8a3f5059e
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_empty_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_error.png b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_error.png
new file mode 100644
index 000000000000..dc7e9793ee1a
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_error.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_error_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_error_dark_black.png
new file mode 100644
index 000000000000..5fb07622c1f0
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_error_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_error_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_error_dark_blue.png
new file mode 100644
index 000000000000..5fb07622c1f0
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_error_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_error_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_error_dark_white.png
new file mode 100644
index 000000000000..5fb07622c1f0
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_error_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_error_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_error_light_black.png
new file mode 100644
index 000000000000..d781f06bbe01
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_error_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_error_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_error_light_white.png
new file mode 100644
index 000000000000..d781f06bbe01
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_error_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_files.png b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_files.png
new file mode 100644
index 000000000000..e07bb83404e5
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_files.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_files_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_files_dark_black.png
new file mode 100644
index 000000000000..b882319f1ceb
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_files_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_files_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_files_dark_blue.png
new file mode 100644
index 000000000000..3e3356ee1c62
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_files_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_files_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_files_dark_white.png
new file mode 100644
index 000000000000..8ff7b498271d
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_files_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_files_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_files_light_black.png
new file mode 100644
index 000000000000..d9975f43328c
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_files_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_files_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_files_light_white.png
new file mode 100644
index 000000000000..d1e4ceed6423
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_files_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_loading.png b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_loading.png
new file mode 100644
index 000000000000..b59f3617ec82
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_loading.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_loading_dark_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_loading_dark_black.png
new file mode 100644
index 000000000000..58ac9df8bcdd
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_loading_dark_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_loading_dark_blue.png b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_loading_dark_blue.png
new file mode 100644
index 000000000000..58ac9df8bcdd
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_loading_dark_blue.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_loading_dark_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_loading_dark_white.png
new file mode 100644
index 000000000000..58ac9df8bcdd
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_loading_dark_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_loading_light_black.png b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_loading_light_black.png
new file mode 100644
index 000000000000..ee2a02b6c958
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_loading_light_black.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_loading_light_white.png b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_loading_light_white.png
new file mode 100644
index 000000000000..ee2a02b6c958
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_loading_light_white.png differ
diff --git a/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_normalUser.png b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_normalUser.png
new file mode 100644
index 000000000000..cf104f97ff45
Binary files /dev/null and b/app/screenshots/generic/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_normalUser.png differ
diff --git a/app/screenshots/generic/debug/richworkspaces_dark.png b/app/screenshots/generic/debug/richworkspaces_dark.png
new file mode 100644
index 000000000000..5a30083429f7
Binary files /dev/null and b/app/screenshots/generic/debug/richworkspaces_dark.png differ
diff --git a/app/screenshots/generic/debug/richworkspaces_light.png b/app/screenshots/generic/debug/richworkspaces_light.png
new file mode 100644
index 000000000000..9ebdf080a044
Binary files /dev/null and b/app/screenshots/generic/debug/richworkspaces_light.png differ
diff --git a/app/src/androidTest/AndroidManifest.xml b/app/src/androidTest/AndroidManifest.xml
new file mode 100644
index 000000000000..754410920f45
--- /dev/null
+++ b/app/src/androidTest/AndroidManifest.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
diff --git a/app/src/androidTest/assets/calendar.ics b/app/src/androidTest/assets/calendar.ics
new file mode 100644
index 000000000000..421cfeb464f5
--- /dev/null
+++ b/app/src/androidTest/assets/calendar.ics
@@ -0,0 +1,133 @@
+BEGIN:VCALENDAR
+PRODID:-//dummy@gmail.com//iCal Import/Export 3.18.0 Alpha1//
+ EN
+VERSION:2.0
+METHOD:PUBLISH
+CALSCALE:GREGORIAN
+X-WR-TIMEZONE:UTC
+BEGIN:VTIMEZONE
+TZID:Europe/Berlin
+LAST-MODIFIED:20201011T015911Z
+TZURL:http://tzurl.org/zoneinfo/Europe/Berlin
+X-LIC-LOCATION:Europe/Berlin
+X-PROLEPTIC-TZNAME:LMT
+BEGIN:STANDARD
+TZNAME:CET
+TZOFFSETFROM:+005328
+TZOFFSETTO:+0100
+DTSTART:18930401T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+DTSTART:19160430T230000
+RDATE:19400401T020000
+RDATE:19430329T020000
+RDATE:19460414T020000
+RDATE:19470406T030000
+RDATE:19480418T020000
+RDATE:19490410T020000
+RDATE:19800406T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+DTSTART:19161001T010000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+RDATE:19451118T030000
+RDATE:19461007T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+DTSTART:19170416T020000
+RRULE:FREQ=YEARLY;UNTIL=19180415T010000Z;BYMONTH=4;BYDAY=3MO
+END:DAYLIGHT
+BEGIN:STANDARD
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+DTSTART:19170917T030000
+RRULE:FREQ=YEARLY;UNTIL=19180916T010000Z;BYMONTH=9;BYDAY=3MO
+END:STANDARD
+BEGIN:DAYLIGHT
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+DTSTART:19440403T020000
+RRULE:FREQ=YEARLY;UNTIL=19450402T010000Z;BYMONTH=4;BYDAY=1MO
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZNAME:CEMT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+DTSTART:19450524T010000
+RDATE:19470511T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZNAME:CEST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+DTSTART:19450924T030000
+RDATE:19470629T030000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZNAME:CET
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+DTSTART:19460101T000000
+RDATE:19800101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+DTSTART:19471005T030000
+RRULE:FREQ=YEARLY;UNTIL=19491002T010000Z;BYMONTH=10;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+DTSTART:19800928T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYMONTH=9;BYDAY=-1SU
+END:STANDARD
+BEGIN:DAYLIGHT
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VEVENT
+DTSTAMP:20210820T083606Z
+UID:16294485666795adb8b4b08e94d3cb4445e1e3ee18fd9@nextcloud.com
+SUMMARY:Test event
+DESCRIPTION:Test event
+
+ORGANIZER:mailto:dummy@gmail.com
+LOCATION:
+STATUS:CONFIRMED
+DTSTART;TZID=Europe/Berlin:20210806T090000
+DTEND;TZID=Europe/Berlin:20210806T100000
+
+BEGIN:VALARM
+TRIGGER:-PT30M
+ACTION:DISPLAY
+DESCRIPTION:Test event
+END:VALARM
+END:VEVENT
+END:VCALENDAR
diff --git a/app/src/androidTest/assets/christine.jpg b/app/src/androidTest/assets/christine.jpg
new file mode 100644
index 000000000000..a8dd31fa0a06
Binary files /dev/null and b/app/src/androidTest/assets/christine.jpg differ
diff --git a/app/src/androidTest/assets/credentials.json b/app/src/androidTest/assets/credentials.json
new file mode 100644
index 000000000000..8e660495625c
--- /dev/null
+++ b/app/src/androidTest/assets/credentials.json
@@ -0,0 +1,4 @@
+{
+ "publicKey": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3wSNveXIhRsKl86pUnL7\n/AIAH+IJya5vqP0lv+yCBkd728szrLRYRWxPNC4VDbzyRHBr0RWj0ibsLJvU2OeF\n5p4er1tMIGgB0AEwiuDXBBz/RrxjPdhlilq7mvvqeUS2M3t5iroIxM6VEGQrhVrb\nb3U+7c6Lt7dIHAHEVOXnZiHYhhhduEmIzbsrAZFuMjlnWXTiMhuuWBf6t1nPyCHa\noA96loWibbvIsMegC73J3Ej5sgLkz/TjlrYmv6p3RGAEs74KHfggy4Fzw9TxBAAY\nyIX0NY8Rhb10XKrOSXrvRYuL/wkJ3P5XVK/NfsuLKbrhuUjDSgKplY9xCtOSaEPJ\nVQIDAQAB\n-----END PUBLIC KEY-----",
+ "certificate": "-----BEGIN CERTIFICATE-----\nMIIC9DCCAdygAwIBAgIBADANBgkqhkiG9w0BAQUFADATMREwDwYDVQQDDAhuYXJy\nYXRvcjAeFw0yNDA1MjcxMzEyNDVaFw00NDA1MjIxMzEyNDVaMBMxETAPBgNVBAMM\nCG5hcnJhdG9yMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjA2EEYeN\nc3BdVDPkJK/AWPB1kd9sWAonZt/V4sbAE6fGy4qU21xfInZQaMHyhqdMXga10juE\nJLPKuyyRz+qijASryW+WzCJ3A9QeHHO+CiLc09yuB80JRpH0oHsol6WrdO1n5zuH\nlPtAdCwi4OeRmvazfBysbP2gaUl7DxackqbMei8a0MoyDxUB11hp0tpyYAU1/sXZ\nLGh4R4q4/F2KlSeYY9D62OJ8wNTgv9AYF/HRxXxWmVftB1En/DdvVr1zJGraHiRm\nQbaEnmsSGK8QHHm4h37cfD5f7rW1WO5A8KyJKwluOIXjMfL1YijAPpNW6EHhSlfT\n5RVLCHxvrzMHewIDAQABo1MwUTAdBgNVHQ4EFgQUzT6RHEHtpdjr8N3ABJK0wpFt\n1PMwHwYDVR0jBBgwFoAUzT6RHEHtpdjr8N3ABJK0wpFt1PMwDwYDVR0TAQH/BAUw\nAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAJ1q3CSBHrLauOZAD56BeElgh/ahbegsE\nZ4w7q4FdhkixLIwe6yrMmSvpNTuxRDHUrVLXxQmN0X3Yb7BLNXnnIUfH9EozaV7p\nYjOLWD2XCfLJmpGIBVvqZhyZrTl69jkBaVHF78aj1vt+qKihHUAVnG+qGH0PFms+\nG0KyY8bNYg+2HQiSTva1kgGPUA/8nQNj3lwi+r03tgqbw88fQKRPeMUJWdh/yV9U\noBdPHt+TBsUFZQZP3lBBS9lYhDT9fNoGX12WPAEUjYNhHVX+Qdup8Mg3aUMITXXJ\nvlGsN1SknlLoN0RwBFbyH9BCzqAdEIj5qQM3YDzIIyyy6AAnswNEUg==\n-----END CERTIFICATE-----"
+}
diff --git a/src/androidTest/assets/decrypted.json b/app/src/androidTest/assets/decrypted.json
similarity index 100%
rename from src/androidTest/assets/decrypted.json
rename to app/src/androidTest/assets/decrypted.json
diff --git a/src/androidTest/assets/encrypted.json b/app/src/androidTest/assets/encrypted.json
similarity index 100%
rename from src/androidTest/assets/encrypted.json
rename to app/src/androidTest/assets/encrypted.json
diff --git a/src/androidTest/assets/encrypted/ia7OEEEyXMoRa1QWQk8r b/app/src/androidTest/assets/encrypted/ia7OEEEyXMoRa1QWQk8r
similarity index 100%
rename from src/androidTest/assets/encrypted/ia7OEEEyXMoRa1QWQk8r
rename to app/src/androidTest/assets/encrypted/ia7OEEEyXMoRa1QWQk8r
diff --git a/src/androidTest/assets/encrypted/n9WXAIXO2wRY4R8nXwmo b/app/src/androidTest/assets/encrypted/n9WXAIXO2wRY4R8nXwmo
similarity index 100%
rename from src/androidTest/assets/encrypted/n9WXAIXO2wRY4R8nXwmo
rename to app/src/androidTest/assets/encrypted/n9WXAIXO2wRY4R8nXwmo
diff --git a/app/src/androidTest/assets/gps.jpg b/app/src/androidTest/assets/gps.jpg
new file mode 100644
index 000000000000..b10ff38eb505
Binary files /dev/null and b/app/src/androidTest/assets/gps.jpg differ
diff --git a/src/androidTest/assets/ia7OEEEyXMoRa1QWQk8r b/app/src/androidTest/assets/ia7OEEEyXMoRa1QWQk8r
similarity index 100%
rename from src/androidTest/assets/ia7OEEEyXMoRa1QWQk8r
rename to app/src/androidTest/assets/ia7OEEEyXMoRa1QWQk8r
diff --git a/app/src/androidTest/assets/image.jpg b/app/src/androidTest/assets/image.jpg
new file mode 100644
index 000000000000..4fdbefd23804
Binary files /dev/null and b/app/src/androidTest/assets/image.jpg differ
diff --git a/app/src/androidTest/assets/imageFile.png b/app/src/androidTest/assets/imageFile.png
new file mode 100644
index 000000000000..3becc192b554
Binary files /dev/null and b/app/src/androidTest/assets/imageFile.png differ
diff --git a/app/src/androidTest/assets/java.md b/app/src/androidTest/assets/java.md
new file mode 100644
index 000000000000..bb5b5059db36
--- /dev/null
+++ b/app/src/androidTest/assets/java.md
@@ -0,0 +1,7 @@
+Java:
+
+```java
+private String getAppProcessName() {
+ return Application.getProcessName();
+}
+```
diff --git a/src/androidTest/assets/n9WXAIXO2wRY4R8nXwmo b/app/src/androidTest/assets/n9WXAIXO2wRY4R8nXwmo
similarity index 100%
rename from src/androidTest/assets/n9WXAIXO2wRY4R8nXwmo
rename to app/src/androidTest/assets/n9WXAIXO2wRY4R8nXwmo
diff --git a/app/src/androidTest/assets/paulette.jpg b/app/src/androidTest/assets/paulette.jpg
new file mode 100644
index 000000000000..acaef31e3235
Binary files /dev/null and b/app/src/androidTest/assets/paulette.jpg differ
diff --git a/src/androidTest/assets/srEPevoPqPZpPEaeDnS3 b/app/src/androidTest/assets/srEPevoPqPZpPEaeDnS3
similarity index 100%
rename from src/androidTest/assets/srEPevoPqPZpPEaeDnS3
rename to app/src/androidTest/assets/srEPevoPqPZpPEaeDnS3
diff --git a/app/src/androidTest/assets/test.pdf b/app/src/androidTest/assets/test.pdf
new file mode 100644
index 000000000000..46782a41cd73
Binary files /dev/null and b/app/src/androidTest/assets/test.pdf differ
diff --git a/app/src/androidTest/assets/vcard.vcf b/app/src/androidTest/assets/vcard.vcf
new file mode 100644
index 000000000000..a0f3ead188af
--- /dev/null
+++ b/app/src/androidTest/assets/vcard.vcf
@@ -0,0 +1,17 @@
+BEGIN:VCARD
+VERSION:3.0
+N:Mustermann;Erika;;Dr.;
+FN:Dr. Erika Mustermann
+ORG:Wikimedia
+ROLE:Kommunikation
+TITLE:Redaktion & Gestaltung
+PHOTO;VALUE=URL;TYPE=JPEG:http://commons.wikimedia.org/wiki/File:Erika_Mustermann_2010.jpg
+TEL;TYPE=WORK,VOICE:+49 221 9999123
+TEL;TYPE=HOME,VOICE:+49 221 1234567
+ADR;TYPE=HOME:;;Heidestraße 17;Köln;;51147;Germany
+EMAIL;TYPE=PREF,INTERNET:erika@mustermann.de
+URL:http://de.wikipedia.org/
+REV:2014-03-01T22:11:10Z
+END:VCARD
+
+## from https://de.wikipedia.org/wiki/VCard#vCard_3.0 on 27.07.2020
diff --git a/app/src/androidTest/assets/videoFile.mp4 b/app/src/androidTest/assets/videoFile.mp4
new file mode 100644
index 000000000000..52f6cb2f0b83
Binary files /dev/null and b/app/src/androidTest/assets/videoFile.mp4 differ
diff --git a/src/androidTest/disabledTests/AuthenticatorActivityTest.java b/app/src/androidTest/disabledTests/AuthenticatorActivityTest.java
similarity index 86%
rename from src/androidTest/disabledTests/AuthenticatorActivityTest.java
rename to app/src/androidTest/disabledTests/AuthenticatorActivityTest.java
index cebf636e865f..3f56bf33cbfb 100644
--- a/src/androidTest/disabledTests/AuthenticatorActivityTest.java
+++ b/app/src/androidTest/disabledTests/AuthenticatorActivityTest.java
@@ -1,20 +1,8 @@
-//**
-// * ownCloud Android client application
-// *
-// * Copyright (C) 2015 ownCloud Inc.
-// *
-// * This program is free software: you can redistribute it and/or modify
-// * it under the terms of the GNU General Public License version 2,
-// * as published by the Free Software Foundation.
-// *
-// * This program is distributed in the hope that it will be useful,
-// * but WITHOUT ANY WARRANTY; without even the implied warranty of
-// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// * GNU General Public License for more details.
-// *
-// * You should have received a copy of the GNU General Public License
-// * along with this program. If not, see .
+//*
+// * Nextcloud - Android Client
// *
+// * SPDX-FileCopyrightText: 2015 ownCloud Inc.
+// * SPDX-License-Identifier: GPL-2.0-only
// */
//
//package com.owncloud.android.authentication;
diff --git a/src/androidTest/disabledTests/uiautomator/InitialTest.java b/app/src/androidTest/disabledTests/uiautomator/InitialTest.java
similarity index 86%
rename from src/androidTest/disabledTests/uiautomator/InitialTest.java
rename to app/src/androidTest/disabledTests/uiautomator/InitialTest.java
index 0a1cba99340b..b548770d52bc 100644
--- a/src/androidTest/disabledTests/uiautomator/InitialTest.java
+++ b/app/src/androidTest/disabledTests/uiautomator/InitialTest.java
@@ -1,21 +1,10 @@
/*
- * Nextcloud Android client application
+ * Nextcloud - Android Client
*
- * Copyright (C) 2015 ownCloud Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
+ * SPDX-FileCopyrightText: 2018 Tobias Kaminsky
+ * SPDX-FileCopyrightText: 2015 ownCloud Inc.
+ * SPDX-License-Identifier: GPL-2.0-only AND (AGPL-3.0-or-later OR GPL-2.0-only)
*/
-
package com.owncloud.android.uiautomator;
import android.content.Intent;
diff --git a/app/src/androidTest/java/com/nextcloud/client/ActivitiesFragmentIT.kt b/app/src/androidTest/java/com/nextcloud/client/ActivitiesFragmentIT.kt
new file mode 100644
index 000000000000..737f77c10169
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/client/ActivitiesFragmentIT.kt
@@ -0,0 +1,161 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2026 Alper Ozturk
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+package com.nextcloud.client
+
+import android.view.View
+import androidx.test.core.app.ActivityScenario
+import androidx.test.core.app.ApplicationProvider
+import androidx.test.espresso.Espresso.onView
+import androidx.test.espresso.assertion.ViewAssertions.matches
+import androidx.test.espresso.contrib.DrawerActions
+import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
+import androidx.test.espresso.matcher.ViewMatchers.isRoot
+import androidx.test.espresso.matcher.ViewMatchers.withId
+import com.owncloud.android.AbstractIT
+import com.owncloud.android.R
+import com.owncloud.android.lib.resources.activities.model.Activity
+import com.owncloud.android.lib.resources.activities.model.RichElement
+import com.owncloud.android.lib.resources.activities.model.RichObject
+import com.owncloud.android.lib.resources.activities.models.PreviewObject
+import com.owncloud.android.lib.resources.status.OCCapability
+import com.owncloud.android.ui.fragment.ActivitiesFragment
+import com.owncloud.android.ui.navigation.NavigatorActivity
+import com.owncloud.android.ui.navigation.NavigatorScreen
+import com.owncloud.android.utils.ScreenshotTest
+import org.junit.Test
+import java.util.GregorianCalendar
+
+class ActivitiesFragmentIT : AbstractIT() {
+ private val testClassName = "com.nextcloud.client.ActivitiesFragmentIT"
+
+ private fun ActivityScenario.getFragment(): ActivitiesFragment? {
+ var fragment: ActivitiesFragment? = null
+ onActivity { activity ->
+ fragment = activity.supportFragmentManager
+ .findFragmentByTag(NavigatorScreen.Activities.tag) as? ActivitiesFragment
+ }
+ return fragment
+ }
+
+ private fun launchActivitiesActivity(): ActivityScenario {
+ val intent = NavigatorActivity.intent(
+ ApplicationProvider.getApplicationContext(),
+ NavigatorScreen.Activities
+ )
+ return ActivityScenario.launch(intent)
+ }
+
+ @Test
+ @ScreenshotTest
+ fun openDrawer() {
+ launchActivitiesActivity().use { scenario ->
+ onView(withId(R.id.drawer_layout)).perform(DrawerActions.open())
+ scenario.onActivity { sut ->
+ val screenShotName = createName("${testClassName}_openDrawer", "")
+ screenshotViaName(sut, screenShotName)
+ }
+ onView(withId(R.id.drawer_layout)).check(matches(isDisplayed()))
+ }
+ }
+
+ @Test
+ @ScreenshotTest
+ fun loading() {
+ launchActivitiesActivity().use { scenario ->
+ val fragment = scenario.getFragment() ?: return
+ scenario.onActivity {
+ fragment.binding?.emptyList?.root?.visibility = View.GONE
+ fragment.binding?.swipeContainingList?.visibility = View.GONE
+ fragment.binding?.loadingContent?.visibility = View.VISIBLE
+ }
+ val screenShotName = createName("${testClassName}_loading", "")
+ onView(isRoot()).check(matches(isDisplayed()))
+ scenario.onActivity { sut -> screenshotViaName(sut, screenShotName) }
+ }
+ }
+
+ @Test
+ @ScreenshotTest
+ fun empty() {
+ launchActivitiesActivity().use { scenario ->
+ val fragment = scenario.getFragment() ?: return
+ scenario.onActivity {
+ fragment.showActivities(mutableListOf(), nextcloudClient, -1)
+ fragment.setProgressIndicatorState(false)
+ }
+ val screenShotName = createName("${testClassName}_empty", "")
+ onView(isRoot()).check(matches(isDisplayed()))
+ scenario.onActivity { sut -> screenshotViaName(sut, screenShotName) }
+ }
+ }
+
+ @Test
+ @ScreenshotTest
+ @SuppressWarnings("MagicNumber")
+ fun showActivities() {
+ val capability = OCCapability()
+ capability.versionMayor = 20
+ fileDataStorageManager.saveCapabilities(capability)
+
+ val date = GregorianCalendar()
+ date.set(2005, 4, 17, 10, 35, 30)
+
+ val richObjectList: ArrayList = ArrayList()
+ richObjectList.add(RichObject("file", "abc", "text.txt", "/text.txt", "link", "tag"))
+ richObjectList.add(RichObject("file", "1", "text.txt", "/text.txt", "link", "tag"))
+
+ val previewObjectList1: ArrayList = ArrayList()
+ previewObjectList1.add(PreviewObject(1, "source", "link", true, "text/plain", "view", "test1.txt"))
+
+ val previewObjectList3: ArrayList = ArrayList()
+ previewObjectList3.add(PreviewObject(1, "source", "link", true, "image/jpg", "view", "test1.jpg"))
+
+ val activities = mutableListOf(
+ Activity(
+ 1, date.time, date.time, "files", "file_changed", "user1", "user1",
+ "You changed text.txt", "", "icon", "link", "files", "1", "/text.txt",
+ previewObjectList1, RichElement("", richObjectList)
+ ),
+ Activity(
+ 1, date.time, date.time, "dav", "calendar_event", "user1", "user1",
+ "You have deleted calendar entry Appointment", "", "icon", "link", "calendar",
+ "35", "", ArrayList(), RichElement()
+ ),
+ Activity(
+ 1, date.time, date.time, "files", "file_changed", "user1", "user1",
+ "You changed image.jpg", "", "icon", "link", "files", "1", "/image.jpg",
+ previewObjectList3, RichElement("", richObjectList)
+ )
+ )
+
+ launchActivitiesActivity().use { scenario ->
+ val fragment = scenario.getFragment() ?: return
+ scenario.onActivity {
+ fragment.showActivities(activities as List, nextcloudClient, -1)
+ fragment.setProgressIndicatorState(false)
+ }
+ val screenShotName = createName("${testClassName}_showActivities", "")
+ onView(isRoot()).check(matches(isDisplayed()))
+ scenario.onActivity { sut -> screenshotViaName(sut, screenShotName) }
+ }
+ }
+
+ @Test
+ @ScreenshotTest
+ fun error() {
+ launchActivitiesActivity().use { scenario ->
+ val fragment = scenario.getFragment() ?: return
+ scenario.onActivity {
+ fragment.showEmptyContent("Error", "Error! Please try again later!")
+ fragment.setProgressIndicatorState(false)
+ }
+ val screenShotName = createName("${testClassName}_error", "")
+ onView(isRoot()).check(matches(isDisplayed()))
+ scenario.onActivity { sut -> screenshotViaName(sut, screenShotName) }
+ }
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/client/AuthenticatorActivityIT.java b/app/src/androidTest/java/com/nextcloud/client/AuthenticatorActivityIT.java
new file mode 100644
index 000000000000..4c704f0cae3e
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/client/AuthenticatorActivityIT.java
@@ -0,0 +1,44 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2021 Andy Scherzinger
+ * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+ */
+package com.nextcloud.client;
+
+import android.widget.TextView;
+
+import com.nextcloud.test.GrantStoragePermissionRule;
+import com.owncloud.android.AbstractIT;
+import com.owncloud.android.R;
+import com.owncloud.android.authentication.AuthenticatorActivity;
+import com.owncloud.android.utils.ScreenshotTest;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestRule;
+
+import androidx.test.core.app.ActivityScenario;
+
+
+public class AuthenticatorActivityIT extends AbstractIT {
+ private final String testClassName = "com.nextcloud.client.AuthenticatorActivityIT";
+
+ private static final String URL = "cloud.nextcloud.com";
+
+ @Rule
+ public final TestRule permissionRule = GrantStoragePermissionRule.grant();
+
+ @Test
+ @ScreenshotTest
+ public void login() {
+ try (ActivityScenario scenario = ActivityScenario.launch(AuthenticatorActivity.class)) {
+ scenario.onActivity(sut -> onIdleSync(() -> {
+ ((TextView) sut.findViewById(R.id.host_url_input)).setText(URL);
+ sut.runOnUiThread(() -> sut.getAccountSetupBinding().hostUrlInput.clearFocus());
+ String screenShotName = createName(testClassName + "_" + "login", "");
+ screenshotViaName(sut, screenShotName);
+ }));
+ }
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/client/CommunityFragmentIT.kt b/app/src/androidTest/java/com/nextcloud/client/CommunityFragmentIT.kt
new file mode 100644
index 000000000000..269200b408d3
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/client/CommunityFragmentIT.kt
@@ -0,0 +1,44 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2025 Alper Ozturk
+ * SPDX-FileCopyrightText: 2019 Tobias Kaminsky
+ * SPDX-FileCopyrightText: 2019 Nextcloud GmbH
+ * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+ */
+package com.nextcloud.client
+
+import androidx.test.core.app.ActivityScenario
+import androidx.test.espresso.Espresso.onView
+import androidx.test.espresso.assertion.ViewAssertions.matches
+import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
+import androidx.test.espresso.matcher.ViewMatchers.isRoot
+import com.nextcloud.test.GrantStoragePermissionRule.Companion.grant
+import com.owncloud.android.AbstractIT
+import com.owncloud.android.ui.navigation.NavigatorActivity
+import com.owncloud.android.ui.navigation.NavigatorScreen
+import com.owncloud.android.utils.ScreenshotTest
+import org.junit.Rule
+import org.junit.Test
+import org.junit.rules.TestRule
+
+class CommunityFragmentIT : AbstractIT() {
+ private val testClassName = "com.nextcloud.client.CommunityFragmentIT"
+
+ @get:Rule
+ var storagePermissionRules: TestRule = grant()
+
+ @Test
+ @ScreenshotTest
+ fun open() {
+ val intent = NavigatorActivity.intent(targetContext, NavigatorScreen.Community)
+ ActivityScenario.launch(intent).use { scenario ->
+ val screenShotName = createName(testClassName + "_" + "open", "")
+ onView(isRoot()).check(matches(isDisplayed()))
+
+ scenario.onActivity { sut ->
+ screenshotViaName(sut, screenShotName)
+ }
+ }
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/client/EndToEndAction.java b/app/src/androidTest/java/com/nextcloud/client/EndToEndAction.java
new file mode 100644
index 000000000000..08fab8c48669
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/client/EndToEndAction.java
@@ -0,0 +1,17 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2023 Tobias Kaminsky
+ * SPDX-FileCopyrightText: 2023 Nextcloud GmbH
+ * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+ */
+package com.nextcloud.client;
+
+public enum EndToEndAction {
+ CREATE_FOLDER,
+ GO_INTO_FOLDER,
+ GO_UP,
+ UPLOAD_FILE,
+ DOWNLOAD_FILE,
+ DELETE_FILE,
+}
diff --git a/app/src/androidTest/java/com/nextcloud/client/FileDisplayActivityIT.kt b/app/src/androidTest/java/com/nextcloud/client/FileDisplayActivityIT.kt
new file mode 100644
index 000000000000..0805ef65e365
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/client/FileDisplayActivityIT.kt
@@ -0,0 +1,293 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2025 Philipp Hasper
+ * SPDX-FileCopyrightText: 2019 Tobias Kaminsky
+ * SPDX-FileCopyrightText: 2019 Nextcloud GmbH
+ * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+ */
+
+package com.nextcloud.client
+
+import androidx.test.core.app.launchActivity
+import androidx.test.espresso.Espresso
+import androidx.test.espresso.Espresso.onView
+import androidx.test.espresso.IdlingRegistry
+import androidx.test.espresso.action.ViewActions.click
+import androidx.test.espresso.action.ViewActions.closeSoftKeyboard
+import androidx.test.espresso.assertion.ViewAssertions.doesNotExist
+import androidx.test.espresso.assertion.ViewAssertions.matches
+import androidx.test.espresso.contrib.DrawerActions
+import androidx.test.espresso.contrib.NavigationViewActions
+import androidx.test.espresso.contrib.RecyclerViewActions
+import androidx.test.espresso.matcher.ViewMatchers
+import androidx.test.espresso.matcher.ViewMatchers.hasDescendant
+import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
+import androidx.test.espresso.matcher.ViewMatchers.withEffectiveVisibility
+import androidx.test.espresso.matcher.ViewMatchers.withId
+import androidx.test.espresso.matcher.ViewMatchers.withText
+import com.nextcloud.test.RetryTestRule
+import com.owncloud.android.AbstractOnServerIT
+import com.owncloud.android.R
+import com.owncloud.android.lib.resources.files.CreateFolderRemoteOperation
+import com.owncloud.android.lib.resources.files.ExistenceCheckRemoteOperation
+import com.owncloud.android.lib.resources.files.ToggleFavoriteRemoteOperation
+import com.owncloud.android.lib.resources.shares.CreateShareRemoteOperation
+import com.owncloud.android.lib.resources.shares.OCShare
+import com.owncloud.android.lib.resources.shares.ShareType
+import com.owncloud.android.operations.CreateFolderOperation
+import com.owncloud.android.ui.activity.FileDisplayActivity
+import com.owncloud.android.ui.adapter.OCFileListItemViewHolder
+import com.owncloud.android.utils.EspressoIdlingResource
+import org.hamcrest.Matchers.allOf
+import org.junit.After
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertTrue
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+
+class FileDisplayActivityIT : AbstractOnServerIT() {
+
+ @Before
+ fun registerIdlingResource() {
+ IdlingRegistry.getInstance().register(EspressoIdlingResource.countingIdlingResource)
+ }
+
+ @After
+ fun unregisterIdlingResource() {
+ IdlingRegistry.getInstance().unregister(EspressoIdlingResource.countingIdlingResource)
+ }
+
+ @get:Rule
+ val retryRule = RetryTestRule() // showShares is flaky
+
+ @Suppress("DEPRECATION")
+ @Test
+ fun showShares() {
+ assertTrue(ExistenceCheckRemoteOperation("/shareToAdmin/", true).execute(client).isSuccess)
+ assertTrue(CreateFolderRemoteOperation("/shareToAdmin/", true).execute(client).isSuccess)
+ assertTrue(CreateFolderRemoteOperation("/shareToGroup/", true).execute(client).isSuccess)
+ assertTrue(CreateFolderRemoteOperation("/shareViaLink/", true).execute(client).isSuccess)
+ assertTrue(CreateFolderRemoteOperation("/noShare/", true).execute(client).isSuccess)
+
+ // share folder to user "admin"
+ assertTrue(
+ CreateShareRemoteOperation(
+ "/shareToAdmin/",
+ ShareType.USER,
+ "admin",
+ false,
+ "",
+ OCShare.MAXIMUM_PERMISSIONS_FOR_FOLDER
+ ).execute(client).isSuccess
+ )
+
+ // share folder via public link
+ assertTrue(
+ CreateShareRemoteOperation(
+ "/shareViaLink/",
+ ShareType.PUBLIC_LINK,
+ "",
+ true,
+ "",
+ OCShare.READ_PERMISSION_FLAG
+ ).execute(client).isSuccess
+ )
+
+ // share folder to group
+ assertTrue(
+ CreateShareRemoteOperation(
+ "/shareToGroup/",
+ ShareType.GROUP,
+ "users",
+ false,
+ "",
+ OCShare.NO_PERMISSION
+ ).execute(client).isSuccess
+ )
+
+ launchActivity().use { scenario ->
+ scenario.onActivity { sut ->
+ onIdleSync {
+ // open drawer
+ onView(withId(R.id.drawer_layout)).perform(DrawerActions.open())
+
+ // click "shared"
+ onView(withId(R.id.nav_view))
+ .perform(NavigationViewActions.navigateTo(R.id.nav_shared))
+ }
+ }
+ }
+ }
+
+ @Suppress("DEPRECATION")
+ @Test
+ fun allFiles() {
+ launchActivity().use { scenario ->
+ scenario.onActivity { sut ->
+ onIdleSync {
+ EspressoIdlingResource.increment()
+ // given test folder
+ assertTrue(
+ CreateFolderOperation("/test/", user, targetContext, storageManager)
+ .execute(client)
+ .isSuccess
+ )
+
+ // navigate into it
+ val test = storageManager.getFileByPath("/test/")
+ sut.file = test
+ sut.startSyncFolderOperation(test, false)
+ assertEquals(storageManager.getFileByPath("/test/"), sut.currentDir)
+ EspressoIdlingResource.decrement()
+
+ // open drawer
+ onView(withId(R.id.drawer_layout)).perform(DrawerActions.open())
+
+ // click "all files"
+ onView(withId(R.id.nav_view))
+ .perform(NavigationViewActions.navigateTo(R.id.nav_all_files))
+
+ // then should be in root again
+ assertEquals(storageManager.getFileByPath("/"), sut.currentDir)
+ }
+ }
+ }
+ }
+
+ private fun checkToolbarTitle(childFolder: String) {
+ onView(withId(R.id.appbar)).check(
+ matches(
+ hasDescendant(
+ withText(childFolder)
+ )
+ )
+ )
+ }
+
+ @Suppress("DEPRECATION")
+ @Test
+ fun browseFavoriteAndBack() {
+ EspressoIdlingResource.increment()
+ // Create folder structure
+ val topFolder = "folder1"
+
+ CreateFolderOperation("/$topFolder/", user, targetContext, storageManager)
+ .execute(client)
+ ToggleFavoriteRemoteOperation(true, "/$topFolder/")
+ .execute(client)
+ EspressoIdlingResource.decrement()
+
+ launchActivity().use { scenario ->
+ scenario.onActivity { sut ->
+ onIdleSync {
+ // navigate to favorites
+ onView(withId(R.id.drawer_layout)).perform(DrawerActions.open())
+ onView(withId(R.id.nav_view))
+ .perform(NavigationViewActions.navigateTo(R.id.nav_favorites))
+
+ // check sort button is not shown, favorites are not sortable
+ onView(
+ withId(R.id.sort_button)
+ ).check(matches(withEffectiveVisibility(ViewMatchers.Visibility.GONE)))
+
+ // browse into folder
+ onView(withId(R.id.list_root))
+ .perform(closeSoftKeyboard())
+ .perform(
+ RecyclerViewActions.actionOnItemAtPosition(
+ 0,
+ click()
+ )
+ )
+ checkToolbarTitle(topFolder)
+ // sort button should now be visible
+ onView(withId(R.id.sort_button)).check(matches(ViewMatchers.isDisplayed()))
+
+ // browse back, should be back to All Files
+ Espresso.pressBack()
+ checkToolbarTitle(sut.getString(R.string.app_name))
+ onView(withId(R.id.sort_button)).check(matches(ViewMatchers.isDisplayed()))
+ }
+ }
+ }
+ }
+
+ @Suppress("DEPRECATION")
+ @Test
+ fun switchToGridView() {
+ launchActivity().use { scenario ->
+ scenario.onActivity { sut ->
+ onIdleSync {
+ assertTrue(
+ CreateFolderOperation("/test/", user, targetContext, storageManager)
+ .execute(client)
+ .isSuccess
+ )
+ onView(withId(R.id.switch_grid_view_button)).perform(click())
+ }
+ }
+ }
+ }
+
+ @Test
+ fun openAccountSwitcher() {
+ launchActivity().use { scenario ->
+ scenario.onActivity { sut ->
+ onIdleSync {
+ onView(withId(R.id.switch_account_button)).perform(click())
+ }
+ }
+ }
+ }
+
+ @Test
+ fun testShowAndDismissLoadingDialog() {
+ launchActivity().use { scenario ->
+ val loadingText = "Some text displayed while loading"
+
+ // Test that display works
+ scenario.onActivity { sut ->
+ sut.showLoadingDialog(loadingText)
+ }
+ onView(withText(loadingText))
+ .check(matches(isDisplayed()))
+
+ // Test that hiding works
+ scenario.onActivity { sut ->
+ sut.dismissLoadingDialog()
+ }
+ onView(allOf(withText(loadingText), isDisplayed()))
+ .check(doesNotExist())
+
+ // Test that there is no timing issue when hiding the dialog directly after.
+ // This timing issue was reproducible when testing RemoveFilesDialogFragment#removeFiles
+ // as well as sporadically "in the wild".
+ scenario.onActivity { sut ->
+ sut.showLoadingDialog(loadingText)
+ sut.dismissLoadingDialog()
+ }
+ onView(allOf(withText(loadingText), isDisplayed()))
+ .check(doesNotExist())
+ // Wait for a potential timing issue - dialog appearing belatedly
+ Thread.sleep(1000)
+ onView(allOf(withText(loadingText), isDisplayed()))
+ .check(doesNotExist())
+
+ // Test that multiple display calls after another don't cause a timing issue
+ scenario.onActivity { sut ->
+ sut.showLoadingDialog(loadingText)
+ sut.showLoadingDialog(loadingText)
+ sut.showLoadingDialog(loadingText)
+ sut.dismissLoadingDialog()
+ }
+ onView(allOf(withText(loadingText), isDisplayed()))
+ .check(doesNotExist())
+ // Wait for a potential timing issue - dialog appearing belatedly
+ Thread.sleep(1000)
+ onView(allOf(withText(loadingText), isDisplayed()))
+ .check(doesNotExist())
+ }
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/client/FileDisplayActivityScreenshotIT.kt b/app/src/androidTest/java/com/nextcloud/client/FileDisplayActivityScreenshotIT.kt
new file mode 100644
index 000000000000..d727d1acd9aa
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/client/FileDisplayActivityScreenshotIT.kt
@@ -0,0 +1,139 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2024 Alper Ozturk
+ * SPDX-FileCopyrightText: 2019 Tobias Kaminsky
+ * SPDX-FileCopyrightText: 2019 Nextcloud GmbH
+ * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+ */
+package com.nextcloud.client
+
+import android.Manifest
+import androidx.test.core.app.launchActivity
+import androidx.test.espresso.Espresso.onView
+import androidx.test.espresso.assertion.ViewAssertions.matches
+import androidx.test.espresso.contrib.DrawerActions
+import androidx.test.espresso.contrib.NavigationViewActions
+import androidx.test.espresso.matcher.ViewMatchers
+import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
+import androidx.test.espresso.matcher.ViewMatchers.isRoot
+import androidx.test.rule.GrantPermissionRule
+import com.owncloud.android.AbstractIT
+import com.owncloud.android.R
+import com.owncloud.android.lib.common.utils.Log_OC
+import com.owncloud.android.ui.activity.FileDisplayActivity
+import com.owncloud.android.ui.fragment.EmptyListState
+import com.owncloud.android.utils.ScreenshotTest
+import org.junit.Assert
+import org.junit.Rule
+import org.junit.Test
+
+class FileDisplayActivityScreenshotIT : AbstractIT() {
+ private val testClassName = "com.nextcloud.client.FileDisplayActivityScreenshotIT"
+
+ @get:Rule
+ val permissionRule: GrantPermissionRule = GrantPermissionRule.grant(
+ Manifest.permission.WRITE_EXTERNAL_STORAGE,
+ Manifest.permission.POST_NOTIFICATIONS
+ )
+
+ companion object {
+ private const val TAG = "FileDisplayActivityScreenshotIT"
+ }
+
+ @Test
+ @ScreenshotTest
+ fun open() {
+ try {
+ launchActivity().use { scenario ->
+ scenario.onActivity { sut ->
+ sut.run {
+ listOfFilesFragment?.let {
+ it.setFabEnabled(false)
+ resetScrolling(true)
+ it.setEmptyListMessage(EmptyListState.LOADING)
+ it.isLoading = false
+ }
+ }
+ }
+
+ val screenShotName = createName(testClassName + "_" + "open", "")
+ onView(isRoot()).check(matches(isDisplayed()))
+
+ scenario.onActivity { sut ->
+ screenshotViaName(sut, screenShotName)
+ }
+ }
+ } catch (e: SecurityException) {
+ Log_OC.e(TAG, "Error caught at open $e")
+ }
+ }
+
+ @Test
+ @ScreenshotTest
+ fun showMediaThenAllFiles() {
+ try {
+ launchActivity().use { scenario ->
+ var activity: FileDisplayActivity? = null
+ scenario.onActivity { sut ->
+ activity = sut
+ val fragment = sut.listOfFilesFragment
+ Assert.assertNotNull(fragment)
+ fragment!!.setFabEnabled(false)
+ fragment.setEmptyListMessage(EmptyListState.LOADING)
+ fragment.isLoading = false
+ }
+
+ onView(ViewMatchers.withId(R.id.drawer_layout)).perform(DrawerActions.open())
+ onView(ViewMatchers.withId(R.id.nav_view))
+ .perform(NavigationViewActions.navigateTo(R.id.nav_gallery))
+ onView(ViewMatchers.withId(R.id.drawer_layout)).perform(DrawerActions.open())
+ onView(ViewMatchers.withId(R.id.nav_view))
+ .perform(NavigationViewActions.navigateTo(R.id.nav_all_files))
+
+ val fragment = activity!!.listOfFilesFragment
+ fragment!!.setFabEnabled(false)
+ fragment.setEmptyListMessage(EmptyListState.LOADING)
+ fragment.isLoading = false
+
+ val screenShotName = createName(testClassName + "_" + "showMediaThenAllFiles", "")
+ onView(isRoot()).check(matches(isDisplayed()))
+ screenshotViaName(activity, screenShotName)
+ }
+ } catch (e: SecurityException) {
+ Log_OC.e(TAG, "Error caught at open $e")
+ }
+ }
+
+ @Test
+ @ScreenshotTest
+ fun drawer() {
+ try {
+ launchActivity().use { scenario ->
+ onView(ViewMatchers.withId(R.id.drawer_layout)).perform(DrawerActions.open())
+
+ scenario.onActivity { sut ->
+ sut.run {
+ hideInfoBox()
+ resetScrolling(true)
+
+ listOfFilesFragment?.let {
+ it.setFabEnabled(false)
+ it.setEmptyListMessage(EmptyListState.LOADING)
+ it.isLoading = false
+ }
+ }
+ }
+
+ val screenShotName = createName(testClassName + "_" + "drawer", "")
+ onView(isRoot()).check(matches(isDisplayed()))
+
+ scenario.onActivity { sut ->
+ screenshotViaName(sut, screenShotName)
+ }
+ }
+ } catch (e: SecurityException) {
+ Log_OC.e(TAG, "Error caught at open $e")
+ }
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/client/FirstRunActivityIT.kt b/app/src/androidTest/java/com/nextcloud/client/FirstRunActivityIT.kt
new file mode 100644
index 000000000000..1c4e58d9084e
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/client/FirstRunActivityIT.kt
@@ -0,0 +1,36 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2025 Alper Ozturk
+ * SPDX-FileCopyrightText: 2019 Tobias Kaminsky
+ * SPDX-FileCopyrightText: 2019 Nextcloud GmbH
+ * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+ */
+package com.nextcloud.client
+
+import androidx.test.core.app.launchActivity
+import androidx.test.espresso.Espresso.onView
+import androidx.test.espresso.assertion.ViewAssertions.matches
+import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
+import androidx.test.espresso.matcher.ViewMatchers.isRoot
+import com.nextcloud.client.onboarding.FirstRunActivity
+import com.owncloud.android.AbstractIT
+import com.owncloud.android.utils.ScreenshotTest
+import org.junit.Test
+
+class FirstRunActivityIT : AbstractIT() {
+ private val testClassName = "com.nextcloud.client.FirstRunActivityIT"
+
+ @Test
+ @ScreenshotTest
+ fun open() {
+ launchActivity().use { scenario ->
+ val screenShotName = createName(testClassName + "_" + "open", "")
+ onView(isRoot()).check(matches(isDisplayed()))
+
+ scenario.onActivity { sut ->
+ screenshotViaName(sut, screenShotName)
+ }
+ }
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/client/SettingsActivityIT.kt b/app/src/androidTest/java/com/nextcloud/client/SettingsActivityIT.kt
new file mode 100644
index 000000000000..9b9d283af3f6
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/client/SettingsActivityIT.kt
@@ -0,0 +1,89 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2025 Alper Ozturk
+ * SPDX-FileCopyrightText: 2019 Tobias Kaminsky
+ * SPDX-FileCopyrightText: 2019 Nextcloud GmbH
+ * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+ */
+package com.nextcloud.client
+
+import android.content.Intent
+import android.os.Looper
+import androidx.test.core.app.launchActivity
+import androidx.test.espresso.Espresso.onView
+import androidx.test.espresso.assertion.ViewAssertions.matches
+import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
+import androidx.test.espresso.matcher.ViewMatchers.isRoot
+import com.nextcloud.test.GrantStoragePermissionRule.Companion.grant
+import com.owncloud.android.AbstractIT
+import com.owncloud.android.datamodel.ArbitraryDataProviderImpl
+import com.owncloud.android.ui.activity.RequestCredentialsActivity
+import com.owncloud.android.ui.activity.SettingsActivity
+import com.owncloud.android.utils.EncryptionUtils
+import com.owncloud.android.utils.ScreenshotTest
+import org.junit.Assert
+import org.junit.Rule
+import org.junit.Test
+import org.junit.rules.TestRule
+
+@Suppress("FunctionNaming")
+class SettingsActivityIT : AbstractIT() {
+ private val testClassName = "com.nextcloud.client.SettingsActivityIT"
+
+ @get:Rule
+ var storagePermissionRule: TestRule = grant()
+
+ @Test
+ @ScreenshotTest
+ fun open() {
+ launchActivity().use { scenario ->
+ val screenShotName = createName(testClassName + "_" + "open", "")
+ onView(isRoot()).check(matches(isDisplayed()))
+
+ scenario.onActivity { sut ->
+ screenshotViaName(sut, screenShotName)
+ }
+ }
+ }
+
+ @Test
+ @ScreenshotTest
+ fun showMnemonic_Error() {
+ launchActivity().use { scenario ->
+ val screenShotName = createName(testClassName + "_" + "showMnemonic_Error", "")
+ onView(isRoot()).check(matches(isDisplayed()))
+
+ scenario.onActivity { sut ->
+ sut.handleMnemonicRequest(null)
+ screenshotViaName(sut, screenShotName)
+ }
+ }
+ }
+
+ @Suppress("DEPRECATION")
+ @Test
+ fun showMnemonic() {
+ if (Looper.myLooper() == null) {
+ Looper.prepare()
+ }
+ val intent = Intent().apply {
+ putExtra(RequestCredentialsActivity.KEY_CHECK_RESULT, RequestCredentialsActivity.KEY_CHECK_RESULT_TRUE)
+ }
+
+ ArbitraryDataProviderImpl(targetContext).run {
+ storeOrUpdateKeyValue(user.accountName, EncryptionUtils.MNEMONIC, "Secret mnemonic")
+ }
+
+ launchActivity().use { scenario ->
+ onView(isRoot()).check(matches(isDisplayed()))
+
+ scenario.onActivity { sut ->
+ sut.handleMnemonicRequest(intent)
+ }
+
+ Looper.myLooper()?.quitSafely()
+ Assert.assertTrue(true)
+ }
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/client/SyncedFoldersActivityIT.kt b/app/src/androidTest/java/com/nextcloud/client/SyncedFoldersActivityIT.kt
new file mode 100644
index 000000000000..6ae0157b6706
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/client/SyncedFoldersActivityIT.kt
@@ -0,0 +1,104 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2025 Alper Ozturk
+ * SPDX-FileCopyrightText: 2020 Tobias Kaminsky
+ * SPDX-FileCopyrightText: 2020 Nextcloud GmbH
+ * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+ */
+package com.nextcloud.client
+
+import android.content.Intent
+import android.os.Looper
+import androidx.appcompat.app.AlertDialog
+import androidx.test.core.app.launchActivity
+import androidx.test.espresso.Espresso.onView
+import androidx.test.espresso.assertion.ViewAssertions.matches
+import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
+import androidx.test.espresso.matcher.ViewMatchers.isRoot
+import com.nextcloud.client.preferences.SubFolderRule
+import com.owncloud.android.AbstractIT
+import com.owncloud.android.datamodel.MediaFolderType
+import com.owncloud.android.datamodel.SyncedFolder
+import com.owncloud.android.datamodel.SyncedFolderDisplayItem
+import com.owncloud.android.ui.activity.SyncedFoldersActivity
+import com.owncloud.android.ui.dialog.SyncedFolderPreferencesDialogFragment.Companion.newInstance
+import com.owncloud.android.utils.ScreenshotTest
+import org.junit.Test
+
+class SyncedFoldersActivityIT : AbstractIT() {
+ private val testClassName = "com.nextcloud.client.SyncedFoldersActivityIT"
+
+ @Test
+ @ScreenshotTest
+ fun open() {
+ launchActivity().use { scenario ->
+ val screenShotName = createName(testClassName + "_" + "open", "")
+ onView(isRoot()).check(matches(isDisplayed()))
+
+ scenario.onActivity { sut ->
+ sut.adapter.clear()
+ screenshotViaName(sut.binding.emptyList.emptyListView, screenShotName)
+ }
+ }
+ }
+
+ @Test
+ @ScreenshotTest
+ fun testSyncedFolderDialog() {
+ val item = SyncedFolderDisplayItem(
+ 1,
+ "/sdcard/DCIM/",
+ "/InstantUpload/",
+ true,
+ false,
+ false,
+ true,
+ "test@https://nextcloud.localhost",
+ 0,
+ 0,
+ true,
+ 1000,
+ "Name",
+ MediaFolderType.IMAGE,
+ false,
+ SubFolderRule.YEAR_MONTH,
+ false,
+ SyncedFolder.NOT_SCANNED_YET
+ )
+
+ val intent = Intent(targetContext, SyncedFoldersActivity::class.java)
+ launchActivity(intent).use { scenario ->
+ val screenShotName = createName(testClassName + "_" + "testSyncedFolderDialog", "")
+ onView(isRoot()).check(matches(isDisplayed()))
+
+ scenario.onActivity { sut ->
+ val fragment = newInstance(item, 0)
+ fragment!!.show(sut.supportFragmentManager, "")
+ screenshot(fragment.requireDialog().window?.decorView, screenShotName)
+ }
+ }
+ }
+
+ @Test
+ @ScreenshotTest
+ fun showPowerCheckDialog() {
+ if (Looper.myLooper() == null) {
+ Looper.prepare()
+ }
+
+ val intent = Intent(targetContext, SyncedFoldersActivity::class.java)
+
+ launchActivity(intent).use { scenario ->
+ var dialog: AlertDialog? = null
+ scenario.onActivity { sut ->
+ dialog = sut.buildPowerCheckDialog()
+ sut.showPowerCheckDialog()
+ }
+
+ val screenShotName = createName(testClassName + "_" + "showPowerCheckDialog", "")
+ onView(isRoot()).check(matches(isDisplayed()))
+ screenshot(dialog!!.window?.decorView, screenShotName)
+ }
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/client/TestRunner.kt b/app/src/androidTest/java/com/nextcloud/client/TestRunner.kt
new file mode 100644
index 000000000000..d5e0227cb6a2
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/client/TestRunner.kt
@@ -0,0 +1,21 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2025 Alper Ozturk
+ * SPDX-FileCopyrightText: 2023 Ãlvaro Brey
+ * SPDX-FileCopyrightText: 2019-2024 Nextcloud GmbH
+ * SPDX-FileCopyrightText: 2019 Tobias Kaminsky
+ * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+ */
+package com.nextcloud.client
+
+import android.app.Application
+import android.content.Context
+import androidx.test.runner.AndroidJUnitRunner
+import com.nextcloud.test.TestMainApp
+
+class TestRunner : AndroidJUnitRunner() {
+ @Throws(ClassNotFoundException::class, IllegalAccessException::class, InstantiationException::class)
+ override fun newApplication(cl: ClassLoader, className: String, context: Context): Application =
+ newApplication(TestMainApp::class.java, context)
+}
diff --git a/app/src/androidTest/java/com/nextcloud/client/UploadListActivityActivityIT.kt b/app/src/androidTest/java/com/nextcloud/client/UploadListActivityActivityIT.kt
new file mode 100644
index 000000000000..64fb9cd3632c
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/client/UploadListActivityActivityIT.kt
@@ -0,0 +1,41 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2025 Alper Ozturk
+ * SPDX-FileCopyrightText: 2020 Tobias Kaminsky
+ * SPDX-FileCopyrightText: 2020 Nextcloud GmbH
+ * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+ */
+package com.nextcloud.client
+
+import androidx.test.core.app.launchActivity
+import androidx.test.espresso.Espresso.onView
+import androidx.test.espresso.assertion.ViewAssertions.matches
+import androidx.test.espresso.contrib.DrawerActions
+import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
+import androidx.test.espresso.matcher.ViewMatchers.isRoot
+import androidx.test.espresso.matcher.ViewMatchers.withId
+import com.owncloud.android.AbstractIT
+import com.owncloud.android.R
+import com.owncloud.android.ui.activity.UploadListActivity
+import com.owncloud.android.utils.ScreenshotTest
+import org.junit.Test
+
+class UploadListActivityActivityIT : AbstractIT() {
+ private val testClassName = "com.nextcloud.client.UploadListActivityActivityIT"
+
+ @Test
+ @ScreenshotTest
+ fun openDrawer() {
+ launchActivity().use { scenario ->
+ onView(isRoot()).check(matches(isDisplayed()))
+ onView(withId(R.id.drawer_layout)).perform(DrawerActions.open())
+
+ val screenShotName = createName(testClassName + "_" + "openDrawer", "")
+
+ scenario.onActivity { sut ->
+ screenshotViaName(sut, screenShotName)
+ }
+ }
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/client/account/AnonymousUserTest.kt b/app/src/androidTest/java/com/nextcloud/client/account/AnonymousUserTest.kt
new file mode 100644
index 000000000000..7def8527bf7a
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/client/account/AnonymousUserTest.kt
@@ -0,0 +1,40 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2020 Chris Narkiewicz
+ * SPDX-FileCopyrightText: 2020 Nextcloud GmbH
+ * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+ */
+package com.nextcloud.client.account
+
+import android.os.Parcel
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import org.junit.Assert
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+class AnonymousUserTest {
+ @Test
+ fun anonymousUserImplementsParcelable() {
+ // GIVEN
+ // anonymous user instance
+ val original = AnonymousUser("test_account")
+
+ // WHEN
+ // instance is serialized into Parcel
+ // instance is retrieved from Parcel
+ val parcel = Parcel.obtain()
+ parcel.setDataPosition(0)
+ parcel.writeParcelable(original, 0)
+ parcel.setDataPosition(0)
+ val retrieved = parcel.readParcelable(User::class.java.classLoader)
+
+ // THEN
+ // retrieved instance in distinct
+ // instances are equal
+ Assert.assertNotSame(original, retrieved)
+ Assert.assertTrue(retrieved is AnonymousUser)
+ Assert.assertEquals(original, retrieved)
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/client/account/MockUserTest.kt b/app/src/androidTest/java/com/nextcloud/client/account/MockUserTest.kt
new file mode 100644
index 000000000000..f45afff06fbe
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/client/account/MockUserTest.kt
@@ -0,0 +1,58 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2020 Chris Narkiewicz
+ * SPDX-FileCopyrightText: 2020 Nextcloud GmbH
+ * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+ */
+package com.nextcloud.client.account
+
+import android.os.Parcel
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertNotSame
+import org.junit.Assert.assertTrue
+import org.junit.Test
+
+class MockUserTest {
+
+ private companion object {
+ const val ACCOUNT_NAME = "test_account_name"
+ const val ACCOUNT_TYPE = "test_account_type"
+ }
+
+ @Test
+ fun mock_user_is_parcelable() {
+ // GIVEN
+ // mock user instance
+ val original = MockUser(ACCOUNT_NAME, ACCOUNT_TYPE)
+
+ // WHEN
+ // instance is serialized into Parcel
+ // instance is retrieved from Parcel
+ val parcel = Parcel.obtain()
+ parcel.setDataPosition(0)
+ parcel.writeParcelable(original, 0)
+ parcel.setDataPosition(0)
+ val retrieved = parcel.readParcelable(User::class.java.classLoader)
+
+ // THEN
+ // retrieved instance in distinct
+ // instances are equal
+ assertNotSame(original, retrieved)
+ assertTrue(retrieved is MockUser)
+ assertEquals(original, retrieved)
+ }
+
+ @Test
+ fun mock_user_has_platform_account() {
+ // GIVEN
+ // mock user instance
+ val mock = MockUser(ACCOUNT_NAME, ACCOUNT_TYPE)
+
+ // THEN
+ // can convert to platform account
+ val account = mock.toPlatformAccount()
+ assertEquals(ACCOUNT_NAME, account.name)
+ assertEquals(ACCOUNT_TYPE, account.type)
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/client/account/OwnCloudClientManagerTest.java b/app/src/androidTest/java/com/nextcloud/client/account/OwnCloudClientManagerTest.java
new file mode 100644
index 000000000000..1c832c121934
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/client/account/OwnCloudClientManagerTest.java
@@ -0,0 +1,64 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2019 Tobias Kaminsky
+ * SPDX-FileCopyrightText: 2019 Nextcloud GmbH
+ * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+ */
+package com.nextcloud.client.account;
+
+import android.accounts.Account;
+import android.accounts.AccountManager;
+import android.accounts.AuthenticatorException;
+import android.accounts.OperationCanceledException;
+import android.net.Uri;
+import android.os.Bundle;
+
+import com.owncloud.android.AbstractOnServerIT;
+import com.owncloud.android.lib.common.OwnCloudAccount;
+import com.owncloud.android.lib.common.OwnCloudClient;
+import com.owncloud.android.lib.common.OwnCloudClientManager;
+import com.owncloud.android.lib.common.accounts.AccountUtils;
+
+import org.junit.Test;
+
+import java.io.IOException;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+
+import static org.junit.Assert.assertEquals;
+
+public class OwnCloudClientManagerTest extends AbstractOnServerIT {
+
+ /**
+ * Like on files app we create & store an account in Android's account manager.
+ */
+ @Test
+ public void testUserId() throws OperationCanceledException, AuthenticatorException, IOException,
+ AccountUtils.AccountNotFoundException {
+ Bundle arguments = InstrumentationRegistry.getArguments();
+
+ Uri url = Uri.parse(arguments.getString("TEST_SERVER_URL"));
+ String loginName = arguments.getString("TEST_SERVER_USERNAME");
+ String password = arguments.getString("TEST_SERVER_PASSWORD");
+
+ AccountManager accountManager = AccountManager.get(targetContext);
+ String accountName = AccountUtils.buildAccountName(url, loginName);
+ Account newAccount = new Account(accountName, "nextcloud");
+
+ accountManager.addAccountExplicitly(newAccount, password, null);
+ accountManager.setUserData(newAccount, AccountUtils.Constants.KEY_OC_BASE_URL, url.toString());
+ accountManager.setUserData(newAccount, AccountUtils.Constants.KEY_USER_ID, loginName);
+
+ OwnCloudClientManager manager = new OwnCloudClientManager();
+ OwnCloudAccount account = new OwnCloudAccount(newAccount, targetContext);
+
+ OwnCloudClient client = manager.getClientFor(account, targetContext);
+
+ assertEquals(loginName, client.getUserId());
+
+ accountManager.removeAccountExplicitly(newAccount);
+
+ assertEquals(1, accountManager.getAccounts().length);
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/client/account/RegisteredUserTest.kt b/app/src/androidTest/java/com/nextcloud/client/account/RegisteredUserTest.kt
new file mode 100644
index 000000000000..d429c4a641d8
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/client/account/RegisteredUserTest.kt
@@ -0,0 +1,106 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2020 Chris Narkiewicz
+ * SPDX-FileCopyrightText: 2020 Nextcloud GmbH
+ * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+ */
+package com.nextcloud.client.account
+
+import android.accounts.Account
+import android.net.Uri
+import android.os.Parcel
+import com.owncloud.android.lib.common.OwnCloudAccount
+import com.owncloud.android.lib.common.OwnCloudBasicCredentials
+import com.owncloud.android.lib.resources.status.NextcloudVersion
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertNotSame
+import org.junit.Assert.assertTrue
+import org.junit.Before
+import org.junit.Test
+import java.net.URI
+
+class RegisteredUserTest {
+
+ private companion object {
+ fun buildTestUser(accountName: String): RegisteredUser {
+ val uri = Uri.parse("https://nextcloud.localhost")
+ val credentials = OwnCloudBasicCredentials("user", "pass")
+ val account = Account(accountName, "test-type")
+ val ownCloudAccount = OwnCloudAccount(uri, credentials)
+ val server = Server(
+ uri = URI(uri.toString()),
+ version = NextcloudVersion.nextcloud_31
+ )
+ return RegisteredUser(
+ account = account,
+ ownCloudAccount = ownCloudAccount,
+ server = server
+ )
+ }
+ }
+
+ private lateinit var user: RegisteredUser
+
+ @Before
+ fun setUp() {
+ user = buildTestUser("test@nextcloud.localhost")
+ }
+
+ @Test
+ fun registeredUserImplementsParcelable() {
+ // GIVEN
+ // registered user instance
+
+ // WHEN
+ // instance is serialized into Parcel
+ // instance is retrieved from Parcel
+ val parcel = Parcel.obtain()
+ parcel.setDataPosition(0)
+ parcel.writeParcelable(user, 0)
+ parcel.setDataPosition(0)
+ val deserialized = parcel.readParcelable(User::class.java.classLoader)
+
+ // THEN
+ // retrieved instance in distinct
+ // instances are equal
+ assertNotSame(user, deserialized)
+ assertTrue(deserialized is RegisteredUser)
+ assertEquals(user, deserialized)
+ }
+
+ @Test
+ fun accountNamesEquality() {
+ // GIVEN
+ // registered user instance with lower-case account name
+ // registered user instance with mixed-case account name
+ val user1 = buildTestUser("account_name")
+ val user2 = buildTestUser("Account_Name")
+
+ // WHEN
+ // account names are checked for equality
+ val equal = user1.nameEquals(user2)
+
+ // THEN
+ // account names are equal
+ assertTrue(equal)
+ }
+
+ @Test
+ fun accountNamesEqualityCheckIsNullSafe() {
+ // GIVEN
+ // registered user instance with lower-case account name
+ // null account
+ val user1 = buildTestUser("account_name")
+ val user2: User? = null
+
+ // WHEN
+ // account names are checked for equality against null
+ val equal = user1.nameEquals(user2)
+
+ // THEN
+ // account names are not equal
+ assertFalse(equal)
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/client/account/UserAccountManagerImplTest.java b/app/src/androidTest/java/com/nextcloud/client/account/UserAccountManagerImplTest.java
new file mode 100644
index 000000000000..053759d18acb
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/client/account/UserAccountManagerImplTest.java
@@ -0,0 +1,79 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2019-2023 Tobias Kaminsky
+ * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+ */
+package com.nextcloud.client.account;
+
+import android.accounts.Account;
+import android.accounts.AccountManager;
+import android.os.Bundle;
+
+import com.nextcloud.client.preferences.AppPreferences;
+import com.nextcloud.client.preferences.AppPreferencesImpl;
+import com.owncloud.android.AbstractOnServerIT;
+import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.lib.common.accounts.AccountUtils;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import static junit.framework.TestCase.assertEquals;
+import static junit.framework.TestCase.assertNull;
+import static junit.framework.TestCase.assertTrue;
+import static org.junit.Assert.assertFalse;
+
+public class UserAccountManagerImplTest extends AbstractOnServerIT {
+
+ private AccountManager accountManager;
+
+ @Before
+ public void setUp() {
+ accountManager = AccountManager.get(targetContext);
+ }
+
+ @Test
+ public void updateOneAccount() {
+ AppPreferences appPreferences = AppPreferencesImpl.fromContext(targetContext);
+ UserAccountManagerImpl sut = new UserAccountManagerImpl(targetContext, accountManager);
+ assertEquals(1, sut.getAccounts().length);
+ assertFalse(appPreferences.isUserIdMigrated());
+
+ Account account = sut.getAccounts()[0];
+
+ // for testing remove userId
+ accountManager.setUserData(account, AccountUtils.Constants.KEY_USER_ID, null);
+ assertNull(accountManager.getUserData(account, AccountUtils.Constants.KEY_USER_ID));
+
+ boolean success = sut.migrateUserId();
+ assertTrue(success);
+
+ Bundle arguments = androidx.test.platform.app.InstrumentationRegistry.getArguments();
+ String userId = arguments.getString("TEST_SERVER_USERNAME");
+
+ // assume that userId == loginname (as we manually set it)
+ assertEquals(userId, accountManager.getUserData(account, AccountUtils.Constants.KEY_USER_ID));
+ }
+
+ @Test
+ public void checkName() {
+ UserAccountManagerImpl sut = new UserAccountManagerImpl(targetContext, accountManager);
+
+ Account owner = new Account("John@nextcloud.local", "nextcloud");
+ Account account1 = new Account("John@nextcloud.local", "nextcloud");
+ Account account2 = new Account("john@nextcloud.local", "nextcloud");
+
+ OCFile file1 = new OCFile("/test1.pdf");
+ file1.setOwnerId("John");
+
+ assertTrue(sut.accountOwnsFile(file1, owner));
+ assertTrue(sut.accountOwnsFile(file1, account1));
+ assertTrue(sut.accountOwnsFile(file1, account2));
+
+ file1.setOwnerId("john");
+ assertTrue(sut.accountOwnsFile(file1, owner));
+ assertTrue(sut.accountOwnsFile(file1, account1));
+ assertTrue(sut.accountOwnsFile(file1, account2));
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/client/assistant/AssistantRepositoryTests.kt b/app/src/androidTest/java/com/nextcloud/client/assistant/AssistantRepositoryTests.kt
new file mode 100644
index 000000000000..d2d333f4797f
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/client/assistant/AssistantRepositoryTests.kt
@@ -0,0 +1,104 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2024 Alper Ozturk
+ * SPDX-FileCopyrightText: 2024 Nextcloud GmbH
+ * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+ */
+package com.nextcloud.client.assistant
+
+import com.nextcloud.client.assistant.repository.remote.AssistantRemoteRepositoryImpl
+import com.owncloud.android.AbstractOnServerIT
+import com.owncloud.android.lib.resources.assistant.v2.model.TaskTypeData
+import com.owncloud.android.lib.resources.status.NextcloudVersion
+import kotlinx.coroutines.runBlocking
+import org.junit.Assert.assertTrue
+import org.junit.Before
+import org.junit.Test
+
+@Suppress("MagicNumber")
+class AssistantRepositoryTests : AbstractOnServerIT() {
+
+ private var sut: AssistantRemoteRepositoryImpl? = null
+
+ @Before
+ fun setup() {
+ sut = AssistantRemoteRepositoryImpl(nextcloudClient, capability)
+ }
+
+ @Test
+ fun testGetTaskTypes() {
+ testOnlyOnServer(NextcloudVersion.nextcloud_28)
+
+ if (capability.assistant.isFalse) {
+ return
+ }
+
+ runBlocking {
+ val result = sut?.fetchTaskTypes()
+ assertTrue(result?.isNotEmpty() == true)
+ }
+ }
+
+ @Test
+ fun testGetTaskList() {
+ testOnlyOnServer(NextcloudVersion.nextcloud_28)
+
+ if (capability.assistant.isFalse) {
+ return
+ }
+
+ runBlocking {
+ val result = sut?.getTaskList("assistant")
+ assertTrue(result?.isEmpty() == true || (result?.size ?: 0) > 0)
+ }
+ }
+
+ @Test
+ fun testCreateTask() {
+ testOnlyOnServer(NextcloudVersion.nextcloud_28)
+
+ if (capability.assistant.isFalse) {
+ return
+ }
+
+ val input = "Give me some random output for test purpose"
+ val taskType = TaskTypeData(
+ "core:text2text",
+ "Free text to text prompt",
+ "Runs an arbitrary prompt through a language model that returns a reply",
+ emptyMap(),
+ emptyMap()
+ )
+
+ runBlocking {
+ val result = sut?.createTask(input, taskType)
+ assertTrue(result?.isSuccess == true)
+ }
+ }
+
+ @Test
+ fun testDeleteTask() {
+ testOnlyOnServer(NextcloudVersion.nextcloud_28)
+
+ if (capability.assistant.isFalse) {
+ return
+ }
+
+ testCreateTask()
+
+ sleep(120)
+
+ runBlocking {
+ val taskList = sut?.getTaskList("assistant")
+ assertTrue(taskList != null)
+
+ sleep(120)
+
+ assert((taskList?.size ?: 0) > 0)
+
+ val result = sut?.deleteTask(taskList!!.first().id)
+ assertTrue(result?.isSuccess == true)
+ }
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/client/database/migrations/MigrationTest.kt b/app/src/androidTest/java/com/nextcloud/client/database/migrations/MigrationTest.kt
new file mode 100644
index 000000000000..00e96dc84ca9
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/client/database/migrations/MigrationTest.kt
@@ -0,0 +1,82 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2023 Ãlvaro Brey
+ * SPDX-FileCopyrightText: 2023 Nextcloud GmbH
+ * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+ */
+package com.nextcloud.client.database.migrations
+
+import androidx.room.testing.MigrationTestHelper
+import androidx.sqlite.db.framework.FrameworkSQLiteOpenHelperFactory
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.platform.app.InstrumentationRegistry
+import com.nextcloud.client.database.NextcloudDatabase
+import org.junit.Assert.assertEquals
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import java.io.IOException
+
+@RunWith(AndroidJUnit4::class)
+class MigrationTest {
+
+ @get:Rule
+ val helper: MigrationTestHelper = MigrationTestHelper(
+ InstrumentationRegistry.getInstrumentation(),
+ NextcloudDatabase::class.java.canonicalName,
+ FrameworkSQLiteOpenHelperFactory()
+ )
+
+ @Test
+ @Throws(IOException::class)
+ fun migrate67to68() {
+ val nullId = 6
+ val notNullId = 7
+ val notNullLocalIdValue = 1234
+
+ var db = helper.createDatabase(TEST_DB, 67)
+
+ // create some data
+ db.apply {
+ execSQL(
+ "INSERT INTO filelist VALUES($nullId,'foo.zip','foo.zip','/foo.zip','/foo.zip',1,1643648081," +
+ "1643648081000,'application/zip',178382355,NULL,'test@nextcloud',1674554955638,0,0,''," +
+ "'f45028679b68652c6b345b5d8c9a5d63',0,'RGDNVW','00014889ocb5tqw7y2f3',NULL,0,0,0,0,NULL,0,NULL," +
+ "0,0,'test','test','','[]',NULL,'null',0,-1,NULL,NULL,NULL,0,0,NULL);"
+ )
+ execSQL(
+ "INSERT INTO filelist VALUES($notNullId,'foo.zip','foo.zip','/foo.zip','/foo.zip',1,1643648081," +
+ "1643648081000,'application/zip',178382355,NULL,'test@nextcloud',1674554955638,0,0,''," +
+ "'f45028679b68652c6b345b5d8c9a5d63',0,'RGDNVW','00014889ocb5tqw7y2f3',NULL,0,0,0,0,NULL,0,NULL," +
+ "0,0,'test','test','','[]',NULL,'null',0,-1,NULL,NULL,NULL,0,0,NULL);"
+ )
+ execSQL("UPDATE filelist SET local_id = NULL WHERE _id = $nullId")
+ execSQL("UPDATE filelist SET local_id = $notNullLocalIdValue WHERE _id = $notNullId")
+
+ close()
+ }
+
+ // run migration and validate schema matches
+ db = helper.runMigrationsAndValidate(TEST_DB, 68, true, Migration67to68())
+
+ // check values are correct
+ db.query("SELECT local_id FROM filelist WHERE _id=$nullId").use { cursor ->
+ cursor.moveToFirst()
+ val localId = cursor.getInt(cursor.getColumnIndex("local_id"))
+ assertEquals("NULL localId is not -1 after migration", -1, localId)
+ }
+
+ db.query("SELECT local_id FROM filelist WHERE _id=$notNullId").use { cursor ->
+ cursor.moveToFirst()
+ val localId = cursor.getInt(cursor.getColumnIndex("local_id"))
+ assertEquals("Not null localId is not the same after migration", notNullLocalIdValue, localId)
+ }
+
+ db.close()
+ }
+
+ companion object {
+ private const val TEST_DB = "migration-test"
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/client/documentscan/GeneratePDFUseCaseTest.kt b/app/src/androidTest/java/com/nextcloud/client/documentscan/GeneratePDFUseCaseTest.kt
new file mode 100644
index 000000000000..36402fb52d5f
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/client/documentscan/GeneratePDFUseCaseTest.kt
@@ -0,0 +1,71 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2023 Ãlvaro Brey
+ * SPDX-FileCopyrightText: 2023 Nextcloud GmbH
+ * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+ */
+package com.nextcloud.client.documentscan
+
+import android.graphics.pdf.PdfRenderer
+import android.os.ParcelFileDescriptor
+import com.nextcloud.client.logger.Logger
+import com.owncloud.android.AbstractIT
+import io.mockk.MockKAnnotations
+import io.mockk.impl.annotations.MockK
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertTrue
+import org.junit.Before
+import org.junit.Test
+import java.io.File
+
+internal class GeneratePDFUseCaseTest : AbstractIT() {
+
+ @MockK
+ private lateinit var logger: Logger
+
+ private lateinit var sut: GeneratePDFUseCase
+
+ @Before
+ fun setUp() {
+ MockKAnnotations.init(this, relaxed = true)
+ sut = GeneratePDFUseCase(logger)
+ }
+
+ @Test
+ fun invalidArguments_shouldReturnFalse() {
+ var result = sut.execute(emptyList(), "/test/foo.pdf")
+ assertFalse("Usecase does not indicate failure with invalid arguments", result)
+ result = sut.execute(listOf("/test.jpg"), "")
+ assertFalse("Usecase does not indicate failure with invalid arguments", result)
+ }
+
+ @Test
+ fun generatePdf_checkPages() {
+ // can't think of how to test the _content_ of the pages
+ val images = listOf(
+ getFile("image.jpg"),
+ getFile("christine.jpg")
+ ).map { it.path }
+
+ val output = "/sdcard/test.pdf"
+
+ val result = sut.execute(images, output)
+
+ assertTrue("Usecase does not indicate success", result)
+
+ val outputFile = File(output)
+
+ assertTrue("Output file does not exist", outputFile.exists())
+
+ ParcelFileDescriptor.open(outputFile, ParcelFileDescriptor.MODE_READ_ONLY).use {
+ PdfRenderer(it).use { renderer ->
+ val pageCount = renderer.pageCount
+ assertTrue("Page count is not correct", pageCount == 2)
+ }
+ }
+
+ // clean up
+ outputFile.delete()
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/client/etm/EtmActivityTest.kt b/app/src/androidTest/java/com/nextcloud/client/etm/EtmActivityTest.kt
new file mode 100644
index 000000000000..b81ce3777c24
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/client/etm/EtmActivityTest.kt
@@ -0,0 +1,48 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2020 Tobias Kaminsky
+ * SPDX-FileCopyrightText: 2020 Nextcloud GmbH
+ * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+ */
+package com.nextcloud.client.etm
+
+import androidx.test.core.app.launchActivity
+import androidx.test.espresso.Espresso.onView
+import androidx.test.espresso.assertion.ViewAssertions.matches
+import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
+import androidx.test.espresso.matcher.ViewMatchers.isRoot
+import com.owncloud.android.AbstractIT
+import com.owncloud.android.utils.ScreenshotTest
+import org.junit.Test
+
+class EtmActivityTest : AbstractIT() {
+ private val testClassName = "com.nextcloud.client.etm.EtmActivityTest"
+
+ @Test
+ @ScreenshotTest
+ fun overview() {
+ launchActivity().use { scenario ->
+ val screenShotName = createName(testClassName + "_" + "overview", "")
+ onView(isRoot()).check(matches(isDisplayed()))
+
+ scenario.onActivity { sut ->
+ screenshotViaName(sut, screenShotName)
+ }
+ }
+ }
+
+ @Test
+ @ScreenshotTest
+ fun accounts() {
+ launchActivity().use { scenario ->
+ val screenShotName = createName(testClassName + "_" + "accounts", "")
+ onView(isRoot()).check(matches(isDisplayed()))
+
+ scenario.onActivity { sut ->
+ sut.vm.onPageSelected(1)
+ screenshotViaName(sut, screenShotName)
+ }
+ }
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/client/files/DeepLinkHandlerTest.kt b/app/src/androidTest/java/com/nextcloud/client/files/DeepLinkHandlerTest.kt
new file mode 100644
index 000000000000..f6a71154ba4f
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/client/files/DeepLinkHandlerTest.kt
@@ -0,0 +1,222 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2020 Chris Narkiewicz
+ * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+ */
+package com.nextcloud.client.files
+
+import android.net.Uri
+import com.nextcloud.client.account.Server
+import com.nextcloud.client.account.User
+import com.nextcloud.client.account.UserAccountManager
+import com.owncloud.android.lib.resources.status.OwnCloudVersion
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertNotNull
+import org.junit.Assert.assertNull
+import org.junit.Assert.assertSame
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.Parameterized
+import org.junit.runners.Suite
+import org.mockito.Mock
+import org.mockito.MockitoAnnotations
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.whenever
+import java.net.URI
+
+@RunWith(Suite::class)
+@Suite.SuiteClasses(
+ DeepLinkHandlerTest.DeepLinkPattern::class,
+ DeepLinkHandlerTest.FileDeepLink::class
+)
+class DeepLinkHandlerTest {
+
+ @RunWith(Parameterized::class)
+ class DeepLinkPattern {
+
+ companion object {
+ private const val FILE_ID = 1234
+ private val SERVER_BASE_URLS = listOf(
+ "http://hostname.net",
+ "https://hostname.net",
+ "http://hostname.net/subdir1",
+ "https://hostname.net/subdir1",
+ "http://hostname.net/subdir1/subdir2",
+ "https://hostname.net/subdir1/subdir2",
+ "http://hostname.net/subdir1/subdir2/subdir3",
+ "https://hostname.net/subdir1/subdir2/subdir3"
+ )
+ private val INDEX_PHP_PATH = listOf(
+ "",
+ "/index.php"
+ )
+
+ @Parameterized.Parameters
+ @JvmStatic
+ fun urls(): Array> {
+ val testInput = mutableListOf>()
+ SERVER_BASE_URLS.forEach { baseUrl ->
+ INDEX_PHP_PATH.forEach { indexPath ->
+ val url = "$baseUrl$indexPath/f/$FILE_ID"
+ testInput.add(arrayOf(baseUrl, indexPath, "$FILE_ID", url))
+ }
+ }
+ return testInput.toTypedArray()
+ }
+ }
+
+ @Parameterized.Parameter(0)
+ lateinit var baseUrl: String
+
+ @Parameterized.Parameter(1)
+ lateinit var indexPath: String
+
+ @Parameterized.Parameter(2)
+ lateinit var fileId: String
+
+ @Parameterized.Parameter(3)
+ lateinit var url: String
+
+ @Test
+ fun matches_deep_link_patterns() {
+ val match = DeepLinkHandler.DEEP_LINK_PATTERN.matchEntire(url)
+ assertNotNull("Url [$url] does not match pattern", match)
+ assertEquals(baseUrl, match?.groupValues?.get(DeepLinkHandler.BASE_URL_GROUP_INDEX))
+ assertEquals(indexPath, match?.groupValues?.get(DeepLinkHandler.INDEX_PATH_GROUP_INDEX))
+ assertEquals(fileId, match?.groupValues?.get(DeepLinkHandler.FILE_ID_GROUP_INDEX))
+ }
+
+ @Test
+ fun no_trailing_path_allowed_after_file_id() {
+ val invalidUrl = "$url/"
+ val match = DeepLinkHandler.DEEP_LINK_PATTERN.matchEntire(invalidUrl)
+ assertNull(match)
+ }
+ }
+
+ class FileDeepLink {
+
+ companion object {
+ const val OTHER_SERVER_BASE_URL = "https://someotherserver.net"
+ const val SERVER_BASE_URL = "https://server.net"
+ const val FILE_ID = "1234567890"
+ val DEEP_LINK: Uri = Uri.parse("$SERVER_BASE_URL/index.php/f/$FILE_ID")
+
+ fun createMockUser(serverBaseUrl: String): User {
+ val user = mock()
+ val uri = URI.create(serverBaseUrl)
+ val server = Server(uri = uri, version = OwnCloudVersion.nextcloud_20)
+ whenever(user.server).thenReturn(server)
+ return user
+ }
+ }
+
+ @Mock
+ lateinit var userAccountManager: UserAccountManager
+ private lateinit var allUsers: List
+ private lateinit var handler: DeepLinkHandler
+
+ @Before
+ fun setUp() {
+ MockitoAnnotations.initMocks(this)
+ whenever(userAccountManager.allUsers).thenAnswer { allUsers }
+ allUsers = emptyList()
+ handler = DeepLinkHandler(userAccountManager)
+ }
+
+ @Test
+ fun no_user_can_open_file() {
+ // GIVEN
+ // no user capable of opening the file
+ allUsers = listOf(
+ createMockUser(OTHER_SERVER_BASE_URL),
+ createMockUser(OTHER_SERVER_BASE_URL)
+ )
+
+ // WHEN
+ // deep link is parsed
+ val match = handler.parseDeepLink(DEEP_LINK)
+
+ // THEN
+ // link is valid
+ // no user can open the file
+ assertNotNull(match)
+ assertEquals(0, match?.users?.size)
+ }
+
+ @Test
+ fun single_user_can_open_file() {
+ // GIVEN
+ // multiple users registered
+ // one user capable of opening the link
+ val matchingUser = createMockUser(SERVER_BASE_URL)
+ allUsers = listOf(
+ createMockUser(OTHER_SERVER_BASE_URL),
+ matchingUser,
+ createMockUser(OTHER_SERVER_BASE_URL)
+ )
+
+ // WHEN
+ // deep link is parsed
+ val match = handler.parseDeepLink(DEEP_LINK)
+
+ // THEN
+ // link can be opened by single user
+ assertNotNull(match)
+ assertSame(matchingUser, match?.users?.get(0))
+ }
+
+ @Test
+ fun multiple_users_can_open_file() {
+ // GIVEN
+ // mutltiple users registered
+ // multiple users capable of opening the link
+ val matchingUsers = setOf(
+ createMockUser(SERVER_BASE_URL),
+ createMockUser(SERVER_BASE_URL)
+ )
+ val otherUsers = setOf(
+ createMockUser(OTHER_SERVER_BASE_URL),
+ createMockUser(OTHER_SERVER_BASE_URL)
+ )
+ allUsers = listOf(matchingUsers, otherUsers).flatten()
+
+ // WHEN
+ // deep link is parsed
+ val match = handler.parseDeepLink(DEEP_LINK)
+
+ // THEN
+ // link can be opened by multiple matching users
+ assertNotNull(match)
+ assertEquals(matchingUsers, match?.users?.toSet())
+ }
+
+ @Test
+ fun match_contains_extracted_file_id() {
+ // WHEN
+ // valid deep file link is parsed
+ val match = handler.parseDeepLink(DEEP_LINK)
+
+ // THEN
+ // file id is returned
+ assertEquals(FILE_ID, match?.fileId)
+ }
+
+ @Test
+ fun no_match_for_invalid_link() {
+ // GIVEN
+ // invalid deep link
+ val invalidLink = Uri.parse("http://www.dodgylink.com/index.php")
+
+ // WHEN
+ // deep link is parsed
+ val match = handler.parseDeepLink(invalidLink)
+
+ // THEN
+ // no match
+ assertNull(match)
+ }
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/client/files/download/DownloaderServiceTest.kt b/app/src/androidTest/java/com/nextcloud/client/files/download/DownloaderServiceTest.kt
new file mode 100644
index 000000000000..d3434871ae9d
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/client/files/download/DownloaderServiceTest.kt
@@ -0,0 +1,46 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2020 Chris Narkiewicz
+ * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+ */
+package com.nextcloud.client.files.download
+
+import androidx.test.core.app.ApplicationProvider.getApplicationContext
+import androidx.test.rule.ServiceTestRule
+import com.nextcloud.client.account.MockUser
+import com.nextcloud.client.jobs.transfer.FileTransferService
+import io.mockk.MockKAnnotations
+import org.junit.Assert.assertTrue
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import java.util.concurrent.TimeUnit
+import java.util.concurrent.TimeoutException
+
+class DownloaderServiceTest {
+
+ @get:Rule
+ val service = ServiceTestRule.withTimeout(3, TimeUnit.SECONDS)
+
+ val user = MockUser()
+
+ @Before
+ fun setUp() {
+ MockKAnnotations.init(this, relaxed = true)
+ }
+
+ @Test(expected = TimeoutException::class)
+ fun cannot_bind_to_service_without_user() {
+ val intent = FileTransferService.createBindIntent(getApplicationContext(), user)
+ intent.removeExtra(FileTransferService.EXTRA_USER)
+ service.bindService(intent)
+ }
+
+ @Test
+ fun bind_with_user() {
+ val intent = FileTransferService.createBindIntent(getApplicationContext(), user)
+ val binder = service.bindService(intent)
+ assertTrue(binder is FileTransferService.Binder)
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/client/files/download/RegistryTest.kt b/app/src/androidTest/java/com/nextcloud/client/files/download/RegistryTest.kt
new file mode 100644
index 000000000000..2bf751757468
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/client/files/download/RegistryTest.kt
@@ -0,0 +1,514 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2020 Chris Narkiewicz
+ * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+ */
+package com.nextcloud.client.files.download
+
+import com.nextcloud.client.account.User
+import com.nextcloud.client.files.DownloadRequest
+import com.nextcloud.client.files.Registry
+import com.nextcloud.client.files.Request
+import com.nextcloud.client.jobs.transfer.Transfer
+import com.nextcloud.client.jobs.transfer.TransferState
+import com.owncloud.android.datamodel.OCFile
+import io.mockk.CapturingSlot
+import io.mockk.MockKAnnotations
+import io.mockk.clearAllMocks
+import io.mockk.every
+import io.mockk.impl.annotations.MockK
+import io.mockk.verify
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertNotNull
+import org.junit.Assert.assertNull
+import org.junit.Assert.assertSame
+import org.junit.Assert.assertTrue
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.Suite
+import java.util.UUID
+
+@RunWith(Suite::class)
+@Suite.SuiteClasses(
+ RegistryTest.Pending::class,
+ RegistryTest.Start::class,
+ RegistryTest.Progress::class,
+ RegistryTest.Complete::class,
+ RegistryTest.GetTransfers::class,
+ RegistryTest.IsRunning::class
+)
+class RegistryTest {
+
+ abstract class Base {
+ companion object {
+ const val MAX_TRANSFER_THREADS = 4
+ const val PROGRESS_FULL = 100
+ const val PROGRESS_HALF = 50
+ }
+
+ @MockK
+ lateinit var user: User
+
+ lateinit var file: OCFile
+
+ @MockK
+ lateinit var onTransferStart: (UUID, Request) -> Unit
+
+ @MockK
+ lateinit var onTransferChanged: (Transfer) -> Unit
+
+ internal lateinit var registry: Registry
+
+ @Before
+ fun setUpBase() {
+ MockKAnnotations.init(this, relaxed = true)
+ file = OCFile("/test/path")
+ registry = Registry(onTransferStart, onTransferChanged, MAX_TRANSFER_THREADS)
+ resetMocks()
+ }
+
+ fun resetMocks() {
+ clearAllMocks()
+ every { onTransferStart(any(), any()) } answers {}
+ every { onTransferChanged(any()) } answers {}
+ }
+ }
+
+ class Pending : Base() {
+
+ @Test
+ fun inserting_pending_transfer() {
+ // GIVEN
+ // registry has no pending transfers
+ assertEquals(0, registry.pending.size)
+
+ // WHEN
+ // new transfer requests added
+ val addedTransfersCount = 10
+ for (i in 0 until addedTransfersCount) {
+ val request = DownloadRequest(user, file)
+ registry.add(request)
+ }
+
+ // THEN
+ // transfer is added to the pending queue
+ assertEquals(addedTransfersCount, registry.pending.size)
+ }
+ }
+
+ class Start : Base() {
+
+ companion object {
+ const val ENQUEUED_REQUESTS_COUNT = 10
+ }
+
+ @Before
+ fun setUp() {
+ for (i in 0 until ENQUEUED_REQUESTS_COUNT) {
+ registry.add(DownloadRequest(user, file))
+ }
+ assertEquals(ENQUEUED_REQUESTS_COUNT, registry.pending.size)
+ }
+
+ @Test
+ fun starting_transfer() {
+ // WHEN
+ // started
+ registry.startNext()
+
+ // THEN
+ // up to max threads requests are started
+ // start callback is triggered
+ // update callback is triggered on transfer transition
+ // started transfers are in running state
+ assertEquals(
+ "Transfers not moved to running queue",
+ MAX_TRANSFER_THREADS,
+ registry.running.size
+ )
+ assertEquals(
+ "Transfers not moved from pending queue",
+ ENQUEUED_REQUESTS_COUNT - MAX_TRANSFER_THREADS,
+ registry.pending.size
+ )
+ verify(exactly = MAX_TRANSFER_THREADS) { onTransferStart(any(), any()) }
+ val startedTransfers = mutableListOf()
+ verify(exactly = MAX_TRANSFER_THREADS) { onTransferChanged(capture(startedTransfers)) }
+ assertEquals(
+ "Callbacks not invoked for running transfers",
+ MAX_TRANSFER_THREADS,
+ startedTransfers.size
+ )
+ startedTransfers.forEach {
+ assertEquals("Transfer not placed into running state", TransferState.RUNNING, it.state)
+ }
+ }
+
+ @Test
+ fun start_is_ignored_if_no_more_free_threads() {
+ // WHEN
+ // max number of running transfers
+ registry.startNext()
+ assertEquals(MAX_TRANSFER_THREADS, registry.running.size)
+ clearAllMocks()
+
+ // WHEN
+ // starting more transfers
+ registry.startNext()
+
+ // THEN
+ // no more transfers can be started
+ assertEquals(MAX_TRANSFER_THREADS, registry.running.size)
+ verify(exactly = 0) { onTransferStart(any(), any()) }
+ }
+ }
+
+ class Progress : Base() {
+
+ var uuid: UUID = UUID.randomUUID()
+
+ @Before
+ fun setUp() {
+ val request = DownloadRequest(user, file)
+ uuid = registry.add(request)
+ registry.startNext()
+ assertEquals(uuid, request.uuid)
+ assertEquals(1, registry.running.size)
+ resetMocks()
+ }
+
+ @Test
+ fun transfer_progress_is_updated() {
+ // GIVEN
+ // a transfer is running
+
+ // WHEN
+ // transfer progress is updated
+ val progressHalf = 50
+ registry.progress(uuid, progressHalf)
+
+ // THEN
+ // progress is updated
+ // update callback is invoked
+ val transfer = mutableListOf()
+ verify { onTransferChanged(capture(transfer)) }
+ assertEquals(1, transfer.size)
+ assertEquals(progressHalf, transfer.first().progress)
+ }
+
+ @Test
+ fun updates_for_non_running_transfers_are_ignored() {
+ // GIVEN
+ // transfer is not running
+ registry.complete(uuid, true)
+ assertEquals(0, registry.running.size)
+ resetMocks()
+
+ // WHEN
+ // progress for a non-running transfer is updated
+ registry.progress(uuid, PROGRESS_HALF)
+
+ // THEN
+ // progress update is ignored
+ verify(exactly = 0) { onTransferChanged(any()) }
+ }
+
+ @Test
+ fun updates_for_non_existing_transfers_are_ignored() {
+ // GIVEN
+ // some transfer is running
+
+ // WHEN
+ // progress is updated for non-existing transfer
+ val nonExistingTransferId = UUID.randomUUID()
+ registry.progress(nonExistingTransferId, PROGRESS_HALF)
+
+ // THEN
+ // progress uppdate is ignored
+ verify(exactly = 0) { onTransferChanged(any()) }
+ }
+ }
+
+ class Complete : Base() {
+
+ lateinit var uuid: UUID
+
+ @Before
+ fun setUp() {
+ uuid = registry.add(DownloadRequest(user, file))
+ registry.startNext()
+ registry.progress(uuid, PROGRESS_FULL)
+ resetMocks()
+ }
+
+ @Test
+ fun complete_successful_transfer_with_updated_file() {
+ // GIVEN
+ // a transfer is running
+
+ // WHEN
+ // transfer is completed
+ // file has been updated
+ val updatedFile = OCFile("/updated/file")
+ registry.complete(uuid, true, updatedFile)
+
+ // THEN
+ // transfer is completed successfully
+ // status carries updated file
+ val slot = CapturingSlot()
+ verify { onTransferChanged(capture(slot)) }
+ assertEquals(TransferState.COMPLETED, slot.captured.state)
+ assertSame(slot.captured.file, updatedFile)
+ }
+
+ @Test
+ fun complete_successful_transfer() {
+ // GIVEN
+ // a transfer is running
+
+ // WHEN
+ // transfer is completed
+ // file is not updated
+ registry.complete(uuid = uuid, success = true, file = null)
+
+ // THEN
+ // transfer is completed successfully
+ // status carries previous file
+ val slot = CapturingSlot()
+ verify { onTransferChanged(capture(slot)) }
+ assertEquals(TransferState.COMPLETED, slot.captured.state)
+ assertSame(slot.captured.file, file)
+ }
+
+ @Test
+ fun complete_failed_transfer() {
+ // GIVEN
+ // a transfer is running
+
+ // WHEN
+ // transfer is failed
+ registry.complete(uuid, false)
+
+ // THEN
+ // transfer is completed successfully
+ val slot = CapturingSlot()
+ verify { onTransferChanged(capture(slot)) }
+ assertEquals(TransferState.FAILED, slot.captured.state)
+ }
+ }
+
+ class GetTransfers : Base() {
+
+ val pendingTransferFile = OCFile("/pending")
+ val runningTransferFile = OCFile("/running")
+ val completedTransferFile = OCFile("/completed")
+
+ lateinit var pendingTransferId: UUID
+ lateinit var runningTransferId: UUID
+ lateinit var completedTransferId: UUID
+
+ @Before
+ fun setUp() {
+ completedTransferId = registry.add(DownloadRequest(user, completedTransferFile))
+ registry.startNext()
+ registry.complete(completedTransferId, true)
+
+ runningTransferId = registry.add(DownloadRequest(user, runningTransferFile))
+ registry.startNext()
+
+ pendingTransferId = registry.add(DownloadRequest(user, pendingTransferFile))
+ resetMocks()
+
+ assertEquals(1, registry.pending.size)
+ assertEquals(1, registry.running.size)
+ assertEquals(1, registry.completed.size)
+ }
+
+ @Test
+ fun get_by_path_searches_pending_queue() {
+ // GIVEN
+ // file transfer is pending
+
+ // WHEN
+ // transfer status is retrieved
+ val transfer = registry.getTransfer(pendingTransferFile)
+
+ // THEN
+ // transfer from pending queue is returned
+ assertNotNull(transfer)
+ assertEquals(pendingTransferId, transfer?.uuid)
+ }
+
+ @Test
+ fun get_by_id_searches_pending_queue() {
+ // GIVEN
+ // file transfer is pending
+
+ // WHEN
+ // transfer status is retrieved
+ val transfer = registry.getTransfer(pendingTransferId)
+
+ // THEN
+ // transfer from pending queue is returned
+ assertNotNull(transfer)
+ assertEquals(pendingTransferId, transfer?.uuid)
+ }
+
+ @Test
+ fun get_by_path_searches_running_queue() {
+ // GIVEN
+ // file transfer is running
+
+ // WHEN
+ // transfer status is retrieved
+ val transfer = registry.getTransfer(runningTransferFile)
+
+ // THEN
+ // transfer from pending queue is returned
+ assertNotNull(transfer)
+ assertEquals(runningTransferId, transfer?.uuid)
+ }
+
+ @Test
+ fun get_by_id_searches_running_queue() {
+ // GIVEN
+ // file transfer is running
+
+ // WHEN
+ // transfer status is retrieved
+ val transfer = registry.getTransfer(runningTransferId)
+
+ // THEN
+ // transfer from pending queue is returned
+ assertNotNull(transfer)
+ assertEquals(runningTransferId, transfer?.uuid)
+ }
+
+ @Test
+ fun get_by_path_searches_completed_queue() {
+ // GIVEN
+ // file transfer is pending
+
+ // WHEN
+ // transfer status is retrieved
+ val transfer = registry.getTransfer(completedTransferFile)
+
+ // THEN
+ // transfer from pending queue is returned
+ assertNotNull(transfer)
+ assertEquals(completedTransferId, transfer?.uuid)
+ }
+
+ @Test
+ fun get_by_id_searches_completed_queue() {
+ // GIVEN
+ // file transfer is pending
+
+ // WHEN
+ // transfer status is retrieved
+ val transfer = registry.getTransfer(completedTransferId)
+
+ // THEN
+ // transfer from pending queue is returned
+ assertNotNull(transfer)
+ assertEquals(completedTransferId, transfer?.uuid)
+ }
+
+ @Test
+ fun not_found_by_path() {
+ // GIVEN
+ // no transfer for a file
+ val nonExistingTransferFile = OCFile("/non-nexisting/transfer")
+
+ // WHEN
+ // transfer status is retrieved for a file
+ val transfer = registry.getTransfer(nonExistingTransferFile)
+
+ // THEN
+ // no transfer is found
+ assertNull(transfer)
+ }
+
+ @Test
+ fun not_found_by_id() {
+ // GIVEN
+ // no transfer for an id
+ val nonExistingId = UUID.randomUUID()
+
+ // WHEN
+ // transfer status is retrieved for a file
+ val transfer = registry.getTransfer(nonExistingId)
+
+ // THEN
+ // no transfer is found
+ assertNull(transfer)
+ }
+ }
+
+ class IsRunning : Base() {
+
+ @Test
+ fun no_requests() {
+ // WHEN
+ // all queues empty
+ assertEquals(0, registry.pending.size)
+ assertEquals(0, registry.running.size)
+ assertEquals(0, registry.completed.size)
+
+ // THEN
+ // not running
+ assertFalse(registry.isRunning)
+ }
+
+ @Test
+ fun request_pending() {
+ // WHEN
+ // request is enqueued
+ val request = DownloadRequest(user, OCFile("/path/alpha/1"))
+ registry.add(request)
+ assertEquals(1, registry.pending.size)
+ assertEquals(0, registry.running.size)
+ assertEquals(0, registry.completed.size)
+
+ // THEN
+ // is running
+ assertTrue(registry.isRunning)
+ }
+
+ @Test
+ fun request_running() {
+ // WHEN
+ // request is running
+ val request = DownloadRequest(user, OCFile("/path/alpha/1"))
+ registry.add(request)
+ registry.startNext()
+ assertEquals(0, registry.pending.size)
+ assertEquals(1, registry.running.size)
+ assertEquals(0, registry.completed.size)
+
+ // THEN
+ // is running
+ assertTrue(registry.isRunning)
+ }
+
+ @Test
+ fun request_completed() {
+ // WHEN
+ // request is running
+ val request = DownloadRequest(user, OCFile("/path/alpha/1"))
+ val id = registry.add(request)
+ registry.startNext()
+ registry.complete(id, true)
+ assertEquals(0, registry.pending.size)
+ assertEquals(0, registry.running.size)
+ assertEquals(1, registry.completed.size)
+
+ // THEN
+ // is not running
+ assertFalse(registry.isRunning)
+ }
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/client/files/download/TransferManagerConnectionTest.kt b/app/src/androidTest/java/com/nextcloud/client/files/download/TransferManagerConnectionTest.kt
new file mode 100644
index 000000000000..231cf26a884b
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/client/files/download/TransferManagerConnectionTest.kt
@@ -0,0 +1,233 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2020 Chris Narkiewicz
+ * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+ */
+package com.nextcloud.client.files.download
+
+import android.content.ComponentName
+import android.content.Context
+import com.nextcloud.client.account.MockUser
+import com.nextcloud.client.files.DownloadRequest
+import com.nextcloud.client.jobs.transfer.FileTransferService
+import com.nextcloud.client.jobs.transfer.Transfer
+import com.nextcloud.client.jobs.transfer.TransferManager
+import com.nextcloud.client.jobs.transfer.TransferManagerConnection
+import com.nextcloud.client.jobs.transfer.TransferState
+import com.owncloud.android.datamodel.OCFile
+import io.mockk.MockKAnnotations
+import io.mockk.every
+import io.mockk.impl.annotations.MockK
+import io.mockk.mockk
+import io.mockk.verify
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertTrue
+import org.junit.Before
+import org.junit.Test
+
+class TransferManagerConnectionTest {
+
+ lateinit var connection: TransferManagerConnection
+
+ @MockK
+ lateinit var context: Context
+
+ @MockK
+ lateinit var firstDownloadListener: (Transfer) -> Unit
+
+ @MockK
+ lateinit var secondDownloadListener: (Transfer) -> Unit
+
+ @MockK
+ lateinit var firstStatusListener: (TransferManager.Status) -> Unit
+
+ @MockK
+ lateinit var secondStatusListener: (TransferManager.Status) -> Unit
+
+ @MockK
+ lateinit var binder: FileTransferService.Binder
+
+ val file get() = OCFile("/path")
+ val componentName = ComponentName("", FileTransferService::class.java.simpleName)
+ val user = MockUser()
+
+ @Before
+ fun setUp() {
+ MockKAnnotations.init(this, relaxed = true)
+ connection = TransferManagerConnection(context, user)
+ }
+
+ @Test
+ fun listeners_are_set_after_connection() {
+ // GIVEN
+ // not connected
+ // listener is added
+ connection.registerTransferListener(firstDownloadListener)
+ connection.registerTransferListener(secondDownloadListener)
+
+ // WHEN
+ // service is bound
+ connection.onServiceConnected(componentName, binder)
+
+ // THEN
+ // all listeners are passed to the service
+ val listeners = mutableListOf<(Transfer) -> Unit>()
+ verify { binder.registerTransferListener(capture(listeners)) }
+ assertEquals(listOf(firstDownloadListener, secondDownloadListener), listeners)
+ }
+
+ @Test
+ fun listeners_are_set_immediately_when_connected() {
+ // GIVEN
+ // service is bound
+ connection.onServiceConnected(componentName, binder)
+
+ // WHEN
+ // listeners are added
+ connection.registerTransferListener(firstDownloadListener)
+
+ // THEN
+ // listener is forwarded to service
+ verify { binder.registerTransferListener(firstDownloadListener) }
+ }
+
+ @Test
+ fun listeners_are_removed_when_unbinding() {
+ // GIVEN
+ // service is bound
+ // service has some listeners
+ connection.onServiceConnected(componentName, binder)
+ connection.registerTransferListener(firstDownloadListener)
+ connection.registerTransferListener(secondDownloadListener)
+
+ // WHEN
+ // service unbound
+ connection.unbind()
+
+ // THEN
+ // listeners removed from service
+ verify { binder.removeTransferListener(firstDownloadListener) }
+ verify { binder.removeTransferListener(secondDownloadListener) }
+ }
+
+ @Test
+ fun missed_updates_are_delivered_on_connection() {
+ // GIVEN
+ // not bound
+ // has listeners
+ // download is scheduled and is progressing
+ connection.registerTransferListener(firstDownloadListener)
+ connection.registerTransferListener(secondDownloadListener)
+
+ val request1 = DownloadRequest(user, file)
+ connection.enqueue(request1)
+ val download1 = Transfer(request1.uuid, TransferState.RUNNING, 50, request1.file, request1)
+
+ val request2 = DownloadRequest(user, file)
+ connection.enqueue(request2)
+ val download2 = Transfer(request2.uuid, TransferState.RUNNING, 50, request2.file, request1)
+
+ every { binder.getTransfer(request1.uuid) } returns download1
+ every { binder.getTransfer(request2.uuid) } returns download2
+
+ // WHEN
+ // service is bound
+ connection.onServiceConnected(componentName, binder)
+
+ // THEN
+ // listeners receive current download state for pending downloads
+ val firstListenerNotifications = mutableListOf()
+ verify { firstDownloadListener(capture(firstListenerNotifications)) }
+ assertEquals(listOf(download1, download2), firstListenerNotifications)
+
+ val secondListenerNotifications = mutableListOf()
+ verify { secondDownloadListener(capture(secondListenerNotifications)) }
+ assertEquals(listOf(download1, download2), secondListenerNotifications)
+ }
+
+ @Test
+ fun downloader_status_updates_are_delivered_on_connection() {
+ // GIVEN
+ // not bound
+ // has status listeners
+ val mockStatus: TransferManager.Status = mockk()
+ every { binder.status } returns mockStatus
+ connection.registerStatusListener(firstStatusListener)
+ connection.registerStatusListener(secondStatusListener)
+
+ // WHEN
+ // service is bound
+ connection.onServiceConnected(componentName, binder)
+
+ // THEN
+ // downloader status is delivered
+ verify { firstStatusListener(mockStatus) }
+ verify { secondStatusListener(mockStatus) }
+ }
+
+ @Test
+ fun downloader_status_not_requested_if_no_listeners() {
+ // GIVEN
+ // not bound
+ // no status listeners
+
+ // WHEN
+ // service is bound
+ connection.onServiceConnected(componentName, binder)
+
+ // THEN
+ // downloader status is not requested
+ verify(exactly = 0) { binder.status }
+ }
+
+ @Test
+ fun not_running_if_not_connected() {
+ // GIVEN
+ // downloader is running
+ // connection not bound
+ every { binder.isRunning } returns true
+
+ // THEN
+ // not running
+ assertFalse(connection.isRunning)
+ }
+
+ @Test
+ fun is_running_from_binder_if_connected() {
+ // GIVEN
+ // service bound
+ every { binder.isRunning } returns true
+ connection.onServiceConnected(componentName, binder)
+
+ // WHEN
+ // is running flag accessed
+ val isRunning = connection.isRunning
+
+ // THEN
+ // call delegated to binder
+ assertTrue(isRunning)
+ verify(exactly = 1) { binder.isRunning }
+ }
+
+ @Test
+ fun missed_updates_not_tracked_before_listeners_registered() {
+ // GIVEN
+ // not bound
+ // some downloads requested without listener
+ val request = DownloadRequest(user, file)
+ connection.enqueue(request)
+ val download = Transfer(request.uuid, TransferState.RUNNING, 50, request.file, request)
+ connection.registerTransferListener(firstDownloadListener)
+ every { binder.getTransfer(request.uuid) } returns download
+
+ // WHEN
+ // service is bound
+ connection.onServiceConnected(componentName, binder)
+
+ // THEN
+ // missed updates not redelivered
+ verify(exactly = 0) { firstDownloadListener(any()) }
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/client/files/download/TransferManagerTest.kt b/app/src/androidTest/java/com/nextcloud/client/files/download/TransferManagerTest.kt
new file mode 100644
index 000000000000..e5983fe11025
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/client/files/download/TransferManagerTest.kt
@@ -0,0 +1,279 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2020 Chris Narkiewicz
+ * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+ */
+package com.nextcloud.client.files.download
+
+import androidx.arch.core.executor.testing.InstantTaskExecutorRule
+import com.nextcloud.client.account.User
+import com.nextcloud.client.core.ManualAsyncRunner
+import com.nextcloud.client.core.OnProgressCallback
+import com.nextcloud.client.files.DownloadRequest
+import com.nextcloud.client.files.Request
+import com.nextcloud.client.jobs.download.DownloadTask
+import com.nextcloud.client.jobs.transfer.Transfer
+import com.nextcloud.client.jobs.transfer.TransferManagerImpl
+import com.nextcloud.client.jobs.transfer.TransferState
+import com.nextcloud.client.jobs.upload.UploadTask
+import com.owncloud.android.datamodel.OCFile
+import com.owncloud.android.lib.common.OwnCloudClient
+import io.mockk.MockKAnnotations
+import io.mockk.every
+import io.mockk.impl.annotations.MockK
+import io.mockk.mockk
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertTrue
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.Suite
+import org.mockito.MockitoAnnotations
+
+@RunWith(Suite::class)
+@Suite.SuiteClasses(
+ TransferManagerTest.Enqueue::class,
+ TransferManagerTest.TransferStatusUpdates::class
+)
+class TransferManagerTest {
+
+ abstract class Base {
+
+ companion object {
+ const val MAX_TRANSFER_THREADS = 4
+ }
+
+ @MockK
+ lateinit var user: User
+
+ @MockK
+ lateinit var client: OwnCloudClient
+
+ @MockK
+ lateinit var mockDownloadTaskFactory: DownloadTask.Factory
+
+ @MockK
+ lateinit var mockUploadTaskFactory: UploadTask.Factory
+
+ /**
+ * All task mock functions created during test run are
+ * stored here.
+ */
+ lateinit var downloadTaskMocks: MutableList
+ lateinit var runner: ManualAsyncRunner
+ lateinit var transferManager: TransferManagerImpl
+
+ /**
+ * Response value for all download tasks
+ */
+ var downloadTaskResult: Boolean = true
+
+ /**
+ * Progress values posted by all download task mocks before
+ * returning result value
+ */
+ var taskProgress = listOf()
+
+ @Before
+ fun setUpBase() {
+ MockKAnnotations.init(this, relaxed = true)
+ MockitoAnnotations.initMocks(this)
+ downloadTaskMocks = mutableListOf()
+ runner = ManualAsyncRunner()
+ transferManager = TransferManagerImpl(
+ runner = runner,
+ downloadTaskFactory = mockDownloadTaskFactory,
+ uploadTaskFactory = mockUploadTaskFactory,
+ threads = MAX_TRANSFER_THREADS
+ )
+ downloadTaskResult = true
+ every { mockDownloadTaskFactory.create() } answers { createMockTask() }
+ }
+
+ private fun createMockTask(): DownloadTask {
+ val task = mockk()
+ every { task.download(any(), any(), any()) } answers {
+ taskProgress.forEach {
+ arg>(1).invoke(it)
+ }
+ val request = arg(0)
+ DownloadTask.Result(request.file, downloadTaskResult)
+ }
+ downloadTaskMocks.add(task)
+ return task
+ }
+ }
+
+ class Enqueue : Base() {
+
+ @Test
+ fun enqueued_download_is_started_immediately() {
+ // GIVEN
+ // downloader has no running downloads
+
+ // WHEN
+ // download is enqueued
+ val file = OCFile("/path")
+ val request = DownloadRequest(user, file)
+ transferManager.enqueue(request)
+
+ // THEN
+ // download is started immediately
+ val download = transferManager.getTransfer(request.uuid)
+ assertEquals(TransferState.RUNNING, download?.state)
+ }
+
+ @Test
+ fun enqueued_downloads_are_pending_if_running_queue_is_full() {
+ // GIVEN
+ // downloader is downloading max simultaneous files
+ for (i in 0 until MAX_TRANSFER_THREADS) {
+ val file = OCFile("/running/download/path/$i")
+ val request = DownloadRequest(user, file)
+ transferManager.enqueue(request)
+ val runningDownload = transferManager.getTransfer(request.uuid)
+ assertEquals(runningDownload?.state, TransferState.RUNNING)
+ }
+
+ // WHEN
+ // another download is enqueued
+ val file = OCFile("/path")
+ val request = DownloadRequest(user, file)
+ transferManager.enqueue(request)
+
+ // THEN
+ // download is pending
+ val download = transferManager.getTransfer(request.uuid)
+ assertEquals(TransferState.PENDING, download?.state)
+ }
+ }
+
+ class TransferStatusUpdates : Base() {
+
+ @get:Rule
+ val rule = InstantTaskExecutorRule()
+
+ val file = OCFile("/path")
+
+ @Test
+ fun download_task_completes() {
+ // GIVEN
+ // download is running
+ // download is being observed
+ val downloadUpdates = mutableListOf()
+ transferManager.registerTransferListener { downloadUpdates.add(it) }
+ transferManager.enqueue(DownloadRequest(user, file))
+
+ // WHEN
+ // download task finishes successfully
+ runner.runOne()
+
+ // THEN
+ // listener is notified about status change
+ assertEquals(TransferState.RUNNING, downloadUpdates[0].state)
+ assertEquals(TransferState.COMPLETED, downloadUpdates[1].state)
+ }
+
+ @Test
+ fun download_task_fails() {
+ // GIVEN
+ // download is running
+ // download is being observed
+ val downloadUpdates = mutableListOf()
+ transferManager.registerTransferListener { downloadUpdates.add(it) }
+ transferManager.enqueue(DownloadRequest(user, file))
+
+ // WHEN
+ // download task fails
+ downloadTaskResult = false
+ runner.runOne()
+
+ // THEN
+ // listener is notified about status change
+ assertEquals(TransferState.RUNNING, downloadUpdates[0].state)
+ assertEquals(TransferState.FAILED, downloadUpdates[1].state)
+ }
+
+ @Test
+ fun download_progress_is_updated() {
+ // GIVEN
+ // download is running
+ val downloadUpdates = mutableListOf()
+ transferManager.registerTransferListener { downloadUpdates.add(it) }
+ transferManager.enqueue(DownloadRequest(user, file))
+
+ // WHEN
+ // download progress updated 4 times before completion
+ taskProgress = listOf(25, 50, 75, 100)
+ runner.runOne()
+
+ // THEN
+ // listener receives 6 status updates
+ // transition to running
+ // 4 progress updates
+ // completion
+ assertEquals(6, downloadUpdates.size)
+ if (downloadUpdates.size >= 6) {
+ assertEquals(TransferState.RUNNING, downloadUpdates[0].state)
+ assertEquals(25, downloadUpdates[1].progress)
+ assertEquals(50, downloadUpdates[2].progress)
+ assertEquals(75, downloadUpdates[3].progress)
+ assertEquals(100, downloadUpdates[4].progress)
+ assertEquals(TransferState.COMPLETED, downloadUpdates[5].state)
+ }
+ }
+
+ @Test
+ fun download_task_is_created_only_for_running_downloads() {
+ // WHEN
+ // multiple downloads are enqueued
+ for (i in 0 until MAX_TRANSFER_THREADS * 2) {
+ transferManager.enqueue(DownloadRequest(user, file))
+ }
+
+ // THEN
+ // download task is created only for running downloads
+ assertEquals(MAX_TRANSFER_THREADS, downloadTaskMocks.size)
+ }
+ }
+
+ class RunningStatusUpdates : Base() {
+
+ @get:Rule
+ val rule = InstantTaskExecutorRule()
+
+ @Test
+ fun is_running_flag_on_enqueue() {
+ // WHEN
+ // download is enqueued
+ val file = OCFile("/path/to/file")
+ val request = DownloadRequest(user, file)
+ transferManager.enqueue(request)
+
+ // THEN
+ // is running changes
+ assertTrue(transferManager.isRunning)
+ }
+
+ @Test
+ fun is_running_flag_on_completion() {
+ // GIVEN
+ // a download is in progress
+ val file = OCFile("/path/to/file")
+ val request = DownloadRequest(user, file)
+ transferManager.enqueue(request)
+ assertTrue(transferManager.isRunning)
+
+ // WHEN
+ // download is processed
+ runner.runOne()
+
+ // THEN
+ // downloader is not running
+ assertFalse(transferManager.isRunning)
+ }
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/client/integrations/deck/DeckApiTest.kt b/app/src/androidTest/java/com/nextcloud/client/integrations/deck/DeckApiTest.kt
new file mode 100644
index 000000000000..46abfc037c7e
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/client/integrations/deck/DeckApiTest.kt
@@ -0,0 +1,164 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2020 Chris Narkiewicz
+ * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+ */
+package com.nextcloud.client.integrations.deck
+
+import android.content.Context
+import android.content.Intent
+import android.content.pm.PackageManager
+import android.content.pm.ResolveInfo
+import androidx.test.platform.app.InstrumentationRegistry
+import com.nextcloud.client.account.User
+import com.owncloud.android.lib.resources.notifications.models.Notification
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertTrue
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.Parameterized
+import org.junit.runners.Suite
+import org.mockito.ArgumentMatchers.anyInt
+import org.mockito.Mock
+import org.mockito.MockitoAnnotations
+import org.mockito.kotlin.any
+import org.mockito.kotlin.anyOrNull
+import org.mockito.kotlin.never
+import org.mockito.kotlin.times
+import org.mockito.kotlin.verify
+import org.mockito.kotlin.whenever
+
+@RunWith(Suite::class)
+@Suite.SuiteClasses(
+ DeckApiTest.DeckIsInstalled::class,
+ DeckApiTest.DeckIsNotInstalled::class
+)
+class DeckApiTest {
+
+ abstract class Fixture {
+ @Mock
+ lateinit var packageManager: PackageManager
+
+ lateinit var context: Context
+
+ @Mock
+ lateinit var user: User
+
+ lateinit var deck: DeckApiImpl
+
+ @Before
+ fun setUpFixture() {
+ MockitoAnnotations.initMocks(this)
+ context = InstrumentationRegistry.getInstrumentation().targetContext
+ deck = DeckApiImpl(context, packageManager)
+ }
+ }
+
+ @RunWith(Parameterized::class)
+ class DeckIsInstalled : Fixture() {
+
+ @Parameterized.Parameter(0)
+ lateinit var installedDeckPackage: String
+
+ companion object {
+ @Parameterized.Parameters
+ @JvmStatic
+ fun initParametrs(): Array = DeckApiImpl.DECK_APP_PACKAGES
+ }
+
+ @Before
+ fun setUp() {
+ whenever(packageManager.resolveActivity(any(), anyInt())).thenAnswer {
+ val intent = it.getArgument(0)
+ return@thenAnswer if (intent.component?.packageName == installedDeckPackage) {
+ ResolveInfo()
+ } else {
+ null
+ }
+ }
+ }
+
+ @Test
+ fun can_forward_deck_notification() {
+ // GIVEN
+ // notification to deck arrives
+ val notification = Notification().apply { app = "deck" }
+
+ // WHEN
+ // deck action is created
+ val forwardActionIntent = deck.createForwardToDeckActionIntent(notification, user)
+
+ // THEN
+ // open action is created
+ assertTrue("Failed for $installedDeckPackage", forwardActionIntent.isPresent)
+ }
+
+ @Test
+ fun notifications_from_other_apps_are_ignored() {
+ // GIVEN
+ // notification from other app arrives
+ val deckNotification = Notification().apply {
+ app = "some_other_app"
+ }
+
+ // WHEN
+ // deck action is created
+ val openDeckActionIntent = deck.createForwardToDeckActionIntent(deckNotification, user)
+
+ // THEN
+ // deck application is not being resolved
+ // open action is not created
+ verify(packageManager, never()).resolveActivity(anyOrNull(), anyOrNull())
+ assertFalse(openDeckActionIntent.isPresent)
+ }
+ }
+
+ class DeckIsNotInstalled : Fixture() {
+
+ @Before
+ fun setUp() {
+ whenever(packageManager.resolveActivity(any(), anyInt())).thenReturn(null)
+ }
+
+ @Test
+ fun cannot_forward_deck_notification() {
+ // GIVEN
+ // notification is coming from deck app
+ val notification = Notification().apply {
+ app = DeckApiImpl.APP_NAME
+ }
+
+ // WHEN
+ // creating open in deck action
+ val openDeckActionIntent = deck.createForwardToDeckActionIntent(notification, user)
+
+ // THEN
+ // deck application is being resolved using all known packages
+ // open action is not created
+ verify(packageManager, times(DeckApiImpl.DECK_APP_PACKAGES.size))
+ .resolveActivity(anyOrNull(), anyOrNull())
+ assertFalse(openDeckActionIntent.isPresent)
+ }
+
+ @Test
+ fun notifications_from_other_apps_are_ignored() {
+ // GIVEN
+ // notification is coming from other app
+ val notification = Notification().apply {
+ app = "some_other_app"
+ }
+
+ // WHEN
+ // creating open in deck action
+ val openDeckActionIntent = deck.createForwardToDeckActionIntent(notification, user)
+
+ // THEN
+ // deck application is not being resolved
+ // open action is not created
+ verify(packageManager, never()).resolveActivity(anyOrNull(), anyOrNull())
+ assertFalse(openDeckActionIntent.isPresent)
+ }
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/client/jobs/BackgroundJobManagerTest.kt b/app/src/androidTest/java/com/nextcloud/client/jobs/BackgroundJobManagerTest.kt
new file mode 100644
index 000000000000..d59256f786c0
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/client/jobs/BackgroundJobManagerTest.kt
@@ -0,0 +1,449 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2020 Chris Narkiewicz
+ * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+ */
+package com.nextcloud.client.jobs
+
+import android.content.Context
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.Observer
+import androidx.test.annotation.UiThreadTest
+import androidx.work.Data
+import androidx.work.ExistingPeriodicWorkPolicy
+import androidx.work.ExistingWorkPolicy
+import androidx.work.OneTimeWorkRequest
+import androidx.work.PeriodicWorkRequest
+import androidx.work.WorkInfo
+import androidx.work.WorkManager
+import com.nextcloud.client.account.User
+import com.nextcloud.client.core.Clock
+import com.nextcloud.utils.extensions.toByteArray
+import com.owncloud.android.lib.common.utils.Log_OC
+import org.apache.commons.io.FileUtils
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertNotNull
+import org.junit.Assert.assertNull
+import org.junit.Assert.assertTrue
+import org.junit.Assert.fail
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.rules.TemporaryFolder
+import org.junit.runner.RunWith
+import org.junit.runners.Suite
+import org.mockito.ArgumentMatcher
+import org.mockito.kotlin.KArgumentCaptor
+import org.mockito.kotlin.any
+import org.mockito.kotlin.argThat
+import org.mockito.kotlin.argumentCaptor
+import org.mockito.kotlin.eq
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.verify
+import org.mockito.kotlin.whenever
+import java.io.File
+import java.io.IOException
+import java.util.Date
+import java.util.UUID
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
+import java.util.concurrent.TimeoutException
+
+/**
+ * When using IDE to run enire Suite, make sure tests are run using Android Instrumentation Test
+ * runner. By default IDE runs normal JUnit - this is AS problem. One must configure the
+ * test run manually.
+ */
+@RunWith(Suite::class)
+@Suite.SuiteClasses(
+ BackgroundJobManagerTest.Manager::class,
+ BackgroundJobManagerTest.ContentObserver::class,
+ BackgroundJobManagerTest.PeriodicContactsBackup::class,
+ BackgroundJobManagerTest.ImmediateContactsBackup::class,
+ BackgroundJobManagerTest.ImmediateContactsImport::class,
+ BackgroundJobManagerTest.Tags::class
+)
+class BackgroundJobManagerTest {
+
+ /**
+ * Used to help with ambiguous type inference
+ */
+ class IsOneTimeWorkRequest : ArgumentMatcher {
+ override fun matches(argument: OneTimeWorkRequest?): Boolean = true
+ }
+
+ /**
+ * Used to help with ambiguous type inference
+ */
+ class IsPeriodicWorkRequest : ArgumentMatcher {
+ override fun matches(argument: PeriodicWorkRequest?): Boolean = true
+ }
+
+ abstract class Fixture {
+ companion object {
+ internal const val USER_ACCOUNT_NAME = "user@nextcloud"
+ internal val TIMESTAMP = System.currentTimeMillis()
+ }
+ internal lateinit var user: User
+ internal lateinit var workManager: WorkManager
+ internal lateinit var clock: Clock
+ internal lateinit var backgroundJobManager: BackgroundJobManagerImpl
+ internal lateinit var context: Context
+
+ @Before
+ fun setUpFixture() {
+ context = mock()
+ user = mock()
+ whenever(user.accountName).thenReturn(USER_ACCOUNT_NAME)
+ workManager = mock()
+ clock = mock()
+ whenever(clock.currentTime).thenReturn(TIMESTAMP)
+ whenever(clock.currentDate).thenReturn(Date(TIMESTAMP))
+ backgroundJobManager = BackgroundJobManagerImpl(workManager, clock, mock())
+ }
+
+ fun assertHasRequiredTags(tags: Set, jobName: String, user: User? = null) {
+ assertTrue("""'all' tag is mandatory""", tags.contains("*"))
+ assertTrue("name tag is mandatory", tags.contains(BackgroundJobManagerImpl.formatNameTag(jobName, user)))
+ assertTrue("timestamp tag is mandatory", tags.contains(BackgroundJobManagerImpl.formatTimeTag(TIMESTAMP)))
+ if (user != null) {
+ assertTrue("user tag is mandatory", tags.contains(BackgroundJobManagerImpl.formatUserTag(user)))
+ }
+ }
+
+ fun buildWorkInfo(index: Long): WorkInfo = WorkInfo(
+ id = UUID.randomUUID(),
+ state = WorkInfo.State.RUNNING,
+ outputData = Data.Builder().build(),
+ tags = setOf(BackgroundJobManagerImpl.formatTimeTag(1581820284000)),
+ progress = Data.Builder().build(),
+ runAttemptCount = 1,
+ generation = 0
+ )
+ }
+
+ class Manager : Fixture() {
+
+ class SyncObserver : Observer {
+ val latch = CountDownLatch(1)
+ var value: T? = null
+ override fun onChanged(t: T) {
+ value = t
+ latch.countDown()
+ }
+
+ fun getValue(timeout: Long = 3, timeUnit: TimeUnit = TimeUnit.SECONDS): T? {
+ val result = latch.await(timeout, timeUnit)
+ if (!result) {
+ throw TimeoutException()
+ }
+ return value
+ }
+ }
+
+ @Test
+ @UiThreadTest
+ fun get_all_job_info() {
+ // GIVEN
+ // work manager has 2 registered workers
+ val platformWorkInfo = listOf(
+ buildWorkInfo(0),
+ buildWorkInfo(1),
+ buildWorkInfo(2)
+ )
+ val lv = MutableLiveData>()
+ lv.value = platformWorkInfo
+ whenever(workManager.getWorkInfosByTagLiveData(eq("*"))).thenReturn(lv)
+
+ // WHEN
+ // job info for all jobs is requested
+ val jobs = backgroundJobManager.jobs
+
+ // THEN
+ // live data with job info is returned
+ // live data contains 2 job info instances
+ // job info is sorted by timestamp from newest to oldest
+ assertNotNull(jobs)
+ val observer = SyncObserver>()
+ jobs.observeForever(observer)
+ val jobInfo = observer.getValue()
+ assertNotNull(jobInfo)
+ assertEquals(platformWorkInfo.size, jobInfo?.size)
+ jobInfo?.let {
+ assertEquals(platformWorkInfo[2].id, it[0].id)
+ assertEquals(platformWorkInfo[1].id, it[1].id)
+ assertEquals(platformWorkInfo[0].id, it[2].id)
+ }
+ }
+
+ @Test
+ fun cancel_all_jobs() {
+ // WHEN
+ // all jobs are cancelled
+ backgroundJobManager.cancelAllJobs()
+
+ // THEN
+ // all jobs with * tag are cancelled
+ verify(workManager).cancelAllWorkByTag(BackgroundJobManagerImpl.TAG_ALL)
+ }
+ }
+
+ class ContentObserver : Fixture() {
+
+ private lateinit var request: OneTimeWorkRequest
+
+ @Before
+ fun setUp() {
+ val requestCaptor: KArgumentCaptor = argumentCaptor()
+ backgroundJobManager.scheduleContentObserverJob()
+ verify(workManager).enqueueUniqueWork(
+ any(),
+ any(),
+ requestCaptor.capture()
+ )
+ assertEquals(1, requestCaptor.allValues.size)
+ request = requestCaptor.firstValue
+ }
+
+ @Test
+ fun job_is_unique_and_replaces_previous_job() {
+ verify(workManager).enqueueUniqueWork(
+ eq(BackgroundJobManagerImpl.JOB_CONTENT_OBSERVER),
+ eq(ExistingWorkPolicy.REPLACE),
+ argThat(IsOneTimeWorkRequest())
+ )
+ }
+
+ @Test
+ fun job_request_has_mandatory_tags() {
+ assertHasRequiredTags(request.tags, BackgroundJobManagerImpl.JOB_CONTENT_OBSERVER)
+ }
+ }
+
+ class PeriodicContactsBackup : Fixture() {
+ private lateinit var request: PeriodicWorkRequest
+
+ @Before
+ fun setUp() {
+ val requestCaptor: KArgumentCaptor = argumentCaptor()
+ backgroundJobManager.schedulePeriodicContactsBackup(user)
+ verify(workManager).enqueueUniquePeriodicWork(
+ any(),
+ any(),
+ requestCaptor.capture()
+ )
+ assertEquals(1, requestCaptor.allValues.size)
+ request = requestCaptor.firstValue
+ }
+
+ @Test
+ fun job_is_unique_for_user() {
+ verify(workManager).enqueueUniquePeriodicWork(
+ eq(BackgroundJobManagerImpl.JOB_PERIODIC_CONTACTS_BACKUP),
+ eq(ExistingPeriodicWorkPolicy.KEEP),
+ argThat(IsPeriodicWorkRequest())
+ )
+ }
+
+ @Test
+ fun job_request_has_mandatory_tags() {
+ assertHasRequiredTags(request.tags, BackgroundJobManagerImpl.JOB_PERIODIC_CONTACTS_BACKUP, user)
+ }
+ }
+
+ class ImmediateContactsBackup : Fixture() {
+
+ private lateinit var workInfo: MutableLiveData
+ private lateinit var jobInfo: LiveData
+ private lateinit var request: OneTimeWorkRequest
+
+ @Before
+ fun setUp() {
+ val requestCaptor: KArgumentCaptor = argumentCaptor()
+ workInfo = MutableLiveData()
+ whenever(workManager.getWorkInfoByIdLiveData(any())).thenReturn(workInfo)
+ jobInfo = backgroundJobManager.startImmediateContactsBackup(user)
+ verify(workManager).enqueueUniqueWork(
+ any(),
+ any(),
+ requestCaptor.capture()
+ )
+ assertEquals(1, requestCaptor.allValues.size)
+ request = requestCaptor.firstValue
+ }
+
+ @Test
+ fun job_is_unique_for_user() {
+ verify(workManager).enqueueUniqueWork(
+ eq(BackgroundJobManagerImpl.JOB_IMMEDIATE_CONTACTS_BACKUP),
+ eq(ExistingWorkPolicy.KEEP),
+ argThat(IsOneTimeWorkRequest())
+ )
+ }
+
+ @Test
+ fun job_request_has_mandatory_tags() {
+ assertHasRequiredTags(request.tags, BackgroundJobManagerImpl.JOB_IMMEDIATE_CONTACTS_BACKUP, user)
+ }
+
+ @Test
+ @UiThreadTest
+ fun job_info_is_obtained_from_work_info() {
+ // GIVEN
+ // work info is available
+ workInfo.value = buildWorkInfo(0)
+
+ // WHEN
+ // job info has listener
+ jobInfo.observeForever {}
+
+ // THEN
+ // converted value is available
+ assertNotNull(jobInfo.value)
+ assertEquals(workInfo.value?.id, jobInfo.value?.id)
+ }
+ }
+
+ class ImmediateContactsImport : Fixture() {
+
+ private lateinit var workInfo: MutableLiveData
+ private lateinit var jobInfo: LiveData
+ private lateinit var request: OneTimeWorkRequest
+
+ @get:Rule
+ var folder: TemporaryFolder = TemporaryFolder()
+
+ @Before
+ fun setUp() {
+ var selectedContactsFile: File? = null
+ try {
+ selectedContactsFile = folder.newFile("hashset_cache.txt")
+ } catch (_: IOException) {
+ Log_OC.e("ImmediateContactsImport", "error creating temporary test file in ")
+ fail("hashset_cache cannot be found")
+ }
+
+ if (selectedContactsFile == null) {
+ fail("hashset_cache cannot be found")
+ }
+
+ val requestCaptor: KArgumentCaptor = argumentCaptor()
+ workInfo = MutableLiveData()
+ whenever(workManager.getWorkInfoByIdLiveData(any())).thenReturn(workInfo)
+
+ val selectedContacts = intArrayOf(1, 2, 3)
+ val contractsAsByteArray = selectedContacts.toByteArray()
+ FileUtils.writeByteArrayToFile(selectedContactsFile, contractsAsByteArray)
+
+ jobInfo = backgroundJobManager.startImmediateContactsImport(
+ contactsAccountName = "name",
+ contactsAccountType = "type",
+ vCardFilePath = "/path/to/vcard/file",
+ selectedContactsFilePath = selectedContactsFile!!.absolutePath
+ )
+ verify(workManager).enqueueUniqueWork(
+ any(),
+ any(),
+ requestCaptor.capture()
+ )
+ assertEquals(1, requestCaptor.allValues.size)
+ request = requestCaptor.firstValue
+ }
+
+ @Test
+ fun job_is_unique() {
+ verify(workManager).enqueueUniqueWork(
+ eq(BackgroundJobManagerImpl.JOB_IMMEDIATE_CONTACTS_IMPORT),
+ eq(ExistingWorkPolicy.KEEP),
+ argThat(IsOneTimeWorkRequest())
+ )
+ }
+
+ @Test
+ fun job_request_has_mandatory_tags() {
+ assertHasRequiredTags(request.tags, BackgroundJobManagerImpl.JOB_IMMEDIATE_CONTACTS_IMPORT)
+ }
+
+ @Test
+ @UiThreadTest
+ fun job_info_is_obtained_from_work_info() {
+ // GIVEN
+ // work info is available
+ workInfo.value = buildWorkInfo(0)
+
+ // WHEN
+ // job info has listener
+ jobInfo.observeForever {}
+
+ // THEN
+ // converted value is available
+ assertNotNull(jobInfo.value)
+ assertEquals(workInfo.value?.id, jobInfo.value?.id)
+ }
+ }
+
+ class Tags {
+ @Test
+ fun split_tag_key_and_value() {
+ // GIVEN
+ // valid tag
+ // tag has colons in value part
+ val tag = "${BackgroundJobManagerImpl.TAG_PREFIX_NAME}:value:with:colons and spaces"
+
+ // WHEN
+ // tag is parsed
+ val parsedTag = BackgroundJobManagerImpl.parseTag(tag)
+
+ // THEN
+ // key-value pair is returned
+ // key is first
+ // value with colons is second
+ assertNotNull(parsedTag)
+ assertEquals(BackgroundJobManagerImpl.TAG_PREFIX_NAME, parsedTag?.first)
+ assertEquals("value:with:colons and spaces", parsedTag?.second)
+ }
+
+ @Test
+ fun tags_with_invalid_prefixes_are_rejected() {
+ // GIVEN
+ // tag prefix is not on allowed prefixes list
+ val tag = "invalidprefix:value"
+ BackgroundJobManagerImpl.PREFIXES.forEach {
+ assertFalse(tag.startsWith(it))
+ }
+
+ // WHEN
+ // tag is parsed
+ val parsedTag = BackgroundJobManagerImpl.parseTag(tag)
+
+ // THEN
+ // tag is rejected
+ assertNull(parsedTag)
+ }
+
+ @Test
+ fun strings_without_colon_are_rejected() {
+ // GIVEN
+ // strings that are not tags
+ val tags = listOf(
+ BackgroundJobManagerImpl.TAG_ALL,
+ BackgroundJobManagerImpl.TAG_PREFIX_NAME,
+ "simplestring",
+ ""
+ )
+
+ tags.forEach {
+ // WHEN
+ // string is parsed
+ val parsedTag = BackgroundJobManagerImpl.parseTag(it)
+
+ // THEN
+ // tag is rejected
+ assertNull(parsedTag)
+ }
+ }
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/client/jobs/ContactsBackupIT.kt b/app/src/androidTest/java/com/nextcloud/client/jobs/ContactsBackupIT.kt
new file mode 100644
index 000000000000..bb68dfcfd153
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/client/jobs/ContactsBackupIT.kt
@@ -0,0 +1,149 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2024 Alper Ozturk
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+package com.nextcloud.client.jobs
+
+import android.Manifest
+import androidx.test.rule.GrantPermissionRule
+import androidx.work.WorkManager
+import com.nextcloud.client.core.ClockImpl
+import com.nextcloud.client.preferences.AppPreferences
+import com.nextcloud.client.preferences.AppPreferencesImpl
+import com.nextcloud.test.RetryTestRule
+import com.nextcloud.utils.extensions.toByteArray
+import com.owncloud.android.AbstractOnServerIT
+import com.owncloud.android.R
+import com.owncloud.android.datamodel.OCFile
+import com.owncloud.android.lib.common.utils.Log_OC
+import com.owncloud.android.operations.DownloadFileOperation
+import ezvcard.Ezvcard
+import ezvcard.VCard
+import org.apache.commons.io.FileUtils
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertTrue
+import org.junit.Assert.fail
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.rules.TemporaryFolder
+import java.io.BufferedInputStream
+import java.io.File
+import java.io.FileInputStream
+import java.io.IOException
+
+class ContactsBackupIT : AbstractOnServerIT() {
+ private val workManager = WorkManager.getInstance(targetContext)
+ private val preferences: AppPreferences = AppPreferencesImpl.fromContext(targetContext)
+ private val backgroundJobManager = BackgroundJobManagerImpl(workManager, ClockImpl(), preferences)
+
+ @get:Rule
+ val writeContactsRule: GrantPermissionRule = GrantPermissionRule.grant(Manifest.permission.WRITE_CONTACTS)
+
+ @get:Rule
+ val readContactsRule: GrantPermissionRule = GrantPermissionRule.grant(Manifest.permission.READ_CONTACTS)
+
+ @get:Rule
+ val retryTestRule = RetryTestRule() // flaky test
+
+ @get:Rule
+ var folder: TemporaryFolder = TemporaryFolder()
+
+ private val vcard: String = "vcard.vcf"
+ private var selectedContactsFile: File? = null
+
+ @Before
+ fun setup() {
+ try {
+ selectedContactsFile = folder.newFile("hashset_cache.txt")
+ } catch (_: IOException) {
+ Log_OC.e("ContactsBackupIT", "error creating temporary test file in ")
+ }
+ }
+
+ @Test
+ fun importExport() {
+ val intArray = intArrayOf(0)
+ if (selectedContactsFile == null) {
+ fail("hashset_cache cannot be found")
+ }
+
+ val contractsAsByteArray = intArray.toByteArray()
+ FileUtils.writeByteArrayToFile(selectedContactsFile, contractsAsByteArray)
+
+ // import file to local contacts
+ backgroundJobManager.startImmediateContactsImport(
+ null,
+ null,
+ getFile(vcard).absolutePath,
+ selectedContactsFile!!.absolutePath
+ )
+ longSleep()
+
+ // export contact
+ backgroundJobManager.startImmediateContactsBackup(user)
+ longSleep()
+
+ val folderPath: String = targetContext.resources.getString(R.string.contacts_backup_folder) +
+ OCFile.PATH_SEPARATOR
+
+ refreshFolder("/")
+ longSleep()
+ longSleep()
+
+ refreshFolder(folderPath)
+ longSleep()
+ longSleep()
+
+ if (folderPath.isEmpty()) {
+ fail("folderPath cannot be empty")
+ }
+
+ val folder = fileDataStorageManager.getFileByDecryptedRemotePath(folderPath)
+ if (folder == null) {
+ fail("folder cannot be null")
+ }
+
+ val ocFile = storageManager.getFolderContent(folder, false).firstOrNull()
+ if (ocFile == null) {
+ fail("ocFile cannot be null")
+ }
+
+ if (ocFile?.storagePath == null) {
+ fail("ocFile.storagePath cannot be null")
+ }
+
+ assertTrue(DownloadFileOperation(user, ocFile, targetContext).execute(client).isSuccess)
+
+ val file = ocFile?.storagePath?.let { File(it) }
+ if (file == null) {
+ fail("file cannot be null")
+ }
+
+ val vcardInputStream = BufferedInputStream(FileInputStream(getFile(vcard)))
+ val backupFileInputStream = BufferedInputStream(FileInputStream(file))
+
+ // verify same
+ val originalCards: ArrayList = ArrayList()
+ originalCards.addAll(Ezvcard.parse(vcardInputStream).all())
+
+ val backupCards: ArrayList = ArrayList()
+ backupCards.addAll(Ezvcard.parse(backupFileInputStream).all())
+
+ assertEquals(originalCards.size, backupCards.size)
+
+ val originalCardFormattedName = originalCards.firstOrNull()?.formattedName
+ if (originalCardFormattedName == null) {
+ fail("originalCardFormattedName cannot be null")
+ }
+
+ val backupCardFormattedName = backupCards.firstOrNull()?.formattedName
+ if (backupCardFormattedName == null) {
+ fail("backupCardFormattedName cannot be null")
+ }
+
+ assertEquals(originalCardFormattedName.toString(), backupCardFormattedName.toString())
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/client/migrations/MigrationsDbTest.kt b/app/src/androidTest/java/com/nextcloud/client/migrations/MigrationsDbTest.kt
new file mode 100644
index 000000000000..035ec3dbae83
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/client/migrations/MigrationsDbTest.kt
@@ -0,0 +1,116 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2020 Chris Narkiewicz
+ * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+ */
+package com.nextcloud.client.migrations
+
+import android.content.Context
+import android.content.SharedPreferences
+import androidx.test.platform.app.InstrumentationRegistry
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertTrue
+import org.junit.Before
+import org.junit.Test
+import org.mockito.kotlin.any
+import org.mockito.kotlin.eq
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.whenever
+
+class MigrationsDbTest {
+
+ private lateinit var context: Context
+ private lateinit var store: MockSharedPreferences
+ private lateinit var db: MigrationsDb
+
+ @Before
+ fun setUp() {
+ context = InstrumentationRegistry.getInstrumentation().context
+ store = MockSharedPreferences()
+ assertTrue("State from previous test run found?", store.all.isEmpty())
+ db = MigrationsDb(store)
+ }
+
+ @Test
+ fun applied_migrations_are_returned_in_order() {
+ // GIVEN
+ // some migrations are marked as applied
+ // migration ids are stored in random order
+ val mockStore: SharedPreferences = mock()
+ val storedMigrationIds = LinkedHashSet()
+ storedMigrationIds.apply {
+ add("3")
+ add("0")
+ add("2")
+ add("1")
+ }
+ whenever(mockStore.getStringSet(eq(MigrationsDb.DB_KEY_APPLIED_MIGRATIONS), any()))
+ .thenReturn(storedMigrationIds)
+
+ // WHEN
+ // applied migration ids are retrieved
+ val db = MigrationsDb(mockStore)
+ val ids = db.getAppliedMigrations()
+
+ // THEN
+ // returned list is sorted
+ assertEquals(ids, ids.sorted())
+ }
+
+ @Test
+ @Suppress("MagicNumber")
+ fun registering_new_applied_migration_preserves_old_ids() {
+ // WHEN
+ // some applied migrations are registered
+ val appliedMigrationIds = setOf("0", "1", "2")
+ store.edit().putStringSet(MigrationsDb.DB_KEY_APPLIED_MIGRATIONS, appliedMigrationIds).apply()
+
+ // WHEN
+ // new set of migration ids are registered
+ // some ids are added again
+ db.addAppliedMigration(2, 3, 4)
+
+ // THEN
+ // new ids are appended to set of existing ids
+ val expectedIds = setOf("0", "1", "2", "3", "4")
+ val storedIds = store.getStringSet(MigrationsDb.DB_KEY_APPLIED_MIGRATIONS, mutableSetOf())
+ assertEquals(expectedIds, storedIds)
+ }
+
+ @Test
+ fun failed_status_sets_status_flag_and_error_message() {
+ // GIVEN
+ // failure flag is not set
+ assertFalse(db.isFailed)
+
+ // WHEN
+ // failure status is set
+ val failureReason = "error message"
+ db.setFailed(0, failureReason)
+
+ // THEN
+ // failed flag is set
+ // error message is set
+ assertTrue(db.isFailed)
+ assertEquals(failureReason, db.failureReason)
+ }
+
+ @Test
+ fun last_migrated_version_is_set() {
+ // GIVEN
+ // last migrated version is not set
+ val oldVersion = db.lastMigratedVersion
+ assertEquals(MigrationsDb.NO_LAST_MIGRATED_VERSION, oldVersion)
+
+ // WHEN
+ // migrated version is set to a new value
+ val newVersion = 200
+ db.lastMigratedVersion = newVersion
+
+ // THEN
+ // new value is stored
+ assertEquals(newVersion, db.lastMigratedVersion)
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/client/migrations/MigrationsManagerTest.kt b/app/src/androidTest/java/com/nextcloud/client/migrations/MigrationsManagerTest.kt
new file mode 100644
index 000000000000..0d12bdaa3a16
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/client/migrations/MigrationsManagerTest.kt
@@ -0,0 +1,276 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2020 Chris Narkiewicz
+ * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+ */
+package com.nextcloud.client.migrations
+
+import androidx.test.annotation.UiThreadTest
+import com.nextcloud.client.appinfo.AppInfo
+import com.nextcloud.client.core.ManualAsyncRunner
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertTrue
+import org.junit.Before
+import org.junit.Test
+import org.mockito.Mock
+import org.mockito.MockitoAnnotations
+import org.mockito.kotlin.any
+import org.mockito.kotlin.anyOrNull
+import org.mockito.kotlin.inOrder
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.never
+import org.mockito.kotlin.verify
+import org.mockito.kotlin.whenever
+
+class MigrationsManagerTest {
+
+ companion object {
+ const val OLD_APP_VERSION = 41
+ const val NEW_APP_VERSION = 42
+ }
+
+ lateinit var migrationStep1Body: (Migrations.Step) -> Unit
+ lateinit var migrationStep1: Migrations.Step
+
+ lateinit var migrationStep2Body: (Migrations.Step) -> Unit
+ lateinit var migrationStep2: Migrations.Step
+
+ lateinit var migrationStep3Body: (Migrations.Step) -> Unit
+ lateinit var migrationStep3: Migrations.Step
+
+ lateinit var migrations: List
+
+ @Mock
+ lateinit var appInfo: AppInfo
+
+ lateinit var migrationsDbStore: MockSharedPreferences
+ lateinit var migrationsDb: MigrationsDb
+
+ lateinit var asyncRunner: ManualAsyncRunner
+
+ internal lateinit var migrationsManager: MigrationsManagerImpl
+
+ @Before
+ fun setUp() {
+ MockitoAnnotations.initMocks(this)
+ migrationStep1Body = mock()
+ migrationStep1 = Migrations.Step(0, "first migration", true, migrationStep1Body)
+
+ migrationStep2Body = mock()
+ migrationStep2 = Migrations.Step(1, "second optional migration", false, migrationStep2Body)
+
+ migrationStep3Body = mock()
+ migrationStep3 = Migrations.Step(2, "third migration", true, migrationStep3Body)
+
+ migrations = listOf(migrationStep1, migrationStep2, migrationStep3)
+
+ asyncRunner = ManualAsyncRunner()
+ migrationsDbStore = MockSharedPreferences()
+ migrationsDb = MigrationsDb(migrationsDbStore)
+
+ whenever(appInfo.versionCode).thenReturn(NEW_APP_VERSION)
+ migrationsManager = MigrationsManagerImpl(
+ appInfo = appInfo,
+ migrationsDb = migrationsDb,
+ asyncRunner = asyncRunner,
+ migrations = migrations
+ )
+ }
+
+ @Test
+ fun inital_status_is_unknown() {
+ // GIVEN
+ // migration manager has not been used yets
+
+ // THEN
+ // status is not set
+ assertEquals(MigrationsManager.Status.UNKNOWN, migrationsManager.status.value)
+ }
+
+ @Test
+ @UiThreadTest
+ fun migrations_are_scheduled_on_background_thread() {
+ // GIVEN
+ // migrations can be applied
+ assertEquals(0, migrationsDb.getAppliedMigrations().size)
+
+ // WHEN
+ // migration is started
+ val count = migrationsManager.startMigration()
+
+ // THEN
+ // all migrations are scheduled on background thread
+ // single task is scheduled
+ assertEquals(migrations.size, count)
+ assertEquals(1, asyncRunner.size)
+ assertEquals(MigrationsManager.Status.RUNNING, migrationsManager.status.value)
+ }
+
+ @Test
+ @UiThreadTest
+ fun applied_migrations_are_recorded() {
+ // GIVEN
+ // no migrations are applied yet
+ // current app version is newer then last recorded migrated version
+ whenever(appInfo.versionCode).thenReturn(NEW_APP_VERSION)
+ migrationsDb.lastMigratedVersion = OLD_APP_VERSION
+
+ // WHEN
+ // migration is run
+ val count = migrationsManager.startMigration()
+ assertTrue(asyncRunner.runOne())
+
+ // THEN
+ // total migrations count is returned
+ // migration functions are called with step as argument
+ // migrations are invoked in order
+ // applied migrations are recorded
+ // new app version code is recorded
+ assertEquals(migrations.size, count)
+ inOrder(migrationStep1.run, migrationStep2.run, migrationStep3.run).apply {
+ verify(migrationStep1.run).invoke(migrationStep1)
+ verify(migrationStep2.run).invoke(migrationStep2)
+ verify(migrationStep3.run).invoke(migrationStep3)
+ }
+ val allAppliedIds = migrations.map { it.id }
+ assertEquals(allAppliedIds, migrationsDb.getAppliedMigrations())
+ assertEquals(NEW_APP_VERSION, migrationsDb.lastMigratedVersion)
+ }
+
+ @Test
+ @UiThreadTest
+ fun previously_run_migrations_are_not_run_again() {
+ // GIVEN
+ // some migrations were run before
+ whenever(appInfo.versionCode).thenReturn(NEW_APP_VERSION)
+ migrationsDb.lastMigratedVersion = OLD_APP_VERSION
+ migrationsDb.addAppliedMigration(migrationStep1.id, migrationStep2.id)
+
+ // WHEN
+ // migrations are applied
+ val count = migrationsManager.startMigration()
+ assertTrue(asyncRunner.runOne())
+
+ // THEN
+ // applied migrations count is returned
+ // previously applied migrations are not run
+ // required migrations are applied
+ // applied migrations are recorded
+ // new app version code is recorded
+ assertEquals(1, count)
+ verify(migrationStep1.run, never()).invoke(anyOrNull())
+ verify(migrationStep2.run, never()).invoke(anyOrNull())
+ verify(migrationStep3.run).invoke(migrationStep3)
+ val allAppliedIds = migrations.map { it.id }
+ assertEquals(allAppliedIds, migrationsDb.getAppliedMigrations())
+ assertEquals(NEW_APP_VERSION, migrationsDb.lastMigratedVersion)
+ }
+
+ @Test
+ @UiThreadTest
+ fun migration_error_is_recorded() {
+ // GIVEN
+ // no migrations applied yet
+ // no prior failed migrations
+ assertFalse(migrationsDb.isFailed)
+ assertEquals(MigrationsDb.NO_FAILED_MIGRATION_ID, migrationsDb.failedMigrationId)
+
+ // WHEN
+ // migrations are applied
+ // one migration throws
+ val lastMigration = migrations.findLast { it.mandatory } ?: throw IllegalStateException("Test fixture error")
+ val errorMessage = "error message"
+ whenever(lastMigration.run.invoke(any())).thenThrow(RuntimeException(errorMessage))
+ migrationsManager.startMigration()
+ assertTrue(asyncRunner.runOne())
+
+ // THEN
+ // failure is marked in the migration db
+ // failure message is recorded
+ // failed migration id is recorded
+ assertEquals(MigrationsManager.Status.FAILED, migrationsManager.status.value)
+ assertTrue(migrationsDb.isFailed)
+ assertEquals(errorMessage, migrationsDb.failureReason)
+ assertEquals(lastMigration.id, migrationsDb.failedMigrationId)
+ }
+
+ @Test
+ @UiThreadTest
+ fun migrations_are_not_run_if_already_run_for_an_app_version() {
+ // GIVEN
+ // migrations were already run for the current app version
+ whenever(appInfo.versionCode).thenReturn(NEW_APP_VERSION)
+ migrationsDb.lastMigratedVersion = NEW_APP_VERSION
+
+ // WHEN
+ // app is migrated again
+ val migrationCount = migrationsManager.startMigration()
+
+ // THEN
+ // migration processing is skipped entirely
+ // status is set to applied
+ assertEquals(0, migrationCount)
+ listOf(migrationStep1, migrationStep2, migrationStep3).forEach {
+ verify(it.run, never()).invoke(any())
+ }
+ assertEquals(MigrationsManager.Status.APPLIED, migrationsManager.status.value)
+ }
+
+ @Test
+ @UiThreadTest
+ fun new_app_version_is_marked_as_migrated_if_no_new_migrations_are_available() {
+ // GIVEN
+ // migrations were applied in previous version
+ // new version has no new migrations
+ whenever(appInfo.versionCode).thenReturn(NEW_APP_VERSION)
+ migrationsDb.lastMigratedVersion = OLD_APP_VERSION
+ migrations.forEach {
+ migrationsDb.addAppliedMigration(it.id)
+ }
+
+ // WHEN
+ // migration is started
+ val startedCount = migrationsManager.startMigration()
+
+ // THEN
+ // no new migrations are run
+ // new version is marked as migrated
+ assertEquals(0, startedCount)
+ assertEquals(
+ NEW_APP_VERSION,
+ migrationsDb.lastMigratedVersion
+ )
+ }
+
+ @Test
+ @UiThreadTest
+ fun optional_migration_failure_does_not_trigger_a_migration_failure() {
+ // GIVEN
+ // pending migrations
+ // mandatory migrations are passing
+ // one migration is optional and fails
+ assertEquals("Fixture should provide 1 optional, failing migration", 1, migrations.count { !it.mandatory })
+ val optionalFailingMigration = migrations.first { !it.mandatory }
+ whenever(optionalFailingMigration.run.invoke(any())).thenThrow(RuntimeException())
+
+ // WHEN
+ // migration is started
+ val startedCount = migrationsManager.startMigration()
+ asyncRunner.runOne()
+ assertEquals(migrations.size, startedCount)
+
+ // THEN
+ // mandatory migrations are marked as applied
+ // optional failed migration is not marked
+ // no error
+ // status is applied
+ // failed migration is available during next migration
+ val appliedMigrations = migrations.filter { it.mandatory }.map { it.id }
+ assertTrue("Fixture error", appliedMigrations.isNotEmpty())
+ assertEquals(appliedMigrations, migrationsDb.getAppliedMigrations())
+ assertFalse(migrationsDb.isFailed)
+ assertEquals(MigrationsManager.Status.APPLIED, migrationsManager.status.value)
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/client/migrations/MockSharedPreferences.kt b/app/src/androidTest/java/com/nextcloud/client/migrations/MockSharedPreferences.kt
new file mode 100644
index 000000000000..bd871693b373
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/client/migrations/MockSharedPreferences.kt
@@ -0,0 +1,88 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2020 Chris Narkiewicz
+ * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+ */
+package com.nextcloud.client.migrations
+
+import android.content.SharedPreferences
+import java.util.TreeMap
+
+/**
+ * This shared preferences implementation uses in-memory value store
+ * and it can be used in tests without using global, file-backed storage,
+ * improving test isolation.
+ *
+ * The implementation is not thread-safe.
+ */
+@Suppress("TooManyFunctions")
+class MockSharedPreferences : SharedPreferences {
+
+ class MockEditor(val store: MutableMap) : SharedPreferences.Editor {
+
+ val editorStore: MutableMap = TreeMap()
+
+ override fun clear(): SharedPreferences.Editor = throw UnsupportedOperationException()
+
+ override fun putLong(key: String?, value: Long): SharedPreferences.Editor =
+ throw UnsupportedOperationException("Implement as needed")
+
+ override fun putInt(key: String?, value: Int): SharedPreferences.Editor {
+ editorStore.put(key, value)
+ return this
+ }
+
+ override fun remove(key: String?): SharedPreferences.Editor = throw UnsupportedOperationException()
+
+ override fun putBoolean(key: String?, value: Boolean): SharedPreferences.Editor {
+ editorStore.put(key, value)
+ return this
+ }
+
+ override fun putStringSet(key: String?, values: MutableSet?): SharedPreferences.Editor {
+ editorStore.put(key, values?.toMutableSet())
+ return this
+ }
+
+ override fun commit(): Boolean = true
+
+ override fun putFloat(key: String?, value: Float): SharedPreferences.Editor =
+ throw UnsupportedOperationException("Implement as needed")
+
+ override fun apply() = store.putAll(editorStore)
+
+ override fun putString(key: String?, value: String?): SharedPreferences.Editor {
+ editorStore.put(key, value)
+ return this
+ }
+ }
+
+ val store: MutableMap = TreeMap()
+
+ override fun contains(key: String?): Boolean = store.containsKey(key)
+ override fun getBoolean(key: String?, defValue: Boolean): Boolean = store.getOrDefault(key, defValue) as Boolean
+
+ override fun unregisterOnSharedPreferenceChangeListener(
+ listener: SharedPreferences.OnSharedPreferenceChangeListener?
+ ) = throw UnsupportedOperationException()
+
+ override fun getInt(key: String?, defValue: Int): Int = store.getOrDefault(key, defValue) as Int
+
+ override fun getAll(): MutableMap = HashMap(store)
+
+ override fun edit(): SharedPreferences.Editor = MockEditor(store)
+
+ override fun getLong(key: String?, defValue: Long): Long = throw UnsupportedOperationException()
+
+ override fun getFloat(key: String?, defValue: Float): Float = throw UnsupportedOperationException()
+
+ override fun getStringSet(key: String?, defValues: MutableSet?): MutableSet? =
+ store.getOrDefault(key, defValues) as MutableSet?
+
+ override fun registerOnSharedPreferenceChangeListener(
+ listener: SharedPreferences.OnSharedPreferenceChangeListener?
+ ) = throw UnsupportedOperationException()
+
+ override fun getString(key: String?, defValue: String?): String? = store.getOrDefault(key, defValue) as String?
+}
diff --git a/app/src/androidTest/java/com/nextcloud/client/migrations/MockSharedPreferencesTest.kt b/app/src/androidTest/java/com/nextcloud/client/migrations/MockSharedPreferencesTest.kt
new file mode 100644
index 000000000000..6654483e89c2
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/client/migrations/MockSharedPreferencesTest.kt
@@ -0,0 +1,87 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2020 Chris Narkiewicz
+ * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+ */
+package com.nextcloud.client.migrations
+
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertNotSame
+import org.junit.Assert.assertTrue
+import org.junit.Before
+import org.junit.Test
+
+@Suppress("MagicNumber")
+class MockSharedPreferencesTest {
+
+ private lateinit var mock: MockSharedPreferences
+
+ @Before
+ fun setUp() {
+ mock = MockSharedPreferences()
+ }
+
+ @Test
+ fun getSetStringSet() {
+ val value = setOf("alpha", "bravo", "charlie")
+ mock.edit().putStringSet("key", value).apply()
+ val copy = mock.getStringSet("key", mutableSetOf())
+ assertNotSame(value, copy)
+ assertEquals(value, copy)
+ }
+
+ @Test
+ fun getSetInt() {
+ val value = 42
+ val editor = mock.edit()
+ editor.putInt("key", value)
+ assertEquals(100, mock.getInt("key", 100))
+ editor.apply()
+ assertEquals(42, mock.getInt("key", 100))
+ }
+
+ @Test
+ fun getSetBoolean() {
+ val value = true
+ val editor = mock.edit()
+ editor.putBoolean("key", value)
+ assertFalse(mock.getBoolean("key", false))
+ editor.apply()
+ assertTrue(mock.getBoolean("key", false))
+ }
+
+ @Test
+ fun getSetString() {
+ val value = "a value"
+ val editor = mock.edit()
+ editor.putString("key", value)
+ assertEquals("default", mock.getString("key", "default"))
+ editor.apply()
+ assertEquals("a value", mock.getString("key", "default"))
+ }
+
+ @Test
+ fun getAll() {
+ // GIVEN
+ // few properties are stored in shared preferences
+ mock.edit()
+ .putInt("int", 1)
+ .putBoolean("bool", true)
+ .putString("string", "value")
+ .putStringSet("stringSet", setOf("alpha", "bravo"))
+ .apply()
+ assertEquals(4, mock.store.size)
+
+ // WHEN
+ // all properties are retrieved
+ val all = mock.all
+
+ // THEN
+ // returned map is a different instance
+ // map is equal to internal storage
+ assertNotSame(all, mock.store)
+ assertEquals(all, mock.store)
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/client/network/ConnectivityServiceImplIT.kt b/app/src/androidTest/java/com/nextcloud/client/network/ConnectivityServiceImplIT.kt
new file mode 100644
index 000000000000..97ce82940e55
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/client/network/ConnectivityServiceImplIT.kt
@@ -0,0 +1,42 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2020 Tobias Kaminsky
+ * SPDX-FileCopyrightText: 2020 Nextcloud GmbH
+ * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+ */
+package com.nextcloud.client.network
+
+import android.accounts.AccountManager
+import android.content.Context
+import android.net.ConnectivityManager
+import com.nextcloud.client.account.UserAccountManagerImpl
+import com.nextcloud.client.core.ClockImpl
+import com.nextcloud.client.network.ConnectivityServiceImpl.GetRequestBuilder
+import com.owncloud.android.AbstractOnServerIT
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertTrue
+import org.junit.Test
+
+class ConnectivityServiceImplIT : AbstractOnServerIT() {
+ @Test
+ fun testInternetWalled() {
+ val connectivityManager = targetContext.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
+ val accountManager = targetContext.getSystemService(Context.ACCOUNT_SERVICE) as AccountManager
+ val userAccountManager = UserAccountManagerImpl(targetContext, accountManager)
+ val clientFactory = ClientFactoryImpl(targetContext)
+ val requestBuilder = GetRequestBuilder()
+ val walledCheckCache = WalledCheckCache(ClockImpl())
+
+ val sut = ConnectivityServiceImpl(
+ connectivityManager,
+ userAccountManager,
+ clientFactory,
+ requestBuilder,
+ walledCheckCache
+ )
+
+ assertTrue(sut.connectivity.isConnected)
+ assertFalse(sut.isInternetWalled)
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/client/sso/SSOActivityTests.kt b/app/src/androidTest/java/com/nextcloud/client/sso/SSOActivityTests.kt
new file mode 100644
index 000000000000..785468b43d51
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/client/sso/SSOActivityTests.kt
@@ -0,0 +1,28 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2024 Alper Ozturk
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+package com.nextcloud.client.sso
+
+import androidx.test.espresso.intent.rule.IntentsTestRule
+import com.owncloud.android.AbstractIT
+import com.owncloud.android.ui.activity.SsoGrantPermissionActivity
+import org.junit.Rule
+import org.junit.Test
+
+class SSOActivityTests : AbstractIT() {
+
+ @Suppress("DEPRECATION")
+ @get:Rule
+ var activityRule = IntentsTestRule(SsoGrantPermissionActivity::class.java, true, false)
+
+ @Test
+ fun testActivityTheme() {
+ val sut = activityRule.launchActivity(null)
+ assert(sut.binding != null)
+ assert(sut.materialAlertDialogBuilder != null)
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/extensions/BitmapDecodeTests.kt b/app/src/androidTest/java/com/nextcloud/extensions/BitmapDecodeTests.kt
new file mode 100644
index 000000000000..e6b52cec3ad8
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/extensions/BitmapDecodeTests.kt
@@ -0,0 +1,111 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2025 Alper Ozturk
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+package com.nextcloud.extensions
+
+import android.graphics.Bitmap
+import com.nextcloud.utils.decodeSampledBitmapFromFile
+import com.nextcloud.utils.extensions.toFile
+import org.junit.After
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertNotNull
+import org.junit.Assert.assertNull
+import org.junit.Assert.assertTrue
+import org.junit.Before
+import org.junit.Test
+import java.io.OutputStream
+import java.nio.file.Files
+import java.nio.file.Path
+import kotlin.io.path.ExperimentalPathApi
+import kotlin.io.path.absolutePathString
+import kotlin.io.path.deleteRecursively
+import kotlin.io.path.exists
+
+@Suppress("MagicNumber")
+class BitmapDecodeTests {
+
+ private lateinit var tempDir: Path
+
+ @Before
+ fun setup() {
+ tempDir = Files.createTempDirectory("auto_upload_test_")
+ assertTrue("Temp directory should exist", tempDir.exists())
+ }
+
+ @OptIn(ExperimentalPathApi::class)
+ @After
+ fun cleanup() {
+ if (tempDir.exists()) {
+ tempDir.deleteRecursively()
+ }
+ }
+
+ private fun createTempImageFile(width: Int = 100, height: Int = 100): Path {
+ val bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)
+ val imagePath = tempDir.resolve("test_${System.currentTimeMillis()}.jpg")
+
+ Files.newOutputStream(imagePath).use { out: OutputStream ->
+ bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out)
+ }
+
+ assertTrue(imagePath.exists())
+ return imagePath
+ }
+
+ @Test
+ fun testToFileWhenPathIsValidShouldReturnExistingFile() {
+ val path = createTempImageFile()
+ val result = path.absolutePathString().toFile()
+ assertNotNull(result)
+ assertTrue(result!!.exists())
+ }
+
+ @Test
+ fun testToFileWhenPathIsEmptyShouldReturnNull() {
+ val result = "".toFile()
+ assertNull(result)
+ }
+
+ @Test
+ fun testToFileWhenFileDoesNotExistShouldReturnNull() {
+ val nonExistentPath = tempDir.resolve("does_not_exist.jpg")
+ val result = nonExistentPath.absolutePathString().toFile()
+ assertNull(result)
+ }
+
+ @Test
+ fun testDecodeSampledBitmapFromFileWhenValidPathShouldReturnBitmap() {
+ val path = createTempImageFile(400, 400)
+ val bitmap = decodeSampledBitmapFromFile(path.absolutePathString(), 100, 100)
+ assertNotNull(bitmap)
+ assertTrue(bitmap!!.width <= 400)
+ assertTrue(bitmap.height <= 400)
+ }
+
+ @Test
+ fun testDecodeSampledBitmapFromFileWhenInvalidPathShouldReturnNull() {
+ val invalidPath = tempDir.resolve("invalid_path.jpg").absolutePathString()
+ val bitmap = decodeSampledBitmapFromFile(invalidPath, 100, 100)
+ assertNull(bitmap)
+ }
+
+ @Test
+ fun testDecodeSampledBitmapFromFileWhenImageIsLargeShouldDownsampleBitmap() {
+ val path = createTempImageFile(2000, 2000)
+ val bitmap = decodeSampledBitmapFromFile(path.absolutePathString(), 100, 100)
+ assertNotNull(bitmap)
+ assertTrue("Bitmap should be smaller than original", bitmap!!.width < 2000 && bitmap.height < 2000)
+ }
+
+ @Test
+ fun testDecodeSampledBitmapFromFileWhenImageIsSmallerThanRequestedShouldKeepOriginalSize() {
+ val path = createTempImageFile(100, 100)
+ val bitmap = decodeSampledBitmapFromFile(path.absolutePathString(), 200, 200)
+ assertNotNull(bitmap)
+ assertEquals(100, bitmap!!.width)
+ assertEquals(100, bitmap.height)
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/extensions/BitmapRotationTests.kt b/app/src/androidTest/java/com/nextcloud/extensions/BitmapRotationTests.kt
new file mode 100644
index 000000000000..a2394f461ad2
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/extensions/BitmapRotationTests.kt
@@ -0,0 +1,90 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2025 Alper Ozturk
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+package com.nextcloud.extensions
+
+import android.graphics.Bitmap
+import android.graphics.Color
+import androidx.exifinterface.media.ExifInterface
+import com.nextcloud.utils.rotateBitmapViaExif
+import junit.framework.TestCase.assertEquals
+import org.junit.Test
+
+class BitmapRotationTests {
+
+ private fun createTestBitmap(): Bitmap = Bitmap.createBitmap(2, 2, Bitmap.Config.ARGB_8888).apply {
+ setPixel(0, 0, Color.RED)
+ setPixel(1, 0, Color.GREEN)
+ setPixel(0, 1, Color.BLUE)
+ setPixel(1, 1, Color.YELLOW)
+ }
+
+ @Test
+ fun testRotateBitmapViaExifWhenGivenNullBitmapShouldReturnNull() {
+ val rotated = null.rotateBitmapViaExif(ExifInterface.ORIENTATION_ROTATE_90)
+ assertEquals(null, rotated)
+ }
+
+ @Test
+ fun testRotateBitmapViaExifWhenGivenNormalOrientationShouldReturnSameBitmap() {
+ val bmp = createTestBitmap()
+ val rotated = bmp.rotateBitmapViaExif(ExifInterface.ORIENTATION_NORMAL)
+ assertEquals(bmp, rotated)
+ }
+
+ @Test
+ fun testRotateBitmapViaExifWhenGivenRotate90ShouldReturnRotatedBitmap() {
+ val bmp = createTestBitmap()
+ val rotated = bmp.rotateBitmapViaExif(ExifInterface.ORIENTATION_ROTATE_90)!!
+ assertEquals(bmp.width, rotated.height)
+ assertEquals(bmp.height, rotated.width)
+
+ assertEquals(Color.BLUE, rotated.getPixel(0, 0))
+ assertEquals(Color.RED, rotated.getPixel(1, 0))
+ assertEquals(Color.YELLOW, rotated.getPixel(0, 1))
+ assertEquals(Color.GREEN, rotated.getPixel(1, 1))
+ }
+
+ @Test
+ fun testRotateBitmapViaExifWhenGivenRotate180ShouldReturnRotatedBitmap() {
+ val bmp = createTestBitmap()
+ val rotated = bmp.rotateBitmapViaExif(ExifInterface.ORIENTATION_ROTATE_180)!!
+ assertEquals(bmp.width, rotated.width)
+ assertEquals(bmp.height, rotated.height)
+
+ assertEquals(Color.YELLOW, rotated.getPixel(0, 0))
+ assertEquals(Color.BLUE, rotated.getPixel(1, 0))
+ assertEquals(Color.GREEN, rotated.getPixel(0, 1))
+ assertEquals(Color.RED, rotated.getPixel(1, 1))
+ }
+
+ @Test
+ fun testRotateBitmapViaExifWhenGivenFlipHorizontalShouldReturnFlippedBitmap() {
+ val bmp = createTestBitmap()
+ val rotated = bmp.rotateBitmapViaExif(ExifInterface.ORIENTATION_FLIP_HORIZONTAL)!!
+ assertEquals(bmp.width, rotated.width)
+ assertEquals(bmp.height, rotated.height)
+
+ assertEquals(Color.GREEN, rotated.getPixel(0, 0))
+ assertEquals(Color.RED, rotated.getPixel(1, 0))
+ assertEquals(Color.YELLOW, rotated.getPixel(0, 1))
+ assertEquals(Color.BLUE, rotated.getPixel(1, 1))
+ }
+
+ @Test
+ fun testRotateBitmapViaExifWhenGivenFlipVerticalShouldReturnFlippedBitmap() {
+ val bmp = createTestBitmap()
+ val rotated = bmp.rotateBitmapViaExif(ExifInterface.ORIENTATION_FLIP_VERTICAL)!!
+ assertEquals(bmp.width, rotated.width)
+ assertEquals(bmp.height, rotated.height)
+
+ assertEquals(Color.BLUE, rotated.getPixel(0, 0))
+ assertEquals(Color.YELLOW, rotated.getPixel(1, 0))
+ assertEquals(Color.RED, rotated.getPixel(0, 1))
+ assertEquals(Color.GREEN, rotated.getPixel(1, 1))
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/extensions/BundleExtensionTests.kt b/app/src/androidTest/java/com/nextcloud/extensions/BundleExtensionTests.kt
new file mode 100644
index 000000000000..853a0e4a17cc
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/extensions/BundleExtensionTests.kt
@@ -0,0 +1,75 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2024 Alper Ozturk
+ * SPDX-FileCopyrightText: 2024 Nextcloud GmbH
+ * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+ */
+package com.nextcloud.extensions
+
+import android.os.Bundle
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.nextcloud.test.model.OtherTestData
+import com.nextcloud.test.model.TestData
+import com.nextcloud.test.model.TestDataParcelable
+import com.nextcloud.utils.extensions.getParcelableArgument
+import com.nextcloud.utils.extensions.getSerializableArgument
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertNull
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@Suppress("FunctionNaming")
+@RunWith(AndroidJUnit4::class)
+class BundleExtensionTests {
+
+ private val key = "testDataKey"
+
+ @Test
+ fun test_get_serializable_argument_when_given_valid_bundle_should_return_expected_data() {
+ val bundle = Bundle()
+ val testObject = TestData("Hello")
+ bundle.putSerializable(key, testObject)
+ val retrievedObject = bundle.getSerializableArgument(key, TestData::class.java)
+ assertEquals(testObject, retrievedObject)
+ }
+
+ @Test
+ fun test_get_serializable_argument_when_given_valid_bundle_and_wrong_class_type_should_return_null() {
+ val bundle = Bundle()
+ val testObject = TestData("Hello")
+ bundle.putSerializable(key, testObject)
+ val retrievedObject = bundle.getSerializableArgument(key, Array::class.java)
+ assertNull(retrievedObject)
+ }
+
+ @Test
+ fun test_get_parcelable_argument_when_given_valid_bundle_and_wrong_class_type_should_return_null() {
+ val bundle = Bundle()
+ val testObject = TestData("Hello")
+ bundle.putSerializable(key, testObject)
+ val retrievedObject = bundle.getParcelableArgument(key, OtherTestData::class.java)
+ assertNull(retrievedObject)
+ }
+
+ @Test
+ fun test_get_parcelable_argument_when_given_valid_bundle_should_return_expected_data() {
+ val bundle = Bundle()
+ val testObject = TestDataParcelable("Hello")
+ bundle.putParcelable(key, testObject)
+ val retrievedObject = bundle.getParcelableArgument(key, TestDataParcelable::class.java)
+ assertEquals(testObject, retrievedObject)
+ }
+
+ @Test
+ fun test_get_serializable_argument_when_given_null_bundle_should_return_null() {
+ val retrievedObject = (null as Bundle?).getSerializableArgument(key, TestData::class.java)
+ assertNull(retrievedObject)
+ }
+
+ @Test
+ fun test_get_parcelable_argument_when_given_null_bundle_should_return_null() {
+ val retrievedObject = (null as Bundle?).getParcelableArgument(key, TestDataParcelable::class.java)
+ assertNull(retrievedObject)
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/extensions/GetExifOrientationTests.kt b/app/src/androidTest/java/com/nextcloud/extensions/GetExifOrientationTests.kt
new file mode 100644
index 000000000000..3475c8e1f229
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/extensions/GetExifOrientationTests.kt
@@ -0,0 +1,78 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2025 Alper Ozturk
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+package com.nextcloud.extensions
+import android.graphics.Bitmap
+import android.graphics.Color
+import androidx.exifinterface.media.ExifInterface
+import com.nextcloud.utils.extensions.getExifOrientation
+import junit.framework.TestCase.assertEquals
+import org.junit.After
+import org.junit.Test
+import java.io.File
+
+class GetExifOrientationTests {
+
+ private val tempFiles = mutableListOf()
+
+ @Suppress("MagicNumber")
+ private fun createTempImageFile(): File {
+ val file = File.createTempFile("test_image", ".jpg")
+ tempFiles.add(file)
+
+ val bmp = Bitmap.createBitmap(2, 2, Bitmap.Config.ARGB_8888).apply {
+ setPixel(0, 0, Color.RED)
+ setPixel(1, 0, Color.GREEN)
+ setPixel(0, 1, Color.BLUE)
+ setPixel(1, 1, Color.YELLOW)
+ }
+
+ file.outputStream().use { out ->
+ bmp.compress(Bitmap.CompressFormat.JPEG, 100, out)
+ }
+
+ return file
+ }
+
+ @After
+ fun cleanup() {
+ tempFiles.forEach { it.delete() }
+ }
+
+ @Test
+ fun testGetExifOrientationWhenExifIsRotate90ShouldReturnRotate90() {
+ val file = createTempImageFile()
+
+ val exif = ExifInterface(file.absolutePath)
+ exif.setAttribute(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_ROTATE_90.toString())
+ exif.saveAttributes()
+
+ val orientation = getExifOrientation(file.absolutePath)
+
+ assertEquals(ExifInterface.ORIENTATION_ROTATE_90, orientation)
+ }
+
+ @Test
+ fun testGetExifOrientationWhenExifIsRotate180ShouldReturnRotate180() {
+ val file = createTempImageFile()
+
+ val exif = ExifInterface(file.absolutePath)
+ exif.setAttribute(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_ROTATE_180.toString())
+ exif.saveAttributes()
+
+ val orientation = getExifOrientation(file.absolutePath)
+ assertEquals(ExifInterface.ORIENTATION_ROTATE_180, orientation)
+ }
+
+ @Test
+ fun testGetExifOrientationWhenExifIsUndefinedShouldReturnUndefined() {
+ val file = createTempImageFile()
+
+ val orientation = getExifOrientation(file.absolutePath)
+ assertEquals(ExifInterface.ORIENTATION_UNDEFINED, orientation)
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/extensions/IntentExtensionTests.kt b/app/src/androidTest/java/com/nextcloud/extensions/IntentExtensionTests.kt
new file mode 100644
index 000000000000..6fa385bdef63
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/extensions/IntentExtensionTests.kt
@@ -0,0 +1,75 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2024 Alper Ozturk
+ * SPDX-FileCopyrightText: 2024 Nextcloud GmbH
+ * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+ */
+package com.nextcloud.extensions
+
+import android.content.Intent
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.nextcloud.test.model.OtherTestData
+import com.nextcloud.test.model.TestData
+import com.nextcloud.test.model.TestDataParcelable
+import com.nextcloud.utils.extensions.getParcelableArgument
+import com.nextcloud.utils.extensions.getSerializableArgument
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertNull
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@Suppress("FunctionNaming")
+@RunWith(AndroidJUnit4::class)
+class IntentExtensionTests {
+
+ private val key = "testDataKey"
+
+ @Test
+ fun test_get_serializable_argument_when_given_valid_intent_should_return_expected_data() {
+ val intent = Intent()
+ val testObject = TestData("Hello")
+ intent.putExtra(key, testObject)
+ val retrievedObject = intent.getSerializableArgument(key, TestData::class.java)
+ assertEquals(testObject, retrievedObject)
+ }
+
+ @Test
+ fun test_get_serializable_argument_when_given_valid_intent_and_wrong_class_type_should_return_null() {
+ val intent = Intent()
+ val testObject = TestData("Hello")
+ intent.putExtra(key, testObject)
+ val retrievedObject = intent.getSerializableArgument(key, Array::class.java)
+ assertNull(retrievedObject)
+ }
+
+ @Test
+ fun test_get_parcelable_argument_when_given_valid_intent_and_wrong_class_type_should_return_null() {
+ val intent = Intent()
+ val testObject = TestData("Hello")
+ intent.putExtra(key, testObject)
+ val retrievedObject = intent.getParcelableArgument(key, OtherTestData::class.java)
+ assertNull(retrievedObject)
+ }
+
+ @Test
+ fun test_get_parcelable_argument_when_given_valid_intent_should_return_expected_data() {
+ val intent = Intent()
+ val testObject = TestDataParcelable("Hello")
+ intent.putExtra(key, testObject)
+ val retrievedObject = intent.getParcelableArgument(key, TestDataParcelable::class.java)
+ assertEquals(testObject, retrievedObject)
+ }
+
+ @Test
+ fun test_get_serializable_argument_when_given_null_intent_should_return_null() {
+ val retrievedObject = (null as Intent?).getSerializableArgument(key, TestData::class.java)
+ assertNull(retrievedObject)
+ }
+
+ @Test
+ fun test_get_parcelable_argument_when_given_null_intent_should_return_null() {
+ val retrievedObject = (null as Intent?).getParcelableArgument(key, TestDataParcelable::class.java)
+ assertNull(retrievedObject)
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/extensions/StringExtensionTests.kt b/app/src/androidTest/java/com/nextcloud/extensions/StringExtensionTests.kt
new file mode 100644
index 000000000000..c9985b7309fa
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/extensions/StringExtensionTests.kt
@@ -0,0 +1,176 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2025 Alper Ozturk
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+package com.nextcloud.extensions
+import com.nextcloud.utils.extensions.eTagChanged
+import junit.framework.TestCase.assertFalse
+import junit.framework.TestCase.assertTrue
+import org.junit.Test
+
+@Suppress("TooManyFunctions")
+class StringExtensionTests {
+ @Test
+ fun testIsNotBlankAndEqualsWhenGivenBothStringsAreNull() {
+ val str1: String? = null
+ val str2: String? = null
+ assertTrue(str1.eTagChanged(str2))
+ }
+
+ @Test
+ fun testIsNotBlankAndEqualsWhenGivenFirstStringIsNull() {
+ val str1: String? = null
+ val str2 = "hello"
+ assertTrue(str1.eTagChanged(str2))
+ }
+
+ @Test
+ fun testIsNotBlankAndEqualsWhenGivenSecondStringIsNull() {
+ val str1 = "hello"
+ val str2: String? = null
+ assertTrue(str1.eTagChanged(str2))
+ }
+
+ @Test
+ fun testIsNotBlankAndEqualsWhenGivenBothStringsAreEmpty() {
+ val str1 = ""
+ val str2 = ""
+ assertTrue(str1.eTagChanged(str2))
+ }
+
+ @Test
+ fun testIsNotBlankAndEqualsWhenGivenFirstStringIsEmpty() {
+ val str1 = ""
+ val str2 = "hello"
+ assertTrue(str1.eTagChanged(str2))
+ }
+
+ @Test
+ fun testIsNotBlankAndEqualsWhenGivenSecondStringIsEmpty() {
+ val str1 = "hello"
+ val str2 = ""
+ assertTrue(str1.eTagChanged(str2))
+ }
+
+ @Test
+ fun testIsNotBlankAndEqualsWhenGivenBothStringsAreWhitespaceOnly() {
+ val str1 = " "
+ val str2 = " \t "
+ assertTrue(str1.eTagChanged(str2))
+ }
+
+ @Test
+ fun testIsNotBlankAndEqualsWhenGivenFirstStringIsWhitespaceOnly() {
+ val str1 = " "
+ val str2 = "hello"
+ assertTrue(str1.eTagChanged(str2))
+ }
+
+ @Test
+ fun testIsNotBlankAndEqualsWhenGivenSecondStringIsWhitespaceOnly() {
+ val str1 = "hello"
+ val str2 = " "
+ assertTrue(str1.eTagChanged(str2))
+ }
+
+ @Test
+ fun testIsNotBlankAndEqualsWhenGivenStringsAreDifferentButBothValid() {
+ val str1 = "hello"
+ val str2 = "world"
+ assertTrue(str1.eTagChanged(str2))
+ }
+
+ @Test
+ fun testIsNotBlankAndEqualsWhenGivenStringsHaveDifferentCase() {
+ val str1 = "Hello"
+ val str2 = "hello"
+ assertFalse(str1.eTagChanged(str2))
+ }
+
+ @Test
+ fun testIsNotBlankAndEqualsWhenGivenMixedCaseStrings() {
+ val str1 = "HeLLo WoRLd"
+ val str2 = "hello world"
+ assertFalse(str1.eTagChanged(str2))
+ }
+
+ @Test
+ fun testIsNotBlankAndEqualsWhenGivenUppercaseStrings() {
+ val str1 = "HELLO"
+ val str2 = "hello"
+ assertFalse(str1.eTagChanged(str2))
+ }
+
+ @Test
+ fun testIsNotBlankAndEqualsWhenGivenBothStringsAreIdenticalAndValid() {
+ val str1 = "hello"
+ val str2 = "hello"
+ assertFalse(str1.eTagChanged(str2))
+ }
+
+ @Test
+ fun testIsNotBlankAndEqualsWhenGivenBothStringsAreIdenticalWithSpaces() {
+ val str1 = "hello world"
+ val str2 = "hello world"
+ assertFalse(str1.eTagChanged(str2))
+ }
+
+ @Test
+ fun testIsNotBlankAndEqualsWhenGivenBothStringsAreIdenticalSingleCharacter() {
+ val str1 = "a"
+ val str2 = "A"
+ assertFalse(str1.eTagChanged(str2))
+ }
+
+ @Test
+ fun testIsNotBlankAndEqualsWhenGivenBothStringsAreIdenticalWithSpecialCharacters() {
+ val str1 = "hello@world!123"
+ val str2 = "HELLO@WORLD!123"
+ assertFalse(str1.eTagChanged(str2))
+ }
+
+ @Test
+ fun testIsNotBlankAndEqualsWhenGivenOneHasLeadingWhitespaceAndOtherDoesNot() {
+ val str1 = " hello"
+ val str2 = "HELLO"
+ assertTrue(str1.eTagChanged(str2))
+ }
+
+ @Test
+ fun testIsNotBlankAndEqualsWhenGivenOneHasTrailingWhitespaceAndOtherDoesNot() {
+ val str1 = "hello"
+ val str2 = "HELLO "
+ assertTrue(str1.eTagChanged(str2))
+ }
+
+ @Test
+ fun testIsNotBlankAndEqualsWhenGivenBothHaveIdenticalWhitespacePaddingDifferentCase() {
+ val str1 = " hello "
+ val str2 = " HELLO "
+ assertFalse(str1.eTagChanged(str2))
+ }
+
+ @Test
+ fun testIsNotBlankAndEqualsWhenGivenMixedWhitespaceCharacters() {
+ val str1 = "\t"
+ val str2 = "\n"
+ assertTrue(str1.eTagChanged(str2))
+ }
+
+ @Test
+ fun testIsNotBlankAndEqualsWhenGivenOneIsNullAndOtherIsEmpty() {
+ val str1: String? = null
+ val str2 = ""
+ assertTrue(str1.eTagChanged(str2))
+ }
+
+ @Test
+ fun testIsNotBlankAndEqualsWhenGivenOneIsNullAndOtherIsWhitespace() {
+ val str1: String? = null
+ val str2 = " "
+ assertTrue(str1.eTagChanged(str2))
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/sso/InputStreamBinderTest.kt b/app/src/androidTest/java/com/nextcloud/sso/InputStreamBinderTest.kt
new file mode 100644
index 000000000000..a7ad3de20764
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/sso/InputStreamBinderTest.kt
@@ -0,0 +1,48 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2021 Tobias Kaminsky
+ * SPDX-FileCopyrightText: 2021 Nextcloud GmbH
+ * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+ */
+package com.nextcloud.sso
+
+import com.nextcloud.android.sso.InputStreamBinder
+import com.nextcloud.android.sso.QueryParam
+import org.junit.Assert.assertEquals
+import org.junit.Test
+
+class InputStreamBinderTest {
+ @Test
+ fun convertMapToNVP() {
+ val source = mutableMapOf()
+ source["quality"] = "1024p"
+ source["someOtherParameter"] = "parameterValue"
+ source["duplicate"] = "1"
+ source["duplicate"] = "2" // this overwrites previous parameter
+
+ val output = InputStreamBinder.convertMapToNVP(source)
+
+ assertEquals(source.size, output.size)
+ assertEquals("1024p", output[0].value)
+ assertEquals("parameterValue", output[1].value)
+ assertEquals("2", output[2].value)
+ }
+
+ @Test
+ fun convertListToNVP() {
+ val source = mutableListOf()
+ source.add(QueryParam("quality", "1024p"))
+ source.add(QueryParam("someOtherParameter", "parameterValue"))
+ source.add(QueryParam("duplicate", "1"))
+ source.add(QueryParam("duplicate", "2")) // here we can have same parameter multiple times
+
+ val output = InputStreamBinder.convertListToNVP(source)
+
+ assertEquals(source.size, output.size)
+ assertEquals("1024p", output[0].value)
+ assertEquals("parameterValue", output[1].value)
+ assertEquals("1", output[2].value)
+ assertEquals("2", output[3].value)
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/strings/StringsTests.kt b/app/src/androidTest/java/com/nextcloud/strings/StringsTests.kt
new file mode 100644
index 000000000000..3c939cd37958
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/strings/StringsTests.kt
@@ -0,0 +1,37 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2026 Alper Ozturk
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+package com.nextcloud.strings
+
+import android.content.Context
+import androidx.test.platform.app.InstrumentationRegistry
+import com.nextcloud.client.jobs.upload.FileUploadHelper.Companion.MAX_FILE_COUNT
+import com.owncloud.android.R
+import org.junit.Assert.assertEquals
+import org.junit.Before
+import org.junit.Test
+
+class StringsTests {
+
+ private lateinit var context: Context
+
+ @Before
+ fun setup() {
+ context = InstrumentationRegistry.getInstrumentation().targetContext
+ }
+
+ @Test
+ fun testMaxFileCountText() {
+ val message = context.resources.getQuantityString(
+ R.plurals.file_upload_limit_message,
+ MAX_FILE_COUNT,
+ MAX_FILE_COUNT
+ )
+
+ assertEquals(message, "You can upload up to 500 files at once.")
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/test/ConnectivityServiceOfflineMock.kt b/app/src/androidTest/java/com/nextcloud/test/ConnectivityServiceOfflineMock.kt
new file mode 100644
index 000000000000..560b94ff6172
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/test/ConnectivityServiceOfflineMock.kt
@@ -0,0 +1,23 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2025 Philipp Hasper
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+package com.nextcloud.test
+
+import com.nextcloud.client.network.Connectivity
+import com.nextcloud.client.network.ConnectivityService
+
+/** A mocked connectivity service returning that the device is offline **/
+class ConnectivityServiceOfflineMock : ConnectivityService {
+ override fun isNetworkAndServerAvailable(callback: ConnectivityService.GenericCallback) {
+ callback.onComplete(false)
+ }
+
+ override fun isConnected(): Boolean = false
+
+ override fun isInternetWalled(): Boolean = false
+
+ override fun getConnectivity(): Connectivity = Connectivity.CONNECTED_WIFI
+}
diff --git a/app/src/androidTest/java/com/nextcloud/test/FileDeletionTests.kt b/app/src/androidTest/java/com/nextcloud/test/FileDeletionTests.kt
new file mode 100644
index 000000000000..a24c592a12d4
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/test/FileDeletionTests.kt
@@ -0,0 +1,296 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2026 Alper Ozturk
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+package com.nextcloud.test
+
+import com.owncloud.android.AbstractIT
+import com.owncloud.android.datamodel.OCFile
+import com.owncloud.android.utils.FileStorageUtils
+import com.owncloud.android.utils.MimeType
+import junit.framework.TestCase.assertFalse
+import junit.framework.TestCase.assertNotNull
+import junit.framework.TestCase.assertNull
+import junit.framework.TestCase.assertTrue
+import junit.framework.TestCase.fail
+import org.junit.After
+import org.junit.Before
+import org.junit.Test
+import java.io.File
+import kotlin.random.Random
+
+@Suppress("TooManyFunctions", "MagicNumber")
+class FileDeletionTests : AbstractIT() {
+
+ private lateinit var tempDir: File
+
+ @Before
+ fun setup() {
+ val parent = System.getProperty("java.io.tmpdir")
+ val childPath = "file_deletion_test_${System.currentTimeMillis()}"
+ tempDir = File(parent, childPath)
+ tempDir.mkdirs()
+ }
+
+ @After
+ fun cleanup() {
+ tempDir.deleteRecursively()
+ }
+
+ private fun getRandomRemoteId(): String = Random
+ .nextLong(10_000_000L, 99_999_999L)
+ .toString()
+ .padEnd(32, '0')
+
+ private fun createAndSaveSingleFileWithLocalCopy(): OCFile {
+ val now = System.currentTimeMillis()
+
+ val file = OCFile("/TestFile.txt").apply {
+ fileId = Random.nextLong(1, 10_000)
+ parentId = 0
+ remoteId = getRandomRemoteId()
+ fileLength = 1024
+ mimeType = MimeType.TEXT_PLAIN
+ creationTimestamp = now
+ modificationTimestamp = now
+ permissions = "RWDNV"
+ }
+
+ val localFile = File(tempDir, "TestFile_${file.fileId}.txt").apply {
+ parentFile?.mkdirs()
+ createNewFile()
+ writeText("Temporary test content")
+ }
+ file.storagePath = localFile.absolutePath
+
+ storageManager.saveFile(file)
+
+ return file
+ }
+
+ private fun createAndSaveFolderTree(): OCFile {
+ val now = System.currentTimeMillis()
+ val rootFolder = OCFile("/TestFolder").apply {
+ fileId = Random.nextLong(1, 10_000)
+ parentId = 0
+ remoteId = getRandomRemoteId()
+ mimeType = MimeType.DIRECTORY
+ creationTimestamp = now
+ modificationTimestamp = now
+ permissions = "RWDNVCK"
+ }
+
+ val subFolder = OCFile("/TestFolder/Sub").apply {
+ fileId = rootFolder.fileId + 1
+ parentId = rootFolder.fileId
+ remoteId = getRandomRemoteId()
+ mimeType = MimeType.DIRECTORY
+ creationTimestamp = now
+ modificationTimestamp = now
+ permissions = "RWDNVCK"
+ }
+
+ val file1 = OCFile("/TestFolder/file1.txt").apply {
+ fileId = rootFolder.fileId + 2
+ parentId = rootFolder.fileId
+ remoteId = getRandomRemoteId()
+ fileLength = 512
+ mimeType = MimeType.TEXT_PLAIN
+ creationTimestamp = now
+ modificationTimestamp = now
+ permissions = "RWDNV"
+ }
+
+ val file2 = OCFile("/TestFolder/Sub/file2.txt").apply {
+ fileId = rootFolder.fileId + 3
+ parentId = subFolder.fileId
+ remoteId = getRandomRemoteId()
+ fileLength = 256
+ mimeType = MimeType.TEXT_PLAIN
+ creationTimestamp = now
+ modificationTimestamp = now
+ permissions = "RWDNV"
+ }
+
+ listOf(rootFolder, subFolder, file1, file2).forEach { storageManager.saveFile(it) }
+
+ val file1Path = File(tempDir, "file1_${file1.fileId}.txt").apply { createNewFile() }
+ val file2Path = File(tempDir, "file2_${file2.fileId}.txt").apply { createNewFile() }
+
+ file1.storagePath = file1Path.absolutePath
+ file2.storagePath = file2Path.absolutePath
+
+ storageManager.saveFile(file1)
+ storageManager.saveFile(file2)
+
+ return rootFolder
+ }
+
+ private fun getMixedOcFiles(): List {
+ val now = System.currentTimeMillis()
+
+ fun createFolder(id: Long, parentId: Long, path: String): OCFile = OCFile(path).apply {
+ fileId = id
+ this.parentId = parentId
+ remoteId = getRandomRemoteId()
+ mimeType = MimeType.DIRECTORY
+ creationTimestamp = now
+ modificationTimestamp = now
+ permissions = "RWDNVCK"
+ }
+
+ fun createFile(id: Long, parentId: Long, path: String, size: Long, mime: String): OCFile = OCFile(path).apply {
+ fileId = id
+ this.parentId = parentId
+ remoteId = getRandomRemoteId()
+ fileLength = size
+ creationTimestamp = now
+ mimeType = mime
+ modificationTimestamp = now
+ permissions = "RWDNV"
+ }
+
+ val list = mutableListOf()
+
+ list.add(createFolder(1, 0, "/"))
+
+ list.add(createFolder(5, 2, "/Documents/Projects"))
+ list.add(createFile(9, 5, "/Documents/Projects/spec.txt", 12000, MimeType.TEXT_PLAIN))
+ list.add(createFolder(2, 1, "/Documents"))
+ list.add(createFile(11, 7, "/Photos/Vacation/img2.jpg", 300000, MimeType.JPEG))
+ list.add(createFolder(7, 3, "/Photos/Vacation"))
+ list.add(createFile(4, 2, "/Documents/example.pdf", 150000, MimeType.PDF))
+ list.add(createFolder(3, 1, "/Photos"))
+ list.add(createFile(12, 3, "/Photos/cover.png", 80000, MimeType.PNG))
+ list.add(createFile(6, 5, "/Documents/Projects/readme.txt", 2000, MimeType.TEXT_PLAIN))
+ list.add(createFolder(8, 5, "/Documents/Projects/Archive"))
+ list.add(createFile(13, 8, "/Documents/Projects/Archive/old.bmp", 900000, MimeType.BMP))
+ list.add(createFile(10, 7, "/Photos/Vacation/img1.jpg", 250000, MimeType.JPEG))
+ list.add(createFolder(14, 1, "/Temp"))
+ list.add(createFile(15, 14, "/Temp/tmp_file_1.txt", 400, MimeType.TEXT_PLAIN))
+ list.add(createFile(16, 14, "/Temp/tmp_file_2.txt", 800, MimeType.TEXT_PLAIN))
+ list.add(createFolder(17, 14, "/Temp/Nested"))
+ list.add(createFile(18, 17, "/Temp/Nested/deep.txt", 100, MimeType.TEXT_PLAIN))
+ list.add(createFile(19, 2, "/Documents/notes.txt", 1500, MimeType.TEXT_PLAIN))
+ list.add(createFolder(20, 3, "/Photos/EmptyFolder"))
+
+ list.forEach { ocFile ->
+ if (!ocFile.isFolder) {
+ val localFile = File(tempDir, ocFile.remoteId).apply {
+ parentFile?.mkdirs()
+ createNewFile()
+ writeText("test content")
+ }
+ ocFile.storagePath = localFile.absolutePath
+ storageManager.saveFile(ocFile)
+ } else {
+ // For folders, create the folder in tempDir
+ val localFolder = File(tempDir, ocFile.remoteId).apply { mkdirs() }
+ ocFile.storagePath = localFolder.absolutePath
+ storageManager.saveFile(ocFile)
+ }
+ }
+
+ return list
+ }
+
+ @Test
+ fun deleteMixedFiles() {
+ var result = false
+ val files = getMixedOcFiles()
+
+ files.forEach {
+ result = storageManager.removeFile(it, true, true)
+ if (!result) {
+ fail("remove operation is failed")
+ }
+ }
+
+ assert(result)
+ }
+
+ @Test
+ fun removeNullFileShouldReturnsFalse() {
+ val result = storageManager.removeFile(null, true, true)
+ assertFalse(result)
+ }
+
+ @Test
+ fun deleteFileOnlyFromDb() {
+ val file = createAndSaveSingleFileWithLocalCopy()
+
+ val result = storageManager.removeFile(file, true, false)
+
+ assertTrue(result)
+
+ // verify DB no longer contains file
+ val fromDb = storageManager.getFileById(file.fileId)
+ assertNull(fromDb)
+
+ // verify local file still exists
+ assertTrue(File(file.storagePath).exists())
+ }
+
+ @Test
+ fun deleteFileOnlyLocalCopy() {
+ val file = createAndSaveSingleFileWithLocalCopy()
+
+ val result = storageManager.removeFile(file, false, true)
+
+ assertTrue(result)
+
+ // DB should still contain file
+ val fromDb = storageManager.getFileById(file.fileId)
+ assertNotNull(fromDb)
+
+ // Storage path should be null
+ assertNull(fromDb?.storagePath)
+ }
+
+ @Test
+ fun deleteFileDBAndLocal() {
+ val file = createAndSaveSingleFileWithLocalCopy()
+
+ val result = storageManager.removeFile(file, true, true)
+
+ assertTrue(result)
+
+ assertNull(storageManager.getFileById(file.fileId))
+ assertFalse(File(file.storagePath).exists())
+ }
+
+ @Test
+ fun deleteFolderRecursive() {
+ val folder = createAndSaveFolderTree()
+
+ val result = storageManager.removeFile(folder, true, true)
+
+ assertTrue(result)
+
+ // Folder removed from DB
+ assertNull(storageManager.getFileById(folder.fileId))
+
+ // subdirectories and files are removed
+ val children = storageManager.getAllFilesRecursivelyInsideFolder(folder)
+ assertTrue(children.isEmpty())
+
+ // local folder removed
+ val localPath = FileStorageUtils.getDefaultSavePathFor(user.accountName, folder)
+ assertFalse(File(localPath).exists())
+ }
+
+ @Test
+ fun removeFolderFileIdMinusOneSkipsDBDeletion() {
+ val folder = OCFile("/Test").apply {
+ fileId = -1
+ mimeType = MimeType.DIRECTORY
+ }
+
+ val result = storageManager.removeFile(folder, true, false)
+
+ assertTrue(result)
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/test/FileRemovedIdlingResource.kt b/app/src/androidTest/java/com/nextcloud/test/FileRemovedIdlingResource.kt
new file mode 100644
index 000000000000..8d52cc303047
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/test/FileRemovedIdlingResource.kt
@@ -0,0 +1,51 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2025 Philipp Hasper
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+package com.nextcloud.test
+
+import androidx.test.espresso.IdlingResource
+import com.owncloud.android.datamodel.FileDataStorageManager
+import com.owncloud.android.datamodel.OCFile
+import java.util.concurrent.atomic.AtomicLong
+import java.util.concurrent.atomic.AtomicReference
+
+/**
+ * IdlingResource that can be reused to watch the removal of different file ids sequentially.
+ *
+ * Use setFileId(fileId) before triggering the deletion. The resource will call the Espresso callback
+ * once the file no longer exists. Call unregister from IdlingRegistry in @After.
+ */
+class FileRemovedIdlingResource(private val storageManager: FileDataStorageManager) : IdlingResource {
+ private var resourceCallback: IdlingResource.ResourceCallback? = null
+
+ // null means "no file set"
+ private var currentFile = AtomicReference(null)
+
+ override fun getName(): String = "${this::class.java.simpleName}"
+
+ override fun isIdleNow(): Boolean {
+ val file = currentFile.get()
+ // If no file set, consider idle. If file set, idle only if it doesn't exist.
+ val idle = file == null || (!storageManager.fileExists(file.fileId) && !file.exists())
+ if (idle && file != null) {
+ // if we detect it's already removed, notify and clear
+ resourceCallback?.onTransitionToIdle()
+ currentFile.set(null)
+ }
+ return idle
+ }
+
+ override fun registerIdleTransitionCallback(callback: IdlingResource.ResourceCallback) {
+ this.resourceCallback = callback
+ }
+
+ /**
+ * Start watching the given file. Call this right before performing the UI action that triggers deletion.
+ */
+ fun setFile(file: OCFile) {
+ currentFile.set(file)
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/test/GrantStoragePermissionRule.kt b/app/src/androidTest/java/com/nextcloud/test/GrantStoragePermissionRule.kt
new file mode 100644
index 000000000000..6bc4cd750e18
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/test/GrantStoragePermissionRule.kt
@@ -0,0 +1,47 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2021 Ãlvaro Brey
+ * SPDX-FileCopyrightText: 2021 Nextcloud GmbH
+ * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+ */
+package com.nextcloud.test
+
+import android.Manifest
+import android.os.Build
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.test.rule.GrantPermissionRule
+import org.junit.rules.TestRule
+import org.junit.runner.Description
+import org.junit.runners.model.Statement
+
+/**
+ * Rule to automatically enable the test to write to the external storage.
+ * Depending on the SDK version, different approaches might be necessary to achieve the full access.
+ */
+class GrantStoragePermissionRule private constructor() {
+
+ companion object {
+ @JvmStatic
+ fun grant(): TestRule = when {
+ Build.VERSION.SDK_INT < Build.VERSION_CODES.R -> GrantPermissionRule.grant(
+ Manifest.permission.WRITE_EXTERNAL_STORAGE
+ )
+
+ else -> GrantManageExternalStoragePermissionRule()
+ }
+ }
+
+ private class GrantManageExternalStoragePermissionRule : TestRule {
+ override fun apply(base: Statement, description: Description): Statement = object : Statement() {
+ override fun evaluate() {
+ // Refer to https://developer.android.com/training/data-storage/manage-all-files#enable-manage-external-storage-for-testing
+ InstrumentationRegistry.getInstrumentation().uiAutomation.executeShellCommand(
+ "appops set --uid ${InstrumentationRegistry.getInstrumentation().targetContext.packageName} " +
+ "MANAGE_EXTERNAL_STORAGE allow"
+ )
+ base.evaluate()
+ }
+ }
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/test/InjectionOverrideRule.kt b/app/src/androidTest/java/com/nextcloud/test/InjectionOverrideRule.kt
new file mode 100644
index 000000000000..0bb023f4376d
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/test/InjectionOverrideRule.kt
@@ -0,0 +1,29 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2023 Ãlvaro Brey
+ * SPDX-FileCopyrightText: 2023 Nextcloud GmbH
+ * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+ */
+package com.nextcloud.test
+
+import android.app.Instrumentation
+import androidx.test.platform.app.InstrumentationRegistry
+import dagger.android.AndroidInjector
+import org.junit.rules.TestRule
+import org.junit.runner.Description
+import org.junit.runners.model.Statement
+
+class InjectionOverrideRule(private val overrideInjectors: Map, AndroidInjector<*>>) : TestRule {
+ override fun apply(base: Statement, description: Description): Statement = object : Statement() {
+ override fun evaluate() {
+ val instrumentation: Instrumentation = InstrumentationRegistry.getInstrumentation()
+ val testApp = instrumentation.targetContext.applicationContext as TestMainApp
+ overrideInjectors.entries.forEach {
+ testApp.addTestInjector(it.key, it.value)
+ }
+ base.evaluate()
+ testApp.clearTestInjectors()
+ }
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/test/InjectionTestActivityTest.kt b/app/src/androidTest/java/com/nextcloud/test/InjectionTestActivityTest.kt
new file mode 100644
index 000000000000..76a3d19efee6
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/test/InjectionTestActivityTest.kt
@@ -0,0 +1,47 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2023 Ãlvaro Brey
+ * SPDX-FileCopyrightText: 2023 Nextcloud GmbH
+ * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+ */
+package com.nextcloud.test
+
+import androidx.test.core.app.launchActivity
+import androidx.test.espresso.Espresso.onView
+import androidx.test.espresso.assertion.ViewAssertions.matches
+import androidx.test.espresso.matcher.ViewMatchers.withId
+import androidx.test.espresso.matcher.ViewMatchers.withText
+import com.nextcloud.client.preferences.AppPreferences
+import com.owncloud.android.R
+import dagger.android.AndroidInjector
+import io.mockk.every
+import io.mockk.mockk
+import org.junit.Rule
+import org.junit.Test
+
+class InjectionTestActivityTest {
+
+ @get:Rule
+ val injectionOverrideRule =
+ InjectionOverrideRule(
+ mapOf(
+ InjectionTestActivity::class.java to AndroidInjector { activity ->
+ val appPreferencesMock = mockk()
+ every { appPreferencesMock.lastUploadPath } returns INJECTED_STRING
+ activity.appPreferences = appPreferencesMock
+ }
+ )
+ )
+
+ @Test
+ fun testInjectionOverride() {
+ launchActivity().use { _ ->
+ onView(withId(R.id.text)).check(matches(withText(INJECTED_STRING)))
+ }
+ }
+
+ companion object {
+ private const val INJECTED_STRING = "injected string"
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/test/LoopFailureHandler.kt b/app/src/androidTest/java/com/nextcloud/test/LoopFailureHandler.kt
new file mode 100644
index 000000000000..48baf2cec9b0
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/test/LoopFailureHandler.kt
@@ -0,0 +1,37 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2025 Philipp Hasper
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+package com.nextcloud.test
+
+import android.content.Context
+import android.view.View
+import androidx.test.espresso.FailureHandler
+import androidx.test.espresso.base.DefaultFailureHandler
+import org.hamcrest.Matcher
+
+/**
+ * When testing inside of a loop, test failures are hard to attribute. For that, wrap them in an outer
+ * exception detailing more about the context.
+ *
+ * Set the failure handler via
+ * ```
+ * Espresso.setFailureHandler(
+ * LoopFailureHandler(targetContext, "Test failed in iteration $yourTestIterationCounter")
+ * )
+ * ```
+ * and set it back to the default afterwards via
+ * ```
+ * Espresso.setFailureHandler(DefaultFailureHandler(targetContext))
+ * ```
+ */
+class LoopFailureHandler(targetContext: Context, private val loopMessage: String) : FailureHandler {
+ private val delegate: FailureHandler = DefaultFailureHandler(targetContext)
+
+ override fun handle(error: Throwable?, viewMatcher: Matcher?) {
+ // Wrap in additional Exception
+ delegate.handle(Exception(loopMessage, error), viewMatcher)
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/test/NextcloudViewMatchers.kt b/app/src/androidTest/java/com/nextcloud/test/NextcloudViewMatchers.kt
new file mode 100644
index 000000000000..11fa50fb90b0
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/test/NextcloudViewMatchers.kt
@@ -0,0 +1,31 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2025 Philipp Hasper
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+package com.nextcloud.test
+
+import android.view.View
+import android.widget.TextView
+import org.hamcrest.Description
+import org.hamcrest.Matcher
+import org.hamcrest.TypeSafeMatcher
+
+fun withSelectedText(expected: String): Matcher = object : TypeSafeMatcher() {
+ override fun describeTo(description: Description) {
+ description.appendText("with selected text \"$expected\"")
+ }
+
+ @Suppress("ReturnCount")
+ override fun matchesSafely(view: View): Boolean {
+ if (view !is TextView) return false
+ val text = view.text?.toString() ?: ""
+ val s = view.selectionStart
+ val e = view.selectionEnd
+ @Suppress("ComplexCondition")
+ if (s < 0 || e < 0 || s > e || e > text.length) return false
+ return text.substring(s, e) == expected
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/test/RandomStringGenerator.kt b/app/src/androidTest/java/com/nextcloud/test/RandomStringGenerator.kt
new file mode 100644
index 000000000000..44a55e390bc3
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/test/RandomStringGenerator.kt
@@ -0,0 +1,19 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2022 Ãlvaro Brey
+ * SPDX-FileCopyrightText: 2022 Nextcloud GmbH
+ * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+ */
+package com.nextcloud.test
+
+object RandomStringGenerator {
+ private const val DEFAULT_LENGTH = 8
+ private val ALLOWED_CHARACTERS = ('A'..'Z') + ('a'..'z') + ('0'..'9')
+
+ @JvmOverloads
+ @JvmStatic
+ fun make(length: Int = DEFAULT_LENGTH): String = (1..length)
+ .map { ALLOWED_CHARACTERS.random() }
+ .joinToString("")
+}
diff --git a/app/src/androidTest/java/com/nextcloud/test/RetryTestRule.kt b/app/src/androidTest/java/com/nextcloud/test/RetryTestRule.kt
new file mode 100644
index 000000000000..45506db38800
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/test/RetryTestRule.kt
@@ -0,0 +1,56 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2020 Tobias Kaminsky
+ * SPDX-FileCopyrightText: 2020 Nextcloud GmbH
+ * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+ */
+package com.nextcloud.test
+
+import com.owncloud.android.BuildConfig
+import com.owncloud.android.lib.common.utils.Log_OC
+import org.junit.rules.TestRule
+import org.junit.runner.Description
+import org.junit.runners.model.Statement
+
+/**
+ * C&p from https://stackoverflow.com/questions/45635833/how-can-i-use-flakytest-annotation-now on 18.03.2020
+ */
+class RetryTestRule(val retryCount: Int = defaultRetryValue) : TestRule {
+
+ companion object {
+ private val TAG = RetryTestRule::class.java.simpleName
+
+ @Suppress("MagicNumber")
+ private val defaultRetryValue: Int = if (BuildConfig.CI) 5 else 1
+ }
+
+ override fun apply(base: Statement, description: Description): Statement = statement(base, description)
+
+ @Suppress("TooGenericExceptionCaught") // and this exactly what we want here
+ private fun statement(base: Statement, description: Description): Statement {
+ return object : Statement() {
+
+ override fun evaluate() {
+ Log_OC.d(TAG, "Evaluating ${description.methodName}")
+
+ var caughtThrowable: Throwable? = null
+
+ for (i in 0 until retryCount) {
+ try {
+ base.evaluate()
+ return
+ } catch (t: Throwable) {
+ caughtThrowable = t
+ Log_OC.e(TAG, description.methodName + ": run " + (i + 1) + " failed")
+ }
+ }
+
+ Log_OC.e(TAG, description.methodName + ": giving up after " + retryCount + " failures")
+ if (caughtThrowable != null) {
+ throw caughtThrowable
+ }
+ }
+ }
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/test/TestMainApp.kt b/app/src/androidTest/java/com/nextcloud/test/TestMainApp.kt
new file mode 100644
index 000000000000..912c7cd95b52
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/test/TestMainApp.kt
@@ -0,0 +1,59 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2023 Ãlvaro Brey
+ * SPDX-FileCopyrightText: 2023 Nextcloud GmbH
+ * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+ */
+package com.nextcloud.test
+
+import com.owncloud.android.MainApp
+import com.owncloud.android.lib.common.utils.Log_OC
+import dagger.android.AndroidInjector
+import dagger.android.DispatchingAndroidInjector
+
+/**
+ * The purpose of this class is to allow overriding injections in Android classes (which use parameter injection instead
+ * of constructor injection).
+ *
+ * To automate its usage, pair with [InjectionOverrideRule]; or call [addTestInjector] manually for more control.
+ */
+class TestMainApp : MainApp() {
+
+ val foo = "BAR"
+ private var overrideInjectors: MutableMap, AndroidInjector<*>> = mutableMapOf()
+
+ /**
+ * If you call this before a test please remember to call [clearTestInjectors] afterwards
+ */
+ fun addTestInjector(clazz: Class<*>, injector: AndroidInjector<*>) {
+ Log_OC.d(TAG, "addTestInjector: added injector for $clazz")
+ overrideInjectors[clazz] = injector
+ }
+
+ fun clearTestInjectors() {
+ overrideInjectors.clear()
+ }
+
+ override fun androidInjector(): AndroidInjector {
+ @Suppress("UNCHECKED_CAST")
+ return InjectorWrapper(dispatchingAndroidInjector, overrideInjectors as Map, AndroidInjector>)
+ }
+
+ class InjectorWrapper(
+ private val baseInjector: DispatchingAndroidInjector,
+ private val overrideInjectors: Map, AndroidInjector>
+ ) : AndroidInjector {
+ override fun inject(instance: Any) {
+ baseInjector.inject(instance)
+ overrideInjectors[instance.javaClass]?.let { customInjector ->
+ Log_OC.d(TAG, "Injecting ${instance.javaClass} with ${customInjector.javaClass}")
+ customInjector.inject(instance)
+ }
+ }
+ }
+
+ companion object {
+ private const val TAG = "TestMainApp"
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/test/model/TestModels.kt b/app/src/androidTest/java/com/nextcloud/test/model/TestModels.kt
new file mode 100644
index 000000000000..37dcd1d844c9
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/test/model/TestModels.kt
@@ -0,0 +1,34 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2024 Alper Ozturk
+ * SPDX-FileCopyrightText: 2024 Nextcloud GmbH
+ * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+ */
+package com.nextcloud.test.model
+
+import android.os.Parcel
+import android.os.Parcelable
+import kotlinx.parcelize.Parcelize
+import java.io.Serializable
+
+@Parcelize
+class OtherTestData : Parcelable
+
+data class TestData(val message: String) : Serializable
+
+data class TestDataParcelable(val message: String) : Parcelable {
+ constructor(parcel: Parcel) : this(parcel.readString() ?: "")
+
+ override fun writeToParcel(parcel: Parcel, flags: Int) {
+ parcel.writeString(message)
+ }
+
+ override fun describeContents(): Int = 0
+
+ companion object CREATOR : Parcelable.Creator {
+ override fun createFromParcel(parcel: Parcel): TestDataParcelable = TestDataParcelable(parcel)
+
+ override fun newArray(size: Int): Array = arrayOfNulls(size)
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/ui/BitmapIT.kt b/app/src/androidTest/java/com/nextcloud/ui/BitmapIT.kt
new file mode 100644
index 000000000000..2d841e299c7f
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/ui/BitmapIT.kt
@@ -0,0 +1,63 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2025 Alper Ozturk
+ * SPDX-FileCopyrightText: 2022 Tobias Kaminsky
+ * SPDX-FileCopyrightText: 2022 Nextcloud GmbH
+ * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+ */
+package com.nextcloud.ui
+
+import android.graphics.BitmapFactory
+import android.widget.ImageView
+import android.widget.LinearLayout
+import androidx.test.core.app.launchActivity
+import androidx.test.espresso.Espresso.onView
+import androidx.test.espresso.assertion.ViewAssertions.matches
+import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
+import androidx.test.espresso.matcher.ViewMatchers.isRoot
+import com.nextcloud.test.TestActivity
+import com.owncloud.android.AbstractIT
+import com.owncloud.android.R
+import com.owncloud.android.utils.BitmapUtils
+import com.owncloud.android.utils.ScreenshotTest
+import org.junit.Test
+
+class BitmapIT : AbstractIT() {
+ private val testClassName = "com.nextcloud.ui.BitmapIT"
+
+ @Test
+ @ScreenshotTest
+ fun roundBitmap() {
+ launchActivity().use { scenario ->
+ scenario.onActivity { activity ->
+ val file = getFile("christine.jpg")
+ val bitmap = BitmapFactory.decodeFile(file.absolutePath)
+
+ val imageView = ImageView(activity).apply {
+ setImageBitmap(bitmap)
+ }
+
+ val bitmap2 = BitmapFactory.decodeFile(file.absolutePath)
+ val imageView2 = ImageView(activity).apply {
+ setImageBitmap(BitmapUtils.roundBitmap(bitmap2))
+ }
+
+ val linearLayout = LinearLayout(activity).apply {
+ orientation = LinearLayout.VERTICAL
+ setBackgroundColor(context.getColor(R.color.grey_200))
+ }
+ linearLayout.addView(imageView, 200, 200)
+ linearLayout.addView(imageView2, 200, 200)
+ activity.addView(linearLayout)
+ }
+
+ val screenShotName = createName(testClassName + "_" + "roundBitmap", "")
+ onView(isRoot()).check(matches(isDisplayed()))
+
+ scenario.onActivity { activity ->
+ screenshotViaName(activity, screenShotName)
+ }
+ }
+ }
+}
diff --git a/app/src/androidTest/java/com/nextcloud/ui/SetOnlineStatusBottomSheetIT.kt b/app/src/androidTest/java/com/nextcloud/ui/SetOnlineStatusBottomSheetIT.kt
new file mode 100644
index 000000000000..c9e07da94cfd
--- /dev/null
+++ b/app/src/androidTest/java/com/nextcloud/ui/SetOnlineStatusBottomSheetIT.kt
@@ -0,0 +1,50 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2025 Alper Ozturk
+ * SPDX-FileCopyrightText: 2020 Tobias Kaminsky