i2pd for Android
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

139 lines
2.4 KiB

/*
* Copyright (c) 2013-2022, The PurpleI2P Project
*
* This file is part of Purple i2pd project and licensed under BSD3
*
* See full license text in LICENSE file at top of project tree
*/
#include <iostream>
#include <chrono>
#include <thread>
#include <exception>
#include <boost/exception/diagnostic_information.hpp>
#include <boost/exception_ptr.hpp>
//#include "mainwindow.h"
#include "FS.h"
#include "DaemonAndroid.h"
#include "Daemon.h"
#include "I18N.h"
namespace i2p
{
namespace android
{
std::string dataDir = "";
std::string language = "";
DaemonAndroidImpl::DaemonAndroidImpl ()
{
}
DaemonAndroidImpl::~DaemonAndroidImpl ()
{
}
bool DaemonAndroidImpl::init(int argc, char* argv[])
{
return Daemon.init(argc, argv);
}
void DaemonAndroidImpl::start()
{
Daemon.start();
}
void DaemonAndroidImpl::stop()
{
Daemon.stop();
}
void DaemonAndroidImpl::restart()
{
stop();
start();
}
void DaemonAndroidImpl::setDataDir(std::string path)
{
Daemon.setDataDir(path);
}
static DaemonAndroidImpl daemon;
static char* argv[1]={strdup("tmp")};
/**
* returns error details if failed
* returns "ok" if daemon initialized and started okay
*/
std::string start(/*int argc, char* argv[]*/)
{
try
{
{
// make sure assets are ready before proceed
i2p::fs::DetectDataDir(dataDir, false);
int numAttempts = 0;
do
{
if (i2p::fs::Exists (i2p::fs::DataDirPath("assets.ready"))) break; // assets ready
numAttempts++;
std::this_thread::sleep_for (std::chrono::seconds(1)); // otherwise wait for 1 more second
}
while (numAttempts <= 10); // 10 seconds max
// Set application directory
daemon.setDataDir(dataDir);
bool daemonInitSuccess = daemon.init(1, argv);
if(!daemonInitSuccess)
{
return "Daemon init failed";
}
// Set webconsole language from application
i2p::i18n::SetLanguage(language);
daemon.start();
}
}
catch (boost::exception& ex)
{
std::stringstream ss;
ss << boost::diagnostic_information(ex);
return ss.str();
}
catch (std::exception& ex)
{
std::stringstream ss;
ss << ex.what();
return ss.str();
}
catch(...)
{
return "unknown exception";
}
return "ok";
}
void stop()
{
daemon.stop();
}
void SetDataDir(std::string jdataDir)
{
dataDir = jdataDir;
}
std::string GetDataDir(void)
{
return dataDir;
}
void SetLanguage(std::string jlanguage)
{
language = jlanguage;
}
}
}