104 lines
2.4 KiB
JavaScript
104 lines
2.4 KiB
JavaScript
const BACKEND_BASE_URL = window.BACKEND_BASE_URL || 'https://api.example.com';
|
|
|
|
let PreferencesImpl = null;
|
|
|
|
async function getPreferences() {
|
|
if (PreferencesImpl) return PreferencesImpl;
|
|
|
|
try {
|
|
const module = await import('@capacitor/preferences');
|
|
PreferencesImpl = module.Preferences;
|
|
return PreferencesImpl;
|
|
} catch {
|
|
// Fallback to localStorage
|
|
PreferencesImpl = {
|
|
async get({ key }) {
|
|
return { value: localStorage.getItem(key) };
|
|
},
|
|
async set({ key, value }) {
|
|
localStorage.setItem(key, value);
|
|
return;
|
|
},
|
|
async remove({ key }) {
|
|
localStorage.removeItem(key);
|
|
return;
|
|
},
|
|
async keys() {
|
|
return { keys: Object.keys(localStorage) };
|
|
},
|
|
async clear() {
|
|
localStorage.clear();
|
|
return;
|
|
}
|
|
};
|
|
return PreferencesImpl;
|
|
}
|
|
}
|
|
|
|
export const Preferences = {
|
|
async get(options) {
|
|
const pref = await getPreferences();
|
|
return pref.get(options);
|
|
},
|
|
async set(options) {
|
|
const pref = await getPreferences();
|
|
return pref.set(options);
|
|
},
|
|
async remove(options) {
|
|
const pref = await getPreferences();
|
|
return pref.remove(options);
|
|
},
|
|
async keys() {
|
|
const pref = await getPreferences();
|
|
return pref.keys();
|
|
},
|
|
async clear() {
|
|
const pref = await getPreferences();
|
|
return pref.clear();
|
|
}
|
|
};
|
|
|
|
export async function syncApp(appId) {
|
|
if (!appId || appId.trim() === '') {
|
|
throw new Error('appId is required');
|
|
}
|
|
|
|
const { value } = await Preferences.get({ key: `app_${appId}` });
|
|
if (!value) {
|
|
throw new Error(`App not found: ${appId}`);
|
|
}
|
|
|
|
const appData = JSON.parse(value);
|
|
|
|
const response = await fetch(`${BACKEND_BASE_URL}/desktop/apps/sync`, {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
},
|
|
body: JSON.stringify(appData),
|
|
});
|
|
|
|
if (!response.ok) {
|
|
throw new Error(`Sync failed: ${response.status}`);
|
|
}
|
|
|
|
return response.json();
|
|
}
|
|
|
|
export async function runOpencodeTask(appId, taskName, args = []) {
|
|
if (!appId || appId.trim() === '') {
|
|
throw new Error('appId is required');
|
|
}
|
|
if (!taskName || taskName.trim() === '') {
|
|
throw new Error('taskName is required');
|
|
}
|
|
|
|
throw new Error('OpenCode execution is not supported on mobile devices. Please use the desktop app for this feature.');
|
|
}
|
|
|
|
window.nativeBridge = {
|
|
Preferences,
|
|
syncApp,
|
|
runOpencodeTask
|
|
};
|