|
21 | 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
22 | 22 | THE SOFTWARE. |
23 | 23 | */ |
24 | | -import { EDITOR, NATIVE, PREVIEW, TEST } from 'internal:constants'; |
25 | | -import { assert, settings, SettingsCategory } from '../../core'; |
| 24 | +import { EDITOR, NATIVE, NODEJS, PREVIEW, TEST } from 'internal:constants'; |
| 25 | +import { assert, settings, SettingsCategory, cclegacy } from '../../core'; |
26 | 26 | import { fetchPipeline, pipeline } from './shared'; |
27 | 27 | import Task from './task'; |
28 | 28 |
|
29 | 29 | declare const Editor: any; |
30 | | -if ((EDITOR || PREVIEW) && !TEST) { |
31 | | - const cache: {[uuid: string]: string | null} = {}; |
| 30 | +if ((EDITOR || PREVIEW || NODEJS) && !TEST) { |
| 31 | + const cache: { [uuid: string]: string | null } = {}; |
32 | 32 | const resolveMap: { [uuid: string]: Function[] } = {}; |
33 | | - const replaceExtension = (task: Task, done): void => { |
| 33 | + const replaceExtension = (task: Task, done): void => { |
34 | 34 | task.output = task.input; |
35 | 35 | (async (): Promise<void> => { |
36 | 36 | for (let i = 0; i < task.input.length; i++) { |
@@ -80,12 +80,34 @@ if ((EDITOR || PREVIEW) && !TEST) { |
80 | 80 | try { |
81 | 81 | let text = ''; |
82 | 82 | if (EDITOR) { |
83 | | - const info: {library: {['.bin']: any}} = await Editor.Message.request('asset-db', 'query-asset-info', uuid); |
| 83 | + const info: { library: { ['.bin']: any } } = await Editor.Message.request('asset-db', 'query-asset-info', uuid); |
84 | 84 | // Current rule: If an asset has only one .bin file, then it is in CCON format. |
85 | 85 | if (info && info.library['.bin'] && Object.keys(info.library).length === 1) { |
86 | 86 | text = '.cconb'; |
87 | 87 | } |
88 | | - } else { |
| 88 | + } else if(NODEJS) { |
| 89 | + const importBase = cclegacy.assetManager.generalImportBase; |
| 90 | + let useAssetDB = true; |
| 91 | + if(importBase && (importBase.startsWith('http://') || importBase.startsWith('https://'))) { |
| 92 | + // cli:场景使用的是网络路径 |
| 93 | + const requestUrl = `${importBase}/query-extname/${uuid}`; |
| 94 | + try { |
| 95 | + text = await fetchText(requestUrl) as string; |
| 96 | + useAssetDB = false; |
| 97 | + } catch (e) { |
| 98 | + console.warn(`Failed to get file type from URL: ${requestUrl}. Error: ${e}`); |
| 99 | + text = ''; |
| 100 | + } |
| 101 | + } |
| 102 | + // 如果网络路径没有配置,或者不是网络路径,或者请求异常,使用AssetDB |
| 103 | + if(useAssetDB && globalThis.AssetDB) { |
| 104 | + const meta: { files: string[] } = await globalThis.AssetDB.queryAsset(uuid)?.meta; |
| 105 | + // Current rule: If an asset has only one .bin file, then it is in CCON format. |
| 106 | + if (meta && meta.files.length === 1 && meta.files[0] === '.bin') { |
| 107 | + text = '.cconb'; |
| 108 | + } |
| 109 | + } |
| 110 | + } else { |
89 | 111 | let previewServer = ''; |
90 | 112 | if (NATIVE) { |
91 | 113 | previewServer = settings.querySettings<string>(SettingsCategory.PATH, 'previewServer') || ''; |
|
0 commit comments