import 'dart:io'; import 'package:get/get.dart'; import 'package:http/http.dart' as http; import 'package:intl/intl.dart'; import 'package:rogapp/model/rog.dart'; import 'package:rogapp/pages/destination/destination_controller.dart'; import 'package:rogapp/pages/index/index_controller.dart'; import 'package:rogapp/utils/database_helper.dart'; import 'dart:convert'; import '../utils/const.dart'; // // Rog type 0- start 1- checkin 2- goal // class ExternalService { static final ExternalService _instance = ExternalService._internal(); factory ExternalService(){ return _instance; } ExternalService._internal(); String getFormatedTime(DateTime datetime){ return DateFormat('yyyy-MM-dd HH:mm:ss').format(datetime); } Future> StartRogaining() async { final IndexController indexController = Get.find(); Map _res = {}; int userId = indexController.currentUser[0]["user"]["id"]; //print("--- Pressed -----"); String _team = indexController.currentUser[0]["user"]['team_name']; //print("--- _team : ${_team}-----"); String _event_code = indexController.currentUser[0]["user"]["event_code"]; if(indexController.connectionStatusName != "wifi" && indexController.connectionStatusName != "mobile"){ DatabaseHelper db = DatabaseHelper.instance; Rog _rog = Rog( id:1, team_name: _team, event_code : _event_code, user_id: userId, cp_number: -1, checkintime: DateTime.now().toUtc().microsecondsSinceEpoch, image: null, rog_action_type: 0 ); db.insertRogaining(_rog); } else { String url = 'https://rogaining.sumasen.net/gifuroge/start_from_rogapp'; print('++++++++$url'); final http.Response response = await http.post( Uri.parse(url), headers: { 'Content-Type': 'application/json; charset=UTF-8', }, body: jsonEncode({ 'team_name': _team, 'event_code': _event_code }), ); print("---- start rogianing api status ---- ${response.statusCode}"); if (response.statusCode == 200) { _res = json.decode(utf8.decode(response.bodyBytes)); print('----_res : $_res ----'); } } return _res; } Future> makeCheckpoint(int userId, String token, String checkinTime, String teamname, int cp, String eventcode, String imageurl) async { print("~~~~ in API call function ~~~~"); print("~~~~ cp is ${cp} ~~~~"); //print("--cpcp-- ${cp}"); Map _res = {}; String url = 'https://rogaining.sumasen.net/gifuroge/checkin_from_rogapp'; print('++++++++$url'); final IndexController indexController = Get.find(); if(imageurl != null){ if(indexController.connectionStatusName != "wifi" && indexController.connectionStatusName != "mobile"){ DatabaseHelper db = DatabaseHelper.instance; Rog _rog = Rog( id:1, team_name: teamname, event_code : eventcode, user_id: userId, cp_number: cp, checkintime: DateTime.now().toUtc().microsecondsSinceEpoch, image: imageurl, rog_action_type: 1, ); db.insertRogaining(_rog); } else { String serverUrl = ConstValues.currentServer(); String url1 = "$serverUrl/api/checkinimage/"; final im1Bytes = File(imageurl).readAsBytesSync(); String im1_64 = base64Encode(im1Bytes); print("~~~~ before calling api 1 ~~~~"); final http.Response response = await http.post( Uri.parse(url1), headers: { 'Content-Type': 'application/json; charset=UTF-8', 'Authorization': 'Token $token' }, // 'id', 'user', 'goalimage', 'goaltime', 'team_name', 'event_code','cp_number' body: jsonEncode({ 'user' : userId.toString(), 'team_name': teamname, 'event_code': eventcode, 'checkinimage' : im1_64, 'checkintime' : checkinTime, 'cp_number' : cp.toString() }), ); _res = json.decode(utf8.decode(response.bodyBytes)); print("~~~~ api1 result ${_res} ~~~~"); //print("-----@@@@@ checkin $_res -----"); if(response.statusCode == 201){ print("~~~~ image from api1 ${_res["checkinimage"].toString()} ~~~~"); //print('---- toekn is ${token} -----'); print("~~~~ token is ${token} ~~~~"); print("~~~~ before callling api2 ~~~~"); final http.Response response2 = await http.post( Uri.parse(url), headers: { 'Content-Type': 'application/json; charset=UTF-8', }, body: jsonEncode({ 'team_name': teamname, 'cp_number': cp.toString(), 'event_code': eventcode, 'image': _res["checkinimage"].toString().replaceAll('http://localhost:8100', 'http://rogaining.sumasen.net') }), ); var vv = jsonEncode({ 'team_name': teamname, 'cp_number': cp.toString(), 'event_code': eventcode, 'image': _res["checkinimage"].toString().replaceAll('http://localhost:8100', 'http://rogaining.sumasen.net') }); print("~~~~ api 2 values ${vv} ~~~~"); //print("--json-- $vv"); //print("--- checnin response ${response2.statusCode}----"); if (response2.statusCode == 200) { _res = json.decode(utf8.decode(response2.bodyBytes)); print('----checkin res _res : $_res ----'); if(_res["status"] == "ERROR"){ Get.snackbar("エラーがおきました", _res["detail"]); } } } else{ Get.snackbar("エラーがおきました", "サーバーに更新できませんでした"); } } } else{ if(indexController.connectionStatusName != "wifi" || indexController.connectionStatusName != "mobile"){ DatabaseHelper db = DatabaseHelper.instance; Rog _rog = Rog( id:1, team_name: teamname, event_code : eventcode, user_id: userId, cp_number: cp, checkintime: DateTime.now().toUtc().microsecondsSinceEpoch, image: null, rog_action_type: 1, ); db.insertRogaining(_rog); } else { final http.Response response3 = await http.post( Uri.parse(url), headers: { 'Content-Type': 'application/json; charset=UTF-8', }, body: jsonEncode({ 'team_name': teamname, 'cp_number': cp.toString(), 'event_code': eventcode, 'image': "" }), ); var vvv = jsonEncode({ 'team_name': teamname, 'cp_number': cp.toString(), 'event_code': eventcode, 'image': _res["checkinimage"].toString().replaceAll('http://localhost:8100', 'http://rogaining.sumasen.net') }); print("--json-- $vvv"); print("--- checnin response ${response3.statusCode}----"); if (response3.statusCode == 200) { _res = json.decode(utf8.decode(response3.bodyBytes)); print('----checkin res _res : $_res ----'); } } } print("~~~~ done checkin ~~~~"); return _res; } Future> makeGoal(int userId, String token, String teamname, String image, String goalTime, String eventcode) async { Map _res2 = {}; final IndexController indexController = Get.find(); final DestinationController destinationController = Get.find(); //if(indexController.connectionStatusName != "wifi" && indexController.connectionStatusName != "mobile"){ DatabaseHelper db = DatabaseHelper.instance; Rog _rog = Rog( id:1, team_name: teamname, event_code : eventcode, user_id: userId, cp_number: -1, checkintime: DateTime.now().toUtc().microsecondsSinceEpoch, image: image, rog_action_type: 1, ); db.insertRogaining(_rog); // } // else{ String serverUrl = ConstValues.currentServer(); String url1 = "$serverUrl/api/goalimage/"; final im1Bytes = File(image).readAsBytesSync(); String im1_64 = base64Encode(im1Bytes); final http.Response response = await http.post( Uri.parse(url1), headers: { 'Content-Type': 'application/json; charset=UTF-8', 'Authorization': 'Token $token' }, // 'id', 'user', 'goalimage', 'goaltime', 'team_name', 'event_code','cp_number' body: jsonEncode({ 'user' : userId.toString(), 'team_name': teamname, 'event_code': eventcode, 'goaltime' : goalTime, 'goalimage' : im1_64, 'cp_number' : "-1" }), ); String url = 'https://rogaining.sumasen.net/gifuroge/goal_from_rogapp'; print('++++++++$url'); if (response.statusCode == 201) { Map _res = json.decode(utf8.decode(response.bodyBytes)); print('----_res : $_res ----'); print('---- image url ${_res["goalimage"]} ----'); final http.Response response2 = await http.post( Uri.parse(url), headers: { 'Content-Type': 'application/json; charset=UTF-8', }, body: jsonEncode({ 'team_name': teamname, 'event_code': eventcode, 'goal_time' : goalTime, 'image' : _res["goalimage"].toString().replaceAll('http://localhost:8100', 'http://rogaining.sumasen.net') } ), ); String rec = jsonEncode({ 'team_name': teamname, 'event_code': eventcode, 'goal_time' : goalTime, 'image' : _res["goalimage"].toString().replaceAll('http://localhost:8100', 'http://rogaining.sumasen.net') } ); print("-- json -- $rec"); print('----- response2 is $response2 --------'); if (response2.statusCode == 200) { _res2 = json.decode(utf8.decode(response2.bodyBytes)); } } //} destinationController.resetRogaining(); return _res2; } static Future> usersEventCode(String teamcode, String password) async { Map _res = {}; String url = "https://rogaining.sumasen.net/gifuroge/check_event_code?zekken_number=$teamcode&password=$password"; print('++++++++$url'); final http.Response response = await http.get( Uri.parse(url), headers: { 'Content-Type': 'application/json; charset=UTF-8', } ); if (response.statusCode == 200) { _res = json.decode(utf8.decode(response.bodyBytes)); } return _res; } }