From d21447d096a320a08b3efb2b8768fad0dcdcfd64 Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Thu, 5 May 2016 22:28:51 +0100 Subject: move frontends into sub directory --- frontends/beos/filetype.cpp | 138 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 frontends/beos/filetype.cpp (limited to 'frontends/beos/filetype.cpp') diff --git a/frontends/beos/filetype.cpp b/frontends/beos/filetype.cpp new file mode 100644 index 000000000..75a33240a --- /dev/null +++ b/frontends/beos/filetype.cpp @@ -0,0 +1,138 @@ +/* + * Copyright 2008 François Revol + * + * 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 . + */ + +#define __STDBOOL_H__ 1 +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +extern "C" { +#include "content/fetch.h" +#include "utils/log.h" +#include "utils/hashtable.h" +#include "utils/utils.h" +} + +#include "beos/filetype.h" +#include "beos/gui.h" + +static struct { + const char *type; + const char *ext1; + const char *ext2; +} default_types[] = { + { "text/plain", "txt", NULL }, + { "text/html", "htm", "html" }, + { "text/css", "css", NULL }, + { "image/gif", "gif", NULL }, + { "image/jpeg", "jpg", "jpeg" }, + { "image/png", "png", NULL }, + { "image/jng", "jng", NULL }, + { NULL, NULL, NULL } +}; + +void beos_fetch_filetype_init(void) +{ + BMimeType m; + status_t err; + int i; + + // make sure we have basic mime types in the database + for (i = 0; default_types[i].type; i++) { + if (m.SetTo(default_types[i].type) < B_OK) + continue; + if (m.IsInstalled()) + continue; + err = m.Install(); + if (err < B_OK) { + beos_warn_user("Mime", strerror(err)); + continue; + } + // the mime db doesn't know about it yet + BMessage extensions('exts'); + if (default_types[i].ext1) + extensions.AddString("extensions", default_types[i].ext1); + if (default_types[i].ext2) + extensions.AddString("extensions", default_types[i].ext2); + err = m.SetFileExtensions(&extensions); + if (err < B_OK) { + beos_warn_user("Mime", strerror(err)); + } + } +} + +void beos_fetch_filetype_fin(void) +{ +} + +const char *fetch_filetype(const char *unix_path) +{ + struct stat statbuf; + status_t err; + int i; + // NOT THREADSAFE + static char type[B_MIME_TYPE_LENGTH]; + + // override reading the mime type for known types + // avoids getting CSS files as text/x-source-code + // even though it's the mime sniffer rules that should be fixed. + BString ext(unix_path); + ext.Remove(0, ext.FindLast('.') + 1); + for (i = 0; default_types[i].type; i++) { + if (ext == default_types[i].ext1) + return default_types[i].type; + if (ext == default_types[i].ext2) + return default_types[i].type; + } + + BEntry entry(unix_path, true); + BNode node(&entry); + err = node.InitCheck(); + if (err < B_OK) + return "text/plain"; + + if (node.IsDirectory()) + return "application/x-netsurf-directory"; + + BNodeInfo info(&node); + err = info.InitCheck(); + if (err < B_OK) + return "test/plain"; + + err = info.GetType(type); + if (err < B_OK) { + // not there yet, sniff and retry + err = update_mime_info(unix_path, false, true, false); + if (err < B_OK) + return "text/plain"; + err = info.GetType(type); + if (err < B_OK) + return "text/plain"; + } + + return type; +} -- cgit v1.2.3