url handler downloads
Summary: Adding support for downloading archived Flipper data using a URL handler. A URL looks like `flipper://import/?url=` and will download the file specified in the url param. While downloading the file, a spinner is shown in the app's titlebar. Reviewed By: jknoxville Differential Revision: D14262763 fbshipit-source-id: 6538fc78c07a48cef7b71b3f7bdbcb712d054593
This commit is contained in:
committed by
Facebook Github Bot
parent
3e336d2349
commit
79124891a9
@@ -244,73 +244,77 @@ export const exportStoreToFile = (
|
||||
});
|
||||
};
|
||||
|
||||
export function importDataToStore(data: string, store: Store) {
|
||||
const json = deserialize(data);
|
||||
const {device, clients} = json;
|
||||
const {serial, deviceType, title, os, logs} = device;
|
||||
const archivedDevice = new ArchivedDevice(
|
||||
serial,
|
||||
deviceType,
|
||||
title,
|
||||
os,
|
||||
logs ? logs : [],
|
||||
);
|
||||
const devices = store.getState().connections.devices;
|
||||
const matchedDevices = devices.filter(
|
||||
availableDevice => availableDevice.serial === serial,
|
||||
);
|
||||
if (matchedDevices.length > 0) {
|
||||
store.dispatch({
|
||||
type: 'SELECT_DEVICE',
|
||||
payload: matchedDevices[0],
|
||||
});
|
||||
return;
|
||||
}
|
||||
store.dispatch({
|
||||
type: 'REGISTER_DEVICE',
|
||||
payload: archivedDevice,
|
||||
});
|
||||
store.dispatch({
|
||||
type: 'SELECT_DEVICE',
|
||||
payload: archivedDevice,
|
||||
});
|
||||
|
||||
const {pluginStates} = json.store;
|
||||
const keys = Object.keys(pluginStates);
|
||||
clients.forEach(client => {
|
||||
const clientPlugins = keys
|
||||
.filter(key => {
|
||||
const arr = key.split('#');
|
||||
arr.pop();
|
||||
const clientPlugin = arr.join('#');
|
||||
return client.id === clientPlugin;
|
||||
})
|
||||
.map(client => client.split('#').pop());
|
||||
store.dispatch({
|
||||
type: 'NEW_CLIENT',
|
||||
payload: new Client(
|
||||
client.id,
|
||||
client.query,
|
||||
null,
|
||||
getInstance(),
|
||||
store,
|
||||
clientPlugins,
|
||||
),
|
||||
});
|
||||
});
|
||||
keys.forEach(key => {
|
||||
store.dispatch({
|
||||
type: 'SET_PLUGIN_STATE',
|
||||
payload: {
|
||||
pluginKey: key,
|
||||
state: pluginStates[key],
|
||||
},
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
export const importFileToStore = (file: string, store: Store) => {
|
||||
fs.readFile(file, 'utf8', (err, data) => {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return;
|
||||
}
|
||||
const json = deserialize(data);
|
||||
const {device, clients} = json;
|
||||
const {serial, deviceType, title, os, logs} = device;
|
||||
const archivedDevice = new ArchivedDevice(
|
||||
serial,
|
||||
deviceType,
|
||||
title,
|
||||
os,
|
||||
logs ? logs : [],
|
||||
);
|
||||
const devices = store.getState().connections.devices;
|
||||
const matchedDevices = devices.filter(
|
||||
availableDevice => availableDevice.serial === serial,
|
||||
);
|
||||
if (matchedDevices.length > 0) {
|
||||
store.dispatch({
|
||||
type: 'SELECT_DEVICE',
|
||||
payload: matchedDevices[0],
|
||||
});
|
||||
return;
|
||||
}
|
||||
store.dispatch({
|
||||
type: 'REGISTER_DEVICE',
|
||||
payload: archivedDevice,
|
||||
});
|
||||
store.dispatch({
|
||||
type: 'SELECT_DEVICE',
|
||||
payload: archivedDevice,
|
||||
});
|
||||
|
||||
const {pluginStates} = json.store;
|
||||
const keys = Object.keys(pluginStates);
|
||||
clients.forEach(client => {
|
||||
const clientPlugins = keys
|
||||
.filter(key => {
|
||||
const arr = key.split('#');
|
||||
arr.pop();
|
||||
const clientPlugin = arr.join('#');
|
||||
return client.id === clientPlugin;
|
||||
})
|
||||
.map(client => client.split('#').pop());
|
||||
store.dispatch({
|
||||
type: 'NEW_CLIENT',
|
||||
payload: new Client(
|
||||
client.id,
|
||||
client.query,
|
||||
null,
|
||||
getInstance(),
|
||||
store,
|
||||
clientPlugins,
|
||||
),
|
||||
});
|
||||
});
|
||||
keys.forEach(key => {
|
||||
store.dispatch({
|
||||
type: 'SET_PLUGIN_STATE',
|
||||
payload: {
|
||||
pluginKey: key,
|
||||
state: pluginStates[key],
|
||||
},
|
||||
});
|
||||
});
|
||||
importDataToStore(data, store);
|
||||
});
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user