Files
Siro/refactor_controller.py
2026-06-11 18:22:59 +03:00

134 lines
6.6 KiB
Python

import sys
import re
def refactor_controller(filepath):
with open(filepath, 'r') as f:
content = f.read()
# 1. Change double to String for pricing variables
content = re.sub(r'double totalPassengerSpeed = 0;', "String totalPassengerSpeed = '0';", content)
content = re.sub(r'double totalPassengerBalash = 0;', "String totalPassengerBalash = '0';", content)
content = re.sub(r'double totalPassengerComfort = 0;', "String totalPassengerComfort = '0';", content)
content = re.sub(r'double totalPassengerElectric = 0;', "String totalPassengerElectric = '0';", content)
content = re.sub(r'double totalPassengerLady = 0;', "String totalPassengerLady = '0';", content)
content = re.sub(r'double totalPassengerScooter = 0;', "String totalPassengerScooter = '0';", content)
content = re.sub(r'double totalPassengerVan = 0;', "String totalPassengerVan = '0';", content)
content = re.sub(r'double totalPassengerRayehGai = 0;', "String totalPassengerRayehGai = '0';", content)
content = re.sub(r'double totalPassengerRayehGaiComfort = 0;', "String totalPassengerRayehGaiComfort = '0';", content)
content = re.sub(r'double totalPassengerRayehGaiBalash = 0;', "String totalPassengerRayehGaiBalash = '0';", content)
content = re.sub(r'double totalPassenger = 0;', "String totalPassenger = '0';", content)
content = re.sub(r'double totalCostPassenger = 0;', "String totalCostPassenger = '0';", content)
# 2. Replace bottomSheet method
bottom_sheet_pattern = re.compile(r'Future bottomSheet\(\) async \{.*?(?=update\(\);\n\s*mapEngine\.changeBottomSheetShown\(forceValue: true\);\n\s*\})', re.DOTALL)
new_bottom_sheet = '''Future bottomSheet() async {
durationToAdd = Duration(seconds: durationToRide);
hours = durationToAdd.inHours;
minutes = (durationToAdd.inMinutes % 60).round();
final DateTime currentTime = DateTime.now();
newTime = currentTime.add(durationToAdd);
try {
final res = await CRUD().post(link: AppLink.getPrices, payload: {
'distance': distance.toString(),
'durationToRide': durationToRide.toString(),
'startNameAddress': startNameAddress,
'endNameAddress': endNameAddress,
'destLat': myDestination.latitude.toString(),
'destLng': myDestination.longitude.toString(),
'passengerLat': newMyLocation.latitude.toString(),
'passengerLng': newMyLocation.longitude.toString(),
'walletVal': box.read(BoxName.passengerWalletTotal)?.toString() ?? '0',
'activeMenuWaypointCount': activeMenuWaypointCount.toString(),
});
if (res != 'failure') {
var response = jsonDecode(res);
if (response['status'] == 'success') {
var data = response['data'];
totalPassengerSpeed = data['totalPassengerSpeed']?.toString() ?? '0';
totalPassengerBalash = data['totalPassengerBalash']?.toString() ?? '0';
totalPassengerComfort = data['totalPassengerComfort']?.toString() ?? '0';
totalPassengerElectric = data['totalPassengerElectric']?.toString() ?? '0';
totalPassengerLady = data['totalPassengerLady']?.toString() ?? '0';
totalPassengerScooter = data['totalPassengerScooter']?.toString() ?? '0';
totalPassengerVan = data['totalPassengerVan']?.toString() ?? '0';
totalPassengerRayehGai = data['totalPassengerRayehGai']?.toString() ?? '0';
totalPassengerRayehGaiComfort = data['totalPassengerRayehGaiComfort']?.toString() ?? '0';
totalPassengerRayehGaiBalash = data['totalPassengerRayehGaiBalash']?.toString() ?? '0';
totalPassenger = totalPassengerSpeed;
totalCostPassenger = totalPassenger;
}
}
} catch (e) {
Log.print("Error fetching prices: $e");
}
'''
content = bottom_sheet_pattern.sub(new_bottom_sheet, content)
# 3. Replace applyPromoCodeToPassenger
promo_pattern = re.compile(r'void applyPromoCodeToPassenger\(BuildContext context\) async \{.*?(?=Get\.back\(\);\n\s*await Future\.delayed\(const Duration\(milliseconds: 120\)\);\n\s*\} catch \(e\) \{)', re.DOTALL)
new_promo = '''void applyPromoCodeToPassenger(BuildContext context) async {
if (promoTaken == true) {
MyDialog().getDialog('Promo Already Used'.tr, 'You have already used this promo code.'.tr, () => Get.back());
return;
}
if (!promoFormKey.currentState!.validate()) return;
try {
final res = await CRUD().post(link: AppLink.getPrices, payload: {
'distance': distance.toString(),
'durationToRide': durationToRide.toString(),
'startNameAddress': startNameAddress,
'endNameAddress': endNameAddress,
'destLat': myDestination.latitude.toString(),
'destLng': myDestination.longitude.toString(),
'passengerLat': newMyLocation.latitude.toString(),
'passengerLng': newMyLocation.longitude.toString(),
'walletVal': box.read(BoxName.passengerWalletTotal)?.toString() ?? '0',
'activeMenuWaypointCount': activeMenuWaypointCount.toString(),
'promo_code': promo.text,
});
if (res != 'failure') {
var response = jsonDecode(res);
if (response['status'] == 'success') {
var data = response['data'];
totalPassengerSpeed = data['totalPassengerSpeed']?.toString() ?? '0';
totalPassengerBalash = data['totalPassengerBalash']?.toString() ?? '0';
totalPassengerComfort = data['totalPassengerComfort']?.toString() ?? '0';
totalPassengerElectric = data['totalPassengerElectric']?.toString() ?? '0';
totalPassengerLady = data['totalPassengerLady']?.toString() ?? '0';
totalPassengerScooter = data['totalPassengerScooter']?.toString() ?? '0';
totalPassengerVan = data['totalPassengerVan']?.toString() ?? '0';
totalPassengerRayehGai = data['totalPassengerRayehGai']?.toString() ?? '0';
totalPassengerRayehGaiComfort = data['totalPassengerRayehGaiComfort']?.toString() ?? '0';
totalPassengerRayehGaiBalash = data['totalPassengerRayehGaiBalash']?.toString() ?? '0';
promoTaken = true;
update();
Confetti.launch(
context,
options: const ConfettiOptions(particleCount: 100, spread: 70, y: 0.6),
);
} else {
MyDialog().getDialog('Promo Error'.tr, response['message']?.toString() ?? 'Invalid Promo'.tr, () => Get.back());
return;
}
}
'''
content = promo_pattern.sub(new_promo, content)
with open(filepath, 'w') as f:
f.write(content)
print(f"Refactored {filepath}")
if __name__ == '__main__':
refactor_controller(sys.argv[1])