27 Commits

Author SHA1 Message Date
7dea44d1e8 Merge remote-tracking branch 'origin/develop' into develop 2025-09-10 20:23:20 +02:00
5f27956035 fix webuntis auth retry not working correctly 2025-09-10 20:23:14 +02:00
32799f648c working ios build update 2025-09-09 13:58:00 +02:00
859b85ab2c Revert "Upgraded Gradle and Android Gradle Plugin"
This reverts commit bd1101c348.
2025-09-06 18:51:00 +02:00
bd1101c348 Upgraded Gradle and Android Gradle Plugin
Upgraded Gradle from 8.9 to 8.13 and the Android Gradle Plugin from 8.7.3 to 8.13.0.
2025-09-06 17:35:41 +02:00
f29c84d05c fixed timetable subject name requirement 2025-09-06 17:03:01 +02:00
7dbd6038f3 prevent common "change" tiles in timetable, more robust parsing 2025-09-06 16:47:47 +02:00
877633f4de Merge pull request 'develop-groupedParticipants' (#89) from develop-groupedParticipants into develop
Reviewed-on: #89
Reviewed-by: Elias Müller <elias@elias-mueller.com>
2025-09-06 14:12:10 +00:00
22d3d18a17 changed naming for participants 2025-09-06 16:09:47 +02:00
d65e61c297 Merge branch 'develop' into develop-groupedParticipants 2025-09-06 13:58:08 +00:00
467b0e0dd8 Merge remote-tracking branch 'origin/develop' into develop 2025-09-06 15:57:19 +02:00
25a6ef37fa Merge branch 'develop' into develop-groupedParticipants 2025-09-06 13:57:10 +00:00
34763ace4a Merge remote-tracking branch 'origin/develop' into develop 2025-09-06 15:57:08 +02:00
590a70c623 Merge remote-tracking branch 'origin/develop' into develop 2025-09-06 15:56:51 +02:00
9b58412ca7 fixed missing no reaction text
fixed loading indicator being delayed on file download
2025-09-06 15:56:46 +02:00
a6c16e41c2 fixed missing no reaction text
fixed loading indicator being delayed on file download
2025-09-06 15:56:28 +02:00
117434a5e3 Merge branch 'develop' into develop-groupedParticipants 2025-09-06 13:54:40 +00:00
e4582eaac5 removed commented code 2025-09-06 15:46:55 +02:00
430d5b8dc7 Merge remote-tracking branch 'origin/develop' into develop-groupedParticipants
# Conflicts:
#	pubspec.yaml
2025-09-06 15:36:12 +02:00
9177c30d6e fixed display dimensions of messages with files 2025-09-06 15:33:14 +02:00
344f8f6d2c Merge branch 'develop' into develop-fileMessagesWithText 2025-09-06 15:13:15 +02:00
46971a8d46 upgraded syncfusion dependencies 2025-09-06 14:51:14 +02:00
f330ef3f56 updated project dependencies and sdk. Comptaible with Flutter 3.35.3 2025-09-06 14:47:08 +02:00
85f9988453 renamed timetable in ui 2025-09-06 14:12:13 +02:00
f3de0bc165 centered file preview, made text copyable 2025-06-24 15:09:37 +02:00
8000475c1f aligned text to the left 2025-06-16 16:07:04 +02:00
da772f17cc changed file messages to show their text or their file name 2025-06-10 21:35:12 +02:00
23 changed files with 279 additions and 239 deletions

View File

@@ -28,13 +28,13 @@ android {
ndkVersion "27.0.12077973" ndkVersion "27.0.12077973"
compileOptions { compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
coreLibraryDesugaringEnabled true coreLibraryDesugaringEnabled true
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
} }
kotlinOptions { kotlinOptions {
jvmTarget = '1.8' jvmTarget = '17'
} }
sourceSets { sourceSets {
@@ -65,5 +65,5 @@ flutter {
dependencies { dependencies {
implementation 'com.android.support:multidex:2.0.1' implementation 'com.android.support:multidex:2.0.1'
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.3' coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.4'
} }

View File

@@ -20,7 +20,7 @@ pluginManagement {
plugins { plugins {
id "dev.flutter.flutter-plugin-loader" version "1.0.0" id "dev.flutter.flutter-plugin-loader" version "1.0.0"
id "com.android.application" version '8.7.3' apply false id "com.android.application" version '8.7.3' apply false
id "org.jetbrains.kotlin.android" version "1.8.10" apply false id "org.jetbrains.kotlin.android" version "2.1.10" apply false
} }
include ":app" include ":app"

BIN
ios/.DS_Store vendored

Binary file not shown.

View File

@@ -21,6 +21,6 @@
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
<string>1.0</string> <string>1.0</string>
<key>MinimumOSVersion</key> <key>MinimumOSVersion</key>
<string>11.0</string> <string>13.0</string>
</dict> </dict>
</plist> </plist>

View File

@@ -1,5 +1,5 @@
# Uncomment this line to define a global platform for your project # Uncomment this line to define a global platform for your project
platform :ios, '11.0' platform :ios, '15.0'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency. # CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true' ENV['COCOAPODS_DISABLE_STATS'] = 'true'
@@ -31,6 +31,8 @@ target 'Runner' do
use_frameworks! use_frameworks!
use_modular_headers! use_modular_headers!
pod 'PhoneNumberKit', '~> 3.7.6'
flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
# target 'RunnerTests' do # target 'RunnerTests' do
# inherit! :search_paths # inherit! :search_paths

View File

@@ -1,185 +1,194 @@
PODS: PODS:
- better_open_file (0.0.1): - connectivity_plus (0.0.1):
- Flutter - Flutter
- device_info_plus (0.0.1): - device_info_plus (0.0.1):
- Flutter - Flutter
- DKImagePickerController/Core (4.3.4): - DKImagePickerController/Core (4.3.9):
- DKImagePickerController/ImageDataManager - DKImagePickerController/ImageDataManager
- DKImagePickerController/Resource - DKImagePickerController/Resource
- DKImagePickerController/ImageDataManager (4.3.4) - DKImagePickerController/ImageDataManager (4.3.9)
- DKImagePickerController/PhotoGallery (4.3.4): - DKImagePickerController/PhotoGallery (4.3.9):
- DKImagePickerController/Core - DKImagePickerController/Core
- DKPhotoGallery - DKPhotoGallery
- DKImagePickerController/Resource (4.3.4) - DKImagePickerController/Resource (4.3.9)
- DKPhotoGallery (0.0.17): - DKPhotoGallery (0.0.19):
- DKPhotoGallery/Core (= 0.0.17) - DKPhotoGallery/Core (= 0.0.19)
- DKPhotoGallery/Model (= 0.0.17) - DKPhotoGallery/Model (= 0.0.19)
- DKPhotoGallery/Preview (= 0.0.17) - DKPhotoGallery/Preview (= 0.0.19)
- DKPhotoGallery/Resource (= 0.0.17) - DKPhotoGallery/Resource (= 0.0.19)
- SDWebImage - SDWebImage
- SwiftyGif - SwiftyGif
- DKPhotoGallery/Core (0.0.17): - DKPhotoGallery/Core (0.0.19):
- DKPhotoGallery/Model - DKPhotoGallery/Model
- DKPhotoGallery/Preview - DKPhotoGallery/Preview
- SDWebImage - SDWebImage
- SwiftyGif - SwiftyGif
- DKPhotoGallery/Model (0.0.17): - DKPhotoGallery/Model (0.0.19):
- SDWebImage - SDWebImage
- SwiftyGif - SwiftyGif
- DKPhotoGallery/Preview (0.0.17): - DKPhotoGallery/Preview (0.0.19):
- DKPhotoGallery/Model - DKPhotoGallery/Model
- DKPhotoGallery/Resource - DKPhotoGallery/Resource
- SDWebImage - SDWebImage
- SwiftyGif - SwiftyGif
- DKPhotoGallery/Resource (0.0.17): - DKPhotoGallery/Resource (0.0.19):
- SDWebImage - SDWebImage
- SwiftyGif - SwiftyGif
- emoji_picker_flutter (0.0.1):
- Flutter
- fast_rsa (0.6.0): - fast_rsa (0.6.0):
- Flutter - Flutter
- file_picker (0.0.1): - file_picker (0.0.1):
- DKImagePickerController/PhotoGallery - DKImagePickerController/PhotoGallery
- Flutter - Flutter
- Firebase/CoreOnly (10.12.0): - Firebase/CoreOnly (12.2.0):
- FirebaseCore (= 10.12.0) - FirebaseCore (~> 12.2.0)
- Firebase/InAppMessaging (10.12.0): - Firebase/InAppMessaging (12.2.0):
- Firebase/CoreOnly - Firebase/CoreOnly
- FirebaseInAppMessaging (~> 10.12.0-beta) - FirebaseInAppMessaging (~> 12.2.0-beta)
- Firebase/Messaging (10.12.0): - Firebase/Messaging (12.2.0):
- Firebase/CoreOnly - Firebase/CoreOnly
- FirebaseMessaging (~> 10.12.0) - FirebaseMessaging (~> 12.2.0)
- firebase_core (2.15.1): - firebase_core (4.1.0):
- Firebase/CoreOnly (= 10.12.0) - Firebase/CoreOnly (= 12.2.0)
- Flutter - Flutter
- firebase_in_app_messaging (0.7.3-5): - firebase_in_app_messaging (0.9.0-1):
- Firebase/InAppMessaging (= 10.12.0) - Firebase/InAppMessaging (= 12.2.0)
- firebase_core - firebase_core
- Flutter - Flutter
- firebase_messaging (14.6.6): - firebase_messaging (16.0.1):
- Firebase/Messaging (= 10.12.0) - Firebase/Messaging (= 12.2.0)
- firebase_core - firebase_core
- Flutter - Flutter
- FirebaseABTesting (10.13.0): - FirebaseABTesting (12.2.0):
- FirebaseCore (~> 10.0) - FirebaseCore (~> 12.2.0)
- FirebaseCore (10.12.0): - FirebaseCore (12.2.0):
- FirebaseCoreInternal (~> 10.0) - FirebaseCoreInternal (~> 12.2.0)
- GoogleUtilities/Environment (~> 7.8) - GoogleUtilities/Environment (~> 8.1)
- GoogleUtilities/Logger (~> 7.8) - GoogleUtilities/Logger (~> 8.1)
- FirebaseCoreInternal (10.13.0): - FirebaseCoreInternal (12.2.0):
- "GoogleUtilities/NSData+zlib (~> 7.8)" - "GoogleUtilities/NSData+zlib (~> 8.1)"
- FirebaseInAppMessaging (10.12.0-beta): - FirebaseInAppMessaging (12.2.0-beta):
- FirebaseABTesting (~> 10.0) - FirebaseABTesting (~> 12.2.0)
- FirebaseCore (~> 10.0) - FirebaseCore (~> 12.2.0)
- FirebaseInstallations (~> 10.0) - FirebaseInstallations (~> 12.2.0)
- GoogleUtilities/Environment (~> 7.8) - GoogleUtilities/Environment (~> 8.1)
- nanopb (< 2.30910.0, >= 2.30908.0) - GoogleUtilities/UserDefaults (~> 8.1)
- FirebaseInstallations (10.13.0): - nanopb (~> 3.30910.0)
- FirebaseCore (~> 10.0) - FirebaseInstallations (12.2.0):
- GoogleUtilities/Environment (~> 7.8) - FirebaseCore (~> 12.2.0)
- GoogleUtilities/UserDefaults (~> 7.8) - GoogleUtilities/Environment (~> 8.1)
- PromisesObjC (~> 2.1) - GoogleUtilities/UserDefaults (~> 8.1)
- FirebaseMessaging (10.12.0): - PromisesObjC (~> 2.4)
- FirebaseCore (~> 10.0) - FirebaseMessaging (12.2.0):
- FirebaseInstallations (~> 10.0) - FirebaseCore (~> 12.2.0)
- GoogleDataTransport (~> 9.2) - FirebaseInstallations (~> 12.2.0)
- GoogleUtilities/AppDelegateSwizzler (~> 7.8) - GoogleDataTransport (~> 10.1)
- GoogleUtilities/Environment (~> 7.8) - GoogleUtilities/AppDelegateSwizzler (~> 8.1)
- GoogleUtilities/Reachability (~> 7.8) - GoogleUtilities/Environment (~> 8.1)
- GoogleUtilities/UserDefaults (~> 7.8) - GoogleUtilities/Reachability (~> 8.1)
- nanopb (< 2.30910.0, >= 2.30908.0) - GoogleUtilities/UserDefaults (~> 8.1)
- nanopb (~> 3.30910.0)
- Flutter (1.0.0) - Flutter (1.0.0)
- flutter_app_badger (1.3.0): - flutter_app_badge (2.0.0):
- Flutter - Flutter
- flutter_local_notifications (0.0.1): - flutter_local_notifications (0.0.1):
- Flutter - Flutter
- flutter_native_splash (0.0.1): - flutter_native_splash (2.4.3):
- Flutter - Flutter
- fluttertoast (0.0.2): - GoogleDataTransport (10.1.0):
- Flutter - nanopb (~> 3.30910.0)
- Toast - PromisesObjC (~> 2.4)
- FMDB (2.7.5): - GoogleUtilities/AppDelegateSwizzler (8.1.0):
- FMDB/standard (= 2.7.5)
- FMDB/standard (2.7.5)
- GoogleDataTransport (9.2.5):
- GoogleUtilities/Environment (~> 7.7)
- nanopb (< 2.30910.0, >= 2.30908.0)
- PromisesObjC (< 3.0, >= 1.2)
- GoogleUtilities/AppDelegateSwizzler (7.11.5):
- GoogleUtilities/Environment - GoogleUtilities/Environment
- GoogleUtilities/Logger - GoogleUtilities/Logger
- GoogleUtilities/Network - GoogleUtilities/Network
- GoogleUtilities/Environment (7.11.5): - GoogleUtilities/Privacy
- PromisesObjC (< 3.0, >= 1.2) - GoogleUtilities/Environment (8.1.0):
- GoogleUtilities/Logger (7.11.5): - GoogleUtilities/Privacy
- GoogleUtilities/Logger (8.1.0):
- GoogleUtilities/Environment - GoogleUtilities/Environment
- GoogleUtilities/Network (7.11.5): - GoogleUtilities/Privacy
- GoogleUtilities/Network (8.1.0):
- GoogleUtilities/Logger - GoogleUtilities/Logger
- "GoogleUtilities/NSData+zlib" - "GoogleUtilities/NSData+zlib"
- GoogleUtilities/Privacy
- GoogleUtilities/Reachability - GoogleUtilities/Reachability
- "GoogleUtilities/NSData+zlib (7.11.5)" - "GoogleUtilities/NSData+zlib (8.1.0)":
- GoogleUtilities/Reachability (7.11.5): - GoogleUtilities/Privacy
- GoogleUtilities/Privacy (8.1.0)
- GoogleUtilities/Reachability (8.1.0):
- GoogleUtilities/Logger - GoogleUtilities/Logger
- GoogleUtilities/UserDefaults (7.11.5): - GoogleUtilities/Privacy
- GoogleUtilities/UserDefaults (8.1.0):
- GoogleUtilities/Logger - GoogleUtilities/Logger
- GoogleUtilities/Privacy
- image_picker_ios (0.0.1): - image_picker_ios (0.0.1):
- Flutter - Flutter
- in_app_review (2.0.0):
- Flutter
- libphonenumber_plugin (0.0.1): - libphonenumber_plugin (0.0.1):
- Flutter - Flutter
- PhoneNumberKit - PhoneNumberKit
- nanopb (2.30909.0): - nanopb (3.30910.0):
- nanopb/decode (= 2.30909.0) - nanopb/decode (= 3.30910.0)
- nanopb/encode (= 2.30909.0) - nanopb/encode (= 3.30910.0)
- nanopb/decode (2.30909.0) - nanopb/decode (3.30910.0)
- nanopb/encode (2.30909.0) - nanopb/encode (3.30910.0)
- package_info (0.0.1): - open_filex (0.0.2):
- Flutter
- package_info_plus (0.4.5):
- Flutter - Flutter
- path_provider_foundation (0.0.1): - path_provider_foundation (0.0.1):
- Flutter - Flutter
- FlutterMacOS - FlutterMacOS
- PhoneNumberKit (3.6.7): - PhoneNumberKit (3.7.11):
- PhoneNumberKit/PhoneNumberKitCore (= 3.6.7) - PhoneNumberKit/PhoneNumberKitCore (= 3.7.11)
- PhoneNumberKit/UIKit (= 3.6.7) - PhoneNumberKit/UIKit (= 3.7.11)
- PhoneNumberKit/PhoneNumberKitCore (3.6.7) - PhoneNumberKit/PhoneNumberKitCore (3.7.11)
- PhoneNumberKit/UIKit (3.6.7): - PhoneNumberKit/UIKit (3.7.11):
- PhoneNumberKit/PhoneNumberKitCore - PhoneNumberKit/PhoneNumberKitCore
- PromisesObjC (2.3.1) - PromisesObjC (2.4.0)
- SDWebImage (5.17.0): - SDWebImage (5.21.2):
- SDWebImage/Core (= 5.17.0) - SDWebImage/Core (= 5.21.2)
- SDWebImage/Core (5.17.0) - SDWebImage/Core (5.21.2)
- share_plus (0.0.1): - share_plus (0.0.1):
- Flutter - Flutter
- shared_preferences_foundation (0.0.1): - shared_preferences_foundation (0.0.1):
- Flutter - Flutter
- FlutterMacOS - FlutterMacOS
- sqflite (0.0.3): - sqflite_darwin (0.0.4):
- Flutter - Flutter
- FMDB (>= 2.7.5) - FlutterMacOS
- SwiftyGif (5.4.4) - SwiftyGif (5.4.5)
- syncfusion_flutter_pdfviewer (0.0.1): - syncfusion_flutter_pdfviewer (0.0.1):
- Flutter - Flutter
- Toast (4.0.0)
- url_launcher_ios (0.0.1): - url_launcher_ios (0.0.1):
- Flutter - Flutter
DEPENDENCIES: DEPENDENCIES:
- better_open_file (from `.symlinks/plugins/better_open_file/ios`) - connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`)
- device_info_plus (from `.symlinks/plugins/device_info_plus/ios`) - device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
- emoji_picker_flutter (from `.symlinks/plugins/emoji_picker_flutter/ios`)
- fast_rsa (from `.symlinks/plugins/fast_rsa/ios`) - fast_rsa (from `.symlinks/plugins/fast_rsa/ios`)
- file_picker (from `.symlinks/plugins/file_picker/ios`) - file_picker (from `.symlinks/plugins/file_picker/ios`)
- firebase_core (from `.symlinks/plugins/firebase_core/ios`) - firebase_core (from `.symlinks/plugins/firebase_core/ios`)
- firebase_in_app_messaging (from `.symlinks/plugins/firebase_in_app_messaging/ios`) - firebase_in_app_messaging (from `.symlinks/plugins/firebase_in_app_messaging/ios`)
- firebase_messaging (from `.symlinks/plugins/firebase_messaging/ios`) - firebase_messaging (from `.symlinks/plugins/firebase_messaging/ios`)
- Flutter (from `Flutter`) - Flutter (from `Flutter`)
- flutter_app_badger (from `.symlinks/plugins/flutter_app_badger/ios`) - flutter_app_badge (from `.symlinks/plugins/flutter_app_badge/ios`)
- flutter_local_notifications (from `.symlinks/plugins/flutter_local_notifications/ios`) - flutter_local_notifications (from `.symlinks/plugins/flutter_local_notifications/ios`)
- flutter_native_splash (from `.symlinks/plugins/flutter_native_splash/ios`) - flutter_native_splash (from `.symlinks/plugins/flutter_native_splash/ios`)
- fluttertoast (from `.symlinks/plugins/fluttertoast/ios`)
- image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`) - image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`)
- in_app_review (from `.symlinks/plugins/in_app_review/ios`)
- libphonenumber_plugin (from `.symlinks/plugins/libphonenumber_plugin/ios`) - libphonenumber_plugin (from `.symlinks/plugins/libphonenumber_plugin/ios`)
- package_info (from `.symlinks/plugins/package_info/ios`) - open_filex (from `.symlinks/plugins/open_filex/ios`)
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
- PhoneNumberKit (~> 3.7.6)
- share_plus (from `.symlinks/plugins/share_plus/ios`) - share_plus (from `.symlinks/plugins/share_plus/ios`)
- shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`) - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`)
- sqflite (from `.symlinks/plugins/sqflite/ios`) - sqflite_darwin (from `.symlinks/plugins/sqflite_darwin/darwin`)
- syncfusion_flutter_pdfviewer (from `.symlinks/plugins/syncfusion_flutter_pdfviewer/ios`) - syncfusion_flutter_pdfviewer (from `.symlinks/plugins/syncfusion_flutter_pdfviewer/ios`)
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
@@ -194,7 +203,6 @@ SPEC REPOS:
- FirebaseInAppMessaging - FirebaseInAppMessaging
- FirebaseInstallations - FirebaseInstallations
- FirebaseMessaging - FirebaseMessaging
- FMDB
- GoogleDataTransport - GoogleDataTransport
- GoogleUtilities - GoogleUtilities
- nanopb - nanopb
@@ -202,13 +210,14 @@ SPEC REPOS:
- PromisesObjC - PromisesObjC
- SDWebImage - SDWebImage
- SwiftyGif - SwiftyGif
- Toast
EXTERNAL SOURCES: EXTERNAL SOURCES:
better_open_file: connectivity_plus:
:path: ".symlinks/plugins/better_open_file/ios" :path: ".symlinks/plugins/connectivity_plus/ios"
device_info_plus: device_info_plus:
:path: ".symlinks/plugins/device_info_plus/ios" :path: ".symlinks/plugins/device_info_plus/ios"
emoji_picker_flutter:
:path: ".symlinks/plugins/emoji_picker_flutter/ios"
fast_rsa: fast_rsa:
:path: ".symlinks/plugins/fast_rsa/ios" :path: ".symlinks/plugins/fast_rsa/ios"
file_picker: file_picker:
@@ -221,74 +230,76 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/firebase_messaging/ios" :path: ".symlinks/plugins/firebase_messaging/ios"
Flutter: Flutter:
:path: Flutter :path: Flutter
flutter_app_badger: flutter_app_badge:
:path: ".symlinks/plugins/flutter_app_badger/ios" :path: ".symlinks/plugins/flutter_app_badge/ios"
flutter_local_notifications: flutter_local_notifications:
:path: ".symlinks/plugins/flutter_local_notifications/ios" :path: ".symlinks/plugins/flutter_local_notifications/ios"
flutter_native_splash: flutter_native_splash:
:path: ".symlinks/plugins/flutter_native_splash/ios" :path: ".symlinks/plugins/flutter_native_splash/ios"
fluttertoast:
:path: ".symlinks/plugins/fluttertoast/ios"
image_picker_ios: image_picker_ios:
:path: ".symlinks/plugins/image_picker_ios/ios" :path: ".symlinks/plugins/image_picker_ios/ios"
in_app_review:
:path: ".symlinks/plugins/in_app_review/ios"
libphonenumber_plugin: libphonenumber_plugin:
:path: ".symlinks/plugins/libphonenumber_plugin/ios" :path: ".symlinks/plugins/libphonenumber_plugin/ios"
package_info: open_filex:
:path: ".symlinks/plugins/package_info/ios" :path: ".symlinks/plugins/open_filex/ios"
package_info_plus:
:path: ".symlinks/plugins/package_info_plus/ios"
path_provider_foundation: path_provider_foundation:
:path: ".symlinks/plugins/path_provider_foundation/darwin" :path: ".symlinks/plugins/path_provider_foundation/darwin"
share_plus: share_plus:
:path: ".symlinks/plugins/share_plus/ios" :path: ".symlinks/plugins/share_plus/ios"
shared_preferences_foundation: shared_preferences_foundation:
:path: ".symlinks/plugins/shared_preferences_foundation/darwin" :path: ".symlinks/plugins/shared_preferences_foundation/darwin"
sqflite: sqflite_darwin:
:path: ".symlinks/plugins/sqflite/ios" :path: ".symlinks/plugins/sqflite_darwin/darwin"
syncfusion_flutter_pdfviewer: syncfusion_flutter_pdfviewer:
:path: ".symlinks/plugins/syncfusion_flutter_pdfviewer/ios" :path: ".symlinks/plugins/syncfusion_flutter_pdfviewer/ios"
url_launcher_ios: url_launcher_ios:
:path: ".symlinks/plugins/url_launcher_ios/ios" :path: ".symlinks/plugins/url_launcher_ios/ios"
SPEC CHECKSUMS: SPEC CHECKSUMS:
better_open_file: 03cf320415d4d3f46b6e00adc4a567d76c1a399d connectivity_plus: cb623214f4e1f6ef8fe7403d580fdad517d2f7dd
device_info_plus: 7545d84d8d1b896cb16a4ff98c19f07ec4b298ea device_info_plus: 21fcca2080fbcd348be798aa36c3e5ed849eefbe
DKImagePickerController: b512c28220a2b8ac7419f21c491fc8534b7601ac DKImagePickerController: 946cec48c7873164274ecc4624d19e3da4c1ef3c
DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179 DKPhotoGallery: b3834fecb755ee09a593d7c9e389d8b5d6deed60
fast_rsa: f696740d492d562e76f17b0a81dfc8ec3e635374 emoji_picker_flutter: ece213fc274bdddefb77d502d33080dc54e616cc
file_picker: ce3938a0df3cc1ef404671531facef740d03f920 fast_rsa: 8cf0f70421610bbe9462db881cdeef1cdd626153
Firebase: 07150e75d142fb9399f6777fa56a187b17f833a0 file_picker: a0560bc09d61de87f12d246fc47d2119e6ef37be
firebase_core: 4a3246a02f828a01c74a2c26427037786d90f17f Firebase: 26f6f8d460603af3df970ad505b16b15f5e2e9a1
firebase_in_app_messaging: aebdbc10109a0ce44a3294f4ea57ed89ebe1d8bd firebase_core: 3ff52146406557dddd01d570e807e203ec7e1302
firebase_messaging: 13b378c8449cae7ec96c79570170943dd73d4738 firebase_in_app_messaging: 42894eb8e92aa83ac58f1c534dc9f9f9546f23b9
FirebaseABTesting: 86ac5a4fc749088bb4d55a1cbfb2c4cb42c6d5de firebase_messaging: 3dcc998dd98e1e54af75d0cccae8606eba43553c
FirebaseCore: f86a1394906b97ac445ae49c92552a9425831bed FirebaseABTesting: 32f3fc079d72c9b93e000b60877c4e4f62ef7031
FirebaseCoreInternal: b342e37cd4f5b4454ec34308f073420e7920858e FirebaseCore: 311c48a147ad4a0ab7febbaed89e8025c67510cd
FirebaseInAppMessaging: dc24f50aebaf81a377f0b8abf360778f94208931 FirebaseCoreInternal: 56ea29f3dad2894f81b060f706f9d53509b6ed3b
FirebaseInstallations: b28af1b9f997f1a799efe818c94695a3728c352f FirebaseInAppMessaging: fecba63d44c5cd8f874e9d661a5aa5047380c7d0
FirebaseMessaging: bb2c4f6422a753038fe137d90ae7c1af57251316 FirebaseInstallations: 3e884b01feabdf67582a80f3250425a00979b4ed
Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 FirebaseMessaging: 43ec73bbfedd0c385a849bb91593ab4ad4b9e48e
flutter_app_badger: b87fc231847b03b92ce1412aa351842e7e97932f Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467
flutter_local_notifications: 0c0b1ae97e741e1521e4c1629a459d04b9aec743 flutter_app_badge: ca742dd659a157c1090ef7cd881cb78f48f3bcdf
flutter_native_splash: 52501b97d1c0a5f898d687f1646226c1f93c56ef flutter_local_notifications: a5a732f069baa862e728d839dd2ebb904737effb
fluttertoast: fafc4fa4d01a6a9e4f772ecd190ffa525e9e2d9c flutter_native_splash: c32d145d68aeda5502d5f543ee38c192065986cf
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7
GoogleDataTransport: 54dee9d48d14580407f8f5fbf2f496e92437a2f2 GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1
GoogleUtilities: 13e2c67ede716b8741c7989e26893d151b2b2084 image_picker_ios: 7fe1ff8e34c1790d6fff70a32484959f563a928a
image_picker_ios: 4a8aadfbb6dc30ad5141a2ce3832af9214a705b5 in_app_review: 5596fe56fab799e8edb3561c03d053363ab13457
libphonenumber_plugin: e8a7d64a6624a7c25f2c4ab0b7ead2a8e341e35e libphonenumber_plugin: d134f173b22bfa5ede50887071f087f309277f8c
nanopb: b552cce312b6c8484180ef47159bc0f65a1f0431 nanopb: fad817b59e0457d11a5dfbde799381cd727c1275
package_info: 873975fc26034f0b863a300ad47e7f1ac6c7ec62 open_filex: 432f3cd11432da3e39f47fcc0df2b1603854eff1
path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943 package_info_plus: af8e2ca6888548050f16fa2f1938db7b5a5df499
PhoneNumberKit: 43b5169526cc417398c8f13f77c97552c1c6ed76 path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564
PromisesObjC: c50d2056b5253dadbd6c2bea79b0674bd5a52fa4 PhoneNumberKit: ced55861269312a5e3bc2ef82a58d6255b1c976a
SDWebImage: 750adf017a315a280c60fde706ab1e552a3ae4e9 PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47
share_plus: 599aa54e4ea31d4b4c0e9c911bcc26c55e791028 SDWebImage: 9f177d83116802728e122410fb25ad88f5c7608a
shared_preferences_foundation: 5b919d13b803cadd15ed2dc053125c68730e5126 share_plus: 50da8cb520a8f0f65671c6c6a99b3617ed10a58a
sqflite: 31f7eba61e3074736dff8807a9b41581e4f7f15a shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7
SwiftyGif: 93a1cc87bf3a51916001cf8f3d63835fb64c819f sqflite_darwin: 20b2a3a3b70e43edae938624ce550a3cbf66a3d0
syncfusion_flutter_pdfviewer: bb9998884b864cfedf72628df3503bdf57e397c0 SwiftyGif: 706c60cf65fa2bc5ee0313beece843c8eb8194d4
Toast: 91b396c56ee72a5790816f40d3a94dd357abc196 syncfusion_flutter_pdfviewer: 90dc48305d2e33d4aa20681d1e98ddeda891bc14
url_launcher_ios: 08a3dfac5fb39e8759aeb0abbd5d9480f30fc8b4 url_launcher_ios: 694010445543906933d732453a59da0a173ae33d
PODFILE CHECKSUM: 3d89a90682e2cd438911ad748b8ba5992f8b6a0e PODFILE CHECKSUM: e21c9d4c7b9623c73c6784ddc132fd50a603ad93
COCOAPODS: 1.12.1 COCOAPODS: 1.16.2

View File

@@ -144,6 +144,7 @@
9705A1C41CF9048500538489 /* Embed Frameworks */, 9705A1C41CF9048500538489 /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */,
174B54D80220E5F588BD9737 /* [CP] Embed Pods Frameworks */, 174B54D80220E5F588BD9737 /* [CP] Embed Pods Frameworks */,
859FAB4E05FAC31B7B1A62D7 /* [CP] Copy Pods Resources */,
); );
buildRules = ( buildRules = (
); );
@@ -161,7 +162,7 @@
isa = PBXProject; isa = PBXProject;
attributes = { attributes = {
BuildIndependentTargetsInParallel = YES; BuildIndependentTargetsInParallel = YES;
LastUpgradeCheck = 1430; LastUpgradeCheck = 1510;
ORGANIZATIONNAME = ""; ORGANIZATIONNAME = "";
TargetAttributes = { TargetAttributes = {
97C146ED1CF9000F007C117D = { 97C146ED1CF9000F007C117D = {
@@ -237,6 +238,23 @@
shellPath = /bin/sh; shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
}; };
859FAB4E05FAC31B7B1A62D7 /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Copy Pods Resources";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
showEnvVarsInLog = 0;
};
9740EEB61CF901F6004384FC /* Run Script */ = { 9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1; alwaysOutOfDate = 1;
@@ -349,7 +367,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES; GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 11.0; IPHONEOS_DEPLOYMENT_TARGET = 13.0;
MTL_ENABLE_DEBUG_INFO = NO; MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos; SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos; SUPPORTED_PLATFORMS = iphoneos;
@@ -434,7 +452,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES; GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 11.0; IPHONEOS_DEPLOYMENT_TARGET = 13.0;
MTL_ENABLE_DEBUG_INFO = YES; MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES; ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos; SDKROOT = iphoneos;
@@ -483,7 +501,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES; GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 11.0; IPHONEOS_DEPLOYMENT_TARGET = 13.0;
MTL_ENABLE_DEBUG_INFO = NO; MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos; SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos; SUPPORTED_PLATFORMS = iphoneos;

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<Scheme <Scheme
LastUpgradeVersion = "1430" LastUpgradeVersion = "1510"
version = "1.3"> version = "1.3">
<BuildAction <BuildAction
parallelizeBuildables = "YES" parallelizeBuildables = "YES"
@@ -26,6 +26,7 @@
buildConfiguration = "Debug" buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
customLLDBInitFile = "$(SRCROOT)/Flutter/ephemeral/flutter_lldbinit"
shouldUseLaunchSchemeArgsEnv = "YES"> shouldUseLaunchSchemeArgsEnv = "YES">
<MacroExpansion> <MacroExpansion>
<BuildableReference <BuildableReference
@@ -43,11 +44,13 @@
buildConfiguration = "Debug" buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
customLLDBInitFile = "$(SRCROOT)/Flutter/ephemeral/flutter_lldbinit"
launchStyle = "0" launchStyle = "0"
useCustomWorkingDirectory = "NO" useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO" ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES" debugDocumentVersioning = "YES"
debugServiceExtension = "internal" debugServiceExtension = "internal"
enableGPUValidationMode = "1"
allowLocationSimulation = "YES"> allowLocationSimulation = "YES">
<BuildableProductRunnable <BuildableProductRunnable
runnableDebuggingMode = "0"> runnableDebuggingMode = "0">

View File

@@ -1,7 +1,7 @@
import UIKit import UIKit
import Flutter import Flutter
@UIApplicationMain @main
@objc class AppDelegate: FlutterAppDelegate { @objc class AppDelegate: FlutterAppDelegate {
override func application( override func application(
_ application: UIApplication, _ application: UIApplication,

View File

@@ -57,9 +57,9 @@ class GetParticipantsResponseObject {
enum GetParticipantsResponseObjectParticipantType { enum GetParticipantsResponseObjectParticipantType {
@JsonValue(1) owner('Besitzer'), @JsonValue(1) owner('Besitzer'),
@JsonValue(2) moderator('Moderator'), @JsonValue(2) moderator('Moderator'),
@JsonValue(3) user('Benutzer'), @JsonValue(3) user('Teilnehmer'),
@JsonValue(4) guest('Gast'), @JsonValue(4) guest('Gast'),
@JsonValue(5) userFollowingPublicLink('Link Nutzer'), @JsonValue(5) userFollowingPublicLink('Teilnehmer über Link'),
@JsonValue(6) guestWithModeratorPermissions('Gast Moderator'); @JsonValue(6) guestWithModeratorPermissions('Gast Moderator');
const GetParticipantsResponseObjectParticipantType(this.prettyName); const GetParticipantsResponseObjectParticipantType(this.prettyName);

View File

@@ -19,7 +19,7 @@ abstract class WebuntisApi extends ApiRequest {
WebuntisApi(this.method, this.genericParam, {this.authenticatedResponse = true}); WebuntisApi(this.method, this.genericParam, {this.authenticatedResponse = true});
Future<String> query(WebuntisApi untis) async { Future<String> query(WebuntisApi untis, {bool retry = false}) async {
var query = '{"id":"ID","method":"$method","params":${untis._body()},"jsonrpc":"2.0"}'; var query = '{"id":"ID","method":"$method","params":${untis._body()},"jsonrpc":"2.0"}';
var sessionId = '0'; var sessionId = '0';
@@ -32,8 +32,9 @@ abstract class WebuntisApi extends ApiRequest {
dynamic jsonData = jsonDecode(data.body); dynamic jsonData = jsonDecode(data.body);
if(jsonData['error'] != null) { if(jsonData['error'] != null) {
if(jsonData['error']['code'] == -8520) { if(jsonData['error']['code'] == -8520) {
if(retry) throw WebuntisError('Authentication was tried (probably session timeout), but was not successful!', 1);
await Authenticate.createSession(); await Authenticate.createSession();
this.query(untis); return await this.query(untis, retry: true);
} else { } else {
throw WebuntisError(jsonData['error']['message'], jsonData['error']['code']); throw WebuntisError(jsonData['error']['message'], jsonData['error']['code']);
} }

View File

@@ -31,7 +31,7 @@ class AppModule {
var available = { var available = {
Modules.timetable: AppModule( Modules.timetable: AppModule(
Modules.timetable, Modules.timetable,
name: 'Vertretung', name: 'Stundenplan',
icon: () => Icon(Icons.calendar_month), icon: () => Icon(Icons.calendar_month),
breakerArea: BreakerArea.timetable, breakerArea: BreakerArea.timetable,
create: Timetable.new, create: Timetable.new,

View File

@@ -1,11 +1,11 @@
import 'dart:io'; import 'dart:io';
import 'package:better_open_file/better_open_file.dart';
import 'package:filesize/filesize.dart'; import 'package:filesize/filesize.dart';
import 'package:flowder/flowder.dart'; import 'package:flowder/flowder.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:jiffy/jiffy.dart'; import 'package:jiffy/jiffy.dart';
import 'package:open_filex/open_filex.dart';
import '../../../widget/infoDialog.dart'; import '../../../widget/infoDialog.dart';
import 'package:nextcloud/nextcloud.dart'; import 'package:nextcloud/nextcloud.dart';
import 'package:path_provider/path_provider.dart'; import 'package:path_provider/path_provider.dart';

View File

@@ -66,7 +66,7 @@ class _ChatInfoState extends State<ChatInfo> {
if(participants != null) ...[ if(participants != null) ...[
ListTile( ListTile(
leading: const Icon(Icons.supervised_user_circle), leading: const Icon(Icons.supervised_user_circle),
title: Text('${participants!.data.length} Teilnehmer'), title: Text('${participants!.data.length} Mitglieder'),
trailing: const Icon(Icons.arrow_right), trailing: const Icon(Icons.arrow_right),
onTap: () => TalkNavigator.pushSplitView(context, ParticipantsListView(participants!)), onTap: () => TalkNavigator.pushSplitView(context, ParticipantsListView(participants!)),
), ),

View File

@@ -10,12 +10,6 @@ class ParticipantsListView extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
// final participants = participantsResponse.data.map((participant) => ListTile(
// leading: UserAvatar(id: participant.actorId),
// title: Text(participant.displayName),
// subtitle: participant.statusMessage != null ? Text(participant.statusMessage!) : null,
// )).toList();
lastname(participant) => participant.displayName.toString().split(' ').last; lastname(participant) => participant.displayName.toString().split(' ').last;
final participants = participantsResponse.data final participants = participantsResponse.data
@@ -23,11 +17,9 @@ class ParticipantsListView extends StatelessWidget {
.sorted((a, b) => a.participantType.index.compareTo(b.participantType.index)); .sorted((a, b) => a.participantType.index.compareTo(b.participantType.index));
var groupedParticipants = participants.groupListsBy((participant) => participant.participantType); var groupedParticipants = participants.groupListsBy((participant) => participant.participantType);
// Map<GetParticipantsResponseObjectParticipantType, List<GetParticipantsResponseObject>>
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
title: const Text('Teilnehmende'), title: const Text('Mitglieder'),
), ),
body: ListView( body: ListView(
children: [ children: [

View File

@@ -1,4 +1,3 @@
import 'package:better_open_file/better_open_file.dart';
import 'package:bubble/bubble.dart'; import 'package:bubble/bubble.dart';
import 'package:emoji_picker_flutter/emoji_picker_flutter.dart' as emojis; import 'package:emoji_picker_flutter/emoji_picker_flutter.dart' as emojis;
import 'package:flowder/flowder.dart'; import 'package:flowder/flowder.dart';
@@ -6,6 +5,7 @@ import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:jiffy/jiffy.dart'; import 'package:jiffy/jiffy.dart';
import 'package:open_filex/open_filex.dart';
import '../../../../extensions/text.dart'; import '../../../../extensions/text.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@@ -206,7 +206,7 @@ class _ChatBubbleState extends State<ChatBubble> with SingleTickerProviderStateM
), ),
), ),
Visibility( Visibility(
visible: !message.containsFile, visible: widget.bubbleData.message != '{file}',
child: ListTile( child: ListTile(
leading: const Icon(Icons.copy), leading: const Icon(Icons.copy),
title: const Text('Nachricht kopieren'), title: const Text('Nachricht kopieren'),
@@ -323,7 +323,9 @@ class _ChatBubbleState extends State<ChatBubble> with SingleTickerProviderStateM
return; return;
} }
setState(() {
downloadProgress = 1; downloadProgress = 1;
});
downloadCore = FileElement.download(context, message.file!.path!, message.file!.name, (progress) { downloadCore = FileElement.download(context, message.file!.path!, message.file!.name, (progress) {
if(progress > 1) { if(progress > 1) {
setState(() { setState(() {
@@ -408,7 +410,7 @@ class _ChatBubbleState extends State<ChatBubble> with SingleTickerProviderStateM
bottom: 0, bottom: 0,
right: 0, right: 0,
left: 0, left: 0,
child: LinearProgressIndicator(value: downloadProgress/100), child: LinearProgressIndicator(value: downloadProgress == 1 ? null : downloadProgress/100),
), ),
), ),
], ],

View File

@@ -21,22 +21,25 @@ class ChatMessage {
ChatMessage({required this.originalMessage, this.originalData}) { ChatMessage({required this.originalMessage, this.originalData}) {
if(originalData?.containsKey('file') ?? false) { if(originalData?.containsKey('file') ?? false) {
file = originalData?['file']; file = originalData?['file'];
content = file?.name ?? 'Datei';
} else {
content = RichObjectStringProcessor.parseToString(originalMessage, originalData);
} }
content = RichObjectStringProcessor.parseToString(originalMessage, originalData);
} }
Widget getWidget() { Widget getWidget() {
if(file == null) { var contentWidget = Linkify(
return Linkify(
text: content, text: content,
onOpen: onOpen, onOpen: onOpen,
); );
}
return Padding(padding: const EdgeInsets.only(top: 5), child: CachedNetworkImage( if(file == null) return contentWidget;
return Padding(
padding: const EdgeInsets.only(top: 5),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
CachedNetworkImage(
errorWidget: (context, url, error) => Row( errorWidget: (context, url, error) => Row(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
@@ -52,8 +55,15 @@ class ChatMessage {
fadeInDuration: Duration.zero, fadeInDuration: Duration.zero,
fadeOutDuration: Duration.zero, fadeOutDuration: Duration.zero,
errorListener: (value) {}, errorListener: (value) {},
imageUrl: 'https://${AccountData().buildHttpAuthString()}@${EndpointData().nextcloud().full()}/index.php/core/preview?fileId=${file!.id}&x=100&y=-1&a=1', imageUrl: 'https://${AccountData().buildHttpAuthString()}@${EndpointData().nextcloud().full()}/index.php/core/preview?fileId=${file!.id}&x=130&y=-1&a=1',
)); ),
if(originalMessage != '{file}') ...[
SizedBox(height: 5),
contentWidget
]
],
)
);
} }
Future<void> onOpen(LinkableElement link) async { Future<void> onOpen(LinkableElement link) async {

View File

@@ -1,4 +1,3 @@
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@@ -38,7 +37,7 @@ class _MessageReactionsState extends State<MessageReactions> {
future: data, future: data,
builder: (context, snapshot) { builder: (context, snapshot) {
if(snapshot.connectionState == ConnectionState.waiting) return const LoadingSpinner(); if(snapshot.connectionState == ConnectionState.waiting) return const LoadingSpinner();
if(snapshot.data == null) return const PlaceholderView(icon: Icons.search_off_outlined, text: 'Keine Reaktionen gefunden!'); if(snapshot.data!.data.isEmpty) return const PlaceholderView(icon: Icons.search_off_outlined, text: 'Keine Reaktionen gefunden!');
return ListView( return ListView(
children: [ children: [
...snapshot.data!.data.entries.map<Widget>((entry) => ExpansionTile( ...snapshot.data!.data.entries.map<Widget>((entry) => ExpansionTile(

View File

@@ -1,6 +1,6 @@
import 'dart:async'; import 'dart:async';
import 'package:collection/collection.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import '../../../extensions/dateTime.dart'; import '../../../extensions/dateTime.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@@ -302,23 +302,25 @@ class _TimetableState extends State<Timetable> {
var startTime = _parseWebuntisTimestamp(element.date, element.startTime); var startTime = _parseWebuntisTimestamp(element.date, element.startTime);
var endTime = _parseWebuntisTimestamp(element.date, element.endTime); var endTime = _parseWebuntisTimestamp(element.date, element.endTime);
var subject = subjects.result.firstWhere((subject) => subject.id == element.su[0].id); var subject = subjects.result.firstWhereOrNull((subject) => subject.id == element.su.firstOrNull?.id);
var subjectName = { var subjectName = 'Unbekannt';
if(subject != null) {
subjectName = {
TimetableNameMode.name: subject.name, TimetableNameMode.name: subject.name,
TimetableNameMode.longName: subject.longName, TimetableNameMode.longName: subject.longName,
TimetableNameMode.alternateName: subject.alternateName, TimetableNameMode.alternateName: subject.alternateName,
}[settings.val().timetableSettings.timetableNameMode]; }[settings.val().timetableSettings.timetableNameMode]!;
}
return Appointment( return Appointment(
id: ArbitraryAppointment(webuntis: element), id: ArbitraryAppointment(webuntis: element),
startTime: startTime, startTime: startTime,
endTime: endTime, endTime: endTime,
subject: subjectName!, subject: subjectName,
location: '' location: ''
'${rooms.result.firstWhere((room) => room.id == element.ro[0].id).name}' '${rooms.result.firstWhereOrNull((room) => room.id == element.ro.firstOrNull?.id)?.name ?? 'Unbekannt'}'
'\n' '\n'
'${element.te.first.longname}', '${element.te.firstOrNull?.longname ?? 'Unbekannt'}',
notes: element.activityType, notes: element.activityType,
color: _getEventColor(element, startTime, endTime), color: _getEventColor(element, startTime, endTime),
); );
@@ -331,7 +333,7 @@ class _TimetableState extends State<Timetable> {
subject: 'Änderung', subject: 'Änderung',
notes: element.info, notes: element.info,
location: 'Unbekannt', location: 'Unbekannt',
color: endTime.isBefore(DateTime.now()) ? Theme.of(context).primaryColor.withAlpha(100) : Theme.of(context).primaryColor, color: const Color(0xff404040).withAlpha(endTime.isBefore(DateTime.now()) ? 100 : 255),
startTimeZone: '', startTimeZone: '',
endTimeZone: '', endTimeZone: '',
); );

View File

@@ -32,7 +32,7 @@ class DefaultSettings {
hiddenModules: [], hiddenModules: [],
), ),
timetableSettings: TimetableSettings( timetableSettings: TimetableSettings(
connectDoubleLessons: false, connectDoubleLessons: true,
timetableNameMode: TimetableNameMode.name timetableNameMode: TimetableNameMode.name
), ),
talkSettings: TalkSettings( talkSettings: TalkSettings(

View File

@@ -246,7 +246,7 @@ class _SettingsState extends State<Settings> {
ListTile( ListTile(
leading: const CenteredLeading(Icon(Icons.date_range_outlined)), leading: const CenteredLeading(Icon(Icons.date_range_outlined)),
title: const Text('Infos zu Web-/ Untis'), title: const Text('Infos zu Web-/ Untis'),
subtitle: const Text('Für den Vertretungsplan'), subtitle: const Text('Für den Stundenplan'),
trailing: const Icon(Icons.arrow_right), trailing: const Icon(Icons.arrow_right),
onTap: () => PrivacyInfo(providerText: 'Untis', imprintUrl: 'https://www.untis.at/impressum', privacyUrl: 'https://www.untis.at/datenschutz-wu-apps').showPopup(context) onTap: () => PrivacyInfo(providerText: 'Untis', imprintUrl: 'https://www.untis.at/impressum', privacyUrl: 'https://www.untis.at/datenschutz-wu-apps').showPopup(context)
), ),

View File

@@ -1,8 +1,8 @@
import 'dart:io'; import 'dart:io';
import 'dart:math'; import 'dart:math';
import 'package:better_open_file/better_open_file.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:open_filex/open_filex.dart';
import 'package:photo_view/photo_view.dart'; import 'package:photo_view/photo_view.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:share_plus/share_plus.dart'; import 'package:share_plus/share_plus.dart';
@@ -93,7 +93,7 @@ class _FileViewerState extends State<FileViewer> {
); );
default: default:
OpenFile.open(widget.path).then((result) { OpenFilex.open(widget.path).then((result) {
Navigator.of(context).pop(); Navigator.of(context).pop();
if(result.type != ResultType.done) { if(result.type != ResultType.done) {
showDialog(context: context, builder: (context) => AlertDialog( showDialog(context: context, builder: (context) => AlertDialog(

View File

@@ -17,7 +17,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
# In Windows, build-name is used as the major, minor, and patch parts # In Windows, build-name is used as the major, minor, and patch parts
# of the product and file versions while build-number is used as the build suffix. # of the product and file versions while build-number is used as the build suffix.
version: 0.1.3+41 version: 0.1.4+42
environment: environment:
sdk: '>3.0.0' sdk: '>3.0.0'
@@ -42,7 +42,6 @@ dependencies:
animated_digit: ^3.2.3 animated_digit: ^3.2.3
async: ^2.11.0 async: ^2.11.0
badges: ^3.1.2 badges: ^3.1.2
better_open_file: ^3.6.5
bloc: ^9.0.0 bloc: ^9.0.0
bottom_sheet: ^4.0.4 bottom_sheet: ^4.0.4
bubble: ^1.2.1 bubble: ^1.2.1
@@ -55,11 +54,11 @@ dependencies:
easy_debounce: ^2.0.3 easy_debounce: ^2.0.3
emoji_picker_flutter: ^4.3.0 emoji_picker_flutter: ^4.3.0
fast_rsa: ^3.7.1 fast_rsa: ^3.7.1
file_picker: ^8.1.7 file_picker: ^10.3.2
filesize: ^2.0.1 filesize: ^2.0.1
firebase_core: ^3.10.1 firebase_core: ^4.1.0
firebase_in_app_messaging: ^0.8.1+1 firebase_in_app_messaging: ^0.9.0+1
firebase_messaging: ^15.2.1 firebase_messaging: ^16.0.1
flowder: flowder:
git: git:
url: https://github.com/Harsh223/flowder.git url: https://github.com/Harsh223/flowder.git
@@ -67,11 +66,11 @@ dependencies:
flutter_bloc: ^9.0.0 flutter_bloc: ^9.0.0
flutter_launcher_icons: ^0.14.3 flutter_launcher_icons: ^0.14.3
flutter_linkify: ^6.0.0 flutter_linkify: ^6.0.0
flutter_local_notifications: ^18.0.1 flutter_local_notifications: ^19.4.1
flutter_login: ^5.0.0 flutter_login: ^5.0.0
flutter_native_splash: ^2.4.4 flutter_native_splash: ^2.4.4
flutter_split_view: ^0.1.2 flutter_split_view: ^0.1.2
freezed_annotation: ^2.4.4 freezed_annotation: ^3.1.0
http: ^1.3.0 http: ^1.3.0
hydrated_bloc: ^10.0.0 hydrated_bloc: ^10.0.0
image_picker: ^1.1.2 image_picker: ^1.1.2
@@ -87,20 +86,21 @@ dependencies:
url: https://github.com/provokateurin/nextcloud-neon url: https://github.com/provokateurin/nextcloud-neon
package_info_plus: ^8.1.3 package_info_plus: ^8.1.3
path_provider: ^2.1.5 path_provider: ^2.1.5
persistent_bottom_nav_bar_v2: ^5.3.1 persistent_bottom_nav_bar_v2: ^6.1.0
photo_view: ^0.15.0 photo_view: ^0.15.0
pretty_json: ^2.0.0 pretty_json: ^2.0.0
provider: ^6.1.2 provider: ^6.1.2
qr_flutter: ^4.1.0 qr_flutter: ^4.1.0
rrule: ^0.2.17 rrule: ^0.2.17
rrule_generator: ^0.9.0 rrule_generator: ^0.9.0
share_plus: ^10.1.4 share_plus: ^11.1.0
shared_preferences: ^2.3.5 shared_preferences: ^2.3.5
syncfusion_flutter_calendar: ^28.1.41 syncfusion_flutter_calendar: ^31.1.17
syncfusion_flutter_pdfviewer: ^28.1.41 syncfusion_flutter_pdfviewer: ^31.1.17
time_range_picker: ^2.3.0 time_range_picker: ^2.3.0
url_launcher: ^6.3.1 url_launcher: ^6.3.1
uuid: ^4.5.1 uuid: ^4.5.1
open_filex: ^4.7.0
collection: ^1.19.0 collection: ^1.19.0
dev_dependencies: dev_dependencies: