|
@@ -7,7 +7,9 @@ import uuid
|
|
|
|
|
|
from flask import Flask, request
|
|
from flask import Flask, request
|
|
|
|
|
|
|
|
+# base_directory = "/home/easysoft054/Projects/git-es"
|
|
base_directory = "/Users/maronakins/Documents"
|
|
base_directory = "/Users/maronakins/Documents"
|
|
|
|
+ALLOWED_EXTENSIONS_ICON = {'png'}
|
|
|
|
|
|
app = Flask(__name__)
|
|
app = Flask(__name__)
|
|
app.base_project = {
|
|
app.base_project = {
|
|
@@ -35,6 +37,9 @@ def vprint(*data):
|
|
def indented_str(n, s, line=True, spaces=4) -> str:
|
|
def indented_str(n, s, line=True, spaces=4) -> str:
|
|
return " " * n * spaces + s + os.linesep if line else ""
|
|
return " " * n * spaces + s + os.linesep if line else ""
|
|
|
|
|
|
|
|
+def allowed_file(filename):
|
|
|
|
+ return '.' in filename and \
|
|
|
|
+ filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS_ICON
|
|
|
|
|
|
def create_folder(platform, uid):
|
|
def create_folder(platform, uid):
|
|
path = os.path.join(app.temp_folder, uid)
|
|
path = os.path.join(app.temp_folder, uid)
|
|
@@ -383,6 +388,14 @@ def change(app_id: str, platform: str, mode: str, path_dest: str, features: dict
|
|
f.write(indented_str(2, "ImageView imageViewChat = findViewById(R.id.btn_chat);"))
|
|
f.write(indented_str(2, "ImageView imageViewChat = findViewById(R.id.btn_chat);"))
|
|
else:
|
|
else:
|
|
f.write(indented_str(2, "// ImageView imageViewChat = findViewById(R.id.btn_chat);"))
|
|
f.write(indented_str(2, "// ImageView imageViewChat = findViewById(R.id.btn_chat);"))
|
|
|
|
+ if features["ac"]["status"]:
|
|
|
|
+ f.write(indented_str(2, "ImageView imageViewAudioCall = findViewById(R.id.btn_audio_call);"))
|
|
|
|
+ else:
|
|
|
|
+ f.write(indented_str(2, "// ImageView imageViewAudioCall = findViewById(R.id.btn_audio_call);"))
|
|
|
|
+ if features["vc"]["status"]:
|
|
|
|
+ f.write(indented_str(2, "ImageView imageViewVideoCall = findViewById(R.id.btn_video_call);"))
|
|
|
|
+ else:
|
|
|
|
+ f.write(indented_str(2, "// ImageView imageViewVideoCall = findViewById(R.id.btn_video_call);"))
|
|
if features["call"]["status"]:
|
|
if features["call"]["status"]:
|
|
f.write(indented_str(2, "ImageView imageViewCall = findViewById(R.id.btn_call);"))
|
|
f.write(indented_str(2, "ImageView imageViewCall = findViewById(R.id.btn_call);"))
|
|
else:
|
|
else:
|
|
@@ -395,6 +408,38 @@ def change(app_id: str, platform: str, mode: str, path_dest: str, features: dict
|
|
f.write(indented_str(2, "ImageView imageViewSF = findViewById(R.id.btn_sf);"))
|
|
f.write(indented_str(2, "ImageView imageViewSF = findViewById(R.id.btn_sf);"))
|
|
else:
|
|
else:
|
|
f.write(indented_str(2, "// ImageView imageViewSF = findViewById(R.id.btn_sf);"))
|
|
f.write(indented_str(2, "// ImageView imageViewSF = findViewById(R.id.btn_sf);"))
|
|
|
|
+ if features["custom_url"]["status"]:
|
|
|
|
+ f.write(indented_str(2, "ImageView imageViewCustomURL = findViewById(R.id.btn_custom_url);"))
|
|
|
|
+ else:
|
|
|
|
+ f.write(indented_str(2, "// ImageView imageViewCustomURL = findViewById(R.id.btn_custom_url);"))
|
|
|
|
+ if features["xapps"]["status"]:
|
|
|
|
+ f.write(indented_str(2, "ImageView imageViewExternalApps = findViewById(R.id.btn_xapps);"))
|
|
|
|
+ else:
|
|
|
|
+ f.write(indented_str(2, "// ImageView imageViewExternalApps = findViewById(R.id.btn_xapps);"))
|
|
|
|
+ if features["conpost"]["status"]:
|
|
|
|
+ f.write(indented_str(2, "ImageView imageViewContentPosting = findViewById(R.id.btn_contentpost);"))
|
|
|
|
+ else:
|
|
|
|
+ f.write(indented_str(2, "// ImageView imageViewContentPosting = findViewById(R.id.btn_contentpost);"))
|
|
|
|
+ if features["ppob"]["status"]:
|
|
|
|
+ f.write(indented_str(2, "ImageView imageViewPPOB = findViewById(R.id.btn_ppob);"))
|
|
|
|
+ else:
|
|
|
|
+ f.write(indented_str(2, "// ImageView imageViewPPOB = findViewById(R.id.btn_ppob);"))
|
|
|
|
+ if features["wallet"]["status"]:
|
|
|
|
+ f.write(indented_str(2, "ImageView imageViewWallet = findViewById(R.id.btn_wallet);"))
|
|
|
|
+ else:
|
|
|
|
+ f.write(indented_str(2, "// ImageView imageViewWallet = findViewById(R.id.btn_wallet);"))
|
|
|
|
+ if features["social_commerce"]["status"]:
|
|
|
|
+ f.write(indented_str(2, "ImageView imageViewSocialCommerce = findViewById(R.id.btn_social_commerce);"))
|
|
|
|
+ else:
|
|
|
|
+ f.write(indented_str(2, "// ImageView imageViewSocialCommerce = findViewById(R.id.btn_social_commerce);"))
|
|
|
|
+ if features["news_update"]["status"]:
|
|
|
|
+ f.write(indented_str(2, "ImageView imageViewNews = findViewById(R.id.btn_news);"))
|
|
|
|
+ else:
|
|
|
|
+ f.write(indented_str(2, "// ImageView imageViewNews = findViewById(R.id.btn_news);"))
|
|
|
|
+ if features["contact_list"]["status"]:
|
|
|
|
+ f.write(indented_str(2, "ImageView imageViewContactList = findViewById(R.id.btn_contact_list);"))
|
|
|
|
+ else:
|
|
|
|
+ f.write(indented_str(2, "// ImageView imageViewContactList = findViewById(R.id.btn_contact_list);"))
|
|
f.write(indented_str(0, ""))
|
|
f.write(indented_str(0, ""))
|
|
f.write(indented_str(2, "imageViewSetting.setOnClickListener(v -> {"))
|
|
f.write(indented_str(2, "imageViewSetting.setOnClickListener(v -> {"))
|
|
f.write(indented_str(3, "API.openSettings();"))
|
|
f.write(indented_str(3, "API.openSettings();"))
|
|
@@ -418,7 +463,7 @@ def change(app_id: str, platform: str, mode: str, path_dest: str, features: dict
|
|
f.write(indented_str(2, "// imageViewNC.setOnClickListener(v -> {"))
|
|
f.write(indented_str(2, "// imageViewNC.setOnClickListener(v -> {"))
|
|
f.write(indented_str(3, "// API.openNotificationCenter();"))
|
|
f.write(indented_str(3, "// API.openNotificationCenter();"))
|
|
f.write(indented_str(2, "// });"))
|
|
f.write(indented_str(2, "// });"))
|
|
- if features["nc"]["status"]:
|
|
|
|
|
|
+ if features["im"]["status"]:
|
|
f.write(indented_str(2, "imageViewChat.setOnClickListener(v -> {"))
|
|
f.write(indented_str(2, "imageViewChat.setOnClickListener(v -> {"))
|
|
f.write(indented_str(3, "API.openChat();"))
|
|
f.write(indented_str(3, "API.openChat();"))
|
|
f.write(indented_str(2, "});"))
|
|
f.write(indented_str(2, "});"))
|
|
@@ -426,6 +471,22 @@ def change(app_id: str, platform: str, mode: str, path_dest: str, features: dict
|
|
f.write(indented_str(2, "// imageViewChat.setOnClickListener(v -> {"))
|
|
f.write(indented_str(2, "// imageViewChat.setOnClickListener(v -> {"))
|
|
f.write(indented_str(3, "// API.openChat();"))
|
|
f.write(indented_str(3, "// API.openChat();"))
|
|
f.write(indented_str(2, "// });"))
|
|
f.write(indented_str(2, "// });"))
|
|
|
|
+ if features["ac"]["status"]:
|
|
|
|
+ f.write(indented_str(2, "imageViewAudioCall.setOnClickListener(v -> {"))
|
|
|
|
+ f.write(indented_str(3, "API.openAudioCall();"))
|
|
|
|
+ f.write(indented_str(2, "});"))
|
|
|
|
+ else:
|
|
|
|
+ f.write(indented_str(2, "// imageViewAudioCall.setOnClickListener(v -> {"))
|
|
|
|
+ f.write(indented_str(3, "// API.openAudioCall();"))
|
|
|
|
+ f.write(indented_str(2, "// });"))
|
|
|
|
+ if features["vc"]["status"]:
|
|
|
|
+ f.write(indented_str(2, "imageViewVideoCall.setOnClickListener(v -> {"))
|
|
|
|
+ f.write(indented_str(3, "API.openVideoCall();"))
|
|
|
|
+ f.write(indented_str(2, "});"))
|
|
|
|
+ else:
|
|
|
|
+ f.write(indented_str(2, "// imageViewVideoCall.setOnClickListener(v -> {"))
|
|
|
|
+ f.write(indented_str(3, "// API.openVideoCall();"))
|
|
|
|
+ f.write(indented_str(2, "// });"))
|
|
if features["call"]["status"]:
|
|
if features["call"]["status"]:
|
|
f.write(indented_str(2, "imageViewCall.setOnClickListener(v -> {"))
|
|
f.write(indented_str(2, "imageViewCall.setOnClickListener(v -> {"))
|
|
f.write(indented_str(3, "API.openCall();"))
|
|
f.write(indented_str(3, "API.openCall();"))
|
|
@@ -450,6 +511,70 @@ def change(app_id: str, platform: str, mode: str, path_dest: str, features: dict
|
|
f.write(indented_str(2, "// imageViewSF.setOnClickListener(v -> {"))
|
|
f.write(indented_str(2, "// imageViewSF.setOnClickListener(v -> {"))
|
|
f.write(indented_str(3, "// API.openSecureFolder();"))
|
|
f.write(indented_str(3, "// API.openSecureFolder();"))
|
|
f.write(indented_str(2, "// });"))
|
|
f.write(indented_str(2, "// });"))
|
|
|
|
+ if features["custom_url"]["status"]:
|
|
|
|
+ f.write(indented_str(2, "imageViewCustomURL.setOnClickListener(v -> {"))
|
|
|
|
+ f.write(indented_str(3, "API.openCustomURL();"))
|
|
|
|
+ f.write(indented_str(2, "});"))
|
|
|
|
+ else:
|
|
|
|
+ f.write(indented_str(2, "// imageViewCustomURL.setOnClickListener(v -> {"))
|
|
|
|
+ f.write(indented_str(3, "// API.openCustomURL();"))
|
|
|
|
+ f.write(indented_str(2, "// });"))
|
|
|
|
+ if features["xapps"]["status"]:
|
|
|
|
+ f.write(indented_str(2, "imageViewExternalApps.setOnClickListener(v -> {"))
|
|
|
|
+ f.write(indented_str(3, "API.openExternalApps();"))
|
|
|
|
+ f.write(indented_str(2, "});"))
|
|
|
|
+ else:
|
|
|
|
+ f.write(indented_str(2, "// imageViewExternalApps.setOnClickListener(v -> {"))
|
|
|
|
+ f.write(indented_str(3, "// API.openExternalApps();"))
|
|
|
|
+ f.write(indented_str(2, "// });"))
|
|
|
|
+ if features["conpost"]["status"]:
|
|
|
|
+ f.write(indented_str(2, "imageViewContentPosting.setOnClickListener(v -> {"))
|
|
|
|
+ f.write(indented_str(3, "API.openUserGeneratedContent();"))
|
|
|
|
+ f.write(indented_str(2, "});"))
|
|
|
|
+ else:
|
|
|
|
+ f.write(indented_str(2, "// imageViewContentPosting.setOnClickListener(v -> {"))
|
|
|
|
+ f.write(indented_str(3, "// API.openUserGeneratedContent();"))
|
|
|
|
+ f.write(indented_str(2, "// });"))
|
|
|
|
+ if features["ppob"]["status"]:
|
|
|
|
+ f.write(indented_str(2, "imageViewPPOB.setOnClickListener(v -> {"))
|
|
|
|
+ f.write(indented_str(3, "API.openPPOB();"))
|
|
|
|
+ f.write(indented_str(2, "});"))
|
|
|
|
+ else:
|
|
|
|
+ f.write(indented_str(2, "// imageViewPPOB.setOnClickListener(v -> {"))
|
|
|
|
+ f.write(indented_str(3, "// API.openPPOB();"))
|
|
|
|
+ f.write(indented_str(2, "// });"))
|
|
|
|
+ if features["wallet"]["status"]:
|
|
|
|
+ f.write(indented_str(2, "imageViewWallet.setOnClickListener(v -> {"))
|
|
|
|
+ f.write(indented_str(3, "API.openWallet();"))
|
|
|
|
+ f.write(indented_str(2, "});"))
|
|
|
|
+ else:
|
|
|
|
+ f.write(indented_str(2, "// imageViewWallet.setOnClickListener(v -> {"))
|
|
|
|
+ f.write(indented_str(3, "// API.openWallet();"))
|
|
|
|
+ f.write(indented_str(2, "// });"))
|
|
|
|
+ if features["social_commerce"]["status"]:
|
|
|
|
+ f.write(indented_str(2, "imageViewSocialCommerce.setOnClickListener(v -> {"))
|
|
|
|
+ f.write(indented_str(3, "API.openSocialCommerce();"))
|
|
|
|
+ f.write(indented_str(2, "});"))
|
|
|
|
+ else:
|
|
|
|
+ f.write(indented_str(2, "// imageViewSocialCommerce.setOnClickListener(v -> {"))
|
|
|
|
+ f.write(indented_str(3, "// API.openSocialCommerce();"))
|
|
|
|
+ f.write(indented_str(2, "// });"))
|
|
|
|
+ if features["news_update"]["status"]:
|
|
|
|
+ f.write(indented_str(2, "imageViewNews.setOnClickListener(v -> {"))
|
|
|
|
+ f.write(indented_str(3, "API.openNewsUpdate();"))
|
|
|
|
+ f.write(indented_str(2, "});"))
|
|
|
|
+ else:
|
|
|
|
+ f.write(indented_str(2, "// imageViewNews.setOnClickListener(v -> {"))
|
|
|
|
+ f.write(indented_str(3, "// API.openNewsUpdate();"))
|
|
|
|
+ f.write(indented_str(2, "// });"))
|
|
|
|
+ if features["contact_list"]["status"]:
|
|
|
|
+ f.write(indented_str(2, "imageViewContactList.setOnClickListener(v -> {"))
|
|
|
|
+ f.write(indented_str(3, "API.openConversation();"))
|
|
|
|
+ f.write(indented_str(2, "});"))
|
|
|
|
+ else:
|
|
|
|
+ f.write(indented_str(2, "// imageViewContactList.setOnClickListener(v -> {"))
|
|
|
|
+ f.write(indented_str(3, "// API.openConversation();"))
|
|
|
|
+ f.write(indented_str(2, "// });"))
|
|
elif "//BREAK" in line:
|
|
elif "//BREAK" in line:
|
|
if mode == "floating" or mode == "grid":
|
|
if mode == "floating" or mode == "grid":
|
|
f.write("}")
|
|
f.write("}")
|
|
@@ -635,7 +760,7 @@ def change(app_id: str, platform: str, mode: str, path_dest: str, features: dict
|
|
f.write(indented_str(1, "<item"))
|
|
f.write(indented_str(1, "<item"))
|
|
f.write(indented_str(2, 'android:id="@+id/action_custom_url"'))
|
|
f.write(indented_str(2, 'android:id="@+id/action_custom_url"'))
|
|
f.write(indented_str(2, f'android:orderInCategory="{n}"'))
|
|
f.write(indented_str(2, f'android:orderInCategory="{n}"'))
|
|
- f.write(indented_str(2, 'android:title=Custom URL"'))
|
|
|
|
|
|
+ f.write(indented_str(2, 'android:title="Custom URL"'))
|
|
f.write(indented_str(2, 'app:showAsAction="never" />'))
|
|
f.write(indented_str(2, 'app:showAsAction="never" />'))
|
|
n = n + 1
|
|
n = n + 1
|
|
else:
|
|
else:
|
|
@@ -649,28 +774,28 @@ def change(app_id: str, platform: str, mode: str, path_dest: str, features: dict
|
|
f.write(indented_str(1, "<item"))
|
|
f.write(indented_str(1, "<item"))
|
|
f.write(indented_str(2, 'android:id="@+id/action_xapps"'))
|
|
f.write(indented_str(2, 'android:id="@+id/action_xapps"'))
|
|
f.write(indented_str(2, f'android:orderInCategory="{n}"'))
|
|
f.write(indented_str(2, f'android:orderInCategory="{n}"'))
|
|
- f.write(indented_str(2, 'android:title=External Apps"'))
|
|
|
|
|
|
+ f.write(indented_str(2, 'android:title="External Apps"'))
|
|
f.write(indented_str(2, 'app:showAsAction="never" />'))
|
|
f.write(indented_str(2, 'app:showAsAction="never" />'))
|
|
n = n + 1
|
|
n = n + 1
|
|
else:
|
|
else:
|
|
f.write(indented_str(1, "<!-- <item"))
|
|
f.write(indented_str(1, "<!-- <item"))
|
|
f.write(indented_str(2, 'android:id="@+id/action_xapps"'))
|
|
f.write(indented_str(2, 'android:id="@+id/action_xapps"'))
|
|
f.write(indented_str(2, f'android:orderInCategory="{n}"'))
|
|
f.write(indented_str(2, f'android:orderInCategory="{n}"'))
|
|
- f.write(indented_str(2, 'android:title=External Apps"'))
|
|
|
|
|
|
+ f.write(indented_str(2, 'android:title="External Apps"'))
|
|
f.write(indented_str(2, 'app:showAsAction="never" /> -->'))
|
|
f.write(indented_str(2, 'app:showAsAction="never" /> -->'))
|
|
n = n + 1
|
|
n = n + 1
|
|
if features["conpost"]["status"]:
|
|
if features["conpost"]["status"]:
|
|
f.write(indented_str(1, "<item"))
|
|
f.write(indented_str(1, "<item"))
|
|
f.write(indented_str(2, 'android:id="@+id/action_conpost"'))
|
|
f.write(indented_str(2, 'android:id="@+id/action_conpost"'))
|
|
f.write(indented_str(2, f'android:orderInCategory="{n}"'))
|
|
f.write(indented_str(2, f'android:orderInCategory="{n}"'))
|
|
- f.write(indented_str(2, 'android:title=User Generated Content"'))
|
|
|
|
|
|
+ f.write(indented_str(2, 'android:title="User Generated Content"'))
|
|
f.write(indented_str(2, 'app:showAsAction="never" />'))
|
|
f.write(indented_str(2, 'app:showAsAction="never" />'))
|
|
n = n + 1
|
|
n = n + 1
|
|
else:
|
|
else:
|
|
f.write(indented_str(1, "<!-- <item"))
|
|
f.write(indented_str(1, "<!-- <item"))
|
|
f.write(indented_str(2, 'android:id="@+id/action_conpost"'))
|
|
f.write(indented_str(2, 'android:id="@+id/action_conpost"'))
|
|
f.write(indented_str(2, f'android:orderInCategory="{n}"'))
|
|
f.write(indented_str(2, f'android:orderInCategory="{n}"'))
|
|
- f.write(indented_str(2, 'android:title=User Generated Content"'))
|
|
|
|
|
|
+ f.write(indented_str(2, 'android:title="User Generated Content"'))
|
|
f.write(indented_str(2, 'app:showAsAction="never" /> -->'))
|
|
f.write(indented_str(2, 'app:showAsAction="never" /> -->'))
|
|
n = n + 1
|
|
n = n + 1
|
|
if features["ppob"]["status"]:
|
|
if features["ppob"]["status"]:
|
|
@@ -828,6 +953,34 @@ def change(app_id: str, platform: str, mode: str, path_dest: str, features: dict
|
|
f.write(indented_str(2, '<!--android:layout_width="100dp"-->'))
|
|
f.write(indented_str(2, '<!--android:layout_width="100dp"-->'))
|
|
f.write(indented_str(2, '<!--android:layout_margin="10dp"-->'))
|
|
f.write(indented_str(2, '<!--android:layout_margin="10dp"-->'))
|
|
f.write(indented_str(2, '<!--android:src="@drawable/pb_button_chat"/>-->'))
|
|
f.write(indented_str(2, '<!--android:src="@drawable/pb_button_chat"/>-->'))
|
|
|
|
+ if "ac" in l_features:
|
|
|
|
+ f.write(indented_str(1, "<ImageView"))
|
|
|
|
+ f.write(indented_str(2, 'android:id="@+id/btn_audio_call"'))
|
|
|
|
+ f.write(indented_str(2, 'android:layout_height="100dp"'))
|
|
|
|
+ f.write(indented_str(2, 'android:layout_width="100dp"'))
|
|
|
|
+ f.write(indented_str(2, 'android:layout_margin="10dp"'))
|
|
|
|
+ f.write(indented_str(2, 'android:src="@drawable/pb_button_audio_call"/>'))
|
|
|
|
+ else:
|
|
|
|
+ f.write(indented_str(1, "<!--<ImageView-->"))
|
|
|
|
+ f.write(indented_str(2, '<!--android:id="@+id/btn_audio_call"-->'))
|
|
|
|
+ f.write(indented_str(2, '<!--android:layout_height="100dp"-->'))
|
|
|
|
+ f.write(indented_str(2, '<!--android:layout_width="100dp"-->'))
|
|
|
|
+ f.write(indented_str(2, '<!--android:layout_margin="10dp"-->'))
|
|
|
|
+ f.write(indented_str(2, '<!--android:src="@drawable/pb_button_audio_call"/>-->'))
|
|
|
|
+ if "vc" in l_features:
|
|
|
|
+ f.write(indented_str(1, "<ImageView"))
|
|
|
|
+ f.write(indented_str(2, 'android:id="@+id/btn_video_call"'))
|
|
|
|
+ f.write(indented_str(2, 'android:layout_height="100dp"'))
|
|
|
|
+ f.write(indented_str(2, 'android:layout_width="100dp"'))
|
|
|
|
+ f.write(indented_str(2, 'android:layout_margin="10dp"'))
|
|
|
|
+ f.write(indented_str(2, 'android:src="@drawable/pb_button_video_call"/>'))
|
|
|
|
+ else:
|
|
|
|
+ f.write(indented_str(1, "<!--<ImageView-->"))
|
|
|
|
+ f.write(indented_str(2, '<!--android:id="@+id/btn_video_call"-->'))
|
|
|
|
+ f.write(indented_str(2, '<!--android:layout_height="100dp"-->'))
|
|
|
|
+ f.write(indented_str(2, '<!--android:layout_width="100dp"-->'))
|
|
|
|
+ f.write(indented_str(2, '<!--android:layout_margin="10dp"-->'))
|
|
|
|
+ f.write(indented_str(2, '<!--android:src="@drawable/pb_button_video_call"/>-->'))
|
|
if "call" in l_features:
|
|
if "call" in l_features:
|
|
f.write(indented_str(1, "<ImageView"))
|
|
f.write(indented_str(1, "<ImageView"))
|
|
f.write(indented_str(2, 'android:id="@+id/btn_call"'))
|
|
f.write(indented_str(2, 'android:id="@+id/btn_call"'))
|
|
@@ -870,6 +1023,118 @@ def change(app_id: str, platform: str, mode: str, path_dest: str, features: dict
|
|
f.write(indented_str(2, '<!--android:layout_width="100dp"-->'))
|
|
f.write(indented_str(2, '<!--android:layout_width="100dp"-->'))
|
|
f.write(indented_str(2, '<!--android:layout_margin="10dp"-->'))
|
|
f.write(indented_str(2, '<!--android:layout_margin="10dp"-->'))
|
|
f.write(indented_str(2, '<!--android:src="@drawable/pb_button_secure_folder"/>-->'))
|
|
f.write(indented_str(2, '<!--android:src="@drawable/pb_button_secure_folder"/>-->'))
|
|
|
|
+ if "custom_url" in l_features:
|
|
|
|
+ f.write(indented_str(1, "<ImageView"))
|
|
|
|
+ f.write(indented_str(2, 'android:id="@+id/btn_custom_url"'))
|
|
|
|
+ f.write(indented_str(2, 'android:layout_height="100dp"'))
|
|
|
|
+ f.write(indented_str(2, 'android:layout_width="100dp"'))
|
|
|
|
+ f.write(indented_str(2, 'android:layout_margin="10dp"'))
|
|
|
|
+ f.write(indented_str(2, 'android:src="@drawable/pb_button_custom_url"/>'))
|
|
|
|
+ else:
|
|
|
|
+ f.write(indented_str(1, "<!--<ImageView-->"))
|
|
|
|
+ f.write(indented_str(2, '<!--android:id="@+id/btn_custom_url"-->'))
|
|
|
|
+ f.write(indented_str(2, '<!--android:layout_height="100dp"-->'))
|
|
|
|
+ f.write(indented_str(2, '<!--android:layout_width="100dp"-->'))
|
|
|
|
+ f.write(indented_str(2, '<!--android:layout_margin="10dp"-->'))
|
|
|
|
+ f.write(indented_str(2, '<!--android:src="@drawable/pb_button_custom_url"/>-->'))
|
|
|
|
+ if "xapps" in l_features:
|
|
|
|
+ f.write(indented_str(1, "<ImageView"))
|
|
|
|
+ f.write(indented_str(2, 'android:id="@+id/btn_xapps"'))
|
|
|
|
+ f.write(indented_str(2, 'android:layout_height="100dp"'))
|
|
|
|
+ f.write(indented_str(2, 'android:layout_width="100dp"'))
|
|
|
|
+ f.write(indented_str(2, 'android:layout_margin="10dp"'))
|
|
|
|
+ f.write(indented_str(2, 'android:src="@drawable/pb_button_external_apps"/>'))
|
|
|
|
+ else:
|
|
|
|
+ f.write(indented_str(1, "<!--<ImageView-->"))
|
|
|
|
+ f.write(indented_str(2, '<!--android:id="@+id/btn_xapps"-->'))
|
|
|
|
+ f.write(indented_str(2, '<!--android:layout_height="100dp"-->'))
|
|
|
|
+ f.write(indented_str(2, '<!--android:layout_width="100dp"-->'))
|
|
|
|
+ f.write(indented_str(2, '<!--android:layout_margin="10dp"-->'))
|
|
|
|
+ f.write(indented_str(2, '<!--android:src="@drawable/pb_button_external_apps"/>-->'))
|
|
|
|
+ if "conpost" in l_features:
|
|
|
|
+ f.write(indented_str(1, "<ImageView"))
|
|
|
|
+ f.write(indented_str(2, 'android:id="@+id/btn_contentpost"'))
|
|
|
|
+ f.write(indented_str(2, 'android:layout_height="100dp"'))
|
|
|
|
+ f.write(indented_str(2, 'android:layout_width="100dp"'))
|
|
|
|
+ f.write(indented_str(2, 'android:layout_margin="10dp"'))
|
|
|
|
+ f.write(indented_str(2, 'android:src="@drawable/pb_button_user_content"/>'))
|
|
|
|
+ else:
|
|
|
|
+ f.write(indented_str(1, "<!--<ImageView-->"))
|
|
|
|
+ f.write(indented_str(2, '<!--android:id="@+id/btn_contentpost"-->'))
|
|
|
|
+ f.write(indented_str(2, '<!--android:layout_height="100dp"-->'))
|
|
|
|
+ f.write(indented_str(2, '<!--android:layout_width="100dp"-->'))
|
|
|
|
+ f.write(indented_str(2, '<!--android:layout_margin="10dp"-->'))
|
|
|
|
+ f.write(indented_str(2, '<!--android:src="@drawable/pb_button_user_content"/>-->'))
|
|
|
|
+ if "ppob" in l_features:
|
|
|
|
+ f.write(indented_str(1, "<ImageView"))
|
|
|
|
+ f.write(indented_str(2, 'android:id="@+id/btn_ppob"'))
|
|
|
|
+ f.write(indented_str(2, 'android:layout_height="100dp"'))
|
|
|
|
+ f.write(indented_str(2, 'android:layout_width="100dp"'))
|
|
|
|
+ f.write(indented_str(2, 'android:layout_margin="10dp"'))
|
|
|
|
+ f.write(indented_str(2, 'android:src="@drawable/pb_button_ppob"/>'))
|
|
|
|
+ else:
|
|
|
|
+ f.write(indented_str(1, "<!--<ImageView-->"))
|
|
|
|
+ f.write(indented_str(2, '<!--android:id="@+id/btn_ppob"-->'))
|
|
|
|
+ f.write(indented_str(2, '<!--android:layout_height="100dp"-->'))
|
|
|
|
+ f.write(indented_str(2, '<!--android:layout_width="100dp"-->'))
|
|
|
|
+ f.write(indented_str(2, '<!--android:layout_margin="10dp"-->'))
|
|
|
|
+ f.write(indented_str(2, '<!--android:src="@drawable/pb_button_ppob"/>-->'))
|
|
|
|
+ if "wallet" in l_features:
|
|
|
|
+ f.write(indented_str(1, "<ImageView"))
|
|
|
|
+ f.write(indented_str(2, 'android:id="@+id/btn_wallet"'))
|
|
|
|
+ f.write(indented_str(2, 'android:layout_height="100dp"'))
|
|
|
|
+ f.write(indented_str(2, 'android:layout_width="100dp"'))
|
|
|
|
+ f.write(indented_str(2, 'android:layout_margin="10dp"'))
|
|
|
|
+ f.write(indented_str(2, 'android:src="@drawable/pb_button_wallet"/>'))
|
|
|
|
+ else:
|
|
|
|
+ f.write(indented_str(1, "<!--<ImageView-->"))
|
|
|
|
+ f.write(indented_str(2, '<!--android:id="@+id/btn_wallet"-->'))
|
|
|
|
+ f.write(indented_str(2, '<!--android:layout_height="100dp"-->'))
|
|
|
|
+ f.write(indented_str(2, '<!--android:layout_width="100dp"-->'))
|
|
|
|
+ f.write(indented_str(2, '<!--android:layout_margin="10dp"-->'))
|
|
|
|
+ f.write(indented_str(2, '<!--android:src="@drawable/pb_button_wallet"/>-->'))
|
|
|
|
+ if "social_commerce" in l_features:
|
|
|
|
+ f.write(indented_str(1, "<ImageView"))
|
|
|
|
+ f.write(indented_str(2, 'android:id="@+id/btn_social_commerce"'))
|
|
|
|
+ f.write(indented_str(2, 'android:layout_height="100dp"'))
|
|
|
|
+ f.write(indented_str(2, 'android:layout_width="100dp"'))
|
|
|
|
+ f.write(indented_str(2, 'android:layout_margin="10dp"'))
|
|
|
|
+ f.write(indented_str(2, 'android:src="@drawable/pb_button_social_commerce"/>'))
|
|
|
|
+ else:
|
|
|
|
+ f.write(indented_str(1, "<!--<ImageView-->"))
|
|
|
|
+ f.write(indented_str(2, '<!--android:id="@+id/btn_social_commerce"-->'))
|
|
|
|
+ f.write(indented_str(2, '<!--android:layout_height="100dp"-->'))
|
|
|
|
+ f.write(indented_str(2, '<!--android:layout_width="100dp"-->'))
|
|
|
|
+ f.write(indented_str(2, '<!--android:layout_margin="10dp"-->'))
|
|
|
|
+ f.write(indented_str(2, '<!--android:src="@drawable/pb_button_social_commerce"/>-->'))
|
|
|
|
+ if "news_update" in l_features:
|
|
|
|
+ f.write(indented_str(1, "<ImageView"))
|
|
|
|
+ f.write(indented_str(2, 'android:id="@+id/btn_news"'))
|
|
|
|
+ f.write(indented_str(2, 'android:layout_height="100dp"'))
|
|
|
|
+ f.write(indented_str(2, 'android:layout_width="100dp"'))
|
|
|
|
+ f.write(indented_str(2, 'android:layout_margin="10dp"'))
|
|
|
|
+ f.write(indented_str(2, 'android:src="@drawable/pb_button_news"/>'))
|
|
|
|
+ else:
|
|
|
|
+ f.write(indented_str(1, "<!--<ImageView-->"))
|
|
|
|
+ f.write(indented_str(2, '<!--android:id="@+id/btn_news"-->'))
|
|
|
|
+ f.write(indented_str(2, '<!--android:layout_height="100dp"-->'))
|
|
|
|
+ f.write(indented_str(2, '<!--android:layout_width="100dp"-->'))
|
|
|
|
+ f.write(indented_str(2, '<!--android:layout_margin="10dp"-->'))
|
|
|
|
+ f.write(indented_str(2, '<!--android:src="@drawable/pb_button_news"/>-->'))
|
|
|
|
+ if "contact_list" in l_features:
|
|
|
|
+ f.write(indented_str(1, "<ImageView"))
|
|
|
|
+ f.write(indented_str(2, 'android:id="@+id/btn_contact_list"'))
|
|
|
|
+ f.write(indented_str(2, 'android:layout_height="100dp"'))
|
|
|
|
+ f.write(indented_str(2, 'android:layout_width="100dp"'))
|
|
|
|
+ f.write(indented_str(2, 'android:layout_margin="10dp"'))
|
|
|
|
+ f.write(indented_str(2, 'android:src="@drawable/pb_button_contact_list"/>'))
|
|
|
|
+ else:
|
|
|
|
+ f.write(indented_str(1, "<!--<ImageView-->"))
|
|
|
|
+ f.write(indented_str(2, '<!--android:id="@+id/btn_contact_list"-->'))
|
|
|
|
+ f.write(indented_str(2, '<!--android:layout_height="100dp"-->'))
|
|
|
|
+ f.write(indented_str(2, '<!--android:layout_width="100dp"-->'))
|
|
|
|
+ f.write(indented_str(2, '<!--android:layout_margin="10dp"-->'))
|
|
|
|
+ f.write(indented_str(2, '<!--android:src="@drawable/pb_button_contact_list"/>-->'))
|
|
else:
|
|
else:
|
|
f.write(line)
|
|
f.write(line)
|
|
write_android_manifest(manifest_path, features, security)
|
|
write_android_manifest(manifest_path, features, security)
|
|
@@ -2423,6 +2688,58 @@ def change(app_id: str, platform: str, mode: str, path_dest: str, features: dict
|
|
else:
|
|
else:
|
|
f.write(line)
|
|
f.write(line)
|
|
|
|
|
|
|
|
+def save_icons(app_id: str, platform: str, mode: str, path_dest: str, features: dict, security: dict):
|
|
|
|
+ if platform == "android" and mode == "grid":
|
|
|
|
+ drawable_path = os.path.join(path_dest, "app/src/main/res/drawable/")
|
|
|
|
+ if features["im"]["icon"]:
|
|
|
|
+ file = features["im"]["icon"]
|
|
|
|
+ file.save(os.path.join(drawable_path, "pb_button_chat.png"))
|
|
|
|
+ if features["cc"]["icon"]:
|
|
|
|
+ file = features["cc"]["icon"]
|
|
|
|
+ file.save(os.path.join(drawable_path, "pb_button_cc.png"))
|
|
|
|
+ if features["ac"]["icon"]:
|
|
|
|
+ file = features["ac"]["icon"]
|
|
|
|
+ file.save(os.path.join(drawable_path, "pb_button_audio_call.png"))
|
|
|
|
+ if features["vc"]["icon"]:
|
|
|
|
+ file = features["vc"]["icon"]
|
|
|
|
+ file.save(os.path.join(drawable_path, "pb_button_video_call.png"))
|
|
|
|
+ if features["call"]["icon"]:
|
|
|
|
+ file = features["call"]["icon"]
|
|
|
|
+ file.save(os.path.join(drawable_path, "pb_button_call.png"))
|
|
|
|
+ if features["ls"]["icon"]:
|
|
|
|
+ file = features["ls"]["icon"]
|
|
|
|
+ file.save(os.path.join(drawable_path, "pb_button_stream.png"))
|
|
|
|
+ if features["nc"]["icon"]:
|
|
|
|
+ file = features["nc"]["icon"]
|
|
|
|
+ file.save(os.path.join(drawable_path, "pb_button_notif_center.png"))
|
|
|
|
+ if features["custom_url"]["icon"]:
|
|
|
|
+ file = features["custom_url"]["icon"]
|
|
|
|
+ file.save(os.path.join(drawable_path, "pb_button_custom_url.png"))
|
|
|
|
+ if features["xapps"]["icon"]:
|
|
|
|
+ file = features["im"]["icon"]
|
|
|
|
+ file.save(os.path.join(drawable_path, "pb_button_external_apps.png"))
|
|
|
|
+ if features["conpost"]["icon"]:
|
|
|
|
+ file = features["im"]["icon"]
|
|
|
|
+ file.save(os.path.join(drawable_path, "pb_button_user_content.png"))
|
|
|
|
+ if features["ppob"]["icon"]:
|
|
|
|
+ file = features["im"]["icon"]
|
|
|
|
+ file.save(os.path.join(drawable_path, "pb_button_ppob.png"))
|
|
|
|
+ if features["wallet"]["icon"]:
|
|
|
|
+ file = features["im"]["icon"]
|
|
|
|
+ file.save(os.path.join(drawable_path, "pb_button_wallet.png"))
|
|
|
|
+ if features["social_commerce"]["icon"]:
|
|
|
|
+ file = features["im"]["icon"]
|
|
|
|
+ file.save(os.path.join(drawable_path, "pb_button_social_commerce.png"))
|
|
|
|
+ if features["news_update"]["icon"]:
|
|
|
|
+ file = features["im"]["icon"]
|
|
|
|
+ file.save(os.path.join(drawable_path, "pb_button_news.png"))
|
|
|
|
+ if features["contact_list"]["icon"]:
|
|
|
|
+ file = features["im"]["icon"]
|
|
|
|
+ file.save(os.path.join(drawable_path, "pb_button_contact_list.png"))
|
|
|
|
+ if features["secure_folder"]["icon"]:
|
|
|
|
+ file = features["im"]["icon"]
|
|
|
|
+ file.save(os.path.join(drawable_path, "pb_button_secure_folder.png"))
|
|
|
|
+ pass
|
|
|
|
|
|
def deliver_zip(path_dest, uid):
|
|
def deliver_zip(path_dest, uid):
|
|
rand_name = ''.join(random.SystemRandom().choice(string.ascii_letters + string.digits) for _ in range(32))
|
|
rand_name = ''.join(random.SystemRandom().choice(string.ascii_letters + string.digits) for _ in range(32))
|
|
@@ -2446,61 +2763,84 @@ def build_project():
|
|
app_id = ""
|
|
app_id = ""
|
|
feature_dict = {
|
|
feature_dict = {
|
|
"im": {
|
|
"im": {
|
|
- "status": False
|
|
|
|
|
|
+ "status": False,
|
|
|
|
+ "icon": None
|
|
},
|
|
},
|
|
"cc": {
|
|
"cc": {
|
|
- "status": False
|
|
|
|
|
|
+ "status": False,
|
|
|
|
+ "icon": None
|
|
},
|
|
},
|
|
"ac": {
|
|
"ac": {
|
|
- "status": False
|
|
|
|
|
|
+ "status": False,
|
|
|
|
+ "icon": None
|
|
},
|
|
},
|
|
"vc": {
|
|
"vc": {
|
|
- "status": False
|
|
|
|
|
|
+ "status": False,
|
|
|
|
+ "icon": None
|
|
},
|
|
},
|
|
"call": {
|
|
"call": {
|
|
- "status": False
|
|
|
|
|
|
+ "status": False,
|
|
|
|
+ "icon": None
|
|
},
|
|
},
|
|
"ls": {
|
|
"ls": {
|
|
- "status": False
|
|
|
|
|
|
+ "status": False,
|
|
|
|
+ "icon": None
|
|
},
|
|
},
|
|
"nc": {
|
|
"nc": {
|
|
- "status": False
|
|
|
|
|
|
+ "status": False,
|
|
|
|
+ "icon": None
|
|
},
|
|
},
|
|
"sms": {
|
|
"sms": {
|
|
- "status": False
|
|
|
|
|
|
+ "status": False,
|
|
|
|
+ "icon": None
|
|
},
|
|
},
|
|
"email": {
|
|
"email": {
|
|
- "status": False
|
|
|
|
|
|
+ "status": False,
|
|
|
|
+ "icon": None
|
|
},
|
|
},
|
|
"smartbot": {
|
|
"smartbot": {
|
|
- "status": False
|
|
|
|
|
|
+ "status": False,
|
|
|
|
+ "icon": None
|
|
},
|
|
},
|
|
"settings": {
|
|
"settings": {
|
|
- "status": False
|
|
|
|
|
|
+ "status": False,
|
|
|
|
+ "icon": None
|
|
},
|
|
},
|
|
"custom_url": {
|
|
"custom_url": {
|
|
- "status": False
|
|
|
|
|
|
+ "status": False,
|
|
|
|
+ "icon": None
|
|
},
|
|
},
|
|
"xapps": {
|
|
"xapps": {
|
|
- "status": False
|
|
|
|
|
|
+ "status": False,
|
|
|
|
+ "icon": None
|
|
},
|
|
},
|
|
"conpost": {
|
|
"conpost": {
|
|
- "status": False
|
|
|
|
|
|
+ "status": False,
|
|
|
|
+ "icon": None
|
|
},
|
|
},
|
|
"ppob": {
|
|
"ppob": {
|
|
- "status": False
|
|
|
|
|
|
+ "status": False,
|
|
|
|
+ "icon": None
|
|
},
|
|
},
|
|
"wallet": {
|
|
"wallet": {
|
|
- "status": False
|
|
|
|
|
|
+ "status": False,
|
|
|
|
+ "icon": None
|
|
},
|
|
},
|
|
"social_commerce": {
|
|
"social_commerce": {
|
|
- "status": False
|
|
|
|
|
|
+ "status": False,
|
|
|
|
+ "icon": None
|
|
},
|
|
},
|
|
"news_update": {
|
|
"news_update": {
|
|
- "status": False
|
|
|
|
|
|
+ "status": False,
|
|
|
|
+ "icon": None
|
|
},
|
|
},
|
|
"contact_list": {
|
|
"contact_list": {
|
|
- "status": False
|
|
|
|
|
|
+ "status": False,
|
|
|
|
+ "icon": None
|
|
|
|
+ },
|
|
|
|
+ "secure_folder": {
|
|
|
|
+ "status": False,
|
|
|
|
+ "icon": None
|
|
}
|
|
}
|
|
}
|
|
}
|
|
security_dict = {
|
|
security_dict = {
|
|
@@ -2547,15 +2887,15 @@ def build_project():
|
|
feature_dict["xapps"]["status"] = request.form["feature_xapps"] == "1"
|
|
feature_dict["xapps"]["status"] = request.form["feature_xapps"] == "1"
|
|
if "feature_conpost" in request.form:
|
|
if "feature_conpost" in request.form:
|
|
feature_dict["conpost"]["status"] = request.form["feature_conpost"] == "1"
|
|
feature_dict["conpost"]["status"] = request.form["feature_conpost"] == "1"
|
|
- if "check_ppob" in request.form:
|
|
|
|
|
|
+ if "feature_ppob" in request.form:
|
|
feature_dict["ppob"]["status"] = request.form["check_ppob"] == "1"
|
|
feature_dict["ppob"]["status"] = request.form["check_ppob"] == "1"
|
|
- if "check_wallet" in request.form:
|
|
|
|
|
|
+ if "feature_wallet" in request.form:
|
|
feature_dict["wallet"]["status"] = request.form["check_wallet"] == "1"
|
|
feature_dict["wallet"]["status"] = request.form["check_wallet"] == "1"
|
|
- if "social_commerce" in request.form:
|
|
|
|
|
|
+ if "feature_social_commerce" in request.form:
|
|
feature_dict["social_commerce"]["status"] = request.form["social_commerce"] == "1"
|
|
feature_dict["social_commerce"]["status"] = request.form["social_commerce"] == "1"
|
|
- if "news_update" in request.form:
|
|
|
|
|
|
+ if "feature_news_update" in request.form:
|
|
feature_dict["news_update"]["status"] = request.form["news_update"] == "1"
|
|
feature_dict["news_update"]["status"] = request.form["news_update"] == "1"
|
|
- if "contact_list" in request.form:
|
|
|
|
|
|
+ if "feature_contact_list" in request.form:
|
|
feature_dict["contact_list"]["status"] = request.form["contact_list"] == "1"
|
|
feature_dict["contact_list"]["status"] = request.form["contact_list"] == "1"
|
|
|
|
|
|
if "security_malware" in request.form:
|
|
if "security_malware" in request.form:
|
|
@@ -2591,6 +2931,71 @@ def build_project():
|
|
or security_dict["sim_swap"] or security_dict["capture"]
|
|
or security_dict["sim_swap"] or security_dict["capture"]
|
|
or security_dict["call_forwarding"]
|
|
or security_dict["call_forwarding"]
|
|
or security_dict["secure_folder"])
|
|
or security_dict["secure_folder"])
|
|
|
|
+
|
|
|
|
+ if "gridicon_im" in request.files:
|
|
|
|
+ file = request.files['gridicon_im']
|
|
|
|
+ if file and file.filename and allowed_file(file.filename):
|
|
|
|
+ feature_dict["im"]["icon"] = file
|
|
|
|
+ if "gridicon_cc" in request.files:
|
|
|
|
+ file = request.files['gridicon_cc']
|
|
|
|
+ if file and file.filename and allowed_file(file.filename):
|
|
|
|
+ feature_dict["cc"]["icon"] = file
|
|
|
|
+ if "gridicon_ac" in request.files:
|
|
|
|
+ file = request.files['gridicon_ac']
|
|
|
|
+ if file and file.filename and allowed_file(file.filename):
|
|
|
|
+ feature_dict["ac"]["icon"] = file
|
|
|
|
+ if "gridicon_vc" in request.files:
|
|
|
|
+ file = request.files['gridicon_vc']
|
|
|
|
+ if file and file.filename and allowed_file(file.filename):
|
|
|
|
+ feature_dict["vc"]["icon"] = file
|
|
|
|
+ if "gridicon_avc" in request.files:
|
|
|
|
+ file = request.files['gridicon_avc']
|
|
|
|
+ if file and file.filename and allowed_file(file.filename):
|
|
|
|
+ feature_dict["call"]["icon"] = file
|
|
|
|
+ if "gridicon_ls" in request.files:
|
|
|
|
+ file = request.files['gridicon_ls']
|
|
|
|
+ if file and file.filename and allowed_file(file.filename):
|
|
|
|
+ feature_dict["ls"]["icon"] = file
|
|
|
|
+ if "gridicon_nc" in request.files:
|
|
|
|
+ file = request.files['gridicon_nc']
|
|
|
|
+ if file and file.filename and allowed_file(file.filename):
|
|
|
|
+ feature_dict["nc"]["icon"] = file
|
|
|
|
+ if "gridicon_curl" in request.files:
|
|
|
|
+ file = request.files['gridicon_curl']
|
|
|
|
+ if file and file.filename and allowed_file(file.filename):
|
|
|
|
+ feature_dict["custom_url"]["icon"] = file
|
|
|
|
+ if "gridicon_xapps" in request.files:
|
|
|
|
+ file = request.files['gridicon_xapps']
|
|
|
|
+ if file and file.filename and allowed_file(file.filename):
|
|
|
|
+ feature_dict["xapps"]["icon"] = file
|
|
|
|
+ if "gridicon_conpost" in request.files:
|
|
|
|
+ file = request.files['gridicon_conpost']
|
|
|
|
+ if file and file.filename and allowed_file(file.filename):
|
|
|
|
+ feature_dict["conpost"]["icon"] = file
|
|
|
|
+ if "gridicon_ppob" in request.files:
|
|
|
|
+ file = request.files['gridicon_ppob']
|
|
|
|
+ if file and file.filename and allowed_file(file.filename):
|
|
|
|
+ feature_dict["ppob"]["icon"] = file
|
|
|
|
+ if "gridicon_wallet" in request.files:
|
|
|
|
+ file = request.files['gridicon_wallet']
|
|
|
|
+ if file and file.filename and allowed_file(file.filename):
|
|
|
|
+ feature_dict["wallet"]["icon"] = file
|
|
|
|
+ if "gridicon_social_commerce" in request.files:
|
|
|
|
+ file = request.files['gridicon_social_commerce']
|
|
|
|
+ if file and file.filename and allowed_file(file.filename):
|
|
|
|
+ feature_dict["social_commerce"]["icon"] = file
|
|
|
|
+ if "gridicon_news_update" in request.files:
|
|
|
|
+ file = request.files['gridicon_news_update']
|
|
|
|
+ if file and file.filename and allowed_file(file.filename):
|
|
|
|
+ feature_dict["news_update"]["icon"] = file
|
|
|
|
+ if "gridicon_contact_list" in request.files:
|
|
|
|
+ file = request.files['gridicon_contact_list']
|
|
|
|
+ if file and file.filename and allowed_file(file.filename):
|
|
|
|
+ feature_dict["contact_list"]["icon"] = file
|
|
|
|
+ if "gridicon_secure_folder" in request.files:
|
|
|
|
+ file = request.files['gridicon_secure_folder']
|
|
|
|
+ if file and file.filename and allowed_file(file.filename):
|
|
|
|
+ feature_dict["secure_folder"]["icon"] = file
|
|
|
|
|
|
if "platform" in request.form:
|
|
if "platform" in request.form:
|
|
platform = request.form["platform"]
|
|
platform = request.form["platform"]
|
|
@@ -2605,6 +3010,7 @@ def build_project():
|
|
uu_id = str(uuid.uuid4())
|
|
uu_id = str(uuid.uuid4())
|
|
path_dest = create_folder(platform, uu_id)
|
|
path_dest = create_folder(platform, uu_id)
|
|
change(app_id, platform, mode, path_dest, feature_dict, security_dict)
|
|
change(app_id, platform, mode, path_dest, feature_dict, security_dict)
|
|
|
|
+ save_icons(app_id, platform, mode, path_dest, feature_dict, security_dict)
|
|
return deliver_zip(path_dest, uu_id)
|
|
return deliver_zip(path_dest, uu_id)
|
|
except BaseException as e:
|
|
except BaseException as e:
|
|
vprint(traceback.format_exc())
|
|
vprint(traceback.format_exc())
|