public string GetMimeType(string fileName) { try { var extensionWithDot = Path.GetExtension(fileName); if (!string.IsNullOrWhiteSpace(extensionWithDot)) { var extension = extensionWithDot.Substring(1); if (!string.IsNullOrWhiteSpace(extension)) { var extensionClassRef = new NSString(UTType.TagClassFilenameExtension); var mimeTypeClassRef = new NSString(UTType.TagClassMIMEType); var uti = NativeTools.UTTypeCreatePreferredIdentifierForTag(extensionClassRef.Handle, new NSString(extension).Handle, IntPtr.Zero); var mimeType = NativeTools.UTTypeCopyPreferredTagWithClass(uti, mimeTypeClassRef.Handle); using (var mimeTypeCString = new CoreFoundation.CFString(mimeType)) { return(mimeTypeCString); } } } } catch (Exception ex) { } return("*/*"); }
unsafe public CFDictionary(string[] keys,IntPtr[] values) { IntPtr[] keyz = new IntPtr[keys.Length]; for (int i = 0; i < keys.Length; i++) { keyz[i] = new CFString(keys[i]); } CFDictionaryKeyCallBacks kcall = new CFDictionaryKeyCallBacks(); CFDictionaryValueCallBacks vcall = new CFDictionaryValueCallBacks(); base.typeRef = CFLibrary.CFDictionaryCreate(IntPtr.Zero,keyz,values,keys.Length,ref kcall,ref vcall); }
public long GetInt64Value(string key) { long value = 0; using (var str = new CFString(key)) { if (!CFNumberGetValue(CFDictionaryGetValue(Handle, str.Handle), /* kCFNumberSInt64Type */ 4, out value)) { throw new System.Collections.Generic.KeyNotFoundException(string.Format("Key {0} not found", key)); } return(value); } }
public CFMutableString(CFString theString, nint maxLength = default(nint)) { if (theString == null) { throw new ArgumentNullException(nameof(theString)); } // NSMallocException Out of memory. We suggest restarting the application. If you have an unsaved document, create a backup copy in Finder, then try to save. if (maxLength < 0) { throw new ArgumentException(nameof(maxLength)); } Handle = CFStringCreateMutableCopy(IntPtr.Zero, maxLength, theString.GetHandle()); }
public static void CreatePairWithSocketToHost(string host, int port, out CFReadStream?readStream, out CFWriteStream?writeStream) { using (var str = new CFString(host)) { IntPtr read, write; CFStreamCreatePairWithSocketToHost( IntPtr.Zero, str.Handle, port, out read, out write); // API not annotated (yet?) but it's safe to bet it match CFStreamCreatePairWithSocketToCFHost readStream = read == IntPtr.Zero ? null : new CFReadStream(read, true); writeStream = write == IntPtr.Zero ? null : new CFWriteStream(write, true); } }
public override string?ToString() { if (copyDescription != IntPtr.Zero) { var ptr = CFReadStreamRef_InvokeCopyDescription(copyDescription, Info); if (ptr != IntPtr.Zero) { // Copy* -> so we must not retain again return(CFString.FromHandle(ptr, true)); } } return(base.ToString()); }
unsafe public CFDictionary(string[] keys, IntPtr[] values) { IntPtr[] keyz = new IntPtr[keys.Length]; for (int i = 0; i < keys.Length; i++) { keyz[i] = new CFString(keys[i]); } CFDictionaryKeyCallBacks kcall = new CFDictionaryKeyCallBacks(); CFDictionaryValueCallBacks vcall = new CFDictionaryValueCallBacks(); base.typeRef = CFLibrary.CFDictionaryCreate(IntPtr.Zero, keyz, values, keys.Length, ref kcall, ref vcall); }
static public CFUrl?FromUrlString(string url, CFUrl?baseurl) { if (url is null) { throw new ArgumentNullException(nameof(url)); } var strHandle = CFString.CreateNative(url); try { return(FromStringHandle(strHandle, baseurl)); } finally { CFString.ReleaseNative(strHandle); } }
public CFNotificationObserverToken AddObserver(string name, INativeObject objectToObserve, Action <string, NSDictionary?> notificationHandler, CFNotificationSuspensionBehavior suspensionBehavior = CFNotificationSuspensionBehavior.DeliverImmediately) { if (darwinnc is not null && darwinnc.Handle == Handle) { if (name is null) { throw new ArgumentNullException(nameof(name), "When using the Darwin Notification Center, the value passed must not be null"); } } var strHandle = CFString.CreateNative(name); name = name ?? NullNotificationName; var token = new CFNotificationObserverToken(name) { centerHandle = Handle, nameHandle = strHandle, observedObject = objectToObserve.GetHandle(), listener = notificationHandler }; // // To allow callbacks to add observers, we duplicate the list of listeners on AddObserver // We do the duplication on AddObserver, instead of making a copy on the notification // callback, as we expect the notification callback to be a more common operation // than the AddObserver operation // List <CFNotificationObserverToken>?listenersForName; lock (listeners){ if (!listeners.TryGetValue(name, out listenersForName)) { listenersForName = new List <CFNotificationObserverToken> (1); CFNotificationCenterAddObserver(center: Handle, observer: Handle, callback: NotificationCallback, name: strHandle, obj: token.observedObject, suspensionBehavior: (IntPtr)suspensionBehavior); } else { listenersForName = new List <CFNotificationObserverToken> (listenersForName); } listenersForName.Add(token); listeners [name] = listenersForName; } return(token); }
public override string ToString() { if (copyDescription != IntPtr.Zero) { var ptr = CFReadStreamRef_InvokeCopyDescription(copyDescription, Info); if (ptr != IntPtr.Zero) { // Copy* -> so we must not retain again using (var s = new CFString(ptr, true)) return(s.ToString()); } } return(base.ToString()); }
public CFPropertyList(string plistlocation) { IntPtr inputfilename; inputfilename = new CFString(plistlocation); IntPtr ifile_IntPtr = CFLibrary.CFURLCreateWithFileSystemPath(IntPtr.Zero, inputfilename, 2, false); IntPtr ifile_CFReadStreamRef = CFLibrary.CFReadStreamCreateWithFile(IntPtr.Zero, ifile_IntPtr); if ((CFLibrary.CFReadStreamOpen(ifile_CFReadStreamRef)) == false) { typeRef = IntPtr.Zero; } IntPtr PlistRef = CFLibrary.CFPropertyListCreateFromStream(IntPtr.Zero, ifile_CFReadStreamRef, 0, 2, 0, IntPtr.Zero); CFLibrary.CFReadStreamClose(ifile_CFReadStreamRef); typeRef = PlistRef; }
public static bool AppValueIsForced(string key, NSString applicationId) { if (key == null) { throw new ArgumentNullException("key"); } else if (applicationId == null) { throw new ArgumentNullException("applicationId"); } using (var cfKey = new CFString(key)) { return(CFPreferencesAppValueIsForced(cfKey.Handle, applicationId.Handle)); } }
public static void RemoveSuitePreferencesFromApp(NSString applicationId, string suiteId) { if (applicationId == null) { throw new ArgumentNullException("applicationId"); } else if (suiteId == null) { throw new ArgumentNullException("suiteId"); } using (var cfSuiteId = new CFString(suiteId)) { CFPreferencesRemoveSuitePreferencesFromApp(applicationId.Handle, cfSuiteId.Handle); } }
public static nint GetAppIntegerValue(string key, NSString applicationId) { if (key == null) { throw new ArgumentNullException("key"); } else if (applicationId == null) { throw new ArgumentNullException("applicationId"); } using (var cfKey = new CFString(key)) { return(CFPreferencesGetAppIntegerValue(cfKey.Handle, applicationId.Handle, IntPtr.Zero)); } }
public static string[] GetLocalizations(NSUrl bundle) { if (bundle == null) { throw new ArgumentNullException("bundle"); } using (var cfArray = new CFArray(CFBundleCopyLocalizationsForURL(bundle.Handle), true)) { var cultureInfo = new string [cfArray.Count]; for (int index = 0; index < cfArray.Count; index++) { cultureInfo [index] = CFString.FetchString(cfArray.GetValue(index)); } return(cultureInfo); } }
public long GetInt64Value(string key) { long value = 0; var keyHandle = CFString.CreateNative(key); try { if (!CFNumberGetValue(CFDictionaryGetValue(Handle, keyHandle), /* kCFNumberSInt64Type */ 4, out value)) { throw new System.Collections.Generic.KeyNotFoundException(string.Format("Key {0} not found", key)); } return(value); } finally { CFString.ReleaseNative(keyHandle); } }
public NSUrl?GetAuxiliaryExecutableUrl(string executableName) { if (String.IsNullOrEmpty(executableName)) { throw new ArgumentException(nameof(executableName)); } var executableNameHandle = CFString.CreateNative(executableName); try { // follows the create rule no need to retain var urlHandle = CFBundleCopyAuxiliaryExecutableURL(Handle, executableNameHandle); return(Runtime.GetNSObject <NSUrl> (urlHandle, true)); } finally { CFString.ReleaseNative(executableNameHandle); } }
public static CFMessagePort?CreateRemotePort(CFAllocator?allocator, string name) { if (name is null) { throw new ArgumentNullException(nameof(name)); } var n = CFString.CreateNative(name); try { var portHandle = CFMessagePortCreateRemote(allocator.GetHandle(), n); return(portHandle == IntPtr.Zero ? null : new CFMessagePort(portHandle, true)); } finally { CFString.ReleaseNative(n); } }
public static CFBundle Get(string bundleID) { if (String.IsNullOrEmpty(bundleID)) { throw new ArgumentException("bundleID"); } using (var cfBundleId = new CFString(bundleID)) { var cfBundle = CFBundleGetBundleWithIdentifier(cfBundleId.Handle); if (cfBundle == IntPtr.Zero) { return(null); } // follow the Get rule and retain the obj return(new CFBundle(cfBundle, false)); } }
public NSUrl GetAuxiliaryExecutableUrl(string executableName) { if (String.IsNullOrEmpty(executableName)) { throw new ArgumentException("executableName"); } using (var cfExecutableName = new CFString(executableName)) { // follows the create rule no need to retain var urlHandle = CFBundleCopyAuxiliaryExecutableURL(handle, cfExecutableName.Handle); if (urlHandle == IntPtr.Zero) { return(null); } return(Runtime.GetNSObject <NSUrl> (urlHandle, true)); } }
public static void SetAppValue(string key, object value, NSString applicationId) { if (key == null) { throw new ArgumentNullException("key"); } else if (applicationId == null) { throw new ArgumentNullException("applicationId"); } using (var cfKey = new CFString(key)) { if (value == null) { CFPreferencesSetAppValue(cfKey.Handle, IntPtr.Zero, applicationId.Handle); } else if (value is string) { using (var valueStr = new CFString((string)value)) { CFPreferencesSetAppValue(cfKey.Handle, valueStr.Handle, applicationId.Handle); } return; } else if (value is NSString || value is CFString || value is NSData || value is CFData || value is NSArray || value is CFArray || value is NSDictionary || value is CFDictionary || value is NSNumber || value is CFBoolean) { CFPreferencesSetAppValue(cfKey.Handle, ((INativeObject)value).Handle, applicationId.Handle); return; } var nsnumber = NSNumber.FromObject(value); if (nsnumber != null) { using (nsnumber) { CFPreferencesSetAppValue(cfKey.Handle, nsnumber.Handle, applicationId.Handle); } return; } throw new ArgumentException("unsupported type: " + value.GetType(), "value"); } }
public static string?[]? GetPreferredLocalizations(string[] locArray) { if (locArray is null) { throw new ArgumentNullException(nameof(locArray)); } var cfString = new CFString [locArray.Length]; for (int index = 0; index < locArray.Length; index++) { cfString [index] = new CFString(locArray [index]); } using (var cfLocArray = CFArray.FromNativeObjects(cfString)) { var rv = CFBundleCopyPreferredLocalizationsFromArray(cfLocArray.Handle); return(CFArray.StringArrayFromHandle(rv, true)); } }
public NSUrl?[]? GetResourceUrls(string resourceType, string subDirName) { if (String.IsNullOrEmpty(resourceType)) { throw new ArgumentException(nameof(resourceType)); } var resourceTypeHandle = CFString.CreateNative(resourceType); var dirNameHandle = CFString.CreateNative(string.IsNullOrEmpty(subDirName) ? null : subDirName); try { var rv = CFBundleCopyResourceURLsOfType(Handle, resourceTypeHandle, dirNameHandle); return(CFArray.ArrayFromHandleFunc(rv, (handle) => Runtime.GetNSObject <NSUrl> (handle, true), true)); } finally { CFString.ReleaseNative(resourceTypeHandle); CFString.ReleaseNative(dirNameHandle); } }
public static CFBundle[]? GetBundlesFromDirectory(NSUrl directoryUrl, string bundleType) { if (directoryUrl is null) // NSUrl cannot be "" by definition { throw new ArgumentNullException(nameof(directoryUrl)); } if (String.IsNullOrEmpty(bundleType)) { throw new ArgumentException(nameof(bundleType)); } var bundleTypeHandle = CFString.CreateNative(bundleType); try { var rv = CFBundleCreateBundlesFromDirectory(IntPtr.Zero, directoryUrl.Handle, bundleTypeHandle); return(CFArray.ArrayFromHandleFunc(rv, (handle) => new CFBundle(handle, true), true)); } finally { CFString.ReleaseNative(bundleTypeHandle); } }
static public CFUrl?FromFile(string filename) { if (filename is null) { throw new ArgumentNullException(nameof(filename)); } var strHandle = CFString.CreateNative(filename); try { var handle = CFURLCreateWithFileSystemPath(IntPtr.Zero, strHandle, (nint)(long)CFUrlPathStyle.POSIX, false); if (handle == IntPtr.Zero) { return(null); } return(new CFUrl(handle, true)); } finally { CFString.ReleaseNative(strHandle); } }
public NSUrl[] GetResourceUrls(string resourceType, string subDirName) { if (String.IsNullOrEmpty(resourceType)) { throw new ArgumentException("resourceName"); } using (CFString cfResourceType = new CFString(resourceType), cfSubDir = new CFString(subDirName ?? string.Empty)) using (var cfArray = new CFArray(CFBundleCopyResourceURLsOfType(handle, cfResourceType.Handle, String.IsNullOrEmpty(subDirName) ? IntPtr.Zero : cfSubDir.Handle), true)) { var result = new NSUrl [cfArray.Count]; for (int index = 0; index < cfArray.Count; index++) { result [index] = Runtime.GetNSObject <NSUrl> (cfArray.GetValue(index), true); } return(result); } }
public static CFBundle?Get(string bundleID) { if (String.IsNullOrEmpty(bundleID)) { throw new ArgumentException(nameof(bundleID)); } var bundleIDHandler = CFString.CreateNative(bundleID); try { var cfBundle = CFBundleGetBundleWithIdentifier(bundleIDHandler); if (cfBundle == IntPtr.Zero) { return(null); } // follow the Get rule and retain the obj return(new CFBundle(cfBundle, false)); } finally { CFString.ReleaseNative(bundleIDHandler); } }
public static CFBundle[] GetBundlesFromDirectory(NSUrl directoryUrl, string bundleType) { if (directoryUrl == null) // NSUrl cannot be "" by definition { throw new ArgumentNullException("directoryUrl"); } if (String.IsNullOrEmpty(bundleType)) { throw new ArgumentException("bundleType"); } using (var bundleTypeCFSting = new CFString(bundleType)) using (var cfBundles = new CFArray(CFBundleCreateBundlesFromDirectory(IntPtr.Zero, directoryUrl.Handle, bundleTypeCFSting.Handle), true)) { var managedBundles = new CFBundle [cfBundles.Count]; for (int index = 0; index < cfBundles.Count; index++) { // follow the create rules, therefore we do have ownership of each of the cfbundles managedBundles [index] = new CFBundle(cfBundles.GetValue(index), true); } return(managedBundles); } }
public NSUrl GetResourceUrl(string resourceName, string resourceType, string subDirName) { if (String.IsNullOrEmpty(resourceName)) { throw new ArgumentException("resourceName"); } if (String.IsNullOrEmpty(resourceType)) { throw new ArgumentException("resourceType"); } using (CFString cfResourceName = new CFString(resourceName), cfResourceType = new CFString(resourceType), cfDirName = (subDirName == null)? new CFString("") : new CFString(subDirName)) { // follows the create rules and therefore we do not need to retain var urlHandle = CFBundleCopyResourceURL(handle, cfResourceName.Handle, cfResourceType.Handle, String.IsNullOrEmpty(subDirName) ? IntPtr.Zero : cfDirName.Handle); return(Runtime.GetNSObject <NSUrl> (urlHandle, true)); } }
static unsafe public string?[]? StringArrayFromHandle(IntPtr handle) { if (handle == IntPtr.Zero) { return(null); } var c = (int)GetCount(handle); if (c == 0) { return(Array.Empty <string> ()); } var buffer = c <= 256 ? stackalloc IntPtr [c] : new IntPtr [c]; fixed(void *ptr = buffer) CFArrayGetValues(handle, new CFRange(0, c), (IntPtr)ptr); string?[] ret = new string [c]; for (var i = 0; i < c; i++) ret [i] = CFString.FromHandle(buffer [i]); }
public static string[] GetPreferredLocalizations(string[] locArray) { if (locArray == null) { throw new ArgumentNullException("locArray"); } var cfString = new CFString [locArray.Length]; for (int index = 0; index < locArray.Length; index++) { cfString [index] = new CFString(locArray [index]); } using (var cfLocArray = CFArray.FromNativeObjects(cfString)) using (var cfArray = new CFArray(CFBundleCopyPreferredLocalizationsFromArray(cfLocArray.Handle), true)) { var cultureInfo = new string [cfArray.Count]; for (int index = 0; index < cfArray.Count; index++) { cultureInfo [index] = CFString.FetchString(cfArray.GetValue(index)); } return(cultureInfo); } }
void notification(CFString name, NSDictionary userInfo) { var evt = NotificationChanged; if (evt == null) return; evt (this,new NoticationEventArgs(name.ToString ())); }
public static string GetDeviceIdentifier(IntPtr device) { IntPtr p = AMDeviceCopyDeviceIdentifier(device); CFString str = new CFString(p); return str.ToString(); }
public static bool InstallApp(IntPtr device, string appPath) { CFString path = new CFString(appPath); IntPtr appUrl = CFLibrary.CFURLCreateWithFileSystemPath(IntPtr.Zero, path.typeRef, 2, false); string[] k = new string[1]; k[0] = "PackageType"; IntPtr[] v = new IntPtr[1]; v[0] = new CFString("Developer"); CFDictionary opts = new CFDictionary(k, v); int err = AMDeviceSecureTransferPath(0, device, appUrl, opts, IntPtr.Zero, 0); if ( err == NO_ERR ) { return AMDeviceSecureInstallApplication(0, device, appUrl, opts, IntPtr.Zero, 0) == NO_ERR; } return err == NO_ERR; }
public static bool UninstallApp(IntPtr device, string bundleId) { CFString appId = new CFString(bundleId); return AMDeviceSecureUninstallApplication(0, device, appId, 0, IntPtr.Zero, 0) == NO_ERR; }
public static bool UpdateTime(IntPtr device, double time) { int sec = Convert.ToInt32(time); CFString domain = new CFString("NULL"); CFString key = new CFString("TimeIntervalSince1970"); IntPtr p = AMDeviceCopyValue(device, domain, key); string n = new CFNumber(p).ToString(); CFNumber value = new CFNumber(sec); return AMDeviceSetValue(device, domain, key, value) == NO_ERR; }
public bool StartService(string svc) { CFString c = new CFString(svc); return MobileDevice.StartService(am_device, c.typeRef, out socket_fd); }