Skip to content

Commit 8d683e1

Browse files
committed
Add device discovery and reconnect after connection error
1 parent 1067789 commit 8d683e1

3 files changed

Lines changed: 91 additions & 3 deletions

File tree

renderer/assets/css/index.css

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,46 @@ body {
3232
width: 35px;
3333
background-image: url("../img/plus-circle.svg");
3434
}
35+
36+
#deviceDiscovery {
37+
position: absolute;
38+
bottom: 20px;
39+
right: 20px;
40+
left: 20px;
41+
max-height: 150px;
42+
overflow-y: auto;
43+
background-color: #252627;
44+
border: 1px solid #a0a0a0;
45+
border-radius: 4px;
46+
}
47+
#deviceDiscovery .scanning {
48+
display: none;
49+
text-align: center;
50+
color: #d1d1d1;
51+
margin: 10px;
52+
}
53+
#deviceDiscovery .rescan {
54+
text-align: center;
55+
margin: 4px;
56+
}
57+
#deviceDiscovery .rescan .rescanBtn {
58+
color: #a3a3a3;
59+
text-decoration: none;
60+
}
61+
#deviceDiscovery .rescan .rescanBtn:hover {
62+
text-decoration: underline;
63+
}
64+
#deviceDiscovery .device {
65+
padding: 10px 15px;
66+
border-top: 1px solid #575757;
67+
box-sizing: content-box;
68+
cursor: pointer;
69+
}
70+
#deviceDiscovery .device:hover {
71+
background-color: #343536;
72+
transition: 0.2s;
73+
}
74+
#deviceDiscovery .device .ip {
75+
float: right;
76+
color: #999999;
77+
}

renderer/assets/js/index.js

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
const ipAddressField = document.getElementById('ipAddressField');
22
const connectBtn = document.getElementById('connectBtn');
33
const autoConnectOpt = document.getElementById('autoConnectOpt');
4+
const deviceDiscovery = document.getElementById('deviceDiscovery');
45

56
ipAddressField.addEventListener('keyup', () => {
67
connectBtn.disabled = ipAddressField.value == '';
@@ -11,6 +12,7 @@ ipAddressField.addEventListener('keypress', event => {
1112
}
1213
});
1314
connectBtn.addEventListener('click', () => {
15+
if(connectBtn.classList.contains('running')) return;
1416
connectBtn.classList.add('running');
1517
window.electronAPI.saveSettings({deviceAddress: ipAddressField.value});
1618

@@ -27,6 +29,10 @@ connectBtn.addEventListener('click', () => {
2729
autoConnectOpt.addEventListener('change', () => {
2830
window.electronAPI.saveSettings({autoConnect: autoConnectOpt.checked});
2931
});
32+
deviceDiscovery.querySelector('.rescanBtn').addEventListener('click', event => {
33+
event.preventDefault();
34+
scanDevices();
35+
});
3036

3137
(async () => {
3238
const settings = await window.electronAPI.getSettings();
@@ -37,9 +43,39 @@ autoConnectOpt.addEventListener('change', () => {
3743
if(settings.autoConnect && await window.electronAPI.firstConnect()) {
3844
connectBtn.click();
3945
}
46+
47+
const params = new URLSearchParams(window.location.search);
48+
if(params.get('message') == 'timeout') {
49+
toastr.error('Connection to device lost. Please check your internet connection and reconnect.', 'Connection lost');
50+
if(settings.autoConnect) {
51+
setTimeout(() => {
52+
connectBtn.click();
53+
}, 5000);
54+
}
55+
}
56+
57+
scanDevices();
4058
})();
4159

42-
const params = new URLSearchParams(window.location.search);
43-
if(params.get('message') == 'timeout') {
44-
toastr.error('Connection to device lost. Please check your internet connection and reconnect.', 'Connection lost');
60+
async function scanDevices() {
61+
const rescan = deviceDiscovery.querySelector('.rescan');
62+
const scanning = deviceDiscovery.querySelector('.scanning');
63+
rescan.style.display = 'none';
64+
scanning.style.display = 'block';
65+
66+
const devices = await window.electronAPI.scanDevices();
67+
for(let dev of deviceDiscovery.querySelectorAll('.device')) dev.remove();
68+
devices.forEach(dev => {
69+
const element = document.createElement('div');
70+
element.classList.add('device');
71+
element.innerHTML = `<span class="name">${dev.name}</span><span class="ip">${dev.ip}</span>`;
72+
element.onclick = () => {
73+
ipAddressField.value = dev.ip;
74+
connectBtn.click();
75+
};
76+
deviceDiscovery.appendChild(element);
77+
});
78+
79+
rescan.style.display = null;
80+
scanning.style.display = null;
4581
}

renderer/index.html

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,15 @@ <h2>Connect your device</h2>
2323
<label for="autoConnectOpt">Auto connect</label>
2424
</div>
2525
</div>
26+
<div id="deviceDiscovery">
27+
<div class="scanning">
28+
<div class="ld ld-spin ld-ring"></div>&nbsp;
29+
Scanning for devices
30+
</div>
31+
<div class="rescan">
32+
<a href="" class="rescanBtn">Scan again</a>
33+
</div>
34+
</div>
2635
<script src="assets/js/jquery.min.js"></script>
2736
<script src="assets/js/toastr.min.js"></script>
2837
<script src="assets/js/index.js"></script>

0 commit comments

Comments
 (0)