streamed installed with adb

master
Faiz Hashmi 1 year ago
parent 6bf23c9ca4
commit 6e5234ec07

@ -121,7 +121,7 @@ class API {
await BaseAppClient.post(_weatherForecastGetBy5Days,
body: body,
onSuccess: (response, status) {
if (status == 200 && response["data"] != null) {
if (status == 200 && response["data"] != null && response["data"].isNotEmpty) {
weathersWidgetModel = (response["data"] as List).map((e) => WeathersWidgetModel.fromJson(e)).toList().first;
}
},

@ -3,6 +3,7 @@ import 'dart:developer';
import 'package:http/http.dart' as http;
import 'package:queuing_system/core/config/config.dart';
import 'package:queuing_system/main.dart';
import 'package:queuing_system/utils/Utils.dart';
class BaseAppClient {
@ -12,30 +13,30 @@ class BaseAppClient {
url = "$BASE_URL/api/PatientCall" + endPoint;
// try {
log("URL : $url");
log("Body : ${json.encode(body)}");
if (await Utils.checkConnection()) {
final response = await http.post(Uri.parse(url), body: json.encode(body), headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
});
final int statusCode = response.statusCode;
if (statusCode < 200 || statusCode >= 400) {
if (onFailure != null) {
onFailure(Utils.generateContactAdminMsg(), statusCode);
}
} else {
log("Response: ${response.body.toString()}");
var parsed = json.decode(response.body.toString());
if (onSuccess != null) {
onSuccess(parsed, statusCode);
}
logger.i("URL : $url");
logger.i("Body : ${json.encode(body)}");
if (await Utils.checkConnection()) {
final response = await http.post(Uri.parse(url), body: json.encode(body), headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
});
final int statusCode = response.statusCode;
if (statusCode < 200 || statusCode >= 400) {
if (onFailure != null) {
onFailure(Utils.generateContactAdminMsg(), statusCode);
}
} else {
if (onFailure != null) {
onFailure('Please Check The Internet Connection', -1);
logger.i("Response: ${response.body.toString()}");
var parsed = json.decode(response.body.toString());
if (onSuccess != null) {
onSuccess(parsed, statusCode);
}
}
} else {
if (onFailure != null) {
onFailure('Please Check The Internet Connection', -1);
}
}
// } catch (e) {
// if (onFailure != null) {
// onFailure(e.toString(), -1);
@ -51,8 +52,8 @@ class BaseAppClient {
try {
// String token = await sharedPref.getString(TOKEN);
log("URL GET: $url");
log("Body GET: ${json.encode(body)}");
logger.i("URL GET: $url");
logger.i("Body GET: ${json.encode(body)}");
if (await Utils.checkConnection()) {
final response = await http.get(Uri.parse(url), headers: {'Content-Type': 'application/json', 'Accept': 'application/json'});
final int statusCode = response.statusCode;

@ -19,7 +19,7 @@ class PrayersWidgetModel {
PrayersWidgetModel.fromJson(Map<String, dynamic> json) {
fajr = dateTimeConversion(json['dateFor'], json['fajr']);
sunrise = json['sunrise'];
dhuhr = dateTimeConversion(json['dateFor'], json['dhuhr']);
dhuhr = dateTimeConversion(json['dateFor'], getDhuhrData(json), isForDhuhr: true);
asr = dateTimeConversion(json['dateFor'], json['asr']);
sunset = json['sunset'];
maghrib = dateTimeConversion(json['dateFor'], json['maghrib']);
@ -31,25 +31,15 @@ class PrayersWidgetModel {
dateFor = json['dateFor'];
}
static dateTimeConversion(String date, String time) {
return DateFormat('DD MMM yyyy hh:mm').parse("$date $time").millisecondsSinceEpoch;
static String getDhuhrData(dynamic json) {
return (json['dhuhr'] as String).contains('PM') ? json['dhuhr'] : json['dhuhr'] + ' PM';
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['fajr'] = fajr;
data['sunrise'] = sunrise;
data['dhuhr'] = dhuhr;
data['asr'] = asr;
data['sunset'] = sunset;
data['maghrib'] = maghrib;
data['isha'] = isha;
data['imsak'] = imsak;
data['midnight'] = midnight;
data['firstthird'] = firstthird;
data['lastthird'] = lastthird;
data['dateFor'] = dateFor;
return data;
static dateTimeConversion(String date, String time, {bool isForDhuhr = false}) {
if (isForDhuhr) {
return DateFormat('DD MMM yyyy hh:mm a').parse("$date $time").millisecondsSinceEpoch;
}
return DateFormat('DD MMM yyyy hh:mm').parse("$date $time").millisecondsSinceEpoch;
}
@override

@ -14,6 +14,7 @@ import 'package:queuing_system/core/response_models/prayers_widget_model.dart';
import 'package:queuing_system/core/response_models/rss_feed_model.dart';
import 'package:queuing_system/core/response_models/weathers_widget_model.dart';
import 'package:queuing_system/core/response_models/widgets_config_model.dart';
import 'package:queuing_system/main.dart';
import 'package:queuing_system/utils/call_by_voice.dart';
import 'package:queuing_system/utils/call_type.dart';
import 'package:queuing_system/utils/signalR_utils.dart';
@ -57,8 +58,8 @@ class AppProvider extends ChangeNotifier {
}
Future<void> onVoiceCompleted() async {
log("My Value is in setCompletionHandler: $isVoiceActualCompletedGlobally");
log("isQueuePatients.length in setCompletionHandler: ${isQueuePatients.length}");
logger.i("My Value is in setCompletionHandler: $isVoiceActualCompletedGlobally");
logger.i("isQueuePatients.length in setCompletionHandler: ${isQueuePatients.length}");
if (!isVoiceActualCompletedGlobally) {
return;
}
@ -86,13 +87,13 @@ class AppProvider extends ChangeNotifier {
);
}
log("here logg: ${isQueuePatients.length}");
logger.i("here logger.ig: ${isQueuePatients.length}");
if (isQueuePatients.isEmpty) {
isCallingInProgress = false;
}
if (isApiCallNeeded && isQueuePatients.isEmpty) {
log("Setting isCallingInProgress : $isCallingInProgress");
logger.i("Setting isCallingInProgress : $isCallingInProgress");
Timer(Duration(seconds: patientCallConfigurations.concurrentCallDelaySec), () async {
await callPatientsAPI();
isApiCallNeeded = false;
@ -134,7 +135,7 @@ class AppProvider extends ChangeNotifier {
Future<void> getInfoWidgetsConfigurationsFromServer() async {
WidgetsConfigModel? widgetsConfigModel = await API.getWidgetConfigsFromServer(currentDeviceIp, onFailure: (error) {
log("Api call failed with this error: ${error.toString()}");
logger.i("Api call failed with this error: ${error.toString()}");
});
if (widgetsConfigModel != null) currentWidgetsConfigModel = widgetsConfigModel;
@ -146,7 +147,7 @@ class AppProvider extends ChangeNotifier {
Future<void> getWeatherDetailsFromServer() async {
WeathersWidgetModel? weathersWidgetModel = await API.getWeatherDetailsFromServer(
(currentWidgetsConfigModel!.cityKey ?? "").toString(),
onFailure: (error) => log("Api call failed with this error: ${error.toString()}"),
onFailure: (error) => logger.i("Api call failed with this error: ${error.toString()}"),
);
if (weathersWidgetModel != null) {
@ -159,7 +160,7 @@ class AppProvider extends ChangeNotifier {
void getNextPrayerToShow() {
final current = DateTime.now();
log("Checking Namaz time Locally at ${current.toString()} and ${current.timeZoneName} ");
logger.i("Checking Namaz time Locally at ${current.toString()} and ${current.timeZoneName} ");
if (DateTime.fromMillisecondsSinceEpoch(currentPrayersWidgetModel.fajr!).isAfter(current)) {
final namazTime = DateFormat('hh:mm a').format(DateTime.fromMillisecondsSinceEpoch(currentPrayersWidgetModel.fajr!));
@ -197,13 +198,11 @@ class AppProvider extends ChangeNotifier {
Future<void> getPrayerDetailsFromServer() async {
PrayersWidgetModel? prayersWidgetModel = await API.getPrayerDetailsFromServer(
latitude: currentWidgetsConfigModel!.projectLatitude ?? 0,
longitude: currentWidgetsConfigModel!.projectLongitude ?? 0,
onFailure: (error) => log("Api call failed with this error: ${error.toString()}"));
latitude: currentWidgetsConfigModel!.projectLatitude ?? 0, longitude: currentWidgetsConfigModel!.projectLongitude ?? 0, onFailure: (error) => logger.i("Api call failed with this error: ${error.toString()}"));
if (prayersWidgetModel != null) {
currentPrayersWidgetModel = prayersWidgetModel;
log("I got this data from Prayers: ${prayersWidgetModel.toString()}");
logger.i("I got this data from Prayers: ${prayersWidgetModel.toString()}");
getNextPrayerToShow();
notifyListeners();
}
@ -212,11 +211,11 @@ class AppProvider extends ChangeNotifier {
RssFeedModel currentRssFeedModel = RssFeedModel();
Future<void> getRssFeedDetailsFromServer() async {
RssFeedModel? rssFeedModel = await API.getRssFeedDetailsFromServer(languageId: 0, onFailure: (error) => log("Api call failed with this error: ${error.toString()}"));
RssFeedModel? rssFeedModel = await API.getRssFeedDetailsFromServer(languageId: 0, onFailure: (error) => logger.i("Api call failed with this error: ${error.toString()}"));
if (rssFeedModel != null) {
currentRssFeedModel = rssFeedModel;
log("I got this data from RssFeed: ${currentRssFeedModel.rssFeed}");
logger.i("I got this data from RssFeed: ${currentRssFeedModel.rssFeed}");
notifyListeners();
}
}
@ -259,7 +258,7 @@ class AppProvider extends ChangeNotifier {
counter++;
log("counterValue: $counter");
logger.i("counterValue: $counter");
if (counter == 60 && currentWidgetsConfigModel!.isRssFeedReq!) {
await getRssFeedDetailsFromServer();
@ -299,7 +298,7 @@ class AppProvider extends ChangeNotifier {
}
Future<void> callPatientsAPI() async {
log("calling callPatientsAPI");
logger.i("calling callPatientsAPI");
patientTickets.clear();
API.getCallRequestInfoByClinicInfo(currentDeviceIp,
onSuccess: (waitingCalls, isQueuePatientsCalls, callConfigs) async {
@ -321,13 +320,13 @@ class AppProvider extends ChangeNotifier {
updatePatientTicket(patientTickets.first);
}
},
onFailure: (error) => log("Api call failed with this error: ${error.toString()}"));
onFailure: (error) => logger.i("Api call failed with this error: ${error.toString()}"));
}
onPingReceived(data) async {
log("A new Ping Received when isQueuePatients: ${isQueuePatients.length}");
log("isCallingInProgress from onPingReceived: $isCallingInProgress");
log("isApiCallNeeded: $isApiCallNeeded");
logger.i("A new Ping Received when isQueuePatients: ${isQueuePatients.length}");
logger.i("isCallingInProgress from onPingReceived: $isCallingInProgress");
logger.i("isApiCallNeeded: $isApiCallNeeded");
if (patientTickets.isNotEmpty) {
if (isCallingInProgress) {
isApiCallNeeded = true;
@ -372,16 +371,16 @@ class AppProvider extends ChangeNotifier {
// }
voiceCallPatientTicket(PatientTicketModel patientTicket, String calledFrom) async {
log("voiceCallPatientTicket calledFrom : $calledFrom");
logger.i("voiceCallPatientTicket calledFrom : $calledFrom");
currentPatient = patientTicket;
isCallingInProgress = true;
log("Setting isCallingInProgress : $isCallingInProgress");
logger.i("Setting isCallingInProgress : $isCallingInProgress");
log("isVoiceReq: ${patientTicket.isVoiceReq}");
log("voiceCaller: ${voiceCaller == null}");
log("isQueue: ${patientTicket.isQueue}");
log("isToneReq: ${patientTicket.isToneReq}");
logger.i("isVoiceReq: ${patientTicket.isVoiceReq}");
logger.i("voiceCaller: ${voiceCaller == null}");
logger.i("isQueue: ${patientTicket.isQueue}");
logger.i("isToneReq: ${patientTicket.isToneReq}");
if (patientTicket.isToneReq && !patientTicket.isQueue) {
audioPlayer.setAsset("assets/tones/call_tone.mp3");
@ -390,7 +389,7 @@ class AppProvider extends ChangeNotifier {
}
if (patientTicket.isVoiceReq && voiceCaller == null && !patientTicket.isQueue) {
log("patientTicket.voiceLanguage: ${patientTicket.voiceLanguage}");
logger.i("patientTicket.voiceLanguage: ${patientTicket.voiceLanguage}");
final postVoice = getCallTypeText(patientTicket);
voiceCaller = CallByVoice(
preVoice: patientTicket.ticketNoText,
@ -402,11 +401,11 @@ class AppProvider extends ChangeNotifier {
await voiceCaller!.startCalling(patientTicket.queueNo.trim().toString() != patientTicket.callNoStr.trim().toString()).whenComplete(() {
voiceCaller = null;
onVoiceCompleted();
log("Completed Calling!! ${isQueuePatients.length}");
logger.i("Completed Calling!! ${isQueuePatients.length}");
});
} else {
isCallingInProgress = false;
log("Setting isCallingInProgress : $isCallingInProgress");
logger.i("Setting isCallingInProgress : $isCallingInProgress");
if (isApiCallNeeded) {
Timer(Duration(seconds: patientCallConfigurations.concurrentCallDelaySec), () async {
await callPatientsAPI();
@ -419,7 +418,7 @@ class AppProvider extends ChangeNotifier {
Future<void> listenAudioPlayerEvents() async {
audioPlayer.playerStateStream.listen((playerState) async {
if (playerState.processingState == ProcessingState.completed) {
log("Tone Completed");
logger.i("Tone Completed");
if (currentPatient.isVoiceReq) {
isCallingInProgress = true;
@ -429,7 +428,7 @@ class AppProvider extends ChangeNotifier {
if (isQueuePatients.isNotEmpty) {
isCallingInProgress = true;
log("isQueuePatients.length 1: ${isQueuePatients.length}");
logger.i("isQueuePatients.length 1: ${isQueuePatients.length}");
// for (int i = 0; i < length; i++) {
await Future.delayed(Duration(seconds: patientCallConfigurations.concurrentCallDelaySec)).whenComplete(() async {
PatientTicketModel temp = PatientTicketModel();
@ -445,7 +444,7 @@ class AppProvider extends ChangeNotifier {
patientTickets.add(temp);
}
notifyListeners();
log("isQueuePatients.length 2: ${isQueuePatients.length}");
logger.i("isQueuePatients.length 2: ${isQueuePatients.length}");
if (isQueuePatients.isNotEmpty) {
await voiceCallPatientTicket(patientTickets.first, "listenAudioPlayerEvents");
@ -458,7 +457,7 @@ class AppProvider extends ChangeNotifier {
isCallingInProgress = false;
}
if (isApiCallNeeded && isQueuePatients.isEmpty) {
log("Setting isCallingInProgress : $isCallingInProgress");
logger.i("Setting isCallingInProgress : $isCallingInProgress");
Timer(Duration(seconds: patientCallConfigurations.concurrentCallDelaySec), () async {
await callPatientsAPI();
isApiCallNeeded = false;
@ -472,9 +471,9 @@ class AppProvider extends ChangeNotifier {
// if (patientTickets.isNotEmpty) {
// List<Tickets> _ticketsToUpdate = patientTickets.where((t) => t.callUpdated == false).toList();
// API.callUpdateNotIsQueueRecordByIDAsync(currentDeviceIp, ticket: _ticketsToUpdate.first, onSuccess: (ticketsUpdated) {
// log("[${ticketsUpdated.length}] Tickets Updated: $ticketsUpdated");
// logger.i("[${ticketsUpdated.length}] Tickets Updated: $ticketsUpdated");
// }, onFailure: (e) {
// log(" Tickets Update Failed with : ${e.toString()}");
// logger.i(" Tickets Update Failed with : ${e.toString()}");
// });
// }
// }
@ -482,24 +481,24 @@ class AppProvider extends ChangeNotifier {
updatePatientTicket(PatientTicketModel patientTicket) {
if (!patientTicket.isQueue) {
API.callUpdateNotIsQueueRecordByIDAsync(currentDeviceIp, ticket: patientTicket, onSuccess: (ticketsUpdated) {
log("[${patientTicket.callNoStr}] Ticket Updated: $ticketsUpdated");
logger.i("[${patientTicket.callNoStr}] Ticket Updated: $ticketsUpdated");
}, onFailure: (e) {
log(" Tickets Update ${patientTicket.callNoStr} Failed with Error : ${e.toString()}");
logger.i(" Tickets Update ${patientTicket.callNoStr} Failed with Error : ${e.toString()}");
});
}
}
onConnect() {
log("SignalR: onConnect");
logger.i("SignalR: onConnect");
}
onDisconnect(exception) {
log("SignalR: onDisconnect");
signalRHelper.startSignalRConnection(currentDeviceIp, onUpdateAvailable: onPingReceived, onConnect: onConnect, onConnecting: onConnecting, onDisconnect: onDisconnect);
logger.i("SignalR: onDisconnect");
signalRHelper.startSignalRConnection(currentDeviceIp, onUpdateAvailable: onPingReceived, onConnect: onConnect, onConnecting: onConnecting, onDisconnect: onDisconnect,);
}
onConnecting() {
log("SignalR: onConnecting");
logger.i("SignalR: onConnecting");
}
listenNetworkConnectivity() async {

@ -3,14 +3,21 @@ import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:logger/logger.dart';
import 'package:provider/provider.dart';
import 'package:queuing_system/core/api.dart';
import 'package:queuing_system/home/app_provider.dart';
import 'package:wakelock/wakelock.dart';
import 'core/config/size_config.dart';
import 'home/home_screen.dart';
// import 'home/home_screen_bkp.dart';
Logger logger = Logger(
level: Level.debug,
printer: PrettyPrinter(
printEmojis: false,
colors: true,
printTime: false,
));
void main() {
//TODO: WE HAVE TO UPDATE THIS BEFORE GOING LIVE.

@ -1,9 +1,9 @@
import 'dart:developer';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:http/io_client.dart';
import 'package:queuing_system/core/config/config.dart';
import 'package:queuing_system/main.dart';
import 'package:signalr_core/signalr_core.dart';
/*
@ -26,10 +26,14 @@ class SignalRHelper {
// "https://VCallApi.hmg.com/WebRTCHub?source=mobile&username=2001273";
HubConnection? connection;
startSignalRConnection(String deviceIp,
{required Function(dynamic) onUpdateAvailable, required VoidCallback onConnect, required Function(dynamic) onDisconnect, required VoidCallback onConnecting}) async {
log("Connecting Signal R with: $deviceIp");
startSignalRConnection(
String deviceIp, {
required Function(dynamic) onUpdateAvailable,
required VoidCallback onConnect,
required Function(dynamic) onDisconnect,
required VoidCallback onConnecting,
}) async {
logger.i("Connecting Signal R with: $deviceIp");
final url = hubBaseURL + "?IPAddress=$deviceIp";
// final url = hubBaseURL;
connection = HubConnectionBuilder()
@ -40,12 +44,14 @@ class SignalRHelper {
// transport: HttpTransportType.webSockets,
logging: (level, message) => log(message),
))
.withAutomaticReconnect()
.build();
connection!.serverTimeoutInMilliseconds = 120000;
connection!.onclose(onDisconnect);
connection!.onreconnecting((exception) => onConnecting());
connection!.onreconnected((connectionId) => onConnect());
connection!.onreconnected((connectionId) => onConnect());
connection!.on('addChatMessage', (message) => onUpdateAvailable(message));
@ -58,7 +64,7 @@ class SignalRHelper {
bool getConnectionState() {
if (connection == null) return false;
log("connectionState: ${connection!.state}");
logger.i("connectionState: ${connection!.state}");
if (connection!.state == HubConnectionState.connected || connection!.state == HubConnectionState.connecting) return true;
if (connection!.state == HubConnectionState.disconnected || connection!.state == HubConnectionState.disconnecting) return false;
return false;

@ -40,14 +40,15 @@ dependencies:
http: ^0.13.0
blinking_text: ^1.0.2
just_audio: 0.9.31
# flutter_tts: 3.6.3
flutter_tts: ^4.0.2
flutter_tts: 3.6.3
# flutter_tts: ^4.0.2
wakelock: ^0.6.2
shared_preferences: ^2.2.1
#signalr core
signalr_core: ^1.1.1
intl: ^0.18.1
marquee: ^2.2.3
logger: ^2.4.0

Loading…
Cancel
Save