diff --git a/images/token.png b/images/token.png new file mode 100644 index 0000000..44af3f8 Binary files /dev/null and b/images/token.png differ diff --git a/images/vault.png b/images/vault.png new file mode 100644 index 0000000..b55861d Binary files /dev/null and b/images/vault.png differ diff --git a/lib/Backend/Backend.dart b/lib/Backend/Backend.dart index ce938a2..b159f84 100644 --- a/lib/Backend/Backend.dart +++ b/lib/Backend/Backend.dart @@ -1,5 +1,6 @@ import 'dart:convert'; import 'dart:io'; +import 'dart:math'; import 'package:http/http.dart' as http; import 'package:mhunt_launcher/Backend/Structures.dart'; @@ -7,63 +8,68 @@ import 'package:path_provider/path_provider.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'DebugHelper.dart'; -class Backend{ +class Backend { static const String API_ENDPOINT = "https://vps.playpoolstudios.com/metahunt/api/launcher/"; + static const String SOLOGIN_ENDPOINT = "http://vps.playpoolstudios.com:20017/"; static List Games = [ - GameData(0,"mhunt","Metahunt", "High-Stake Battle Royale game with Play to earn abilities", "images/mhunt_thumbnail.png", true,"METAHUNT.exe"), - GameData(1,"pop3d","Pop3D", "a game I dont know much about xD", "images/pop3d_thumbnail.png", false, "pop3d.exe"), + GameData(0, "mhunt", "Metahunt", "High-Stake Battle Royale game with Play to earn abilities", "images/mhunt_thumbnail.png", true, "METAHUNT.exe"), + GameData(1, "pop3d", "Pop3D", "a game I dont know much about xD", "images/pop3d_thumbnail.png", false, "pop3d.exe"), ]; static SharedPreferences? prefs; static Directory? docPath; - static String Username=""; + static String Username = ""; static String displayName = ""; + static String walletAddress = ""; + static String pubKey = ""; - static Map UserJson = {'username':'test', 'passwd':'test123'}; + static Map UserJson = {'username': 'test', 'passwd': 'test123'}; - static Future Login(String username, String password) async{ + static Future Login(String username, String password) async { var loginResponse = null; init(); try { - loginResponse = (await http.post(Uri.parse('${API_ENDPOINT}login.php'), - body: {"username": username, "password": password})); - Debug.LogResponse(loginResponse.body.toString(),src: '${API_ENDPOINT}login.php'); + loginResponse = (await http.post(Uri.parse('${API_ENDPOINT}login.php'), body: {"username": username, "password": password})); + Debug.LogResponse(loginResponse.body.toString(), src: '${API_ENDPOINT}login.php'); + if(loginResponse.body.toString().contains("no user")){ + return false; + } try { - Username=username; + Username = username; SetUsernamePassword(username, password); return true; - } catch (e) { - } + } catch (e) {} } catch (e) { Debug.LogError("Error while login $e"); + return false; + } return false; } - static void init()async{ + static void init() async { prefs = await SharedPreferences.getInstance(); docPath = await getDownloadsDirectory(); } - static Future Register(String username, String password, String displayname) async{ + static Future Register(String username, String password, String displayname) async { var loginResponse = null; init(); try { - loginResponse = (await http.post(Uri.parse('${API_ENDPOINT}register.php'), - body: {"username": username, "password": password, "display_name": displayname})); - Debug.LogResponse(loginResponse.body.toString(),src: '${API_ENDPOINT}register.php'); + loginResponse = (await http.post(Uri.parse('${API_ENDPOINT}register.php'), body: {"username": username, "password": password, "display_name": displayname})); + Debug.LogResponse(loginResponse.body.toString(), src: '${API_ENDPOINT}register.php'); try { SetUsernamePassword(username, password); Username = username; - displayName=displayname; + Debug.Log("User is " + username); + displayName = displayname; return true; - } catch (e) { - } + } catch (e) {} } catch (e) { Debug.LogError("Error while login $e"); } @@ -71,44 +77,49 @@ class Backend{ return false; } - static void SetUsernamePassword(String username, String passwd){ - UserJson = {'username':username, 'passwd':passwd}; + static Future GetPubkey() async{ + var response = await http.get(Uri.parse('${SOLOGIN_ENDPOINT}getPubkey?email=${Username}')); + pubKey = jsonDecode(response.body.toString())["pub_key"]; + return pubKey; } - static Future> GetLeaderboard(String gameCode) async{ + static void SetUsernamePassword(String username, String passwd) { + UserJson = {'username': username, 'passwd': passwd}; + } + + static Future> GetLeaderboard(String gameCode) async { String url = '${API_ENDPOINT}/${gameCode}/get_leaderboard.php'; var leaderboardResponse = await http.get(Uri.parse(url)); return LeaderboardEntry.listFromJson(leaderboardResponse.body); } - static Future>> GetNewsForGame(int gameId)async{ + static Future>> GetNewsForGame(int gameId) async { String url = '${API_ENDPOINT}${Games[gameId].code}/get_news.php'; - try{ + try { var res = await http.get(Uri.parse(url)); List jsonList = jsonDecode(res.body); - List> output = []; + List> output = []; jsonList.forEach((element) { - output.add(element as Map); + output.add(element as Map); }); return output; - }catch(e){ + } catch (e) { Debug.LogError(e); } - + return [{}]; } - static Future> GetUserStatsForGame(int gameId) async{ + static Future> GetUserStatsForGame(int gameId) async { var loginResponse = null; init(); try { String url = '${API_ENDPOINT}${Games[gameId].code}/get_user_stats.php'; - loginResponse = (await http.post(Uri.parse(url), - body: {"username": prefs!.getString("username") ?? "test"})); - Debug.LogResponse(loginResponse.body.toString(),src: url); + loginResponse = (await http.post(Uri.parse(url), body: {"username": Username ?? "test"})); + Debug.LogResponse(loginResponse.body.toString(), src: url); return jsonDecode(loginResponse.body); } catch (e) { @@ -118,13 +129,13 @@ class Backend{ return {}; } - static Future CreateRequest() async{ + static Future CreateRequest() async { var loginResponse = null; try { String url = '${API_ENDPOINT}create_request.php'; loginResponse = await http.get(Uri.parse(url)); - Debug.LogResponse(loginResponse.body.toString(),src: url); + Debug.LogResponse(loginResponse.body.toString(), src: url); return loginResponse.body.toString(); } catch (e) { @@ -134,14 +145,13 @@ class Backend{ return "-1"; } - static Future GetRequestResponse(String id) async{ + static Future GetRequestResponse(String id) async { var loginResponse = null; try { String url = '${API_ENDPOINT}get_request_response.php'; - loginResponse = (await http.post(Uri.parse(url), - body: {"id":id.toString()})); - Debug.LogResponse(loginResponse.body.toString(),src: url); + loginResponse = (await http.post(Uri.parse(url), body: {"id": id.toString()})); + Debug.LogResponse(loginResponse.body.toString(), src: url); return loginResponse.body; } catch (e) { @@ -151,14 +161,13 @@ class Backend{ return "-1"; } - static Future GetDisplayName(String id) async{ + static Future GetDisplayName(String id) async { var response = null; try { String url = '${API_ENDPOINT}get_display_name.php'; - response = (await http.post(Uri.parse(url), - body: {"id":id.toString()})); - Debug.LogResponse(response.body.toString(),src: url); + response = (await http.post(Uri.parse(url), body: {"id": id.toString()})); + Debug.LogResponse(response.body.toString(), src: url); return response.body; } catch (e) { @@ -168,18 +177,17 @@ class Backend{ return "-1"; } - static Future GetUsernameValidation(String username) async{ + static Future GetUsernameValidation(String username) async { var loginResponse = null; try { String url = '${API_ENDPOINT}validate_username.php'; - loginResponse = (await http.post(Uri.parse(url), - body: {"username":username})); - Debug.LogResponse(loginResponse.body.toString(),src: url); + loginResponse = (await http.post(Uri.parse(url), body: {"username": username})); + Debug.LogResponse(loginResponse.body.toString(), src: url); - if(loginResponse.body == "0"){ + if (loginResponse.body == "0") { return true; - }else{ + } else { return false; } } catch (e) { @@ -188,10 +196,39 @@ class Backend{ return false; } + + static Future GetNextGuestUsername() async{ + try{ + String url = '${API_ENDPOINT}get_next_guest_username.php'; + var response = await http.get(Uri.parse(url)); + + return response.body.toString(); + }catch(e){ + + } + Random random = new Random(); + return 'guest ${random.nextInt(10000000)}'; + } + + static VaultData vault = VaultData('0x0', 0, 0); + + static Future RefreshVaultData() async{ + var response = null; + try{ + String url = '${API_ENDPOINT}get_vault_data.php'; + response = (await http.post(Uri.parse(url), body: {"id": Username})); + Debug.LogResponse(response.body.toString(), src:url); + + vault = jsonDecode(response.body.toString()); + }catch(e){ + + } + + return vault; + } } - -class GameData{ +class GameData { int id; String code; String name; @@ -200,5 +237,13 @@ class GameData{ bool isAvailable; String exeName; - GameData(this.id,this.code,this.name,this.description,this.imagePath,this.isAvailable,this.exeName); -} \ No newline at end of file + GameData(this.id, this.code, this.name, this.description, this.imagePath, this.isAvailable, this.exeName); +} + +class VaultData{ + String address; + int vc; + int php; + + VaultData(this.address, this.vc, this.php); +} diff --git a/lib/Backend/InstallHelper.dart b/lib/Backend/InstallHelper.dart index 7a5afd7..d7a5841 100644 --- a/lib/Backend/InstallHelper.dart +++ b/lib/Backend/InstallHelper.dart @@ -35,14 +35,16 @@ class InstallHelper{ localFiles = await getHashtable(pathDir); } //Get local hashtable - // Debug.Log(localFilesJson); + Debug.LogResponse(jsonEncode(localFiles), src:"local files"); //Write to file if(!usedLocalSave){ String localFilesJson = FileHashEntry.listToJson(localFiles); Backend.prefs!.setString(GetValidationSaveKey(gameId),localFilesJson); if(kDebugMode) { - File writeJsonFile = File(Path.join(pathDir.parent.path, "hashes.txt")); + String hashFilePath = Path.join(pathDir.parent.path, "hashes.txt"); + File writeJsonFile = File(hashFilePath); writeJsonFile.writeAsString(localFilesJson); + Debug.Log("Wrote hash into ${hashFilePath}"); } } diff --git a/lib/Shared/Dialogs.dart b/lib/Shared/Dialogs.dart new file mode 100644 index 0000000..5d9b5c4 --- /dev/null +++ b/lib/Shared/Dialogs.dart @@ -0,0 +1,39 @@ + +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_spinkit/flutter_spinkit.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import '../main.dart'; + +class Dialogs{ + + static showAlertDialog(BuildContext context, String title, String message) { + // set up the button + Widget okButton = TextButton( + child: Text("OK"), + onPressed: () { + Navigator.of(context).pop(); + }, + ); + + // set up the AlertDialog + AlertDialog alert = AlertDialog( + backgroundColor: Color(0xFF1F1F1F), + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)), + title: Text(title), + content: Text(message), + actions: [ + okButton, + ], + + ); + + // show the dialog + showDialog( + context: context, + builder: (BuildContext context) { + return alert; + }, + ); + } +} \ No newline at end of file diff --git a/lib/Widgets/Home/AccountsPage.dart b/lib/Widgets/Home/AccountsPage.dart new file mode 100644 index 0000000..d32acaf --- /dev/null +++ b/lib/Widgets/Home/AccountsPage.dart @@ -0,0 +1,75 @@ +import 'package:flutter/material.dart'; +import 'package:url_launcher/url_launcher_string.dart'; + +import '../../Backend/Backend.dart'; +import '../CustomWidgets.dart'; + +Widget AccountPage(){ + return Padding( + padding: const EdgeInsets.all(25.0), + child: Column( + children: [ + Row( + children: [ + Text("Hello, ${Backend.displayName}", style: TextStyle(fontSize: 30)), + ], + ), + SizedBox(height: 100,), + Text(Backend.pubKey), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Column( + children: [ + Text("Vault Credits",style: TextStyle(fontWeight: FontWeight.bold,fontSize: 15),), + Row( + children: [ + Image.asset('images/vault.png',width: 40,height: 40,), + Text(Backend.vault.php.toString(),style: TextStyle(fontSize: 50),), + ], + ) + ], + ), + SizedBox(width: 60,), + Column( + children: [ + Text("Pre-hunt Points",style: TextStyle(fontWeight: FontWeight.bold,fontSize: 15),), + Row( + children: [ + Image.asset('images/token.png',width: 40,height: 40,), + Text(Backend.vault.vc.toString(),style: TextStyle(fontSize: 50),), + ], + ) + ], + ), + ], + ), + // Text("Your wallet address is "), + // Row( + // mainAxisAlignment: MainAxisAlignment.center, + // children: [ + // Text(Backend.walletAddress, style: TextStyle(fontSize: 25),), + // InkWell(child: Padding( + // padding: const EdgeInsets.all(16.0), + // child: Icon(Icons.copy), + // ), onTap: (){ + // //Copy wallet + // },) + // ], + // ), + SizedBox(height: 50,), + GlassButton(onTap: (){ + launchUrlString('https://auth.playpoolstudios.com'); + }, child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text("Open Dashboard"), + SizedBox(width: 10,), + Icon(Icons.open_in_new, color: Colors.grey) + ], + ), width: 250, height: 50) + + ], + ), + ); +} diff --git a/lib/Widgets/Home/Dashboard.dart b/lib/Widgets/Home/Dashboard.dart new file mode 100644 index 0000000..f34937b --- /dev/null +++ b/lib/Widgets/Home/Dashboard.dart @@ -0,0 +1,342 @@ +import 'dart:io'; + +import 'package:filepicker_windows/filepicker_windows.dart'; +import 'package:flutter/material.dart'; + +import '../../Backend/Backend.dart'; +import '../../Backend/FileHashEntry.dart'; +import '../../Backend/InstallHelper.dart'; +import '../../Backend/Structures.dart'; +import '../CustomWidgets.dart'; + +Widget Dashboard({ + required BuildContext context, + required Map> downloadQueue, + required int dashboardSelectedGameIndex, + required List missingFilesForSelectedGame, + required bool calculatingFiles, + required bool isUninstalling, + required bool isRunning, + required Map myStatsForSelectedGame, + required List leaderboardForSelectedGame, + required List> newsForSelectedGame, + + required Function(int) onSelectedGameChanged, + required Function onUpdate, + required Function(int) onUninstallClicked, + required dynamic OnGameActionButtonClicked, + +}) { + GameData selectedGameData = Backend.Games[dashboardSelectedGameIndex]; + String filePath = InstallHelper.GetFilePath(dashboardSelectedGameIndex); + bool folderExists = Directory(filePath).existsSync(); + String ActionBtnTxt = "Install"; + + if (missingFilesForSelectedGame.length <= 0) { + ActionBtnTxt = "Play"; + } else { + ActionBtnTxt = + ("Download ${FileHashEntry.getTotalSizeInMbytes(missingFilesForSelectedGame).toStringAsFixed(0)} MB"); + } + + if (calculatingFiles) { + ActionBtnTxt = "Validating"; + } + + if (downloadQueue.containsKey(dashboardSelectedGameIndex)) { + ActionBtnTxt = "Downloading"; + } + + if (isUninstalling) { + ActionBtnTxt = "Uninstalling"; + } + + if(isRunning){ + ActionBtnTxt = "Running"; + } + + Widget ActionButton = GlassButton( + onTap: OnGameActionButtonClicked, + child: Text(ActionBtnTxt), + width: 200, + color: Colors.blue, + opacity: 0.5, + height: 50); + + final screenHeight = MediaQuery.of(context).size.height; + List leaderboardList = []; + // leaderboardList.add(TableRow(children: [Text("username"),Text("kills"), Text("deaths")])); + // leaderboardList.add(TableRow()); + leaderboardList + .addAll(List.generate(leaderboardForSelectedGame.length, (i) { + return DataRow(cells: [ + DataCell(Text(leaderboardForSelectedGame[i].place.toString())), + DataCell(Text(leaderboardForSelectedGame[i].username)), + DataCell(Text(leaderboardForSelectedGame[i].kills.toString())), + DataCell(Text(leaderboardForSelectedGame[i].deaths.toString())), + DataCell(Text(leaderboardForSelectedGame[i].xp.toString())), + ]); + })); + + return Theme( + data: ThemeData(splashColor: Colors.transparent), + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Container( + height: screenHeight * 0.18, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Text( + selectedGameData.name, + style: TextStyle(fontSize: 25), + ), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: List.generate(Backend.Games.length, (index) { + bool isSelected = index == dashboardSelectedGameIndex; + return InkWell( + onTap: (){ + onSelectedGameChanged(index); + }, + child: AnimatedContainer( + duration: const Duration(milliseconds: 100), + margin: EdgeInsets.all(9), + height: 80 * (isSelected ? 1.5 : 1), + width: 130 * (isSelected ? 1.5 : 1), + decoration: BoxDecoration( + image: DecorationImage( + image: + AssetImage(Backend.Games[index].imagePath), + fit: BoxFit.fill), + borderRadius: BorderRadius.circular(20)), + ), + ); + }), + ), + ], + ), + ), + !Backend.Games[dashboardSelectedGameIndex].isAvailable + ? Center( + child: Text("Coming Soon", style: TextStyle(fontSize: 40))) + : Container( + height: screenHeight * 0.72, + child: Column( + children: [ + Container( + padding: EdgeInsets.symmetric(horizontal: 50), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Row( + children: [ + ActionButton, + PopupMenuButton( + iconColor: Colors.blueGrey, + onSelected: (val) { + if (val.toLowerCase().contains("uninstall")) { + onUninstallClicked(dashboardSelectedGameIndex); + } + }, + itemBuilder: (BuildContext context) { + return {'Uninstall'}.map((String choice) { + return PopupMenuItem( + value: choice, + child: Text(choice), + ); + }).toList(); + }, + ), + + ], + ), + GlassCard( + color: Colors.green, + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Row( + children: [ + Text("My Stats", + style: + TextStyle(color: Colors.blueGrey)), + SizedBox( + width: 50, + ), + Padding( + padding: const EdgeInsets.all(8.0), + child: Text( + "Kills : ${(myStatsForSelectedGame['kills'] ?? "0")}"), + ), + Padding( + padding: const EdgeInsets.all(8.0), + child: Text( + "Deaths : ${(myStatsForSelectedGame['deaths'] ?? "0")}"), + ), + Padding( + padding: const EdgeInsets.all(8.0), + child: Text( + "Assist : ${(myStatsForSelectedGame['assists'] ?? "0")}"), + ), + ], + ), + ), + ), + Container() + ], + ), + ), + Container( + height: screenHeight * 0.6, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + + + Padding( + padding: const EdgeInsets.all(20.0), + child: GlassCard( + child: Container( + padding: EdgeInsets.symmetric(horizontal: 10), + width: 350, + child: Column( + children: [ + Padding( + padding: const EdgeInsets.symmetric( + vertical: 12.0, horizontal: 20), + child: Text( + "News", + style: TextStyle(fontSize: 20), + ), + ), + Expanded( + child: SingleChildScrollView( + child: Column( + children: List.generate( + newsForSelectedGame.length, + (index) { + return NewsCard( + newsForSelectedGame[index] + ['title'], + newsForSelectedGame[index] + ['message']); + }), + ), + ), + ) + ], + ), + )), + ), + SizedBox( + width: 50, + ), + SingleChildScrollView( + scrollDirection: Axis.vertical, + child: Column( + children: [ + Padding( + padding: const EdgeInsets.fromLTRB( + 0, 20, 0, 0), + child: Text( + "Leaderboard", + style: TextStyle(fontSize: 20), + ), + ), + DataTable( + dataTextStyle: + TextStyle(color: Colors.white), + headingTextStyle: + TextStyle(color: Colors.white), + dividerThickness: 0, + columns: [ + DataColumn( + label: + Expanded(child: Text("Place"))), + DataColumn( + label: Expanded( + child: Text("Username"))), + DataColumn( + label: + Expanded(child: Text("Kills"))), + DataColumn( + label: Expanded( + child: Text("Deaths"))), + DataColumn( + label: Expanded(child: Text("XP"))), + ], + rows: leaderboardList, + ), + ], + ), + ), + ], + )) + ], + ), + ), + Container( + //Install path footer + padding: EdgeInsets.symmetric(horizontal: 10), + alignment: Alignment.bottomCenter, + child: Column( + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Row(children: [Text("Install path "), Text(filePath)]), + GlassButton( + onTap: () { + DirectoryPicker file = DirectoryPicker(); + final dir = file.getDirectory(); + Backend.prefs!.setString( + '${selectedGameData.name}_path', dir!.path); + onUpdate(); + }, + child: Text("Change Install Location"), + width: 250) + ], + ), + SizedBox( + height: 10, + ) + ], + ), + ) + ], + ), + ); +} + +Widget NewsCard(String title, String message) { + return Padding( + padding: const EdgeInsets.all(5.0), + child: GlassCard( + child: Row( + children: [ + Padding( + padding: const EdgeInsets.all(18.0), + child: Icon( + Icons.newspaper, + color: Colors.blueGrey, + ), + ), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + title, + style: TextStyle(fontSize: 18), + textAlign: TextAlign.left, + ), + Text( + message, + overflow: TextOverflow.clip, + ) + ], + ) + ], + )), + ); +} \ No newline at end of file diff --git a/lib/Widgets/Home/Downloads.dart b/lib/Widgets/Home/Downloads.dart new file mode 100644 index 0000000..d7b7bda --- /dev/null +++ b/lib/Widgets/Home/Downloads.dart @@ -0,0 +1,129 @@ +import 'package:flutter/material.dart'; + +import '../../Backend/Backend.dart'; +import '../../Backend/FileHashEntry.dart'; +import '../CustomWidgets.dart'; + +Widget DownloadCard({ + required int gameId, + required Map> downloadProgress, + required Map totalDownloadSize, + required Map> downloadQueue, + required bool downloadRunning, + required Function(int) onChanged +}) { + int doneSize = 0; + if (downloadProgress.containsKey(gameId)) { + Map _progress = downloadProgress[gameId]!; + _progress.forEach((key, value) { + doneSize += value.toInt(); + }); + } + + double totalSize = totalDownloadSize[gameId]! / 1024 / 1024; + double doneSizeMb = doneSize / 1024 / 1024; + double progress = doneSizeMb / totalSize; + + return Padding( + padding: const EdgeInsets.all(8.0), + child: GlassCard( + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Column( + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Row( + children: [ + Container( + decoration: BoxDecoration( + image: DecorationImage( + image: + AssetImage(Backend.Games[gameId].imagePath)), + borderRadius: BorderRadius.circular(50)), + width: 160, + height: 80, + ), + Column( + children: [ + Text( + Backend.Games[gameId].name, + style: TextStyle(fontSize: 20), + ), + Text((doneSizeMb).toStringAsFixed(2) + + " MB" + + " / " + + totalSize.toStringAsFixed(2) + + " MB") + ], + ) + ], + ), + Expanded( + child: Padding( + padding: const EdgeInsets.fromLTRB(20, 50, 20, 20), + child: LinearProgressIndicator( + value: progress, + backgroundColor: Colors.black.withOpacity(0.2), + color: Colors.blue, + ), + ), + ), + InkWell( + child: Icon(Icons.cancel, + size: 40, color: Colors.red.withOpacity(0.6)), + onTap: () { + downloadQueue.remove(gameId); + downloadProgress.remove(gameId); + downloadRunning = false; + onChanged(gameId); + }, + ) + // Icon(Icons.download,size: 40,color: Colors.green.withOpacity(0.4),) + ], + ) + ], + ), + )), + ); +} + +Widget Downloads({ + required Map> downloadQueue, + required Map> downloadProgress, + required Map totalDownloadSize, + required bool downloadRunning, + required Function(int) onChanged +}) { + if (downloadQueue.length <= 0) { + return Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Icon( + Icons.download_done_sharp, + size: 100, + color: Colors.white.withOpacity(0.5), + ), + Text( + "No ongoing Downloads", + style: + TextStyle(fontSize: 40, color: Colors.white.withOpacity(0.4)), + ), + ], + ), + ); + } + + return Container( + child: Container( + padding: EdgeInsets.all(100), + child: GlassCard( + child: Column( + children: List.generate(downloadQueue.keys.length, (index) { + int gameId = downloadQueue.keys.toList()[index]; + return DownloadCard(gameId: gameId, downloadQueue:downloadQueue, downloadProgress: downloadProgress, downloadRunning: downloadRunning, totalDownloadSize: totalDownloadSize, onChanged: onChanged ); + }), + )))); +} \ No newline at end of file diff --git a/lib/Widgets/Home/Library.dart b/lib/Widgets/Home/Library.dart new file mode 100644 index 0000000..0f62a25 --- /dev/null +++ b/lib/Widgets/Home/Library.dart @@ -0,0 +1,98 @@ +import 'package:flutter/material.dart'; + +import '../../Backend/Backend.dart'; +import '../CustomWidgets.dart'; + +String hoveringGameCard = ""; + +Widget Library({ + required int selectedSidebarIndex, + + required Function(int) onGameChanged, + required Function onUpdate, +}) { + return Center( + child: Wrap( + spacing: 20, + children: List.generate(Backend.Games.length, (index) { + GameData gameData = Backend.Games[index]; + return LibGameCard( + gameData: gameData, + selectedSidebarIndex: selectedSidebarIndex, + onUpdate: onUpdate, + onGameChanged: onGameChanged + ); + }), + ), + ); +} + +Widget LibGameCard({ + required GameData gameData, + required int selectedSidebarIndex, + + required Function(int) onGameChanged, + required Function onUpdate, +}) { + return InkWell( + onTap: () { + selectedSidebarIndex = 1; + onGameChanged(gameData.id); + }, + onHover: (val) { + if (val) { + hoveringGameCard = gameData.name; + } else if (hoveringGameCard == gameData.name) { + hoveringGameCard = ""; + } + onUpdate(); + }, + child: AnimatedContainer( + duration: const Duration(milliseconds: 500), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(20), + color: Colors.black, + image: DecorationImage( + image: AssetImage(gameData.imagePath), fit: BoxFit.fill)), + height: 200, + width: 300, + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + hoveringGameCard != gameData.name + ? Container() + : Expanded( + child: GlassContainer( + child: Center( + child: Text( + gameData.description, + textAlign: TextAlign.center, + ), + ), + opacity: 0.5, + color: Colors.black)), + GlassContainer( + child: Padding( + padding: const EdgeInsets.all(8.0), + child: true? Container():Row( + children: [ + Text(gameData.name), + gameData.isAvailable + ? GlassButton( + onTap: () {}, + child: Text("Install"), + width: 100, + color: Colors.blue, + opacity: 0.8) + : Text("Coming soon") + ], + mainAxisAlignment: MainAxisAlignment.spaceBetween, + ), + ), + opacity: 0.9, + color: Colors.black), + ], + ), + ), + ); +} \ No newline at end of file diff --git a/lib/Widgets/Home/Sidebar.dart b/lib/Widgets/Home/Sidebar.dart new file mode 100644 index 0000000..df74945 --- /dev/null +++ b/lib/Widgets/Home/Sidebar.dart @@ -0,0 +1,127 @@ +import 'package:flutter/material.dart'; + +import '../../Backend/Backend.dart'; +import '../CustomWidgets.dart'; + + +int selectedSidebarIndex = 0; + +Widget SideBar( + {required double width, required double height,required Function(int) onChanged, int selectedIndex = 0}) { + return GlassContainer( + child: Container( + width: width, + height: height, + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Column( + children: [ + + SizedBox( + height: 100, + ), + SidebarTitle("Library", Icons.laptop_chromebook_outlined, onChanged, + index: 0), + SidebarTitle("Dashboard", Icons.dashboard,onChanged, index: 1), + SidebarTitle("Downloads", Icons.download,onChanged, index: 2), + ], + ), + InkWell( + onTap:(){ + selectedSidebarIndex=3; + onChanged(3); + }, + child: GlassContainer(child: Padding( + padding: const EdgeInsets.fromLTRB(10,0,10,10), + child: Row( + children: [ + Icon(Icons.supervised_user_circle_rounded, size: 50), + SizedBox(width: 15,), + Column(crossAxisAlignment:CrossAxisAlignment.start,children: [ + Text(Backend.displayName,style: TextStyle(fontSize: 24),), + // Text("Vault credits : 50") + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Row( + children: [ + Container( + padding: EdgeInsets.symmetric(horizontal: 10,vertical: 2), + decoration: BoxDecoration(borderRadius: BorderRadius.circular(10), color: Colors.black.withAlpha(100)), + child: Row( + children: [ + Container( + height: 30, + width: 30, + child: Image.asset('images/vault.png'), + ), + SizedBox(width: 5,), + Text(Backend.vault.vc.toString()) + ], + ), + ), + SizedBox(width: 5,), + Container( + padding: EdgeInsets.symmetric(horizontal: 10,vertical: 2), + decoration: BoxDecoration(borderRadius: BorderRadius.circular(10), color: Colors.black.withAlpha(100)), + child: Row( + children: [ + Container( + height: 30, + width: 30, + child: Image.asset('images/token.png'), + ), + SizedBox(width: 5,), + Text(Backend.vault.php.toString()) + ], + ), + ), + ], + ) + ], + ), + ],) + ], + ), + )), + ) + ], + ), + ), + opacity: 0.15, + color: Colors.blueGrey); +} + +Widget SidebarTitle(String title, IconData iconData, Function(int) onChanged, {int index = 0}) { + return InkWell( + onTap: () { + selectedSidebarIndex = index; + onChanged(index); + }, + child: Padding( + padding: EdgeInsets.symmetric(vertical: 0), + child: GlassContainer( + opacity: selectedSidebarIndex == index ? 0.1 : 0, + color: + selectedSidebarIndex == index ? Colors.white : Colors.transparent, + child: Container( + height: 75, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Icon(iconData), + SizedBox( + width: 20, + ), + Text( + title, + style: TextStyle(fontSize: 20), + ), + ], + ), + ), + ), + ), + ); +} \ No newline at end of file diff --git a/lib/checking_update.dart b/lib/checking_update.dart index 4e13f39..1b336d4 100644 --- a/lib/checking_update.dart +++ b/lib/checking_update.dart @@ -1,10 +1,11 @@ +import 'dart:convert'; import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter_spinkit/flutter_spinkit.dart'; import 'package:http/http.dart' as http; import 'package:mhunt_launcher/home.dart'; -import 'package:process_run/shell.dart'; +import 'package:mhunt_launcher/login.dart'; class UpdateCheckScreen extends StatefulWidget { const UpdateCheckScreen({super.key}); @@ -15,8 +16,8 @@ class UpdateCheckScreen extends StatefulWidget { class _UpdateCheckScreenState extends State { - int localVersion = 0; - String otaPath = Directory.current.path + "\\ota_wrapper_v2.exe"; + int localVersion = 4; + String otaPath = Directory.current.path + "\\ota_wrapper_silent.vbs"; @override void initState() { @@ -25,31 +26,35 @@ class _UpdateCheckScreenState extends State { CheckForUpdates(); } - Future> runExecutable(String executable) async { - return await run(executable); - } void CheckForUpdates() async{ - // http.Response remoteVersionResponse = await http.get(Uri.parse("https://vps.playpoolstudios.com/metahunt/api/launcher/get_version.php")); - // int remoteVersion = int.parse(remoteVersionResponse.body); - if(!await File(otaPath).exists()){ - print("otapath not existing"); - setState(() { - updateStatus=2; - }); - return; - } - try { - - final result = await runExecutable(otaPath + " noupdate"); - if (result[0].stdout.trim() == '0') { - updateStatus = 2; - Navigator.of(context).pushReplacement(MaterialPageRoute(builder: (context)=> HomePage())); - }else{ - updateStatus = 1; - } - } catch (e) { - print('Error running the executable: $e'); - } + http.Response remoteVersionResponse = await http.get(Uri.parse("https://vps.playpoolstudios.com/metahunt/data/bin/launcher_win/get_version_code.php")); + int remoteVersion = int.parse(remoteVersionResponse.body); + print("local version:${localVersion}, remote version:${remoteVersion}"); + if(remoteVersion>localVersion){ + updateStatus = 1; + }else{ + updateStatus=2; + Navigator.of(context).pushReplacement(MaterialPageRoute(builder: (context)=> LoginPage())); + } + // if(!await File(otaPath).exists()){ + // print("otapath not existing"); + // setState(() { + // updateStatus=2; + // }); + // return; + // } + // try { + // + // final result = await runExecutable(otaPath + " noupdate"); + // if (result[0].stdout.trim() == '0') { + // updateStatus = 2; + // Navigator.of(context).pushReplacement(MaterialPageRoute(builder: (context)=> LoginPage())); + // }else{ + // updateStatus = 1; + // } + // } catch (e) { + // print('Error running the executable: $e'); + // } setState(() { @@ -57,10 +62,16 @@ class _UpdateCheckScreenState extends State { }); } void update() async{ - await Process.start(otaPath,[], runInShell: true); - // await Future.delayed(const Duration(seconds: 5)); - + // await Process.start(otaPath,[], runInShell: true); + // + final process = await Process.start('wscript',[otaPath], runInShell: true); updateStatus = 2; + process.stdout.transform(utf8.decoder).listen((data) { + }); + process.stderr.transform(utf8.decoder).listen((data) { + print(data); + }); + await Future.delayed(const Duration(seconds: 1)); exit(0); setState(() { diff --git a/lib/home.dart b/lib/home.dart index 0bb5e3c..84a0bed 100644 --- a/lib/home.dart +++ b/lib/home.dart @@ -14,11 +14,17 @@ import 'package:mhunt_launcher/sidebar.dart'; import 'package:process_run/process_run.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:path/path.dart' as Path; +import 'package:url_launcher/url_launcher_string.dart'; import 'Backend/DebugHelper.dart'; import 'package:http/http.dart' as http; import 'Backend/FileHashEntry.dart'; import 'Backend/Structures.dart'; +import 'Widgets/Home/AccountsPage.dart'; +import 'Widgets/Home/Dashboard.dart'; +import 'Widgets/Home/Downloads.dart'; +import 'Widgets/Home/Library.dart'; +import 'Widgets/Home/Sidebar.dart'; class HomePage extends StatefulWidget { const HomePage({super.key}); @@ -39,14 +45,38 @@ class _HomePageState extends State { bool downloadRunning = false; int unwaitingFiles = 0; int dashboardSelectedGameIndex = 0; + String userPubKey = "loading"; + @override void initState() { // TODO: implement initState super.initState(); kickstartAnimations(); + initData(); SetSelectedDashboardGame(0); + + SetVaultUpdateLoop(); + } + + + void SetVaultUpdateLoop() async{ + while(true){ + await Backend.RefreshVaultData(); + setState(() { + + }); + await Future.delayed(const Duration(seconds: 30)); + } + } + + void initData()async{ + userPubKey= await Backend.GetPubkey(); + + setState(() { + + }); } void kickstartAnimations() async { @@ -63,11 +93,50 @@ class _HomePageState extends State { Widget build(BuildContext context) { final screenHeight = MediaQuery.of(context).size.height; final screenWidth = MediaQuery.of(context).size.width; - Widget content = Library(); + Widget content = Library( + selectedSidebarIndex: selectedSidebarIndex, + onGameChanged: SetSelectedDashboardGame, + onUpdate: (){ + setState(() { + + }); + } + ); + if (selectedSidebarIndex == 1) { - content = Dashboard(); + content = Dashboard( + context: context, + downloadQueue: downloadQueue, + dashboardSelectedGameIndex: dashboardSelectedGameIndex, + missingFilesForSelectedGame: missingFilesForSelectedGame, + calculatingFiles: calculatingFiles, + isRunning: runningProcs.containsKey(dashboardSelectedGameIndex), + isUninstalling: isUninstalling, + myStatsForSelectedGame: myStatsForSelectedGame, + leaderboardForSelectedGame: leaderboardForSelectedGame, + newsForSelectedGame: newsForSelectedGame, + + onSelectedGameChanged: SetSelectedDashboardGame, + onUninstallClicked: UninstallGame, + OnGameActionButtonClicked: OnGameActionButtonClicked, + onUpdate: (){ + setState(() { + + }); + } + ); } else if (selectedSidebarIndex == 2) { - content = Downloads(); + content = Downloads( + downloadQueue: downloadQueue, + downloadRunning: downloadRunning, + downloadProgress: downloadProgress, + totalDownloadSize: totalDownloadSize, + onChanged: (val){ + setState(() { + SetSelectedDashboardGame(val); + }); + } + ); }else if(selectedSidebarIndex == 3){ content = AccountPage(); } @@ -83,7 +152,11 @@ class _HomePageState extends State { children: [ SideBar( width: screenWidth * 0.2, - height: screenHeight, + height: screenHeight, onChanged: (val){ + setState(() { + selectedSidebarIndex = val; + }); + }, ), SizedBox( width: screenWidth * 0.8, @@ -96,301 +169,7 @@ class _HomePageState extends State { ); } - Widget Library() { - return Center( - child: Wrap( - spacing: 20, - children: List.generate(Backend.Games.length, (index) { - GameData gameData = Backend.Games[index]; - return LibGameCard(gameData); - }), - ), - ); - } - Widget AccountPage(){ - return Padding( - padding: const EdgeInsets.all(25.0), - child: Column( - children: [ - Row( - children: [ - Text("Hello, ${Backend.displayName}", style: TextStyle(fontSize: 30)), - ], - ), - - ], - ), - ); - } - - Widget Downloads() { - if (downloadQueue.length <= 0) { - return Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Icon( - Icons.download_done_sharp, - size: 100, - color: Colors.white.withOpacity(0.5), - ), - Text( - "No ongoing Downloads", - style: - TextStyle(fontSize: 40, color: Colors.white.withOpacity(0.4)), - ), - ], - ), - ); - } - - return Container( - child: Container( - padding: EdgeInsets.all(100), - child: GlassCard( - child: Column( - children: List.generate(downloadQueue.keys.length, (index) { - int gameId = downloadQueue.keys.toList()[index]; - return DownloadCard(gameId, downloadQueue[gameId]!); - }), - )))); - } - - Widget DownloadCard(int gameId, List files) { - int doneSize = 0; - if (downloadProgress.containsKey(gameId)) { - Map _progress = downloadProgress[gameId]!; - _progress.forEach((key, value) { - doneSize += value.toInt(); - }); - } - - double totalSize = totalDownloadSize[gameId]! / 1024 / 1024; - double doneSizeMb = doneSize / 1024 / 1024; - double progress = doneSizeMb / totalSize; - - return Padding( - padding: const EdgeInsets.all(8.0), - child: GlassCard( - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Column( - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Row( - children: [ - Container( - decoration: BoxDecoration( - image: DecorationImage( - image: - AssetImage(Backend.Games[gameId].imagePath)), - borderRadius: BorderRadius.circular(50)), - width: 160, - height: 80, - ), - Column( - children: [ - Text( - Backend.Games[gameId].name, - style: TextStyle(fontSize: 20), - ), - Text((doneSizeMb).toStringAsFixed(2) + - " MB" + - " / " + - totalSize.toStringAsFixed(2) + - " MB") - ], - ) - ], - ), - Expanded( - child: Padding( - padding: const EdgeInsets.fromLTRB(20, 50, 20, 20), - child: LinearProgressIndicator( - value: progress, - backgroundColor: Colors.black.withOpacity(0.2), - color: Colors.blue, - ), - ), - ), - InkWell( - child: Icon(Icons.cancel, - size: 40, color: Colors.red.withOpacity(0.6)), - onTap: () { - downloadQueue.remove(gameId); - downloadProgress.remove(gameId); - downloadRunning = false; - SetSelectedDashboardGame(gameId); - setState(() {}); - }, - ) - // Icon(Icons.download,size: 40,color: Colors.green.withOpacity(0.4),) - ], - ) - ], - ), - )), - ); - } - - Widget SideBar( - {required double width, required double height, int selectedIndex = 0}) { - return GlassContainer( - child: Container( - width: width, - height: height, - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Column( - children: [ - // Padding( - // padding: const EdgeInsets.all(8.0), - // child: Row( - // mainAxisAlignment: MainAxisAlignment.spaceBetween, - // children: [ - // SizedBox(width: 10,), - // Text("10") - // ], - // ), - // ), - SizedBox( - height: 100, - ), - SidebarTitle("Library", Icons.laptop_chromebook_outlined, - index: 0), - SidebarTitle("Dashboard", Icons.dashboard, index: 1), - SidebarTitle("Downloads", Icons.download, index: 2), - ], - ), - InkWell( - onTap:(){ - setState(() { - selectedSidebarIndex=3; - }); - }, - child: GlassContainer(child: Padding( - padding: const EdgeInsets.all(10.0), - child: Row( - children: [ - Icon(Icons.supervised_user_circle_rounded, size: 50), - SizedBox(width: 15,), - Column(crossAxisAlignment:CrossAxisAlignment.start,children: [ - Text(Backend.displayName,style: TextStyle(fontSize: 24),), - // Text("Vault credits : 50") - ],) - ], - ), - )), - ) - ], - ), - ), - opacity: 0.15, - color: Colors.blueGrey); - } - - Widget SidebarTitle(String title, IconData iconData, {int index = 0}) { - return InkWell( - onTap: () { - setState(() { - selectedSidebarIndex = index; - }); - }, - child: Padding( - padding: EdgeInsets.symmetric(vertical: 0), - child: GlassContainer( - opacity: selectedSidebarIndex == index ? 0.1 : 0, - color: - selectedSidebarIndex == index ? Colors.white : Colors.transparent, - child: Container( - height: 75, - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Icon(iconData), - SizedBox( - width: 20, - ), - Text( - title, - style: TextStyle(fontSize: 20), - ), - ], - ), - ), - ), - ), - ); - } - - String hoveringGameCard = ""; - Widget LibGameCard(GameData gameData) { - return InkWell( - onTap: () { - selectedSidebarIndex = 1; - SetSelectedDashboardGame(gameData.id); - }, - onHover: (val) { - if (val) { - hoveringGameCard = gameData.name; - } else if (hoveringGameCard == gameData.name) { - hoveringGameCard = ""; - } - setState(() {}); - }, - child: AnimatedContainer( - duration: const Duration(milliseconds: 500), - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(20), - color: Colors.black, - image: DecorationImage( - image: AssetImage(gameData.imagePath), fit: BoxFit.fill)), - height: 200, - width: 300, - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - hoveringGameCard != gameData.name - ? Container() - : Expanded( - child: GlassContainer( - child: Center( - child: Text( - gameData.description, - textAlign: TextAlign.center, - ), - ), - opacity: 0.5, - color: Colors.black)), - GlassContainer( - child: Padding( - padding: const EdgeInsets.all(8.0), - child: true? Container():Row( - children: [ - Text(gameData.name), - gameData.isAvailable - ? GlassButton( - onTap: () {}, - child: Text("Install"), - width: 100, - color: Colors.blue, - opacity: 0.8) - : Text("Coming soon") - ], - mainAxisAlignment: MainAxisAlignment.spaceBetween, - ), - ), - opacity: 0.9, - color: Colors.black), - ], - ), - ), - ); - } void SetSelectedDashboardGame(int i) async { calculatingFiles = true; @@ -448,7 +227,7 @@ class _HomePageState extends State { if(runningProcs.containsKey(id)){return;} String exePath = InstallHelper.GetExeFilePath(dashboardSelectedGameIndex); // Process proc = await run(exePath,); - runningProcs.putIfAbsent(id, ()=> run(exePath + " username ${Backend.UserJson['username']} password ${Backend.UserJson['passwd']}")); + runningProcs.putIfAbsent(id, ()=> run(exePath + " username ${Backend.Username} password ${Backend.UserJson['passwd']}")); setState(() { }); @@ -475,11 +254,6 @@ class _HomePageState extends State { bool isUninstalling = false; void UninstallGame(int id) async { if(runningProcs.containsKey(id)){return;} - // String exeFilePath = InstallHelper.GetExeFilePath(id); - // if(!File(exeFilePath).existsSync()){ - // Debug.LogError("No game installed to uninstall"); - // return; - // } isUninstalling = true; setState(() {}); @@ -592,322 +366,4 @@ class _HomePageState extends State { }); }); } - - Widget Dashboard() { - GameData selectedGameData = Backend.Games[dashboardSelectedGameIndex]; - String filePath = InstallHelper.GetFilePath(dashboardSelectedGameIndex); - bool folderExists = Directory(filePath).existsSync(); - String ActionBtnTxt = "Install"; - - if (missingFilesForSelectedGame.length <= 0) { - ActionBtnTxt = "Play"; - } else { - ActionBtnTxt = - ("Download ${FileHashEntry.getTotalSizeInMbytes(missingFilesForSelectedGame).toStringAsFixed(0)} MB"); - } - - if (calculatingFiles) { - ActionBtnTxt = "Validating"; - } - - if (downloadQueue.containsKey(dashboardSelectedGameIndex)) { - ActionBtnTxt = "Downloading"; - } - - if (isUninstalling) { - ActionBtnTxt = "Uninstalling"; - } - - if(runningProcs.containsKey(dashboardSelectedGameIndex)){ - ActionBtnTxt = "Running"; - } - - Widget ActionButton = GlassButton( - onTap: OnGameActionButtonClicked, - child: Text(ActionBtnTxt), - width: 200, - color: Colors.blue, - opacity: 0.5, - height: 50); - - final screenHeight = MediaQuery.of(context).size.height; - List leaderboardList = []; - // leaderboardList.add(TableRow(children: [Text("username"),Text("kills"), Text("deaths")])); - // leaderboardList.add(TableRow()); - leaderboardList - .addAll(List.generate(leaderboardForSelectedGame.length, (i) { - return DataRow(cells: [ - DataCell(Text(leaderboardForSelectedGame[i].place.toString())), - DataCell(Text(leaderboardForSelectedGame[i].username)), - DataCell(Text(leaderboardForSelectedGame[i].kills.toString())), - DataCell(Text(leaderboardForSelectedGame[i].deaths.toString())), - DataCell(Text(leaderboardForSelectedGame[i].xp.toString())), - ]); - })); - - return Theme( - data: ThemeData(splashColor: Colors.transparent), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Container( - height: screenHeight * 0.18, - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Text( - selectedGameData.name, - style: TextStyle(fontSize: 25), - ), - Row( - mainAxisAlignment: MainAxisAlignment.center, - children: List.generate(Backend.Games.length, (index) { - bool isSelected = index == dashboardSelectedGameIndex; - return InkWell( - onTap: () { - SetSelectedDashboardGame(index); - setState(() {}); - }, - child: AnimatedContainer( - duration: const Duration(milliseconds: 100), - margin: EdgeInsets.all(9), - height: 80 * (isSelected ? 1.5 : 1), - width: 130 * (isSelected ? 1.5 : 1), - decoration: BoxDecoration( - image: DecorationImage( - image: - AssetImage(Backend.Games[index].imagePath), - fit: BoxFit.fill), - borderRadius: BorderRadius.circular(20)), - ), - ); - }), - ), - ], - ), - ), - !Backend.Games[dashboardSelectedGameIndex].isAvailable - ? Center( - child: Text("Coming Soon", style: TextStyle(fontSize: 40))) - : Container( - height: screenHeight * 0.72, - child: Column( - children: [ - Container( - padding: EdgeInsets.symmetric(horizontal: 50), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Row( - children: [ - ActionButton, - PopupMenuButton( - iconColor: Colors.blueGrey, - onSelected: (val) { - if (val - .toLowerCase() - .contains("uninstall")) { - UninstallGame(dashboardSelectedGameIndex); - } - }, - itemBuilder: (BuildContext context) { - return {'Uninstall'}.map((String choice) { - return PopupMenuItem( - value: choice, - child: Text(choice), - ); - }).toList(); - }, - ), - - ], - ), - GlassCard( - color: Colors.green, - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Row( - children: [ - Text("My Stats", - style: - TextStyle(color: Colors.blueGrey)), - SizedBox( - width: 50, - ), - Padding( - padding: const EdgeInsets.all(8.0), - child: Text( - "Kills : ${(myStatsForSelectedGame['kills'] ?? "0")}"), - ), - Padding( - padding: const EdgeInsets.all(8.0), - child: Text( - "Deaths : ${(myStatsForSelectedGame['deaths'] ?? "0")}"), - ), - Padding( - padding: const EdgeInsets.all(8.0), - child: Text( - "Assist : ${(myStatsForSelectedGame['assists'] ?? "0")}"), - ), - ], - ), - ), - ), - - ], - ), - ), - Container( - height: screenHeight * 0.6, - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - - - Padding( - padding: const EdgeInsets.all(20.0), - child: GlassCard( - child: Container( - padding: EdgeInsets.symmetric(horizontal: 10), - width: 350, - child: Column( - children: [ - Padding( - padding: const EdgeInsets.symmetric( - vertical: 12.0, horizontal: 20), - child: Text( - "News", - style: TextStyle(fontSize: 20), - ), - ), - Expanded( - child: SingleChildScrollView( - child: Column( - children: List.generate( - newsForSelectedGame.length, - (index) { - return NewsCard( - newsForSelectedGame[index] - ['title'], - newsForSelectedGame[index] - ['message']); - }), - ), - ), - ) - ], - ), - )), - ), - SizedBox( - width: 50, - ), - SingleChildScrollView( - scrollDirection: Axis.vertical, - child: Column( - children: [ - Padding( - padding: const EdgeInsets.fromLTRB( - 0, 20, 0, 0), - child: Text( - "Leaderboard", - style: TextStyle(fontSize: 20), - ), - ), - DataTable( - dataTextStyle: - TextStyle(color: Colors.white), - headingTextStyle: - TextStyle(color: Colors.white), - dividerThickness: 0, - columns: [ - DataColumn( - label: - Expanded(child: Text("Place"))), - DataColumn( - label: Expanded( - child: Text("Username"))), - DataColumn( - label: - Expanded(child: Text("Kills"))), - DataColumn( - label: Expanded( - child: Text("Deaths"))), - DataColumn( - label: Expanded(child: Text("XP"))), - ], - rows: leaderboardList, - ), - ], - ), - ), - ], - )) - ], - ), - ), - Container( - //Install path footer - padding: EdgeInsets.symmetric(horizontal: 10), - alignment: Alignment.bottomCenter, - child: Column( - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Row(children: [Text("Install path "), Text(filePath)]), - GlassButton( - onTap: () { - DirectoryPicker file = DirectoryPicker(); - final dir = file.getDirectory(); - Backend.prefs!.setString( - '${selectedGameData.name}_path', dir!.path); - setState(() {}); - }, - child: Text("Change Install Location"), - width: 250) - ], - ), - SizedBox( - height: 10, - ) - ], - ), - ) - ], - ), - ); - } - - Widget NewsCard(String title, String message) { - return Padding( - padding: const EdgeInsets.all(5.0), - child: GlassCard( - child: Row( - children: [ - Padding( - padding: const EdgeInsets.all(18.0), - child: Icon( - Icons.newspaper, - color: Colors.blueGrey, - ), - ), - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - title, - style: TextStyle(fontSize: 18), - textAlign: TextAlign.left, - ), - Text( - message, - overflow: TextOverflow.clip, - ) - ], - ) - ], - )), - ); - } } diff --git a/lib/login.dart b/lib/login.dart index 27219c2..1914edb 100644 --- a/lib/login.dart +++ b/lib/login.dart @@ -1,12 +1,17 @@ +import 'dart:math'; + import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:mhunt_launcher/Backend/Backend.dart'; +import 'package:mhunt_launcher/Backend/DebugHelper.dart'; import 'package:mhunt_launcher/Widgets/CustomWidgets.dart'; import 'package:mhunt_launcher/home.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:url_launcher/url_launcher.dart'; +import 'Shared/Dialogs.dart'; + class LoginPage extends StatefulWidget { const LoginPage({super.key}); @@ -32,7 +37,6 @@ class _LoginPageState extends State { if (prefs.containsKey("username") && prefs.containsKey("password")) { usernameController.text = prefs.getString("username") ?? ''; passwordController.text = prefs.getString("password") ?? ''; - LoginOrReg(); } } @@ -48,6 +52,7 @@ class _LoginPageState extends State { } TextEditingController usernameController = TextEditingController(); + TextEditingController gamertagController = TextEditingController(); TextEditingController passwordController = TextEditingController(); @override @@ -64,7 +69,7 @@ class _LoginPageState extends State { setState(() {}); }, child: Center( - child: web3LoginCard() + child: TraditionalLoginCard() )) ); } @@ -145,7 +150,7 @@ class _LoginPageState extends State { setState(() { web3loginState = 1; }); - launchUrl(Uri.parse('https://auth.playpoolstudios.com/?request_id=${requestId}')); + launchUrl(Uri.parse('https://auth.playpoolstudios.com/auth/?request_id=${requestId}')); String requestResponse = "-1"; while(requestResponse == "-1"){ await Future.delayed(const Duration(seconds: 1)); @@ -190,72 +195,120 @@ class _LoginPageState extends State { } await Backend.Register(web3id,web3id,usernameEditingController.text); - await Backend.Login(usernameEditingController.text, web3id); + await Backend.Login(web3id, web3id); OnLoginSuccess(); } - + bool isGuest = false; Widget TraditionalLoginCard(){ return GlassCard( child: Container( padding: EdgeInsets.all(25), width: 600, height: 400, - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - const Text( - "Welcome to W3B Launcher", - style: TextStyle(fontSize: 25, fontWeight: FontWeight.bold), - ), - Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Row( - children: [ - Text("Username "), - SizedBox( - width: 300, - child: TextField( - controller: usernameController, - )) - ], - mainAxisAlignment: MainAxisAlignment.center, - ), - Row(children: [ - Text("Password "), - SizedBox( - width: 300, - child: TextField( - controller: passwordController, - )) - ], mainAxisAlignment: MainAxisAlignment.center), - SizedBox( - height: 30, - ), - GlassButton(onTap: LoginOrReg, child: Text(isReg ? "Register" : "Login"), width: 150, height: 40), - ], - ), - Row(children: [ - Text(isReg ? "Already have an Account? " : "Don't have an Account? "), - InkWell( - child: Text( - isReg ? "Login Here" : "Register Here", - style: TextStyle(color: Colors.blue), - ), - onTap: () { - setState(() { - isReg = !isReg; - }); - }, - ) - ], mainAxisAlignment: MainAxisAlignment.center) - ], - ), + child: isGuest? TraditionalLoginGuest() :TraditionalLoginMain() )); } + Widget TraditionalLoginMain(){ + return Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + const Text( + "Welcome to W3B Launcher", + style: TextStyle(fontSize: 25, fontWeight: FontWeight.bold), + ), + Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Row( + children: [ + Text("Username "), + SizedBox( + width: 300, + child: TextField( + controller: usernameController, + )) + ], + mainAxisAlignment: MainAxisAlignment.center, + ), + Row(children: [ + Text("Password "), + SizedBox( + width: 300, + child: TextField( + controller: passwordController, + )) + ], mainAxisAlignment: MainAxisAlignment.center), + SizedBox( + height: 30, + ), + GlassButton(onTap: LoginOrReg, child: Text(isReg ? "Register" : "Login"), width: 150, height: 40), + ], + ), + Row(children: [ + Text(isReg ? "Already have an Account? " : "Don't have an Account? "), + InkWell( + child: Text( + isReg ? "Login Here" : "Register Here", + style: TextStyle(color: Colors.blue), + ), + onTap: () { + setState(() { + isReg = !isReg; + }); + }, + ) + ], mainAxisAlignment: MainAxisAlignment.center), + GlassButton(onTap: (){setState(() { + isGuest=true; + });}, child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Icon(Icons.person), + SizedBox(width: 10,), + Text("Guest Mode"), + ], + ), width: 130, height: 30) + ], + ); + } + + Widget TraditionalLoginGuest(){ + return Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + const Text( + "Welcome to W3B Launcher - Guest Mode", + style: TextStyle(fontSize: 25, fontWeight: FontWeight.bold), + ), + Column( + children: [ + Row( + children: [ + Text("Gamer Tag "), + SizedBox( + width: 300, + child: TextField( + controller: gamertagController, + )) + ], + mainAxisAlignment: MainAxisAlignment.center, + ), + SizedBox(height: 15,), + SizedBox(width: 250,child:usernameExists ? Text("Username is taken",style: TextStyle(color: Colors.red),) : Container()), + + GlassButton(onTap:GuestModeComplete , child: Text("Complete Login"), width: 250,height: 40,color: Colors.green) + ], + ), + GlassButton(onTap: (){setState(() { + isGuest=false; + });}, child: Text("Back"), width: 200, color: Colors.blueGrey) + ], + ); + } + void LoginOrReg() async { // if(kDebugMode){ // Navigator.of(context).push(MaterialPageRoute(builder: (context)=>HomePage())); @@ -268,8 +321,35 @@ class _LoginPageState extends State { success = await Backend.Login(usernameController.text, passwordController.text); } + Debug.Log('${isReg ? "Register": "Login"} was ${success ? "success" : "faild"}'); + if (success) { OnLoginSuccess(); + }else{ + if(isReg){ + Dialogs.showAlertDialog(context, 'Failed Register', "Username already exists"); + }else{ + Dialogs.showAlertDialog(context, 'Failed Login', "Username or Password is incorrect"); + } + } + } + + void GuestModeComplete()async{ + + bool usernameValidated = await Backend.GetUsernameValidation(gamertagController.text); + if(!usernameValidated){ + setState(() { + usernameExists=true; + }); + } + + String username = await Backend.GetNextGuestUsername(); + bool success= await Backend.Register(username, username, gamertagController.text); + + if(success){ + usernameController.text = username; + passwordController.text = username; + OnLoginSuccess(); } } @@ -277,7 +357,7 @@ class _LoginPageState extends State { SharedPreferences prefs = await SharedPreferences.getInstance(); prefs.setString('username', usernameController.text); prefs.setString('password', passwordController.text); - + prefs.setString('displayname', Backend.displayName); Navigator.of(context).push(MaterialPageRoute(builder: (context) => HomePage())); } } diff --git a/ota/Microsoft.CSharp.dll b/ota/Microsoft.CSharp.dll new file mode 100644 index 0000000..a37ae49 Binary files /dev/null and b/ota/Microsoft.CSharp.dll differ diff --git a/ota/Microsoft.DiaSymReader.Native.amd64.dll b/ota/Microsoft.DiaSymReader.Native.amd64.dll new file mode 100644 index 0000000..4c66677 Binary files /dev/null and b/ota/Microsoft.DiaSymReader.Native.amd64.dll differ diff --git a/ota/Microsoft.VisualBasic.Core.dll b/ota/Microsoft.VisualBasic.Core.dll new file mode 100644 index 0000000..10020da Binary files /dev/null and b/ota/Microsoft.VisualBasic.Core.dll differ diff --git a/ota/Microsoft.VisualBasic.dll b/ota/Microsoft.VisualBasic.dll new file mode 100644 index 0000000..a8b2be5 Binary files /dev/null and b/ota/Microsoft.VisualBasic.dll differ diff --git a/ota/Microsoft.Win32.Primitives.dll b/ota/Microsoft.Win32.Primitives.dll new file mode 100644 index 0000000..3fb759d Binary files /dev/null and b/ota/Microsoft.Win32.Primitives.dll differ diff --git a/ota/Microsoft.Win32.Registry.dll b/ota/Microsoft.Win32.Registry.dll new file mode 100644 index 0000000..068e191 Binary files /dev/null and b/ota/Microsoft.Win32.Registry.dll differ diff --git a/ota/Newtonsoft.Json.dll b/ota/Newtonsoft.Json.dll new file mode 100644 index 0000000..d035c38 Binary files /dev/null and b/ota/Newtonsoft.Json.dll differ diff --git a/ota/System.AppContext.dll b/ota/System.AppContext.dll new file mode 100644 index 0000000..79b2413 Binary files /dev/null and b/ota/System.AppContext.dll differ diff --git a/ota/System.Buffers.dll b/ota/System.Buffers.dll new file mode 100644 index 0000000..8632e31 Binary files /dev/null and b/ota/System.Buffers.dll differ diff --git a/ota/System.Collections.Concurrent.dll b/ota/System.Collections.Concurrent.dll new file mode 100644 index 0000000..9219b01 Binary files /dev/null and b/ota/System.Collections.Concurrent.dll differ diff --git a/ota/System.Collections.Immutable.dll b/ota/System.Collections.Immutable.dll new file mode 100644 index 0000000..fde1cca Binary files /dev/null and b/ota/System.Collections.Immutable.dll differ diff --git a/ota/System.Collections.NonGeneric.dll b/ota/System.Collections.NonGeneric.dll new file mode 100644 index 0000000..b99d807 Binary files /dev/null and b/ota/System.Collections.NonGeneric.dll differ diff --git a/ota/System.Collections.Specialized.dll b/ota/System.Collections.Specialized.dll new file mode 100644 index 0000000..98aeace Binary files /dev/null and b/ota/System.Collections.Specialized.dll differ diff --git a/ota/System.Collections.dll b/ota/System.Collections.dll new file mode 100644 index 0000000..6df7785 Binary files /dev/null and b/ota/System.Collections.dll differ diff --git a/ota/System.ComponentModel.Annotations.dll b/ota/System.ComponentModel.Annotations.dll new file mode 100644 index 0000000..0b6c0d8 Binary files /dev/null and b/ota/System.ComponentModel.Annotations.dll differ diff --git a/ota/System.ComponentModel.DataAnnotations.dll b/ota/System.ComponentModel.DataAnnotations.dll new file mode 100644 index 0000000..65e3fe2 Binary files /dev/null and b/ota/System.ComponentModel.DataAnnotations.dll differ diff --git a/ota/System.ComponentModel.EventBasedAsync.dll b/ota/System.ComponentModel.EventBasedAsync.dll new file mode 100644 index 0000000..d98da5e Binary files /dev/null and b/ota/System.ComponentModel.EventBasedAsync.dll differ diff --git a/ota/System.ComponentModel.Primitives.dll b/ota/System.ComponentModel.Primitives.dll new file mode 100644 index 0000000..42609c8 Binary files /dev/null and b/ota/System.ComponentModel.Primitives.dll differ diff --git a/ota/System.ComponentModel.TypeConverter.dll b/ota/System.ComponentModel.TypeConverter.dll new file mode 100644 index 0000000..ded763f Binary files /dev/null and b/ota/System.ComponentModel.TypeConverter.dll differ diff --git a/ota/System.ComponentModel.dll b/ota/System.ComponentModel.dll new file mode 100644 index 0000000..f7de935 Binary files /dev/null and b/ota/System.ComponentModel.dll differ diff --git a/ota/System.Configuration.dll b/ota/System.Configuration.dll new file mode 100644 index 0000000..7d25d5f Binary files /dev/null and b/ota/System.Configuration.dll differ diff --git a/ota/System.Console.dll b/ota/System.Console.dll new file mode 100644 index 0000000..760d0db Binary files /dev/null and b/ota/System.Console.dll differ diff --git a/ota/System.Core.dll b/ota/System.Core.dll new file mode 100644 index 0000000..0f8bada Binary files /dev/null and b/ota/System.Core.dll differ diff --git a/ota/System.Data.Common.dll b/ota/System.Data.Common.dll new file mode 100644 index 0000000..cea3ad8 Binary files /dev/null and b/ota/System.Data.Common.dll differ diff --git a/ota/System.Data.DataSetExtensions.dll b/ota/System.Data.DataSetExtensions.dll new file mode 100644 index 0000000..6ed1c32 Binary files /dev/null and b/ota/System.Data.DataSetExtensions.dll differ diff --git a/ota/System.Data.dll b/ota/System.Data.dll new file mode 100644 index 0000000..9ba92e3 Binary files /dev/null and b/ota/System.Data.dll differ diff --git a/ota/System.Diagnostics.Contracts.dll b/ota/System.Diagnostics.Contracts.dll new file mode 100644 index 0000000..0319807 Binary files /dev/null and b/ota/System.Diagnostics.Contracts.dll differ diff --git a/ota/System.Diagnostics.Debug.dll b/ota/System.Diagnostics.Debug.dll new file mode 100644 index 0000000..43a5c7d Binary files /dev/null and b/ota/System.Diagnostics.Debug.dll differ diff --git a/ota/System.Diagnostics.DiagnosticSource.dll b/ota/System.Diagnostics.DiagnosticSource.dll new file mode 100644 index 0000000..aed5420 Binary files /dev/null and b/ota/System.Diagnostics.DiagnosticSource.dll differ diff --git a/ota/System.Diagnostics.FileVersionInfo.dll b/ota/System.Diagnostics.FileVersionInfo.dll new file mode 100644 index 0000000..7486ace Binary files /dev/null and b/ota/System.Diagnostics.FileVersionInfo.dll differ diff --git a/ota/System.Diagnostics.Process.dll b/ota/System.Diagnostics.Process.dll new file mode 100644 index 0000000..68cd2de Binary files /dev/null and b/ota/System.Diagnostics.Process.dll differ diff --git a/ota/System.Diagnostics.StackTrace.dll b/ota/System.Diagnostics.StackTrace.dll new file mode 100644 index 0000000..7c276f1 Binary files /dev/null and b/ota/System.Diagnostics.StackTrace.dll differ diff --git a/ota/System.Diagnostics.TextWriterTraceListener.dll b/ota/System.Diagnostics.TextWriterTraceListener.dll new file mode 100644 index 0000000..b7ffd75 Binary files /dev/null and b/ota/System.Diagnostics.TextWriterTraceListener.dll differ diff --git a/ota/System.Diagnostics.Tools.dll b/ota/System.Diagnostics.Tools.dll new file mode 100644 index 0000000..4be84ec Binary files /dev/null and b/ota/System.Diagnostics.Tools.dll differ diff --git a/ota/System.Diagnostics.TraceSource.dll b/ota/System.Diagnostics.TraceSource.dll new file mode 100644 index 0000000..e764436 Binary files /dev/null and b/ota/System.Diagnostics.TraceSource.dll differ diff --git a/ota/System.Diagnostics.Tracing.dll b/ota/System.Diagnostics.Tracing.dll new file mode 100644 index 0000000..fa79b34 Binary files /dev/null and b/ota/System.Diagnostics.Tracing.dll differ diff --git a/ota/System.Drawing.Primitives.dll b/ota/System.Drawing.Primitives.dll new file mode 100644 index 0000000..3d2d420 Binary files /dev/null and b/ota/System.Drawing.Primitives.dll differ diff --git a/ota/System.Drawing.dll b/ota/System.Drawing.dll new file mode 100644 index 0000000..f8215ee Binary files /dev/null and b/ota/System.Drawing.dll differ diff --git a/ota/System.Dynamic.Runtime.dll b/ota/System.Dynamic.Runtime.dll new file mode 100644 index 0000000..449a3a6 Binary files /dev/null and b/ota/System.Dynamic.Runtime.dll differ diff --git a/ota/System.Formats.Asn1.dll b/ota/System.Formats.Asn1.dll new file mode 100644 index 0000000..c831fdc Binary files /dev/null and b/ota/System.Formats.Asn1.dll differ diff --git a/ota/System.Formats.Tar.dll b/ota/System.Formats.Tar.dll new file mode 100644 index 0000000..bbc09a2 Binary files /dev/null and b/ota/System.Formats.Tar.dll differ diff --git a/ota/System.Globalization.Calendars.dll b/ota/System.Globalization.Calendars.dll new file mode 100644 index 0000000..c1969a3 Binary files /dev/null and b/ota/System.Globalization.Calendars.dll differ diff --git a/ota/System.Globalization.Extensions.dll b/ota/System.Globalization.Extensions.dll new file mode 100644 index 0000000..fbd29fe Binary files /dev/null and b/ota/System.Globalization.Extensions.dll differ diff --git a/ota/System.Globalization.dll b/ota/System.Globalization.dll new file mode 100644 index 0000000..be85e76 Binary files /dev/null and b/ota/System.Globalization.dll differ diff --git a/ota/System.IO.Compression.Brotli.dll b/ota/System.IO.Compression.Brotli.dll new file mode 100644 index 0000000..2af63ea Binary files /dev/null and b/ota/System.IO.Compression.Brotli.dll differ diff --git a/ota/System.IO.Compression.FileSystem.dll b/ota/System.IO.Compression.FileSystem.dll new file mode 100644 index 0000000..9781876 Binary files /dev/null and b/ota/System.IO.Compression.FileSystem.dll differ diff --git a/ota/System.IO.Compression.Native.dll b/ota/System.IO.Compression.Native.dll new file mode 100644 index 0000000..7a59cc4 Binary files /dev/null and b/ota/System.IO.Compression.Native.dll differ diff --git a/ota/System.IO.Compression.ZipFile.dll b/ota/System.IO.Compression.ZipFile.dll new file mode 100644 index 0000000..5999311 Binary files /dev/null and b/ota/System.IO.Compression.ZipFile.dll differ diff --git a/ota/System.IO.Compression.dll b/ota/System.IO.Compression.dll new file mode 100644 index 0000000..aadbd0d Binary files /dev/null and b/ota/System.IO.Compression.dll differ diff --git a/ota/System.IO.FileSystem.AccessControl.dll b/ota/System.IO.FileSystem.AccessControl.dll new file mode 100644 index 0000000..f8385f8 Binary files /dev/null and b/ota/System.IO.FileSystem.AccessControl.dll differ diff --git a/ota/System.IO.FileSystem.DriveInfo.dll b/ota/System.IO.FileSystem.DriveInfo.dll new file mode 100644 index 0000000..df5fd8a Binary files /dev/null and b/ota/System.IO.FileSystem.DriveInfo.dll differ diff --git a/ota/System.IO.FileSystem.Primitives.dll b/ota/System.IO.FileSystem.Primitives.dll new file mode 100644 index 0000000..6ca69d6 Binary files /dev/null and b/ota/System.IO.FileSystem.Primitives.dll differ diff --git a/ota/System.IO.FileSystem.Watcher.dll b/ota/System.IO.FileSystem.Watcher.dll new file mode 100644 index 0000000..671e487 Binary files /dev/null and b/ota/System.IO.FileSystem.Watcher.dll differ diff --git a/ota/System.IO.FileSystem.dll b/ota/System.IO.FileSystem.dll new file mode 100644 index 0000000..8b933fc Binary files /dev/null and b/ota/System.IO.FileSystem.dll differ diff --git a/ota/System.IO.IsolatedStorage.dll b/ota/System.IO.IsolatedStorage.dll new file mode 100644 index 0000000..ea91c45 Binary files /dev/null and b/ota/System.IO.IsolatedStorage.dll differ diff --git a/ota/System.IO.MemoryMappedFiles.dll b/ota/System.IO.MemoryMappedFiles.dll new file mode 100644 index 0000000..05145a7 Binary files /dev/null and b/ota/System.IO.MemoryMappedFiles.dll differ diff --git a/ota/System.IO.Pipes.AccessControl.dll b/ota/System.IO.Pipes.AccessControl.dll new file mode 100644 index 0000000..ff3450c Binary files /dev/null and b/ota/System.IO.Pipes.AccessControl.dll differ diff --git a/ota/System.IO.Pipes.dll b/ota/System.IO.Pipes.dll new file mode 100644 index 0000000..197fa42 Binary files /dev/null and b/ota/System.IO.Pipes.dll differ diff --git a/ota/System.IO.UnmanagedMemoryStream.dll b/ota/System.IO.UnmanagedMemoryStream.dll new file mode 100644 index 0000000..a9ae313 Binary files /dev/null and b/ota/System.IO.UnmanagedMemoryStream.dll differ diff --git a/ota/System.IO.dll b/ota/System.IO.dll new file mode 100644 index 0000000..cc6c5fc Binary files /dev/null and b/ota/System.IO.dll differ diff --git a/ota/System.Linq.Expressions.dll b/ota/System.Linq.Expressions.dll new file mode 100644 index 0000000..1739d93 Binary files /dev/null and b/ota/System.Linq.Expressions.dll differ diff --git a/ota/System.Linq.Parallel.dll b/ota/System.Linq.Parallel.dll new file mode 100644 index 0000000..48d1388 Binary files /dev/null and b/ota/System.Linq.Parallel.dll differ diff --git a/ota/System.Linq.Queryable.dll b/ota/System.Linq.Queryable.dll new file mode 100644 index 0000000..90998d0 Binary files /dev/null and b/ota/System.Linq.Queryable.dll differ diff --git a/ota/System.Linq.dll b/ota/System.Linq.dll new file mode 100644 index 0000000..ebb249d Binary files /dev/null and b/ota/System.Linq.dll differ diff --git a/ota/System.Memory.dll b/ota/System.Memory.dll new file mode 100644 index 0000000..80db64d Binary files /dev/null and b/ota/System.Memory.dll differ diff --git a/ota/System.Net.Http.Json.dll b/ota/System.Net.Http.Json.dll new file mode 100644 index 0000000..4a06d3f Binary files /dev/null and b/ota/System.Net.Http.Json.dll differ diff --git a/ota/System.Net.Http.dll b/ota/System.Net.Http.dll new file mode 100644 index 0000000..51d8d36 Binary files /dev/null and b/ota/System.Net.Http.dll differ diff --git a/ota/System.Net.HttpListener.dll b/ota/System.Net.HttpListener.dll new file mode 100644 index 0000000..c45f905 Binary files /dev/null and b/ota/System.Net.HttpListener.dll differ diff --git a/ota/System.Net.Mail.dll b/ota/System.Net.Mail.dll new file mode 100644 index 0000000..9ccbac4 Binary files /dev/null and b/ota/System.Net.Mail.dll differ diff --git a/ota/System.Net.NameResolution.dll b/ota/System.Net.NameResolution.dll new file mode 100644 index 0000000..f66f856 Binary files /dev/null and b/ota/System.Net.NameResolution.dll differ diff --git a/ota/System.Net.NetworkInformation.dll b/ota/System.Net.NetworkInformation.dll new file mode 100644 index 0000000..8f32bb4 Binary files /dev/null and b/ota/System.Net.NetworkInformation.dll differ diff --git a/ota/System.Net.Ping.dll b/ota/System.Net.Ping.dll new file mode 100644 index 0000000..489733f Binary files /dev/null and b/ota/System.Net.Ping.dll differ diff --git a/ota/System.Net.Primitives.dll b/ota/System.Net.Primitives.dll new file mode 100644 index 0000000..daed71b Binary files /dev/null and b/ota/System.Net.Primitives.dll differ diff --git a/ota/System.Net.Quic.dll b/ota/System.Net.Quic.dll new file mode 100644 index 0000000..e751a9b Binary files /dev/null and b/ota/System.Net.Quic.dll differ diff --git a/ota/System.Net.Requests.dll b/ota/System.Net.Requests.dll new file mode 100644 index 0000000..72758d5 Binary files /dev/null and b/ota/System.Net.Requests.dll differ diff --git a/ota/System.Net.Security.dll b/ota/System.Net.Security.dll new file mode 100644 index 0000000..65ec6d5 Binary files /dev/null and b/ota/System.Net.Security.dll differ diff --git a/ota/System.Net.ServicePoint.dll b/ota/System.Net.ServicePoint.dll new file mode 100644 index 0000000..2997deb Binary files /dev/null and b/ota/System.Net.ServicePoint.dll differ diff --git a/ota/System.Net.Sockets.dll b/ota/System.Net.Sockets.dll new file mode 100644 index 0000000..e041a9f Binary files /dev/null and b/ota/System.Net.Sockets.dll differ diff --git a/ota/System.Net.WebClient.dll b/ota/System.Net.WebClient.dll new file mode 100644 index 0000000..f8742b1 Binary files /dev/null and b/ota/System.Net.WebClient.dll differ diff --git a/ota/System.Net.WebHeaderCollection.dll b/ota/System.Net.WebHeaderCollection.dll new file mode 100644 index 0000000..3204f62 Binary files /dev/null and b/ota/System.Net.WebHeaderCollection.dll differ diff --git a/ota/System.Net.WebProxy.dll b/ota/System.Net.WebProxy.dll new file mode 100644 index 0000000..3fc8632 Binary files /dev/null and b/ota/System.Net.WebProxy.dll differ diff --git a/ota/System.Net.WebSockets.Client.dll b/ota/System.Net.WebSockets.Client.dll new file mode 100644 index 0000000..a5b844a Binary files /dev/null and b/ota/System.Net.WebSockets.Client.dll differ diff --git a/ota/System.Net.WebSockets.dll b/ota/System.Net.WebSockets.dll new file mode 100644 index 0000000..efeca4c Binary files /dev/null and b/ota/System.Net.WebSockets.dll differ diff --git a/ota/System.Net.dll b/ota/System.Net.dll new file mode 100644 index 0000000..45939e4 Binary files /dev/null and b/ota/System.Net.dll differ diff --git a/ota/System.Numerics.Vectors.dll b/ota/System.Numerics.Vectors.dll new file mode 100644 index 0000000..57278f0 Binary files /dev/null and b/ota/System.Numerics.Vectors.dll differ diff --git a/ota/System.Numerics.dll b/ota/System.Numerics.dll new file mode 100644 index 0000000..f835451 Binary files /dev/null and b/ota/System.Numerics.dll differ diff --git a/ota/System.ObjectModel.dll b/ota/System.ObjectModel.dll new file mode 100644 index 0000000..8666227 Binary files /dev/null and b/ota/System.ObjectModel.dll differ diff --git a/ota/System.Private.CoreLib.dll b/ota/System.Private.CoreLib.dll new file mode 100644 index 0000000..a0f1734 Binary files /dev/null and b/ota/System.Private.CoreLib.dll differ diff --git a/ota/System.Private.DataContractSerialization.dll b/ota/System.Private.DataContractSerialization.dll new file mode 100644 index 0000000..92ecb10 Binary files /dev/null and b/ota/System.Private.DataContractSerialization.dll differ diff --git a/ota/System.Private.Uri.dll b/ota/System.Private.Uri.dll new file mode 100644 index 0000000..2bb662e Binary files /dev/null and b/ota/System.Private.Uri.dll differ diff --git a/ota/System.Private.Xml.Linq.dll b/ota/System.Private.Xml.Linq.dll new file mode 100644 index 0000000..ff9bf10 Binary files /dev/null and b/ota/System.Private.Xml.Linq.dll differ diff --git a/ota/System.Private.Xml.dll b/ota/System.Private.Xml.dll new file mode 100644 index 0000000..fc1e9b2 Binary files /dev/null and b/ota/System.Private.Xml.dll differ diff --git a/ota/System.Reflection.DispatchProxy.dll b/ota/System.Reflection.DispatchProxy.dll new file mode 100644 index 0000000..c35ef2f Binary files /dev/null and b/ota/System.Reflection.DispatchProxy.dll differ diff --git a/ota/System.Reflection.Emit.ILGeneration.dll b/ota/System.Reflection.Emit.ILGeneration.dll new file mode 100644 index 0000000..6f3a470 Binary files /dev/null and b/ota/System.Reflection.Emit.ILGeneration.dll differ diff --git a/ota/System.Reflection.Emit.Lightweight.dll b/ota/System.Reflection.Emit.Lightweight.dll new file mode 100644 index 0000000..511a116 Binary files /dev/null and b/ota/System.Reflection.Emit.Lightweight.dll differ diff --git a/ota/System.Reflection.Emit.dll b/ota/System.Reflection.Emit.dll new file mode 100644 index 0000000..95d8fce Binary files /dev/null and b/ota/System.Reflection.Emit.dll differ diff --git a/ota/System.Reflection.Extensions.dll b/ota/System.Reflection.Extensions.dll new file mode 100644 index 0000000..1c00fac Binary files /dev/null and b/ota/System.Reflection.Extensions.dll differ diff --git a/ota/System.Reflection.Metadata.dll b/ota/System.Reflection.Metadata.dll new file mode 100644 index 0000000..bc1e6a6 Binary files /dev/null and b/ota/System.Reflection.Metadata.dll differ diff --git a/ota/System.Reflection.Primitives.dll b/ota/System.Reflection.Primitives.dll new file mode 100644 index 0000000..0c75a24 Binary files /dev/null and b/ota/System.Reflection.Primitives.dll differ diff --git a/ota/System.Reflection.TypeExtensions.dll b/ota/System.Reflection.TypeExtensions.dll new file mode 100644 index 0000000..9e78bb6 Binary files /dev/null and b/ota/System.Reflection.TypeExtensions.dll differ diff --git a/ota/System.Reflection.dll b/ota/System.Reflection.dll new file mode 100644 index 0000000..2fc90a6 Binary files /dev/null and b/ota/System.Reflection.dll differ diff --git a/ota/System.Resources.Reader.dll b/ota/System.Resources.Reader.dll new file mode 100644 index 0000000..e2369d7 Binary files /dev/null and b/ota/System.Resources.Reader.dll differ diff --git a/ota/System.Resources.ResourceManager.dll b/ota/System.Resources.ResourceManager.dll new file mode 100644 index 0000000..7add91d Binary files /dev/null and b/ota/System.Resources.ResourceManager.dll differ diff --git a/ota/System.Resources.Writer.dll b/ota/System.Resources.Writer.dll new file mode 100644 index 0000000..afba76f Binary files /dev/null and b/ota/System.Resources.Writer.dll differ diff --git a/ota/System.Runtime.CompilerServices.Unsafe.dll b/ota/System.Runtime.CompilerServices.Unsafe.dll new file mode 100644 index 0000000..8b50af0 Binary files /dev/null and b/ota/System.Runtime.CompilerServices.Unsafe.dll differ diff --git a/ota/System.Runtime.CompilerServices.VisualC.dll b/ota/System.Runtime.CompilerServices.VisualC.dll new file mode 100644 index 0000000..3e2043e Binary files /dev/null and b/ota/System.Runtime.CompilerServices.VisualC.dll differ diff --git a/ota/System.Runtime.Extensions.dll b/ota/System.Runtime.Extensions.dll new file mode 100644 index 0000000..c049706 Binary files /dev/null and b/ota/System.Runtime.Extensions.dll differ diff --git a/ota/System.Runtime.Handles.dll b/ota/System.Runtime.Handles.dll new file mode 100644 index 0000000..147ad9f Binary files /dev/null and b/ota/System.Runtime.Handles.dll differ diff --git a/ota/System.Runtime.InteropServices.JavaScript.dll b/ota/System.Runtime.InteropServices.JavaScript.dll new file mode 100644 index 0000000..6a988a8 Binary files /dev/null and b/ota/System.Runtime.InteropServices.JavaScript.dll differ diff --git a/ota/System.Runtime.InteropServices.RuntimeInformation.dll b/ota/System.Runtime.InteropServices.RuntimeInformation.dll new file mode 100644 index 0000000..f748fb2 Binary files /dev/null and b/ota/System.Runtime.InteropServices.RuntimeInformation.dll differ diff --git a/ota/System.Runtime.InteropServices.dll b/ota/System.Runtime.InteropServices.dll new file mode 100644 index 0000000..2fc38f8 Binary files /dev/null and b/ota/System.Runtime.InteropServices.dll differ diff --git a/ota/System.Runtime.Intrinsics.dll b/ota/System.Runtime.Intrinsics.dll new file mode 100644 index 0000000..4427291 Binary files /dev/null and b/ota/System.Runtime.Intrinsics.dll differ diff --git a/ota/System.Runtime.Loader.dll b/ota/System.Runtime.Loader.dll new file mode 100644 index 0000000..dcfa01e Binary files /dev/null and b/ota/System.Runtime.Loader.dll differ diff --git a/ota/System.Runtime.Numerics.dll b/ota/System.Runtime.Numerics.dll new file mode 100644 index 0000000..cf58d25 Binary files /dev/null and b/ota/System.Runtime.Numerics.dll differ diff --git a/ota/System.Runtime.Serialization.Formatters.dll b/ota/System.Runtime.Serialization.Formatters.dll new file mode 100644 index 0000000..26b91b7 Binary files /dev/null and b/ota/System.Runtime.Serialization.Formatters.dll differ diff --git a/ota/System.Runtime.Serialization.Json.dll b/ota/System.Runtime.Serialization.Json.dll new file mode 100644 index 0000000..b74b331 Binary files /dev/null and b/ota/System.Runtime.Serialization.Json.dll differ diff --git a/ota/System.Runtime.Serialization.Primitives.dll b/ota/System.Runtime.Serialization.Primitives.dll new file mode 100644 index 0000000..46339ca Binary files /dev/null and b/ota/System.Runtime.Serialization.Primitives.dll differ diff --git a/ota/System.Runtime.Serialization.Xml.dll b/ota/System.Runtime.Serialization.Xml.dll new file mode 100644 index 0000000..c3acc13 Binary files /dev/null and b/ota/System.Runtime.Serialization.Xml.dll differ diff --git a/ota/System.Runtime.Serialization.dll b/ota/System.Runtime.Serialization.dll new file mode 100644 index 0000000..3aafd29 Binary files /dev/null and b/ota/System.Runtime.Serialization.dll differ diff --git a/ota/System.Runtime.dll b/ota/System.Runtime.dll new file mode 100644 index 0000000..690589a Binary files /dev/null and b/ota/System.Runtime.dll differ diff --git a/ota/System.Security.AccessControl.dll b/ota/System.Security.AccessControl.dll new file mode 100644 index 0000000..229348f Binary files /dev/null and b/ota/System.Security.AccessControl.dll differ diff --git a/ota/System.Security.Claims.dll b/ota/System.Security.Claims.dll new file mode 100644 index 0000000..1311604 Binary files /dev/null and b/ota/System.Security.Claims.dll differ diff --git a/ota/System.Security.Cryptography.Algorithms.dll b/ota/System.Security.Cryptography.Algorithms.dll new file mode 100644 index 0000000..797e247 Binary files /dev/null and b/ota/System.Security.Cryptography.Algorithms.dll differ diff --git a/ota/System.Security.Cryptography.Cng.dll b/ota/System.Security.Cryptography.Cng.dll new file mode 100644 index 0000000..6a43883 Binary files /dev/null and b/ota/System.Security.Cryptography.Cng.dll differ diff --git a/ota/System.Security.Cryptography.Csp.dll b/ota/System.Security.Cryptography.Csp.dll new file mode 100644 index 0000000..a64feda Binary files /dev/null and b/ota/System.Security.Cryptography.Csp.dll differ diff --git a/ota/System.Security.Cryptography.Encoding.dll b/ota/System.Security.Cryptography.Encoding.dll new file mode 100644 index 0000000..9ed288a Binary files /dev/null and b/ota/System.Security.Cryptography.Encoding.dll differ diff --git a/ota/System.Security.Cryptography.OpenSsl.dll b/ota/System.Security.Cryptography.OpenSsl.dll new file mode 100644 index 0000000..71e234c Binary files /dev/null and b/ota/System.Security.Cryptography.OpenSsl.dll differ diff --git a/ota/System.Security.Cryptography.Primitives.dll b/ota/System.Security.Cryptography.Primitives.dll new file mode 100644 index 0000000..31a46ea Binary files /dev/null and b/ota/System.Security.Cryptography.Primitives.dll differ diff --git a/ota/System.Security.Cryptography.X509Certificates.dll b/ota/System.Security.Cryptography.X509Certificates.dll new file mode 100644 index 0000000..22c5a4f Binary files /dev/null and b/ota/System.Security.Cryptography.X509Certificates.dll differ diff --git a/ota/System.Security.Cryptography.dll b/ota/System.Security.Cryptography.dll new file mode 100644 index 0000000..96ca81e Binary files /dev/null and b/ota/System.Security.Cryptography.dll differ diff --git a/ota/System.Security.Principal.Windows.dll b/ota/System.Security.Principal.Windows.dll new file mode 100644 index 0000000..c1c7cdc Binary files /dev/null and b/ota/System.Security.Principal.Windows.dll differ diff --git a/ota/System.Security.Principal.dll b/ota/System.Security.Principal.dll new file mode 100644 index 0000000..895eada Binary files /dev/null and b/ota/System.Security.Principal.dll differ diff --git a/ota/System.Security.SecureString.dll b/ota/System.Security.SecureString.dll new file mode 100644 index 0000000..caea23d Binary files /dev/null and b/ota/System.Security.SecureString.dll differ diff --git a/ota/System.Security.dll b/ota/System.Security.dll new file mode 100644 index 0000000..8db42bf Binary files /dev/null and b/ota/System.Security.dll differ diff --git a/ota/System.ServiceModel.Web.dll b/ota/System.ServiceModel.Web.dll new file mode 100644 index 0000000..49cad0a Binary files /dev/null and b/ota/System.ServiceModel.Web.dll differ diff --git a/ota/System.ServiceProcess.dll b/ota/System.ServiceProcess.dll new file mode 100644 index 0000000..622a638 Binary files /dev/null and b/ota/System.ServiceProcess.dll differ diff --git a/ota/System.Text.Encoding.CodePages.dll b/ota/System.Text.Encoding.CodePages.dll new file mode 100644 index 0000000..13a18fc Binary files /dev/null and b/ota/System.Text.Encoding.CodePages.dll differ diff --git a/ota/System.Text.Encoding.Extensions.dll b/ota/System.Text.Encoding.Extensions.dll new file mode 100644 index 0000000..b7f89d5 Binary files /dev/null and b/ota/System.Text.Encoding.Extensions.dll differ diff --git a/ota/System.Text.Encoding.dll b/ota/System.Text.Encoding.dll new file mode 100644 index 0000000..3d67751 Binary files /dev/null and b/ota/System.Text.Encoding.dll differ diff --git a/ota/System.Text.Encodings.Web.dll b/ota/System.Text.Encodings.Web.dll new file mode 100644 index 0000000..c4de251 Binary files /dev/null and b/ota/System.Text.Encodings.Web.dll differ diff --git a/ota/System.Text.Json.dll b/ota/System.Text.Json.dll new file mode 100644 index 0000000..c0dad47 Binary files /dev/null and b/ota/System.Text.Json.dll differ diff --git a/ota/System.Text.RegularExpressions.dll b/ota/System.Text.RegularExpressions.dll new file mode 100644 index 0000000..770e54c Binary files /dev/null and b/ota/System.Text.RegularExpressions.dll differ diff --git a/ota/System.Threading.Channels.dll b/ota/System.Threading.Channels.dll new file mode 100644 index 0000000..e63b081 Binary files /dev/null and b/ota/System.Threading.Channels.dll differ diff --git a/ota/System.Threading.Overlapped.dll b/ota/System.Threading.Overlapped.dll new file mode 100644 index 0000000..1ff9d93 Binary files /dev/null and b/ota/System.Threading.Overlapped.dll differ diff --git a/ota/System.Threading.Tasks.Dataflow.dll b/ota/System.Threading.Tasks.Dataflow.dll new file mode 100644 index 0000000..431d678 Binary files /dev/null and b/ota/System.Threading.Tasks.Dataflow.dll differ diff --git a/ota/System.Threading.Tasks.Extensions.dll b/ota/System.Threading.Tasks.Extensions.dll new file mode 100644 index 0000000..66f069d Binary files /dev/null and b/ota/System.Threading.Tasks.Extensions.dll differ diff --git a/ota/System.Threading.Tasks.Parallel.dll b/ota/System.Threading.Tasks.Parallel.dll new file mode 100644 index 0000000..273f43f Binary files /dev/null and b/ota/System.Threading.Tasks.Parallel.dll differ diff --git a/ota/System.Threading.Tasks.dll b/ota/System.Threading.Tasks.dll new file mode 100644 index 0000000..9896f1f Binary files /dev/null and b/ota/System.Threading.Tasks.dll differ diff --git a/ota/System.Threading.Thread.dll b/ota/System.Threading.Thread.dll new file mode 100644 index 0000000..fdca24b Binary files /dev/null and b/ota/System.Threading.Thread.dll differ diff --git a/ota/System.Threading.ThreadPool.dll b/ota/System.Threading.ThreadPool.dll new file mode 100644 index 0000000..a538c64 Binary files /dev/null and b/ota/System.Threading.ThreadPool.dll differ diff --git a/ota/System.Threading.Timer.dll b/ota/System.Threading.Timer.dll new file mode 100644 index 0000000..9cb1891 Binary files /dev/null and b/ota/System.Threading.Timer.dll differ diff --git a/ota/System.Threading.dll b/ota/System.Threading.dll new file mode 100644 index 0000000..062359d Binary files /dev/null and b/ota/System.Threading.dll differ diff --git a/ota/System.Transactions.Local.dll b/ota/System.Transactions.Local.dll new file mode 100644 index 0000000..7155eb2 Binary files /dev/null and b/ota/System.Transactions.Local.dll differ diff --git a/ota/System.Transactions.dll b/ota/System.Transactions.dll new file mode 100644 index 0000000..72cac5b Binary files /dev/null and b/ota/System.Transactions.dll differ diff --git a/ota/System.ValueTuple.dll b/ota/System.ValueTuple.dll new file mode 100644 index 0000000..63b1649 Binary files /dev/null and b/ota/System.ValueTuple.dll differ diff --git a/ota/System.Web.HttpUtility.dll b/ota/System.Web.HttpUtility.dll new file mode 100644 index 0000000..23782d8 Binary files /dev/null and b/ota/System.Web.HttpUtility.dll differ diff --git a/ota/System.Web.dll b/ota/System.Web.dll new file mode 100644 index 0000000..f4a95d9 Binary files /dev/null and b/ota/System.Web.dll differ diff --git a/ota/System.Windows.dll b/ota/System.Windows.dll new file mode 100644 index 0000000..6c210b0 Binary files /dev/null and b/ota/System.Windows.dll differ diff --git a/ota/System.Xml.Linq.dll b/ota/System.Xml.Linq.dll new file mode 100644 index 0000000..e8d636a Binary files /dev/null and b/ota/System.Xml.Linq.dll differ diff --git a/ota/System.Xml.ReaderWriter.dll b/ota/System.Xml.ReaderWriter.dll new file mode 100644 index 0000000..def13d1 Binary files /dev/null and b/ota/System.Xml.ReaderWriter.dll differ diff --git a/ota/System.Xml.Serialization.dll b/ota/System.Xml.Serialization.dll new file mode 100644 index 0000000..3563d5a Binary files /dev/null and b/ota/System.Xml.Serialization.dll differ diff --git a/ota/System.Xml.XDocument.dll b/ota/System.Xml.XDocument.dll new file mode 100644 index 0000000..322e9fc Binary files /dev/null and b/ota/System.Xml.XDocument.dll differ diff --git a/ota/System.Xml.XPath.XDocument.dll b/ota/System.Xml.XPath.XDocument.dll new file mode 100644 index 0000000..993284e Binary files /dev/null and b/ota/System.Xml.XPath.XDocument.dll differ diff --git a/ota/System.Xml.XPath.dll b/ota/System.Xml.XPath.dll new file mode 100644 index 0000000..bc88b58 Binary files /dev/null and b/ota/System.Xml.XPath.dll differ diff --git a/ota/System.Xml.XmlDocument.dll b/ota/System.Xml.XmlDocument.dll new file mode 100644 index 0000000..3e5e274 Binary files /dev/null and b/ota/System.Xml.XmlDocument.dll differ diff --git a/ota/System.Xml.XmlSerializer.dll b/ota/System.Xml.XmlSerializer.dll new file mode 100644 index 0000000..918d4a9 Binary files /dev/null and b/ota/System.Xml.XmlSerializer.dll differ diff --git a/ota/System.Xml.dll b/ota/System.Xml.dll new file mode 100644 index 0000000..7e29301 Binary files /dev/null and b/ota/System.Xml.dll differ diff --git a/ota/System.dll b/ota/System.dll new file mode 100644 index 0000000..714850b Binary files /dev/null and b/ota/System.dll differ diff --git a/ota/WindowsBase.dll b/ota/WindowsBase.dll new file mode 100644 index 0000000..5b29417 Binary files /dev/null and b/ota/WindowsBase.dll differ diff --git a/ota/clretwrc.dll b/ota/clretwrc.dll new file mode 100644 index 0000000..a736e6f Binary files /dev/null and b/ota/clretwrc.dll differ diff --git a/ota/clrgc.dll b/ota/clrgc.dll new file mode 100644 index 0000000..f339d1a Binary files /dev/null and b/ota/clrgc.dll differ diff --git a/ota/clrjit.dll b/ota/clrjit.dll new file mode 100644 index 0000000..dd46ca6 Binary files /dev/null and b/ota/clrjit.dll differ diff --git a/ota/coreclr.dll b/ota/coreclr.dll new file mode 100644 index 0000000..fffc10f Binary files /dev/null and b/ota/coreclr.dll differ diff --git a/ota/createdump.exe b/ota/createdump.exe new file mode 100644 index 0000000..d79771d Binary files /dev/null and b/ota/createdump.exe differ diff --git a/ota/data/app.so b/ota/data/app.so new file mode 100644 index 0000000..ed140f9 Binary files /dev/null and b/ota/data/app.so differ diff --git a/ota/data/flutter_assets/AssetManifest.bin b/ota/data/flutter_assets/AssetManifest.bin new file mode 100644 index 0000000..c44547c --- /dev/null +++ b/ota/data/flutter_assets/AssetManifest.bin @@ -0,0 +1 @@ + images/mhunt_thumbnail.png  assetimages/mhunt_thumbnail.pngimages/pop3d_thumbnail.png  assetimages/pop3d_thumbnail.pngimages/token.png  assetimages/token.pngimages/vault.png  assetimages/vault.png2packages/cupertino_icons/assets/CupertinoIcons.ttf  asset2packages/cupertino_icons/assets/CupertinoIcons.ttf \ No newline at end of file diff --git a/ota/data/flutter_assets/AssetManifest.json b/ota/data/flutter_assets/AssetManifest.json new file mode 100644 index 0000000..eaf02ff --- /dev/null +++ b/ota/data/flutter_assets/AssetManifest.json @@ -0,0 +1 @@ +{"images/mhunt_thumbnail.png":["images/mhunt_thumbnail.png"],"images/pop3d_thumbnail.png":["images/pop3d_thumbnail.png"],"images/token.png":["images/token.png"],"images/vault.png":["images/vault.png"],"packages/cupertino_icons/assets/CupertinoIcons.ttf":["packages/cupertino_icons/assets/CupertinoIcons.ttf"]} \ No newline at end of file diff --git a/ota/data/flutter_assets/FontManifest.json b/ota/data/flutter_assets/FontManifest.json new file mode 100644 index 0000000..464ab58 --- /dev/null +++ b/ota/data/flutter_assets/FontManifest.json @@ -0,0 +1 @@ +[{"family":"MaterialIcons","fonts":[{"asset":"fonts/MaterialIcons-Regular.otf"}]},{"family":"packages/cupertino_icons/CupertinoIcons","fonts":[{"asset":"packages/cupertino_icons/assets/CupertinoIcons.ttf"}]}] \ No newline at end of file diff --git a/ota/data/flutter_assets/NOTICES.Z b/ota/data/flutter_assets/NOTICES.Z new file mode 100644 index 0000000..7fd7d68 Binary files /dev/null and b/ota/data/flutter_assets/NOTICES.Z differ diff --git a/ota/data/flutter_assets/fonts/MaterialIcons-Regular.otf b/ota/data/flutter_assets/fonts/MaterialIcons-Regular.otf new file mode 100644 index 0000000..8c99266 Binary files /dev/null and b/ota/data/flutter_assets/fonts/MaterialIcons-Regular.otf differ diff --git a/ota/data/flutter_assets/images/mhunt_thumbnail.png b/ota/data/flutter_assets/images/mhunt_thumbnail.png new file mode 100644 index 0000000..b4f9274 Binary files /dev/null and b/ota/data/flutter_assets/images/mhunt_thumbnail.png differ diff --git a/ota/data/flutter_assets/images/pop3d_thumbnail.png b/ota/data/flutter_assets/images/pop3d_thumbnail.png new file mode 100644 index 0000000..490c9e4 Binary files /dev/null and b/ota/data/flutter_assets/images/pop3d_thumbnail.png differ diff --git a/ota/data/flutter_assets/images/token.png b/ota/data/flutter_assets/images/token.png new file mode 100644 index 0000000..44af3f8 Binary files /dev/null and b/ota/data/flutter_assets/images/token.png differ diff --git a/ota/data/flutter_assets/images/vault.png b/ota/data/flutter_assets/images/vault.png new file mode 100644 index 0000000..b55861d Binary files /dev/null and b/ota/data/flutter_assets/images/vault.png differ diff --git a/ota/data/flutter_assets/packages/cupertino_icons/assets/CupertinoIcons.ttf b/ota/data/flutter_assets/packages/cupertino_icons/assets/CupertinoIcons.ttf new file mode 100644 index 0000000..d580ce7 Binary files /dev/null and b/ota/data/flutter_assets/packages/cupertino_icons/assets/CupertinoIcons.ttf differ diff --git a/ota/data/flutter_assets/shaders/ink_sparkle.frag b/ota/data/flutter_assets/shaders/ink_sparkle.frag new file mode 100644 index 0000000..3e070c0 Binary files /dev/null and b/ota/data/flutter_assets/shaders/ink_sparkle.frag differ diff --git a/ota/data/icudtl.dat b/ota/data/icudtl.dat new file mode 100644 index 0000000..466abd8 Binary files /dev/null and b/ota/data/icudtl.dat differ diff --git a/ota/flutter_windows.dll b/ota/flutter_windows.dll new file mode 100644 index 0000000..da80ac6 Binary files /dev/null and b/ota/flutter_windows.dll differ diff --git a/ota/hashes.json b/ota/hashes.json new file mode 100644 index 0000000..3277649 --- /dev/null +++ b/ota/hashes.json @@ -0,0 +1 @@ +{"/flutter_windows.dll":"6576073f0d38612d1b86b6edb38eaaf4","/mhuntla.exe":"c744e5138da7dc609ef0828014514c60","/url_launcher_windows_plugin.dll":"8f5ecb0564854eb958b8dcad5cf971ca","/data/app.so":"f869901c3ab3495154145b2a78d65c93","/data/icudtl.dat":"da48e432fe61f451154f0715b2a7b174","/data/flutter_assets/AssetManifest.bin":"739dbd667d030bde9399f30a6368e3c1","/data/flutter_assets/AssetManifest.json":"a55f95c1abaa39e733fac683658904b5","/data/flutter_assets/FontManifest.json":"dc3d03800ccca4601324923c0b1d6d57","/data/flutter_assets/NOTICES.Z":"e3b46face6f15260e6b41d2341b7fd6c","/data/flutter_assets/fonts/MaterialIcons-Regular.otf":"e7069dfd19b331be16bed984668fe080","/data/flutter_assets/images/mhunt_thumbnail.png":"126519dd2917e1ab5ea93067dfacbb36","/data/flutter_assets/images/pop3d_thumbnail.png":"7921aff0db0505a9647df8924b2563b0","/data/flutter_assets/images/token.png":"4f4e9a5277e4236807d2f2986d270370","/data/flutter_assets/images/vault.png":"9ec5a3e2e9e1536fce12e3f597588712","/data/flutter_assets/shaders/ink_sparkle.frag":"72c7dc565064421218ee8ee3c8def1c0","/data/flutter_assets/packages/cupertino_icons/assets/CupertinoIcons.ttf":"b93248a553f9e8bc17f1065929d5934b"} \ No newline at end of file diff --git a/ota/hostfxr.dll b/ota/hostfxr.dll new file mode 100644 index 0000000..6f6fcd2 Binary files /dev/null and b/ota/hostfxr.dll differ diff --git a/ota/hostpolicy.dll b/ota/hostpolicy.dll new file mode 100644 index 0000000..0bb8b34 Binary files /dev/null and b/ota/hostpolicy.dll differ diff --git a/ota/mhuntla.exe b/ota/mhuntla.exe new file mode 100644 index 0000000..70d6155 Binary files /dev/null and b/ota/mhuntla.exe differ diff --git a/ota/mscordaccore.dll b/ota/mscordaccore.dll new file mode 100644 index 0000000..3e1af71 Binary files /dev/null and b/ota/mscordaccore.dll differ diff --git a/ota/mscordaccore_amd64_amd64_8.0.424.16909.dll b/ota/mscordaccore_amd64_amd64_8.0.424.16909.dll new file mode 100644 index 0000000..3e1af71 Binary files /dev/null and b/ota/mscordaccore_amd64_amd64_8.0.424.16909.dll differ diff --git a/ota/mscordbi.dll b/ota/mscordbi.dll new file mode 100644 index 0000000..0523bbd Binary files /dev/null and b/ota/mscordbi.dll differ diff --git a/ota/mscorlib.dll b/ota/mscorlib.dll new file mode 100644 index 0000000..6a1653f Binary files /dev/null and b/ota/mscorlib.dll differ diff --git a/ota/mscorrc.dll b/ota/mscorrc.dll new file mode 100644 index 0000000..971fea9 Binary files /dev/null and b/ota/mscorrc.dll differ diff --git a/ota/msquic.dll b/ota/msquic.dll new file mode 100644 index 0000000..2cfcc11 Binary files /dev/null and b/ota/msquic.dll differ diff --git a/ota/netstandard.dll b/ota/netstandard.dll new file mode 100644 index 0000000..dc68d9b Binary files /dev/null and b/ota/netstandard.dll differ diff --git a/ota/ota_wrapper_v2.deps.json b/ota/ota_wrapper_v2.deps.json new file mode 100644 index 0000000..a561ecb --- /dev/null +++ b/ota/ota_wrapper_v2.deps.json @@ -0,0 +1,784 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v8.0/win-x64", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v8.0": {}, + ".NETCoreApp,Version=v8.0/win-x64": { + "ota_wrapper_v2/1.0.0": { + "dependencies": { + "Microsoft.NET.ILLink.Tasks": "8.0.4", + "Newtonsoft.Json": "13.0.3", + "runtimepack.Microsoft.NETCore.App.Runtime.win-x64": "8.0.4" + }, + "runtime": { + "ota_wrapper_v2.dll": {} + } + }, + "runtimepack.Microsoft.NETCore.App.Runtime.win-x64/8.0.4": { + "runtime": { + "Microsoft.CSharp.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "Microsoft.VisualBasic.Core.dll": { + "assemblyVersion": "13.0.0.0", + "fileVersion": "13.0.424.16909" + }, + "Microsoft.VisualBasic.dll": { + "assemblyVersion": "10.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "Microsoft.Win32.Primitives.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "Microsoft.Win32.Registry.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.AppContext.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Buffers.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Collections.Concurrent.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Collections.Immutable.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Collections.NonGeneric.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Collections.Specialized.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Collections.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.ComponentModel.Annotations.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.ComponentModel.DataAnnotations.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.ComponentModel.EventBasedAsync.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.ComponentModel.Primitives.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.ComponentModel.TypeConverter.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.ComponentModel.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Configuration.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Console.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Core.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Data.Common.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Data.DataSetExtensions.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Data.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Diagnostics.Contracts.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Diagnostics.Debug.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Diagnostics.DiagnosticSource.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Diagnostics.FileVersionInfo.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Diagnostics.Process.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Diagnostics.StackTrace.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Diagnostics.TextWriterTraceListener.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Diagnostics.Tools.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Diagnostics.TraceSource.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Diagnostics.Tracing.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Drawing.Primitives.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Drawing.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Dynamic.Runtime.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Formats.Asn1.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Formats.Tar.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Globalization.Calendars.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Globalization.Extensions.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Globalization.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.IO.Compression.Brotli.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.IO.Compression.FileSystem.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.IO.Compression.ZipFile.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.IO.Compression.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.IO.FileSystem.AccessControl.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.IO.FileSystem.DriveInfo.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.IO.FileSystem.Primitives.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.IO.FileSystem.Watcher.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.IO.FileSystem.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.IO.IsolatedStorage.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.IO.MemoryMappedFiles.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.IO.Pipes.AccessControl.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.IO.Pipes.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.IO.UnmanagedMemoryStream.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.IO.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Linq.Expressions.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Linq.Parallel.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Linq.Queryable.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Linq.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Memory.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Net.Http.Json.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Net.Http.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Net.HttpListener.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Net.Mail.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Net.NameResolution.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Net.NetworkInformation.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Net.Ping.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Net.Primitives.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Net.Quic.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Net.Requests.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Net.Security.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Net.ServicePoint.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Net.Sockets.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Net.WebClient.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Net.WebHeaderCollection.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Net.WebProxy.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Net.WebSockets.Client.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Net.WebSockets.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Net.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Numerics.Vectors.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Numerics.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.ObjectModel.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Private.CoreLib.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Private.DataContractSerialization.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Private.Uri.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Private.Xml.Linq.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Private.Xml.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Reflection.DispatchProxy.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Reflection.Emit.ILGeneration.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Reflection.Emit.Lightweight.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Reflection.Emit.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Reflection.Extensions.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Reflection.Metadata.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Reflection.Primitives.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Reflection.TypeExtensions.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Reflection.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Resources.Reader.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Resources.ResourceManager.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Resources.Writer.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Runtime.CompilerServices.Unsafe.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Runtime.CompilerServices.VisualC.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Runtime.Extensions.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Runtime.Handles.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Runtime.InteropServices.JavaScript.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Runtime.InteropServices.RuntimeInformation.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Runtime.InteropServices.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Runtime.Intrinsics.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Runtime.Loader.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Runtime.Numerics.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Runtime.Serialization.Formatters.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Runtime.Serialization.Json.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Runtime.Serialization.Primitives.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Runtime.Serialization.Xml.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Runtime.Serialization.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Runtime.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Security.AccessControl.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Security.Claims.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Security.Cryptography.Algorithms.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Security.Cryptography.Cng.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Security.Cryptography.Csp.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Security.Cryptography.Encoding.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Security.Cryptography.OpenSsl.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Security.Cryptography.Primitives.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Security.Cryptography.X509Certificates.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Security.Cryptography.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Security.Principal.Windows.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Security.Principal.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Security.SecureString.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Security.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.ServiceModel.Web.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.ServiceProcess.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Text.Encoding.CodePages.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Text.Encoding.Extensions.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Text.Encoding.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Text.Encodings.Web.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Text.Json.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Text.RegularExpressions.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Threading.Channels.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Threading.Overlapped.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Threading.Tasks.Dataflow.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Threading.Tasks.Extensions.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Threading.Tasks.Parallel.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Threading.Tasks.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Threading.Thread.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Threading.ThreadPool.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Threading.Timer.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Threading.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Transactions.Local.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Transactions.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.ValueTuple.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Web.HttpUtility.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Web.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Windows.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Xml.Linq.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Xml.ReaderWriter.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Xml.Serialization.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Xml.XDocument.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Xml.XPath.XDocument.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Xml.XPath.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Xml.XmlDocument.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Xml.XmlSerializer.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.Xml.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "System.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "WindowsBase.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "mscorlib.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "8.0.424.16909" + }, + "netstandard.dll": { + "assemblyVersion": "2.1.0.0", + "fileVersion": "8.0.424.16909" + } + }, + "native": { + "Microsoft.DiaSymReader.Native.amd64.dll": { + "fileVersion": "14.38.33135.0" + }, + "System.IO.Compression.Native.dll": { + "fileVersion": "8.0.424.16909" + }, + "clretwrc.dll": { + "fileVersion": "8.0.424.16909" + }, + "clrgc.dll": { + "fileVersion": "8.0.424.16909" + }, + "clrjit.dll": { + "fileVersion": "8.0.424.16909" + }, + "coreclr.dll": { + "fileVersion": "8.0.424.16909" + }, + "createdump.exe": { + "fileVersion": "8.0.424.16909" + }, + "hostfxr.dll": { + "fileVersion": "8.0.424.16909" + }, + "hostpolicy.dll": { + "fileVersion": "8.0.424.16909" + }, + "mscordaccore.dll": { + "fileVersion": "8.0.424.16909" + }, + "mscordaccore_amd64_amd64_8.0.424.16909.dll": { + "fileVersion": "8.0.424.16909" + }, + "mscordbi.dll": { + "fileVersion": "8.0.424.16909" + }, + "mscorrc.dll": { + "fileVersion": "8.0.424.16909" + }, + "msquic.dll": { + "fileVersion": "2.3.5.0" + } + } + }, + "Microsoft.NET.ILLink.Tasks/8.0.4": {}, + "Newtonsoft.Json/13.0.3": { + "runtime": { + "lib/net6.0/Newtonsoft.Json.dll": { + "assemblyVersion": "13.0.0.0", + "fileVersion": "13.0.3.27908" + } + } + } + } + }, + "libraries": { + "ota_wrapper_v2/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "runtimepack.Microsoft.NETCore.App.Runtime.win-x64/8.0.4": { + "type": "runtimepack", + "serviceable": false, + "sha512": "" + }, + "Microsoft.NET.ILLink.Tasks/8.0.4": { + "type": "package", + "serviceable": true, + "sha512": "sha512-PZb5nfQ+U19nhnmnR9T1jw+LTmozhuG2eeuzuW5A7DqxD/UXW2ucjmNJqnqOuh8rdPzM3MQXoF8AfFCedJdCUw==", + "path": "microsoft.net.illink.tasks/8.0.4", + "hashPath": "microsoft.net.illink.tasks.8.0.4.nupkg.sha512" + }, + "Newtonsoft.Json/13.0.3": { + "type": "package", + "serviceable": true, + "sha512": "sha512-HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ==", + "path": "newtonsoft.json/13.0.3", + "hashPath": "newtonsoft.json.13.0.3.nupkg.sha512" + } + }, + "runtimes": { + "win-x64": [ + "win", + "any", + "base" + ] + } +} \ No newline at end of file diff --git a/ota/ota_wrapper_v2.dll b/ota/ota_wrapper_v2.dll new file mode 100644 index 0000000..7a5c70f Binary files /dev/null and b/ota/ota_wrapper_v2.dll differ diff --git a/ota/ota_wrapper_v2.exe b/ota/ota_wrapper_v2.exe new file mode 100644 index 0000000..48826c4 Binary files /dev/null and b/ota/ota_wrapper_v2.exe differ diff --git a/ota/ota_wrapper_v2.pdb b/ota/ota_wrapper_v2.pdb new file mode 100644 index 0000000..49510b9 Binary files /dev/null and b/ota/ota_wrapper_v2.pdb differ diff --git a/ota/ota_wrapper_v2.runtimeconfig.json b/ota/ota_wrapper_v2.runtimeconfig.json new file mode 100644 index 0000000..75b2e8f --- /dev/null +++ b/ota/ota_wrapper_v2.runtimeconfig.json @@ -0,0 +1,26 @@ +{ + "runtimeOptions": { + "tfm": "net8.0", + "includedFrameworks": [ + { + "name": "Microsoft.NETCore.App", + "version": "8.0.4" + } + ], + "configProperties": { + "Microsoft.Extensions.DependencyInjection.VerifyOpenGenericServiceTrimmability": true, + "System.ComponentModel.TypeConverter.EnableUnsafeBinaryFormatterInDesigntimeLicenseContextSerialization": false, + "System.Reflection.Metadata.MetadataUpdater.IsSupported": false, + "System.Resources.ResourceManager.AllowCustomResourceTypes": false, + "System.Runtime.InteropServices.BuiltInComInterop.IsSupported": false, + "System.Runtime.InteropServices.EnableConsumingManagedCodeFromNativeHosting": false, + "System.Runtime.InteropServices.EnableCppCLIHostActivation": false, + "System.Runtime.InteropServices.Marshalling.EnableGeneratedComInterfaceComImportInterop": false, + "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false, + "System.StartupHookProvider.IsSupported": false, + "System.Text.Encoding.EnableUnsafeUTF7Encoding": false, + "System.Text.Json.JsonSerializer.IsReflectionEnabledByDefault": false, + "System.Threading.Thread.EnableAutoreleasePool": false + } + } +} \ No newline at end of file diff --git a/ota/url_launcher_windows_plugin.dll b/ota/url_launcher_windows_plugin.dll new file mode 100644 index 0000000..b03077f Binary files /dev/null and b/ota/url_launcher_windows_plugin.dll differ diff --git a/pubspec.lock b/pubspec.lock index 4880bba..742e367 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -156,26 +156,26 @@ packages: dependency: transitive description: name: leak_tracker - sha256: "78eb209deea09858f5269f5a5b02be4049535f568c07b275096836f01ea323fa" + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" url: "https://pub.dev" source: hosted - version: "10.0.0" + version: "10.0.4" leak_tracker_flutter_testing: dependency: transitive description: name: leak_tracker_flutter_testing - sha256: b46c5e37c19120a8a01918cfaf293547f47269f7cb4b0058f21531c2465d6ef0 + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "3.0.3" leak_tracker_testing: dependency: transitive description: name: leak_tracker_testing - sha256: a597f72a664dbd293f3bfc51f9ba69816f84dcd403cdac7066cb3f6003f3ab47 + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "3.0.1" lints: dependency: transitive description: @@ -212,10 +212,10 @@ packages: dependency: transitive description: name: meta - sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04 + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.11.0" + version: "1.12.0" mime: dependency: transitive description: @@ -425,10 +425,10 @@ packages: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.0" typed_data: dependency: transitive description: @@ -513,10 +513,10 @@ packages: dependency: transitive description: name: vm_service - sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" url: "https://pub.dev" source: hosted - version: "13.0.0" + version: "14.2.1" web: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index a816ac5..aeaaff3 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -71,6 +71,8 @@ flutter: assets: - images/mhunt_thumbnail.png - images/pop3d_thumbnail.png + - images/vault.png + - images/token.png # An image asset can refer to one or more resolution-specific "variants", see # https://flutter.dev/assets-and-images/#resolution-aware