diff --git a/covas_mobile/lib/classes/descriptionImage.dart b/covas_mobile/lib/classes/descriptionImage.dart index fdd6710..f55f3ce 100644 --- a/covas_mobile/lib/classes/descriptionImage.dart +++ b/covas_mobile/lib/classes/descriptionImage.dart @@ -1,21 +1,59 @@ import 'package:flutter/material.dart'; +import 'events.dart'; +import '../variable/globals.dart' as globals; +import 'package:http/http.dart' as http; +import 'dart:io'; +import 'dart:convert'; + +import 'package:shared_preferences/shared_preferences.dart'; mixin ShowDescImageAdd on State { - void showDescImageAddDialog(BuildContext context, String text) { + Future addEvents(var events) async { + SharedPreferences prefs = await SharedPreferences.getInstance(); + var accessToken = prefs.getString("access_token") ?? ""; + List send = ["toto"]; + + if (accessToken.isNotEmpty) { + var urlPut = Uri.parse("${globals.api}/events"); + print("start date : ${events["start_date"]}"); + var responsePut = await http.put(urlPut, + headers: { + HttpHeaders.cookieHeader: 'access_token=${accessToken}', + HttpHeaders.acceptHeader: 'application/json, text/plain, */*', + HttpHeaders.contentTypeHeader: 'application/json' + }, + body: jsonEncode({ + 'name': events["name"], + 'place': events["place"], + 'start_date': events['date'], + 'end_date': events['date'], + 'organizers': send, + 'latitude': '0.0', + 'longitude': '0.0', + })); + + print("http put code status : ${responsePut.statusCode}"); + print("http put body : ${responsePut.body}"); + } + } + + void showDescImageAddDialog(BuildContext context, var events) { // Create AlertDialog + String name = events['name']; AlertDialog dialog = AlertDialog( - title: Text("Description image"), - content: Text(text), + title: Text("Ajouter un evenement"), + content: Text("${name} n'a pas été trouvé. Voulez-vous l'ajouter ? "), actions: [ - ElevatedButton( - child: Text("OK"), - style: ElevatedButton.styleFrom( - padding: EdgeInsets.symmetric(horizontal: 50, vertical: 20), - textStyle: - TextStyle(fontSize: 15, fontWeight: FontWeight.normal)), + TextButton( + child: Text("Annuler"), onPressed: () { Navigator.of(context).pop("Yes, Of course!"); // Return value }), + TextButton( + child: Text("Oui"), + onPressed: () { + addEvents(events); // Return value + }), ], ); diff --git a/covas_mobile/lib/pages/DisplayPictureScreen.dart b/covas_mobile/lib/pages/DisplayPictureScreen.dart index 62007b4..64a7e58 100644 --- a/covas_mobile/lib/pages/DisplayPictureScreen.dart +++ b/covas_mobile/lib/pages/DisplayPictureScreen.dart @@ -4,6 +4,12 @@ import '../classes/descriptionImage.dart'; import '../classes/alert.dart'; import 'package:flutter_dotenv/flutter_dotenv.dart'; import 'package:flutter_gemini/flutter_gemini.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:http/http.dart' as http; + +import 'dart:convert'; + +import '../variable/globals.dart' as globals; void main() { runApp(MyApp()); @@ -60,6 +66,34 @@ class DisplayPictureScreenState extends State "L'IA de Google n'a pas su analyser l'image. Recommecer avec une autre"); } + Future searchEvents(String json) async { + print(json); + SharedPreferences prefs = await SharedPreferences.getInstance(); + + Map jsonData = jsonDecode(json); + var name = jsonData["name"]; + var place = jsonData["place"]; + var accessToken = prefs.getString("access_token") ?? ""; + + if (accessToken.isNotEmpty) { + var urlGet = Uri.parse("${globals.api}/events?name=${name}"); + + var responseGet = await http.get(urlGet, + headers: {HttpHeaders.cookieHeader: 'access_token=${accessToken}'}); + if (responseGet.statusCode == 200) { + var events = jsonDecode(utf8.decode(responseGet.bodyBytes)); + print("reponse http : ${events.length}"); + if (events.length == 0) { + showDescImageAddDialog(context, jsonData); + } + } + } else { + showErrorDialog(context, "Erreur de token"); + } + + //showDescImageAddDialog(context, message); + } + Future _getEventInfosFromImage() async { await dotenv.load(); @@ -71,11 +105,10 @@ class DisplayPictureScreenState extends State gemini .textAndImage( text: - "Peux-tu donner le nom, la date et le lieu de l'évènement sous format JSON avec les valeurs suivantes : name, place et date", + "Peux-tu donner le nom, la date et le lieu de l'évènement sous format JSON avec les valeurs suivantes : name, place et date avec le format suivant YYYY-MM-ddTTHH:mm, et sans la présence de json dans la chaîne de caractère", images: [file.readAsBytesSync()], modelName: "models/gemini-1.5-flash-latest") - .then((value) => showDescImageAddDialog( - context, value?.content?.parts?.last.text ?? '')) + .then((value) => searchEvents(value?.content?.parts?.last.text ?? '')) .catchError((e) => displayError); }