From 6b2425b375ee2e9ae0cd50d94493efb2256ebd80 Mon Sep 17 00:00:00 2001 From: Sven Weidauer Date: Thu, 1 Jun 2017 20:11:38 +0200 Subject: Revert "remove cocoa frontend" This reverts commit d6c07925417eaea27c85996bc243f93e27b1bcd0. --- frontends/cocoa/fetch.m | 113 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 frontends/cocoa/fetch.m (limited to 'frontends/cocoa/fetch.m') diff --git a/frontends/cocoa/fetch.m b/frontends/cocoa/fetch.m new file mode 100644 index 000000000..0bbce09f6 --- /dev/null +++ b/frontends/cocoa/fetch.m @@ -0,0 +1,113 @@ +/* + * Copyright 2011 Sven Weidauer + * + * This file is part of NetSurf, http://www.netsurf-browser.org/ + * + * NetSurf is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * NetSurf is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#import + +#import "utils/log.h" +#import "utils/nsurl.h" +#import "netsurf/fetch.h" + +#import "cocoa/fetch.h" + +static char cocoafiletype[200]; + +static const struct mimemap_s { + const char const *extension; + const char const *mimetype; +} cocoamimemap[] = { + { "css", "text/css" }, + { "f79", "text/css" }, + { "jpg", "image/jpeg" }, + { "jpeg", "image/jpeg" }, + { "gif", "image/gif" }, + { "png", "image/png" }, + { "b60", "image/png" }, + { "jng", "image/jng" }, + { "svg", "image/svg" }, + { NULL, "text/html" } +}; + + +static const char *fetch_filetype(const char *unix_path) +{ + NSString *uti; + NSString *mimeType = nil; + NSError *utiError = nil; + + uti = [[NSWorkspace sharedWorkspace] typeOfFile: [NSString stringWithUTF8String: unix_path] error:&utiError]; + if (nil != uti) { + LOG("Looking for mimetype from uti \"%s\"", [uti UTF8String] ); + mimeType = (NSString *)UTTypeCopyPreferredTagWithClass( (CFStringRef)uti, kUTTagClassMIMEType ); + } else { + NSAlert *utiAlert = [NSAlert alertWithError:utiError]; + [utiAlert runModal]; // Ignore return value. + + LOG("uti call failed"); + + strncpy(cocoafiletype, "text/html", sizeof(cocoafiletype)); + return cocoafiletype; + } + + if (nil != mimeType) { + strncpy(cocoafiletype, [mimeType UTF8String], sizeof(cocoafiletype)); + [mimeType release]; + } else { + const char *extension; + + LOG("mimetype from uti failed"); + + extension = [(NSString *)UTTypeCopyPreferredTagWithClass( (CFStringRef)uti, kUTTagClassFilenameExtension) UTF8String]; + + if (extension == NULL) { + /* give up and go with default */ + LOG("No extension going with default type"); + strncpy(cocoafiletype, "text/html", sizeof(cocoafiletype)); } else { + int eidx = 0; /* index of extension entry */ + + while ((cocoamimemap[eidx].extension != NULL) && + (strcmp(cocoamimemap[eidx].extension, extension) != 0)) { + eidx++; + } + + strncpy(cocoafiletype, + cocoamimemap[eidx].mimetype, + sizeof(cocoafiletype)); + } + } + + LOG("\tMIME type for '%s' is '%s'", unix_path, cocoafiletype); + + return cocoafiletype; +} + +static nsurl *gui_get_resource_url(const char *path) +{ + nsurl *url = NULL; + NSString *nspath = [[NSBundle mainBundle] pathForResource: [NSString stringWithUTF8String: path] ofType: @""]; + if (nspath == nil) return NULL; + nsurl_create([[[NSURL fileURLWithPath: nspath] absoluteString] UTF8String], &url); + return url; +} + +static struct gui_fetch_table fetch_table = { + .filetype = fetch_filetype, + + .get_resource_url = gui_get_resource_url, +}; + +struct gui_fetch_table *cocoa_fetch_table = &fetch_table; -- cgit v1.2.3