Support push update

pull/123/head
FongMi 3 years ago
parent cb0c867766
commit 7ef86e0d66
  1. 3
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java
  2. 6
      app/src/main/java/com/fongmi/android/tv/event/ServerEvent.java
  3. 6
      app/src/main/java/com/fongmi/android/tv/server/Nano.java
  4. 13
      app/src/main/java/com/fongmi/android/tv/server/Server.java
  5. 9
      app/src/main/java/com/fongmi/android/tv/server/process/InputRequestProcess.java
  6. 45
      app/src/main/java/com/fongmi/android/tv/utils/Updater.java
  7. 107
      app/src/main/res/raw-zh-rCN/index.html
  8. 107
      app/src/main/res/raw-zh-rTW/index.html
  9. 35
      app/src/main/res/raw/index.html
  10. 12
      app/src/main/res/raw/script.js

@ -288,6 +288,9 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen
case SEARCH:
CollectActivity.start(this, event.getText(), true);
break;
case UPDATE:
Updater.create(this).force().branch(event.getText()).start();
break;
case PUSH:
if (ApiConfig.get().getSite("push_agent") == null) return;
DetailActivity.start(this, "push_agent", event.getText(), true);

@ -11,6 +11,10 @@ public class ServerEvent {
EventBus.getDefault().post(new ServerEvent(Type.SEARCH, text));
}
public static void update(String text) {
EventBus.getDefault().post(new ServerEvent(Type.UPDATE, text));
}
public static void push(String text) {
EventBus.getDefault().post(new ServerEvent(Type.PUSH, text));
}
@ -33,6 +37,6 @@ public class ServerEvent {
}
public enum Type {
SEARCH, PUSH, API
SEARCH, UPDATE, PUSH, API
}
}

@ -95,8 +95,10 @@ public class Nano extends NanoHTTPD {
void onSearch(String text);
void onPush(String url);
void onUpdate(String text);
void onApi(String url);
void onPush(String text);
void onApi(String text);
}
}

@ -87,12 +87,17 @@ public class Server implements Nano.Listener {
}
@Override
public void onPush(String url) {
if (url.length() > 0) ServerEvent.push(url);
public void onUpdate(String text) {
if (text.length() > 0) ServerEvent.update(text);
}
@Override
public void onApi(String url) {
if (url.length() > 0) ServerEvent.api(url);
public void onPush(String text) {
if (text.length() > 0) ServerEvent.push(text);
}
@Override
public void onApi(String text) {
if (text.length() > 0) ServerEvent.api(text);
}
}

@ -25,13 +25,16 @@ public class InputRequestProcess implements RequestProcess {
Map<String, String> params = session.getParms();
switch (params.get("do")) {
case "search":
nano.getListener().onSearch(params.get("word").trim());
nano.getListener().onSearch(params.get("text").trim());
break;
case "update":
nano.getListener().onUpdate(params.get("text").trim());
break;
case "push":
nano.getListener().onPush(params.get("url").trim());
nano.getListener().onPush(params.get("text").trim());
break;
case "api":
nano.getListener().onApi(params.get("url").trim());
nano.getListener().onApi(params.get("text").trim());
break;
}
return Nano.createPlainTextResponse(NanoHTTPD.Response.Status.OK, "ok");

@ -11,6 +11,7 @@ import com.fongmi.android.tv.BuildConfig;
import com.fongmi.android.tv.R;
import com.fongmi.android.tv.databinding.DialogUpdateBinding;
import com.fongmi.android.tv.net.OKHttp;
import com.google.android.exoplayer2.util.Log;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import org.json.JSONObject;
@ -19,13 +20,12 @@ import java.io.File;
public class Updater implements View.OnClickListener {
private static final String DEF = "https://raw.githubusercontent.com/FongMi/TV/release/release/";
private static final String URL = DEF + BuildConfig.FLAVOR_mode + ".json";
private static final String APK = DEF + BuildConfig.FLAVOR_mode + "-" + BuildConfig.FLAVOR_api + ".apk";
private static final String PROXY = "https://ghproxy.com/";
private final Activity activity;
private AlertDialog dialog;
private String branch;
private boolean force;
public static Updater create(Activity activity) {
return new Updater(activity);
@ -33,10 +33,16 @@ public class Updater implements View.OnClickListener {
private Updater(Activity activity) {
this.activity = activity;
this.branch = "release";
}
public Updater force() {
Prefers.putUpdate(true);
this.force = true;
return this;
}
public Updater branch(String branch) {
this.branch = branch;
return this;
}
@ -45,31 +51,42 @@ public class Updater implements View.OnClickListener {
}
private void doInBackground() {
connect(URL, 0);
Log.e("DDD", getJson());
connect(getJson());
}
private File getApk() {
private File getFile() {
return FileUtil.getCacheFile("update.apk");
}
private void connect(String target, int retry) {
private String getPath() {
return "https://raw.githubusercontent.com/FongMi/TV/" + branch + "/release/";
}
private String getJson() {
return PROXY + getPath() + BuildConfig.FLAVOR_mode + ".json";
}
private String getApk() {
return PROXY + getPath() + BuildConfig.FLAVOR_mode + "-" + BuildConfig.FLAVOR_api + ".apk";
}
private void connect(String target) {
try {
JSONObject object = new JSONObject(OKHttp.newCall(target).execute().body().string());
String name = object.optString("name");
String desc = object.optString("desc");
int code = object.optInt("code");
String url = retry > 0 ? PROXY + APK : APK;
if (code <= BuildConfig.VERSION_CODE) FileUtil.clearDir(getApk());
else FileUtil.write(getApk(), OKHttp.newCall(url).execute().body().bytes());
if (getApk().exists() && Prefers.getUpdate()) App.post(() -> checkActivity(name, desc));
if (code <= BuildConfig.VERSION_CODE) FileUtil.clearDir(getFile());
if (code > BuildConfig.VERSION_CODE || force) FileUtil.write(getFile(), OKHttp.newCall(getApk()).execute().body().bytes());
if (getFile().exists() && (Prefers.getUpdate() || force)) App.post(() -> checkActivity(name, desc));
} catch (Exception e) {
if (retry == 0) connect(PROXY + target, 1);
e.printStackTrace();
}
}
private void checkActivity(String version, String desc) {
if (activity.isFinishing()) FileUtil.openFile(getApk());
if (activity.isFinishing()) FileUtil.openFile(getFile());
else showDialog(version, desc);
}
@ -85,7 +102,7 @@ public class Updater implements View.OnClickListener {
@Override
public void onClick(View view) {
if (view.getId() == R.id.confirm) FileUtil.openFile(getApk());
if (view.getId() == R.id.confirm) FileUtil.openFile(getFile());
else if (view.getId() == R.id.cancel) Prefers.putUpdate(false);
dialog.dismiss();
}

@ -1,107 +0,0 @@
<!DOCTYPE html>
<html lang="zh-cmn-Hans">
<head>
<title>TV</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=0,viewport-fit=cover">
<meta name="wechat-enable-text-zoom-em" content="true">
<meta name="layoutmode" content="standard">
<link rel="stylesheet" type="text/css" href="style.css">
<link rel="stylesheet" type="text/css" href="ui.css">
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="script.js"></script>
</head>
<body>
<div class="page">
<div class="page__bd" style="height: 100%;">
<div class="weui-tab">
<div id="panel1" role="tabpanel" aria-labelledby="tab1" class="weui-tab__panel">
<div class="weui-form">
<div class="weui-form__text-area">
<h2 class="weui-form__title">搜索</h2>
</div>
<div class="weui-form__control-area">
<div class="weui-cells__group weui-cells__group_form">
<div class="weui-cells">
<div class="weui-cell weui-cell_active weui-cell_vcode weui-cell_wrap">
<div class="weui-cell__bd weui-flex">
<input id="search_key_word" class="weui-input weui-cell__control weui-cell__control_flex" type="text" value="" placeholder="请输入关键字..." />
<button onclick="search(); return false;" class="weui-cell__control weui-btn weui-btn_default weui-vcode-btn">确定</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="panel2" role="tabpanel" aria-labelledby="tab2" class="weui-tab__panel" style="display: none;">
<div class="weui-form">
<div class="weui-form__text-area">
<h2 class="weui-form__title">推送</h2>
</div>
<div class="weui-form__control-area">
<div class="weui-cells__group weui-cells__group_form">
<div class="weui-cells">
<div class="weui-cell weui-cell_active weui-cell_vcode weui-cell_wrap">
<div class="weui-cell__bd weui-flex">
<input id="push_url" class="weui-input weui-cell__control weui-cell__control_flex" type="text" value="" placeholder="请输入地址..." />
<button onclick="push(); return false;" class="weui-cell__control weui-btn weui-btn_default weui-vcode-btn">确定</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="panel3" role="tabpanel" aria-labelledby="tab3" class="weui-tab__panel" style="display: none;">
<div class="weui-form">
<div class="weui-form__text-area">
<h2 class="weui-form__title">接口</h2>
</div>
<div class="weui-form__control-area">
<div class="weui-cells__group weui-cells__group_form">
<div class="weui-cells">
<div class="weui-cell weui-cell_active weui-cell_vcode weui-cell_wrap">
<div class="weui-cell__bd weui-flex">
<input id="diy_api_url" class="weui-input weui-cell__control weui-cell__control_flex" type="text" value="" placeholder="请输入接口..." />
<button onclick="api(); return false;" class="weui-cell__control weui-btn weui-btn_default weui-vcode-btn">确定</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div role="tablist" class="weui-tabbar">
<div id="tab1" role="tab" aria-labelledby="t1_title" aria-selected="true" aria-controls="panel1" class="weui-tabbar__item weui-bar__item_on">
<img style="width: 20px; height: 20px; margin: 5px 0 5px 0;" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAuQAAALkB4qdB6AAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAKfSURBVFiFxdfPi1ZVGMDxz31HCnOq0ZkK00THlxhpIToELdxILkQMRMN1bly1EAlxY/0BswqiFi7KnW3aBSJFKTg2iJY/CsIfEZqjmSJiipKdFvfR9/Jy7zv3bd55PXA4l3vO8zzf85zznPOcLKWkU8mybCE2YhPGsATDuIGr+Blf43BK6U5HZWUlpVRaMQ/78ACpRr2H3WhU6SyrWZkHsixbjc+xJpSfwUmcivZCeGMtxqO+EeLHsCOldL5rD2AAH+FhGP4Nb9eZCd7BHwVv7Kol16bkk1DwLz7FYDfuxBC+KCzLh7UBsLMguLUbwyUgOwoT2T4jABbjbgh9NhvjBYiDoe8vDM0EsD8GX8CCHgEskodpwkSHcYbxT7hrXS+MF5RvCoC/8VwVwHsx6JdeGi8YmA79W8r6G9gcEXmiVtx2X05Gu7mss4FmnwCaZZ0N+dneD4AlZZ0NDMb39TkCeKz3mSqA6fheO0cAa6I9XQVwJb7fnCOA8WhPVQFMPk0AeEsep7cxv8dnwItaN+trVQdRhvMx6OMeAxwIvd/OdBe8q3V7re+R8S1auUGzI0AIHAmB3/HCLI2/JA+/hL0dxxaEFssjIuEoVvxP42PyQy3JQ29eLYAQHsefIXwX75PnjTUMD2AP7mslNsfxfG2Agvu+LCj5PtazaheviD00VZCZLExkstOSdprRtsI6Pq43cEieO36Dm239l0QKJs+Sr8X/KRVZ0UxuHcEEfm0zVKz38SM+wLNt8qu08oETWNhuo/RdUFayLFup9TIakqdv53AxpfSog9zr+A6vBuiGlNKtJwNmE25dREYTl8MTP2Gk1hL0GGJUfsYknMXLfQUIiOXy11aSP2pfqb0HelWyLFsm3xOj+KHvAAGxFF/h8n+GU+2I7XnhZwAAAABJRU5ErkJggg==" alt="" class="weui-tabbar__icon">
<p id="t1_title" aria-hidden="true" class="weui-tabbar__label">搜索</p>
</div>
<div id="tab2" role="tab" aria-labelledby="t2_title" aria-selected="false" aria-controls="panel2" class="weui-tabbar__item">
<img style="width: 20px; height: 20px; margin: 5px 0 5px 0;" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAuQAAALkB4qdB6AAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJlSURBVFiF7ddNSNRBGMfxzy6B4aUsoxfMXiQwO1kEHewQXUI6FXWqIIzQgii69XILOnToFlYE3SMSkiCJolsW7CUIen+j6FJBiGWm02FHG9fddZdELw48/Hdmfs/zfGfmYZjNhBDMZsvOavY5AMyrRpzJZLagHRuj1eAFnqI7hJCrmiCEMKVhIa5gFKGM9aGhkpjjsStI3orPMcEPXMQeNKAeW3Ea36LmEzZNCwAW4FUM/BItZbR1uBm1X7F8OgBuxIDPUFfBbtXgYfS5/V8A2JycbXvFW8pajCS71o29qK8W4FQMcr/EfAOeIIfVBXM9RQp0AIeqAbgfHSc7sTKpjYB3WJPMz0MzduMs3ibam1hUEgDz0Ymh6NBWJPnrIit8n0IU+NTiPH4X7mqhsANfCgLXJ/ONSfJconmUQKwts6ttCUTHBACcSwL24WB6tliFN0nyRYl+QQLxAU1lIE5E3XcsGxs8GQcH0VnEaVVyjrmxMxwDiL9TiI9TQIzV11FYKn/DBewv4fCkMHkhQBGIp2UAuqLmGlyInZ4yDpfRmyYvBpBA3ML1MvGakgV5EDu7SjmUCTQJoEK/xdH3RxYb5Fu/mWvN8fssi+HYGZxBgG3x25+VLzBYNxOZM5lMLY7F7t0sHsfOvpkAwHEswb0Qwh1YIf+YGMSOKoupF71V6Lfjj/yxt4zfhHH1IU4crraqK0zeKv9QCTgyPp4ILvl3teZwBuunKXkHfsbYJybMFQh3+vf+m24bQNckuCK0C3EAV/Ecv6INRfsdbTixP9FGoo2a+ILuQWOx3cnEpLPWZv2f0RzAX4u0r6Ikm0C7AAAAAElFTkSuQmCC" alt="" class="weui-tabbar__icon">
<p aria-hidden="true" id="t2_title" class="weui-tabbar__label">推送</p>
</div>
<div id="tab3" role="tab" aria-labelledby="t3_title" aria-selected="false" aria-controls="panel3" class="weui-tabbar__item">
<img style="width: 20px; height: 20px; margin: 5px 0 5px 0;" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAC5AAAAuQHip0HoAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAANtQTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhQHXOQAAAEh0Uk5TAAECBAUGCQoNDxITGiAhKC4xMjM0Nzg8P0BDT1dmbHR4fX+MlpedoKOkp6issri5vL2/zs/S19zd4OHi5OXp7e/x8/f6+/z+bkNkuAAAATRJREFUOMuNk2kzAmAUhR8iUSHSokWobCFLtFBI9fz/X+RDzdQY9brfzl3mbufAghVfVF+KLLHoh6p+RJckHGkxmSzq0ZKEjF2ArplfgcPjHYBC2w5Ax3YBYOf4cBovjfw82dy71/ElwOVY7/c2Tz4dlQB2h6q9b3uVxLQiUen53VMd7gINWwflgT7G503jjzoop55sQN5JBuK12sbiWBu1WhzSE/PcectSu/WOjs31uWcrm92ao/WmHc70OTtzbNfHOq5vz2D2Wc9Yq3zpBQCxV+339TUGwIV+VdaAxIMtAKq+5SD3bhWAlg+zvc+9BogMzQHkHEYAbjyf9bryFGDf/hT33Qc49eq/CaEWgSGDawYPFTx18Fl5J+mV76bhU2oVYcKUC5I2TPuwcP4tvaB4/5T/D6drVhrBHvH6AAAAAElFTkSuQmCC" alt="" class="weui-tabbar__icon">
<p id="t3_title" aria-hidden="true" class="weui-tabbar__label">接口</p>
</div>
</div>
</div>
</div>
</div>
<div role="alert" id="warnToast" style="display: none;">
<div class="weui-mask_transparent"></div>
<div class="weui-toast">
<i class="weui-icon-warn weui-icon_toast"></i>
<p class="weui-toast__content" id="warnToastContent"></p>
</div>
</div>
<div role="alert" id="loadingToast" style="display: none;">
<div class="weui-mask_transparent"></div>
<div class="weui-toast">
<span class="weui-primary-loading weui-icon_toast"><span class="weui-primary-loading__dot"></span></span>
<p class="weui-toast__content">加载中</p>
</div>
</div>
</body>
</html>

@ -1,107 +0,0 @@
<!DOCTYPE html>
<html lang="zh-cmn-Hans">
<head>
<title>TV</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=0,viewport-fit=cover">
<meta name="wechat-enable-text-zoom-em" content="true">
<meta name="layoutmode" content="standard">
<link rel="stylesheet" type="text/css" href="style.css">
<link rel="stylesheet" type="text/css" href="ui.css">
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="script.js"></script>
</head>
<body>
<div class="page">
<div class="page__bd" style="height: 100%;">
<div class="weui-tab">
<div id="panel1" role="tabpanel" aria-labelledby="tab1" class="weui-tab__panel">
<div class="weui-form">
<div class="weui-form__text-area">
<h2 class="weui-form__title">搜尋</h2>
</div>
<div class="weui-form__control-area">
<div class="weui-cells__group weui-cells__group_form">
<div class="weui-cells">
<div class="weui-cell weui-cell_active weui-cell_vcode weui-cell_wrap">
<div class="weui-cell__bd weui-flex">
<input id="search_key_word" class="weui-input weui-cell__control weui-cell__control_flex" type="text" value="" placeholder="請輸入關鍵字..." />
<button onclick="search(); return false;" class="weui-cell__control weui-btn weui-btn_default weui-vcode-btn">確定</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="panel2" role="tabpanel" aria-labelledby="tab2" class="weui-tab__panel" style="display: none;">
<div class="weui-form">
<div class="weui-form__text-area">
<h2 class="weui-form__title">推送</h2>
</div>
<div class="weui-form__control-area">
<div class="weui-cells__group weui-cells__group_form">
<div class="weui-cells">
<div class="weui-cell weui-cell_active weui-cell_vcode weui-cell_wrap">
<div class="weui-cell__bd weui-flex">
<input id="push_url" class="weui-input weui-cell__control weui-cell__control_flex" type="text" value="" placeholder="請輸入網址..." />
<button onclick="push(); return false;" class="weui-cell__control weui-btn weui-btn_default weui-vcode-btn">確定</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="panel3" role="tabpanel" aria-labelledby="tab3" class="weui-tab__panel" style="display: none;">
<div class="weui-form">
<div class="weui-form__text-area">
<h2 class="weui-form__title">接口</h2>
</div>
<div class="weui-form__control-area">
<div class="weui-cells__group weui-cells__group_form">
<div class="weui-cells">
<div class="weui-cell weui-cell_active weui-cell_vcode weui-cell_wrap">
<div class="weui-cell__bd weui-flex">
<input id="diy_api_url" class="weui-input weui-cell__control weui-cell__control_flex" type="text" value="" placeholder="請輸入接口..." />
<button onclick="api(); return false;" class="weui-cell__control weui-btn weui-btn_default weui-vcode-btn">確定</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div role="tablist" class="weui-tabbar">
<div id="tab1" role="tab" aria-labelledby="t1_title" aria-selected="true" aria-controls="panel1" class="weui-tabbar__item weui-bar__item_on">
<img style="width: 20px; height: 20px; margin: 5px 0 5px 0;" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAuQAAALkB4qdB6AAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAKfSURBVFiFxdfPi1ZVGMDxz31HCnOq0ZkK00THlxhpIToELdxILkQMRMN1bly1EAlxY/0BswqiFi7KnW3aBSJFKTg2iJY/CsIfEZqjmSJiipKdFvfR9/Jy7zv3bd55PXA4l3vO8zzf85zznPOcLKWkU8mybCE2YhPGsATDuIGr+Blf43BK6U5HZWUlpVRaMQ/78ACpRr2H3WhU6SyrWZkHsixbjc+xJpSfwUmcivZCeGMtxqO+EeLHsCOldL5rD2AAH+FhGP4Nb9eZCd7BHwVv7Kol16bkk1DwLz7FYDfuxBC+KCzLh7UBsLMguLUbwyUgOwoT2T4jABbjbgh9NhvjBYiDoe8vDM0EsD8GX8CCHgEskodpwkSHcYbxT7hrXS+MF5RvCoC/8VwVwHsx6JdeGi8YmA79W8r6G9gcEXmiVtx2X05Gu7mss4FmnwCaZZ0N+dneD4AlZZ0NDMb39TkCeKz3mSqA6fheO0cAa6I9XQVwJb7fnCOA8WhPVQFMPk0AeEsep7cxv8dnwItaN+trVQdRhvMx6OMeAxwIvd/OdBe8q3V7re+R8S1auUGzI0AIHAmB3/HCLI2/JA+/hL0dxxaEFssjIuEoVvxP42PyQy3JQ29eLYAQHsefIXwX75PnjTUMD2AP7mslNsfxfG2Agvu+LCj5PtazaheviD00VZCZLExkstOSdprRtsI6Pq43cEieO36Dm239l0QKJs+Sr8X/KRVZ0UxuHcEEfm0zVKz38SM+wLNt8qu08oETWNhuo/RdUFayLFup9TIakqdv53AxpfSog9zr+A6vBuiGlNKtJwNmE25dREYTl8MTP2Gk1hL0GGJUfsYknMXLfQUIiOXy11aSP2pfqb0HelWyLFsm3xOj+KHvAAGxFF/h8n+GU+2I7XnhZwAAAABJRU5ErkJggg==" alt="" class="weui-tabbar__icon">
<p id="t1_title" aria-hidden="true" class="weui-tabbar__label">搜尋</p>
</div>
<div id="tab2" role="tab" aria-labelledby="t2_title" aria-selected="false" aria-controls="panel2" class="weui-tabbar__item">
<img style="width: 20px; height: 20px; margin: 5px 0 5px 0;" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAuQAAALkB4qdB6AAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJlSURBVFiF7ddNSNRBGMfxzy6B4aUsoxfMXiQwO1kEHewQXUI6FXWqIIzQgii69XILOnToFlYE3SMSkiCJolsW7CUIen+j6FJBiGWm02FHG9fddZdELw48/Hdmfs/zfGfmYZjNhBDMZsvOavY5AMyrRpzJZLagHRuj1eAFnqI7hJCrmiCEMKVhIa5gFKGM9aGhkpjjsStI3orPMcEPXMQeNKAeW3Ea36LmEzZNCwAW4FUM/BItZbR1uBm1X7F8OgBuxIDPUFfBbtXgYfS5/V8A2JycbXvFW8pajCS71o29qK8W4FQMcr/EfAOeIIfVBXM9RQp0AIeqAbgfHSc7sTKpjYB3WJPMz0MzduMs3ibam1hUEgDz0Ymh6NBWJPnrIit8n0IU+NTiPH4X7mqhsANfCgLXJ/ONSfJconmUQKwts6ttCUTHBACcSwL24WB6tliFN0nyRYl+QQLxAU1lIE5E3XcsGxs8GQcH0VnEaVVyjrmxMxwDiL9TiI9TQIzV11FYKn/DBewv4fCkMHkhQBGIp2UAuqLmGlyInZ4yDpfRmyYvBpBA3ML1MvGakgV5EDu7SjmUCTQJoEK/xdH3RxYb5Fu/mWvN8fssi+HYGZxBgG3x25+VLzBYNxOZM5lMLY7F7t0sHsfOvpkAwHEswb0Qwh1YIf+YGMSOKoupF71V6Lfjj/yxt4zfhHH1IU4crraqK0zeKv9QCTgyPp4ILvl3teZwBuunKXkHfsbYJybMFQh3+vf+m24bQNckuCK0C3EAV/Ecv6INRfsdbTixP9FGoo2a+ILuQWOx3cnEpLPWZv2f0RzAX4u0r6Ikm0C7AAAAAElFTkSuQmCC" alt="" class="weui-tabbar__icon">
<p aria-hidden="true" id="t2_title" class="weui-tabbar__label">推送</p>
</div>
<div id="tab3" role="tab" aria-labelledby="t3_title" aria-selected="false" aria-controls="panel3" class="weui-tabbar__item">
<img style="width: 20px; height: 20px; margin: 5px 0 5px 0;" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAC5AAAAuQHip0HoAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAANtQTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhQHXOQAAAEh0Uk5TAAECBAUGCQoNDxITGiAhKC4xMjM0Nzg8P0BDT1dmbHR4fX+MlpedoKOkp6issri5vL2/zs/S19zd4OHi5OXp7e/x8/f6+/z+bkNkuAAAATRJREFUOMuNk2kzAmAUhR8iUSHSokWobCFLtFBI9fz/X+RDzdQY9brfzl3mbufAghVfVF+KLLHoh6p+RJckHGkxmSzq0ZKEjF2ArplfgcPjHYBC2w5Ax3YBYOf4cBovjfw82dy71/ElwOVY7/c2Tz4dlQB2h6q9b3uVxLQiUen53VMd7gINWwflgT7G503jjzoop55sQN5JBuK12sbiWBu1WhzSE/PcectSu/WOjs31uWcrm92ao/WmHc70OTtzbNfHOq5vz2D2Wc9Yq3zpBQCxV+339TUGwIV+VdaAxIMtAKq+5SD3bhWAlg+zvc+9BogMzQHkHEYAbjyf9bryFGDf/hT33Qc49eq/CaEWgSGDawYPFTx18Fl5J+mV76bhU2oVYcKUC5I2TPuwcP4tvaB4/5T/D6drVhrBHvH6AAAAAElFTkSuQmCC" alt="" class="weui-tabbar__icon">
<p id="t3_title" aria-hidden="true" class="weui-tabbar__label">接口</p>
</div>
</div>
</div>
</div>
</div>
<div role="alert" id="warnToast" style="display: none;">
<div class="weui-mask_transparent"></div>
<div class="weui-toast">
<i class="weui-icon-warn weui-icon_toast"></i>
<p class="weui-toast__content" id="warnToastContent"></p>
</div>
</div>
<div role="alert" id="loadingToast" style="display: none;">
<div class="weui-mask_transparent"></div>
<div class="weui-toast">
<span class="weui-primary-loading weui-icon_toast"><span class="weui-primary-loading__dot"></span></span>
<p class="weui-toast__content">載入中</p>
</div>
</div>
</body>
</html>

@ -1,5 +1,6 @@
<!DOCTYPE html>
<html lang="zh-cmn-Hans">
<head>
<title>TV</title>
<meta charset="UTF-8">
@ -11,6 +12,7 @@
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="script.js"></script>
</head>
<body>
<div class="page">
<div class="page__bd" style="height: 100%;">
@ -18,15 +20,15 @@
<div id="panel1" role="tabpanel" aria-labelledby="tab1" class="weui-tab__panel">
<div class="weui-form">
<div class="weui-form__text-area">
<h2 class="weui-form__title">Search</h2>
<h2 class="weui-form__title">搜尋</h2>
</div>
<div class="weui-form__control-area">
<div class="weui-cells__group weui-cells__group_form">
<div class="weui-cells">
<div class="weui-cell weui-cell_active weui-cell_vcode weui-cell_wrap">
<div class="weui-cell__bd weui-flex">
<input id="search_key_word" class="weui-input weui-cell__control weui-cell__control_flex" type="text" value="" placeholder="Please enter keyword..." />
<button onclick="search(); return false;" class="weui-cell__control weui-btn weui-btn_default weui-vcode-btn">OK</button>
<input id="keyword" class="weui-input weui-cell__control weui-cell__control_flex" type="text" value="" placeholder="請輸入關鍵字..." />
<button onclick="search(); return false;" class="weui-cell__control weui-btn weui-btn_default weui-vcode-btn">確定</button>
</div>
</div>
</div>
@ -37,15 +39,21 @@
<div id="panel2" role="tabpanel" aria-labelledby="tab2" class="weui-tab__panel" style="display: none;">
<div class="weui-form">
<div class="weui-form__text-area">
<h2 class="weui-form__title">Push</h2>
<h2 class="weui-form__title">推送</h2>
</div>
<div class="weui-form__control-area">
<div class="weui-cells__group weui-cells__group_form">
<div class="weui-cells">
<div class="weui-cell weui-cell_active weui-cell_vcode weui-cell_wrap">
<div class="weui-cell__bd weui-flex">
<input id="push_url" class="weui-input weui-cell__control weui-cell__control_flex" type="text" value="" placeholder="Please enter url..." />
<button onclick="push(); return false;" class="weui-cell__control weui-btn weui-btn_default weui-vcode-btn">OK</button>
<input id="push_url" class="weui-input weui-cell__control weui-cell__control_flex" type="text" value="" placeholder="請輸入網址..." />
<button onclick="push(); return false;" class="weui-cell__control weui-btn weui-btn_default weui-vcode-btn">確定</button>
</div>
</div>
<div class="weui-cell weui-cell_active weui-cell_vcode weui-cell_wrap">
<div class="weui-cell__bd weui-flex" style="display: flex;justify-content:center;">
<button onclick="update('dev'); return false;" class="weui-cell__control weui-btn weui-btn_default weui-vcode-btn" style="margin-right:16px;">測試版</button>
<button onclick="update('release'); return false;" class="weui-cell__control weui-btn weui-btn_default weui-vcode-btn">正式版</button>
</div>
</div>
</div>
@ -56,15 +64,15 @@
<div id="panel3" role="tabpanel" aria-labelledby="tab3" class="weui-tab__panel" style="display: none;">
<div class="weui-form">
<div class="weui-form__text-area">
<h2 class="weui-form__title">Config</h2>
<h2 class="weui-form__title">接口</h2>
</div>
<div class="weui-form__control-area">
<div class="weui-cells__group weui-cells__group_form">
<div class="weui-cells">
<div class="weui-cell weui-cell_active weui-cell_vcode weui-cell_wrap">
<div class="weui-cell__bd weui-flex">
<input id="diy_api_url" class="weui-input weui-cell__control weui-cell__control_flex" type="text" value="" placeholder="Please enter configuration url..." />
<button onclick="api(); return false;" class="weui-cell__control weui-btn weui-btn_default weui-vcode-btn">OK</button>
<input id="api_url" class="weui-input weui-cell__control weui-cell__control_flex" type="text" value="" placeholder="請輸入接口..." />
<button onclick="api(); return false;" class="weui-cell__control weui-btn weui-btn_default weui-vcode-btn">確定</button>
</div>
</div>
</div>
@ -75,15 +83,15 @@
<div role="tablist" class="weui-tabbar">
<div id="tab1" role="tab" aria-labelledby="t1_title" aria-selected="true" aria-controls="panel1" class="weui-tabbar__item weui-bar__item_on">
<img style="width: 20px; height: 20px; margin: 5px 0 5px 0;" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAuQAAALkB4qdB6AAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAKfSURBVFiFxdfPi1ZVGMDxz31HCnOq0ZkK00THlxhpIToELdxILkQMRMN1bly1EAlxY/0BswqiFi7KnW3aBSJFKTg2iJY/CsIfEZqjmSJiipKdFvfR9/Jy7zv3bd55PXA4l3vO8zzf85zznPOcLKWkU8mybCE2YhPGsATDuIGr+Blf43BK6U5HZWUlpVRaMQ/78ACpRr2H3WhU6SyrWZkHsixbjc+xJpSfwUmcivZCeGMtxqO+EeLHsCOldL5rD2AAH+FhGP4Nb9eZCd7BHwVv7Kol16bkk1DwLz7FYDfuxBC+KCzLh7UBsLMguLUbwyUgOwoT2T4jABbjbgh9NhvjBYiDoe8vDM0EsD8GX8CCHgEskodpwkSHcYbxT7hrXS+MF5RvCoC/8VwVwHsx6JdeGi8YmA79W8r6G9gcEXmiVtx2X05Gu7mss4FmnwCaZZ0N+dneD4AlZZ0NDMb39TkCeKz3mSqA6fheO0cAa6I9XQVwJb7fnCOA8WhPVQFMPk0AeEsep7cxv8dnwItaN+trVQdRhvMx6OMeAxwIvd/OdBe8q3V7re+R8S1auUGzI0AIHAmB3/HCLI2/JA+/hL0dxxaEFssjIuEoVvxP42PyQy3JQ29eLYAQHsefIXwX75PnjTUMD2AP7mslNsfxfG2Agvu+LCj5PtazaheviD00VZCZLExkstOSdprRtsI6Pq43cEieO36Dm239l0QKJs+Sr8X/KRVZ0UxuHcEEfm0zVKz38SM+wLNt8qu08oETWNhuo/RdUFayLFup9TIakqdv53AxpfSog9zr+A6vBuiGlNKtJwNmE25dREYTl8MTP2Gk1hL0GGJUfsYknMXLfQUIiOXy11aSP2pfqb0HelWyLFsm3xOj+KHvAAGxFF/h8n+GU+2I7XnhZwAAAABJRU5ErkJggg==" alt="" class="weui-tabbar__icon">
<p id="t1_title" aria-hidden="true" class="weui-tabbar__label">Search</p>
<p id="t1_title" aria-hidden="true" class="weui-tabbar__label">搜尋</p>
</div>
<div id="tab2" role="tab" aria-labelledby="t2_title" aria-selected="false" aria-controls="panel2" class="weui-tabbar__item">
<img style="width: 20px; height: 20px; margin: 5px 0 5px 0;" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAuQAAALkB4qdB6AAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJlSURBVFiF7ddNSNRBGMfxzy6B4aUsoxfMXiQwO1kEHewQXUI6FXWqIIzQgii69XILOnToFlYE3SMSkiCJolsW7CUIen+j6FJBiGWm02FHG9fddZdELw48/Hdmfs/zfGfmYZjNhBDMZsvOavY5AMyrRpzJZLagHRuj1eAFnqI7hJCrmiCEMKVhIa5gFKGM9aGhkpjjsStI3orPMcEPXMQeNKAeW3Ea36LmEzZNCwAW4FUM/BItZbR1uBm1X7F8OgBuxIDPUFfBbtXgYfS5/V8A2JycbXvFW8pajCS71o29qK8W4FQMcr/EfAOeIIfVBXM9RQp0AIeqAbgfHSc7sTKpjYB3WJPMz0MzduMs3ibam1hUEgDz0Ymh6NBWJPnrIit8n0IU+NTiPH4X7mqhsANfCgLXJ/ONSfJconmUQKwts6ttCUTHBACcSwL24WB6tliFN0nyRYl+QQLxAU1lIE5E3XcsGxs8GQcH0VnEaVVyjrmxMxwDiL9TiI9TQIzV11FYKn/DBewv4fCkMHkhQBGIp2UAuqLmGlyInZ4yDpfRmyYvBpBA3ML1MvGakgV5EDu7SjmUCTQJoEK/xdH3RxYb5Fu/mWvN8fssi+HYGZxBgG3x25+VLzBYNxOZM5lMLY7F7t0sHsfOvpkAwHEswb0Qwh1YIf+YGMSOKoupF71V6Lfjj/yxt4zfhHH1IU4crraqK0zeKv9QCTgyPp4ILvl3teZwBuunKXkHfsbYJybMFQh3+vf+m24bQNckuCK0C3EAV/Ecv6INRfsdbTixP9FGoo2a+ILuQWOx3cnEpLPWZv2f0RzAX4u0r6Ikm0C7AAAAAElFTkSuQmCC" alt="" class="weui-tabbar__icon">
<p aria-hidden="true" id="t2_title" class="weui-tabbar__label">Push</p>
<p aria-hidden="true" id="t2_title" class="weui-tabbar__label">推送</p>
</div>
<div id="tab3" role="tab" aria-labelledby="t3_title" aria-selected="false" aria-controls="panel3" class="weui-tabbar__item">
<img style="width: 20px; height: 20px; margin: 5px 0 5px 0;" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAC5AAAAuQHip0HoAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAANtQTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhQHXOQAAAEh0Uk5TAAECBAUGCQoNDxITGiAhKC4xMjM0Nzg8P0BDT1dmbHR4fX+MlpedoKOkp6issri5vL2/zs/S19zd4OHi5OXp7e/x8/f6+/z+bkNkuAAAATRJREFUOMuNk2kzAmAUhR8iUSHSokWobCFLtFBI9fz/X+RDzdQY9brfzl3mbufAghVfVF+KLLHoh6p+RJckHGkxmSzq0ZKEjF2ArplfgcPjHYBC2w5Ax3YBYOf4cBovjfw82dy71/ElwOVY7/c2Tz4dlQB2h6q9b3uVxLQiUen53VMd7gINWwflgT7G503jjzoop55sQN5JBuK12sbiWBu1WhzSE/PcectSu/WOjs31uWcrm92ao/WmHc70OTtzbNfHOq5vz2D2Wc9Yq3zpBQCxV+339TUGwIV+VdaAxIMtAKq+5SD3bhWAlg+zvc+9BogMzQHkHEYAbjyf9bryFGDf/hT33Qc49eq/CaEWgSGDawYPFTx18Fl5J+mV76bhU2oVYcKUC5I2TPuwcP4tvaB4/5T/D6drVhrBHvH6AAAAAElFTkSuQmCC" alt="" class="weui-tabbar__icon">
<p id="t3_title" aria-hidden="true" class="weui-tabbar__label">Config</p>
<p id="t3_title" aria-hidden="true" class="weui-tabbar__label">接口</p>
</div>
</div>
</div>
@ -100,8 +108,9 @@
<div class="weui-mask_transparent"></div>
<div class="weui-toast">
<span class="weui-primary-loading weui-icon_toast"><span class="weui-primary-loading__dot"></span></span>
<p class="weui-toast__content">Loading</p>
<p class="weui-toast__content">載入中</p>
</div>
</div>
</body>
</html>

@ -1,13 +1,17 @@
function search() {
doAction('search', {word: $('#search_key_word').val()});
doAction('search', { text: $('#keyword').val() });
}
function api() {
doAction('api', {url: $('#diy_api_url').val()});
function update(branch) {
doAction('update', { text: branch });
}
function push() {
doAction('push', {url: $('#push_url').val()});
doAction('push', { text: $('#push_url').val() });
}
function api() {
doAction('api', { text: $('#api_url').val() });
}
function doAction(action, kv) {

Loading…
Cancel
Save