This commit is contained in:
2026-05-23 16:45:23 +08:00
parent 1336695068
commit 9d6ed4b0a5
8 changed files with 70 additions and 23 deletions

View File

@@ -236,11 +236,16 @@ function handle(m) {
}
func ApplovinPick(w http.ResponseWriter, r *http.Request) {
cfg := LoadConfig()
picked := PickFiles(
"Select HTML files",
[]FileFilter{{Name: "HTML", Extensions: []string{"html", "htm"}}},
true, "",
true, cfg.LastPickDir,
)
if len(picked) > 0 {
cfg.LastPickDir = filepath.Dir(picked[0])
_ = SaveConfig(cfg)
}
files := make([]map[string]string, 0, len(picked))
for _, p := range picked {
files = append(files, map[string]string{"path": p, "name": filepath.Base(p)})

View File

@@ -36,6 +36,7 @@ type AppConfig struct {
Applovin ApplovinConfig `json:"applovin"`
SendToMobile SendToMobileConfig `json:"sendToMobile"`
DailyUpdate DailyUpdateConfig `json:"dailyUpdate"`
LastPickDir string `json:"lastPickDir,omitempty"`
}
var configMu sync.Mutex

View File

@@ -54,6 +54,12 @@ const tbody = document.querySelector('#rows tbody');
const statusEl = document.getElementById('status');
const resultsEl = document.getElementById('results');
function parseIterationName(filename) {
const base = filename.replace(/\.html?$/i, '');
const match = base.match(/\b(full|\d+clk|\d+s(?:ec)?)\b/i);
return match ? match[1].toLowerCase() : base;
}
function addRow() {
const id = 'r' + (nextId++);
const tr = document.createElement('tr');
@@ -73,11 +79,14 @@ function addRow() {
tr.querySelector('.pick').addEventListener('click', async () => {
const res = await fetch('/api/plec/pick', { method: 'POST' });
const j = await res.json();
if (j.path) {
tr.querySelector('[data-path]').value = j.path;
tr.querySelector('[data-name]').textContent = j.name;
const iter = tr.querySelector('[data-iter]');
if (!iter.value) iter.value = j.name.replace(/\.html?$/i, '');
if (j.files && j.files.length) {
j.files.forEach(function(f, i) {
const target = i === 0 ? tr : (addRow(), tbody.lastElementChild);
target.querySelector('[data-path]').value = f.path;
target.querySelector('[data-name]').textContent = f.name;
const iter = target.querySelector('[data-iter]');
if (!iter.value) iter.value = parseIterationName(f.name);
});
}
});
tr.querySelector('.remove-btn').addEventListener('click', () => {
@@ -163,16 +172,23 @@ addRow();
}
func PlecPick(w http.ResponseWriter, r *http.Request) {
cfg := LoadConfig()
picked := PickFiles(
"Select HTML",
[]FileFilter{{Name: "HTML", Extensions: []string{"html", "htm"}}},
false, "",
true, cfg.LastPickDir,
)
if len(picked) == 0 {
writeJSON(w, map[string]any{"path": nil})
writeJSON(w, map[string]any{"files": []any{}})
return
}
writeJSON(w, map[string]any{"path": picked[0], "name": filepath.Base(picked[0])})
cfg.LastPickDir = filepath.Dir(picked[0])
_ = SaveConfig(cfg)
files := make([]map[string]string, 0, len(picked))
for _, p := range picked {
files = append(files, map[string]string{"path": p, "name": filepath.Base(p)})
}
writeJSON(w, map[string]any{"files": files})
}
type plecRow struct {