refactor: log
parent
65b477d648
commit
c1fe31f547
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue