@ -38,6 +38,13 @@ class DGitProvider extends Plugin {
protocol : 'https' ,
protocol : 'https' ,
ipfsurl : 'https://ipfs.io/ipfs/'
ipfsurl : 'https://ipfs.io/ipfs/'
}
}
this . remixIPFS = {
host : 'ipfs.remixproject.org' ,
port : 443 ,
protocol : 'https' ,
ipfsurl : 'https://ipfs.remixproject.org/ipfs/'
}
this . ipfsSources = [ this . remixIPFS , this . globalIPFSConfig , this . ipfsconfig ]
}
}
async getGitConfig ( ) {
async getGitConfig ( ) {
@ -287,36 +294,58 @@ class DGitProvider extends Plugin {
}
}
} ;
} ;
async importIPFSFiles ( config , cid , workspace ) {
const ipfs = IpfsHttpClient ( config )
let result = false
try {
const data = ipfs . get ( cid , { timeout : 10000 } )
for await ( const file of data ) {
if ( file . path ) result = true
file . path = file . path . replace ( cid , '' )
if ( ! file . content ) {
continue
}
const content = [ ]
for await ( const chunk of file . content ) {
content . push ( chunk )
}
const dir = path . dirname ( file . path )
try {
this . createDirectories ( ` ${ workspace . absolutePath } / ${ dir } ` )
} catch ( e ) { }
try {
window . remixFileSystem . writeFileSync ( ` ${ workspace . absolutePath } / ${ file . path } ` , Buffer . concat ( content ) || new Uint8Array ( ) )
} catch ( e ) { }
}
} catch ( e ) {
}
return result
}
calculateLocalStorage ( ) {
var _lsTotal = 0
var _xLen ; var _x
for ( _x in localStorage ) {
// eslint-disable-next-line no-prototype-builtins
if ( ! localStorage . hasOwnProperty ( _x ) ) {
continue
}
_xLen = ( ( localStorage [ _x ] . length + _x . length ) * 2 )
_lsTotal += _xLen
} ;
return ( _lsTotal / 1024 ) . toFixed ( 2 )
}
async pull ( cmd ) {
async pull ( cmd ) {
const permission = await this . askUserPermission ( 'pull' , 'Import multiple files into your workspaces.' )
const permission = await this . askUserPermission ( 'pull' , 'Import multiple files into your workspaces.' )
console . log ( this . ipfsconfig )
if ( ! permission ) return false
if ( ! permission ) return false
if ( this . calculateLocalStorage ( ) > 10000 ) throw new Error ( 'Local browser storage is full.' )
const cid = cmd . cid
const cid = cmd . cid
if ( ! cmd . local ) {
this . ipfs = IpfsHttpClient ( this . globalIPFSConfig )
} else {
if ( ! this . checkIpfsConfig ( ) ) return false
}
await this . call ( 'filePanel' , 'createWorkspace' , ` workspace_ ${ Date . now ( ) } ` , false )
await this . call ( 'filePanel' , 'createWorkspace' , ` workspace_ ${ Date . now ( ) } ` , false )
const workspace = await this . call ( 'filePanel' , 'getCurrentWorkspace' )
const workspace = await this . call ( 'filePanel' , 'getCurrentWorkspace' )
for await ( const file of this . ipfs . get ( cid ) ) {
const result = await this . importIPFSFiles ( this . remixIPFS , cid , workspace ) || await this . importIPFSFiles ( this . ipfsconfig , cid , workspace ) || await this . importIPFSFiles ( this . globalIPFSConfig , cid , workspace )
file . path = file . path . replace ( cid , '' )
await this . call ( 'fileManager' , 'refresh' )
if ( ! file . content ) {
if ( ! result ) throw new Error ( ` Cannot pull files from IPFS at ${ cid } ` )
continue
}
const content = [ ]
for await ( const chunk of file . content ) {
content . push ( chunk )
}
const dir = path . dirname ( file . path )
try {
this . createDirectories ( ` ${ workspace . absolutePath } / ${ dir } ` )
} catch ( e ) { }
try {
window . remixFileSystem . writeFileSync ( ` ${ workspace . absolutePath } / ${ file . path } ` , Buffer . concat ( content ) || new Uint8Array ( ) )
} catch ( e ) { }
}
this . call ( 'fileManager' , 'refresh' )
}
}
async getItem ( name ) {
async getItem ( name ) {