Blame macosx/quicklookdjvu/ddjvuRef.c

Packit df99a1
/*
Packit df99a1
 *  ddjvuRef.c
Packit df99a1
 *  QuickLookDjVu
Packit df99a1
 *
Packit df99a1
 *  Created by Jeff Sickel on 11/27/07.
Packit df99a1
 *  Copyright 2007 Corpus Callosum Corporation. All rights reserved.
Packit df99a1
 *
Packit df99a1
 */
Packit df99a1
Packit df99a1
#include "ddjvuRef.h"
Packit df99a1
Packit df99a1
#include <CoreFoundation/CoreFoundation.h>
Packit df99a1
#include <ApplicationServices/ApplicationServices.h>
Packit df99a1
Packit df99a1
#include <sys/param.h> /* for MAXPATHLEN */
Packit df99a1
#include <sys/types.h>
Packit df99a1
#include <sys/stat.h>
Packit df99a1
Packit df99a1
CFURLRef
Packit df99a1
ddjvuURL(CFBundleRef bundle)
Packit df99a1
{
Packit df99a1
	CFURLRef ddjvuRef = NULL;
Packit df99a1
	
Packit df99a1
	if (bundle) {
Packit df99a1
		ddjvuRef = CFBundleCopyResourceURL(bundle, CFSTR("ddjvu"), NULL, NULL);
Packit df99a1
		if (ddjvuRef == NULL) {
Packit df99a1
			CFURLRef url = CFBundleCopyBundleURL(bundle);
Packit df99a1
			CFMutableStringRef path = NULL;
Packit df99a1
			CFStringRef bpath = CFURLCopyFileSystemPath(url, kCFURLPOSIXPathStyle);
Packit df99a1
			path = CFStringCreateMutableCopy(kCFAllocatorDefault, 1024, bpath);
Packit df99a1
			CFStringTrim(path, CFSTR("Library/QuickLook/djvu.qlgenerator"));
Packit df99a1
			CFStringAppend(path, CFSTR("bin/ddjvu"));
Packit df99a1
			CFShow(path);
Packit df99a1
			CFRelease(bpath);
Packit df99a1
		}
Packit df99a1
	}
Packit df99a1
	if (ddjvuRef == NULL) {
Packit df99a1
		CFBundleRef djviewBundle = NULL;
Packit df99a1
		djviewBundle = CFBundleGetBundleWithIdentifier(CFSTR("org.djvu.DjView"));
Packit df99a1
		if (djviewBundle == NULL) {
Packit df99a1
			OSStatus stat;
Packit df99a1
			FSRef djviewPath;
Packit df99a1
			CFURLRef refURL;
Packit df99a1
			stat = LSFindApplicationForInfo(kLSUnknownCreator, CFSTR("org.djvu.DjView"), NULL, &djviewPath, &refURL);
Packit df99a1
			if (stat == noErr) {
Packit df99a1
				djviewBundle = CFBundleCreate(kCFAllocatorDefault, refURL);
Packit df99a1
			}
Packit df99a1
		}
Packit df99a1
		
Packit df99a1
		if (djviewBundle != NULL) {
Packit df99a1
			CFURLRef url = CFBundleCopyBundleURL(djviewBundle);
Packit df99a1
			ddjvuRef = CFURLCreateCopyAppendingPathComponent(kCFAllocatorDefault,
Packit df99a1
															 url,
Packit df99a1
															 CFSTR("Contents/bin/ddjvu"),
Packit df99a1
															 false);
Packit df99a1
			CFRelease(url);
Packit df99a1
			CFRelease(djviewBundle);
Packit df99a1
		}		
Packit df99a1
	}
Packit df99a1
	return ddjvuRef;
Packit df99a1
}
Packit df99a1
Packit df99a1
char *
Packit df99a1
ddjvuPath(CFBundleRef bundle)
Packit df99a1
{
Packit df99a1
	static char *ddjvuRef = NULL;
Packit df99a1
	if (ddjvuRef == NULL) {
Packit df99a1
		CFURLRef url = ddjvuURL(bundle);
Packit df99a1
		if (url != NULL) {
Packit df99a1
			char buf[MAXPATHLEN];
Packit df99a1
			if (CFURLGetFileSystemRepresentation(url, true, (UInt8 *)buf, MAXPATHLEN))
Packit df99a1
			{
Packit df99a1
				ddjvuRef = (char *)malloc(strlen(buf));
Packit df99a1
				strcpy(ddjvuRef, buf);
Packit df99a1
			}
Packit df99a1
			CFRelease(url);
Packit df99a1
		}
Packit df99a1
	} else {
Packit df99a1
		struct stat fstat;
Packit df99a1
		if (stat(ddjvuRef, &fstat) != 0){
Packit df99a1
			free(ddjvuRef);
Packit df99a1
			ddjvuRef = NULL;
Packit df99a1
			return ddjvuPath(bundle);
Packit df99a1
		}
Packit df99a1
	}
Packit df99a1
	return ddjvuRef;
Packit df99a1
}