refactor: log

release/mobdr-v0.0.1
Frédérik Benoist 2023-06-04 17:38:37 +02:00
parent 65b477d648
commit c1fe31f547
10 changed files with 156 additions and 48 deletions

View File

@ -46,13 +46,15 @@ Future<void> main() async {
// initialize directories
await directories().initDirectories();
/// tracker analytics
/// initialize tracker plausible analytics
await PlausibleUtil.initializePlausible(window.physicalSize.width);
// url MP4
SharedPrefs().urlMP4 =
'https://mp4.ikksgroup.com/MobilePortal4/index.html#ajax/dashboard.html';
// track MobBR
LoggerUtil.dblog('LOG', 'MOBDR', 'Ouverture application', 0);
PlausibleUtil.addEvent(
name: 'access',
page: 'access',
@ -61,8 +63,6 @@ Future<void> main() async {
'name': SharedPrefs().login,
});
LoggerUtil.dblog('LOG', 'MOBDR', 'Ouverture application ', 0);
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp])
.then((_) {
/// pour wakelock

View File

@ -40,7 +40,7 @@ class VisitModel {
id: visite.id,
id_visite: visite.id_visite,
name: visite.id_etab.toString() + ' - ' + visite.title,
photoCount: objectbox.getVisitPhotoCount(visite.id_visite),
photoCount: objectbox.getVisitPhotoTaken(visite.id_visite),
date: DateFormat('EEEE d MMMM HH:mm', 'fr_FR')
.format(visite.date_visite),
image: visite.url_photo_principale,
@ -65,7 +65,7 @@ class VisitModel {
id: visite.id,
id_visite: visite.id_visite,
name: visite.id_etab.toString() + ' - ' + visite.title,
photoCount: objectbox.getVisitPhotoCount(visite.id_visite),
photoCount: objectbox.getVisitPhotoTaken(visite.id_visite),
date: DateFormat('EEEE d MMMM HH:mm', 'fr_FR')
.format(visite.date_visite),
image: visite.url_photo_principale,
@ -90,7 +90,7 @@ class VisitModel {
id: visite.id,
id_visite: visite.id_visite,
name: visite.id_etab.toString() + ' - ' + visite.title,
photoCount: objectbox.getVisitPhotoCount(visite.id_visite),
photoCount: objectbox.getVisitPhotoTaken(visite.id_visite),
date: DateFormat('EEEE d MMMM HH:mm', 'fr_FR')
.format(visite.date_visite),
image: visite.url_photo_principale,

View File

@ -357,7 +357,7 @@ class ObjectBox {
final visits = getAllVisit();
for (final visit in visits) {
final photoCount = getVisitPhotoCount(visit.id_visite);
final photoCount = getVisitPhotoTaken(visit.id_visite);
if (photoCount == 0) {
// Delete the visit
@ -366,7 +366,7 @@ class ObjectBox {
}
}
/// Removes a Visito object from the ObjectBox database with the specified ID.
/// Removes a Visit object from the ObjectBox database with the specified ID.
///
/// Parameters:
/// id: The ID of the Visit object to remove.
@ -557,7 +557,7 @@ class ObjectBox {
}
}
int getVisitPhotoCount(int _id_visite) {
int getVisitPhotoTaken(int _id_visite) {
final builder =
visitPhotoBox.query(VisitPhoto_.id_visite.equals(_id_visite)).build();
return builder.count();
@ -619,6 +619,10 @@ class ObjectBox {
}
}
int getVisitPhotoCount() {
return visitPhotoBox.count();
}
/* remettre les principal à zero
final queryBuilder = box.query(VisitPhoto_.Visit_id.equals(idVisite) & VisitPhoto_.photo_principale.equals(1));
final updatedPhotos = queryBuilder.build().find();
@ -719,4 +723,8 @@ class ObjectBox {
// Map it to a list of notes to be used by a StreamBuilder.
.map((query) => query.find());
}
int getLogCount() {
return logBox.count();
}
}

View File

@ -14,44 +14,58 @@ class _LogPageState extends State<LogPage> {
final _reusableWidget = ReusableWidget();
Widget Function(BuildContext, int) _itemBuilder(List<Log> logs) =>
(BuildContext context, int index) => Row(
children: <Widget>[
Expanded(
child: Container(
decoration: const BoxDecoration(
border: Border(bottom: BorderSide(color: Colors.black12)),
),
child: Padding(
padding: const EdgeInsets.symmetric(
vertical: 18.0,
horizontal: 10.0,
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
logs[index].libelle,
style: const TextStyle(
fontSize: 15.0,
),
// Provide a Key for the integration test
key: Key('list_log_$index'),
),
Padding(
padding: const EdgeInsets.only(top: 5.0),
child: Text(
'Added on ${logs[index].dateFormat}',
style: const TextStyle(
fontSize: 12.0,
),
),
),
],
),
),
),
(BuildContext context, int index) => Container(
margin: const EdgeInsets.symmetric(horizontal: 0.0),
decoration: const BoxDecoration(
border: Border(bottom: BorderSide(color: Colors.black12)),
),
child: Padding(
padding: const EdgeInsets.symmetric(
vertical: 12.0,
horizontal: 0.0,
),
],
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Row(
children: <Widget>[
if (logs[index].type == 'LOG')
Icon(Icons.info, color: Colors.blue),
if (logs[index].type == 'ERR')
Icon(Icons.error, color: Colors.red),
SizedBox(width: 10.0),
Text(
logs[index].libelle,
style: const TextStyle(
fontSize: 15.0,
),
// Provide a Key for the integration test
key: Key('list_log_$index'),
),
],
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Text(
'Added on ${logs[index].dateFormat}',
style: const TextStyle(
fontSize: 12.0,
),
),
if (logs[index].duree > 0)
Row(
children: <Widget>[
Icon(Icons.timer),
SizedBox(width: 5.0),
Text('${logs[index].duree} ms'),
],
),
],
),
],
),
),
);
@override

View File

@ -1,9 +1,11 @@
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:mobdr/config/constant.dart';
import 'package:mobdr/config/global_style.dart';
import 'package:mobdr/ui/reusable/reusable_widget.dart';
import 'package:flutter/material.dart';
import 'package:mobdr/service/plausible.dart';
import 'package:mobdr/service/logger_util.dart';
class NotificationPage extends StatefulWidget {
@override
@ -17,6 +19,11 @@ class _NotificationPageState extends State<NotificationPage> {
@override
void initState() {
super.initState();
// track & log page access
final page = 'notification';
LoggerUtil.dblog('LOG', 'MOBDR', 'Page : ${page}', 0);
PlausibleUtil.addEvent(name: 'pageview', page: page);
}
@override

View File

@ -10,6 +10,7 @@ import 'package:mobdr/ui/sync/tab_synchro.dart';
import 'package:mobdr/config/constant.dart';
import 'package:mobdr/events.dart';
import 'package:mobdr/service/plausible.dart';
import 'package:mobdr/service/logger_util.dart';
class HomePage extends StatefulWidget {
@override
@ -159,6 +160,7 @@ class _HomePageState extends State<HomePage>
break;
}
LoggerUtil.dblog('LOG', 'MOBDR', 'Page : ${page}', 0);
PlausibleUtil.addEvent(name: 'pageview', page: page);
}
}

View File

@ -10,6 +10,7 @@ import 'package:mobdr/ui/reusable/reusable_widget.dart';
import 'package:mobdr/service/shared_prefs.dart';
import 'package:mobdr/network/api_provider.dart';
import 'package:mobdr/db/box_visit_photo.dart';
import 'package:mobdr/service/logger_util.dart';
class SynchronizationPage extends StatefulWidget {
@override
@ -56,11 +57,16 @@ class _SynchronizationPageState extends State<SynchronizationPage>
// if no internet connection
if (connectivityResult == ConnectivityResult.none) {
// log tracker
LoggerUtil.dblog('ERR', 'MOBDR', 'Pas de connexion internet', 0);
setState(() {
_isInternetConnexion = false;
});
} else {
_isInternetConnexion = true;
// synchronization start
startSync();
}
}
@ -194,6 +200,8 @@ class _SynchronizationPageState extends State<SynchronizationPage>
// disable navigation bar buttons
eventBus.fire(SynchronizationEvent(true));
Stopwatch stopwatch = Stopwatch()..start();
setState(() {
_isSyncing = true;
_syncCompleted = false;
@ -206,6 +214,16 @@ class _SynchronizationPageState extends State<SynchronizationPage>
final ApiProvider _apiProvider = ApiProvider();
// log tracker
LoggerUtil.dblog('LOG', 'MOBDR',
'Nombre Photo(s): ' + objectbox.getVisitPhotoCount().toString(), 0);
if (_syncLog) {
// log tracker
LoggerUtil.dblog('LOG', 'MOBDR',
'Nombre Log(s): ' + objectbox.getLogCount().toString(), 0);
}
// upload photo to server
await _uploadVisitPhotos(_apiProvider);
@ -248,6 +266,12 @@ class _SynchronizationPageState extends State<SynchronizationPage>
_animationController.stop();
stopwatch.stop();
// log tracker
LoggerUtil.dblog('LOG', 'MOBDR', 'Synchronisation données',
stopwatch.elapsedMilliseconds);
// enable navigation bar buttons
eventBus.fire(SynchronizationEvent(false));
}

View File

@ -8,6 +8,8 @@ import 'package:mobdr/db/box_photo_typology.dart';
import 'package:mobdr/model/visit_model.dart';
import 'package:mobdr/ui/visit/visit_photo_typology_list.dart';
import 'package:mobdr/ui/reusable/reusable_widget.dart';
import 'package:mobdr/service/plausible.dart';
import 'package:mobdr/service/logger_util.dart';
class VisitPhotoTypologyPage extends StatefulWidget {
final VisitModel pp_visitModel;
@ -104,6 +106,11 @@ class _VisitPhotoTypologyPageState extends State<VisitPhotoTypologyPage> {
@override
void initState() {
super.initState();
// track & log page access
final page = 'visit_photo_typology';
LoggerUtil.dblog('LOG', 'MOBDR', 'Page : ${page}', 0);
PlausibleUtil.addEvent(name: 'pageview', page: page);
}
@override

View File

@ -15,6 +15,8 @@ import 'package:mobdr/db/box_visit_photo.dart';
import 'package:mobdr/db/box_photo_typology.dart';
import 'package:mobdr/db/box_photo_competitor.dart';
import 'package:mobdr/model/visit_model.dart';
import 'package:mobdr/service/plausible.dart';
import 'package:mobdr/service/logger_util.dart';
class VisitPhotoTypologyDetailPage extends StatefulWidget {
final VisitModel pp_visitModel;
@ -60,6 +62,11 @@ class _VisitPhotoTypologyDetailPageState
void initState() {
super.initState();
// track & log page access
final page = 'visit_photo_typology_detail';
LoggerUtil.dblog('LOG', 'MOBDR', 'Page : ${page}', 0);
PlausibleUtil.addEvent(name: 'pageview', page: page);
loadData(widget.pp_imageId).then((_) {
setState(() {
_isLoading = false;
@ -160,10 +167,18 @@ class _VisitPhotoTypologyDetailPageState
bool isSaved =
await saveImageToGallery(widget.pp_image);
if (isSaved) {
// log tracker
LoggerUtil.dblog(
'LOG', 'MOBDR', 'Copier dans galerie', 0);
Fluttertoast.showToast(
msg: 'Photo has been added to gallery',
toastLength: Toast.LENGTH_LONG);
} else {
// log tracker
LoggerUtil.dblog('ERR', 'MOBDR',
'Erreur copier dans galerie', 0);
Fluttertoast.showToast(
msg: 'Error while copying!',
toastLength: Toast.LENGTH_LONG);

View File

@ -23,6 +23,8 @@ import 'package:mobdr/ui/visit/photo_camera.dart';
import 'package:mobdr/ui/visit/visit_photo_typology_detail.dart';
import 'package:mobdr/ui/reusable/reusable_widget.dart';
import 'package:mobdr/events.dart';
import 'package:mobdr/service/plausible.dart';
import 'package:mobdr/service/logger_util.dart';
extension FileNameExtension on File {
String getFileName() {
@ -66,6 +68,12 @@ class _VisitPhotoTypologyListPageState
@override
void initState() {
super.initState();
// track & log page access
final page = 'visit_photo_typology_list';
LoggerUtil.dblog('LOG', 'MOBDR', 'Page : ${page}', 0);
PlausibleUtil.addEvent(name: 'pageview', page: page);
loadData();
}
@ -305,11 +313,21 @@ class _VisitPhotoTypologyListPageState
GestureDetector(
behavior: HitTestBehavior.translucent,
onTap: () async {
Stopwatch stopwatch = Stopwatch()..start();
await rotateAndReplaceImage(
File(_visitPhotoData[index].getImage()), 90);
stopwatch.stop();
// log tracker
LoggerUtil.dblog('LOG', 'MOBDR', 'Rotation 90',
stopwatch.elapsedMilliseconds);
setState(() {
_listKey = GlobalKey();
});
Fluttertoast.showToast(
msg: 'The image has been rotated');
},
@ -331,11 +349,21 @@ class _VisitPhotoTypologyListPageState
GestureDetector(
behavior: HitTestBehavior.translucent,
onTap: () async {
Stopwatch stopwatch = Stopwatch()..start();
await rotateAndReplaceImage(
File(_visitPhotoData[index].getImage()), -90);
stopwatch.stop();
// track rotation speed
LoggerUtil.dblog('LOG', 'MOBDR', 'Rotation -90',
stopwatch.elapsedMilliseconds);
setState(() {
_listKey = GlobalKey();
});
Fluttertoast.showToast(
msg: 'The image has been rotated');
},
@ -369,7 +397,7 @@ class _VisitPhotoTypologyListPageState
// number of photos of the visit
visitPhotoCount =
objectbox.getVisitPhotoCount(widget.pp_visitModel.id_visite);
objectbox.getVisitPhotoTaken(widget.pp_visitModel.id_visite);
}
/// Removes the image at the specified [imageURL] from the cache of the [NetworkImage] provider.
@ -480,6 +508,9 @@ class _VisitPhotoTypologyListPageState
Navigator.pop(context);
// track delete
LoggerUtil.dblog('LOG', 'MOBDR', 'Suppression photo', 0);
Fluttertoast.showToast(
msg: 'Photo has been deleted from your visit',
toastLength: Toast.LENGTH_SHORT);