CPF/CPF.Mac/Mac/Foundation/NSFileWrapper.cs
2023-11-21 23:05:03 +08:00

477 lines
16 KiB
C#

using CPF.Mac.ObjCRuntime;
using System;
using System.ComponentModel;
using System.Runtime.InteropServices;
namespace CPF.Mac.Foundation
{
[Register("NSFileWrapper", true)]
public class NSFileWrapper : NSObject
{
private static readonly IntPtr selIsDirectoryHandle = Selector.GetHandle("isDirectory");
private static readonly IntPtr selIsRegularFileHandle = Selector.GetHandle("isRegularFile");
private static readonly IntPtr selIsSymbolicLinkHandle = Selector.GetHandle("isSymbolicLink");
private static readonly IntPtr selFileWrappersHandle = Selector.GetHandle("fileWrappers");
private static readonly IntPtr selSymbolicLinkDestinationURLHandle = Selector.GetHandle("symbolicLinkDestinationURL");
private static readonly IntPtr selPreferredFilenameHandle = Selector.GetHandle("preferredFilename");
private static readonly IntPtr selSetPreferredFilename_Handle = Selector.GetHandle("setPreferredFilename:");
private static readonly IntPtr selFilenameHandle = Selector.GetHandle("filename");
private static readonly IntPtr selSetFilename_Handle = Selector.GetHandle("setFilename:");
private static readonly IntPtr selFileAttributesHandle = Selector.GetHandle("fileAttributes");
private static readonly IntPtr selSetFileAttributes_Handle = Selector.GetHandle("setFileAttributes:");
private static readonly IntPtr selInitWithURLOptionsError_Handle = Selector.GetHandle("initWithURL:options:error:");
private static readonly IntPtr selInitDirectoryWithFileWrappers_Handle = Selector.GetHandle("initDirectoryWithFileWrappers:");
private static readonly IntPtr selInitRegularFileWithContents_Handle = Selector.GetHandle("initRegularFileWithContents:");
private static readonly IntPtr selInitSymbolicLinkWithDestinationURL_Handle = Selector.GetHandle("initSymbolicLinkWithDestinationURL:");
private static readonly IntPtr selMatchesContentsOfURL_Handle = Selector.GetHandle("matchesContentsOfURL:");
private static readonly IntPtr selReadFromURLOptionsError_Handle = Selector.GetHandle("readFromURL:options:error:");
private static readonly IntPtr selWriteToURLOptionsOriginalContentsURLError_Handle = Selector.GetHandle("writeToURL:options:originalContentsURL:error:");
private static readonly IntPtr selSerializedRepresentationHandle = Selector.GetHandle("serializedRepresentation");
private static readonly IntPtr selAddFileWrapper_Handle = Selector.GetHandle("addFileWrapper:");
private static readonly IntPtr selAddRegularFileWithContentsPreferredFilename_Handle = Selector.GetHandle("addRegularFileWithContents:preferredFilename:");
private static readonly IntPtr selRemoveFileWrapper_Handle = Selector.GetHandle("removeFileWrapper:");
private static readonly IntPtr selKeyForFileWrapper_Handle = Selector.GetHandle("keyForFileWrapper:");
private static readonly IntPtr selRegularFileContentsHandle = Selector.GetHandle("regularFileContents");
private static readonly IntPtr class_ptr = Class.GetHandle("NSFileWrapper");
private object __mt_FileWrappers_var;
private object __mt_SymbolicLinkDestinationURL_var;
private object __mt_FileAttributes_var;
public override IntPtr ClassHandle => class_ptr;
public virtual bool IsDirectory
{
[Export("isDirectory")]
get
{
if (IsDirectBinding)
{
return Messaging.bool_objc_msgSend(base.Handle, selIsDirectoryHandle);
}
return Messaging.bool_objc_msgSendSuper(base.SuperHandle, selIsDirectoryHandle);
}
}
public virtual bool IsRegularFile
{
[Export("isRegularFile")]
get
{
if (IsDirectBinding)
{
return Messaging.bool_objc_msgSend(base.Handle, selIsRegularFileHandle);
}
return Messaging.bool_objc_msgSendSuper(base.SuperHandle, selIsRegularFileHandle);
}
}
public virtual bool IsSymbolicLink
{
[Export("isSymbolicLink")]
get
{
if (IsDirectBinding)
{
return Messaging.bool_objc_msgSend(base.Handle, selIsSymbolicLinkHandle);
}
return Messaging.bool_objc_msgSendSuper(base.SuperHandle, selIsSymbolicLinkHandle);
}
}
public virtual NSDictionary FileWrappers
{
[Export("fileWrappers")]
get
{
return (NSDictionary)(__mt_FileWrappers_var = ((!IsDirectBinding) ? ((NSDictionary)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selFileWrappersHandle))) : ((NSDictionary)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend(base.Handle, selFileWrappersHandle)))));
}
}
public virtual NSUrl SymbolicLinkDestinationURL
{
[Export("symbolicLinkDestinationURL")]
get
{
return (NSUrl)(__mt_SymbolicLinkDestinationURL_var = ((!IsDirectBinding) ? ((NSUrl)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selSymbolicLinkDestinationURLHandle))) : ((NSUrl)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend(base.Handle, selSymbolicLinkDestinationURLHandle)))));
}
}
public virtual string PreferredFilename
{
[Export("preferredFilename")]
get
{
if (IsDirectBinding)
{
return NSString.FromHandle(Messaging.IntPtr_objc_msgSend(base.Handle, selPreferredFilenameHandle));
}
return NSString.FromHandle(Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selPreferredFilenameHandle));
}
[Export("setPreferredFilename:")]
set
{
if (value == null)
{
throw new ArgumentNullException("value");
}
IntPtr intPtr = NSString.CreateNative(value);
if (IsDirectBinding)
{
Messaging.void_objc_msgSend_IntPtr(base.Handle, selSetPreferredFilename_Handle, intPtr);
}
else
{
Messaging.void_objc_msgSendSuper_IntPtr(base.SuperHandle, selSetPreferredFilename_Handle, intPtr);
}
NSString.ReleaseNative(intPtr);
}
}
public virtual string Filename
{
[Export("filename")]
get
{
if (IsDirectBinding)
{
return NSString.FromHandle(Messaging.IntPtr_objc_msgSend(base.Handle, selFilenameHandle));
}
return NSString.FromHandle(Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selFilenameHandle));
}
[Export("setFilename:")]
set
{
if (value == null)
{
throw new ArgumentNullException("value");
}
IntPtr intPtr = NSString.CreateNative(value);
if (IsDirectBinding)
{
Messaging.void_objc_msgSend_IntPtr(base.Handle, selSetFilename_Handle, intPtr);
}
else
{
Messaging.void_objc_msgSendSuper_IntPtr(base.SuperHandle, selSetFilename_Handle, intPtr);
}
NSString.ReleaseNative(intPtr);
}
}
public virtual NSDictionary FileAttributes
{
[Export("fileAttributes")]
get
{
return (NSDictionary)(__mt_FileAttributes_var = ((!IsDirectBinding) ? ((NSDictionary)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selFileAttributesHandle))) : ((NSDictionary)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend(base.Handle, selFileAttributesHandle)))));
}
[Export("setFileAttributes:")]
set
{
if (value == null)
{
throw new ArgumentNullException("value");
}
if (IsDirectBinding)
{
Messaging.void_objc_msgSend_IntPtr(base.Handle, selSetFileAttributes_Handle, value.Handle);
}
else
{
Messaging.void_objc_msgSendSuper_IntPtr(base.SuperHandle, selSetFileAttributes_Handle, value.Handle);
}
__mt_FileAttributes_var = value;
}
}
[EditorBrowsable(EditorBrowsableState.Advanced)]
[Export("init")]
public NSFileWrapper()
: base(NSObjectFlag.Empty)
{
if (IsDirectBinding)
{
base.Handle = Messaging.IntPtr_objc_msgSend(base.Handle, Selector.Init);
}
else
{
base.Handle = Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, Selector.Init);
}
}
[EditorBrowsable(EditorBrowsableState.Advanced)]
[Export("initWithCoder:")]
public NSFileWrapper(NSCoder coder)
: base(NSObjectFlag.Empty)
{
if (IsDirectBinding)
{
base.Handle = Messaging.IntPtr_objc_msgSend_IntPtr(base.Handle, Selector.InitWithCoder, coder.Handle);
}
else
{
base.Handle = Messaging.IntPtr_objc_msgSendSuper_IntPtr(base.SuperHandle, Selector.InitWithCoder, coder.Handle);
}
}
[EditorBrowsable(EditorBrowsableState.Advanced)]
public NSFileWrapper(NSObjectFlag t)
: base(t)
{
}
[EditorBrowsable(EditorBrowsableState.Advanced)]
public NSFileWrapper(IntPtr handle)
: base(handle)
{
}
[Export("initWithURL:options:error:")]
public NSFileWrapper(NSUrl url, NSFileWrapperReadingOptions options, out NSError outError)
: base(NSObjectFlag.Empty)
{
if (url == null)
{
throw new ArgumentNullException("url");
}
IntPtr intPtr = Marshal.AllocHGlobal(4);
Marshal.WriteInt32(intPtr, 0);
if (IsDirectBinding)
{
base.Handle = Messaging.IntPtr_objc_msgSend_IntPtr_UInt64_IntPtr(base.Handle, selInitWithURLOptionsError_Handle, url.Handle, (ulong)options, intPtr);
}
else
{
base.Handle = Messaging.IntPtr_objc_msgSendSuper_IntPtr_UInt64_IntPtr(base.SuperHandle, selInitWithURLOptionsError_Handle, url.Handle, (ulong)options, intPtr);
}
IntPtr intPtr2 = Marshal.ReadIntPtr(intPtr);
outError = ((intPtr2 != IntPtr.Zero) ? ((NSError)Runtime.GetNSObject(intPtr2)) : null);
Marshal.FreeHGlobal(intPtr);
}
[Export("initDirectoryWithFileWrappers:")]
public NSFileWrapper(NSDictionary childrenByPreferredName)
: base(NSObjectFlag.Empty)
{
if (childrenByPreferredName == null)
{
throw new ArgumentNullException("childrenByPreferredName");
}
if (IsDirectBinding)
{
base.Handle = Messaging.IntPtr_objc_msgSend_IntPtr(base.Handle, selInitDirectoryWithFileWrappers_Handle, childrenByPreferredName.Handle);
}
else
{
base.Handle = Messaging.IntPtr_objc_msgSendSuper_IntPtr(base.SuperHandle, selInitDirectoryWithFileWrappers_Handle, childrenByPreferredName.Handle);
}
}
[Export("initRegularFileWithContents:")]
public NSFileWrapper(NSData contents)
: base(NSObjectFlag.Empty)
{
if (contents == null)
{
throw new ArgumentNullException("contents");
}
if (IsDirectBinding)
{
base.Handle = Messaging.IntPtr_objc_msgSend_IntPtr(base.Handle, selInitRegularFileWithContents_Handle, contents.Handle);
}
else
{
base.Handle = Messaging.IntPtr_objc_msgSendSuper_IntPtr(base.SuperHandle, selInitRegularFileWithContents_Handle, contents.Handle);
}
}
[Export("initSymbolicLinkWithDestinationURL:")]
public NSFileWrapper(NSUrl urlToSymbolicLink)
: base(NSObjectFlag.Empty)
{
if (urlToSymbolicLink == null)
{
throw new ArgumentNullException("urlToSymbolicLink");
}
if (IsDirectBinding)
{
base.Handle = Messaging.IntPtr_objc_msgSend_IntPtr(base.Handle, selInitSymbolicLinkWithDestinationURL_Handle, urlToSymbolicLink.Handle);
}
else
{
base.Handle = Messaging.IntPtr_objc_msgSendSuper_IntPtr(base.SuperHandle, selInitSymbolicLinkWithDestinationURL_Handle, urlToSymbolicLink.Handle);
}
}
[Export("matchesContentsOfURL:")]
public virtual bool MatchesContentsOfURL(NSUrl url)
{
if (url == null)
{
throw new ArgumentNullException("url");
}
if (IsDirectBinding)
{
return Messaging.bool_objc_msgSend_IntPtr(base.Handle, selMatchesContentsOfURL_Handle, url.Handle);
}
return Messaging.bool_objc_msgSendSuper_IntPtr(base.SuperHandle, selMatchesContentsOfURL_Handle, url.Handle);
}
[Export("readFromURL:options:error:")]
public virtual bool Read(NSUrl url, NSFileWrapperReadingOptions options, out NSError outError)
{
if (url == null)
{
throw new ArgumentNullException("url");
}
IntPtr intPtr = Marshal.AllocHGlobal(4);
Marshal.WriteInt32(intPtr, 0);
bool result = (!IsDirectBinding) ? Messaging.bool_objc_msgSendSuper_IntPtr_UInt64_IntPtr(base.SuperHandle, selReadFromURLOptionsError_Handle, url.Handle, (ulong)options, intPtr) : Messaging.bool_objc_msgSend_IntPtr_UInt64_IntPtr(base.Handle, selReadFromURLOptionsError_Handle, url.Handle, (ulong)options, intPtr);
IntPtr intPtr2 = Marshal.ReadIntPtr(intPtr);
outError = ((intPtr2 != IntPtr.Zero) ? ((NSError)Runtime.GetNSObject(intPtr2)) : null);
Marshal.FreeHGlobal(intPtr);
return result;
}
[Export("writeToURL:options:originalContentsURL:error:")]
public virtual bool Write(NSUrl url, NSFileWrapperWritingOptions options, NSUrl originalContentsURL, out NSError outError)
{
if (url == null)
{
throw new ArgumentNullException("url");
}
if (originalContentsURL == null)
{
throw new ArgumentNullException("originalContentsURL");
}
IntPtr intPtr = Marshal.AllocHGlobal(4);
Marshal.WriteInt32(intPtr, 0);
bool result = (!IsDirectBinding) ? Messaging.bool_objc_msgSendSuper_IntPtr_UInt64_IntPtr_IntPtr(base.SuperHandle, selWriteToURLOptionsOriginalContentsURLError_Handle, url.Handle, (ulong)options, originalContentsURL.Handle, intPtr) : Messaging.bool_objc_msgSend_IntPtr_UInt64_IntPtr_IntPtr(base.Handle, selWriteToURLOptionsOriginalContentsURLError_Handle, url.Handle, (ulong)options, originalContentsURL.Handle, intPtr);
IntPtr intPtr2 = Marshal.ReadIntPtr(intPtr);
outError = ((intPtr2 != IntPtr.Zero) ? ((NSError)Runtime.GetNSObject(intPtr2)) : null);
Marshal.FreeHGlobal(intPtr);
return result;
}
[Export("serializedRepresentation")]
public virtual NSData GetSerializedRepresentation()
{
if (IsDirectBinding)
{
return (NSData)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend(base.Handle, selSerializedRepresentationHandle));
}
return (NSData)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selSerializedRepresentationHandle));
}
[Export("addFileWrapper:")]
public virtual string AddFileWrapper(NSFileWrapper child)
{
if (child == null)
{
throw new ArgumentNullException("child");
}
if (IsDirectBinding)
{
return NSString.FromHandle(Messaging.IntPtr_objc_msgSend_IntPtr(base.Handle, selAddFileWrapper_Handle, child.Handle));
}
return NSString.FromHandle(Messaging.IntPtr_objc_msgSendSuper_IntPtr(base.SuperHandle, selAddFileWrapper_Handle, child.Handle));
}
[Export("addRegularFileWithContents:preferredFilename:")]
public virtual string AddRegularFile(NSData dataContents, string preferredFilename)
{
if (dataContents == null)
{
throw new ArgumentNullException("dataContents");
}
if (preferredFilename == null)
{
throw new ArgumentNullException("preferredFilename");
}
IntPtr intPtr = NSString.CreateNative(preferredFilename);
string result = (!IsDirectBinding) ? NSString.FromHandle(Messaging.IntPtr_objc_msgSendSuper_IntPtr_IntPtr(base.SuperHandle, selAddRegularFileWithContentsPreferredFilename_Handle, dataContents.Handle, intPtr)) : NSString.FromHandle(Messaging.IntPtr_objc_msgSend_IntPtr_IntPtr(base.Handle, selAddRegularFileWithContentsPreferredFilename_Handle, dataContents.Handle, intPtr));
NSString.ReleaseNative(intPtr);
return result;
}
[Export("removeFileWrapper:")]
public virtual void RemoveFileWrapper(NSFileWrapper child)
{
if (child == null)
{
throw new ArgumentNullException("child");
}
if (IsDirectBinding)
{
Messaging.void_objc_msgSend_IntPtr(base.Handle, selRemoveFileWrapper_Handle, child.Handle);
}
else
{
Messaging.void_objc_msgSendSuper_IntPtr(base.SuperHandle, selRemoveFileWrapper_Handle, child.Handle);
}
}
[Export("keyForFileWrapper:")]
public virtual string KeyForFileWrapper(NSFileWrapper child)
{
if (child == null)
{
throw new ArgumentNullException("child");
}
if (IsDirectBinding)
{
return NSString.FromHandle(Messaging.IntPtr_objc_msgSend_IntPtr(base.Handle, selKeyForFileWrapper_Handle, child.Handle));
}
return NSString.FromHandle(Messaging.IntPtr_objc_msgSendSuper_IntPtr(base.SuperHandle, selKeyForFileWrapper_Handle, child.Handle));
}
[Export("regularFileContents")]
public virtual NSData GetRegularFileContents()
{
if (IsDirectBinding)
{
return (NSData)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend(base.Handle, selRegularFileContentsHandle));
}
return (NSData)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selRegularFileContentsHandle));
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
if (base.Handle == IntPtr.Zero)
{
__mt_FileWrappers_var = null;
__mt_SymbolicLinkDestinationURL_var = null;
__mt_FileAttributes_var = null;
}
}
}
}