Skip to content

Commit

Permalink
fix dapp preloading for localhost
Browse files Browse the repository at this point in the history
- [CORE-1121]
  • Loading branch information
Tobias Winkler committed Mar 12, 2020
1 parent c2e0ef0 commit f3243ce
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 13 deletions.
27 changes: 18 additions & 9 deletions src/app/ens.ts
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,23 @@ export async function getContentHashForAddress(address: string): Promise<string>
return bytes32ToIpfsHash(result);
}

/**
* Sets the ens cache for a ens address with a loaded dbcp description.
*
* @param {string} address ens address
* @param {any} dbcp dbcp.public
*/
export function setEnsCache(address: string, dbcp: any): void {
// set ens cache to speed up initial loading
if (dbcp.dapp.type === 'cached-dapp') {
ensCache[address] = JSON.stringify(dbcp);
} else {
delete ensCache[address];
}

window.localStorage['evan-ens-cache'] = JSON.stringify(ensCache);
}

/**
* Resolves the content behind a ens address.
*
Expand Down Expand Up @@ -213,16 +230,8 @@ export async function resolveContent(address: string) {
const ipfsResult = await ipfsCatPromise(ipfsHash);
// parse the result
const dbcp = JSON.parse(ipfsResult).public;

// set ens cache to speed up initial loading
if (dbcp.dapp.type === 'cached-dapp') {
ensCache[address] = JSON.stringify(dbcp);
} else {
delete ensCache[address];
}

setEnsCache(address, dbcp);
// save ens cache
window.localStorage['evan-ens-cache'] = JSON.stringify(ensCache);
return dbcp;
} catch (ex) {
const errMsg = `Could not parse content of address ${address}: ${ipfsHash} (${ex.message})`;
Expand Down
1 change: 1 addition & 0 deletions src/app/routing.ts
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,7 @@ export async function onRouteChange(): Promise<void> {
const split = window.location.hash.replace(/#\/|#/g, '').split('?')[0].split('/');
split.forEach((subEns: string) => {
if (subEns !== activeRootENS && ensCache[subEns]) {
utils.log(`preloading ${subEns} dapp`);
loadDApp(subEns);
}
});
Expand Down
17 changes: 13 additions & 4 deletions src/systemjs/plugins/ens.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,9 @@
*/

import * as utils from '../../app/utils';
import System from '../index';
import { getQueryParameters } from '../../app/routing';
import { ipfsCatPromise } from '../../app/ipfs';
import { resolveContent, parseToValidEnsAddress } from '../../app/ens';
import { resolveContent, parseToValidEnsAddress, setEnsCache } from '../../app/ens';

export default function(System: any) {
// libraries that should be cached
Expand All @@ -36,31 +35,41 @@ export default function(System: any) {
*/
const getDefinitionFromEns = async function(ensAddress: string, domain: string) {
// remove domain from the end of the ensAddress to get the dapp name
let split = parseToValidEnsAddress(ensAddress).split('.');
const split = parseToValidEnsAddress(ensAddress).split('.');
const dappName = split.slice(0, split.length - 1).join('.');

// get correct ens address and check if a cached ens is availabled
const validEnsAddress = parseToValidEnsAddress(ensAddress);
let dbcp;
let updateEnsCache = false;

try {
if (utils.isDevAvailable(dappName) && ensAddress.indexOf('0x') !== 0) {
// load json and resolve it as stringified
dbcp = await System.import(`dapps/${dappName}/dbcp.json!json`);
updateEnsCache = true;
} else if (validEnsAddress.indexOf('Qm') === 0) {
dbcp = await ipfsCatPromise(validEnsAddress);
updateEnsCache = true;
} else {
dbcp = await resolveContent(validEnsAddress);
}
} catch (ex) {
console.dir(ex);
}

// parse dbcp to the correct format
if (typeof dbcp === 'string') {
dbcp = JSON.parse(dbcp);
}
dbcp = dbcp && dbcp.public ? dbcp.public : dbcp;

return JSON.stringify(dbcp && dbcp.public ? dbcp.public : dbcp) || '';
// update ens cache for local / ipfs loaded dbcp
if (updateEnsCache && dbcp) {
setEnsCache(ensAddress, dbcp);
}

return JSON.stringify(dbcp) || '';
};

/**
Expand Down

0 comments on commit f3243ce

Please sign in to comment.