From 1b0c1364ad16bf1bfe52c2f2ac9878cee62f2e30 Mon Sep 17 00:00:00 2001 From: Halil Durmus Date: Thu, 23 Apr 2026 23:42:15 +0300 Subject: [PATCH] refactor(package_info_plus): use win32's built-in structs and helpers --- .../lib/src/file_attribute.dart | 39 ++----------------- .../lib/src/file_version_info.dart | 4 +- 2 files changed, 6 insertions(+), 37 deletions(-) diff --git a/packages/package_info_plus/package_info_plus/lib/src/file_attribute.dart b/packages/package_info_plus/package_info_plus/lib/src/file_attribute.dart index 87a9b7e367..5026ea47da 100644 --- a/packages/package_info_plus/package_info_plus/lib/src/file_attribute.dart +++ b/packages/package_info_plus/package_info_plus/lib/src/file_attribute.dart @@ -4,23 +4,6 @@ import 'dart:io'; import 'package:ffi/ffi.dart'; import 'package:win32/win32.dart'; -base class FILEATTRIBUTEDATA extends Struct { - @DWORD() - external int dwFileAttributes; - - external FILETIME ftCreationTime; - - external FILETIME ftLastAccessTime; - - external FILETIME ftLastWriteTime; - - @DWORD() - external int nFileSizeHigh; - - @DWORD() - external int nFileSizeLow; -} - class FileAttributes { final String filePath; @@ -43,7 +26,7 @@ class FileAttributes { } final lptstrFilename = filePath.toPcwstr(); - final lpFileInformation = calloc(); + final lpFileInformation = calloc(); try { final result = GetFileAttributesEx( @@ -55,29 +38,15 @@ class FileAttributes { throw WindowsException(result.error.toHRESULT()); } - final FILEATTRIBUTEDATA fileInformation = lpFileInformation.ref; + final WIN32_FILE_ATTRIBUTE_DATA fileInformation = lpFileInformation.ref; return ( - creationTime: fileTimeToDartDateTime(fileInformation.ftCreationTime), - lastWriteTime: fileTimeToDartDateTime(fileInformation.ftLastWriteTime), + creationTime: fileInformation.ftCreationTime.toDateTime(), + lastWriteTime: fileInformation.ftLastWriteTime.toDateTime(), ); } finally { free(lptstrFilename); free(lpFileInformation); } } - - static DateTime? fileTimeToDartDateTime(FILETIME? fileTime) { - if (fileTime == null) return null; - - final high = fileTime.dwHighDateTime; - final low = fileTime.dwLowDateTime; - - final fileTime64 = (high << 32) + low; - - final windowsTimeMillis = fileTime64 ~/ 10000; - final unixTimeMillis = windowsTimeMillis - 11644473600000; - - return DateTime.fromMillisecondsSinceEpoch(unixTimeMillis); - } } diff --git a/packages/package_info_plus/package_info_plus/lib/src/file_version_info.dart b/packages/package_info_plus/package_info_plus/lib/src/file_version_info.dart index 3ca879eaed..a8e3553cb1 100644 --- a/packages/package_info_plus/package_info_plus/lib/src/file_version_info.dart +++ b/packages/package_info_plus/package_info_plus/lib/src/file_version_info.dart @@ -3,8 +3,8 @@ // found in the LICENSE file. // Inspired by: -// - github.com/chromium/chromium/src/base/file_version_info_win.cc -// - github.com/timsneath/win32/example/filever.dart +// - github.com/chromium/chromium/blob/main/base/file_version_info_win.cc +// - github.com/halildurmus/win32/blob/main/examples/filever.dart import 'dart:ffi'; import 'dart:io';