fix and add getPathFromUrl and getUrlFromPath

pull/1484/head^2
yann300 3 years ago committed by Aniket
parent d68f7d1145
commit abcc5f0c0f
  1. 28
      apps/remix-ide/src/app/files/fileManager.js
  2. 5
      apps/remix-ide/src/app/files/fileProvider.js

@ -22,7 +22,7 @@ const profile = {
icon: 'assets/img/fileManager.webp',
permission: true,
version: packageJson.version,
methods: ['file', 'exists', 'open', 'writeFile', 'readFile', 'copyFile', 'copyDir', 'rename', 'mkdir', 'readdir', 'remove', 'getCurrentFile', 'getFile', 'getFolder', 'setFile', 'switchFile', 'refresh', 'getProviderOf', 'getProviderByName'],
methods: ['file', 'exists', 'open', 'writeFile', 'readFile', 'copyFile', 'copyDir', 'rename', 'mkdir', 'readdir', 'remove', 'getCurrentFile', 'getFile', 'getFolder', 'setFile', 'switchFile', 'refresh', 'getProviderOf', 'getProviderByName', 'getPathFromUrl', 'getUrlFromPath'],
kind: 'file-system'
}
const errorMsg = {
@ -171,7 +171,7 @@ class FileManager extends Plugin {
try {
path = this.limitPluginScope(path)
try {
path = this._resolveFromExternalPath(path).file || path
path = this.getPathFromUrl(path).file
} catch (e) {
return console.error(e)
}
@ -544,13 +544,13 @@ class FileManager extends Plugin {
}
/**
* Try to resolve the given file path.
* Try to resolve the given file path (the actual path in the file system)
* e.g if it's specified a github link, npm library, or any external content,
* it returns the actual path where the content can be find.
* @param {string} file path we are trying to resolve
* it returns the actual path where the content can be found.
* @param {string} file url we are trying to resolve
* @returns {{ string, provider }} file path resolved and its provider.
*/
_resolveFromExternalPath (file) {
getPathFromUrl (file) {
const provider = this.fileProviderOf(file)
if (!provider) throw new Error(`no provider for ${file}`)
return {
@ -559,6 +559,20 @@ class FileManager extends Plugin {
}
}
/**
* Try to resolve the given file URl. opposite of getPathFromUrl *
* @param {string} file path we are trying to resolve
* @returns {{ string, provider }} file url resolved and its provider.
*/
getUrlFromPath (file) {
const provider = this.fileProviderOf(file)
if (!provider) throw new Error(`no provider for ${file}`)
return {
file: provider.getUrlFromPath(file) || file, // in case an external URL is given as input, we resolve it to the right internal path
provider
}
}
removeTabsOf (provider) {
for (var tab in this.openedFiles) {
if (this.fileProviderOf(tab).type === provider.type) {
@ -592,7 +606,7 @@ class FileManager extends Plugin {
this.saveCurrentFile()
let resolved
try {
resolved = this._resolveFromExternalPath(file)
resolved = this.getPathFromUrl(file)
file = resolved.file
} catch (e) {
return console.error(e)

@ -39,6 +39,11 @@ class FileProvider {
return this.providerExternalsStorage.get(this.reverseKey + url)
}
getUrlFromPath (path) {
if (!path.startsWith(this.type)) path = this.type + '/' + path
return this.providerExternalsStorage.get(path)
}
isExternalFolder (path) {
return this.externalFolders.includes(path)
}

Loading…
Cancel
Save