Awoo-Installer/source/util/util.cpp

164 lines
5.4 KiB
C++
Raw Normal View History

2019-10-18 19:01:51 +00:00
#include <filesystem>
2019-10-22 22:14:37 +00:00
#include <vector>
#include <algorithm>
#include <fstream>
#include <unistd.h>
#include <curl/curl.h>
2019-11-14 01:01:35 +00:00
#include <json-c/json.h>
2019-10-18 19:01:51 +00:00
#include "switch.h"
#include "util/util.hpp"
2019-10-18 19:01:51 +00:00
#include "nx/ipc/tin_ipc.h"
2019-10-26 04:38:12 +00:00
#include "util/INIReader.h"
#include "util/config.hpp"
2019-11-14 01:01:35 +00:00
#include "util/curl.hpp"
2019-10-18 19:01:51 +00:00
namespace inst::util {
2019-10-18 19:01:51 +00:00
void initApp () {
2019-11-03 21:56:58 +00:00
// Dilate
if (std::filesystem::exists("sdmc:/license.dat")) fatalThrow(0);
2019-10-18 19:01:51 +00:00
if (!std::filesystem::exists("sdmc:/switch")) std::filesystem::create_directory("sdmc:/switch");
if (!std::filesystem::exists(inst::config::appDir)) std::filesystem::create_directory(inst::config::appDir);
if (std::filesystem::exists(inst::config::configPath)) inst::config::parseConfig();
else inst::config::setConfig();
2019-10-18 19:01:51 +00:00
socketInitializeDefault();
#ifdef __DEBUG__
nxlinkStdio();
#endif
}
void deinitApp () {
socketExit();
}
void initInstallServices() {
2019-10-18 19:01:51 +00:00
ncmInitialize();
nsInitialize();
nsextInitialize();
esInitialize();
2019-11-03 18:18:42 +00:00
splCryptoInitialize();
splInitialize();
2019-10-18 19:01:51 +00:00
}
2019-10-22 22:14:37 +00:00
void deinitInstallServices() {
2019-10-18 19:01:51 +00:00
ncmExit();
nsExit();
nsextExit();
esExit();
2019-11-03 18:18:42 +00:00
splCryptoExit();
splExit();
2019-10-18 19:01:51 +00:00
}
2019-10-22 22:14:37 +00:00
std::vector<std::filesystem::path> getDirectoryFiles(const std::string & dir, const std::vector<std::string> & extensions) {
std::vector<std::filesystem::path> files;
for(auto & p: std::filesystem::directory_iterator(dir))
{
if (std::filesystem::is_regular_file(p))
{
std::string ourExtension = p.path().extension().string();
std::transform(ourExtension.begin(), ourExtension.end(), ourExtension.begin(), ::tolower);
if (extensions.empty() || std::find(extensions.begin(), extensions.end(), ourExtension) != extensions.end())
2019-10-22 22:14:37 +00:00
{
files.push_back(p.path());
}
}
}
std::sort(files.begin(), files.end());
std::reverse(files.begin(), files.end());
return files;
}
bool removeDirectory(std::string dir) {
try {
for(auto & p: std::filesystem::recursive_directory_iterator(dir))
{
if (std::filesystem::is_regular_file(p))
{
std::filesystem::remove(p);
}
}
rmdir(dir.c_str());
return true;
}
catch (std::filesystem::filesystem_error & e) {
return false;
}
}
bool copyFile(std::string inFile, std::string outFile) {
char ch;
std::ifstream f1(inFile);
std::ofstream f2(outFile);
if(!f1 || !f2) return false;
while(f1 && f1.get(ch)) f2.put(ch);
return true;
}
std::string formatUrlString(std::string ourString) {
std::stringstream ourStream(ourString);
std::string segment;
std::vector<std::string> seglist;
while(std::getline(ourStream, segment, '/')) {
seglist.push_back(segment);
}
CURL *curl = curl_easy_init();
int outlength;
std::string finalString = curl_easy_unescape(curl, seglist[seglist.size() - 1].c_str(), seglist[seglist.size() - 1].length(), &outlength);
curl_easy_cleanup(curl);
return finalString;
}
2019-10-28 23:47:49 +00:00
std::string shortenString(std::string ourString, int ourLength, bool isFile) {
std::filesystem::path ourStringAsAPath = ourString;
std::string ourExtension = ourStringAsAPath.extension().string();
if (ourString.size() - ourExtension.size() > (unsigned long)ourLength) {
if(isFile) return (std::string)ourString.substr(0,ourLength) + "(...)" + ourExtension;
2019-10-28 23:47:49 +00:00
else return (std::string)ourString.substr(0,ourLength) + "...";
} else return ourString;
}
std::string readTextFromFile(std::string ourFile) {
if (std::filesystem::exists(ourFile)) {
FILE * file = fopen(ourFile.c_str(), "r");
char line[1024];
fgets(line, 1024, file);
std::string url = line;
fflush(file);
fclose(file);
return url;
}
return "";
}
2019-11-14 01:01:35 +00:00
std::string softwareKeyboard(std::string guideText, std::string initialText, int LenMax) {
Result rc=0;
SwkbdConfig kbd;
char tmpoutstr[LenMax + 1] = {0};
rc = swkbdCreate(&kbd, 0);
if (R_SUCCEEDED(rc)) {
swkbdConfigMakePresetDefault(&kbd);
swkbdConfigSetGuideText(&kbd, guideText.c_str());
swkbdConfigSetInitialText(&kbd, initialText.c_str());
swkbdConfigSetStringLenMax(&kbd, LenMax);
rc = swkbdShow(&kbd, tmpoutstr, sizeof(tmpoutstr));
swkbdClose(&kbd);
if (R_SUCCEEDED(rc) && tmpoutstr[0] != 0) return(((std::string)(tmpoutstr)));
}
return "";
}
std::string getDriveFileName(std::string fileId) {
std::string jsonData = inst::curl::downloadToBuffer("https://www.googleapis.com/drive/v3/files/" + fileId + "?key=" + inst::config::gAuthKey + "&fields=name");
if (jsonData.size() > 0) {
struct json_object *parsed_json = json_tokener_parse(jsonData.c_str());
struct json_object *name;
if (json_object_object_get_ex(parsed_json, "name", &name)) return json_object_get_string(name);
}
return "";
}
2019-10-18 19:01:51 +00:00
}