├── .pubignore
├── lib
├── odoochat.dart
└── src
│ ├── model
│ ├── model.dart
│ ├── attachment
│ │ ├── attachment.dart
│ │ ├── attachment.g.dart
│ │ └── attachment.freezed.dart
│ ├── partner
│ │ ├── partner.dart
│ │ └── partner.g.dart
│ ├── channel
│ │ ├── channel.dart
│ │ └── channel.g.dart
│ ├── message_info
│ │ ├── message_info.g.dart
│ │ └── message_info.dart
│ └── message
│ │ ├── message.dart
│ │ └── message.g.dart
│ ├── api
│ ├── responses
│ │ ├── responses.dart
│ │ ├── poll_result
│ │ │ ├── poll_result.g.dart
│ │ │ ├── poll_result.dart
│ │ │ └── poll_result.freezed.dart
│ │ ├── rpc_response
│ │ │ ├── rpc_response.dart
│ │ │ ├── rpc_response.g.dart
│ │ │ └── rpc_response.freezed.dart
│ │ ├── init_messaging_result
│ │ │ ├── init_messaging_result.dart
│ │ │ └── init_messaging_result.g.dart
│ │ └── login_result
│ │ │ ├── login_result.dart
│ │ │ └── login_result.g.dart
│ └── odoochat_api.dart
│ ├── exceptions
│ └── exceptions.dart
│ ├── payload
│ ├── login_params
│ │ ├── login_params.dart
│ │ ├── login_params.g.dart
│ │ └── login_params.freezed.dart
│ ├── payload.dart
│ ├── init_messaging_params
│ │ ├── init_messaging_params.dart
│ │ ├── init_messaging_params.g.dart
│ │ └── init_messaging_params.freezed.dart
│ ├── get_messages_params
│ │ ├── get_messages_params.dart
│ │ ├── get_messages_params.g.dart
│ │ └── get_messages_params.freezed.dart
│ ├── poll_params
│ │ ├── poll_params.dart
│ │ ├── poll_params.g.dart
│ │ └── poll_params.freezed.dart
│ ├── upload_attachment_payload
│ │ └── upload_attachment_payload.dart
│ ├── message_post_params
│ │ ├── message_post_params.g.dart
│ │ ├── message_post_params.dart
│ │ └── message_post_params.freezed.dart
│ ├── rpc_payload
│ │ ├── rpc_payload.g.dart
│ │ └── rpc_payload.dart
│ ├── message_fetch_params
│ │ ├── message_fetch_params.g.dart
│ │ ├── message_fetch_params.dart
│ │ └── message_fetch_params.freezed.dart
│ └── send_message_params
│ │ ├── send_message_params.dart
│ │ └── send_message_params.g.dart
│ └── odoochat.dart
├── example
├── odoochat_example
│ ├── README.md
│ ├── ios
│ │ ├── Runner
│ │ │ ├── Runner-Bridging-Header.h
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── LaunchImage.imageset
│ │ │ │ │ ├── LaunchImage.png
│ │ │ │ │ ├── LaunchImage@2x.png
│ │ │ │ │ ├── LaunchImage@3x.png
│ │ │ │ │ ├── README.md
│ │ │ │ │ └── Contents.json
│ │ │ │ └── AppIcon.appiconset
│ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ ├── Icon-App-1024x1024@1x.png
│ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ │ │ └── Contents.json
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Base.lproj
│ │ │ │ ├── Main.storyboard
│ │ │ │ └── LaunchScreen.storyboard
│ │ │ └── Info.plist
│ │ ├── Flutter
│ │ │ ├── Debug.xcconfig
│ │ │ ├── Release.xcconfig
│ │ │ └── AppFrameworkInfo.plist
│ │ ├── Runner.xcodeproj
│ │ │ ├── project.xcworkspace
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata
│ │ │ │ │ ├── WorkspaceSettings.xcsettings
│ │ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcshareddata
│ │ │ │ └── xcschemes
│ │ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ │ ├── WorkspaceSettings.xcsettings
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ ├── RunnerTests
│ │ │ └── RunnerTests.swift
│ │ ├── .gitignore
│ │ ├── Podfile
│ │ └── Podfile.lock
│ ├── lib
│ │ ├── bloc
│ │ │ ├── bloc.dart
│ │ │ ├── chat_poll
│ │ │ │ ├── chat_poll.dart
│ │ │ │ ├── chat_poll_worker.dart
│ │ │ │ ├── chat_poll_interface.dart
│ │ │ │ └── chat_poll_isolate.dart
│ │ │ ├── chat_state.dart
│ │ │ └── chat_bloc.dart
│ │ ├── main.dart
│ │ ├── chat_poll_worker.dart
│ │ ├── login.dart
│ │ ├── app.dart
│ │ └── chat.dart
│ ├── android
│ │ ├── gradle.properties
│ │ ├── app
│ │ │ ├── src
│ │ │ │ ├── main
│ │ │ │ │ ├── res
│ │ │ │ │ │ ├── mipmap-hdpi
│ │ │ │ │ │ │ └── ic_launcher.png
│ │ │ │ │ │ ├── mipmap-mdpi
│ │ │ │ │ │ │ └── ic_launcher.png
│ │ │ │ │ │ ├── mipmap-xhdpi
│ │ │ │ │ │ │ └── ic_launcher.png
│ │ │ │ │ │ ├── mipmap-xxhdpi
│ │ │ │ │ │ │ └── ic_launcher.png
│ │ │ │ │ │ ├── mipmap-xxxhdpi
│ │ │ │ │ │ │ └── ic_launcher.png
│ │ │ │ │ │ ├── drawable
│ │ │ │ │ │ │ └── launch_background.xml
│ │ │ │ │ │ ├── drawable-v21
│ │ │ │ │ │ │ └── launch_background.xml
│ │ │ │ │ │ ├── values
│ │ │ │ │ │ │ └── styles.xml
│ │ │ │ │ │ └── values-night
│ │ │ │ │ │ │ └── styles.xml
│ │ │ │ │ ├── kotlin
│ │ │ │ │ │ └── com
│ │ │ │ │ │ │ └── luisciber
│ │ │ │ │ │ │ └── odoochat_example
│ │ │ │ │ │ │ └── MainActivity.kt
│ │ │ │ │ └── AndroidManifest.xml
│ │ │ │ ├── debug
│ │ │ │ │ └── AndroidManifest.xml
│ │ │ │ └── profile
│ │ │ │ │ └── AndroidManifest.xml
│ │ │ └── build.gradle
│ │ ├── gradle
│ │ │ └── wrapper
│ │ │ │ └── gradle-wrapper.properties
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ └── settings.gradle
│ ├── web
│ │ ├── favicon.png
│ │ ├── icons
│ │ │ ├── Icon-192.png
│ │ │ ├── Icon-512.png
│ │ │ ├── Icon-maskable-192.png
│ │ │ └── Icon-maskable-512.png
│ │ ├── manifest.json
│ │ └── index.html
│ ├── analysis_options.yaml
│ ├── .vscode
│ │ └── launch.json
│ ├── pubspec.yaml
│ ├── .gitignore
│ └── .metadata
└── odoochat_example.dart
├── analysis_options.yaml
├── .gitignore
├── CHANGELOG.md
├── pubspec.yaml
├── LICENSE
└── README.md
/.pubignore:
--------------------------------------------------------------------------------
1 | example/odoochat_example/
--------------------------------------------------------------------------------
/lib/odoochat.dart:
--------------------------------------------------------------------------------
1 | export 'src/odoochat.dart';
2 |
--------------------------------------------------------------------------------
/example/odoochat_example/README.md:
--------------------------------------------------------------------------------
1 | # odoochat_example
2 |
3 | https://pub.dev/packages/odoochat
--------------------------------------------------------------------------------
/example/odoochat_example/ios/Runner/Runner-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | #import "GeneratedPluginRegistrant.h"
2 |
--------------------------------------------------------------------------------
/example/odoochat_example/lib/bloc/bloc.dart:
--------------------------------------------------------------------------------
1 | export 'chat_bloc.dart';
2 | export 'chat_poll/chat_poll.dart';
3 |
--------------------------------------------------------------------------------
/example/odoochat_example/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx4G
2 | android.useAndroidX=true
3 | android.enableJetifier=true
4 |
--------------------------------------------------------------------------------
/example/odoochat_example/web/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/luiscib3r/odoochat_flutter/HEAD/example/odoochat_example/web/favicon.png
--------------------------------------------------------------------------------
/example/odoochat_example/web/icons/Icon-192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/luiscib3r/odoochat_flutter/HEAD/example/odoochat_example/web/icons/Icon-192.png
--------------------------------------------------------------------------------
/example/odoochat_example/web/icons/Icon-512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/luiscib3r/odoochat_flutter/HEAD/example/odoochat_example/web/icons/Icon-512.png
--------------------------------------------------------------------------------
/example/odoochat_example/ios/Flutter/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
2 | #include "Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/example/odoochat_example/ios/Flutter/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
2 | #include "Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/example/odoochat_example/web/icons/Icon-maskable-192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/luiscib3r/odoochat_flutter/HEAD/example/odoochat_example/web/icons/Icon-maskable-192.png
--------------------------------------------------------------------------------
/example/odoochat_example/web/icons/Icon-maskable-512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/luiscib3r/odoochat_flutter/HEAD/example/odoochat_example/web/icons/Icon-maskable-512.png
--------------------------------------------------------------------------------
/example/odoochat_example/lib/main.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:odoochat_example/app.dart';
3 |
4 | void main() {
5 | runApp(const App());
6 | }
7 |
--------------------------------------------------------------------------------
/example/odoochat_example/analysis_options.yaml:
--------------------------------------------------------------------------------
1 | include: package:very_good_analysis/analysis_options.yaml
2 |
3 | linter:
4 | rules:
5 | public_member_api_docs: false
6 | flutter_style_todos: false
7 |
--------------------------------------------------------------------------------
/example/odoochat_example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/luiscib3r/odoochat_flutter/HEAD/example/odoochat_example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/example/odoochat_example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/luiscib3r/odoochat_flutter/HEAD/example/odoochat_example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/example/odoochat_example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/luiscib3r/odoochat_flutter/HEAD/example/odoochat_example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/lib/src/model/model.dart:
--------------------------------------------------------------------------------
1 | export 'attachment/attachment.dart';
2 | export 'channel/channel.dart';
3 | export 'message/message.dart';
4 | export 'message_info/message_info.dart';
5 | export 'partner/partner.dart';
6 |
--------------------------------------------------------------------------------
/example/odoochat_example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/luiscib3r/odoochat_flutter/HEAD/example/odoochat_example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/example/odoochat_example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/luiscib3r/odoochat_flutter/HEAD/example/odoochat_example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/lib/src/api/responses/responses.dart:
--------------------------------------------------------------------------------
1 | export 'init_messaging_result/init_messaging_result.dart';
2 | export 'login_result/login_result.dart';
3 | export 'poll_result/poll_result.dart';
4 | export 'rpc_response/rpc_response.dart';
5 |
--------------------------------------------------------------------------------
/example/odoochat_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/luiscib3r/odoochat_flutter/HEAD/example/odoochat_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
--------------------------------------------------------------------------------
/example/odoochat_example/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | "configurations": [
3 | {
4 | "name": "OdooChat",
5 | "type": "dart",
6 | "request": "launch",
7 | "program": "lib/main.dart",
8 | },
9 | ]
10 | }
--------------------------------------------------------------------------------
/example/odoochat_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/luiscib3r/odoochat_flutter/HEAD/example/odoochat_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
--------------------------------------------------------------------------------
/example/odoochat_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/luiscib3r/odoochat_flutter/HEAD/example/odoochat_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
--------------------------------------------------------------------------------
/example/odoochat_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/luiscib3r/odoochat_flutter/HEAD/example/odoochat_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
--------------------------------------------------------------------------------
/example/odoochat_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/luiscib3r/odoochat_flutter/HEAD/example/odoochat_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
--------------------------------------------------------------------------------
/example/odoochat_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/luiscib3r/odoochat_flutter/HEAD/example/odoochat_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
--------------------------------------------------------------------------------
/example/odoochat_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/luiscib3r/odoochat_flutter/HEAD/example/odoochat_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
--------------------------------------------------------------------------------
/example/odoochat_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/luiscib3r/odoochat_flutter/HEAD/example/odoochat_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
--------------------------------------------------------------------------------
/example/odoochat_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/luiscib3r/odoochat_flutter/HEAD/example/odoochat_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
--------------------------------------------------------------------------------
/example/odoochat_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/luiscib3r/odoochat_flutter/HEAD/example/odoochat_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
--------------------------------------------------------------------------------
/example/odoochat_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/luiscib3r/odoochat_flutter/HEAD/example/odoochat_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
--------------------------------------------------------------------------------
/example/odoochat_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/luiscib3r/odoochat_flutter/HEAD/example/odoochat_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
--------------------------------------------------------------------------------
/example/odoochat_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/luiscib3r/odoochat_flutter/HEAD/example/odoochat_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
--------------------------------------------------------------------------------
/example/odoochat_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/luiscib3r/odoochat_flutter/HEAD/example/odoochat_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
--------------------------------------------------------------------------------
/example/odoochat_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/luiscib3r/odoochat_flutter/HEAD/example/odoochat_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
--------------------------------------------------------------------------------
/example/odoochat_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/luiscib3r/odoochat_flutter/HEAD/example/odoochat_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
--------------------------------------------------------------------------------
/example/odoochat_example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/example/odoochat_example/android/app/src/main/kotlin/com/luisciber/odoochat_example/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package com.luisciber.odoochat_example
2 |
3 | import io.flutter.embedding.android.FlutterActivity
4 |
5 | class MainActivity: FlutterActivity() {
6 | }
7 |
--------------------------------------------------------------------------------
/example/odoochat_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/luiscib3r/odoochat_flutter/HEAD/example/odoochat_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
--------------------------------------------------------------------------------
/example/odoochat_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/luiscib3r/odoochat_flutter/HEAD/example/odoochat_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/example/odoochat_example/lib/bloc/chat_poll/chat_poll.dart:
--------------------------------------------------------------------------------
1 | // ignore_for_file: always_use_package_imports
2 |
3 | import 'chat_poll_isolate.dart' if (dart.library.html) 'chat_poll_worker.dart'
4 | as chat_poll;
5 |
6 | typedef ChatPoll = chat_poll.ChatPoll;
7 |
--------------------------------------------------------------------------------
/example/odoochat_example/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | zipStoreBase=GRADLE_USER_HOME
4 | zipStorePath=wrapper/dists
5 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip
6 |
--------------------------------------------------------------------------------
/lib/src/exceptions/exceptions.dart:
--------------------------------------------------------------------------------
1 | class OdooChatException implements Exception {
2 | OdooChatException({
3 | required this.code,
4 | required this.message,
5 | this.data,
6 | });
7 |
8 | final int code;
9 | final String message;
10 | Map? data;
11 | }
12 |
--------------------------------------------------------------------------------
/analysis_options.yaml:
--------------------------------------------------------------------------------
1 | include: package:very_good_analysis/analysis_options.yaml
2 |
3 | linter:
4 | rules:
5 | public_member_api_docs: false
6 | flutter_style_todos: false
7 |
8 | analyzer:
9 | errors:
10 | invalid_annotation_target: ignore
11 | exclude:
12 | - lib/**/*.g.dart
13 |
--------------------------------------------------------------------------------
/example/odoochat_example/ios/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/example/odoochat_example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/example/odoochat_example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/example/odoochat_example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/example/odoochat_example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/example/odoochat_example/android/.gitignore:
--------------------------------------------------------------------------------
1 | gradle-wrapper.jar
2 | /.gradle
3 | /captures/
4 | /gradlew
5 | /gradlew.bat
6 | /local.properties
7 | GeneratedPluginRegistrant.java
8 |
9 | # Remember to never publicly share your keystore.
10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
11 | key.properties
12 | **/*.keystore
13 | **/*.jks
14 |
--------------------------------------------------------------------------------
/example/odoochat_example/ios/RunnerTests/RunnerTests.swift:
--------------------------------------------------------------------------------
1 | import Flutter
2 | import UIKit
3 | import XCTest
4 |
5 | class RunnerTests: XCTestCase {
6 |
7 | func testExample() {
8 | // If you add code to the Runner application, consider adding tests here.
9 | // See https://developer.apple.com/documentation/xctest for more information about using XCTest.
10 | }
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/example/odoochat_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md:
--------------------------------------------------------------------------------
1 | # Launch Screen Assets
2 |
3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory.
4 |
5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Files and directories created by pub
2 | .dart_tool/
3 | .packages
4 |
5 | # Omit commiting pubspec.lock for library packages:
6 | # https://dart.dev/guides/libraries/private-files#pubspeclock
7 | pubspec.lock
8 |
9 | # Conventional directory for build outputs
10 | build/
11 |
12 | # Directory created by dartdoc
13 | doc/api/
14 |
15 | bin/
16 |
17 | json_responses_examples/
18 | .flutter-plugins
19 | .flutter-plugins-dependencies
--------------------------------------------------------------------------------
/example/odoochat_example/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/example/odoochat_example/android/app/src/profile/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/example/odoochat_example/ios/Runner/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | import UIKit
2 | import Flutter
3 |
4 | @UIApplicationMain
5 | @objc class AppDelegate: FlutterAppDelegate {
6 | override func application(
7 | _ application: UIApplication,
8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
9 | ) -> Bool {
10 | GeneratedPluginRegistrant.register(with: self)
11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions)
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/lib/src/payload/login_params/login_params.dart:
--------------------------------------------------------------------------------
1 | import 'package:freezed_annotation/freezed_annotation.dart';
2 |
3 | part 'login_params.freezed.dart';
4 | part 'login_params.g.dart';
5 |
6 | @freezed
7 | class LoginParams with _$LoginParams {
8 | const factory LoginParams({
9 | required String login,
10 | required String password,
11 | required String db,
12 | }) = _LoginParams;
13 |
14 | factory LoginParams.fromJson(Map json) =>
15 | _$LoginParamsFromJson(json);
16 | }
17 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | ## 2.1.1
2 |
3 | - **FIX**: fix some nullable fields.
4 |
5 | ## 2.1.0
6 |
7 | - **FEAT**: compatible with odoo 15.
8 |
9 | ## 2.0.0
10 |
11 | - Major refactor of the entire package after 3 years
12 | - Updated dependencies to their latest versions
13 | - Enhanced code readability and maintainability by adopting best practices
14 | - Updated documentation with more examples and use cases
15 | - Improved error handling and reporting
16 |
17 | ## 1.0.0
18 |
19 | - Initial version, created by Stagehand
20 |
--------------------------------------------------------------------------------
/lib/src/payload/payload.dart:
--------------------------------------------------------------------------------
1 | export 'get_messages_params/get_messages_params.dart';
2 | export 'init_messaging_params/init_messaging_params.dart';
3 | export 'login_params/login_params.dart';
4 | export 'message_fetch_params/message_fetch_params.dart';
5 | export 'message_post_params/message_post_params.dart';
6 | export 'poll_params/poll_params.dart';
7 | export 'rpc_payload/rpc_payload.dart';
8 | export 'send_message_params/send_message_params.dart';
9 | export 'upload_attachment_payload/upload_attachment_payload.dart';
10 |
--------------------------------------------------------------------------------
/lib/src/payload/init_messaging_params/init_messaging_params.dart:
--------------------------------------------------------------------------------
1 | import 'package:freezed_annotation/freezed_annotation.dart';
2 |
3 | part 'init_messaging_params.freezed.dart';
4 | part 'init_messaging_params.g.dart';
5 |
6 | @freezed
7 | class InitMessagingParams with _$InitMessagingParams {
8 | const factory InitMessagingParams({
9 | required Map context,
10 | }) = _InitMessagingParams;
11 |
12 | factory InitMessagingParams.fromJson(Map json) =>
13 | _$InitMessagingParamsFromJson(json);
14 | }
15 |
--------------------------------------------------------------------------------
/example/odoochat_example/android/app/src/main/res/drawable/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/example/odoochat_example/android/app/src/main/res/drawable-v21/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/lib/src/model/attachment/attachment.dart:
--------------------------------------------------------------------------------
1 | import 'package:freezed_annotation/freezed_annotation.dart';
2 |
3 | part 'attachment.freezed.dart';
4 | part 'attachment.g.dart';
5 |
6 | @freezed
7 | class Attachment with _$Attachment {
8 | const factory Attachment({
9 | required int id,
10 | required String checksum,
11 | required String filename,
12 | required String name,
13 | required String mimetype,
14 | }) = _Attachment;
15 |
16 | factory Attachment.fromJson(Map json) =>
17 | _$AttachmentFromJson(json);
18 | }
19 |
--------------------------------------------------------------------------------
/example/odoochat_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "LaunchImage.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "LaunchImage@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "LaunchImage@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/lib/src/payload/get_messages_params/get_messages_params.dart:
--------------------------------------------------------------------------------
1 | import 'package:freezed_annotation/freezed_annotation.dart';
2 |
3 | part 'get_messages_params.freezed.dart';
4 | part 'get_messages_params.g.dart';
5 |
6 | @freezed
7 | class GetMessagesParams with _$GetMessagesParams {
8 | const factory GetMessagesParams({
9 | @JsonKey(name: 'channel_id') required int channelId,
10 | required int limit,
11 | }) = _GetMessagesParams;
12 |
13 | factory GetMessagesParams.fromJson(Map json) =>
14 | _$GetMessagesParamsFromJson(json);
15 | }
16 |
--------------------------------------------------------------------------------
/example/odoochat_example/lib/chat_poll_worker.dart:
--------------------------------------------------------------------------------
1 | // ignore_for_file: avoid_web_libraries_in_flutter
2 |
3 | import 'dart:html';
4 | import 'dart:js_interop';
5 |
6 | import 'package:odoochat/odoochat.dart';
7 | import 'package:odoochat_example/bloc/chat_poll/chat_poll_worker.dart';
8 |
9 | @JS('self')
10 | external JSObject get _self;
11 | DedicatedWorkerGlobalScope get self => _self as DedicatedWorkerGlobalScope;
12 |
13 | Future main() async {
14 | await ChatPollServiceWorker(
15 | self: self,
16 | odooChat: OdooChat(
17 | serverUrl: 'http://localhost:8069',
18 | databaseName: 'luisciber',
19 | debug: true,
20 | ),
21 | ).run();
22 | }
23 |
--------------------------------------------------------------------------------
/example/odoochat_example/android/build.gradle:
--------------------------------------------------------------------------------
1 | buildscript {
2 | ext.kotlin_version = '1.7.10'
3 | repositories {
4 | google()
5 | mavenCentral()
6 | }
7 |
8 | dependencies {
9 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
10 | }
11 | }
12 |
13 | allprojects {
14 | repositories {
15 | google()
16 | mavenCentral()
17 | }
18 | }
19 |
20 | rootProject.buildDir = '../build'
21 | subprojects {
22 | project.buildDir = "${rootProject.buildDir}/${project.name}"
23 | }
24 | subprojects {
25 | project.evaluationDependsOn(':app')
26 | }
27 |
28 | tasks.register("clean", Delete) {
29 | delete rootProject.buildDir
30 | }
31 |
--------------------------------------------------------------------------------
/example/odoochat_example/ios/.gitignore:
--------------------------------------------------------------------------------
1 | **/dgph
2 | *.mode1v3
3 | *.mode2v3
4 | *.moved-aside
5 | *.pbxuser
6 | *.perspectivev3
7 | **/*sync/
8 | .sconsign.dblite
9 | .tags*
10 | **/.vagrant/
11 | **/DerivedData/
12 | Icon?
13 | **/Pods/
14 | **/.symlinks/
15 | profile
16 | xcuserdata
17 | **/.generated/
18 | Flutter/App.framework
19 | Flutter/Flutter.framework
20 | Flutter/Flutter.podspec
21 | Flutter/Generated.xcconfig
22 | Flutter/ephemeral/
23 | Flutter/app.flx
24 | Flutter/app.zip
25 | Flutter/flutter_assets/
26 | Flutter/flutter_export_environment.sh
27 | ServiceDefinitions.json
28 | Runner/GeneratedPluginRegistrant.*
29 |
30 | # Exceptions to above rules.
31 | !default.mode1v3
32 | !default.mode2v3
33 | !default.pbxuser
34 | !default.perspectivev3
35 |
--------------------------------------------------------------------------------
/lib/src/model/partner/partner.dart:
--------------------------------------------------------------------------------
1 | import 'package:freezed_annotation/freezed_annotation.dart';
2 |
3 | part 'partner.freezed.dart';
4 | part 'partner.g.dart';
5 |
6 | @freezed
7 | class Partner with _$Partner {
8 | const factory Partner({
9 | required int id,
10 | required String name,
11 | required String email,
12 | required bool active,
13 | @JsonKey(name: 'im_status') required String imStatus,
14 | @JsonKey(name: 'is_internal_user', defaultValue: false)
15 | required bool isInternalUser,
16 | @JsonKey(name: 'user_id') int? userId,
17 | @JsonKey(name: 'display_name') String? displayName,
18 | }) = _Partner;
19 |
20 | factory Partner.fromJson(Map json) =>
21 | _$PartnerFromJson(json);
22 | }
23 |
--------------------------------------------------------------------------------
/lib/src/payload/init_messaging_params/init_messaging_params.g.dart:
--------------------------------------------------------------------------------
1 | // GENERATED CODE - DO NOT MODIFY BY HAND
2 |
3 | part of 'init_messaging_params.dart';
4 |
5 | // **************************************************************************
6 | // JsonSerializableGenerator
7 | // **************************************************************************
8 |
9 | _$InitMessagingParamsImpl _$$InitMessagingParamsImplFromJson(
10 | Map json) =>
11 | _$InitMessagingParamsImpl(
12 | context: json['context'] as Map,
13 | );
14 |
15 | Map _$$InitMessagingParamsImplToJson(
16 | _$InitMessagingParamsImpl instance) =>
17 | {
18 | 'context': instance.context,
19 | };
20 |
--------------------------------------------------------------------------------
/pubspec.yaml:
--------------------------------------------------------------------------------
1 | name: odoochat
2 | description: Dart package to connect to Odoo Discuss Module
3 | version: 2.1.1
4 | homepage: https://www.luisciber.com
5 | repository: https://github.com/luiscib3r/odoochat_flutter
6 | issue_tracker: https://github.com/luiscib3r/odoochat_flutter/issues
7 | topics: [odoo, chat, messaging]
8 |
9 | environment:
10 | sdk: ^3.0.0
11 |
12 | dependencies:
13 | cookie_jar: ^4.0.8
14 | dio: ^5.4.0
15 | dio_cookie_manager: ^3.1.1
16 | equatable: ^2.0.5
17 | freezed_annotation: ^2.4.1
18 | json_annotation: ^4.8.1
19 | retrofit: ^4.0.3
20 |
21 | dev_dependencies:
22 | build_runner: ^2.4.8
23 | freezed: ^2.4.6
24 | json_serializable: ^6.7.1
25 | pedantic: ^1.9.0
26 | retrofit_generator: ^8.0.6
27 | very_good_analysis: ^5.1.0
28 |
--------------------------------------------------------------------------------
/lib/src/payload/poll_params/poll_params.dart:
--------------------------------------------------------------------------------
1 | import 'package:freezed_annotation/freezed_annotation.dart';
2 |
3 | part 'poll_params.freezed.dart';
4 | part 'poll_params.g.dart';
5 |
6 | @freezed
7 | class PollParams with _$PollParams {
8 | factory PollParams({
9 | required int last,
10 | }) =>
11 | PollParams._(
12 | last: last,
13 | channels: ['bundle_changed'],
14 | options: {
15 | 'bus_inactivity': 0,
16 | },
17 | );
18 |
19 | const factory PollParams._({
20 | required int last,
21 | required List channels,
22 | required Map options,
23 | }) = _PollParams;
24 |
25 | factory PollParams.fromJson(Map json) =>
26 | _$PollParamsFromJson(json);
27 | }
28 |
--------------------------------------------------------------------------------
/lib/src/payload/login_params/login_params.g.dart:
--------------------------------------------------------------------------------
1 | // GENERATED CODE - DO NOT MODIFY BY HAND
2 |
3 | part of 'login_params.dart';
4 |
5 | // **************************************************************************
6 | // JsonSerializableGenerator
7 | // **************************************************************************
8 |
9 | _$LoginParamsImpl _$$LoginParamsImplFromJson(Map json) =>
10 | _$LoginParamsImpl(
11 | login: json['login'] as String,
12 | password: json['password'] as String,
13 | db: json['db'] as String,
14 | );
15 |
16 | Map _$$LoginParamsImplToJson(_$LoginParamsImpl instance) =>
17 | {
18 | 'login': instance.login,
19 | 'password': instance.password,
20 | 'db': instance.db,
21 | };
22 |
--------------------------------------------------------------------------------
/example/odoochat_example/lib/bloc/chat_state.dart:
--------------------------------------------------------------------------------
1 | part of 'chat_bloc.dart';
2 |
3 | @freezed
4 | class OdooChatState with _$OdooChatState {
5 | const factory OdooChatState({
6 | required bool loading,
7 | required List messages,
8 | required List channels,
9 | AppChannel? currentChannel,
10 | User? user,
11 | }) = _OdooChatState;
12 |
13 | factory OdooChatState.initial() => const OdooChatState(
14 | loading: false,
15 | messages: [],
16 | channels: [],
17 | );
18 | }
19 |
20 | class AppChannel extends Equatable {
21 | const AppChannel({
22 | required this.id,
23 | required this.name,
24 | });
25 |
26 | final int id;
27 | final String name;
28 |
29 | @override
30 | List