handling deeplinks
This commit is contained in:
92
apps.js
92
apps.js
@@ -677,15 +677,34 @@ deletePlayerButton.addEventListener('click', () => {
|
|||||||
audioManager.play('modalClose');
|
audioManager.play('modalClose');
|
||||||
});
|
});
|
||||||
|
|
||||||
// Flic button action handler - Parse URL parameters and execute corresponding actions
|
// Function to get action from URL parameters (search or hash)
|
||||||
function handleDeepLink() {
|
function getActionFromUrl() {
|
||||||
if (!window.location.hash) return;
|
// Check for action in both search params and hash
|
||||||
|
const searchParams = new URLSearchParams(window.location.search);
|
||||||
|
const hashParams = new URLSearchParams(window.location.hash.substring(1));
|
||||||
|
|
||||||
// Parse the hash to get action parameters
|
// First check search params (for direct curl or navigation)
|
||||||
const params = new URLSearchParams(window.location.hash.substring(1));
|
const searchAction = searchParams.get('action');
|
||||||
const action = params.get('action');
|
if (searchAction) {
|
||||||
|
console.log('Found action in search params:', searchAction);
|
||||||
|
return searchAction;
|
||||||
|
}
|
||||||
|
|
||||||
console.log('Received action from deep link:', action);
|
// Then check hash params (existing deep link mechanism)
|
||||||
|
const hashAction = hashParams.get('action');
|
||||||
|
if (hashAction) {
|
||||||
|
console.log('Found action in hash params:', hashAction);
|
||||||
|
return hashAction;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Function to handle deep link actions
|
||||||
|
function handleActionFromUrl(action) {
|
||||||
|
if (!action) return;
|
||||||
|
|
||||||
|
console.log('Processing action:', action);
|
||||||
|
|
||||||
// Execute action based on the parameter
|
// Execute action based on the parameter
|
||||||
switch (action) {
|
switch (action) {
|
||||||
@@ -731,29 +750,67 @@ function handleDeepLink() {
|
|||||||
default:
|
default:
|
||||||
console.log('Unknown action:', action);
|
console.log('Unknown action:', action);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clear the hash to prevent duplicate actions if page is refreshed
|
|
||||||
history.replaceState(null, null, ' ');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Function to handle deep links from URL or Flic button
|
||||||
|
function handleDeepLink() {
|
||||||
|
// Get action from URL parameters
|
||||||
|
const action = getActionFromUrl();
|
||||||
|
|
||||||
|
// Process the action if found
|
||||||
|
if (action) {
|
||||||
|
handleActionFromUrl(action);
|
||||||
|
|
||||||
|
// Clear the parameters to prevent duplicate actions if page is refreshed
|
||||||
|
if (window.history && window.history.replaceState) {
|
||||||
|
// Create new URL without the action parameter
|
||||||
|
const newUrl = window.location.pathname;
|
||||||
|
window.history.replaceState({}, document.title, newUrl);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Listen for service worker messages (for receiving actions while app is running)
|
||||||
|
navigator.serviceWorker.addEventListener('message', (event) => {
|
||||||
|
if (event.data && event.data.type === 'ACTION') {
|
||||||
|
console.log('Received action from service worker:', event.data.action);
|
||||||
|
handleActionFromUrl(event.data.action);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// Service Worker Registration
|
// Service Worker Registration
|
||||||
if ('serviceWorker' in navigator) {
|
if ('serviceWorker' in navigator) {
|
||||||
window.addEventListener('load', () => {
|
window.addEventListener('load', () => {
|
||||||
navigator.serviceWorker.register('/sw.js')
|
navigator.serviceWorker.register('/sw.js')
|
||||||
.then(registration => {
|
.then(registration => {
|
||||||
console.log('ServiceWorker registered: ', registration);
|
console.log('ServiceWorker registered: ', registration);
|
||||||
|
|
||||||
|
// Check for and handle deep links after service worker is ready
|
||||||
|
handleDeepLink();
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch(error => {
|
||||||
console.log('ServiceWorker registration failed: ', error);
|
console.log('ServiceWorker registration failed: ', error);
|
||||||
|
|
||||||
|
// Still try to handle deep links even if service worker failed
|
||||||
|
handleDeepLink();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
} else {
|
||||||
|
// If service workers aren't supported, still handle deep links
|
||||||
|
window.addEventListener('load', handleDeepLink);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check for deep links when the page loads
|
|
||||||
window.addEventListener('load', handleDeepLink);
|
|
||||||
|
|
||||||
// Also check for hash changes (needed for handling link activation when app is already open)
|
// Also check for hash changes (needed for handling link activation when app is already open)
|
||||||
window.addEventListener('hashchange', handleDeepLink);
|
window.addEventListener('hashchange', () => {
|
||||||
|
console.log('Hash changed, checking for actions');
|
||||||
|
handleDeepLink();
|
||||||
|
});
|
||||||
|
|
||||||
|
// Also check for navigation events that might include search parameters
|
||||||
|
window.addEventListener('popstate', () => {
|
||||||
|
console.log('Navigation occurred, checking for actions');
|
||||||
|
handleDeepLink();
|
||||||
|
});
|
||||||
|
|
||||||
// Make sure to handle rotation by adding window event listener for orientation changes
|
// Make sure to handle rotation by adding window event listener for orientation changes
|
||||||
window.addEventListener('orientationchange', () => {
|
window.addEventListener('orientationchange', () => {
|
||||||
@@ -784,3 +841,10 @@ function cleanupCameraData() {
|
|||||||
|
|
||||||
// Initialize the app
|
// Initialize the app
|
||||||
loadData();
|
loadData();
|
||||||
|
|
||||||
|
// Process URL parameters on initial load (needed for direct curl requests)
|
||||||
|
if (document.readyState === 'loading') {
|
||||||
|
document.addEventListener('DOMContentLoaded', handleDeepLink);
|
||||||
|
} else {
|
||||||
|
handleDeepLink();
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user