From 46df877c42906c92a0e5763274cef8102f158325 Mon Sep 17 00:00:00 2001 From: erkin97 Date: Mon, 26 Feb 2018 18:02:27 +0600 Subject: [PATCH 01/22] rename rest api, rename GUI --- SubutaiTray.pro | 2 +- commons/src/Commons.cpp.autosave | 185 ------------------------------- commons/src/OsBranchConsts.cpp | 72 ++++++------ hub/forms/DlgAbout.ui | 4 +- hub/forms/DlgEnvironment.ui | 2 +- hub/forms/DlgLogin.ui | 2 +- hub/forms/DlgPeer.ui | 2 +- hub/forms/DlgSettings.ui | 4 +- hub/src/TrayControlWindow.cpp | 4 +- main.cpp | 6 +- resources/logo.png | Bin 0 -> 44881 bytes resources/resources.qrc | 1 + root@10.66.66.1 | Bin 23 -> 0 bytes 13 files changed, 50 insertions(+), 234 deletions(-) delete mode 100644 commons/src/Commons.cpp.autosave create mode 100644 resources/logo.png delete mode 100644 root@10.66.66.1 diff --git a/SubutaiTray.pro b/SubutaiTray.pro index 7461c05a..d6b44821 100644 --- a/SubutaiTray.pro +++ b/SubutaiTray.pro @@ -141,7 +141,7 @@ DEFINES += TRAY_VERSION=\\\"$$TRAY_VERSION\\\" GIT_BRANCH_STR = $$system(git rev-parse --abbrev-ref HEAD) DEFINES += GIT_BRANCH=\\\"$$GIT_BRANCH_STR\\\" -GBV=BT_DEV +GBV=BT_PROD equals(GIT_BRANCH_STR, "master") { GBV=BT_MASTER } diff --git a/commons/src/Commons.cpp.autosave b/commons/src/Commons.cpp.autosave deleted file mode 100644 index ea5b38cc..00000000 --- a/commons/src/Commons.cpp.autosave +++ /dev/null @@ -1,185 +0,0 @@ -#include "Commons.h" -#include "SystemCallWrapper.h" - -#include -#include -#include -#include -#include -#include - - - -const char* CCommons::RESTARTED_ARG = "restarted"; - -QString -CCommons::FileMd5(const QString &file_path) { - QFile f(file_path); - if (!f.exists()) return ""; - if (!f.open(QIODevice::ReadOnly)) return ""; - QString hash = QCryptographicHash::hash(f.readAll(), QCryptographicHash::Md5).toHex().constData(); - f.close(); - return hash; -} -//////////////////////////////////////////////////////////////////////////// - -QString -CCommons::NetworkErrorToString(int err_code) { - switch (err_code) { - case QNetworkReply::NoError : return QObject::tr("No error"); - - // network layer errors [relating to the destination server] (1-99): - case QNetworkReply::ConnectionRefusedError: return QObject::tr("Connection Refused Error"); - case QNetworkReply::RemoteHostClosedError : return QObject::tr("Remote Host Closed Error"); - case QNetworkReply::HostNotFoundError: return QObject::tr("Host Not Found Error"); - case QNetworkReply::TimeoutError: return QObject::tr("Timeout Error"); - case QNetworkReply::OperationCanceledError: return QObject::tr("Operation Canceled Error"); - case QNetworkReply::SslHandshakeFailedError: return QObject::tr("Ssl Handshake Failed Error"); - case QNetworkReply::TemporaryNetworkFailureError: return QObject::tr("Temporary Network Failure Error"); - case QNetworkReply::NetworkSessionFailedError: return QObject::tr("Network Session Failed Error"); - case QNetworkReply::BackgroundRequestNotAllowedError: return QObject::tr("Background Request Not Allowed Error"); - case QNetworkReply::TooManyRedirectsError: return QObject::tr("TooMany Redirects Error"); - case QNetworkReply::InsecureRedirectError: return QObject::tr("Insecure Redirect Error"); - case QNetworkReply::UnknownNetworkError: return QObject::tr("Unknown Network Error"); - - // proxy errors (101-199): - case QNetworkReply::ProxyConnectionRefusedError: return QObject::tr("Proxy Connection Refused Error"); - case QNetworkReply::ProxyConnectionClosedError: return QObject::tr("Proxy Connection Closed Error"); - case QNetworkReply::ProxyNotFoundError: return QObject::tr("Proxy Not Found Error"); - case QNetworkReply::ProxyTimeoutError: return QObject::tr("Proxy Timeout Error"); - case QNetworkReply::ProxyAuthenticationRequiredError: return QObject::tr("Proxy Authentication Required Error"); - case QNetworkReply::UnknownProxyError: return QObject::tr("Unknown Proxy Error"); - - // content errors (201-299): - case QNetworkReply:: ContentAccessDenied: return QObject::tr("Content Access Denied"); - case QNetworkReply::ContentOperationNotPermittedError: return QObject::tr("Content Operation Not Permitted Error"); - case QNetworkReply::ContentNotFoundError: return QObject::tr("Content Not Found Error"); - case QNetworkReply::AuthenticationRequiredError: return QObject::tr("Authentication Required Error"); - case QNetworkReply::ContentReSendError: return QObject::tr("Content Resend Error"); - case QNetworkReply::ContentConflictError: return QObject::tr("Content Conflict Error"); - case QNetworkReply::ContentGoneError: return QObject::tr("Content Gone Error"); - case QNetworkReply::UnknownContentError: return QObject::tr("Unknown Content Error"); - - // protocol errors - case QNetworkReply::ProtocolUnknownError: return QObject::tr("Protocol Unknown Error"); - case QNetworkReply::ProtocolInvalidOperationError: return QObject::tr("Protocol Invalid Operation Error"); - case QNetworkReply::ProtocolFailure: return QObject::tr("Protocol Failure"); - - // Server side errors (401-499) - case QNetworkReply::InternalServerError: return QObject::tr("Internal Server Error"); - case QNetworkReply::OperationNotImplementedError: return QObject::tr("Operation not implemented error"); - case QNetworkReply::ServiceUnavailableError: return QObject::tr("Service unavailable error"); - case QNetworkReply::UnknownServerError: return QObject::tr("Unknown server error"); - - default: return QObject::tr("Unknown network error"); - } -} -//////////////////////////////////////////////////////////////////////////// - -void CCommons::RestartTray() { - QStringList args; - args << RESTARTED_ARG; - QProcess::startDetached(QApplication::applicationFilePath(), args); - QApplication::exit(0); -} - -//////////////////////////////////////////////////////////////// - -bool -CCommons::IsApplicationLaunchable(const QString &file_path) { - QFileInfo fi(file_path); - if (fi.exists() && fi.isExecutable()) - return true; - QString cmd; - system_call_wrapper_error_t which_res = - CSystemCallWrapper::which(file_path, cmd); - if (which_res != SCWE_SUCCESS) return false; - QFileInfo fi2(cmd); - return fi2.exists() && fi2.isExecutable(); -} -//////////////////////////////////////////////////////////////////////////// - -bool -CCommons::IsTerminalLaunchable(const QString &terminal) { - system_call_wrapper_error_t open_res = - CSystemCallWrapper::open(terminal); - if (open_res == SCWE_SUCCESS) return true; - - return false; -} -//////////////////////////////////////////////////////////////////////////// - -static std::map dct_term_arg = { - //linux - {"xterm", "-e"}, - {"terminator", "-e"}, - {"gnome-terminal", "-x bash -c"}, - {"mate-terminal", "-x bash -c"}, - {"xfce4-terminal", "-x bash -c"}, - {"guake", "-e"}, - {"kterm", "-e bash -c"}, - {"konsole", "-e bash -c"}, - {"termit", "-e bash -c"}, - {"roxterm", "-e bash -c"}, - {"rxvt", "-e bash -c"}, - {"evilvte", "-e bash -c"}, - {"aterm", "-e bash -c"}, - {"lxterminal", "-l -e"}, - {"Terminal", "do script"}, // macos terminal - {"iTerm", "create window with default profile command"}, // macos terminal -}; - -bool -CCommons::HasRecommendedTerminalArg(const QString &terminalCmd, - QString& recommendedArg) { - QString cmd = terminalCmd; - QFileInfo fi(terminalCmd); - if (fi.exists()) - cmd = fi.fileName(); - - if (dct_term_arg.find(cmd) != dct_term_arg.end()) { - recommendedArg = dct_term_arg.at(cmd); - return true; - } - return false; -} - -QStringList -CCommons::SupportTerminals() { - QStringList lst_res; - for (auto i : dct_term_arg) { -#ifdef RT_OS_DARWIN - if (CCommons::IsTerminalLaunchable(i.first)) - lst_res << i.first; -#endif -#ifdef RT_OS_LINUX - if (CCommons::IsApplicationLaunchable(i.first)) - lst_res << i.first; -#endif - } - return lst_res; -} - -QStringList -CCommons::DefaultTerminals() { - QStringList lst_res; - for (auto i : dct_term_arg) - lst_res << i.first; - return lst_res; -} - - -QString CCommons::GetFingerprintFromUid(const QString &uid) { - QString res = ""; - if (uid.indexOf("uid") == -1) - return res; - quint16 indexUid = uid.indexOf("uid:") + QString("uid:").size(); - while (indexUid < uid.length() && uid[indexUid] != ':') { - res.append(uid[indexUid]); - indexUid ++; - } - return res; -} - - -//////////////////////////////////////////////////////////////////////////// diff --git a/commons/src/OsBranchConsts.cpp b/commons/src/OsBranchConsts.cpp index 29837c95..becc92f3 100644 --- a/commons/src/OsBranchConsts.cpp +++ b/commons/src/OsBranchConsts.cpp @@ -62,9 +62,9 @@ template const QString& hub_post_url_temp_internal(); return res; \ } -hub_post_url_temp_internal_def(BT_PROD, "https://hub.subut.ai/rest/v1/tray/%1") -hub_post_url_temp_internal_def(BT_MASTER, "https://masterhub.subut.ai/rest/v1/tray/%1") -hub_post_url_temp_internal_def(BT_DEV, "https://devhub.subut.ai/rest/v1/tray/%1") +hub_post_url_temp_internal_def(BT_PROD, "https://bazaar.subutai.io/rest/v1/tray/%1") +hub_post_url_temp_internal_def(BT_MASTER, "https://masterbazaar.subutai.io/rest/v1/tray/%1") +hub_post_url_temp_internal_def(BT_DEV, "https://devbazaar.subutai.io/rest/v1/tray/%1") const QString & hub_post_url() { @@ -81,9 +81,9 @@ template const QString& hub_register_url_temp_internal(); return res; \ } -hub_register_url_temp_internal_def(BT_PROD, "https://hub.subut.ai/register") -hub_register_url_temp_internal_def(BT_MASTER, "https://masterhub.subut.ai/register") -hub_register_url_temp_internal_def(BT_DEV, "https://devhub.subut.ai/register") +hub_register_url_temp_internal_def(BT_PROD, "https://bazaar.subutai.io/register") +hub_register_url_temp_internal_def(BT_MASTER, "https://masterbazaar.subutai.io/register") +hub_register_url_temp_internal_def(BT_DEV, "https://devbazaar.subutai.io/register") const QString & hub_register_url() { @@ -102,9 +102,9 @@ template const QString& hub_user_profile_temp_internal(); return res; \ } -hub_user_profile_temp_internal_def(BT_PROD, "https://hub.subut.ai/users/") -hub_user_profile_temp_internal_def(BT_MASTER, "https://masterhub.subut.ai/users/") -hub_user_profile_temp_internal_def(BT_DEV, "https://devhub.subut.ai/users/") +hub_user_profile_temp_internal_def(BT_PROD, "https://bazaar.subutai.io/users/") +hub_user_profile_temp_internal_def(BT_MASTER, "https://masterbazaar.subutai.io/users/") +hub_user_profile_temp_internal_def(BT_DEV, "https://devbazaar.subutai.io/users/") const QString & hub_user_profile_url() { @@ -121,9 +121,9 @@ template const QString& hub_get_url_temp_internal(); return res; \ } -hub_get_url_temp_internal_def(BT_PROD, "https://hub.subut.ai/rest/v1/tray/%1") -hub_get_url_temp_internal_def(BT_MASTER, "https://masterhub.subut.ai/rest/v1/tray/%1") -hub_get_url_temp_internal_def(BT_DEV, "https://devhub.subut.ai/rest/v1/tray/%1") +hub_get_url_temp_internal_def(BT_PROD, "https://bazaar.subutai.io/rest/v1/tray/%1") +hub_get_url_temp_internal_def(BT_MASTER, "https://masterbazaar.subutai.io/rest/v1/tray/%1") +hub_get_url_temp_internal_def(BT_DEV, "https://devbazaar.subutai.io/rest/v1/tray/%1") const QString & hub_get_url() { @@ -149,9 +149,9 @@ template const QString& hub_healt_url_temp_internal(); return res; \ } -hub_health_url_temp_internal_def(BT_PROD, "https://hub.subut.ai/rest/v1/tray/tray-data") -hub_health_url_temp_internal_def(BT_MASTER, "https://masterhub.subut.ai/rest/v1/tray/tray-data") -hub_health_url_temp_internal_def(BT_DEV, "https://devhub.subut.ai/rest/v1/tray/tray-data") +hub_health_url_temp_internal_def(BT_PROD, "https://bazaar.subutai.io/rest/v1/tray/tray-data") +hub_health_url_temp_internal_def(BT_MASTER, "https://masterbazaar.subutai.io/rest/v1/tray/tray-data") +hub_health_url_temp_internal_def(BT_DEV, "https://devbazaar.subutai.io/rest/v1/tray/tray-data") const QString & hub_health_url() { @@ -168,9 +168,9 @@ template const QString& hub_kurjun_url_temp_internal(); return res; \ } -hub_kurjun_url_temp_internal_def(BT_PROD, "https://cdn.subut.ai:8338/kurjun/rest/%1") -hub_kurjun_url_temp_internal_def(BT_MASTER, "https://mastercdn.subut.ai:8338/kurjun/rest/%1") -hub_kurjun_url_temp_internal_def(BT_DEV, "https://devcdn.subut.ai:8338/kurjun/rest/%1") +hub_kurjun_url_temp_internal_def(BT_PROD, "https://cdn.subutai.io:8338/kurjun/rest/%1") +hub_kurjun_url_temp_internal_def(BT_MASTER, "https://mastercdn.subutai.io:8338/kurjun/rest/%1") +hub_kurjun_url_temp_internal_def(BT_DEV, "https://devcdn.subutai.io:8338/kurjun/rest/%1") const QString & hub_gorjun_url() { @@ -187,9 +187,9 @@ template const QString& hub_billing_temp_internal(); return res; \ } -hub_billing_temp_internal_def(BT_PROD, "https://hub.subut.ai/users/%1") -hub_billing_temp_internal_def(BT_MASTER, "https://masterhub.subut.ai/users/%1") -hub_billing_temp_internal_def(BT_DEV, "https://devhub.subut.ai/users/%1") +hub_billing_temp_internal_def(BT_PROD, "https://bazaar.subutai.io/users/%1") +hub_billing_temp_internal_def(BT_MASTER, "https://masterbazaar.subutai.io/users/%1") +hub_billing_temp_internal_def(BT_DEV, "https://devbazaar.subutai.io/users/%1") const QString & hub_billing_url() { @@ -253,9 +253,9 @@ template const QString& p2p_dht_arg_temp_internal(); return res; \ } -p2p_dht_arg_internal_def(BT_MASTER, "dht.mastercdn.subut.ai:6881") -p2p_dht_arg_internal_def(BT_PROD, "dht.cdn.subut.ai:6881") -p2p_dht_arg_internal_def(BT_DEV, "dht.devcdn.subut.ai:6881") +p2p_dht_arg_internal_def(BT_MASTER, "eu0.mastercdn.subutai.io:6881") +p2p_dht_arg_internal_def(BT_PROD, "eu0.cdn.subutai.io:6881") +p2p_dht_arg_internal_def(BT_DEV, "eu0.devcdn.subutai.io:6881") const QString & p2p_dht_arg() { @@ -429,9 +429,9 @@ template const QString& hub_site_temp_internal(); return res; \ } -hub_site_temp_internal_def(BT_PROD, "https://hub.subut.ai") -hub_site_temp_internal_def(BT_MASTER, "https://masterhub.subut.ai") -hub_site_temp_internal_def(BT_DEV, "https://devhub.subut.ai") +hub_site_temp_internal_def(BT_PROD, "https://bazaar.subutai.io") +hub_site_temp_internal_def(BT_MASTER, "https://masterbazaar.subutai.io") +hub_site_temp_internal_def(BT_DEV, "https://devbazaar.subutai.io") const QString & hub_site() { @@ -524,15 +524,15 @@ template const QString& p2p_package_url_temp_internal(); return res; \ } -p2p_package_url_def(BT_MASTER, OS_LINUX, "https://cdn.subut.ai:8338/kurjun/rest/raw/get?name=subutai-p2p-master.deb") -p2p_package_url_def(BT_MASTER, OS_MAC, "https://cdn.subut.ai:8338/kurjun/rest/raw/get?name=subutai-p2p-master.pkg") -p2p_package_url_def(BT_MASTER, OS_WIN, "https://cdn.subut.ai:8338/kurjun/rest/raw/get?name=subutai-p2p-master.msi") -p2p_package_url_def(BT_DEV, OS_LINUX, "https://cdn.subut.ai:8338/kurjun/rest/raw/get?name=subutai-p2p-dev.deb") -p2p_package_url_def(BT_DEV, OS_MAC, "https://cdn.subut.ai:8338/kurjun/rest/raw/get?name=subutai-p2p-dev.pkg") -p2p_package_url_def(BT_DEV, OS_WIN, "https://cdn.subut.ai:8338/kurjun/rest/raw/get?name=subutai-p2p-dev.msi") -p2p_package_url_def(BT_PROD, OS_LINUX, "https://cdn.subut.ai:8338/kurjun/rest/raw/get?name=subutai-p2p.deb") -p2p_package_url_def(BT_PROD, OS_MAC, "https://cdn.subut.ai:8338/kurjun/rest/raw/get?name=subutai-p2p.pkg") -p2p_package_url_def(BT_PROD, OS_WIN, "https://cdn.subut.ai:8338/kurjun/rest/raw/get?name=subutai-p2p.msi") +p2p_package_url_def(BT_MASTER, OS_LINUX, "https://cdn.subutai.io:8338/kurjun/rest/raw/get?name=subutai-p2p-master.deb") +p2p_package_url_def(BT_MASTER, OS_MAC, "https://cdn.subutai.io:8338/kurjun/rest/raw/get?name=subutai-p2p-master.pkg") +p2p_package_url_def(BT_MASTER, OS_WIN, "https://cdn.subutai.io:8338/kurjun/rest/raw/get?name=subutai-p2p-master.msi") +p2p_package_url_def(BT_DEV, OS_LINUX, "https://cdn.subutai.io:8338/kurjun/rest/raw/get?name=subutai-p2p-dev.deb") +p2p_package_url_def(BT_DEV, OS_MAC, "https://cdn.subutai.io:8338/kurjun/rest/raw/get?name=subutai-p2p-dev.pkg") +p2p_package_url_def(BT_DEV, OS_WIN, "https://cdn.subutai.io:8338/kurjun/rest/raw/get?name=subutai-p2p-dev.msi") +p2p_package_url_def(BT_PROD, OS_LINUX, "https://cdn.subutai.io:8338/kurjun/rest/raw/get?name=subutai-p2p.deb") +p2p_package_url_def(BT_PROD, OS_MAC, "https://cdn.subutai.io:8338/kurjun/rest/raw/get?name=subutai-p2p.pkg") +p2p_package_url_def(BT_PROD, OS_WIN, "https://cdn.subutai.io:8338/kurjun/rest/raw/get?name=subutai-p2p.msi") const QString & p2p_package_url() { diff --git a/hub/forms/DlgAbout.ui b/hub/forms/DlgAbout.ui index f271bdf6..a4c1fe43 100644 --- a/hub/forms/DlgAbout.ui +++ b/hub/forms/DlgAbout.ui @@ -118,7 +118,7 @@ - Tray application version: + Control Center version: @@ -248,7 +248,7 @@ - Update tray + Update Control Center diff --git a/hub/forms/DlgEnvironment.ui b/hub/forms/DlgEnvironment.ui index 251575b6..636de6d8 100644 --- a/hub/forms/DlgEnvironment.ui +++ b/hub/forms/DlgEnvironment.ui @@ -119,7 +119,7 @@ - Open Hub + Open Bazaar diff --git a/hub/forms/DlgLogin.ui b/hub/forms/DlgLogin.ui index f4afd943..61ee13b7 100644 --- a/hub/forms/DlgLogin.ui +++ b/hub/forms/DlgLogin.ui @@ -11,7 +11,7 @@ - Hub Account Login + Bazaar Account Login diff --git a/hub/forms/DlgPeer.ui b/hub/forms/DlgPeer.ui index 6909546e..6a203557 100644 --- a/hub/forms/DlgPeer.ui +++ b/hub/forms/DlgPeer.ui @@ -116,7 +116,7 @@ - Peer on Hub + Peer on Bazaar diff --git a/hub/forms/DlgSettings.ui b/hub/forms/DlgSettings.ui index 2e1e055e..0d2fc7d4 100644 --- a/hub/forms/DlgSettings.ui +++ b/hub/forms/DlgSettings.ui @@ -65,7 +65,7 @@ - EZ-SSH User: + SSH User: @@ -762,7 +762,7 @@ - SubutaiTray check for updates frequency: + Control Center check for updates frequency: diff --git a/hub/src/TrayControlWindow.cpp b/hub/src/TrayControlWindow.cpp index 57d2e622..52dc59f9 100644 --- a/hub/src/TrayControlWindow.cpp +++ b/hub/src/TrayControlWindow.cpp @@ -188,7 +188,7 @@ void TrayControlWindow::create_tray_actions() { &TrayControlWindow::application_quit); m_act_launch_Hub = - new QAction(QIcon(":/hub/Hub-07.png"), tr("Hub website"), this); + new QAction(QIcon(":/hub/Hub-07.png"), tr("Bazaar website"), this); connect(m_act_launch_Hub, &QAction::triggered, this, &TrayControlWindow::launch_Hub); @@ -960,7 +960,7 @@ void TrayControlWindow::show_settings_dialog() { QDialog* create_about_dialog(QWidget* p) { return new DlgAbout(p); } void TrayControlWindow::show_about() { - show_dialog(create_about_dialog, tr("About Subutai Tray")); + show_dialog(create_about_dialog, tr("About Subutai Control Center")); } //////////////////////////////////////////////////////////////////////////// diff --git a/main.cpp b/main.cpp index 839b1152..e901168d 100644 --- a/main.cpp +++ b/main.cpp @@ -62,8 +62,8 @@ main(int argc, char *argv[]) { } sema.release(); - QApplication::setApplicationName("SubutaiTray"); - QApplication::setOrganizationName("subut.ai"); + QApplication::setApplicationName("SubutaiControlCenter"); + QApplication::setOrganizationName("subutai.io"); QApplication app(argc, argv); @@ -132,7 +132,7 @@ main(int argc, char *argv[]) { DlgLogin dlg; dlg.setModal(true); - QPixmap pm(":/hub/tray_splash.png"); + QPixmap pm(":/hub/logo.png"); QSplashScreen sc(pm); sc.show(); diff --git a/resources/logo.png b/resources/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..c384fd7fa0fdc2643d28906dec11d60e55959058 GIT binary patch literal 44881 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 z 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 ZWmWG#LETS2w!xqPd1;k5Rg$Jb{}1E^P5}S_ literal 0 HcmV?d00001 diff --git a/resources/resources.qrc b/resources/resources.qrc index b2d9365b..bac0fdcc 100644 --- a/resources/resources.qrc +++ b/resources/resources.qrc @@ -56,6 +56,7 @@ add_green.png add_blue.png refreshing.gif + logo.png diff --git a/root@10.66.66.1 b/root@10.66.66.1 deleted file mode 100644 index 9dad8dffceb9623e88f8b96d9cd0caf25574c6fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23 fcmcE7ks@*G{hX<16=n7(EZlpygMop8iIEWihQJ9+ From e277097d65e421a9e4c146a7df9451ec91d5c853 Mon Sep 17 00:00:00 2001 From: erkin97 Date: Mon, 26 Feb 2018 18:20:07 +0600 Subject: [PATCH 02/22] renamed .pro file --- SubutaiTray.pro => SubutaiControlCenter.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename SubutaiTray.pro => SubutaiControlCenter.pro (99%) diff --git a/SubutaiTray.pro b/SubutaiControlCenter.pro similarity index 99% rename from SubutaiTray.pro rename to SubutaiControlCenter.pro index d6b44821..f293ef20 100644 --- a/SubutaiTray.pro +++ b/SubutaiControlCenter.pro @@ -11,7 +11,7 @@ CONFIG += c++11 greaterThan(QT_MAJOR_VERSION, 4) : QT += widgets -TARGET = SubutaiTray +TARGET = SubutaiControlCenter TEMPLATE = app INCLUDEPATH += commons/include From 6ad37087dd8cd790fe65a9048c80d0974a96a3b8 Mon Sep 17 00:00:00 2001 From: erkin97 Date: Tue, 27 Feb 2018 10:56:13 +0600 Subject: [PATCH 03/22] rename linux builder --- .gitignore | 3 +++ build_linux.sh | 16 ++++++------- build_mac.sh | 14 +++++------ commons/src/OsBranchConsts.cpp | 24 +++++++++---------- deb-packages/deb-packages-internal/clear.sh | 8 +++---- .../deb-packages-internal/debian/control | 6 ++--- .../deb-packages-internal/debian/install | 2 +- .../deb-packages-internal/debian/postinst | 22 ++++++++--------- .../deb-packages-internal/debian/postrm | 16 ++++++------- .../deb-packages-internal/pack_debian.sh | 14 +++++------ subutai-tray.desktop | 10 -------- 11 files changed, 64 insertions(+), 71 deletions(-) delete mode 100644 subutai-tray.desktop diff --git a/.gitignore b/.gitignore index 8b3deb75..965f3fbf 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ *.swp bin/* subutai_tray_bin/ +subutai_control_center_bin/ libssh_app_bin/ .DS_Store build @@ -17,6 +18,7 @@ build debian/debhelper-build-stamp debian/files debian/subutai-tray +debian/subutai-control-center deb-packages/deb-packages-internal/debian/changelog # doxygen @@ -27,6 +29,7 @@ html/ darwin-packages/flat/* darwin-packages/root/* darwin-packages/SubutaiTray.app +darwin-packages/SubutraiControlCenter.app darwin-packages/*.pkg Makefile diff --git a/build_linux.sh b/build_linux.sh index 41d5c101..33692a4c 100755 --- a/build_linux.sh +++ b/build_linux.sh @@ -1,16 +1,16 @@ #!/bin/bash nproc_count="$(nproc)" core_number=$((nproc_count*2+1)) -subutai_tray_bin="subutai_tray_bin" +subutai_control_center_bin="subutai_control_center_bin" -if [ -d "$subutai_tray_bin" ]; then - echo "Try to remove subutai_tray_bin" - rm -rf subutai_tray_bin +if [ -d "$subutai_control_center_bin" ]; then + echo "Try to remove subutai_control_center_bin" + rm -rf subutai_control_center_bin fi -mkdir subutai_tray_bin -cd subutai_tray_bin -lrelease ../SubutaiTray.pro -qmake ../SubutaiTray.pro -r -spec linux-g++ +mkdir subutai_control_center_bin +cd subutai_control_center_bin +lrelease ../SubutaiControlCenter.pro +qmake ../SubutaiControlCenter.pro -r -spec linux-g++ make -j$core_number rm *.o *.cpp *.h mv ../*.qm . diff --git a/build_mac.sh b/build_mac.sh index cc1415cf..da422172 100755 --- a/build_mac.sh +++ b/build_mac.sh @@ -1,5 +1,5 @@ #!/bin/bash -build="subutai_tray_bin" +build="subutai_control-center_bin" if [ -d "$build" ]; then echo "Try to remove build" @@ -7,14 +7,14 @@ if [ -d "$build" ]; then fi mkdir -p $build cd $build -lrelease ../SubutaiTray.pro -qmake ../SubutaiTray.pro -r -spec macx-clang CONFIG+=x86_64 +lrelease ../SubutaiControlCenter.pro +qmake ../SubutaiControlCenter.pro -r -spec macx-clang CONFIG+=x86_64 make mv ../*.qm . cd ../ -macdeployqt subutai_tray_bin/SubutaiTray.app -cd subutai_tray_bin/SubutaiTray.app/Contents/MacOS/ +macdeployqt subutai_control-center_bin/SubutaiControlCenter.app +cd subutai_control-center_bin/SubutaiControlCenter.app/Contents/MacOS/ cp ../../../*.qm . #source ../../../../after_build_step_mac_os -cp SubutaiTray SubutaiTray_osx -cp SubutaiTray_osx ../../../. +cp SubutaiControlCenter SubutaiControlCenter_osx +cp SubutaiControlCenter_osx ../../../. diff --git a/commons/src/OsBranchConsts.cpp b/commons/src/OsBranchConsts.cpp index becc92f3..a2c4c93e 100644 --- a/commons/src/OsBranchConsts.cpp +++ b/commons/src/OsBranchConsts.cpp @@ -37,15 +37,15 @@ template const QString& tray_kurjun_file_name_temp_internal( return res; \ } -tray_kurjun_file_name_def(BT_MASTER, OS_LINUX, "SubutaiTray") -tray_kurjun_file_name_def(BT_MASTER, OS_MAC, "SubutaiTray_osx") -tray_kurjun_file_name_def(BT_MASTER, OS_WIN, "SubutaiTray.exe") -tray_kurjun_file_name_def(BT_DEV, OS_LINUX, "SubutaiTray") -tray_kurjun_file_name_def(BT_DEV, OS_MAC, "SubutaiTray_osx") -tray_kurjun_file_name_def(BT_DEV, OS_WIN, "SubutaiTray.exe") -tray_kurjun_file_name_def(BT_PROD, OS_LINUX, "SubutaiTray") -tray_kurjun_file_name_def(BT_PROD, OS_MAC, "SubutaiTray_osx") -tray_kurjun_file_name_def(BT_PROD, OS_WIN, "SubutaiTray.exe") +tray_kurjun_file_name_def(BT_MASTER, OS_LINUX, "SubutaiControlCenter") +tray_kurjun_file_name_def(BT_MASTER, OS_MAC, "SubutaiControlCenter_osx") +tray_kurjun_file_name_def(BT_MASTER, OS_WIN, "SubutaiControlCenter.exe") +tray_kurjun_file_name_def(BT_DEV, OS_LINUX, "SubutaiControlCenter") +tray_kurjun_file_name_def(BT_DEV, OS_MAC, "SubutaiControlCenter_osx") +tray_kurjun_file_name_def(BT_DEV, OS_WIN, "SubutaiControlCenter.exe") +tray_kurjun_file_name_def(BT_PROD, OS_LINUX, "SubutaiControlCenter") +tray_kurjun_file_name_def(BT_PROD, OS_MAC, "SubutaiControlCenter_osx") +tray_kurjun_file_name_def(BT_PROD, OS_WIN, "SubutaiControlCenter.exe") const QString & tray_kurjun_file_name() { @@ -168,9 +168,9 @@ template const QString& hub_kurjun_url_temp_internal(); return res; \ } -hub_kurjun_url_temp_internal_def(BT_PROD, "https://cdn.subutai.io:8338/kurjun/rest/%1") -hub_kurjun_url_temp_internal_def(BT_MASTER, "https://mastercdn.subutai.io:8338/kurjun/rest/%1") -hub_kurjun_url_temp_internal_def(BT_DEV, "https://devcdn.subutai.io:8338/kurjun/rest/%1") +hub_kurjun_url_temp_internal_def(BT_PROD, "https://cdn.subut.ai:8338/kurjun/rest/%1") +hub_kurjun_url_temp_internal_def(BT_MASTER, "https://mastercdn.subut.ai:8338/kurjun/rest/%1") +hub_kurjun_url_temp_internal_def(BT_DEV, "https://devcdn.subut.ai:8338/kurjun/rest/%1") const QString & hub_gorjun_url() { diff --git a/deb-packages/deb-packages-internal/clear.sh b/deb-packages/deb-packages-internal/clear.sh index 623f6e20..542e8a7f 100755 --- a/deb-packages/deb-packages-internal/clear.sh +++ b/deb-packages/deb-packages-internal/clear.sh @@ -1,11 +1,11 @@ #!/bin/bash -rm debian/subutai-tray.* +rm debian/subutai-control-center.* rm debian/debhelper-build-stamp -rm -rf debian/SubutaiTray.tar.gz +rm -rf debian/SubutaiControlCenter.tar.gz rm -rf debian/icons -rm -rf debian/SubutaiTray -rm -rf debian/subutai-tray +rm -rf debian/SubutaiControlCenter +rm -rf debian/subutai-control-center rm -rf debian/libicu52 for f in $(ls ../); do diff --git a/deb-packages/deb-packages-internal/debian/control b/deb-packages/deb-packages-internal/debian/control index 41801b26..0f5d5ea5 100644 --- a/deb-packages/deb-packages-internal/debian/control +++ b/deb-packages/deb-packages-internal/debian/control @@ -1,4 +1,4 @@ -Source: subutai-tray +Source: subutai-contol-center Section: net Priority: optional Maintainer: Adilet Zholdoshbekov (azholdoshbekov@optimal-dynamics.com) @@ -6,7 +6,7 @@ Build-Depends: debhelper (>=9) Standards-Version: 3.9.6 Homepage: https://subutai.io/ -Package: subutai-tray +Package: subutai-control-center Architecture: all Depends: gksu, libssh2-1, @@ -18,4 +18,4 @@ Depends: gksu, libxcb-render-util0, libxcb-xinerama0, libxcb-xkb1 -Description: Subutai Tray Application +Description: Subutai Control Center Application diff --git a/deb-packages/deb-packages-internal/debian/install b/deb-packages/deb-packages-internal/debian/install index 1437ec83..0173b42a 100644 --- a/deb-packages/deb-packages-internal/debian/install +++ b/deb-packages/deb-packages-internal/debian/install @@ -1,2 +1,2 @@ debian/icons/*.png /usr/share/icons -debian/SubutaiTray.tar.gz /tmp/subutai/ +debian/SubutaiControlCenter.tar.gz /tmp/subutai/ diff --git a/deb-packages/deb-packages-internal/debian/postinst b/deb-packages/deb-packages-internal/debian/postinst index 940af3c3..f17fec1d 100644 --- a/deb-packages/deb-packages-internal/debian/postinst +++ b/deb-packages/deb-packages-internal/debian/postinst @@ -8,19 +8,19 @@ mkdir -p /opt/subutai/Libs chmod -R 0777 /opt/subutai/log chmod -R 0777 /opt/subutai/bin -tray_script=/opt/subutai/bin/SubutaiTray -tray_link=/usr/bin/SubutaiTray -tray_binary=/opt/subutai/bin/subutai-tray +tray_script=/opt/subutai/bin/SubutaiControlCenter +tray_link=/usr/bin/SubutaiControlCenter +tray_binary=/opt/subutai/bin/subutai-control-center if [ -L $tray_link ]; then rm -rf $tray_link fi -tar zxf /tmp/subutai/SubutaiTray.tar.gz -C /tmp/subutai/ +tar zxf /tmp/subutai/SubutaiControlCenter.tar.gz -C /tmp/subutai/ -cp /tmp/subutai/SubutaiTray/Libs/* /opt/subutai/Libs/ -cp /tmp/subutai/SubutaiTray/bin/*.qm /opt/subutai/bin -cp /tmp/subutai/SubutaiTray/bin/subutai-tray $tray_binary +cp /tmp/subutai/SubutaiControlCenter/Libs/* /opt/subutai/Libs/ +cp /tmp/subutai/SubutaiControlCenter/bin/*.qm /opt/subutai/bin +cp /tmp/subutai/SubutaiControlCenter/bin/subutai-control-center $tray_binary echo "#!/bin/bash" > $tray_script echo "LD_LIBRARY_PATH=/opt/subutai/Libs/ $tray_binary" >> $tray_script @@ -30,14 +30,14 @@ chmod +x $tray_script chmod +x $tray_binary -desktop_file=/tmp/SubutaiTray.desktop +desktop_file=/tmp/SubutaiControlCenter.desktop echo "[Desktop Entry]" > $desktop_file echo "Version=1.0" >> $desktop_file -echo "Name=Subutai Tray" >> $desktop_file -echo "Comment=Subutai Tray Application" >> $desktop_file +echo "Name=Subutai Control Center" >> $desktop_file +echo "Comment=Subutai Control Center Application" >> $desktop_file echo "Keywords=Internet" >> $desktop_file -echo "Exec=/usr/bin/SubutaiTray" >> $desktop_file +echo "Exec=/usr/bin/SubutaiControlCenter" >> $desktop_file echo "Terminal=false" >> $desktop_file echo "Type=Application" >> $desktop_file echo "Icon=/usr/share/icons/Tray_icon_set-07.png" >> $desktop_file diff --git a/deb-packages/deb-packages-internal/debian/postrm b/deb-packages/deb-packages-internal/debian/postrm index ea6741e3..7799a925 100755 --- a/deb-packages/deb-packages-internal/debian/postrm +++ b/deb-packages/deb-packages-internal/debian/postrm @@ -16,8 +16,8 @@ if [ -d /opt/subutai/log ]; then rm -rf /opt/subutai/log fi -if [ -L /usr/bin/SubutaiTray ]; then - rm /usr/bin/SubutaiTray +if [ -L /usr/bin/SubutaiControlCenter ]; then + rm /usr/bin/SubutaiControlCenter fi count=`ls -1 /opt/subutai/bin/*.qm 2>/dev/null | wc -l` @@ -25,16 +25,16 @@ if [ $count != 0 ]; then rm /opt/subutai/bin/*.qm fi -if [ -f /opt/subutai/lbin/SubutaiTray ]; then - rm /opt/subutai/bin/SubutaiTray +if [ -f /opt/subutai/lbin/SubutaiControlCenter ]; then + rm /opt/subutai/bin/SubutaiControlCenter fi -if [ -f /opt/subutai/lbin/subutai-tray ]; then - rm /opt/subutai/bin/subutai-tray +if [ -f /opt/subutai/lbin/subutai-control-center ]; then + rm /opt/subutai/bin/subutai-control-center fi -if [ -f /usr/share/applications/SubutaiTray.desktop ]; then - rm /usr/share/applications/SubutaiTray.desktop +if [ -f /usr/share/applications/SubutaiControlCenter.desktop ]; then + rm /usr/share/applications/SubutaiControlCenter.desktop fi diff --git a/deb-packages/deb-packages-internal/pack_debian.sh b/deb-packages/deb-packages-internal/pack_debian.sh index be191ccd..0d9bd7f5 100755 --- a/deb-packages/deb-packages-internal/pack_debian.sh +++ b/deb-packages/deb-packages-internal/pack_debian.sh @@ -2,18 +2,18 @@ ./clear.sh mkdir -p debian/icons -mkdir -p debian/SubutaiTray/bin -mkdir -p debian/SubutaiTray/lib -mkdir -p debian/SubutaiTray/Libs +mkdir -p debian/SubutaiControlCenter/bin +mkdir -p debian/SubutaiControlCenter/lib +mkdir -p debian/SubutaiControlCenter/Libs cp $PWD/../../resources/Tray_icon_set-07.png debian/icons -cp ../../subutai_tray_bin/SubutaiTray debian/SubutaiTray/bin/subutai-tray -cp ../../subutai_tray_bin/*.qm debian/SubutaiTray/bin/ -./dependencies.sh ../../subutai_tray_bin/SubutaiTray debian/SubutaiTray/Libs/ +cp ../../subutai_control_center_bin/SubutaiControlCenter debian/SubutaiControlCenter/bin/subutai-control-center +cp ../../subutai_control_center_bin/*.qm debian/SubutaiControlCenter/bin/ +./dependencies.sh ../../subutai_control_center_bin/SubutaiControlCenter debian/SubutaiControlCenter/Libs/ cd debian -tar zcvf SubutaiTray.tar.gz SubutaiTray +tar zcvf SubutaiControlCenter.tar.gz SubutaiControlCenter cd .. #debuild -B -d diff --git a/subutai-tray.desktop b/subutai-tray.desktop deleted file mode 100644 index 6442b2d2..00000000 --- a/subutai-tray.desktop +++ /dev/null @@ -1,10 +0,0 @@ -[Desktop Entry] -Name=Subutai Tray -Type=Application -Version=1.0 -Comment=Tray for Subutai -Icon=subutai-tray -Exec=/usr/bin/subutai-tray -Path=/opt/subutai/tray -Categories=Network; -X-Desktop-File-Install-Version=0.22 From eb08cb920d85459f4f69e8c31abe4039b5afbbf5 Mon Sep 17 00:00:00 2001 From: erkin97 Date: Tue, 27 Feb 2018 11:09:55 +0600 Subject: [PATCH 04/22] rename subuttai desktop --- subutai-control-center.desktop | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 subutai-control-center.desktop diff --git a/subutai-control-center.desktop b/subutai-control-center.desktop new file mode 100644 index 00000000..0cd52b78 --- /dev/null +++ b/subutai-control-center.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Name=Subutai Control Center +Type=Application +Version=1.0 +Comment=Control Center for Subutai +Icon=subutai-tray +Exec=/usr/bin/subutai-control-center +Path=/opt/subutai/control-center +Categories=Network; +X-Desktop-File-Install-Version=0.22 From f8ee62cdfd729e0e6aeffcff4feeb2fd229aa5ae Mon Sep 17 00:00:00 2001 From: erkin97 Date: Tue, 27 Feb 2018 12:03:03 +0600 Subject: [PATCH 05/22] rename configure --- configure | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/configure b/configure index 9144e57b..150d2dea 100755 --- a/configure +++ b/configure @@ -5,11 +5,11 @@ showhelp() cat << ENDHELP usage: configure [options] -Configure Tray +Configure Control Center Options: --scheme= - Builds Tray with specified build scheme. Supported schemes is: master, dev, branch. Default: master + Builds Control Center with specified build scheme. Supported schemes is: master, dev, branch. Default: master --no-debian Disables build of deb file @@ -31,7 +31,7 @@ Options: ENDHELP } -name_prefix=tray +name_prefix=control-center scheme="master" branch=`git branch | grep \* | cut -d ' ' -f2` maintainer="Subutai Social" From 27536767d3a5700426815f5ce55e22306f5d1835 Mon Sep 17 00:00:00 2001 From: erkin97 Date: Tue, 27 Feb 2018 12:09:40 +0600 Subject: [PATCH 06/22] correct packer --- deb-packages/deb-packages-internal/debian/control | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deb-packages/deb-packages-internal/debian/control b/deb-packages/deb-packages-internal/debian/control index 0f5d5ea5..a518041d 100644 --- a/deb-packages/deb-packages-internal/debian/control +++ b/deb-packages/deb-packages-internal/debian/control @@ -1,4 +1,4 @@ -Source: subutai-contol-center +Source: subutai-control-center Section: net Priority: optional Maintainer: Adilet Zholdoshbekov (azholdoshbekov@optimal-dynamics.com) From 9a514be175b8f39632e2cfcf594bc199b139102c Mon Sep 17 00:00:00 2001 From: erkin97 Date: Tue, 27 Feb 2018 14:14:38 +0600 Subject: [PATCH 07/22] rename macos builder, maocs packer --- CHANGELOG | 4 ++++ build_mac.sh | 6 +++--- darwin-packages/pack.sh | 6 +++--- darwin-packages/scripts/postinstall | 4 ++-- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 628b8191..39e94baa 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,5 +1,9 @@ # Change Log +## Version 6.7.0 +* New feature File Transfer System. +* Fixed minor bugs. + ## [6.6.4] 2/16/2018 * Remote Desktop from Hub bug fixed diff --git a/build_mac.sh b/build_mac.sh index da422172..792c5742 100755 --- a/build_mac.sh +++ b/build_mac.sh @@ -1,5 +1,5 @@ #!/bin/bash -build="subutai_control-center_bin" +build="subutai_control_center_bin" if [ -d "$build" ]; then echo "Try to remove build" @@ -12,8 +12,8 @@ qmake ../SubutaiControlCenter.pro -r -spec macx-clang CONFIG+=x86_64 make mv ../*.qm . cd ../ -macdeployqt subutai_control-center_bin/SubutaiControlCenter.app -cd subutai_control-center_bin/SubutaiControlCenter.app/Contents/MacOS/ +macdeployqt subutai_control_center_bin/SubutaiControlCenter.app +cd subutai_control_center_bin/SubutaiControlCenter.app/Contents/MacOS/ cp ../../../*.qm . #source ../../../../after_build_step_mac_os cp SubutaiControlCenter SubutaiControlCenter_osx diff --git a/darwin-packages/pack.sh b/darwin-packages/pack.sh index bcd63b61..7812110e 100755 --- a/darwin-packages/pack.sh +++ b/darwin-packages/pack.sh @@ -32,14 +32,14 @@ cp ./Distribution.tmpl ./flat/Distribution sed -i -e "s/{VERSION_PLACEHOLDER}/$version/g" ./flat/Distribution sed -i -e "s/{SIZE_PLACEHOLDER}/$mbsize/g" ./flat/Distribution -PKGNAME="subutai-tray.pkg" +PKGNAME="subutai-control-center.pkg" case $BRANCH in dev) - PKGNAME="subutai-tray-dev.pkg" + PKGNAME="subutai-control-center-dev.pkg" ;; master) - PKGNAME="subutai-tray-master.pkg" + PKGNAME="subutai-control-center-master.pkg" ;; esac diff --git a/darwin-packages/scripts/postinstall b/darwin-packages/scripts/postinstall index 2fd8f361..05de1cf8 100755 --- a/darwin-packages/scripts/postinstall +++ b/darwin-packages/scripts/postinstall @@ -1,7 +1,7 @@ #!/bin/bash -chmod +x /Applications/SubutaiTray.app/Contents/MacOS/SubutaiTray -chmod +x /Applications/SubutaiTray.app/Contents/MacOS/SubutaiTray_osx +chmod +x /Applications/SubutaiControlCenter.app/Contents/MacOS/SubutaiControlCenter +chmod +x /Applications/SubutaiControlCenter.app/Contents/MacOS/SubutaiControlCenter_osx mkdir -p /Applications/Subutai chown -R $USER /Applications/Subutai* From d10dbdd5911f56d539395547e66f12e0f19e3746 Mon Sep 17 00:00:00 2001 From: erkin97 Date: Tue, 27 Feb 2018 14:19:59 +0600 Subject: [PATCH 08/22] cdn.subut.ai -> cdn.subutai.io --- SubutaiControlCenter.pro | 2 +- commons/src/OsBranchConsts.cpp | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/SubutaiControlCenter.pro b/SubutaiControlCenter.pro index f293ef20..c8f5d07b 100644 --- a/SubutaiControlCenter.pro +++ b/SubutaiControlCenter.pro @@ -141,7 +141,7 @@ DEFINES += TRAY_VERSION=\\\"$$TRAY_VERSION\\\" GIT_BRANCH_STR = $$system(git rev-parse --abbrev-ref HEAD) DEFINES += GIT_BRANCH=\\\"$$GIT_BRANCH_STR\\\" -GBV=BT_PROD +GBV=BT_DEV equals(GIT_BRANCH_STR, "master") { GBV=BT_MASTER } diff --git a/commons/src/OsBranchConsts.cpp b/commons/src/OsBranchConsts.cpp index a2c4c93e..c7292c06 100644 --- a/commons/src/OsBranchConsts.cpp +++ b/commons/src/OsBranchConsts.cpp @@ -168,9 +168,9 @@ template const QString& hub_kurjun_url_temp_internal(); return res; \ } -hub_kurjun_url_temp_internal_def(BT_PROD, "https://cdn.subut.ai:8338/kurjun/rest/%1") -hub_kurjun_url_temp_internal_def(BT_MASTER, "https://mastercdn.subut.ai:8338/kurjun/rest/%1") -hub_kurjun_url_temp_internal_def(BT_DEV, "https://devcdn.subut.ai:8338/kurjun/rest/%1") +hub_kurjun_url_temp_internal_def(BT_PROD, "https://cdn.subutai.io:8338/kurjun/rest/%1") +hub_kurjun_url_temp_internal_def(BT_MASTER, "https://mastercdn.subutai.io:8338/kurjun/rest/%1") +hub_kurjun_url_temp_internal_def(BT_DEV, "https://devcdn.subutai.io:8338/kurjun/rest/%1") const QString & hub_gorjun_url() { From ef00123cd3540224abbdf3bf031b217cc8e1b268 Mon Sep 17 00:00:00 2001 From: erkin97 Date: Tue, 27 Feb 2018 14:42:59 +0600 Subject: [PATCH 09/22] corrected format of changelog --- CHANGELOG | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index 39e94baa..feca2451 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,6 @@ # Change Log -## Version 6.7.0 +## [6.6.7] 2/26/2018 * New feature File Transfer System. * Fixed minor bugs. From 830a23ce43a0fd03316460f5d972d23eb011e311 Mon Sep 17 00:00:00 2001 From: erkin97 Date: Tue, 27 Feb 2018 16:14:17 +0600 Subject: [PATCH 10/22] correct macos packer --- darwin-packages/Distribution.tmpl | 6 +++--- darwin-packages/PackageInfo.tmpl | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/darwin-packages/Distribution.tmpl b/darwin-packages/Distribution.tmpl index 67b1b6d4..10e14788 100644 --- a/darwin-packages/Distribution.tmpl +++ b/darwin-packages/Distribution.tmpl @@ -1,6 +1,6 @@ - Subutai Tray {VERSION_PLACEHOLDER} + Subutai Control Center {VERSION_PLACEHOLDER} @@ -18,7 +18,7 @@ - + - #base.pkg + #base.pkg diff --git a/darwin-packages/PackageInfo.tmpl b/darwin-packages/PackageInfo.tmpl index 7dcab89c..7697c7fa 100644 --- a/darwin-packages/PackageInfo.tmpl +++ b/darwin-packages/PackageInfo.tmpl @@ -1,9 +1,9 @@ - + - + From 4d46937d659ba21ab687bfd4fd938a14f40682ef Mon Sep 17 00:00:00 2001 From: erkin97 Date: Tue, 27 Feb 2018 16:56:32 +0600 Subject: [PATCH 11/22] change format PackageInfo --- darwin-packages/PackageInfo.tmpl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/darwin-packages/PackageInfo.tmpl b/darwin-packages/PackageInfo.tmpl index 7697c7fa..c1421ddc 100644 --- a/darwin-packages/PackageInfo.tmpl +++ b/darwin-packages/PackageInfo.tmpl @@ -1,9 +1,9 @@ - + - + From d5ea818ee3c27a892c66ee034f8c54e6d58bad4a Mon Sep 17 00:00:00 2001 From: erkin97 Date: Tue, 27 Feb 2018 17:11:17 +0600 Subject: [PATCH 12/22] distrubition change --- darwin-packages/Distribution.tmpl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/darwin-packages/Distribution.tmpl b/darwin-packages/Distribution.tmpl index 10e14788..5fbd591b 100644 --- a/darwin-packages/Distribution.tmpl +++ b/darwin-packages/Distribution.tmpl @@ -18,7 +18,7 @@ - + - #base.pkg + #base.pkg From e10086488b147cd80943d7f4536f331c7cea590e Mon Sep 17 00:00:00 2001 From: erkin97 Date: Tue, 27 Feb 2018 17:45:29 +0600 Subject: [PATCH 13/22] rename info.plist --- Info.plist | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Info.plist b/Info.plist index 2baf43dd..384a1305 100644 --- a/Info.plist +++ b/Info.plist @@ -13,9 +13,9 @@ CFBundleSignature ???? CFBundleExecutable - SubutaiTray + SubutaiControlCenter CFBundleIdentifier - com.subutai-io.SubutaiTray + com.subutai-io.SubutaiControlCenter LSUIElement 1 From f83350759f0983ab8970d9286692f1465e167800 Mon Sep 17 00:00:00 2001 From: erkin97 Date: Tue, 27 Feb 2018 18:20:18 +0600 Subject: [PATCH 14/22] rename win builder --- build_win.bat | 18 +++++++++--------- tray.rc | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/build_win.bat b/build_win.bat index 48640514..74961708 100644 --- a/build_win.bat +++ b/build_win.bat @@ -1,29 +1,29 @@ set arg_vboxrt_dll=%1 -if exist "subutai_tray_bin" ( +if exist "subutai_control_center_bin" ( - echo "Try to remove subutai_tray_bin" + echo "Try to remove subutai_control_center_bin" - rd /Q /S "subutai_tray_bin" + rd /Q /S "subutai_control_center_bin" ) -md subutai_tray_bin +md subutai_control_center_bin -cd subutai_tray_bin +cd subutai_control_center_bin -qmake ..\SubutaiTray.pro -r -spec win32-msvc +qmake ..\SubutaiControlCenter.pro -r -spec win32-msvc jom cd .. -copy "libssh2\lib\win32\libssh2.dll" "subutai_tray_bin\release\" +copy "libssh2\lib\win32\libssh2.dll" "subutai_control_center_bin\release\" -cd subutai_tray_bin\release +cd subutai_control_center_bin\release del *.obj @@ -33,7 +33,7 @@ del *.h del *.moc -windeployqt --release --no-translations --compiler-runtime SubutaiTray.exe +windeployqt --release --no-translations --compiler-runtime SubutaiControlCenter.exe copy %arg_vboxrt_dll% . && echo "SUCCESS" diff --git a/tray.rc b/tray.rc index 00929c74..40b52698 100644 --- a/tray.rc +++ b/tray.rc @@ -1,7 +1,7 @@ #include -CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "SubutaiTray.exe.manifest" +CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "SubutaiControlCenter.exe.manifest" IDI_ICON1 ICON DISCARDABLE "resources/tray_icon_set_07.ico" From 56cfc8f9d875c9c6e7895e909225c250d381e5f9 Mon Sep 17 00:00:00 2001 From: erkin97 Date: Tue, 27 Feb 2018 19:10:56 +0600 Subject: [PATCH 15/22] change Jenkins file --- Jenkinsfile | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index f10e9a77..fd7da948 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -14,14 +14,14 @@ try { build_path_linux = "home/builder/build_master" linux_tray_build = "build_master.sh" - upload_deb = "subutai-tray-master.deb" - upload_sh = "SubutaiTray" + upload_deb = "subutai-control-center-master.deb" + upload_sh = "SubutaiControlCenter" upload_script = "upload_master.sh" upload_script_prod ="upload_prod.sh" build_mac = "master" - upload_pkg = "subutai-tray-master.pkg" - upload_osx = "SubutaiTray_osx" + upload_pkg = "subutai-control-center-master.pkg" + upload_osx = "SubutaControlCenter_osx" break; default: @@ -33,14 +33,14 @@ try { build_path_linux = "home/builder/build_dev" linux_tray_build = "./build_dev.sh" - upload_deb = "subutai-tray-dev.deb" - upload_sh = "SubutaiTray" + upload_deb = "subutai-control-center-dev.deb" + upload_sh = "SubutaiControlCenter" upload_script = "upload_dev.sh" upload_script_prod ="upload_prod.sh" build_mac = "dev" - upload_pkg = "subutai-tray-dev.pkg" - upload_osx = "SubutaiTray_osx" + upload_pkg = "subutai-control-center-dev.pkg" + upload_osx = "SubutaControlCenter_osx" } /* Building agent binary. Node block used to separate agent and subos code. From 2023c9011a278158fe53760ea98075be8b6d461a Mon Sep 17 00:00:00 2001 From: erkin97 Date: Tue, 27 Feb 2018 19:40:20 +0600 Subject: [PATCH 16/22] rename manifest --- SubutaiTray.exe.manifest | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SubutaiTray.exe.manifest b/SubutaiTray.exe.manifest index 77b6dea3..bc41364d 100644 --- a/SubutaiTray.exe.manifest +++ b/SubutaiTray.exe.manifest @@ -2,7 +2,7 @@ - + This application allows non technical users to manage their containers and see information about their environments, peers, balance etc. @@ -15,4 +15,4 @@ - \ No newline at end of file + From 15a56d6f7304f214b929234b3f98ccb1bb64e351 Mon Sep 17 00:00:00 2001 From: erkin97 Date: Tue, 27 Feb 2018 20:07:28 +0600 Subject: [PATCH 17/22] rename .exe.manifest --- SubutaiTray.exe.manifest => SubutaiControlCenter.exe.manifest | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename SubutaiTray.exe.manifest => SubutaiControlCenter.exe.manifest (100%) diff --git a/SubutaiTray.exe.manifest b/SubutaiControlCenter.exe.manifest similarity index 100% rename from SubutaiTray.exe.manifest rename to SubutaiControlCenter.exe.manifest From 126d88446ec1a4fa3eecf707f793f67ff1553707 Mon Sep 17 00:00:00 2001 From: erkin97 Date: Tue, 27 Feb 2018 20:23:54 +0600 Subject: [PATCH 18/22] change jenkins --- Jenkinsfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index fd7da948..7b659147 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -60,9 +60,9 @@ try { notifyBuildDetails = "\nFailed on Stage - Upload" sh """ - /Users/dev/upload/./${upload_script} /Users/dev/SRC/tray/subutai_tray_bin/${upload_pkg} - /Users/dev/upload/./${upload_script} /Users/dev/SRC/tray/subutai_tray_bin/${upload_osx} - /Users/dev/upload/./${upload_script_prod} /Users/dev/SRC/tray/subutai_tray_bin/${upload_pkg} + /Users/dev/upload/./${upload_script} /Users/dev/SRC/tray/subutai_control_center_bin/${upload_pkg} + /Users/dev/upload/./${upload_script} /Users/dev/SRC/tray/subutai_control_center_bin/${upload_osx} + /Users/dev/upload/./${upload_script_prod} /Users/dev/SRC/tray/subutai_control_center_bin/${upload_pkg} """ } From 0c8e4e08b0681492e9f0f1cb5fac7e5cb2bb588d Mon Sep 17 00:00:00 2001 From: erkin97 Date: Tue, 27 Feb 2018 20:45:57 +0600 Subject: [PATCH 19/22] change Jenkins --- Jenkinsfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 7b659147..e10ecd60 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -21,7 +21,7 @@ try { build_mac = "master" upload_pkg = "subutai-control-center-master.pkg" - upload_osx = "SubutaControlCenter_osx" + upload_osx = "SubutaiControlCenter_osx" break; default: @@ -40,7 +40,7 @@ try { build_mac = "dev" upload_pkg = "subutai-control-center-dev.pkg" - upload_osx = "SubutaControlCenter_osx" + upload_osx = "SubutaiControlCenter_osx" } /* Building agent binary. Node block used to separate agent and subos code. From 13b4e19dbffdbfd125cab17a7cfdef11a987eb53 Mon Sep 17 00:00:00 2001 From: erkin97 Date: Wed, 28 Feb 2018 12:00:12 +0600 Subject: [PATCH 20/22] put borders in file tranfer --- hub/forms/DlgTransferFile.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/hub/forms/DlgTransferFile.cpp b/hub/forms/DlgTransferFile.cpp index b99a8877..06b531be 100644 --- a/hub/forms/DlgTransferFile.cpp +++ b/hub/forms/DlgTransferFile.cpp @@ -133,6 +133,9 @@ void DlgTransferFile::Init() { design_table_widget(ui->tw_transfer_file, transfer_file_field_header); refresh_local_file_system(); + + ui->local_file_system->setShowGrid(true); + ui->remote_file_system->setShowGrid(true); } ////////////////////////////////////////////////////////////////////////////////////////// From ba368c1f2cdd8d4897b49329e64659e32b36576a Mon Sep 17 00:00:00 2001 From: erkin97 Date: Wed, 28 Feb 2018 15:16:15 +0600 Subject: [PATCH 21/22] put owner to kurjun files --- commons/src/OsBranchConsts.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/commons/src/OsBranchConsts.cpp b/commons/src/OsBranchConsts.cpp index c7292c06..ca236e47 100644 --- a/commons/src/OsBranchConsts.cpp +++ b/commons/src/OsBranchConsts.cpp @@ -168,9 +168,9 @@ template const QString& hub_kurjun_url_temp_internal(); return res; \ } -hub_kurjun_url_temp_internal_def(BT_PROD, "https://cdn.subutai.io:8338/kurjun/rest/%1") -hub_kurjun_url_temp_internal_def(BT_MASTER, "https://mastercdn.subutai.io:8338/kurjun/rest/%1") -hub_kurjun_url_temp_internal_def(BT_DEV, "https://devcdn.subutai.io:8338/kurjun/rest/%1") +hub_kurjun_url_temp_internal_def(BT_PROD, "https://cdn.subutai.io:8338/kurjun/rest/%1&owner=jenkins") +hub_kurjun_url_temp_internal_def(BT_MASTER, "https://mastercdn.subutai.io:8338/kurjun/rest/%1&owner=jenkins") +hub_kurjun_url_temp_internal_def(BT_DEV, "https://devcdn.subutai.io:8338/kurjun/rest/%1&owner=jenkins") const QString & hub_gorjun_url() { @@ -524,15 +524,15 @@ template const QString& p2p_package_url_temp_internal(); return res; \ } -p2p_package_url_def(BT_MASTER, OS_LINUX, "https://cdn.subutai.io:8338/kurjun/rest/raw/get?name=subutai-p2p-master.deb") -p2p_package_url_def(BT_MASTER, OS_MAC, "https://cdn.subutai.io:8338/kurjun/rest/raw/get?name=subutai-p2p-master.pkg") -p2p_package_url_def(BT_MASTER, OS_WIN, "https://cdn.subutai.io:8338/kurjun/rest/raw/get?name=subutai-p2p-master.msi") -p2p_package_url_def(BT_DEV, OS_LINUX, "https://cdn.subutai.io:8338/kurjun/rest/raw/get?name=subutai-p2p-dev.deb") -p2p_package_url_def(BT_DEV, OS_MAC, "https://cdn.subutai.io:8338/kurjun/rest/raw/get?name=subutai-p2p-dev.pkg") -p2p_package_url_def(BT_DEV, OS_WIN, "https://cdn.subutai.io:8338/kurjun/rest/raw/get?name=subutai-p2p-dev.msi") -p2p_package_url_def(BT_PROD, OS_LINUX, "https://cdn.subutai.io:8338/kurjun/rest/raw/get?name=subutai-p2p.deb") -p2p_package_url_def(BT_PROD, OS_MAC, "https://cdn.subutai.io:8338/kurjun/rest/raw/get?name=subutai-p2p.pkg") -p2p_package_url_def(BT_PROD, OS_WIN, "https://cdn.subutai.io:8338/kurjun/rest/raw/get?name=subutai-p2p.msi") +p2p_package_url_def(BT_MASTER, OS_LINUX, "https://cdn.subutai.io:8338/kurjun/rest/raw/get?name=subutai-p2p-master.deb&owner=jenkins") +p2p_package_url_def(BT_MASTER, OS_MAC, "https://cdn.subutai.io:8338/kurjun/rest/raw/get?name=subutai-p2p-master.pkg&owner=jenkins") +p2p_package_url_def(BT_MASTER, OS_WIN, "https://cdn.subutai.io:8338/kurjun/rest/raw/get?name=subutai-p2p-master.msi&owner=jenkins") +p2p_package_url_def(BT_DEV, OS_LINUX, "https://cdn.subutai.io:8338/kurjun/rest/raw/get?name=subutai-p2p-dev.deb&owner=jenkins") +p2p_package_url_def(BT_DEV, OS_MAC, "https://cdn.subutai.io:8338/kurjun/rest/raw/get?name=subutai-p2p.deb&owner=jenkins") +p2p_package_url_def(BT_DEV, OS_WIN, "https://cdn.subutai.io:8338/kurjun/rest/raw/get?name=subutai-p2p-dev.msi&owner=jenkins") +p2p_package_url_def(BT_PROD, OS_LINUX, "https://cdn.subutai.io:8338/kurjun/rest/raw/get?name=subutai-p2p.deb&owner=jenkins") +p2p_package_url_def(BT_PROD, OS_MAC, "https://cdn.subutai.io:8338/kurjun/rest/raw/get?name=subutai-p2p.pkg&owner=jenkins") +p2p_package_url_def(BT_PROD, OS_WIN, "https://cdn.subutai.io:8338/kurjun/rest/raw/get?name=subutai-p2p.msi&owner=jenkins") const QString & p2p_package_url() { From 69730a092d8fd570f3907bb89803532a0fe1d44a Mon Sep 17 00:00:00 2001 From: erkin97 Date: Wed, 28 Feb 2018 16:32:35 +0600 Subject: [PATCH 22/22] correct version --- CHANGELOG | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index feca2451..88c8d5d4 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,6 @@ # Change Log -## [6.6.7] 2/26/2018 +## [6.7.0] 2/26/2018 * New feature File Transfer System. * Fixed minor bugs.