14 changed files with 233 additions and 258 deletions
@ -1,67 +0,0 @@ |
|||||||
import 'dart:io'; |
|
||||||
|
|
||||||
import 'package:win_text_editor/framework/controllers/logger.dart'; |
|
||||||
import 'package:win_text_editor/modules/memory_table/models/memory_table.dart'; |
|
||||||
import 'package:win_text_editor/shared/data/std_fields_cache.dart'; |
|
||||||
import 'package:win_text_editor/shared/models/std_filed.dart'; |
|
||||||
import 'package:xml/xml.dart' as xml; |
|
||||||
|
|
||||||
class FieldDataService { |
|
||||||
static Future<File?> findMetadataFile(String filePath) async { |
|
||||||
Directory currentDir = File(filePath).parent; |
|
||||||
const targetDirName = 'metadata'; |
|
||||||
const targetFileName = 'stdfield.stdfield'; |
|
||||||
|
|
||||||
// 向上查找 metadata 目录 |
|
||||||
while (true) { |
|
||||||
final metadataDir = Directory('${currentDir.path}/$targetDirName'); |
|
||||||
if (await metadataDir.exists()) { |
|
||||||
final stdFieldFile = File('${metadataDir.path}/$targetFileName'); |
|
||||||
if (await stdFieldFile.exists()) { |
|
||||||
return stdFieldFile; |
|
||||||
} else { |
|
||||||
Logger().error("没找到标准字段文件 $targetFileName"); |
|
||||||
return null; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
// 到达根目录时停止 |
|
||||||
if (currentDir.path == currentDir.parent.path) { |
|
||||||
Logger().error("没有找到元数据目录 $targetDirName"); |
|
||||||
return null; |
|
||||||
} |
|
||||||
|
|
||||||
currentDir = currentDir.parent; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
// 处理标准字段文件并缓存 |
|
||||||
static Future<void> processStdFieldFile(File stdFieldFile) async { |
|
||||||
try { |
|
||||||
final content = await stdFieldFile.readAsString(); |
|
||||||
final document = xml.XmlDocument.parse(content); |
|
||||||
final items = document.findAllElements('items'); |
|
||||||
|
|
||||||
for (final item in items) { |
|
||||||
final name = item.getAttribute('name') ?? ''; |
|
||||||
final chineseName = item.getAttribute('chineseName') ?? ''; |
|
||||||
final dataType = item.getAttribute('dataType') ?? ''; |
|
||||||
|
|
||||||
if (name.isNotEmpty) { |
|
||||||
final stdField = StdField(name: name, chineseName: chineseName, dateType: dataType); |
|
||||||
await StdFieldsCache.setData(name, stdField); |
|
||||||
} |
|
||||||
} |
|
||||||
} catch (e) { |
|
||||||
Logger().error("处理标准字段文件时出错: $e"); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
static List<Field> getDefaultFields() { |
|
||||||
return [Field('1', '', '', ''), Field('2', '', '', ''), Field('3', '', '', '')]; |
|
||||||
} |
|
||||||
|
|
||||||
static List<Index> getDefaultIndexes() { |
|
||||||
return [Index('', false, '', ''), Index('', false, '', '')]; |
|
||||||
} |
|
||||||
} |
|
Loading…
Reference in new issue