|
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 |
}
|