testing updates
This commit is contained in:
@@ -338,6 +338,31 @@ browser.runtime.onMessage.addListener((message, sender, sendResponse) => {
|
||||
.catch((err) => sendResponse({ ok: false, error: err.message }));
|
||||
return true;
|
||||
}
|
||||
|
||||
// Handle checkUpdate request from dashboard
|
||||
if (message.action === 'checkUpdate') {
|
||||
// For now, return current version - could be expanded to check remote
|
||||
sendResponse({ ok: true, version: '1.0.0', updateAvailable: false });
|
||||
return false;
|
||||
}
|
||||
|
||||
// Handle restartHost request from dashboard
|
||||
if (message.action === 'restartHost') {
|
||||
if (port) {
|
||||
port.disconnect();
|
||||
}
|
||||
// Clear state
|
||||
activeConnections.clear();
|
||||
updateExtensionState();
|
||||
// Reconnect
|
||||
if (reconnectTimer) {
|
||||
clearTimeout(reconnectTimer);
|
||||
reconnectTimer = null;
|
||||
}
|
||||
connect();
|
||||
sendResponse({ ok: true });
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
// Open dashboard when extension icon is clicked
|
||||
|
||||
@@ -468,6 +468,7 @@
|
||||
<rect x="3" y="3" width="18" height="18" rx="2"/><line x1="9" y1="3" x2="9" y2="21"/>
|
||||
</svg>
|
||||
Tabs
|
||||
<span class="badge" id="tabCount">0</span>
|
||||
</div>
|
||||
<div class="nav-item" data-page="logs">
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
||||
@@ -476,7 +477,6 @@
|
||||
<line x1="16" y1="17" x2="8" y2="17"/><polyline points="10,9 9,9 8,9"/>
|
||||
</svg>
|
||||
Logs
|
||||
<span class="badge" id="logCount">0</span>
|
||||
</div>
|
||||
<div class="nav-item" data-page="settings">
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
||||
@@ -624,10 +624,17 @@
|
||||
</div>
|
||||
<div class="toggle" id="toggleDebug" data-setting="debug"></div>
|
||||
</div>
|
||||
<div class="setting-row">
|
||||
<div class="setting-info">
|
||||
<div class="setting-label">Connection Notifications</div>
|
||||
<div class="setting-desc">Show notification when peers connect/disconnect</div>
|
||||
</div>
|
||||
<div class="toggle" id="toggleConnectionNotify" data-setting="connectionNotifications"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="settings-group">
|
||||
<h3>Defaults</h3>
|
||||
<h3>Swarm Defaults</h3>
|
||||
<div class="setting-row">
|
||||
<div class="setting-info">
|
||||
<div class="setting-label">Default App Name</div>
|
||||
@@ -638,10 +645,35 @@
|
||||
<div class="setting-row">
|
||||
<div class="setting-info">
|
||||
<div class="setting-label">Default Max Peers</div>
|
||||
<div class="setting-desc">Maximum peer connections per swarm</div>
|
||||
<div class="setting-desc">Maximum peer connections per swarm (0 = unlimited)</div>
|
||||
</div>
|
||||
<input type="number" id="defaultMaxPeers" style="width: 100px; padding: 0.5rem; background: #27272a; border: 1px solid #3f3f46; border-radius: 6px; color: #e4e4e7;">
|
||||
</div>
|
||||
<div class="setting-row">
|
||||
<div class="setting-info">
|
||||
<div class="setting-label">Default Request Timeout (ms)</div>
|
||||
<div class="setting-desc">Timeout for requests (0 = no timeout)</div>
|
||||
</div>
|
||||
<input type="number" id="defaultRequestTimeoutMs" style="width: 100px; padding: 0.5rem; background: #27272a; border: 1px solid #3f3f46; border-radius: 6px; color: #e4e4e7;">
|
||||
</div>
|
||||
<div class="setting-row">
|
||||
<div class="setting-info">
|
||||
<div class="setting-label">Ready Timeout (ms)</div>
|
||||
<div class="setting-desc">Timeout for BridgeSwarm.ready() (0 = wait forever)</div>
|
||||
</div>
|
||||
<input type="number" id="readyTimeoutMs" style="width: 100px; padding: 0.5rem; background: #27272a; border: 1px solid #3f3f46; border-radius: 6px; color: #e4e4e7;">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="settings-group">
|
||||
<h3>Injection</h3>
|
||||
<div class="setting-row">
|
||||
<div class="setting-info">
|
||||
<div class="setting-label">Disable on file:// URLs</div>
|
||||
<div class="setting-desc">Do not inject BridgeSwarm on local files</div>
|
||||
</div>
|
||||
<div class="toggle" id="toggleDisableFileUrls" data-setting="disableOnFileUrls"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style="margin-top: 1.5rem;">
|
||||
@@ -649,6 +681,51 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<div class="settings-group">
|
||||
<h3>Software Update</h3>
|
||||
<div class="setting-row">
|
||||
<div class="setting-info">
|
||||
<div class="setting-label">Current Version</div>
|
||||
<div class="setting-desc" id="currentVersion">v1.0.0</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="setting-row">
|
||||
<div class="setting-info">
|
||||
<div class="setting-label">Native Host Path</div>
|
||||
<div class="setting-desc" id="nativeHostPath" style="font-family: monospace; font-size: 0.75rem;">/path/to/bridge-swarm-host</div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="margin-top: 1rem;">
|
||||
<button class="btn btn-primary" id="btnCheckUpdate">Check for Updates</button>
|
||||
<button class="btn btn-secondary" id="btnRestartHost" style="margin-left: 0.5rem;">Restart Native Host</button>
|
||||
</div>
|
||||
<div id="updateStatus" style="margin-top: 1rem; font-size: 0.85rem;"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<div class="settings-group">
|
||||
<h3>About</h3>
|
||||
<div class="setting-row">
|
||||
<div class="setting-info">
|
||||
<div class="setting-label">BridgeSwarm</div>
|
||||
<div class="setting-desc">P2P Hyperswarm in the browser via native messaging</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="setting-row">
|
||||
<div class="setting-info">
|
||||
<div class="setting-label">Repository</div>
|
||||
<div class="setting-desc"><a href="#" id="repoLink" style="color: #22d3ee;">git.ssh.surf/snxraven/BridgeSwarm</a></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Logs Page -->
|
||||
|
||||
+59
-1
@@ -70,16 +70,24 @@ function loadSettings() {
|
||||
function updateSettingsUI() {
|
||||
$('toggleNotify').classList.toggle('active', settings.notifyOnDisconnect === true);
|
||||
$('toggleDebug').classList.toggle('active', settings.debug === true);
|
||||
$('toggleConnectionNotify').classList.toggle('active', settings.connectionNotifications === true);
|
||||
$('toggleDisableFileUrls').classList.toggle('active', settings.disableOnFileUrls === true);
|
||||
$('defaultAppName').value = settings.defaultAppName || 'bridge-swarm';
|
||||
$('defaultMaxPeers').value = settings.defaultMaxPeers || '';
|
||||
$('defaultMaxPeers').value = settings.defaultMaxPeers ?? '';
|
||||
$('defaultRequestTimeoutMs').value = settings.defaultRequestTimeoutMs ?? '';
|
||||
$('readyTimeoutMs').value = settings.readyTimeoutMs ?? '';
|
||||
}
|
||||
|
||||
// Save settings
|
||||
function saveSettings() {
|
||||
settings.notifyOnDisconnect = $('toggleNotify').classList.contains('active');
|
||||
settings.debug = $('toggleDebug').classList.contains('active');
|
||||
settings.connectionNotifications = $('toggleConnectionNotify').classList.contains('active');
|
||||
settings.disableOnFileUrls = $('toggleDisableFileUrls').classList.contains('active');
|
||||
settings.defaultAppName = $('defaultAppName').value || 'bridge-swarm';
|
||||
settings.defaultMaxPeers = parseInt($('defaultMaxPeers').value) || 0;
|
||||
settings.defaultRequestTimeoutMs = parseInt($('defaultRequestTimeoutMs').value) || 0;
|
||||
settings.readyTimeoutMs = parseInt($('readyTimeoutMs').value) || 0;
|
||||
|
||||
chrome.storage.local.set({ [SETTINGS_KEY]: settings }, () => {
|
||||
log('Settings saved');
|
||||
@@ -110,6 +118,7 @@ function updateDashboard(state) {
|
||||
// Badges
|
||||
$('swarmCount').textContent = state.stats.totalSwarms;
|
||||
$('connCount').textContent = state.stats.totalConnections;
|
||||
$('tabCount').textContent = state.tabs.length;
|
||||
|
||||
// Recent connections
|
||||
const connections = [];
|
||||
@@ -336,6 +345,55 @@ function setupEvents() {
|
||||
() => {}
|
||||
);
|
||||
});
|
||||
|
||||
// Software update handlers
|
||||
$('btnCheckUpdate')?.addEventListener('click', async () => {
|
||||
const statusEl = $('updateStatus');
|
||||
statusEl.innerHTML = '<span style="color: #fbbf24;">Checking for updates...</span>';
|
||||
|
||||
try {
|
||||
const response = await new Promise((resolve) => {
|
||||
chrome.runtime.sendMessage(
|
||||
{ target: 'bridge-swarm-native', action: 'checkUpdate' },
|
||||
resolve
|
||||
);
|
||||
});
|
||||
|
||||
if (response?.ok) {
|
||||
if (response.updateAvailable) {
|
||||
statusEl.innerHTML = `<span style="color: #22d3ee;">Update available: ${response.version}</span>`;
|
||||
} else {
|
||||
statusEl.innerHTML = '<span style="color: #9ece6a;">You are running the latest version.</span>';
|
||||
}
|
||||
} else {
|
||||
statusEl.innerHTML = `<span style="color: #f43f5e;">Error: ${response?.error || 'Unknown error'}</span>`;
|
||||
}
|
||||
} catch (e) {
|
||||
statusEl.innerHTML = `<span style="color: #f43f5e;">Error: ${e.message}</span>`;
|
||||
}
|
||||
});
|
||||
|
||||
$('btnRestartHost')?.addEventListener('click', async () => {
|
||||
const statusEl = $('updateStatus');
|
||||
statusEl.innerHTML = '<span style="color: #fbbf24;">Restarting native host...</span>';
|
||||
|
||||
try {
|
||||
const response = await new Promise((resolve) => {
|
||||
chrome.runtime.sendMessage(
|
||||
{ target: 'bridge-swarm-native', action: 'restartHost' },
|
||||
resolve
|
||||
);
|
||||
});
|
||||
|
||||
if (response?.ok) {
|
||||
statusEl.innerHTML = '<span style="color: #9ece6a;">Native host restarted.</span>';
|
||||
} else {
|
||||
statusEl.innerHTML = `<span style="color: #f43f5e;">Error: ${response?.error || 'Unknown error'}</span>`;
|
||||
}
|
||||
} catch (e) {
|
||||
statusEl.innerHTML = `<span style="color: #f43f5e;">Error: ${e.message}</span>`;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Initialize
|
||||
|
||||
Reference in New Issue
Block a user