package funkin.backend.utils; import funkin.backend.utils.NativeAPI.FileAttribute; /** * Currently only for Windows, but planned to work on other platforms later. */ class FileAttributeWrapper { public var flags:Int; public function new(flags:Int) { this.flags = flags; } public var isArchived(get, set):Bool; private function get_isArchived():Bool { #if windows return (flags & FileAttribute.ARCHIVE) != 0; #else return false; #end } private function set_isArchived(value:Bool):Bool { #if windows if (value) flags |= FileAttribute.ARCHIVE; else flags &= ~FileAttribute.ARCHIVE; return value; #else return false; #end } public var isHidden(get, set):Bool; private function get_isHidden():Bool { #if windows return (flags & FileAttribute.HIDDEN) != 0; #else return false; #end } private function set_isHidden(value:Bool):Bool { #if windows if (value) flags |= FileAttribute.HIDDEN; else flags &= ~FileAttribute.HIDDEN; return value; #else return false; #end } public var isNormal(get, set):Bool; private function get_isNormal():Bool { #if windows return (flags & FileAttribute.NORMAL) != 0; #else return false; #end } private function set_isNormal(value:Bool):Bool { #if windows if (value) flags |= FileAttribute.NORMAL; else flags &= ~FileAttribute.NORMAL; return value; #else return false; #end } public var isNotContentIndexed(get, set):Bool; private function get_isNotContentIndexed():Bool { #if windows return (flags & FileAttribute.NOT_CONTENT_INDEXED) != 0; #else return false; #end } private function set_isNotContentIndexed(value:Bool):Bool { #if windows if (value) flags |= FileAttribute.NOT_CONTENT_INDEXED; else flags &= ~FileAttribute.NOT_CONTENT_INDEXED; return value; #else return false; #end } public var isOffline(get, set):Bool; private function get_isOffline():Bool { #if windows return (flags & FileAttribute.OFFLINE) != 0; #else return false; #end } private function set_isOffline(value:Bool):Bool { #if windows if (value) flags |= FileAttribute.OFFLINE; else flags &= ~FileAttribute.OFFLINE; return value; #else return false; #end } public var isReadOnly(get, set):Bool; private function get_isReadOnly():Bool { #if windows return (flags & FileAttribute.READONLY) != 0; #else return false; #end } private function set_isReadOnly(value:Bool):Bool { #if windows if (value) flags |= FileAttribute.READONLY; else flags &= ~FileAttribute.READONLY; return value; #else return false; #end } public var isSystem(get, set):Bool; private function get_isSystem():Bool { #if windows return (flags & FileAttribute.SYSTEM) != 0; #else return false; #end } private function set_isSystem(value:Bool):Bool { #if windows if (value) flags |= FileAttribute.SYSTEM; else flags &= ~FileAttribute.SYSTEM; return value; #else return false; #end } public var isTemporary(get, set):Bool; private function get_isTemporary():Bool { #if windows return (flags & FileAttribute.TEMPORARY) != 0; #else return false; #end } private function set_isTemporary(value:Bool):Bool { #if windows if (value) flags |= FileAttribute.TEMPORARY; else flags &= ~FileAttribute.TEMPORARY; return value; #else return false; #end } // Non Settables public var isCompressed(get, never):Bool; private function get_isCompressed():Bool { #if windows return (flags & FileAttribute.COMPRESSED) != 0; #else return false; #end } public var isDevice(get, never):Bool; private function get_isDevice():Bool { #if windows return (flags & FileAttribute.DEVICE) != 0; #else return false; #end } public var isDirectory(get, never):Bool; private function get_isDirectory():Bool { #if windows return (flags & FileAttribute.DIRECTORY) != 0; #else return false; #end } public var isEncrypted(get, never):Bool; private function get_isEncrypted():Bool { #if windows return (flags & FileAttribute.ENCRYPTED) != 0; #else return false; #end } public var isReparsePoint(get, never):Bool; private function get_isReparsePoint():Bool { #if windows return (flags & FileAttribute.REPARSE_POINT) != 0; #else return false; #end } public var isSparseFile(get, never):Bool; private function get_isSparseFile():Bool { #if windows return (flags & FileAttribute.SPARSE_FILE) != 0; #else return false; #end } // For checking (mainly) public var isNothing(get, never):Bool; private function get_isNothing():Bool { #if windows return (flags & FileAttribute.NOTHING) == 0; #else return false; #end } public function getValue():Int { return flags; } }