refactor: 数据库迁移到 ~/.showpic.db

This commit is contained in:
yinzhou.ma
2026-07-16 23:13:56 +08:00
parent 9316422ef1
commit e123e1badf
3 changed files with 17 additions and 102 deletions
+10 -88
View File
@@ -20,17 +20,6 @@
.content { padding: 30px; }
.group-label {
text-align: center;
margin-bottom: 20px;
font-size: 16px;
color: #333;
}
.group-label .countdown {
color: #1890ff;
font-weight: 500;
}
.image-grid {
display: flex;
flex-wrap: wrap;
@@ -53,49 +42,25 @@
color: #999;
padding: 80px 0;
}
.indicator {
display: flex;
justify-content: center;
gap: 8px;
margin-top: 20px;
}
.indicator .dot {
width: 8px; height: 8px;
border-radius: 50%;
background: #ddd;
}
.indicator .dot.active {
background: #1890ff;
}
</style>
</head>
<body>
<div class="header">
首页
</div>
<div class="header">首页</div>
<div class="content">
<div id="groupLabel" class="group-label" style="display:none;">
<span id="groupName"></span>
<span id="countdown" class="countdown"></span>
</div>
<div class="image-grid" id="imageGrid"></div>
<div class="empty" id="empty">暂无图片</div>
<div class="indicator" id="indicator"></div>
</div>
<script>
let ws;
let countdownTimer = null;
let remaining = 0;
var ws;
function connectWS() {
const protocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
var protocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
ws = new WebSocket(protocol + '//' + location.host);
ws.onmessage = function(e) {
try {
const data = JSON.parse(e.data);
var data = JSON.parse(e.data);
if (data.type === 'state') renderState(data);
} catch(err) {}
};
@@ -106,37 +71,16 @@
}
function renderState(state) {
const grid = document.getElementById('imageGrid');
const empty = document.getElementById('empty');
const groupLabel = document.getElementById('groupLabel');
const indicator = document.getElementById('indicator');
var grid = document.getElementById('imageGrid');
var empty = document.getElementById('empty');
if (!state.playing || state.images.length === 0) {
grid.innerHTML = '';
empty.style.display = 'block';
groupLabel.style.display = 'none';
indicator.innerHTML = '';
if (countdownTimer) { clearInterval(countdownTimer); countdownTimer = null; }
return;
}
empty.style.display = 'none';
groupLabel.style.display = 'block';
document.getElementById('groupName').textContent = state.group_name + ' ';
remaining = state.remaining;
updateCountdownDisplay();
if (countdownTimer) clearInterval(countdownTimer);
if (remaining > 0) {
countdownTimer = setInterval(function() {
remaining--;
if (remaining <= 0) {
clearInterval(countdownTimer);
countdownTimer = null;
}
updateCountdownDisplay();
}, 1000);
}
grid.innerHTML = '';
state.images.forEach(function(img) {
@@ -148,7 +92,10 @@
var pressTimer;
imgEl.addEventListener('touchstart', function() {
pressTimer = setTimeout(function() {
saveImage('/uploads/' + img.filename, img.original_name);
var a = document.createElement('a');
a.href = '/uploads/' + img.filename;
a.download = img.original_name || 'image.jpg';
a.click();
}, 1000);
});
imgEl.addEventListener('touchend', function() { clearTimeout(pressTimer); });
@@ -156,31 +103,6 @@
div.appendChild(imgEl);
grid.appendChild(div);
});
indicator.innerHTML = '';
for (var i = 0; i < state.total; i++) {
var dot = document.createElement('div');
dot.className = 'dot' + (i === state.current_index ? ' active' : '');
indicator.appendChild(dot);
}
}
function updateCountdownDisplay() {
var el = document.getElementById('countdown');
if (remaining < 0) {
el.textContent = '持续展示';
} else if (remaining > 0) {
el.textContent = remaining + '秒';
} else {
el.textContent = '';
}
}
function saveImage(url, name) {
var a = document.createElement('a');
a.href = url;
a.download = name || 'image.jpg';
a.click();
}
connectWS();