diff --git a/assets/images/wrong_answer.gif b/assets/images/wrong_answer.gif
new file mode 100644
index 0000000..44f1d38
Binary files /dev/null and b/assets/images/wrong_answer.gif differ
diff --git a/assets/langs/ar-SA.json b/assets/langs/ar-SA.json
index 1c5851a..59c0814 100644
--- a/assets/langs/ar-SA.json
+++ b/assets/langs/ar-SA.json
@@ -500,5 +500,9 @@
"codeExpire": "انتهت صلاحية رمز التحقق",
"typeheretoreply": "اكتب هنا للرد",
"favorite": "مفضلتي",
- "searchfromchat": "البحث من الدردشة"
+ "searchfromchat": "البحث من الدردشة",
+ "yourAnswerCorrect": "إجابتك صحيحة",
+ "youMissedTheQuestion": "فاتك !! أنت خارج اللعبة. لكن يمكنك المتابعة.",
+ "wrongAnswer": "إجابة خاطئة! أنت خارج اللعبة. لكن يمكنك المتابعة."
+
}
\ No newline at end of file
diff --git a/assets/langs/en-US.json b/assets/langs/en-US.json
index b4b06f0..b0ab50e 100644
--- a/assets/langs/en-US.json
+++ b/assets/langs/en-US.json
@@ -500,6 +500,9 @@
"allQuestionsCorrect": "You have answered all questions correct",
"typeheretoreply": "Type here to reply",
"favorite" : "My Favorites",
- "searchfromchat": "Search from chat"
+ "searchfromchat": "Search from chat",
+ "yourAnswerCorrect": "Your answer is correct",
+ "youMissedTheQuestion": "You Missed !! You are out of the game. But you can follow up.",
+ "wrongAnswer": "Wrong Answer! You are out of the game. But you can follow up."
}
\ No newline at end of file
diff --git a/ios/.gitignore b/ios/.gitignore
index 151026b..d032e39 100644
--- a/ios/.gitignore
+++ b/ios/.gitignore
@@ -31,3 +31,8 @@ Runner/GeneratedPluginRegistrant.*
!default.mode2v3
!default.pbxuser
!default.perspectivev3
+
+ios/Podfile
+ios/Runner/Runner.entitlements
+
+
diff --git a/ios/Runner/Runner.entitlements b/ios/Runner/Runner.entitlements
new file mode 100644
index 0000000..304aa00
--- /dev/null
+++ b/ios/Runner/Runner.entitlements
@@ -0,0 +1,30 @@
+
+
+
+
+ aps-environment
+ development
+ com.apple.developer.icloud-container-identifiers
+
+ iCloud.com.cloudsolutions.mohemm
+
+ com.apple.developer.icloud-services
+
+ CloudDocuments
+
+ com.apple.developer.networking.HotspotConfiguration
+
+ com.apple.developer.networking.networkextension
+
+ com.apple.developer.networking.wifi-info
+
+ com.apple.developer.nfc.readersession.formats
+
+ TAG
+
+ com.apple.developer.ubiquity-container-identifiers
+
+ iCloud.com.cloudsolutions.mohemm
+
+
+
diff --git a/lib/api/api_client.dart b/lib/api/api_client.dart
index 7a6f668..1e66d45 100644
--- a/lib/api/api_client.dart
+++ b/lib/api/api_client.dart
@@ -18,8 +18,7 @@ class APIError {
APIError(this.errorCode, this.errorMessage);
- Map toJson() =>
- {'errorCode': errorCode, 'errorMessage': errorMessage};
+ Map toJson() => {'errorCode': errorCode, 'errorMessage': errorMessage};
@override
String toString() {
@@ -54,8 +53,7 @@ APIException _throwAPIException(Response response) {
return APIException(APIException.INTERNAL_SERVER_ERROR);
case 444:
var downloadUrl = response.headers["location"];
- return APIException(APIException.UPGRADE_REQUIRED,
- arguments: downloadUrl);
+ return APIException(APIException.UPGRADE_REQUIRED, arguments: downloadUrl);
default:
return APIException(APIException.OTHER);
}
@@ -68,13 +66,8 @@ class ApiClient {
factory ApiClient() => _instance;
- Future postJsonForObject(
- FactoryConstructor factoryConstructor, String url, T jsonObject,
- {String? token,
- Map? queryParameters,
- Map? headers,
- int retryTimes = 0,
- bool isFormData = false}) async {
+ Future postJsonForObject(FactoryConstructor factoryConstructor, String url, T jsonObject,
+ {String? token, Map? queryParameters, Map? headers, int retryTimes = 0, bool isFormData = false}) async {
var _headers = {'Accept': 'application/json'};
if (headers != null && headers.isNotEmpty) {
_headers.addAll(headers);
@@ -84,12 +77,7 @@ class ApiClient {
var bodyJson = json.encode(jsonObject);
print("body:$bodyJson");
}
- var response = await postJsonForResponse(url, jsonObject,
- token: token,
- queryParameters: queryParameters,
- headers: _headers,
- retryTimes: retryTimes,
- isFormData: isFormData);
+ var response = await postJsonForResponse(url, jsonObject, token: token, queryParameters: queryParameters, headers: _headers, retryTimes: retryTimes, isFormData: isFormData);
// try {
if (!kReleaseMode) {
logger.i("res: " + response.body);
@@ -102,8 +90,7 @@ class ApiClient {
return factoryConstructor(jsonData);
} else {
APIError? apiError;
- apiError =
- APIError(jsonData['ErrorCode'], jsonData['ErrorEndUserMessage']);
+ apiError = APIError(jsonData['ErrorCode'], jsonData['ErrorEndUserMessage']);
throw APIException(APIException.BAD_REQUEST, error: apiError);
}
// } catch (ex) {
@@ -116,11 +103,7 @@ class ApiClient {
}
Future postJsonForResponse(String url, T jsonObject,
- {String? token,
- Map? queryParameters,
- Map? headers,
- int retryTimes = 0,
- bool isFormData = false}) async {
+ {String? token, Map? queryParameters, Map? headers, int retryTimes = 0, bool isFormData = false}) async {
String? requestBody;
late Map stringObj;
if (jsonObject != null) {
@@ -134,22 +117,13 @@ class ApiClient {
if (isFormData) {
headers = {'Content-Type': 'application/x-www-form-urlencoded'};
- stringObj = ((jsonObject ?? {}) as Map)
- .map((key, value) => MapEntry(key, value?.toString() ?? ""));
+ stringObj = ((jsonObject ?? {}) as Map).map((key, value) => MapEntry(key, value?.toString() ?? ""));
}
- return await _postForResponse(url, isFormData ? stringObj : requestBody,
- token: token,
- queryParameters: queryParameters,
- headers: headers,
- retryTimes: retryTimes);
+ return await _postForResponse(url, isFormData ? stringObj : requestBody, token: token, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes);
}
- Future _postForResponse(String url, requestBody,
- {String? token,
- Map? queryParameters,
- Map? headers,
- int retryTimes = 0}) async {
+ Future _postForResponse(String url, requestBody, {String? token, Map? queryParameters, Map? headers, int retryTimes = 0}) async {
try {
var _headers = {};
if (token != null) {
@@ -164,9 +138,7 @@ class ApiClient {
var queryString = new Uri(queryParameters: queryParameters).query;
url = url + '?' + queryString;
}
- var response =
- await _post(Uri.parse(url), body: requestBody, headers: _headers)
- .timeout(Duration(seconds: 120));
+ var response = await _post(Uri.parse(url), body: requestBody, headers: _headers).timeout(Duration(seconds: 120));
if (response.statusCode >= 200 && response.statusCode < 300) {
return response;
@@ -177,11 +149,7 @@ class ApiClient {
if (retryTimes > 0) {
print('will retry after 3 seconds...');
await Future.delayed(Duration(seconds: 3));
- return await _postForResponse(url, requestBody,
- token: token,
- queryParameters: queryParameters,
- headers: headers,
- retryTimes: retryTimes - 1);
+ return await _postForResponse(url, requestBody, token: token, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes - 1);
} else {
throw APIException(APIException.OTHER, arguments: e);
}
@@ -189,11 +157,7 @@ class ApiClient {
if (retryTimes > 0) {
print('will retry after 3 seconds...');
await Future.delayed(Duration(seconds: 3));
- return await _postForResponse(url, requestBody,
- token: token,
- queryParameters: queryParameters,
- headers: headers,
- retryTimes: retryTimes - 1);
+ return await _postForResponse(url, requestBody, token: token, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes - 1);
} else {
throw APIException(APIException.OTHER, arguments: e);
}
@@ -203,39 +167,23 @@ class ApiClient {
if (retryTimes > 0) {
print('will retry after 3 seconds...');
await Future.delayed(Duration(seconds: 3));
- return await _postForResponse(url, requestBody,
- token: token,
- queryParameters: queryParameters,
- headers: headers,
- retryTimes: retryTimes - 1);
+ return await _postForResponse(url, requestBody, token: token, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes - 1);
} else {
throw APIException(APIException.OTHER, arguments: e);
}
}
}
- Future getJsonForResponse(String url,
- {String? token,
- Map? queryParameters,
- Map? headers,
- int retryTimes = 0}) async {
+ Future getJsonForResponse(String url, {String? token, Map? queryParameters, Map? headers, int retryTimes = 0}) async {
if (headers == null) {
headers = {'Content-Type': 'application/json'};
} else {
headers['Content-Type'] = 'application/json';
}
- return await _getForResponse(url,
- token: token,
- queryParameters: queryParameters,
- headers: headers,
- retryTimes: retryTimes);
+ return await _getForResponse(url, token: token, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes);
}
- Future _getForResponse(String url,
- {String? token,
- Map? queryParameters,
- Map? headers,
- int retryTimes = 0}) async {
+ Future _getForResponse(String url, {String? token, Map? queryParameters, Map? headers, int retryTimes = 0}) async {
try {
var _headers = {};
if (token != null) {
@@ -250,8 +198,7 @@ class ApiClient {
var queryString = new Uri(queryParameters: queryParameters).query;
url = url + '?' + queryString;
}
- var response = await _get(Uri.parse(url), headers: _headers)
- .timeout(Duration(seconds: 60));
+ var response = await _get(Uri.parse(url), headers: _headers).timeout(Duration(seconds: 60));
if (response.statusCode >= 200 && response.statusCode < 300) {
return response;
@@ -262,11 +209,7 @@ class ApiClient {
if (retryTimes > 0) {
print('will retry after 3 seconds...');
await Future.delayed(Duration(seconds: 3));
- return await _getForResponse(url,
- token: token,
- queryParameters: queryParameters,
- headers: headers,
- retryTimes: retryTimes - 1);
+ return await _getForResponse(url, token: token, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes - 1);
} else {
throw APIException(APIException.OTHER, arguments: e);
}
@@ -274,11 +217,7 @@ class ApiClient {
if (retryTimes > 0) {
print('will retry after 3 seconds...');
await Future.delayed(Duration(seconds: 3));
- return await _getForResponse(url,
- token: token,
- queryParameters: queryParameters,
- headers: headers,
- retryTimes: retryTimes - 1);
+ return await _getForResponse(url, token: token, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes - 1);
} else {
throw APIException(APIException.OTHER, arguments: e);
}
@@ -288,19 +227,14 @@ class ApiClient {
if (retryTimes > 0) {
print('will retry after 3 seconds...');
await Future.delayed(Duration(seconds: 3));
- return await _getForResponse(url,
- token: token,
- queryParameters: queryParameters,
- headers: headers,
- retryTimes: retryTimes - 1);
+ return await _getForResponse(url, token: token, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes - 1);
} else {
throw APIException(APIException.OTHER, arguments: e);
}
}
}
- Future _get(url, {Map? headers}) =>
- _withClient((client) => client.get(url, headers: headers));
+ Future _get(url, {Map? headers}) => _withClient((client) => client.get(url, headers: headers));
bool _certificateCheck(X509Certificate cert, String host, int port) => true;
@@ -314,8 +248,5 @@ class ApiClient {
}
}
- Future _post(url,
- {Map? headers, body, Encoding? encoding}) =>
- _withClient((client) =>
- client.post(url, headers: headers, body: body, encoding: encoding));
+ Future _post(url, {Map? headers, body, Encoding? encoding}) => _withClient((client) => client.post(url, headers: headers, body: body, encoding: encoding));
}
diff --git a/lib/api/chat/chat_api_client.dart b/lib/api/chat/chat_api_client.dart
index 0d1653d..bea5b7c 100644
--- a/lib/api/chat/chat_api_client.dart
+++ b/lib/api/chat/chat_api_client.dart
@@ -1,10 +1,15 @@
import 'dart:convert';
import 'dart:io';
+import 'dart:typed_data';
import 'package:http/http.dart';
import 'package:mohem_flutter_app/api/api_client.dart';
import 'package:mohem_flutter_app/app_state/app_state.dart';
import 'package:mohem_flutter_app/classes/consts.dart';
+import 'package:mohem_flutter_app/classes/utils.dart';
+import 'package:mohem_flutter_app/exceptions/api_exception.dart';
+import 'package:mohem_flutter_app/main.dart';
+import 'package:mohem_flutter_app/models/chat/chat_user_image_model.dart';
import 'package:mohem_flutter_app/models/chat/get_search_user_chat_model.dart';
import 'package:mohem_flutter_app/models/chat/get_user_login_token_model.dart' as user;
import 'package:mohem_flutter_app/models/chat/make_user_favotire_unfavorite_chat_model.dart' as fav;
@@ -18,43 +23,55 @@ class ChatApiClient {
Future getUserLoginToken() async {
Response response = await ApiClient().postJsonForResponse(
- "${ApiConsts.chatServerBaseApiUrl}user/externaluserlogin",
+ "${ApiConsts.chatLoginTokenUrl}externaluserlogin",
{
"employeeNumber": AppState().memberInformationList!.eMPLOYEENUMBER.toString(),
"password": "FxIu26rWIKoF8n6mpbOmAjDLphzFGmpG",
},
);
- user.UserAutoLoginModel userLoginResponse = user.userAutoLoginModelFromJson(
- response.body,
- );
+ user.UserAutoLoginModel userLoginResponse = user.userAutoLoginModelFromJson(response.body);
return userLoginResponse;
}
Future?> getChatMemberFromSearch(String sName, int cUserId) async {
Response response = await ApiClient().getJsonForResponse(
- "${ApiConsts.chatServerBaseApiUrl}${ApiConsts.chatSearchMember}$sName/$cUserId",
+ "${ApiConsts.chatLoginTokenUrl}getUserWithStatusAndFavAsync/$sName/$cUserId",
token: AppState().chatDetails!.response!.token,
);
return searchUserJsonModel(response.body);
}
- List searchUserJsonModel(String str) => List.from(
- json.decode(str).map((x) => ChatUser.fromJson(x)),
- );
+ List searchUserJsonModel(String str) => List.from(json.decode(str).map((x) => ChatUser.fromJson(x)));
Future getRecentChats() async {
- Response response = await ApiClient().getJsonForResponse(
- "${ApiConsts.chatServerBaseApiUrl}${ApiConsts.chatRecentUrl}",
- token: AppState().chatDetails!.response!.token,
- );
- return ChatUserModel.fromJson(
- json.decode(response.body),
- );
+ try {
+ Response response = await ApiClient().getJsonForResponse(
+ "${ApiConsts.chatRecentUrl}getchathistorybyuserid",
+ token: AppState().chatDetails!.response!.token,
+ );
+ return ChatUserModel.fromJson(
+ json.decode(response.body),
+ );
+ } catch (e) {
+ e as APIException;
+ if (e.message == "api_common_unauthorized") {
+ user.UserAutoLoginModel userLoginResponse = await ChatApiClient().getUserLoginToken();
+ if (userLoginResponse.response != null) {
+ AppState().setchatUserDetails = userLoginResponse;
+ getRecentChats();
+ } else {
+ Utils.showToast(
+ userLoginResponse.errorResponses!.first.fieldName.toString() + " Erorr",
+ );
+ }
+ }
+ throw e;
+ }
}
Future getFavUsers() async {
Response favRes = await ApiClient().getJsonForResponse(
- "${ApiConsts.chatServerBaseApiUrl}${ApiConsts.chatFavoriteUsers}${AppState().chatDetails!.response!.id}",
+ "${ApiConsts.chatFavUser}getFavUserById/${AppState().chatDetails!.response!.id}",
token: AppState().chatDetails!.response!.token,
);
return ChatUserModel.fromJson(
@@ -63,41 +80,85 @@ class ChatApiClient {
}
Future getSingleUserChatHistory({required int senderUID, required int receiverUID, required bool loadMore, bool isNewChat = false, required int paginationVal}) async {
- Response response = await ApiClient().getJsonForResponse(
- "${ApiConsts.chatServerBaseApiUrl}${ApiConsts.chatSingleUserHistoryUrl}/$senderUID/$receiverUID/$paginationVal",
- token: AppState().chatDetails!.response!.token,
- );
- return response;
+ try {
+ Response response = await ApiClient().getJsonForResponse(
+ "${ApiConsts.chatSingleUserHistoryUrl}GetUserChatHistory/$senderUID/$receiverUID/$paginationVal",
+ token: AppState().chatDetails!.response!.token,
+ );
+ return response;
+ } catch (e) {
+ e as APIException;
+ if (e.message == "api_common_unauthorized") {
+ user.UserAutoLoginModel userLoginResponse = await ChatApiClient().getUserLoginToken();
+ if (userLoginResponse.response != null) {
+ AppState().setchatUserDetails = userLoginResponse;
+ getSingleUserChatHistory(senderUID: senderUID, receiverUID: receiverUID, loadMore: loadMore, paginationVal: paginationVal);
+ } else {
+ Utils.showToast(userLoginResponse.errorResponses!.first.fieldName.toString() + " Erorr");
+ }
+ }
+ throw e;
+ }
}
Future favUser({required int userID, required int targetUserID}) async {
- Response response = await ApiClient().postJsonForResponse(
- "${ApiConsts.chatServerBaseApiUrl}FavUser/addFavUser",
- {
- "targetUserId": targetUserID,
- "userId": userID,
- },
- token: AppState().chatDetails!.response!.token);
+ Response response = await ApiClient().postJsonForResponse("${ApiConsts.chatFavUser}addFavUser", {"targetUserId": targetUserID, "userId": userID}, token: AppState().chatDetails!.response!.token);
fav.FavoriteChatUser favoriteChatUser = fav.FavoriteChatUser.fromRawJson(response.body);
return favoriteChatUser;
}
Future unFavUser({required int userID, required int targetUserID}) async {
- Response response = await ApiClient().postJsonForResponse(
- "${ApiConsts.chatServerBaseApiUrl}FavUser/deleteFavUser",
- {"targetUserId": targetUserID, "userId": userID},
- token: AppState().chatDetails!.response!.token,
- );
- fav.FavoriteChatUser favoriteChatUser = fav.FavoriteChatUser.fromRawJson(response.body);
- return favoriteChatUser;
+ try {
+ Response response = await ApiClient().postJsonForResponse(
+ "${ApiConsts.chatFavUser}deleteFavUser",
+ {"targetUserId": targetUserID, "userId": userID},
+ token: AppState().chatDetails!.response!.token,
+ );
+ fav.FavoriteChatUser favoriteChatUser = fav.FavoriteChatUser.fromRawJson(response.body);
+ return favoriteChatUser;
+ } catch (e) {
+ e as APIException;
+ if (e.message == "api_common_unauthorized") {
+ logger.d("Token Generated On APIIIIII");
+ user.UserAutoLoginModel userLoginResponse = await ChatApiClient().getUserLoginToken();
+ if (userLoginResponse.response != null) {
+ AppState().setchatUserDetails = userLoginResponse;
+ unFavUser(userID: userID, targetUserID: targetUserID);
+ } else {
+ Utils.showToast(userLoginResponse.errorResponses!.first.fieldName.toString() + " Erorr");
+ }
+ }
+ throw e;
+ }
}
Future uploadMedia(String userId, File file) async {
- dynamic request = MultipartRequest('POST', Uri.parse('${ApiConsts.chatServerBaseApiUrl}${ApiConsts.chatMediaImageUploadUrl}'));
+ dynamic request = MultipartRequest('POST', Uri.parse('${ApiConsts.chatMediaImageUploadUrl}upload'));
request.fields.addAll({'userId': userId, 'fileSource': '1'});
request.files.add(await MultipartFile.fromPath('files', file.path));
request.headers.addAll({'Authorization': 'Bearer ${AppState().chatDetails!.response!.token}'});
StreamedResponse response = await request.send();
return response;
}
+
+ // Download File For Chat
+
+ Future downloadURL({required String fileName, required String fileTypeDescription}) async {
+ Response response = await ApiClient().postJsonForResponse(
+ "${ApiConsts.chatMediaImageUploadUrl}download",
+ {"fileType": fileTypeDescription, "fileName": fileName, "fileSource": 1},
+ token: AppState().chatDetails!.response!.token,
+ );
+ Uint8List data = Uint8List.fromList(response.bodyBytes);
+ return data;
+ }
+
+ Future> getUsersImages({required List encryptedEmails}) async {
+ Response response = await ApiClient().postJsonForResponse(
+ "${ApiConsts.chatUserImages}images",
+ {"encryptedEmails": encryptedEmails, "fromClient": false},
+ token: AppState().chatDetails!.response!.token,
+ );
+ return chatUserImageModelFromJson(response.body);
+ }
}
diff --git a/lib/api/dashboard_api_client.dart b/lib/api/dashboard_api_client.dart
index 69c2e82..e30af91 100644
--- a/lib/api/dashboard_api_client.dart
+++ b/lib/api/dashboard_api_client.dart
@@ -182,22 +182,22 @@ class DashboardApiClient {
Future getChatCount() async {
Response response = await ApiClient().getJsonForResponse(
- "${ApiConsts.chatServerBaseApiUrl}user/unreadconversationcount/${AppState().getUserName}",
+ "${ApiConsts.chatLoginTokenUrl}unreadconversationcount/${AppState().getUserName}",
);
return chatUnreadCovnCountModelFromJson(response.body);
}
- // Future setAdvertisementViewed(String masterID, int advertisementId) async {
- // String url = "${ApiConsts.cocRest}Mohemm_ITG_UpdateAdvertisementAsViewed";
- //
- // Map postParams = {
- // "ItgNotificationMasterId": masterID,
- // "ItgAdvertisement": {"advertisementId": advertisementId, "acknowledgment": true} //Mobile Id
- // };
- // postParams.addAll(AppState().postParamsJson);
- // return await ApiClient().postJsonForObject((json) {
- // // ItgMainRes responseData = ItgMainRes.fromJson(json);
- // return json;
- // }, url, postParams);
- // }
+// Future setAdvertisementViewed(String masterID, int advertisementId) async {
+// String url = "${ApiConsts.cocRest}Mohemm_ITG_UpdateAdvertisementAsViewed";
+//
+// Map postParams = {
+// "ItgNotificationMasterId": masterID,
+// "ItgAdvertisement": {"advertisementId": advertisementId, "acknowledgment": true} //Mobile Id
+// };
+// postParams.addAll(AppState().postParamsJson);
+// return await ApiClient().postJsonForObject((json) {
+// // ItgMainRes responseData = ItgMainRes.fromJson(json);
+// return json;
+// }, url, postParams);
+// }
}
diff --git a/lib/api/items_for_sale/items_for_sale_api_client.dart b/lib/api/items_for_sale/items_for_sale_api_client.dart
index 436ae6e..eae6ffb 100644
--- a/lib/api/items_for_sale/items_for_sale_api_client.dart
+++ b/lib/api/items_for_sale/items_for_sale_api_client.dart
@@ -66,6 +66,41 @@ class ItemsForSaleApiClient {
}, url, postParams);
}
+ Future updateItemsForSale(int itemSaleID) async {
+ List getItemsForSaleList = [];
+
+ String url = "${ApiConsts.cocRest}Mohemm_ITG_UpdateItemForSale";
+
+ // request.fields['itemSaleID'] = itemSaleID.toString();
+ // request.fields['Channel'] = "31";
+ // request.fields['isActive'] = "false";
+ // request.fields['LogInToken'] = loginTokenID!;
+ // request.fields['Token'] = tokenID!;
+ // request.fields['MobileNo'] = empMobNum!;
+ // request.fields['EmployeeNumber'] = empNum!;
+ // request.fields['employeeNumber'] = empNum;
+
+ Map postParams = {
+ "EmployeeNumber": AppState().memberInformationList?.eMPLOYEENUMBER,
+ "employeeNumber": AppState().memberInformationList?.eMPLOYEENUMBER,
+ "MobileNo": AppState().memberInformationList?.eMPLOYEEMOBILENUMBER,
+ "itemSaleID": itemSaleID.toString(),
+ "Channel": "31",
+ "isActive": "false",
+ "Token": AppState().postParamsObject?.tokenID
+ };
+
+ postParams.addAll(AppState().postParamsJson);
+ return await ApiClient().postJsonForObject((response) {
+ var body = json.decode(response['Mohemm_ITG_ResponseItem']);
+
+ // body['result']['data'].forEach((v) {
+ // getItemsForSaleList.add(new GetItemsForSaleList.fromJson(v));
+ // });
+ return getItemsForSaleList;
+ }, url, postParams);
+ }
+
Future> getEmployeePostedAds() async {
List employeePostedAdsList = [];
diff --git a/lib/api/marathon/marathon_api_client.dart b/lib/api/marathon/marathon_api_client.dart
new file mode 100644
index 0000000..1ec117d
--- /dev/null
+++ b/lib/api/marathon/marathon_api_client.dart
@@ -0,0 +1,178 @@
+import 'dart:convert';
+
+import 'package:flutter/material.dart';
+import 'package:http/http.dart';
+import 'package:logger/logger.dart' as L;
+import 'package:logging/logging.dart';
+import 'package:mohem_flutter_app/api/api_client.dart';
+import 'package:mohem_flutter_app/app_state/app_state.dart';
+import 'package:mohem_flutter_app/classes/consts.dart';
+import 'package:mohem_flutter_app/models/marathon/marathon_generic_model.dart';
+import 'package:mohem_flutter_app/models/marathon/marathon_model.dart';
+import 'package:mohem_flutter_app/models/marathon/question_model.dart';
+import 'package:mohem_flutter_app/ui/marathon/marathon_provider.dart';
+import 'package:provider/provider.dart';
+import 'package:signalr_netcore/http_connection_options.dart';
+import 'package:signalr_netcore/hub_connection.dart';
+import 'package:signalr_netcore/hub_connection_builder.dart';
+
+class MarathonApiClient {
+ Future getMarathonToken() async {
+ String employeeUserName = AppState().getUserName ?? "";
+ String employeeSession = AppState().postParamsObject?.pSessionId.toString() ?? "";
+
+ Map jsonObject = {"userName": employeeUserName, "password": employeeSession};
+ Response response = await ApiClient().postJsonForResponse(ApiConsts.marathonParticipantLoginUrl, jsonObject);
+
+ var json = jsonDecode(response.body);
+
+ MarathonGenericModel marathonModel = MarathonGenericModel.fromJson(json);
+
+ if (marathonModel.statusCode == 200) {
+ if (marathonModel.data != null && marathonModel.isSuccessful == true) {
+ AppState().setMarathonToken = marathonModel.data["token"] ?? "";
+ print("bearer: ${AppState().getMarathonToken}");
+ return marathonModel.data["token"] ?? "";
+ } else {
+ //TODO : DO ERROR HANDLING HERE
+ return "";
+ }
+ } else {
+ //TODO : DO ERROR HANDLING HERE
+ return "";
+ }
+ }
+
+ Future getProjectId() async {
+ Response response = await ApiClient().postJsonForResponse(ApiConsts.marathonProjectGetUrl, {}, token: AppState().getMarathonToken ?? await getMarathonToken());
+
+ var json = jsonDecode(response.body);
+ MarathonGenericModel marathonModel = MarathonGenericModel.fromJson(json);
+
+ if (marathonModel.statusCode == 200) {
+ if (marathonModel.data != null && marathonModel.isSuccessful == true) {
+ logger.i("message: ${marathonModel.data[0]["id"]}");
+ AppState().setMarathonProjectId = marathonModel.data[0]["id"] ?? "";
+ return marathonModel.data[0]["id"] ?? "";
+ } else {
+ //TODO : DO ERROR HANDLING HERE
+ return "";
+ }
+ } else {
+ //TODO : DO ERROR HANDLING HERE
+ return "";
+ }
+ }
+
+ Future getMarathonDetails() async {
+ String payrollString = AppState().postParamsObject?.payrollCodeStr.toString() ?? "CS";
+
+ Response response = await ApiClient().getJsonForResponse(ApiConsts.marathonUpcomingUrl + payrollString, token: AppState().getMarathonToken ?? await getMarathonToken());
+
+ var json = jsonDecode(response.body);
+
+ MarathonGenericModel marathonGenericModel = MarathonGenericModel.fromJson(json);
+
+ MarathonDetailModel marathonDetailModel = MarathonDetailModel.fromJson(marathonGenericModel.data);
+
+ AppState().setMarathonProjectId = marathonDetailModel.id!;
+
+ return marathonDetailModel;
+ }
+
+ late HubConnection hubConnection;
+ L.Logger logger = L.Logger();
+
+ Future buildHubConnection(BuildContext context) async {
+ HttpConnectionOptions httpOptions = HttpConnectionOptions(skipNegotiation: false, logMessageContent: true);
+ hubConnection = HubConnectionBuilder()
+ .withUrl(
+ ApiConsts.marathonHubConnectionUrl + "?employeeNumber=${AppState().memberInformationList!.eMPLOYEENUMBER ?? ""}&employeeName=${AppState().memberInformationList!.eMPLOYEENAME ?? ""}",
+ options: httpOptions,
+ )
+ .withAutomaticReconnect(
+ retryDelays: [2000, 5000, 10000, 20000],
+ )
+ .configureLogging(
+ Logger("Logging"),
+ )
+ .build();
+ hubConnection.onclose(
+ ({Exception? error}) {
+ logger.i("onclose");
+ },
+ );
+ hubConnection.onreconnecting(
+ ({Exception? error}) {
+ logger.i("onreconnecting");
+ },
+ );
+ hubConnection.onreconnected(
+ ({String? connectionId}) {
+ logger.i("onreconnected");
+ },
+ );
+ if (hubConnection.state != HubConnectionState.Connected) {
+ await hubConnection.start();
+ logger.i("Started HubConnection");
+
+ await hubConnection.invoke(
+ "AddParticipant",
+ args: