Browse Source

Initial commit

pull/19/head
jld3103 2 years ago
commit
6c69f978f3
No known key found for this signature in database
GPG Key ID: 9062417B9E8EB7B3
  1. 1
      .fvm/.gitignore
  2. 4
      .fvm/fvm_config.json
  3. 1
      .gitattributes
  4. 1
      .github/workflows/.gitattributes
  5. 273
      .github/workflows/dart.yml
  6. 15
      .gitmodules
  7. 10
      .idea/.gitignore
  8. 7
      .idea/codeStyles/Project.xml
  9. 5
      .idea/codeStyles/codeStyleConfig.xml
  10. 9
      .idea/misc.xml
  11. 8
      .idea/modules.xml
  12. 4
      .idea/php.xml
  13. 6
      .idea/runConfigurations/Debug.xml
  14. 7
      .idea/runConfigurations/Release.xml
  15. 11
      .idea/vcs.xml
  16. 12
      LICENSE
  17. 40
      README.md
  18. 1
      external/nextcloud-news
  19. 1
      external/nextcloud-notes
  20. 1
      external/nextcloud-server
  21. 1
      external/openapi-generator
  22. 1
      external/seti-ui
  23. 11
      mono_repo.yaml
  24. 12
      packages/file_icons/.gitignore
  25. 12
      packages/file_icons/LICENSE
  26. 6
      packages/file_icons/README.md
  27. 5
      packages/file_icons/analysis_options.yaml
  28. 159
      packages/file_icons/bin/file_icons.dart
  29. 52
      packages/file_icons/lib/file_icons.dart
  30. 558
      packages/file_icons/lib/src/data.dart
  31. 9
      packages/file_icons/lib/src/meta.dart
  32. 7
      packages/file_icons/mono_pkg.yaml
  33. 23
      packages/file_icons/pubspec.yaml
  34. 46
      packages/harbour/.gitignore
  35. 10
      packages/harbour/.metadata
  36. 12
      packages/harbour/LICENSE
  37. 11
      packages/harbour/README.md
  38. 9
      packages/harbour/analysis_options.yaml
  39. 13
      packages/harbour/android/.gitignore
  40. 67
      packages/harbour/android/app/build.gradle
  41. 1
      packages/harbour/android/app/proguard-rules.pro
  42. 7
      packages/harbour/android/app/src/debug/AndroidManifest.xml
  43. 34
      packages/harbour/android/app/src/main/AndroidManifest.xml
  44. 6
      packages/harbour/android/app/src/main/kotlin/de/provokateurin/harbour/MainActivity.kt
  45. BIN
      packages/harbour/android/app/src/main/res/drawable-hdpi/android12splash.png
  46. BIN
      packages/harbour/android/app/src/main/res/drawable-hdpi/splash.png
  47. BIN
      packages/harbour/android/app/src/main/res/drawable-mdpi/android12splash.png
  48. BIN
      packages/harbour/android/app/src/main/res/drawable-mdpi/splash.png
  49. BIN
      packages/harbour/android/app/src/main/res/drawable-night-v21/background.png
  50. 9
      packages/harbour/android/app/src/main/res/drawable-night-v21/launch_background.xml
  51. BIN
      packages/harbour/android/app/src/main/res/drawable-night/background.png
  52. 9
      packages/harbour/android/app/src/main/res/drawable-night/launch_background.xml
  53. BIN
      packages/harbour/android/app/src/main/res/drawable-v21/background.png
  54. 9
      packages/harbour/android/app/src/main/res/drawable-v21/launch_background.xml
  55. BIN
      packages/harbour/android/app/src/main/res/drawable-xhdpi/android12splash.png
  56. BIN
      packages/harbour/android/app/src/main/res/drawable-xhdpi/splash.png
  57. BIN
      packages/harbour/android/app/src/main/res/drawable-xxhdpi/android12splash.png
  58. BIN
      packages/harbour/android/app/src/main/res/drawable-xxhdpi/splash.png
  59. BIN
      packages/harbour/android/app/src/main/res/drawable-xxxhdpi/android12splash.png
  60. BIN
      packages/harbour/android/app/src/main/res/drawable-xxxhdpi/splash.png
  61. BIN
      packages/harbour/android/app/src/main/res/drawable/background.png
  62. 9
      packages/harbour/android/app/src/main/res/drawable/launch_background.xml
  63. BIN
      packages/harbour/android/app/src/main/res/mipmap-hdpi/app_files.png
  64. BIN
      packages/harbour/android/app/src/main/res/mipmap-hdpi/app_news.png
  65. BIN
      packages/harbour/android/app/src/main/res/mipmap-hdpi/app_notes.png
  66. BIN
      packages/harbour/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
  67. BIN
      packages/harbour/android/app/src/main/res/mipmap-mdpi/app_files.png
  68. BIN
      packages/harbour/android/app/src/main/res/mipmap-mdpi/app_news.png
  69. BIN
      packages/harbour/android/app/src/main/res/mipmap-mdpi/app_notes.png
  70. BIN
      packages/harbour/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
  71. BIN
      packages/harbour/android/app/src/main/res/mipmap-xhdpi/app_files.png
  72. BIN
      packages/harbour/android/app/src/main/res/mipmap-xhdpi/app_news.png
  73. BIN
      packages/harbour/android/app/src/main/res/mipmap-xhdpi/app_notes.png
  74. BIN
      packages/harbour/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
  75. BIN
      packages/harbour/android/app/src/main/res/mipmap-xxhdpi/app_files.png
  76. BIN
      packages/harbour/android/app/src/main/res/mipmap-xxhdpi/app_news.png
  77. BIN
      packages/harbour/android/app/src/main/res/mipmap-xxhdpi/app_notes.png
  78. BIN
      packages/harbour/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
  79. BIN
      packages/harbour/android/app/src/main/res/mipmap-xxxhdpi/app_files.png
  80. BIN
      packages/harbour/android/app/src/main/res/mipmap-xxxhdpi/app_news.png
  81. BIN
      packages/harbour/android/app/src/main/res/mipmap-xxxhdpi/app_notes.png
  82. BIN
      packages/harbour/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
  83. 3
      packages/harbour/android/app/src/main/res/raw/keep.xml
  84. 20
      packages/harbour/android/app/src/main/res/values-night-v31/styles.xml
  85. 21
      packages/harbour/android/app/src/main/res/values-night/styles.xml
  86. 21
      packages/harbour/android/app/src/main/res/values-v31/styles.xml
  87. 21
      packages/harbour/android/app/src/main/res/values/styles.xml
  88. 7
      packages/harbour/android/app/src/profile/AndroidManifest.xml
  89. 31
      packages/harbour/android/build.gradle
  90. 3
      packages/harbour/android/gradle.properties
  91. 6
      packages/harbour/android/gradle/wrapper/gradle-wrapper.properties
  92. 11
      packages/harbour/android/settings.gradle
  93. 1
      packages/harbour/assets/.gitignore
  94. 2
      packages/harbour/assets/LEGALESE.txt
  95. 1
      packages/harbour/assets/apps/files.svg
  96. 4
      packages/harbour/assets/apps/news.svg
  97. 1
      packages/harbour/assets/apps/notes.svg
  98. 1
      packages/harbour/assets/logo_harbour.svg
  99. 77
      packages/harbour/assets/logo_nextcloud.svg
  100. 10
      packages/harbour/flutter_native_splash.yaml
  101. Some files were not shown because too many files have changed in this diff Show More

1
.fvm/.gitignore vendored

@ -0,0 +1 @@
/flutter_sdk

4
.fvm/fvm_config.json

@ -0,0 +1,4 @@
{
"flutterSdkVersion": "3.0.4@stable",
"flavors": {}
}

1
.gitattributes vendored

@ -0,0 +1 @@
*.g.dart -diff

1
.github/workflows/.gitattributes vendored

@ -0,0 +1 @@
dart.yml -diff

273
.github/workflows/dart.yml

@ -0,0 +1,273 @@
# Created with package:mono_repo v6.3.0
name: Dart CI
on:
push:
branches:
- main
pull_request:
defaults:
run:
shell: bash
env:
PUB_ENVIRONMENT: bot.github
permissions: read-all
jobs:
job_001:
name: mono_repo self validate
runs-on: ubuntu-latest
steps:
- name: Cache Pub hosted dependencies
uses: actions/cache@4504faf7e9bcf8f3ed0bc863c4e1d21499ab8ef8
with:
path: "~/.pub-cache/hosted"
key: "os:ubuntu-latest;pub-cache-hosted;sdk:stable"
restore-keys: |
os:ubuntu-latest;pub-cache-hosted
os:ubuntu-latest
- uses: dart-lang/setup-dart@6a218f2413a3e78e9087f638a238f6b40893203d
with:
sdk: stable
- id: checkout
uses: actions/checkout@d0651293c4a5a52e711f25b41b05b2212f385d28
- name: mono_repo self validate
run: dart pub global activate mono_repo 6.3.0
- name: mono_repo self validate
run: dart pub global run mono_repo generate --validate
job_002:
name: "analyze; PKGS: packages/file_icons, packages/harbour, packages/nextcloud, packages/settings, packages/sort_box, packages/spec_templates; `dart format --output=none --set-exit-if-changed --line-length 120 .`"
runs-on: ubuntu-latest
steps:
- name: Cache Pub hosted dependencies
uses: actions/cache@4504faf7e9bcf8f3ed0bc863c4e1d21499ab8ef8
with:
path: "~/.pub-cache/hosted"
key: "os:ubuntu-latest;pub-cache-hosted;sdk:stable;packages:packages/file_icons-packages/harbour-packages/nextcloud-packages/settings-packages/sort_box-packages/spec_templates;commands:format"
restore-keys: |
os:ubuntu-latest;pub-cache-hosted;sdk:stable;packages:packages/file_icons-packages/harbour-packages/nextcloud-packages/settings-packages/sort_box-packages/spec_templates
os:ubuntu-latest;pub-cache-hosted;sdk:stable
os:ubuntu-latest;pub-cache-hosted
os:ubuntu-latest
- uses: subosito/flutter-action@2fb73e25c9488eb544b9b14b2ce00c4c2baf789e
with:
channel: stable
- id: checkout
uses: actions/checkout@d0651293c4a5a52e711f25b41b05b2212f385d28
- id: packages_file_icons_pub_upgrade
name: packages/file_icons; flutter pub pub upgrade
if: "always() && steps.checkout.conclusion == 'success'"
working-directory: packages/file_icons
run: flutter pub pub upgrade
- name: "packages/file_icons; dart format --output=none --set-exit-if-changed --line-length 120 ."
if: "always() && steps.packages_file_icons_pub_upgrade.conclusion == 'success'"
working-directory: packages/file_icons
run: "dart format --output=none --set-exit-if-changed --line-length 120 ."
- id: packages_harbour_pub_upgrade
name: packages/harbour; flutter pub pub upgrade
if: "always() && steps.checkout.conclusion == 'success'"
working-directory: packages/harbour
run: flutter pub pub upgrade
- name: "packages/harbour; dart format --output=none --set-exit-if-changed --line-length 120 ."
if: "always() && steps.packages_harbour_pub_upgrade.conclusion == 'success'"
working-directory: packages/harbour
run: "dart format --output=none --set-exit-if-changed --line-length 120 ."
- id: packages_nextcloud_pub_upgrade
name: packages/nextcloud; flutter pub pub upgrade
if: "always() && steps.checkout.conclusion == 'success'"
working-directory: packages/nextcloud
run: flutter pub pub upgrade
- name: "packages/nextcloud; dart format --output=none --set-exit-if-changed --line-length 120 ."
if: "always() && steps.packages_nextcloud_pub_upgrade.conclusion == 'success'"
working-directory: packages/nextcloud
run: "dart format --output=none --set-exit-if-changed --line-length 120 ."
- id: packages_settings_pub_upgrade
name: packages/settings; flutter pub pub upgrade
if: "always() && steps.checkout.conclusion == 'success'"
working-directory: packages/settings
run: flutter pub pub upgrade
- name: "packages/settings; dart format --output=none --set-exit-if-changed --line-length 120 ."
if: "always() && steps.packages_settings_pub_upgrade.conclusion == 'success'"
working-directory: packages/settings
run: "dart format --output=none --set-exit-if-changed --line-length 120 ."
- id: packages_sort_box_pub_upgrade
name: packages/sort_box; flutter pub pub upgrade
if: "always() && steps.checkout.conclusion == 'success'"
working-directory: packages/sort_box
run: flutter pub pub upgrade
- name: "packages/sort_box; dart format --output=none --set-exit-if-changed --line-length 120 ."
if: "always() && steps.packages_sort_box_pub_upgrade.conclusion == 'success'"
working-directory: packages/sort_box
run: "dart format --output=none --set-exit-if-changed --line-length 120 ."
- id: packages_spec_templates_pub_upgrade
name: packages/spec_templates; flutter pub pub upgrade
if: "always() && steps.checkout.conclusion == 'success'"
working-directory: packages/spec_templates
run: flutter pub pub upgrade
- name: "packages/spec_templates; dart format --output=none --set-exit-if-changed --line-length 120 ."
if: "always() && steps.packages_spec_templates_pub_upgrade.conclusion == 'success'"
working-directory: packages/spec_templates
run: "dart format --output=none --set-exit-if-changed --line-length 120 ."
needs:
- job_001
job_003:
name: "analyze; PKGS: packages/file_icons, packages/harbour, packages/settings; `flutter analyze`"
runs-on: ubuntu-latest
steps:
- name: Cache Pub hosted dependencies
uses: actions/cache@4504faf7e9bcf8f3ed0bc863c4e1d21499ab8ef8
with:
path: "~/.pub-cache/hosted"
key: "os:ubuntu-latest;pub-cache-hosted;sdk:stable;packages:packages/file_icons-packages/harbour-packages/settings;commands:analyze_0"
restore-keys: |
os:ubuntu-latest;pub-cache-hosted;sdk:stable;packages:packages/file_icons-packages/harbour-packages/settings
os:ubuntu-latest;pub-cache-hosted;sdk:stable
os:ubuntu-latest;pub-cache-hosted
os:ubuntu-latest
- uses: subosito/flutter-action@2fb73e25c9488eb544b9b14b2ce00c4c2baf789e
with:
channel: stable
- id: checkout
uses: actions/checkout@d0651293c4a5a52e711f25b41b05b2212f385d28
- id: packages_file_icons_pub_upgrade
name: packages/file_icons; flutter pub pub upgrade
if: "always() && steps.checkout.conclusion == 'success'"
working-directory: packages/file_icons
run: flutter pub pub upgrade
- name: packages/file_icons; flutter analyze
if: "always() && steps.packages_file_icons_pub_upgrade.conclusion == 'success'"
working-directory: packages/file_icons
run: flutter analyze
- id: packages_harbour_pub_upgrade
name: packages/harbour; flutter pub pub upgrade
if: "always() && steps.checkout.conclusion == 'success'"
working-directory: packages/harbour
run: flutter pub pub upgrade
- name: packages/harbour; flutter analyze
if: "always() && steps.packages_harbour_pub_upgrade.conclusion == 'success'"
working-directory: packages/harbour
run: flutter analyze
- id: packages_settings_pub_upgrade
name: packages/settings; flutter pub pub upgrade
if: "always() && steps.checkout.conclusion == 'success'"
working-directory: packages/settings
run: flutter pub pub upgrade
- name: packages/settings; flutter analyze
if: "always() && steps.packages_settings_pub_upgrade.conclusion == 'success'"
working-directory: packages/settings
run: flutter analyze
needs:
- job_001
job_004:
name: "analyze; PKGS: packages/nextcloud, packages/sort_box, packages/spec_templates; `dart analyze`"
runs-on: ubuntu-latest
steps:
- name: Cache Pub hosted dependencies
uses: actions/cache@4504faf7e9bcf8f3ed0bc863c4e1d21499ab8ef8
with:
path: "~/.pub-cache/hosted"
key: "os:ubuntu-latest;pub-cache-hosted;sdk:stable;packages:packages/nextcloud-packages/sort_box-packages/spec_templates;commands:analyze_1"
restore-keys: |
os:ubuntu-latest;pub-cache-hosted;sdk:stable;packages:packages/nextcloud-packages/sort_box-packages/spec_templates
os:ubuntu-latest;pub-cache-hosted;sdk:stable
os:ubuntu-latest;pub-cache-hosted
os:ubuntu-latest
- uses: dart-lang/setup-dart@6a218f2413a3e78e9087f638a238f6b40893203d
with:
sdk: stable
- id: checkout
uses: actions/checkout@d0651293c4a5a52e711f25b41b05b2212f385d28
- id: packages_nextcloud_pub_upgrade
name: packages/nextcloud; dart pub upgrade
if: "always() && steps.checkout.conclusion == 'success'"
working-directory: packages/nextcloud
run: dart pub upgrade
- name: packages/nextcloud; dart analyze
if: "always() && steps.packages_nextcloud_pub_upgrade.conclusion == 'success'"
working-directory: packages/nextcloud
run: dart analyze
- id: packages_sort_box_pub_upgrade
name: packages/sort_box; dart pub upgrade
if: "always() && steps.checkout.conclusion == 'success'"
working-directory: packages/sort_box
run: dart pub upgrade
- name: packages/sort_box; dart analyze
if: "always() && steps.packages_sort_box_pub_upgrade.conclusion == 'success'"
working-directory: packages/sort_box
run: dart analyze
- id: packages_spec_templates_pub_upgrade
name: packages/spec_templates; dart pub upgrade
if: "always() && steps.checkout.conclusion == 'success'"
working-directory: packages/spec_templates
run: dart pub upgrade
- name: packages/spec_templates; dart analyze
if: "always() && steps.packages_spec_templates_pub_upgrade.conclusion == 'success'"
working-directory: packages/spec_templates
run: dart analyze
needs:
- job_001
job_005:
name: "unit_test; PKG: packages/nextcloud; `dart test`"
runs-on: ubuntu-latest
steps:
- name: Cache Pub hosted dependencies
uses: actions/cache@4504faf7e9bcf8f3ed0bc863c4e1d21499ab8ef8
with:
path: "~/.pub-cache/hosted"
key: "os:ubuntu-latest;pub-cache-hosted;sdk:stable;packages:packages/nextcloud;commands:test"
restore-keys: |
os:ubuntu-latest;pub-cache-hosted;sdk:stable;packages:packages/nextcloud
os:ubuntu-latest;pub-cache-hosted;sdk:stable
os:ubuntu-latest;pub-cache-hosted
os:ubuntu-latest
- uses: dart-lang/setup-dart@6a218f2413a3e78e9087f638a238f6b40893203d
with:
sdk: stable
- id: checkout
uses: actions/checkout@d0651293c4a5a52e711f25b41b05b2212f385d28
- id: packages_nextcloud_pub_upgrade
name: packages/nextcloud; dart pub upgrade
if: "always() && steps.checkout.conclusion == 'success'"
working-directory: packages/nextcloud
run: dart pub upgrade
- name: packages/nextcloud; dart test
if: "always() && steps.packages_nextcloud_pub_upgrade.conclusion == 'success'"
working-directory: packages/nextcloud
run: dart test
needs:
- job_001
- job_002
- job_003
- job_004
job_006:
name: "unit_test; PKG: packages/sort_box; `dart test`"
runs-on: ubuntu-latest
steps:
- name: Cache Pub hosted dependencies
uses: actions/cache@4504faf7e9bcf8f3ed0bc863c4e1d21499ab8ef8
with:
path: "~/.pub-cache/hosted"
key: "os:ubuntu-latest;pub-cache-hosted;sdk:stable;packages:packages/sort_box;commands:test"
restore-keys: |
os:ubuntu-latest;pub-cache-hosted;sdk:stable;packages:packages/sort_box
os:ubuntu-latest;pub-cache-hosted;sdk:stable
os:ubuntu-latest;pub-cache-hosted
os:ubuntu-latest
- uses: dart-lang/setup-dart@6a218f2413a3e78e9087f638a238f6b40893203d
with:
sdk: stable
- id: checkout
uses: actions/checkout@d0651293c4a5a52e711f25b41b05b2212f385d28
- id: packages_sort_box_pub_upgrade
name: packages/sort_box; dart pub upgrade
if: "always() && steps.checkout.conclusion == 'success'"
working-directory: packages/sort_box
run: dart pub upgrade
- name: packages/sort_box; dart test
if: "always() && steps.packages_sort_box_pub_upgrade.conclusion == 'success'"
working-directory: packages/sort_box
run: dart test
needs:
- job_001
- job_002
- job_003
- job_004

15
.gitmodules vendored

@ -0,0 +1,15 @@
[submodule "external/nextcloud-server"]
path = external/nextcloud-server
url = https://github.com/nextcloud/server
[submodule "external/nextcloud-news"]
path = external/nextcloud-news
url = https://github.com/nextcloud/news
[submodule "external/openapi-generator"]
path = external/openapi-generator
url = https://github.com/OpenAPITools/openapi-generator
[submodule "external/seti-ui"]
path = external/seti-ui
url = https://github.com/jesseweed/seti-ui
[submodule "external/nextcloud-notes"]
path = external/nextcloud-notes
url = https://github.com/nextcloud/notes

10
.idea/.gitignore vendored

@ -0,0 +1,10 @@
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml
/libraries
*.iml

7
.idea/codeStyles/Project.xml

@ -0,0 +1,7 @@
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
<codeStyleSettings language="Dart">
<option name="RIGHT_MARGIN" value="120" />
</codeStyleSettings>
</code_scheme>
</component>

5
.idea/codeStyles/codeStyleConfig.xml

@ -0,0 +1,5 @@
<component name="ProjectCodeStyleConfiguration">
<state>
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
</state>
</component>

9
.idea/misc.xml

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" project-jdk-name="Android API 32 Platform" project-jdk-type="Android SDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
<component name="SuppressKotlinCodeStyleNotification">
<option name="disableForAll" value="true" />
</component>
</project>

8
.idea/modules.xml

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/nextcloud-harbour.iml" filepath="$PROJECT_DIR$/.idea/nextcloud-harbour.iml" />
</modules>
</component>
</project>

4
.idea/php.xml

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="PhpProjectSharedConfiguration" php_language_level="8.1" />
</project>

6
.idea/runConfigurations/Debug.xml

@ -0,0 +1,6 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Debug" type="FlutterRunConfigurationType" factoryName="Flutter">
<option name="filePath" value="$PROJECT_DIR$/packages/harbour/lib/main.dart" />
<method v="2" />
</configuration>
</component>

7
.idea/runConfigurations/Release.xml

@ -0,0 +1,7 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Release" type="FlutterRunConfigurationType" factoryName="Flutter">
<option name="additionalArgs" value="--release" />
<option name="filePath" value="$PROJECT_DIR$/packages/harbour/lib/main.dart" />
<method v="2" />
</configuration>
</component>

11
.idea/vcs.xml

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
<mapping directory="$PROJECT_DIR$/external/nextcloud-news" vcs="Git" />
<mapping directory="$PROJECT_DIR$/external/nextcloud-notes" vcs="Git" />
<mapping directory="$PROJECT_DIR$/external/nextcloud-server" vcs="Git" />
<mapping directory="$PROJECT_DIR$/external/openapi-generator" vcs="Git" />
<mapping directory="$PROJECT_DIR$/external/seti-ui" vcs="Git" />
</component>
</project>

12
LICENSE

@ -0,0 +1,12 @@
Copyright (c) 2022, jld3103
All rights reserved.
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.
3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 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.

40
README.md

@ -0,0 +1,40 @@
# nextcloud-harbour
A beautiful convergent cross-platform client for Nextcloud written in Flutter.
See [here](./packages/harbour/README.md) for screenshots and other material regarding the app.
This repository not only contains the Harbour app, but also a Nextcloud client written in Dart.
The client will replace https://github.com/jld3103/dart-nextcloud which is an older unmaintained client I wrote some time ago.
The development of this app and client just started, there will be a lot of changes and new features coming soon.
Additional documentation is very much appreciated. If you find something that you think should be documented, please open an issue or pull request.
## Features
There are a lot of planned features that still need help. Go [here](https://github.com/jld3103/nextcloud-harbour/issues?q=is%3Aopen+is%3Aissue+label%3Afeature) and grab an issue to work on.
Even if a new feature is not listed yet, please open an issue.
- :heavy_check_mark: Fully supported
- :white_check_mark: Fully supported, but new features planned
- :warning: Partially supported
- :rocket: Planned
| App | Status |
|----------|----------------------------------------------------------------------------------------------------------------------------------------------------------|
| Files | :white_check_mark: [See here](https://github.com/jld3103/nextcloud-harbour/issues?q=is%3Aopen+is%3Aissue+label%3A%22harbour%3A+files%22+label%3Afeature) |
| Notes | :heavy_check_mark: |
| News | :white_check_mark: [See here](https://github.com/jld3103/nextcloud-harbour/issues?q=is%3Aopen+is%3Aissue+label%3Afeature+label%3A%22harbour%3A+news%22) |
| Contacts | :rocket: |
| Calendar | :rocket: |
| Tasks | :rocket: |
| Cookbook | :rocket: |
## Platform support
Except for web, Harbour should run on all supported Flutter platforms in the future.
Right now this is not the case, only Android and Linux are supported and tested, but this can easily be extended to other platforms.
The features and problems of all platforms should be considered when implementing new features.

1
external/nextcloud-news vendored

@ -0,0 +1 @@
Subproject commit 01e4adfee2307a7a4c51b1f793e50d7d4f9325b8

1
external/nextcloud-notes vendored

@ -0,0 +1 @@
Subproject commit e7e9ea03c714198a7dada6494d51e77baa747812

1
external/nextcloud-server vendored

@ -0,0 +1 @@
Subproject commit 2764c381a054ca8284975e70037e96411d2ce8f8

1
external/openapi-generator vendored

@ -0,0 +1 @@
Subproject commit 69f79fb7892948590a9ffe46754c47ddd2634be1

1
external/seti-ui vendored

@ -0,0 +1 @@
Subproject commit 6b83574de165123583d6d8d5b3b6c91f04b7153d

11
mono_repo.yaml

@ -0,0 +1,11 @@
github:
on:
push:
branches:
- main
pull_request:
self_validate: true
merge_stages:
- analyze

12
packages/file_icons/.gitignore vendored

@ -0,0 +1,12 @@
# Files and directories created by pub.
.dart_tool/
.packages
# Conventional directory for build outputs.
build/
# Omit committing pubspec.lock for library packages; see
# https://dart.dev/guides/libraries/private-files#pubspeclock.
pubspec.lock
fonts/

12
packages/file_icons/LICENSE

@ -0,0 +1,12 @@
Copyright (c) 2022, jld3103
All rights reserved.
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.
3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 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.

6
packages/file_icons/README.md

@ -0,0 +1,6 @@
# file_icons
This is loosely ported from https://github.com/git-touch/file-icon.
I rewrote the script for generating the code in dart, improved the script and fixed some issues with the resulting output.
To regenerate the data run `fvm dart run`.

5
packages/file_icons/analysis_options.yaml

@ -0,0 +1,5 @@
include: package:nit_picking/dart.yaml
linter:
rules:
prefer_final_parameters: false # Disabled until super.X is no longer complained about in constructors

159
packages/file_icons/bin/file_icons.dart

@ -0,0 +1,159 @@
// This script was ported from https://github.com/git-touch/file-icon/blob/master/tool/gulpfile.esm.js and improved in many ways
import 'dart:io';
import 'package:path/path.dart' as p;
final setiUIPath = p.join(
'..',
'..',
'external',
'seti-ui',
);
void main() {
copyFont();
generateData();
}
void copyFont() {
final fontsDir = Directory('fonts');
if (!fontsDir.existsSync()) {
fontsDir.createSync();
}
File(
p.join(
setiUIPath,
'styles',
'_fonts',
'seti',
'seti.ttf',
),
).copySync(p.join('fonts', 'seti.ttf'));
}
void generateData() {
final mappingLess = File(
p.join(
setiUIPath,
'styles',
'components',
'icons',
'mapping.less',
),
).readAsStringSync();
final setiLess = File(
p.join(
setiUIPath,
'styles',
'_fonts',
'seti.less',
),
).readAsStringSync();
final uiVariablesLess = File(
p.join(
setiUIPath,
'styles',
'ui-variables.less',
),
).readAsStringSync();
final colors = <String, String>{'@seti-primary': '_blue'};
final iconSet = <String, List<String>>{};
final codePoints = <String, String>{};
// https://github.com/microsoft/vscode/blob/554182620f43390075d8c7e7fa36634288ef4e2d/extensions/theme-seti/build/update-icon-theme.js#L345
for (final match
in RegExp('\\.icon-(?:set|partial)\\([\'"]([\\w-.+]+)[\'"],\\s*[\'"]([\\w-]+)[\'"],\\s*(@[\\w-]+)\\)')
.allMatches(mappingLess)) {
final pattern = match.group(1)!.toLowerCase();
final type = match.group(2)!;
final colorName = match.group(3)!;
if (colorName != '@seti-primary') {
colors[colorName] = '';
}
if (iconSet[pattern] == null) {
iconSet[pattern] = [type, colorName];
}
}
for (final match in RegExp("^\t@([a-zA-Z0-9-_]+): '\\\\([A-Z0-9]+)';\$", multiLine: true).allMatches(setiLess)) {
codePoints[match.group(1)!] = '0x${match.group(2)!}';
}
for (final match
in RegExp('^(${colors.keys.join('|')}): #([a-f0-9]+);\$', multiLine: true).allMatches(uiVariablesLess)) {
final colorName = match.group(1)!;
final hexCode = match.group(2)!;
assert(hexCode.length == 6, 'CSS hex color needs to be six characters long');
colors[colorName] = '0xff$hexCode';
}
final code = <String>[
'// THIS CODE IS GENERATED - DO NOT EDIT MANUALLY',
'',
"import 'package:file_icons/src/meta.dart';",
'',
'// Code points',
// This filters unused codepoints.
for (final type in codePoints.keys
.where((final type) => iconSet.keys.map((final pattern) => iconSet[pattern]![0] == type).contains(true))) ...[
'const ${_toVariableName(type)} = ${codePoints[type]};',
],
'',
'// Colors',
for (final colorName in colors.keys) ...[
'const ${_toVariableName(colorName)} = ${colors[colorName]};',
],
'',
'/// Mapping between file extensions and code points and colors',
'const iconSetMap = {',
// This filters icons where the code points are missing. That indicates the fonts in seti-ui are not up-to-date.
// Run `gulp icons` in the seti-ui repository and everything should be there.
// Please submit the changes upstream if you can.
for (final pattern in iconSet.keys.where((final pattern) => codePoints.keys.contains(iconSet[pattern]![0]))) ...[
" '$pattern': SetiMeta(${_toVariableName(iconSet[pattern]![0])}, ${_toVariableName(iconSet[pattern]![1])}),",
],
'};',
'',
];
final missingCodePoints = iconSet.keys.where((final pattern) => !codePoints.keys.contains(iconSet[pattern]![0]));
if (missingCodePoints.isNotEmpty) {
print(
'WARNING: Missing code points for ${missingCodePoints.map((final pattern) => iconSet[pattern]![0]).toSet().join(', ')}',
);
}
File(
p.join(
'lib',
'src',
'data.dart',
),
).writeAsStringSync(code.join('\n'));
}
String _toVariableName(final String key) {
final result = StringBuffer('_');
final parts = key.split('');
for (var i = 0; i < parts.length; i++) {
var char = parts[i];
final prevChar = i > 0 ? parts[i - 1] : null;
if (char == '@' || char == '-' || char == '_') {
continue;
}
if (prevChar == '-' || prevChar == '_') {
char = char.toUpperCase();
}
if (i == 0) {
char = char.toLowerCase();
}
result.write(char);
}
return result.toString();
}

52
packages/file_icons/lib/file_icons.dart

@ -0,0 +1,52 @@
import 'package:file_icons/src/data.dart';
import 'package:flutter/widgets.dart';
// ignore: public_member_api_docs
class FileIcon extends StatelessWidget {
// ignore: public_member_api_docs
FileIcon(
final String fileName, {
this.size,
this.color,
super.key,
}) : fileName = fileName.toLowerCase();
/// Name of the file
final String fileName;
/// Size of the icon
final double? size;
/// This color will override the color provided from Seti icons
final Color? color;
@override
Widget build(final BuildContext context) {
String? key;
if (iconSetMap.containsKey(fileName)) {
key = fileName;
} else {
var chunks = fileName.split('.').sublist(1);
while (chunks.isNotEmpty) {
final k = '.${chunks.join()}';
if (iconSetMap.containsKey(k)) {
key = k;
break;
}
chunks = chunks.sublist(1);
}
}
final meta = iconSetMap[key ?? '.txt']!;
return Icon(
IconData(
meta.codePoint,
fontFamily: 'Seti',
fontPackage: 'file_icons',
),
color: color ?? Color(meta.color),
size: size,
);
}
}

558
packages/file_icons/lib/src/data.dart

@ -0,0 +1,558 @@
// THIS CODE IS GENERATED - DO NOT EDIT MANUALLY
import 'package:file_icons/src/meta.dart';
// Code points
const _r = 0xE001;
const _argdown = 0xE003;
const _asm = 0xE004;
const _audio = 0xE005;
const _babel = 0xE006;
const _bazel = 0xE007;
const _bicep = 0xE008;
const _bower = 0xE009;
const _bsl = 0xE00A;
const _cSharp = 0xE00B;
const _c = 0xE00C;
const _cake = 0xE00D;
const _cakePhp = 0xE00E;
const _clock = 0xE012;
const _clojure = 0xE013;
const _codeClimate = 0xE014;
const _codeSearch = 0xE015;
const _coffee = 0xE016;
const _coldfusion = 0xE018;
const _config = 0xE019;
const _cpp = 0xE01A;
const _crystal = 0xE01B;
const _crystalEmbedded = 0xE01C;
const _css = 0xE01D;
const _csv = 0xE01E;
const _cu = 0xE01F;
const _d = 0xE020;
const _dart = 0xE021;
const _db = 0xE022;
const _default = 0xE023;
const _docker = 0xE025;
const _ejs = 0xE027;
const _elixir = 0xE028;
const _elixirScript = 0xE029;
const _elm = 0xE02A;
const _eslint = 0xE02C;
const _ethereum = 0xE02D;
const _fSharp = 0xE02E;
const _favicon = 0xE02F;
const _firebase = 0xE030;
const _firefox = 0xE031;
const _font = 0xE033;
const _git = 0xE034;
const _github = 0xE037;
const _gitlab = 0xE038;
const _go = 0xE039;
const _go2 = 0xE03A;
const _godot = 0xE03B;
const _gradle = 0xE03C;
const _grails = 0xE03D;
const _graphql = 0xE03E;
const _grunt = 0xE03F;
const _gulp = 0xE040;
const _hacklang = 0xE041;
const _haml = 0xE042;
const _happenings = 0xE043;
const _haskell = 0xE044;
const _haxe = 0xE045;
const _heroku = 0xE046;
const _hex = 0xE047;
const _html = 0xE048;
const _htmlErb = 0xE049;
const _ignored = 0xE04A;
const _illustrator = 0xE04B;
const _image = 0xE04C;
const _info = 0xE04D;
const _ionic = 0xE04E;
const _jade = 0xE04F;
const _java = 0xE050;
const _javascript = 0xE051;
const _jenkins = 0xE052;
const _jinja = 0xE053;
const _json = 0xE055;
const _julia = 0xE056;
const _karma = 0xE057;
const _kotlin = 0xE058;
const _less = 0xE059;
const _license = 0xE05A;
const _liquid = 0xE05B;
const _livescript = 0xE05C;
const _lock = 0xE05D;
const _lua = 0xE05E;
const _makefile = 0xE05F;
const _markdown = 0xE060;
const _maven = 0xE061;
const _mdo = 0xE062;
const _mustache = 0xE063;
const _nim = 0xE065;
const _notebook = 0xE066;
const _npm = 0xE067;
const _npmIgnored = 0xE068;
const _nunjucks = 0xE069;
const _ocaml = 0xE06A;
const _odata = 0xE06B;
const _pddl = 0xE06C;
const _pdf = 0xE06D;
const _perl = 0xE06E;
const _photoshop = 0xE06F;
const _php = 0xE070;
const _pipeline = 0xE071;
const _plan = 0xE072;
const _platformio = 0xE073;
const _powershell = 0xE074;
const _prisma = 0xE075;
const _prolog = 0xE077;
const _pug = 0xE078;
const _puppet = 0xE079;
const _purescript = 0xE07A;
const _python = 0xE07B;
const _react = 0xE07D;
const _reasonml = 0xE07E;
const _rescript = 0xE07F;
const _rollup = 0xE080;
const _ruby = 0xE081;
const _rust = 0xE082;
const _salesforce = 0xE083;
const _sass = 0xE084;
const _sbt = 0xE085;
const _scala = 0xE086;
const _shell = 0xE089;
const _slim = 0xE08A;
const _smarty = 0xE08B;
const _spring = 0xE08C;
const _stylelint = 0xE08D;
const _stylus = 0xE08E;
const _sublime = 0xE08F;
const _svelte = 0xE090;
const _svg = 0xE091;
const _swift = 0xE092;
const _terraform = 0xE093;
const _tex = 0xE094;
const _todo = 0xE096;
const _tsconfig = 0xE097;
const _twig = 0xE098;
const _typescript = 0xE099;
const _vala = 0xE09A;
const _video = 0xE09B;
const _vue = 0xE09C;
const _wasm = 0xE09D;
const _wat = 0xE09E;
const _webpack = 0xE09F;
const _wgt = 0xE0A0;
const _windows = 0xE0A1;
const _word = 0xE0A2;
const _xls = 0xE0A3;
const _xml = 0xE0A4;
const _yarn = 0xE0A5;
const _yml = 0xE0A6;
const _zig = 0xE0A7;
const _zip = 0xE0A8;
// Colors
const _setiPrimary = _blue;
const _red = 0xffcc3e44;
const _blue = 0xff519aba;
const _green = 0xff8dc149;
const _purple = 0xffa074c4;
const _yellow = 0xffcbcb41;
const _greyLight = 0xff6d8086;
const _white = 0xffd4d7d6;
const _ignore = 0xff41535b;
const _pink = 0xfff55385;
const _orange = 0xffe37933;
const _grey = 0xff4d5a5e;
/// Mapping between file extensions and code points and colors
const iconSetMap = {
'.bsl': SetiMeta(_bsl, _red),
'.mdo': SetiMeta(_mdo, _red),
'.cls': SetiMeta(_salesforce, _blue),
'.apex': SetiMeta(_salesforce, _blue),
'.asm': SetiMeta(_asm, _red),
'.s': SetiMeta(_asm, _red),
'.bicep': SetiMeta(_bicep, _blue),
'.bzl': SetiMeta(_bazel, _green),
'.bazel': SetiMeta(_bazel, _green),
'.build': SetiMeta(_bazel, _green),
'.workspace': SetiMeta(_bazel, _green),
'.bazelignore': SetiMeta(_bazel, _green),
'.bazelversion': SetiMeta(_bazel, _green),
'.c': SetiMeta(_c, _blue),
'.h': SetiMeta(_c, _purple),
'.m': SetiMeta(_c, _yellow),
'.cs': SetiMeta(_cSharp, _blue),
'.cshtml': SetiMeta(_html, _blue),
'.aspx': SetiMeta(_html, _blue),
'.ascx': SetiMeta(_html, _green),
'.asax': SetiMeta(_html, _yellow),
'.master': SetiMeta(_html, _yellow),
'.cc': SetiMeta(_cpp, _blue),
'.cpp': SetiMeta(_cpp, _blue),
'.cxx': SetiMeta(_cpp, _blue),
'.c++': SetiMeta(_cpp, _blue),
'.hh': SetiMeta(_cpp, _purple),
'.hpp': SetiMeta(_cpp, _purple),
'.hxx': SetiMeta(_cpp, _purple),
'.h++': SetiMeta(_cpp, _purple),
'.mm': SetiMeta(_cpp, _yellow),
'.clj': SetiMeta(_clojure, _green),
'.cljs': SetiMeta(_clojure, _green),
'.cljc': SetiMeta(_clojure, _green),
'.edn': SetiMeta(_clojure, _blue),
'.cfc': SetiMeta(_coldfusion, _blue),
'.cfm': SetiMeta(_coldfusion, _blue),
'.coffee': SetiMeta(_coffee, _yellow),
'.litcoffee': SetiMeta(_coffee, _yellow),
'.config': SetiMeta(_config, _greyLight),
'.cfg': SetiMeta(_config, _greyLight),
'.conf': SetiMeta(_config, _greyLight),
'.cr': SetiMeta(_crystal, _white),
'.ecr': SetiMeta(_crystalEmbedded, _white),
'.slang': SetiMeta(_crystalEmbedded, _white),
'.cson': SetiMeta(_json, _yellow),
'.css': SetiMeta(_css, _blue),
'.css.map': SetiMeta(_css, _blue),
'.sss': SetiMeta(_css, _blue),
'.csv': SetiMeta(_csv, _green),
'.xls': SetiMeta(_xls, _green),
'.xlsx': SetiMeta(_xls, _green),
'.cu': SetiMeta(_cu, _green),
'.cuh': SetiMeta(_cu, _purple),
'.hu': SetiMeta(_cu, _purple),
'.cake': SetiMeta(_cake, _red),
'.ctp': SetiMeta(_cakePhp, _red),
'.d': SetiMeta(_d, _red),
'.doc': SetiMeta(_word, _blue),
'.docx': SetiMeta(_word, _blue),
'.ejs': SetiMeta(_ejs, _yellow),
'.ex': SetiMeta(_elixir, _purple),
'.exs': SetiMeta(_elixirScript, _purple),
'mix': SetiMeta(_hex, _red),
'.elm': SetiMeta(_elm, _blue),
'.ico': SetiMeta(_favicon, _yellow),
'.fs': SetiMeta(_fSharp, _blue),
'.fsx': SetiMeta(_fSharp, _blue),
'.gitignore': SetiMeta(_git, _ignore),
'.gitconfig': SetiMeta(_git, _ignore),
'.gitkeep': SetiMeta(_git, _ignore),
'.gitattributes': SetiMeta(_git, _ignore),
'.gitmodules': SetiMeta(_git, _ignore),
'.go': SetiMeta(_go2, _blue),
'.slide': SetiMeta(_go, _blue),
'.article': SetiMeta(_go, _blue),
'.gd': SetiMeta(_godot, _blue),
'.godot': SetiMeta(_godot, _red),
'.tres': SetiMeta(_godot, _yellow),
'.tscn': SetiMeta(_godot, _purple),
'.gradle': SetiMeta(_gradle, _blue),
'.groovy': SetiMeta(_grails, _green),
'.gsp': SetiMeta(_grails, _green),
'.gql': SetiMeta(_graphql, _pink),
'.graphql': SetiMeta(_graphql, _pink),
'.graphqls': SetiMeta(_graphql, _pink),
'.hack': SetiMeta(_hacklang, _orange),
'.haml': SetiMeta(_haml, _red),
'.handlebars': SetiMeta(_mustache, _orange),
'.hbs': SetiMeta(_mustache, _orange),
'.hjs': SetiMeta(_mustache, _orange),
'.hs': SetiMeta(_haskell, _purple),
'.lhs': SetiMeta(_haskell, _purple),
'.hx': SetiMeta(_haxe, _orange),
'.hxs': SetiMeta(_haxe, _yellow),
'.hxp': SetiMeta(_haxe, _blue),
'.hxml': SetiMeta(_haxe, _purple),
'.html': SetiMeta(_html, _orange),
'.jade': SetiMeta(_jade, _red),
'.java': SetiMeta(_java, _red),
'.class': SetiMeta(_java, _blue),
'.classpath': SetiMeta(_java, _red),
'.properties': SetiMeta(_java, _red),
'.js': SetiMeta(_javascript, _yellow),
'.js.map': SetiMeta(_javascript, _yellow),
'.spec.js': SetiMeta(_javascript, _orange),
'.test.js': SetiMeta(_javascript, _orange),
'.es': SetiMeta(_javascript, _yellow),
'.es5': SetiMeta(_javascript, _yellow),
'.es6': SetiMeta(_javascript, _yellow),
'.es7': SetiMeta(_javascript, _yellow),
'.jinja': SetiMeta(_jinja, _red),
'.jinja2': SetiMeta(_jinja, _red),
'.json': SetiMeta(_json, _yellow),
'.jl': SetiMeta(_julia, _purple),
'karma.conf.js': SetiMeta(_karma, _green),
'karma.conf.coffee': SetiMeta(_karma, _green),
'.kt': SetiMeta(_kotlin, _orange),
'.kts': SetiMeta(_kotlin, _orange),
'.dart': SetiMeta(_dart, _blue),
'.less': SetiMeta(_less, _blue),
'.liquid': SetiMeta(_liquid, _green),
'.ls': SetiMeta(_livescript, _blue),
'.lua': SetiMeta(_lua, _blue),
'.markdown': SetiMeta(_markdown, _blue),
'.md': SetiMeta(_markdown, _blue),
'.argdown': SetiMeta(_argdown, _blue),
'.ad': SetiMeta(_argdown, _blue),
'readme.md': SetiMeta(_info, _blue),
'readme.txt': SetiMeta(_info, _blue),
'readme': SetiMeta(_info, _blue),
'changelog.md': SetiMeta(_clock, _blue),
'changelog.txt': SetiMeta(_clock, _blue),
'changelog': SetiMeta(_clock, _blue),
'changes.md': SetiMeta(_clock, _blue),
'changes.txt': SetiMeta(_clock, _blue),
'changes': SetiMeta(_clock, _blue),
'version.md': SetiMeta(_clock, _blue),
'version.txt': SetiMeta(_clock, _blue),
'version': SetiMeta(_clock, _blue),
'mvnw': SetiMeta(_maven, _red),
'.mustache': SetiMeta(_mustache, _orange),
'.stache': SetiMeta(_mustache, _orange),
'.nim': SetiMeta(_nim, _yellow),
'.nims': SetiMeta(_nim, _yellow),
'.github-issues': SetiMeta(_github, _white),
'.ipynb': SetiMeta(_notebook, _blue),
'.njk': SetiMeta(_nunjucks, _green),
'.nunjucks': SetiMeta(_nunjucks, _green),
'.nunjs': SetiMeta(_nunjucks, _green),
'.nunj': SetiMeta(_nunjucks, _green),
'.njs': SetiMeta(_nunjucks, _green),
'.nj': SetiMeta(_nunjucks, _green),
'.npm-debug.log': SetiMeta(_npm, _ignore),
'.npmignore': SetiMeta(_npm, _red),
'.npmrc': SetiMeta(_npm, _red),
'.ml': SetiMeta(_ocaml, _orange),
'.mli': SetiMeta(_ocaml, _orange),
'.cmx': SetiMeta(_ocaml, _orange),
'.cmxa': SetiMeta(_ocaml, _orange),
'.odata': SetiMeta(_odata, _orange),
'.pl': SetiMeta(_perl, _blue),
'.php': SetiMeta(_php, _purple),
'.php.inc': SetiMeta(_php, _purple),
'.pipeline': SetiMeta(_pipeline, _orange),
'.pddl': SetiMeta(_pddl, _purple),
'.plan': SetiMeta(_plan, _green),
'.happenings': SetiMeta(_happenings, _blue),
'.ps1': SetiMeta(_powershell, _blue),
'.psd1': SetiMeta(_powershell, _blue),
'.psm1': SetiMeta(_powershell, _blue),
'.prisma': SetiMeta(_prisma, _blue),
'.pug': SetiMeta(_pug, _red),
'.pp': SetiMeta(_puppet, _yellow),
'.epp': SetiMeta(_puppet, _yellow),
'.purs': SetiMeta(_purescript, _white),
'.py': SetiMeta(_python, _blue),
'.jsx': SetiMeta(_react, _blue),
'.spec.jsx': SetiMeta(_react, _orange),
'.test.jsx': SetiMeta(_react, _orange),
'.cjsx': SetiMeta(_react, _blue),
'.spec.tsx': SetiMeta(_react, _orange),
'.test.tsx': SetiMeta(_react, _orange),
'.re': SetiMeta(_reasonml, _red),
'.res': SetiMeta(_rescript, _red),
'.resi': SetiMeta(_rescript, _pink),
'.r': SetiMeta(_r, _blue),
'.rmd': SetiMeta(_r, _blue),
'.rb': SetiMeta(_ruby, _red),
'gemfile': SetiMeta(_ruby, _red),
'.erb': SetiMeta(_htmlErb, _red),
'.erb.html': SetiMeta(_htmlErb, _red),
'.html.erb': SetiMeta(_htmlErb, _red),
'.rs': SetiMeta(_rust, _greyLight),
'.sass': SetiMeta(_sass, _pink),
'.scss': SetiMeta(_sass, _pink),
'.springbeans': SetiMeta(_spring, _green),
'.slim': SetiMeta(_slim, _orange),
'.smarty.tpl': SetiMeta(_smarty, _yellow),
'.tpl': SetiMeta(_smarty, _yellow),
'.sbt': SetiMeta(_sbt, _blue),
'.scala': SetiMeta(_scala, _red),
'.sol': SetiMeta(_ethereum, _blue),
'.styl': SetiMeta(_stylus, _green),
'.svelte': SetiMeta(_svelte, _red),
'.swift': SetiMeta(_swift, _orange),
'.sql': SetiMeta(_db, _pink),
'.soql': SetiMeta(_db, _blue),
'.tf': SetiMeta(_terraform, _purple),
'.tf.json': SetiMeta(_terraform, _purple),
'.tfvars': SetiMeta(_terraform, _purple),
'.tex': SetiMeta(_tex, _blue),
'.sty': SetiMeta(_tex, _yellow),
'.dtx': SetiMeta(_tex, _orange),
'.ins': SetiMeta(_tex, _white),
'.txt': SetiMeta(_default, _white),
'.toml': SetiMeta(_config, _greyLight),
'.twig': SetiMeta(_twig, _green),
'.ts': SetiMeta(_typescript, _blue),
'.tsx': SetiMeta(_typescript, _blue),
'.spec.ts': SetiMeta(_typescript, _orange),
'.test.ts': SetiMeta(_typescript, _orange),
'tsconfig.json': SetiMeta(_tsconfig, _blue),
'.vala': SetiMeta(_vala, _greyLight),
'.vapi': SetiMeta(_vala, _greyLight),
'.component': SetiMeta(_html, _orange),
'.vue': SetiMeta(_vue, _green),
'.wasm': SetiMeta(_wasm, _purple),
'.wat': SetiMeta(_wat, _purple),
'.xml': SetiMeta(_xml, _orange),
'.yml': SetiMeta(_yml, _purple),
'.yaml': SetiMeta(_yml, _purple),
'swagger.json': SetiMeta(_json, _green),
'swagger.yml': SetiMeta(_json, _green),
'swagger.yaml': SetiMeta(_json, _green),
'.pro': SetiMeta(_prolog, _orange),
'.zig': SetiMeta(_zig, _orange),
'.jar': SetiMeta(_zip, _red),
'.zip': SetiMeta(_zip, _greyLight),
'.wgt': SetiMeta(_wgt, _blue),
'.ai': SetiMeta(_illustrator, _yellow),
'.psd': SetiMeta(_photoshop, _blue),
'.pdf': SetiMeta(_pdf, _red),
'.eot': SetiMeta(_font, _red),
'.ttf': SetiMeta(_font, _red),
'.woff': SetiMeta(_font, _red),
'.woff2': SetiMeta(_font, _red),
'.avif': SetiMeta(_image, _purple),
'.gif': SetiMeta(_image, _purple),
'.jpg': SetiMeta(_image, _purple),
'.jpeg': SetiMeta(_image, _purple),
'.png': SetiMeta(_image, _purple),
'.pxm': SetiMeta(_image, _purple),
'.svg': SetiMeta(_svg, _purple),
'.svgx': SetiMeta(_image, _purple),
'.tiff': SetiMeta(_image, _purple),
'.webp': SetiMeta(_image, _purple),
'.sublime-project': SetiMeta(_sublime, _orange),
'.sublime-workspace': SetiMeta(_sublime, _orange),
'.code-search': SetiMeta(_codeSearch, _purple),
'.sh': SetiMeta(_shell, _green),
'.zsh': SetiMeta(_shell, _green),
'.fish': SetiMeta(_shell, _green),
'.zshrc': SetiMeta(_shell, _green),
'.bashrc': SetiMeta(_shell, _green),
'.mov': SetiMeta(_video, _pink),
'.ogv': SetiMeta(_video, _pink),
'.webm': SetiMeta(_video, _pink),
'.avi': SetiMeta(_video, _pink),
'.mpg': SetiMeta(_video, _pink),
'.mp4': SetiMeta(_video, _pink),
'.mp3': SetiMeta(_audio, _purple),
'.ogg': SetiMeta(_audio, _purple),
'.wav': SetiMeta(_audio, _purple),
'.flac': SetiMeta(_audio, _purple),
'.3ds': SetiMeta(_svg, _blue),
'.3dm': SetiMeta(_svg, _blue),
'.stl': SetiMeta(_svg, _blue),
'.obj': SetiMeta(_svg, _blue),
'.dae': SetiMeta(_svg, _blue),
'.bat': SetiMeta(_windows, _blue),
'.cmd': SetiMeta(_windows, _blue),
'mime.types': SetiMeta(_config, _greyLight),
'jenkinsfile': SetiMeta(_jenkins, _red),
'.babelrc': SetiMeta(_babel, _yellow),
'.babelrc.js': SetiMeta(_babel, _yellow),
'.babelrc.cjs': SetiMeta(_babel, _yellow),
'babel.config.js': SetiMeta(_babel, _yellow),
'babel.config.json': SetiMeta(_babel, _yellow),
'babel.config.cjs': SetiMeta(_babel, _yellow),
'build': SetiMeta(_bazel, _green),
'build.bazel': SetiMeta(_bazel, _green),
'workspace': SetiMeta(_bazel, _green),
'workspace.bazel': SetiMeta(_bazel, _green),
'.bazelrc': SetiMeta(_bazel, _grey),
'bower.json': SetiMeta(_bower, _orange),
'.bowerrc': SetiMeta(_bower, _orange),
'dockerfile': SetiMeta(_docker, _blue),
'.dockerignore': SetiMeta(_docker, _grey),
'docker-healthcheck': SetiMeta(_docker, _green),
'docker-compose.yml': SetiMeta(_docker, _pink),
'docker-compose.yaml': SetiMeta(_docker, _pink),
'docker-compose.override.yml': SetiMeta(_docker, _pink),
'docker-compose.override.yaml': SetiMeta(_docker, _pink),
'.codeclimate.yml': SetiMeta(_codeClimate, _green),
'.eslintrc': SetiMeta(_eslint, _purple),
'.eslintrc.js': SetiMeta(_eslint, _purple),
'.eslintrc.cjs': SetiMeta(_eslint, _purple),
'.eslintrc.yaml': SetiMeta(_eslint, _purple),
'.eslintrc.yml': SetiMeta(_eslint, _purple),
'.eslintrc.json': SetiMeta(_eslint, _purple),
'.eslintignore': SetiMeta(_eslint, _grey),
'.firebaserc': SetiMeta(_firebase, _orange),
'firebase.json': SetiMeta(_firebase, _orange),
'geckodriver': SetiMeta(_firefox, _orange),
'.gitlab-ci.yml': SetiMeta(_gitlab, _orange),
'gruntfile.js': SetiMeta(_grunt, _orange),
'gruntfile.babel.js': SetiMeta(_grunt, _orange),
'gruntfile.coffee': SetiMeta(_grunt, _orange),
'gulpfile': SetiMeta(_gulp, _red),
'gulpfile.js': SetiMeta(_gulp, _red),
'ionic.config.json': SetiMeta(_ionic, _blue),
'ionic.project': SetiMeta(_ionic, _blue),
'.jshintrc': SetiMeta(_javascript, _blue),
'.jscsrc': SetiMeta(_javascript, _blue),
'platformio.ini': SetiMeta(_platformio, _orange),
'rollup.config.js': SetiMeta(_rollup, _red),
'sass-lint.yml': SetiMeta(_sass, _pink),
'.stylelintrc': SetiMeta(_stylelint, _white),
'.stylelintrc.json': SetiMeta(_stylelint, _white),
'.stylelintrc.yaml': SetiMeta(_stylelint, _white),
'.stylelintrc.yml': SetiMeta(_stylelint, _white),
'.stylelintrc.js': SetiMeta(_stylelint, _white),
'.stylelintignore': SetiMeta(_stylelint, _grey),
'stylelint.config.js': SetiMeta(_stylelint, _white),
'stylelint.config.cjs': SetiMeta(_stylelint, _white),
'yarn.clean': SetiMeta(_yarn, _blue),
'yarn.lock': SetiMeta(_yarn, _blue),
'webpack.config.js': SetiMeta(_webpack, _blue),
'webpack.config.cjs': SetiMeta(_webpack, _blue),
'webpack.config.build.js': SetiMeta(_webpack, _blue),
'webpack.config.build.cjs': SetiMeta(_webpack, _blue),
'webpack.common.js': SetiMeta(_webpack, _blue),
'webpack.common.cjs': SetiMeta(_webpack, _blue),
'webpack.dev.js': SetiMeta(_webpack, _blue),
'webpack.dev.cjs': SetiMeta(_webpack, _blue),
'webpack.prod.js': SetiMeta(_webpack, _blue),
'webpack.prod.cjs': SetiMeta(_webpack, _blue),
'.direnv': SetiMeta(_config, _greyLight),
'.env': SetiMeta(_config, _greyLight),
'.static': SetiMeta(_config, _greyLight),
'.editorconfig': SetiMeta(_config, _greyLight),
'.slugignore': SetiMeta(_config, _greyLight),
'.tmp': SetiMeta(_clock, _greyLight),
'.htaccess': SetiMeta(_config, _greyLight),
'.key': SetiMeta(_lock, _green),
'.cert': SetiMeta(_lock, _green),
'.cer': SetiMeta(_lock, _green),
'.crt': SetiMeta(_lock, _green),
'.pem': SetiMeta(_lock, _green),
'license': SetiMeta(_license, _yellow),
'licence': SetiMeta(_license, _yellow),
'license.txt': SetiMeta(_license, _yellow),
'licence.txt': SetiMeta(_license, _yellow),
'license.md': SetiMeta(_license, _yellow),
'licence.md': SetiMeta(_license, _yellow),
'copying': SetiMeta(_license, _yellow),
'copying.txt': SetiMeta(_license, _yellow),
'copying.md': SetiMeta(_license, _yellow),
'compiling': SetiMeta(_license, _orange),
'compiling.txt': SetiMeta(_license, _orange),
'compiling.md': SetiMeta(_license, _orange),
'contributing': SetiMeta(_license, _red),
'contributing.txt': SetiMeta(_license, _red),
'contributing.md': SetiMeta(_license, _red),
'makefile': SetiMeta(_makefile, _orange),
'qmakefile': SetiMeta(_makefile, _purple),
'omakefile': SetiMeta(_makefile, _greyLight),
'cmakelists.txt': SetiMeta(_makefile, _blue),
'procfile': SetiMeta(_heroku, _purple),
'todo': SetiMeta(_todo, _setiPrimary),
'todo.txt': SetiMeta(_todo, _setiPrimary),
'todo.md': SetiMeta(_todo, _setiPrimary),
'npm-debug.log': SetiMeta(_npmIgnored, _ignore),
'.ds_store': SetiMeta(_ignored, _ignore),
};

9
packages/file_icons/lib/src/meta.dart

@ -0,0 +1,9 @@
// ignore: public_member_api_docs
class SetiMeta {
// ignore: public_member_api_docs
const SetiMeta(this.codePoint, this.color);
// ignore: public_member_api_docs
final int codePoint;
// ignore: public_member_api_docs
final int color;
}

7
packages/file_icons/mono_pkg.yaml

@ -0,0 +1,7 @@
sdk:
- stable
stages:
- analyze:
- analyze
- format: --output=none --set-exit-if-changed --line-length 120 .

23
packages/file_icons/pubspec.yaml

@ -0,0 +1,23 @@
name: file_icons
version: 1.0.0
environment:
sdk: '>=2.17.0 <3.0.0'
flutter: '>=3.0.0'
dependencies:
flutter:
sdk: flutter
path: ^1.8.1
dev_dependencies:
nit_picking:
git:
url: https://github.com/stack11/dart_nit_picking
ref: f29382f
flutter:
fonts:
- family: Seti
fonts:
- asset: fonts/seti.ttf

46
packages/harbour/.gitignore vendored

@ -0,0 +1,46 @@
# Miscellaneous
*.class
*.log
*.pyc
*.swp
.DS_Store
.atom/
.buildlog/
.history
.svn/
# IntelliJ related
*.iml
*.ipr
*.iws
.idea/
# The .vscode folder contains launch configuration and tasks you configure in
# VS Code which you may wish to be included in version control, so this line
# is commented out by default.
#.vscode/
# Flutter/Dart/Pub related
**/doc/api/
**/ios/Flutter/.last_build_id
.dart_tool/
.flutter-plugins
.flutter-plugins-dependencies
.packages
.pub-cache/
.pub/
/build/
# Web related
lib/generated_plugin_registrant.dart
# Symbolication related
app.*.symbols
# Obfuscation related
app.*.map.json
# Android Studio will place build artifacts here
/android/app/debug
/android/app/profile
/android/app/release

10
packages/harbour/.metadata

@ -0,0 +1,10 @@
# This file tracks properties of this Flutter project.
# Used by Flutter tool to assess capabilities and perform upgrades etc.
#
# This file should be version controlled and should not be manually edited.
version:
revision: 657830b4c77aecfd0e32ec6504c859213dded97a
channel: master
project_type: app

12
packages/harbour/LICENSE

@ -0,0 +1,12 @@
Copyright (c) 2022, jld3103
All rights reserved.
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.
3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 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.

11
packages/harbour/README.md

@ -0,0 +1,11 @@
# harbour
A beautiful convergent cross-platform client for Nextcloud written in Flutter.
## Screenshots
For more screenshots see `./screenshots/`.
| ![](screenshots/login_server_selection.png) | ![](screenshots/settings_oled.png) | ![](screenshots/settings_news.png) |
|------------------------------------------------|------------------------------------|------------------------------------|
| ![](screenshots/news_articles_unread_list.png) | ![](screenshots/files_photos.png) | ![](screenshots/notes_edit.png) |

9
packages/harbour/analysis_options.yaml

@ -0,0 +1,9 @@
include: package:nit_picking/flutter.yaml
linter:
rules:
prefer_final_parameters: false # Disabled until super.X is no longer complained about in constructors
analyzer:
exclude:
- lib/src/l10n/**

13
packages/harbour/android/.gitignore vendored

@ -0,0 +1,13 @@
gradle-wrapper.jar
/.gradle
/captures/
/gradlew
/gradlew.bat
/local.properties
GeneratedPluginRegistrant.java
# Remember to never publicly share your keystore.
# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
key.properties
**/*.keystore
**/*.jks

67
packages/harbour/android/app/build.gradle

@ -0,0 +1,67 @@
def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
localPropertiesFile.withReader('UTF-8') { reader ->
localProperties.load(reader)
}
}
def flutterRoot = localProperties.getProperty('flutter.sdk')
if (flutterRoot == null) {
throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
flutterVersionCode = '1'
}
def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
flutterVersionName = '1.0'
}
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
android {
compileSdkVersion 33
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
sourceSets {
main.java.srcDirs += 'news/main/kotlin'
}
defaultConfig {
applicationId "de.provokateurin.harbour"
minSdkVersion 19
targetSdkVersion flutter.targetSdkVersion
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
}
buildTypes {
release {
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
signingConfig signingConfigs.debug
}
}
}
flutter {
source '../..'
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}

1
packages/harbour/android/app/proguard-rules.pro vendored

@ -0,0 +1 @@
-keep class androidx.lifecycle.DefaultLifecycleObserver

7
packages/harbour/android/app/src/debug/AndroidManifest.xml

@ -0,0 +1,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="de.provokateurin.harbour">
<!-- Flutter needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>

34
packages/harbour/android/app/src/main/AndroidManifest.xml

@ -0,0 +1,34 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="de.provokateurin.harbour">
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:label="Harbour"
android:name="${applicationName}"
android:icon="@mipmap/ic_launcher"
android:usesCleartextTraffic="true">
<activity
android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTop"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
<meta-data
android:name="io.flutter.embedding.android.NormalTheme"
android:resource="@style/NormalTheme"
/>
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<!-- Don't delete the meta-data below.
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
<meta-data
android:name="flutterEmbedding"
android:value="2" />
</application>
</manifest>

6
packages/harbour/android/app/src/main/kotlin/de/provokateurin/harbour/MainActivity.kt

@ -0,0 +1,6 @@
package de.provokateurin.harbour
import io.flutter.embedding.android.FlutterActivity
class MainActivity: FlutterActivity() {
}

BIN
packages/harbour/android/app/src/main/res/drawable-hdpi/android12splash.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

BIN
packages/harbour/android/app/src/main/res/drawable-hdpi/splash.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

BIN
packages/harbour/android/app/src/main/res/drawable-mdpi/android12splash.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

BIN
packages/harbour/android/app/src/main/res/drawable-mdpi/splash.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

BIN
packages/harbour/android/app/src/main/res/drawable-night-v21/background.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 B

9
packages/harbour/android/app/src/main/res/drawable-night-v21/launch_background.xml

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<bitmap android:gravity="fill" android:src="@drawable/background"/>
</item>
<item>
<bitmap android:gravity="center" android:src="@drawable/splash"/>
</item>
</layer-list>

BIN
packages/harbour/android/app/src/main/res/drawable-night/background.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 B

9
packages/harbour/android/app/src/main/res/drawable-night/launch_background.xml

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<bitmap android:gravity="fill" android:src="@drawable/background"/>
</item>
<item>
<bitmap android:gravity="center" android:src="@drawable/splash"/>
</item>
</layer-list>

BIN
packages/harbour/android/app/src/main/res/drawable-v21/background.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 B

9
packages/harbour/android/app/src/main/res/drawable-v21/launch_background.xml

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<bitmap android:gravity="fill" android:src="@drawable/background"/>
</item>
<item>
<bitmap android:gravity="center" android:src="@drawable/splash"/>
</item>
</layer-list>

BIN
packages/harbour/android/app/src/main/res/drawable-xhdpi/android12splash.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
packages/harbour/android/app/src/main/res/drawable-xhdpi/splash.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

BIN
packages/harbour/android/app/src/main/res/drawable-xxhdpi/android12splash.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
packages/harbour/android/app/src/main/res/drawable-xxhdpi/splash.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

BIN
packages/harbour/android/app/src/main/res/drawable-xxxhdpi/android12splash.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
packages/harbour/android/app/src/main/res/drawable-xxxhdpi/splash.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
packages/harbour/android/app/src/main/res/drawable/background.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 B

9
packages/harbour/android/app/src/main/res/drawable/launch_background.xml

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<bitmap android:gravity="fill" android:src="@drawable/background"/>
</item>
<item>
<bitmap android:gravity="center" android:src="@drawable/splash"/>
</item>
</layer-list>

BIN
packages/harbour/android/app/src/main/res/mipmap-hdpi/app_files.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 499 B

BIN
packages/harbour/android/app/src/main/res/mipmap-hdpi/app_news.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 602 B

BIN
packages/harbour/android/app/src/main/res/mipmap-hdpi/app_notes.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
packages/harbour/android/app/src/main/res/mipmap-hdpi/ic_launcher.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
packages/harbour/android/app/src/main/res/mipmap-mdpi/app_files.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 337 B

BIN
packages/harbour/android/app/src/main/res/mipmap-mdpi/app_news.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 377 B

BIN
packages/harbour/android/app/src/main/res/mipmap-mdpi/app_notes.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 939 B

BIN
packages/harbour/android/app/src/main/res/mipmap-mdpi/ic_launcher.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
packages/harbour/android/app/src/main/res/mipmap-xhdpi/app_files.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 583 B

BIN
packages/harbour/android/app/src/main/res/mipmap-xhdpi/app_news.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 624 B

BIN
packages/harbour/android/app/src/main/res/mipmap-xhdpi/app_notes.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
packages/harbour/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
packages/harbour/android/app/src/main/res/mipmap-xxhdpi/app_files.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 843 B

BIN
packages/harbour/android/app/src/main/res/mipmap-xxhdpi/app_news.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 910 B

BIN
packages/harbour/android/app/src/main/res/mipmap-xxhdpi/app_notes.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
packages/harbour/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

BIN
packages/harbour/android/app/src/main/res/mipmap-xxxhdpi/app_files.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
packages/harbour/android/app/src/main/res/mipmap-xxxhdpi/app_news.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
packages/harbour/android/app/src/main/res/mipmap-xxxhdpi/app_notes.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

BIN
packages/harbour/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

3
packages/harbour/android/app/src/main/res/raw/keep.xml

@ -0,0 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
tools:keep="@mipmap/app_*"/>

20
packages/harbour/android/app/src/main/res/values-night-v31/styles.xml

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
<item name="android:forceDarkAllowed">false</item>
<item name="android:windowFullscreen">false</item>
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
<item name="android:windowSplashScreenBackground">#202020</item>
<item name="android:windowSplashScreenIconBackgroundColor">#202020</item>
</style>
<!-- Theme applied to the Android Window as soon as the process has started.
This theme determines the color of the Android Window while your
Flutter UI initializes, as well as behind your Flutter UI while its
running.
This Theme is only used starting with V2 of Flutter's Android embedding. -->
<style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
<item name="android:windowBackground">?android:colorBackground</item>
</style>
</resources>

21
packages/harbour/android/app/src/main/res/values-night/styles.xml

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on -->
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
<!-- Show a splash screen on the activity. Automatically removed when
Flutter draws its first frame -->
<item name="android:windowBackground">@drawable/launch_background</item>
<item name="android:forceDarkAllowed">false</item>
<item name="android:windowFullscreen">false</item>
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
</style>
<!-- Theme applied to the Android Window as soon as the process has started.
This theme determines the color of the Android Window while your
Flutter UI initializes, as well as behind your Flutter UI while its
running.
This Theme is only used starting with V2 of Flutter's Android embedding. -->
<style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
<item name="android:windowBackground">?android:colorBackground</item>
</style>
</resources>

21
packages/harbour/android/app/src/main/res/values-v31/styles.xml

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
<style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
<item name="android:forceDarkAllowed">false</item>
<item name="android:windowFullscreen">false</item>
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
<item name="android:windowSplashScreenBackground">#ffffff</item>
<item name="android:windowSplashScreenAnimatedIcon">@drawable/android12splash</item>
<item name="android:windowSplashScreenIconBackgroundColor">#ffffff</item>
</style>
<!-- Theme applied to the Android Window as soon as the process has started.
This theme determines the color of the Android Window while your
Flutter UI initializes, as well as behind your Flutter UI while its
running.
This Theme is only used starting with V2 of Flutter's Android embedding. -->
<style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
<item name="android:windowBackground">?android:colorBackground</item>
</style>
</resources>

21
packages/harbour/android/app/src/main/res/values/styles.xml

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Theme applied to the Android Window while the process is starting -->
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
<!-- Show a splash screen on the activity. Automatically removed when
Flutter draws its first frame -->
<item name="android:windowBackground">@drawable/launch_background</item>
<item name="android:forceDarkAllowed">false</item>
<item name="android:windowFullscreen">false</item>
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
</style>
<!-- Theme applied to the Android Window as soon as the process has started.
This theme determines the color of the Android Window while your
Flutter UI initializes, as well as behind your Flutter UI while its
running.
This Theme is only used starting with V2 of Flutter's Android embedding. -->
<style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
<item name="android:windowBackground">@android:color/white</item>
</style>
</resources>

7
packages/harbour/android/app/src/profile/AndroidManifest.xml

@ -0,0 +1,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="de.provokateurin.harbour">
<!-- Flutter needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>

31
packages/harbour/android/build.gradle

@ -0,0 +1,31 @@
buildscript {
ext.kotlin_version = '1.7.0'
repositories {
google()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.0.4'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
allprojects {
repositories {
google()
mavenCentral()
}
}
rootProject.buildDir = '../build'
subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
project.evaluationDependsOn(':app')
}
task clean(type: Delete) {
delete rootProject.buildDir
}

3
packages/harbour/android/gradle.properties

@ -0,0 +1,3 @@
org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true
android.enableJetifier=true

6
packages/harbour/android/gradle/wrapper/gradle-wrapper.properties vendored

@ -0,0 +1,6 @@
#Fri Jun 23 08:50:38 CEST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip

11
packages/harbour/android/settings.gradle

@ -0,0 +1,11 @@
include ':app'
def localPropertiesFile = new File(rootProject.projectDir, "local.properties")
def properties = new Properties()
assert localPropertiesFile.exists()
localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }
def flutterSdkPath = properties.getProperty("flutter.sdk")
assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"

1
packages/harbour/assets/.gitignore vendored

@ -0,0 +1 @@
.env

2
packages/harbour/assets/LEGALESE.txt

@ -0,0 +1,2 @@
Copyright © 2022, Kate Döen
Under BSD-3 license

1
packages/harbour/assets/apps/files.svg

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="32" viewBox="0 0 32 32" width="32" version="1.1"><path fill="#f37736" d="m3 4c-0.5 0-1 0.5-1 1v22c0 0.52 0.48 1 1 1h26c0.52 0 1-0.482 1-1v-18c0-0.5-0.5-1-1-1h-13l-4-4z"/></svg>

After

Width:  |  Height:  |  Size: 225 B

4
packages/harbour/assets/apps/news.svg

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg" height="32" width="32" version="1.0" viewBox="0 0 32 32">
<path d="m3 2c-0.554 0-1 0.446-1 1v2c0 0.554 0.446 1 1 1h26c0.554 0 1-0.446 1-1v-2c0-0.554-0.446-1-1-1h-26zm0 8c-0.554 0-1 0.446-1 1v2c0 0.554 0.446 1 1 1h18c0.554 0 1-0.446 1-1v-2c0-0.554-0.446-1-1-1h-18zm0 8c-0.554 0-1 0.446-1 1v2c0 0.554 0.446 1 1 1h24c0.554 0 1-0.446 1-1v-2c0-0.554-0.446-1-1-1h-24zm0 8c-0.554 0-1 0.446-1 1v2c0 0.554 0.446 1 1 1h12c0.554 0 1-0.446 1-1v-2c0-0.554-0.446-1-1-1h-12z" fill="#f37736"/>
</svg>

After

Width:  |  Height:  |  Size: 581 B

1
packages/harbour/assets/apps/notes.svg

@ -0,0 +1 @@
<svg width="32" height="32" version="1.0" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"><path d="m24.484 3.5156c-1.0237 0-2.0471 0.38887-2.8281 1.1699l5.6582 5.6582c1.5621-1.5621 1.5621-4.0961 0-5.6582-0.78105-0.78105-1.8064-1.1699-2.8301-1.1699zm-4.2422 2.584-12.02 12.021 5.6562 5.6562 12.021-12.02-5.6582-5.6582zm-13.436 13.436-2.1211 7.7793 7.7793-2.1211-5.6582-5.6582z" fill="#f37736"/></svg>

After

Width:  |  Height:  |  Size: 407 B

1
packages/harbour/assets/logo_harbour.svg

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-ferry" width="24" height="24" viewBox="0 0 24 24"><path fill="#f37736" d="M6,6H18V9.96L12,8L6,9.96M3.94,19H4C5.6,19 7,18.12 8,17C9,18.12 10.4,19 12,19C13.6,19 15,18.12 16,17C17,18.12 18.4,19 20,19H20.05L21.95,12.31C22.03,12.06 22,11.78 21.89,11.54C21.76,11.3 21.55,11.12 21.29,11.04L20,10.62V6C20,4.89 19.1,4 18,4H15V1H9V4H6A2,2 0 0,0 4,6V10.62L2.71,11.04C2.45,11.12 2.24,11.3 2.11,11.54C2,11.78 1.97,12.06 2.05,12.31M20,21C18.61,21 17.22,20.53 16,19.67C13.56,21.38 10.44,21.38 8,19.67C6.78,20.53 5.39,21 4,21H2V23H4C5.37,23 6.74,22.65 8,22C10.5,23.3 13.5,23.3 16,22C17.26,22.65 18.62,23 20,23H22V21H20Z" /></svg>

After

Width:  |  Height:  |  Size: 854 B

77
packages/harbour/assets/logo_nextcloud.svg

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 10 KiB

10
packages/harbour/flutter_native_splash.yaml

@ -0,0 +1,10 @@
flutter_native_splash:
color: "#ffffff"
color_dark: "#202020"
image: assets/splash_icon.png
android_12:
image: assets/splash_icon_android_12.png
icon_background_color: "#ffffff"
icon_background_color_dark: "#202020"
ios: false
web: false

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save