Chromatic Start
This commit is contained in:
commit
b2a45eef97
9
.gitignore
vendored
Normal file
9
.gitignore
vendored
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
build
|
||||||
|
*.zip
|
||||||
|
*.xcodeproj/*.pbxuser
|
||||||
|
*.xcodeproj/*.mode*
|
||||||
|
*.xcodeproj/*.perspective*
|
||||||
|
*.xcodeproj/xcuserdata
|
||||||
|
*.xcodeproj/project.xcworkspace/xcuserdata
|
||||||
|
*.xcworkspace/xcuserdata
|
||||||
|
Screenshots/*
|
22
About.rtf
Normal file
22
About.rtf
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
|
||||||
|
{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
|
||||||
|
{\colortbl;\red255\green255\blue255;}
|
||||||
|
\margl1440\margr1440\vieww9000\viewh8400\viewkind0
|
||||||
|
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\qc\pardirnatural
|
||||||
|
|
||||||
|
\f0\b\fs36 \cf0 By Mr. Gecko
|
||||||
|
\b0\fs32 \
|
||||||
|
|
||||||
|
\fs34 At {\field{\*\fldinst{HYPERLINK "http://mrgeckosmedia.com/"}}{\fldrslt mrgeckosmedia.com}}
|
||||||
|
\fs32 \
|
||||||
|
Special Thanks To\
|
||||||
|
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\qc\pardirnatural
|
||||||
|
|
||||||
|
\fs24 \cf0 MegaEduX ({\field{\*\fldinst{HYPERLINK "http://megaedux.com"}}{\fldrslt megaedux.com}})\
|
||||||
|
RockStar ({\field{\*\fldinst{HYPERLINK "http://rocknthesweater.com"}}{\fldrslt rocknthesweater.com}})\
|
||||||
|
Steve Bell ({\field{\*\fldinst{HYPERLINK "http://gpgtools.org/"}}{\fldrslt gpgtools.org}})\
|
||||||
|
\
|
||||||
|
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural
|
||||||
|
\cf0 Chromatic uses {\field{\*\fldinst{HYPERLINK "http://sparkle.andymatuschak.org"}}{\fldrslt Sparkle}} for software update, and {\field{\*\fldinst{HYPERLINK "http://opensource.mrgeckosmedia.com/GeckoReporter"}}{\fldrslt GeckoReporter}} for crash and reporting.\
|
||||||
|
\
|
||||||
|
Chromatic is an easy way to install and update Chromium, the open source project behind Google Chrome. Chromatic allows you to select a release channel (Stable, Beta, \'85), use the latest build available, or choose a specific build.}
|
5734
Chromatic.ai
Normal file
5734
Chromatic.ai
Normal file
File diff suppressed because one or more lines are too long
BIN
Chromatic.icns
Normal file
BIN
Chromatic.icns
Normal file
Binary file not shown.
BIN
Chromatic.png
Normal file
BIN
Chromatic.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 47 KiB |
415
Chromatic.xcodeproj/project.pbxproj
Normal file
415
Chromatic.xcodeproj/project.pbxproj
Normal file
@ -0,0 +1,415 @@
|
|||||||
|
// !$*UTF8*$!
|
||||||
|
{
|
||||||
|
archiveVersion = 1;
|
||||||
|
classes = {
|
||||||
|
};
|
||||||
|
objectVersion = 45;
|
||||||
|
objects = {
|
||||||
|
|
||||||
|
/* Begin PBXBuildFile section */
|
||||||
|
1DDD58160DA1D0A300B32029 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1DDD58140DA1D0A300B32029 /* MainMenu.xib */; };
|
||||||
|
256AC3DA0F4B6AC300CF3369 /* MGMController.m in Sources */ = {isa = PBXBuildFile; fileRef = 256AC3D90F4B6AC300CF3369 /* MGMController.m */; };
|
||||||
|
2A2BA1C013AFBA2800146C20 /* ChromaticIcon.png in Resources */ = {isa = PBXBuildFile; fileRef = 2A2BA1BF13AFBA2800146C20 /* ChromaticIcon.png */; };
|
||||||
|
2A2BA1C213AFBA2D00146C20 /* About.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 2A2BA1C113AFBA2D00146C20 /* About.rtf */; };
|
||||||
|
2A53913F13A0FEE100CA59E3 /* GeckoReporter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A53913C13A0FEE100CA59E3 /* GeckoReporter.framework */; };
|
||||||
|
2A53914013A0FEE100CA59E3 /* MGMUsers.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A53913D13A0FEE100CA59E3 /* MGMUsers.framework */; };
|
||||||
|
2A53914113A0FEE100CA59E3 /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A53913E13A0FEE100CA59E3 /* Sparkle.framework */; };
|
||||||
|
2A53916113A0FEF500CA59E3 /* GeckoReporter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A53913C13A0FEE100CA59E3 /* GeckoReporter.framework */; };
|
||||||
|
2A53916213A0FEF500CA59E3 /* MGMUsers.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A53913D13A0FEE100CA59E3 /* MGMUsers.framework */; };
|
||||||
|
2A53916313A0FEF500CA59E3 /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A53913E13A0FEE100CA59E3 /* Sparkle.framework */; };
|
||||||
|
2A5F286E13A2644D000F2348 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A5F286D13A2644D000F2348 /* WebKit.framework */; };
|
||||||
|
2A5F2A4613A2B153000F2348 /* Advanced.png in Resources */ = {isa = PBXBuildFile; fileRef = 2A5F2A4213A2B153000F2348 /* Advanced.png */; };
|
||||||
|
2A5F2A4813A2B153000F2348 /* General.png in Resources */ = {isa = PBXBuildFile; fileRef = 2A5F2A4413A2B153000F2348 /* General.png */; };
|
||||||
|
2A5F2A4A13A2B1A7000F2348 /* GeneralPane.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A5F2A4913A2B1A7000F2348 /* GeneralPane.xib */; };
|
||||||
|
2A5F2A4C13A2B1B3000F2348 /* AdvancedPane.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A5F2A4B13A2B1B3000F2348 /* AdvancedPane.xib */; };
|
||||||
|
2A5F2A5013A2B1E9000F2348 /* MGMGeneralPane.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A5F2A4F13A2B1E9000F2348 /* MGMGeneralPane.m */; };
|
||||||
|
2A5F2A5313A2B20E000F2348 /* MGMAdvancedPane.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A5F2A5213A2B20E000F2348 /* MGMAdvancedPane.m */; };
|
||||||
|
2A6CFA3213A8F6FE0047D11C /* Chromatic.icns in Resources */ = {isa = PBXBuildFile; fileRef = 2A6CFA3113A8F6FE0047D11C /* Chromatic.icns */; };
|
||||||
|
2AA54D6713ABFB2000FC3A54 /* dsa_pub.pem in Resources */ = {isa = PBXBuildFile; fileRef = 2AA54D6613ABFB2000FC3A54 /* dsa_pub.pem */; };
|
||||||
|
2ACA2EEB13A2486D003C69E6 /* MGMAddons.m in Sources */ = {isa = PBXBuildFile; fileRef = 2ACA2EEA13A2486D003C69E6 /* MGMAddons.m */; };
|
||||||
|
8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; };
|
||||||
|
8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; };
|
||||||
|
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
|
||||||
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
|
/* Begin PBXCopyFilesBuildPhase section */
|
||||||
|
2A53916813A0FEFD00CA59E3 /* Frameworks */ = {
|
||||||
|
isa = PBXCopyFilesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
dstPath = "";
|
||||||
|
dstSubfolderSpec = 10;
|
||||||
|
files = (
|
||||||
|
2A53916113A0FEF500CA59E3 /* GeckoReporter.framework in Frameworks */,
|
||||||
|
2A53916213A0FEF500CA59E3 /* MGMUsers.framework in Frameworks */,
|
||||||
|
2A53916313A0FEF500CA59E3 /* Sparkle.framework in Frameworks */,
|
||||||
|
);
|
||||||
|
name = Frameworks;
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXCopyFilesBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXFileReference section */
|
||||||
|
089C165DFE840E0CC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||||
|
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
|
||||||
|
13E42FB307B3F0F600E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = "<absolute>"; };
|
||||||
|
1DDD58150DA1D0A300B32029 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/MainMenu.xib; sourceTree = "<group>"; };
|
||||||
|
256AC3D80F4B6AC300CF3369 /* MGMController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMController.h; sourceTree = "<group>"; };
|
||||||
|
256AC3D90F4B6AC300CF3369 /* MGMController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGMController.m; sourceTree = "<group>"; };
|
||||||
|
256AC3F00F4B6AF500CF3369 /* Chromatic_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Chromatic_Prefix.pch; sourceTree = "<group>"; };
|
||||||
|
29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = Classes/main.m; sourceTree = "<group>"; };
|
||||||
|
29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
|
||||||
|
29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
|
||||||
|
2A2BA1BF13AFBA2800146C20 /* ChromaticIcon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ChromaticIcon.png; sourceTree = "<group>"; };
|
||||||
|
2A2BA1C113AFBA2D00146C20 /* About.rtf */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; path = About.rtf; sourceTree = SOURCE_ROOT; };
|
||||||
|
2A5390FF13A0F95900CA59E3 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||||
|
2A53913C13A0FEE100CA59E3 /* GeckoReporter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GeckoReporter.framework; path = Frameworks/GeckoReporter.framework; sourceTree = "<group>"; };
|
||||||
|
2A53913D13A0FEE100CA59E3 /* MGMUsers.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MGMUsers.framework; path = Frameworks/MGMUsers.framework; sourceTree = "<group>"; };
|
||||||
|
2A53913E13A0FEE100CA59E3 /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Sparkle.framework; path = Frameworks/Sparkle.framework; sourceTree = "<group>"; };
|
||||||
|
2A5F286D13A2644D000F2348 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; };
|
||||||
|
2A5F2A4213A2B153000F2348 /* Advanced.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Advanced.png; sourceTree = "<group>"; };
|
||||||
|
2A5F2A4413A2B153000F2348 /* General.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = General.png; sourceTree = "<group>"; };
|
||||||
|
2A5F2A4913A2B1A7000F2348 /* GeneralPane.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = GeneralPane.xib; sourceTree = "<group>"; };
|
||||||
|
2A5F2A4B13A2B1B3000F2348 /* AdvancedPane.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AdvancedPane.xib; sourceTree = "<group>"; };
|
||||||
|
2A5F2A4E13A2B1E9000F2348 /* MGMGeneralPane.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMGeneralPane.h; sourceTree = "<group>"; };
|
||||||
|
2A5F2A4F13A2B1E9000F2348 /* MGMGeneralPane.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGMGeneralPane.m; sourceTree = "<group>"; };
|
||||||
|
2A5F2A5113A2B20E000F2348 /* MGMAdvancedPane.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMAdvancedPane.h; sourceTree = "<group>"; };
|
||||||
|
2A5F2A5213A2B20E000F2348 /* MGMAdvancedPane.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGMAdvancedPane.m; sourceTree = "<group>"; };
|
||||||
|
2A6CFA3113A8F6FE0047D11C /* Chromatic.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = Chromatic.icns; sourceTree = SOURCE_ROOT; };
|
||||||
|
2AA54D6613ABFB2000FC3A54 /* dsa_pub.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = dsa_pub.pem; sourceTree = "<group>"; };
|
||||||
|
2ACA2EE913A2486D003C69E6 /* MGMAddons.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMAddons.h; sourceTree = "<group>"; };
|
||||||
|
2ACA2EEA13A2486D003C69E6 /* MGMAddons.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGMAddons.m; sourceTree = "<group>"; };
|
||||||
|
8D1107320486CEB800E47090 /* Chromatic.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Chromatic.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
|
8D11072E0486CEB800E47090 /* Frameworks */ = {
|
||||||
|
isa = PBXFrameworksBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */,
|
||||||
|
2A53913F13A0FEE100CA59E3 /* GeckoReporter.framework in Frameworks */,
|
||||||
|
2A53914013A0FEE100CA59E3 /* MGMUsers.framework in Frameworks */,
|
||||||
|
2A53914113A0FEE100CA59E3 /* Sparkle.framework in Frameworks */,
|
||||||
|
2A5F286E13A2644D000F2348 /* WebKit.framework in Frameworks */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXFrameworksBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXGroup section */
|
||||||
|
080E96DDFE201D6D7F000001 /* Classes */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
256AC3D80F4B6AC300CF3369 /* MGMController.h */,
|
||||||
|
256AC3D90F4B6AC300CF3369 /* MGMController.m */,
|
||||||
|
2ACA2EE913A2486D003C69E6 /* MGMAddons.h */,
|
||||||
|
2ACA2EEA13A2486D003C69E6 /* MGMAddons.m */,
|
||||||
|
2A5F2A4D13A2B1D8000F2348 /* Preferences */,
|
||||||
|
);
|
||||||
|
path = Classes;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
2A53913C13A0FEE100CA59E3 /* GeckoReporter.framework */,
|
||||||
|
2A53913D13A0FEE100CA59E3 /* MGMUsers.framework */,
|
||||||
|
2A53913E13A0FEE100CA59E3 /* Sparkle.framework */,
|
||||||
|
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */,
|
||||||
|
2A5F286D13A2644D000F2348 /* WebKit.framework */,
|
||||||
|
);
|
||||||
|
name = "Linked Frameworks";
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
29B97324FDCFA39411CA2CEA /* AppKit.framework */,
|
||||||
|
13E42FB307B3F0F600E4EEF1 /* CoreData.framework */,
|
||||||
|
29B97325FDCFA39411CA2CEA /* Foundation.framework */,
|
||||||
|
);
|
||||||
|
name = "Other Frameworks";
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
19C28FACFE9D520D11CA2CBB /* Products */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
8D1107320486CEB800E47090 /* Chromatic.app */,
|
||||||
|
);
|
||||||
|
name = Products;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
29B97314FDCFA39411CA2CEA /* Chromatic */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
080E96DDFE201D6D7F000001 /* Classes */,
|
||||||
|
29B97315FDCFA39411CA2CEA /* Other Sources */,
|
||||||
|
29B97317FDCFA39411CA2CEA /* Resources */,
|
||||||
|
29B97323FDCFA39411CA2CEA /* Frameworks */,
|
||||||
|
19C28FACFE9D520D11CA2CBB /* Products */,
|
||||||
|
);
|
||||||
|
name = Chromatic;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
29B97315FDCFA39411CA2CEA /* Other Sources */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
256AC3F00F4B6AF500CF3369 /* Chromatic_Prefix.pch */,
|
||||||
|
29B97316FDCFA39411CA2CEA /* main.m */,
|
||||||
|
);
|
||||||
|
name = "Other Sources";
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
29B97317FDCFA39411CA2CEA /* Resources */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
2A5390FF13A0F95900CA59E3 /* Info.plist */,
|
||||||
|
2A6CFA3113A8F6FE0047D11C /* Chromatic.icns */,
|
||||||
|
2A2BA1C113AFBA2D00146C20 /* About.rtf */,
|
||||||
|
2A2BA1BF13AFBA2800146C20 /* ChromaticIcon.png */,
|
||||||
|
2AA54D6613ABFB2000FC3A54 /* dsa_pub.pem */,
|
||||||
|
089C165CFE840E0CC02AAC07 /* InfoPlist.strings */,
|
||||||
|
1DDD58140DA1D0A300B32029 /* MainMenu.xib */,
|
||||||
|
2A5F2A4013A2B153000F2348 /* Preferences */,
|
||||||
|
);
|
||||||
|
path = Resources;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
29B97323FDCFA39411CA2CEA /* Frameworks */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */,
|
||||||
|
1058C7A2FEA54F0111CA2CBB /* Other Frameworks */,
|
||||||
|
);
|
||||||
|
name = Frameworks;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
2A5F2A4013A2B153000F2348 /* Preferences */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
2A5F2A4413A2B153000F2348 /* General.png */,
|
||||||
|
2A5F2A4913A2B1A7000F2348 /* GeneralPane.xib */,
|
||||||
|
2A5F2A4213A2B153000F2348 /* Advanced.png */,
|
||||||
|
2A5F2A4B13A2B1B3000F2348 /* AdvancedPane.xib */,
|
||||||
|
);
|
||||||
|
path = Preferences;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
2A5F2A4D13A2B1D8000F2348 /* Preferences */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
2A5F2A4E13A2B1E9000F2348 /* MGMGeneralPane.h */,
|
||||||
|
2A5F2A4F13A2B1E9000F2348 /* MGMGeneralPane.m */,
|
||||||
|
2A5F2A5113A2B20E000F2348 /* MGMAdvancedPane.h */,
|
||||||
|
2A5F2A5213A2B20E000F2348 /* MGMAdvancedPane.m */,
|
||||||
|
);
|
||||||
|
path = Preferences;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
/* End PBXGroup section */
|
||||||
|
|
||||||
|
/* Begin PBXNativeTarget section */
|
||||||
|
8D1107260486CEB800E47090 /* Chromatic */ = {
|
||||||
|
isa = PBXNativeTarget;
|
||||||
|
buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "Chromatic" */;
|
||||||
|
buildPhases = (
|
||||||
|
8D1107290486CEB800E47090 /* Resources */,
|
||||||
|
8D11072C0486CEB800E47090 /* Sources */,
|
||||||
|
8D11072E0486CEB800E47090 /* Frameworks */,
|
||||||
|
2A53916813A0FEFD00CA59E3 /* Frameworks */,
|
||||||
|
);
|
||||||
|
buildRules = (
|
||||||
|
);
|
||||||
|
dependencies = (
|
||||||
|
);
|
||||||
|
name = Chromatic;
|
||||||
|
productInstallPath = "$(HOME)/Applications";
|
||||||
|
productName = Chromatic;
|
||||||
|
productReference = 8D1107320486CEB800E47090 /* Chromatic.app */;
|
||||||
|
productType = "com.apple.product-type.application";
|
||||||
|
};
|
||||||
|
/* End PBXNativeTarget section */
|
||||||
|
|
||||||
|
/* Begin PBXProject section */
|
||||||
|
29B97313FDCFA39411CA2CEA /* Project object */ = {
|
||||||
|
isa = PBXProject;
|
||||||
|
buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "Chromatic" */;
|
||||||
|
compatibilityVersion = "Xcode 3.1";
|
||||||
|
developmentRegion = English;
|
||||||
|
hasScannedForEncodings = 1;
|
||||||
|
knownRegions = (
|
||||||
|
English,
|
||||||
|
Japanese,
|
||||||
|
French,
|
||||||
|
German,
|
||||||
|
);
|
||||||
|
mainGroup = 29B97314FDCFA39411CA2CEA /* Chromatic */;
|
||||||
|
projectDirPath = "";
|
||||||
|
projectRoot = "";
|
||||||
|
targets = (
|
||||||
|
8D1107260486CEB800E47090 /* Chromatic */,
|
||||||
|
);
|
||||||
|
};
|
||||||
|
/* End PBXProject section */
|
||||||
|
|
||||||
|
/* Begin PBXResourcesBuildPhase section */
|
||||||
|
8D1107290486CEB800E47090 /* Resources */ = {
|
||||||
|
isa = PBXResourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */,
|
||||||
|
1DDD58160DA1D0A300B32029 /* MainMenu.xib in Resources */,
|
||||||
|
2A5F2A4613A2B153000F2348 /* Advanced.png in Resources */,
|
||||||
|
2A5F2A4813A2B153000F2348 /* General.png in Resources */,
|
||||||
|
2A5F2A4A13A2B1A7000F2348 /* GeneralPane.xib in Resources */,
|
||||||
|
2A5F2A4C13A2B1B3000F2348 /* AdvancedPane.xib in Resources */,
|
||||||
|
2A6CFA3213A8F6FE0047D11C /* Chromatic.icns in Resources */,
|
||||||
|
2AA54D6713ABFB2000FC3A54 /* dsa_pub.pem in Resources */,
|
||||||
|
2A2BA1C013AFBA2800146C20 /* ChromaticIcon.png in Resources */,
|
||||||
|
2A2BA1C213AFBA2D00146C20 /* About.rtf in Resources */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXResourcesBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXSourcesBuildPhase section */
|
||||||
|
8D11072C0486CEB800E47090 /* Sources */ = {
|
||||||
|
isa = PBXSourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
8D11072D0486CEB800E47090 /* main.m in Sources */,
|
||||||
|
256AC3DA0F4B6AC300CF3369 /* MGMController.m in Sources */,
|
||||||
|
2ACA2EEB13A2486D003C69E6 /* MGMAddons.m in Sources */,
|
||||||
|
2A5F2A5013A2B1E9000F2348 /* MGMGeneralPane.m in Sources */,
|
||||||
|
2A5F2A5313A2B20E000F2348 /* MGMAdvancedPane.m in Sources */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXSourcesBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXVariantGroup section */
|
||||||
|
089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = {
|
||||||
|
isa = PBXVariantGroup;
|
||||||
|
children = (
|
||||||
|
089C165DFE840E0CC02AAC07 /* English */,
|
||||||
|
);
|
||||||
|
name = InfoPlist.strings;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
1DDD58140DA1D0A300B32029 /* MainMenu.xib */ = {
|
||||||
|
isa = PBXVariantGroup;
|
||||||
|
children = (
|
||||||
|
1DDD58150DA1D0A300B32029 /* English */,
|
||||||
|
);
|
||||||
|
name = MainMenu.xib;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
/* End PBXVariantGroup section */
|
||||||
|
|
||||||
|
/* Begin XCBuildConfiguration section */
|
||||||
|
C01FCF4B08A954540054247B /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
ARCHS = (
|
||||||
|
ppc,
|
||||||
|
i386,
|
||||||
|
x86_64,
|
||||||
|
);
|
||||||
|
COPY_PHASE_STRIP = NO;
|
||||||
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"\"$(SRCROOT)/Frameworks\"",
|
||||||
|
);
|
||||||
|
GCC_DYNAMIC_NO_PIC = NO;
|
||||||
|
GCC_ENABLE_FIX_AND_CONTINUE = YES;
|
||||||
|
GCC_MODEL_TUNING = G5;
|
||||||
|
GCC_OPTIMIZATION_LEVEL = 0;
|
||||||
|
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||||
|
GCC_PREFIX_HEADER = Classes/Prefix.pch;
|
||||||
|
INFOPLIST_FILE = Resources/Info.plist;
|
||||||
|
INSTALL_PATH = "$(HOME)/Applications";
|
||||||
|
MACOSX_DEPLOYMENT_TARGET = 10.4;
|
||||||
|
"MACOSX_DEPLOYMENT_TARGET[arch=x86_64]" = 10.5;
|
||||||
|
PRODUCT_NAME = Chromatic;
|
||||||
|
SDKROOT = macosx10.5;
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
C01FCF4C08A954540054247B /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
ARCHS = (
|
||||||
|
ppc,
|
||||||
|
i386,
|
||||||
|
x86_64,
|
||||||
|
);
|
||||||
|
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||||
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"\"$(SRCROOT)/Frameworks\"",
|
||||||
|
);
|
||||||
|
GCC_MODEL_TUNING = G5;
|
||||||
|
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||||
|
GCC_PREFIX_HEADER = Classes/Prefix.pch;
|
||||||
|
INFOPLIST_FILE = Resources/Info.plist;
|
||||||
|
INSTALL_PATH = "$(HOME)/Applications";
|
||||||
|
MACOSX_DEPLOYMENT_TARGET = 10.4;
|
||||||
|
"MACOSX_DEPLOYMENT_TARGET[arch=x86_64]" = 10.5;
|
||||||
|
PRODUCT_NAME = Chromatic;
|
||||||
|
SDKROOT = macosx10.5;
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
|
C01FCF4F08A954540054247B /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
|
||||||
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
|
GCC_OPTIMIZATION_LEVEL = 0;
|
||||||
|
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||||
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
|
PREBINDING = NO;
|
||||||
|
SDKROOT = macosx10.6;
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
C01FCF5008A954540054247B /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
|
||||||
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
|
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||||
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
|
PREBINDING = NO;
|
||||||
|
SDKROOT = macosx10.6;
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
|
/* End XCBuildConfiguration section */
|
||||||
|
|
||||||
|
/* Begin XCConfigurationList section */
|
||||||
|
C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "Chromatic" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
C01FCF4B08A954540054247B /* Debug */,
|
||||||
|
C01FCF4C08A954540054247B /* Release */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Release;
|
||||||
|
};
|
||||||
|
C01FCF4E08A954540054247B /* Build configuration list for PBXProject "Chromatic" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
C01FCF4F08A954540054247B /* Debug */,
|
||||||
|
C01FCF5008A954540054247B /* Release */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Release;
|
||||||
|
};
|
||||||
|
/* End XCConfigurationList section */
|
||||||
|
};
|
||||||
|
rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
|
||||||
|
}
|
30
Classes/MGMAddons.h
Normal file
30
Classes/MGMAddons.h
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
//
|
||||||
|
// MGMAddons.h
|
||||||
|
// Chromatic
|
||||||
|
//
|
||||||
|
// Created by Mr. Gecko on 6/10/11.
|
||||||
|
// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/
|
||||||
|
//
|
||||||
|
// Permission to use, copy, modify, and/or distribute this software for any purpose
|
||||||
|
// with or without fee is hereby granted, provided that the above copyright notice
|
||||||
|
// and this permission notice appear in all copies.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||||
|
// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT,
|
||||||
|
// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||||
|
// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
|
||||||
|
// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Cocoa/Cocoa.h>
|
||||||
|
|
||||||
|
@interface NSString (MGMAddons)
|
||||||
|
+ (NSString *)readableMemory:(unsigned long)theBytes;
|
||||||
|
+ (NSString *)readableTime:(unsigned long)theSeconds;
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
@interface NSURL (MGMAddons)
|
||||||
|
- (NSURL *)appendPathComponent:(NSString *)theComponent;
|
||||||
|
@end
|
80
Classes/MGMAddons.m
Normal file
80
Classes/MGMAddons.m
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
//
|
||||||
|
// MGMAddons.m
|
||||||
|
// Chromatic
|
||||||
|
//
|
||||||
|
// Created by Mr. Gecko on 6/10/11.
|
||||||
|
// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/
|
||||||
|
//
|
||||||
|
// Permission to use, copy, modify, and/or distribute this software for any purpose
|
||||||
|
// with or without fee is hereby granted, provided that the above copyright notice
|
||||||
|
// and this permission notice appear in all copies.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||||
|
// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT,
|
||||||
|
// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||||
|
// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
|
||||||
|
// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "MGMAddons.h"
|
||||||
|
|
||||||
|
@implementation NSString (MGMAddons)
|
||||||
|
+ (NSString *)readableMemory:(unsigned long)theBytes {
|
||||||
|
double bytes = theBytes;
|
||||||
|
NSString *types[] = {@"Bytes", @"KB", @"MB", @"GB", @"TB", @"PB", @"EB", @"ZB", @"YB", @"BB"};
|
||||||
|
int type = 0;
|
||||||
|
while (bytes>1024 && type<=9) {
|
||||||
|
bytes /= 1024;
|
||||||
|
type++;
|
||||||
|
}
|
||||||
|
return [NSString stringWithFormat:@"%.02f %@", bytes, types[type]];
|
||||||
|
}
|
||||||
|
+ (NSString *)readableTime:(unsigned long)theSeconds {
|
||||||
|
unsigned long time = theSeconds;
|
||||||
|
int seconds = time%60;
|
||||||
|
time = time/60;
|
||||||
|
int minutes = time%60;
|
||||||
|
time = time/60;
|
||||||
|
int hours = time%24;
|
||||||
|
unsigned long days = time/24;
|
||||||
|
NSString *string;
|
||||||
|
if (days!=0) {
|
||||||
|
string = [NSString stringWithFormat:@"%lu day%@ %02d:%02d:%02d", days, (days==1 ? @"" : @"s"), hours, minutes, seconds];
|
||||||
|
} else if (hours!=0) {
|
||||||
|
string = [NSString stringWithFormat:@"%d:%02d:%02d", hours, minutes, seconds];
|
||||||
|
} else {
|
||||||
|
string = [NSString stringWithFormat:@"%02d:%02d", minutes, seconds];
|
||||||
|
}
|
||||||
|
return string;
|
||||||
|
}
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
@implementation NSURL (MGMAddons)
|
||||||
|
- (NSURL *)appendPathComponent:(NSString *)theComponent {
|
||||||
|
NSMutableString *string = [NSMutableString string];
|
||||||
|
if ([self scheme]!=nil)
|
||||||
|
[string appendFormat:@"%@://", [self scheme]];
|
||||||
|
if ([self host]!=nil)
|
||||||
|
[string appendString:[self host]];
|
||||||
|
if ([self port]!=0)
|
||||||
|
[string appendFormat:@":%d", [self port]];
|
||||||
|
if ([self path]!=nil) {
|
||||||
|
if (theComponent!=nil) {
|
||||||
|
[string appendString:[[self path] stringByAppendingPathComponent:theComponent]];
|
||||||
|
if ([theComponent isEqual:@""] || [theComponent hasSuffix:@"/"])
|
||||||
|
[string appendString:@"/"];
|
||||||
|
} else {
|
||||||
|
[string appendString:[self path]];
|
||||||
|
if ([[self absoluteString] hasSuffix:@"/"])
|
||||||
|
[string appendString:@"/"];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
[string appendString:[@"/" stringByAppendingPathComponent:theComponent]];
|
||||||
|
}
|
||||||
|
if ([self query]!=nil)
|
||||||
|
[string appendFormat:@"?%@", [self query]];
|
||||||
|
return [NSURL URLWithString:string];
|
||||||
|
}
|
||||||
|
@end
|
93
Classes/MGMController.h
Normal file
93
Classes/MGMController.h
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
//
|
||||||
|
// MGMController.h
|
||||||
|
// Chromatic
|
||||||
|
//
|
||||||
|
// Created by Mr. Gecko on 6/9/11.
|
||||||
|
// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/
|
||||||
|
//
|
||||||
|
// Permission to use, copy, modify, and/or distribute this software for any purpose
|
||||||
|
// with or without fee is hereby granted, provided that the above copyright notice
|
||||||
|
// and this permission notice appear in all copies.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||||
|
// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT,
|
||||||
|
// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||||
|
// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
|
||||||
|
// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Cocoa/Cocoa.h>
|
||||||
|
|
||||||
|
@class MGMAbout, MGMPreferences, MGMURLConnectionManager, MGMURLBasicHandler, WebView;
|
||||||
|
|
||||||
|
extern NSString * const MGMCustomSnapshotURL;
|
||||||
|
extern NSString * const MGMMoveToTrash;
|
||||||
|
extern NSString * const MGMDoneSound;
|
||||||
|
extern NSString * const MGMLaunchWhenDone;
|
||||||
|
extern NSString * const MGMQuitAfterLaunch;
|
||||||
|
|
||||||
|
@interface MGMController : NSObject
|
||||||
|
#if (MAC_OS_X_VERSION_MAX_ALLOWED >= 1060)
|
||||||
|
<NSApplicationDelegate>
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
IBOutlet NSWindow *mainWindow;
|
||||||
|
|
||||||
|
MGMAbout *about;
|
||||||
|
MGMPreferences *preferences;
|
||||||
|
|
||||||
|
MGMURLConnectionManager *connectionManager;
|
||||||
|
BOOL startingUp;
|
||||||
|
|
||||||
|
NSMutableDictionary *channelRevisions;
|
||||||
|
NSString *chromiumPath;
|
||||||
|
|
||||||
|
IBOutlet NSPopUpButton *channelPopUp;
|
||||||
|
IBOutlet NSTextField *buildWarningField;
|
||||||
|
IBOutlet NSPopUpButton *buildPopUp;
|
||||||
|
IBOutlet NSTextField *webKitBuildField;
|
||||||
|
IBOutlet NSTextField *v8BuildField;
|
||||||
|
IBOutlet NSTextField *buildDateField;
|
||||||
|
IBOutlet NSTextField *yourBuildField;
|
||||||
|
IBOutlet NSTextField *installDateField;
|
||||||
|
IBOutlet NSTextField *pathField;
|
||||||
|
|
||||||
|
IBOutlet NSProgressIndicator *progress;
|
||||||
|
IBOutlet NSTextField *statusField;
|
||||||
|
|
||||||
|
IBOutlet NSButton *launchButton;
|
||||||
|
IBOutlet NSButton *svnLogsButton;
|
||||||
|
IBOutlet NSButton *updateButton;
|
||||||
|
|
||||||
|
IBOutlet NSWindow *svnLogsWindow;
|
||||||
|
IBOutlet WebView *svnLogsBrowser;
|
||||||
|
|
||||||
|
int startTime;
|
||||||
|
MGMURLBasicHandler *updateHandler;
|
||||||
|
NSDate *lastCheck;
|
||||||
|
unsigned long bytesReceived;
|
||||||
|
unsigned long averageBytesReceived;
|
||||||
|
unsigned long totalBytes;
|
||||||
|
NSMutableArray *bytesReceivedArray;
|
||||||
|
|
||||||
|
NSTask *unzipTask;
|
||||||
|
}
|
||||||
|
- (void)registerDefaults;
|
||||||
|
|
||||||
|
- (IBAction)about:(id)sender;
|
||||||
|
- (IBAction)preferences:(id)sender;
|
||||||
|
- (IBAction)donate:(id)sender;
|
||||||
|
- (IBAction)openSource:(id)sender;
|
||||||
|
|
||||||
|
- (IBAction)channelSelect:(id)sender;
|
||||||
|
- (IBAction)buildSelect:(id)sender;
|
||||||
|
- (IBAction)choosePath:(id)sender;
|
||||||
|
- (void)updateChromiumPath;
|
||||||
|
|
||||||
|
- (IBAction)launchChromium:(id)sender;
|
||||||
|
- (IBAction)viewSVNLogs:(id)sender;
|
||||||
|
- (IBAction)update:(id)sender;
|
||||||
|
|
||||||
|
- (void)updateDone;
|
||||||
|
@end
|
565
Classes/MGMController.m
Normal file
565
Classes/MGMController.m
Normal file
@ -0,0 +1,565 @@
|
|||||||
|
//
|
||||||
|
// MGMController.m
|
||||||
|
// Chromatic
|
||||||
|
//
|
||||||
|
// Created by Mr. Gecko on 6/9/11.
|
||||||
|
// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/
|
||||||
|
//
|
||||||
|
// Permission to use, copy, modify, and/or distribute this software for any purpose
|
||||||
|
// with or without fee is hereby granted, provided that the above copyright notice
|
||||||
|
// and this permission notice appear in all copies.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||||
|
// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT,
|
||||||
|
// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||||
|
// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
|
||||||
|
// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "MGMController.h"
|
||||||
|
#import "MGMAddons.h"
|
||||||
|
#import <MGMUsers/MGMUsers.h>
|
||||||
|
#import <GeckoReporter/GeckoReporter.h>
|
||||||
|
#import <WebKit/WebKit.h>
|
||||||
|
|
||||||
|
NSString * const MGMCopyright = @"Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/";
|
||||||
|
NSString * const MGMVersion = @"MGMVersion";
|
||||||
|
NSString * const MGMLaunchCount = @"MGMLaunchCount";
|
||||||
|
|
||||||
|
NSString * const MGMChannel = @"MGMChannel";
|
||||||
|
NSString * const MGMChromiumPath = @"MGMChromiumPath";
|
||||||
|
NSString * const MGMCustomSnapshotURL = @"MGMCustomSnapshotURL";
|
||||||
|
NSString * const MGMMoveToTrash = @"MGMMoveToTrash";
|
||||||
|
NSString * const MGMDoneSound = @"MGMDoneSound";
|
||||||
|
NSString * const MGMLaunchWhenDone = @"MGMLaunchWhenDone";
|
||||||
|
NSString * const MGMQuitAfterLaunch = @"MGMQuitAfterLaunch";
|
||||||
|
|
||||||
|
NSString * const MGMCPApplications = @"/Applications";
|
||||||
|
NSString * const MGMCPUserApplications = @"~/Applications";
|
||||||
|
NSString * const MGMCPChromium = @"Chromium.app";
|
||||||
|
NSString * const MGMCPRevision = @"SVNRevision";
|
||||||
|
NSString * const MGMChromiumZip = @"chrome-mac.zip";
|
||||||
|
NSString * const MGMTMPPath = @"/tmp";
|
||||||
|
|
||||||
|
NSString * const MGMChannelsURL = @"http://omahaproxy.appspot.com/all.json?os=mac";
|
||||||
|
static NSString *MGMSnapshotURL = @"http://build.chromium.org/f/chromium/snapshots/Mac/";
|
||||||
|
NSString * const MGMSVNLogsURL = @"http://build.chromium.org/f/chromium/perf/dashboard/ui/changelog.html?url=/trunk/src&range=%@:%@&mode=html&os=mac";
|
||||||
|
|
||||||
|
NSString * const MGMCChannel = @"channel";
|
||||||
|
NSString * const MGMCRevision = @"base_trunk_revision";
|
||||||
|
NSString * const MGMCStable = @"stable";
|
||||||
|
NSString * const MGMCBeta = @"beta";
|
||||||
|
NSString * const MGMCDev = @"dev";
|
||||||
|
NSString * const MGMCCanary = @"canary";
|
||||||
|
|
||||||
|
NSString * const MGMUBUpdate = @"Update";
|
||||||
|
NSString * const MGMUBInstall = @"Install";
|
||||||
|
NSString * const MGMUBCancel = @"Cancel";
|
||||||
|
|
||||||
|
@interface NSOpenPanel (MGMIgnore)
|
||||||
|
- (void)setDirectoryURL:(NSURL *)url;
|
||||||
|
- (void)setDirectory:(NSString *)path;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation MGMController
|
||||||
|
- (void)awakeFromNib {
|
||||||
|
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(setup) name:MGMGRDoneNotification object:nil];
|
||||||
|
[MGMReporter sharedReporter];
|
||||||
|
}
|
||||||
|
- (void)setup {
|
||||||
|
connectionManager = [[MGMURLConnectionManager manager] retain];
|
||||||
|
|
||||||
|
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||||
|
if ([defaults objectForKey:MGMVersion]==nil) {
|
||||||
|
NSString *oldPathKey = @"cPathKey";
|
||||||
|
[defaults setObject:[defaults stringForKey:oldPathKey] forKey:MGMChromiumPath];
|
||||||
|
[defaults removeObjectForKey:oldPathKey];
|
||||||
|
|
||||||
|
[defaults setObject:[[MGMSystemInfo info] applicationVersion] forKey:MGMVersion];
|
||||||
|
}
|
||||||
|
[self registerDefaults];
|
||||||
|
if ([defaults integerForKey:MGMLaunchCount]!=5) {
|
||||||
|
[defaults setInteger:[defaults integerForKey:MGMLaunchCount]+1 forKey:MGMLaunchCount];
|
||||||
|
if ([defaults integerForKey:MGMLaunchCount]==5) {
|
||||||
|
NSAlert *alert = [[NSAlert new] autorelease];
|
||||||
|
[alert setMessageText:@"Donations"];
|
||||||
|
[alert setInformativeText:@"Thank you for using Chromatic. Chromatic is donation supported software. If you like using it, please consider giving a donation to help with development."];
|
||||||
|
[alert addButtonWithTitle:@"Yes"];
|
||||||
|
[alert addButtonWithTitle:@"No"];
|
||||||
|
int result = [alert runModal];
|
||||||
|
if (result==1000)
|
||||||
|
[self donate:self];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ([defaults objectForKey:MGMCustomSnapshotURL]!=nil && ![[defaults objectForKey:MGMCustomSnapshotURL] isEqual:@""])
|
||||||
|
MGMSnapshotURL = [defaults objectForKey:MGMCustomSnapshotURL];
|
||||||
|
|
||||||
|
about = [MGMAbout new];
|
||||||
|
preferences = [MGMPreferences new];
|
||||||
|
[preferences addPreferencesPaneClassName:@"MGMGeneralPane"];
|
||||||
|
[preferences addPreferencesPaneClassName:@"MGMAdvancedPane"];
|
||||||
|
|
||||||
|
startingUp = YES;
|
||||||
|
[mainWindow makeKeyAndOrderFront:self];
|
||||||
|
[progress startAnimation:self];
|
||||||
|
[updateButton setEnabled:NO];
|
||||||
|
|
||||||
|
[channelPopUp selectItemAtIndex:[defaults integerForKey:MGMChannel]];
|
||||||
|
|
||||||
|
channelRevisions = [NSMutableDictionary new];
|
||||||
|
|
||||||
|
NSString *path = [defaults objectForKey:MGMChromiumPath];
|
||||||
|
if (path==nil)
|
||||||
|
path = [[NSWorkspace sharedWorkspace] fullPathForApplication:@"Chromium"];
|
||||||
|
if (path==nil) {
|
||||||
|
NSFileManager *manager = [NSFileManager defaultManager];
|
||||||
|
if ([manager isWritableFileAtPath:MGMCPApplications]) {
|
||||||
|
path = [MGMCPApplications stringByAppendingPathComponent:MGMCPChromium];
|
||||||
|
} else {
|
||||||
|
if ([manager fileExistsAtPath:[MGMCPUserApplications stringByExpandingTildeInPath]])
|
||||||
|
[manager createDirectoryAtPath:[MGMCPUserApplications stringByExpandingTildeInPath] withAttributes:nil];
|
||||||
|
path = [[MGMCPUserApplications stringByExpandingTildeInPath] stringByAppendingPathComponent:MGMCPChromium];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
chromiumPath = [path copy];
|
||||||
|
|
||||||
|
[self updateChromiumPath];
|
||||||
|
|
||||||
|
MGMURLBasicHandler *handler = [MGMURLBasicHandler handlerWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:MGMChannelsURL]] delegate:self];
|
||||||
|
[handler setFailWithError:@selector(channels:didFailWithError:)];
|
||||||
|
[handler setFinish:@selector(channelsFinished:)];
|
||||||
|
[connectionManager addHandler:handler];
|
||||||
|
handler = [MGMURLBasicHandler handlerWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:MGMSnapshotURL]] delegate:self];
|
||||||
|
[handler setFailWithError:@selector(revisions:didFailWithError:)];
|
||||||
|
[handler setFinish:@selector(revisionsFinished:)];
|
||||||
|
[connectionManager addHandler:handler];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)registerDefaults {
|
||||||
|
NSMutableDictionary *defaults = [NSMutableDictionary dictionary];
|
||||||
|
[defaults setObject:[NSNumber numberWithInt:1] forKey:MGMLaunchCount];
|
||||||
|
[defaults setObject:[NSNumber numberWithInt:4] forKey:MGMChannel];
|
||||||
|
[defaults setObject:[NSNumber numberWithBool:YES] forKey:MGMMoveToTrash];
|
||||||
|
[defaults setObject:[NSNumber numberWithBool:YES] forKey:MGMDoneSound];
|
||||||
|
[defaults setObject:[NSNumber numberWithBool:NO] forKey:MGMLaunchWhenDone];
|
||||||
|
[defaults setObject:[NSNumber numberWithBool:NO] forKey:MGMQuitAfterLaunch];
|
||||||
|
|
||||||
|
[[NSUserDefaults standardUserDefaults] registerDefaults:defaults];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (IBAction)about:(id)sender {
|
||||||
|
[about show];
|
||||||
|
}
|
||||||
|
- (IBAction)preferences:(id)sender {
|
||||||
|
[preferences showPreferences];
|
||||||
|
}
|
||||||
|
- (IBAction)donate:(id)sender {
|
||||||
|
[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=9184741"]];
|
||||||
|
}
|
||||||
|
- (IBAction)openSource:(id)sender {
|
||||||
|
[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"http://opensource.mrgeckosmedia.com/Chromatic?application"]];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)channels:(MGMURLBasicHandler *)theHandler didFailWithError:(NSError *)theError {
|
||||||
|
NSLog(@"%@", theError);
|
||||||
|
NSAlert *alert = [[NSAlert new] autorelease];
|
||||||
|
[alert setMessageText:@"Error loading channel info"];
|
||||||
|
[alert setInformativeText:[theError localizedDescription]];
|
||||||
|
[alert runModal];
|
||||||
|
}
|
||||||
|
- (void)channelsFinished:(MGMURLBasicHandler *)theHandler {
|
||||||
|
NSArray *versions = [[[[theHandler data] parseJSON] objectAtIndex:0] objectForKey:@"versions"];
|
||||||
|
if (versions==nil) {
|
||||||
|
NSAlert *alert = [[NSAlert new] autorelease];
|
||||||
|
[alert setMessageText:@"Error loading channel info"];
|
||||||
|
[alert setInformativeText:@"The JSON was unable to be parsed."];
|
||||||
|
[alert runModal];
|
||||||
|
}
|
||||||
|
for (int i=0; i<[versions count]; i++) {
|
||||||
|
NSDictionary *versionInfo = [versions objectAtIndex:i];
|
||||||
|
[channelRevisions setObject:[[versionInfo objectForKey:MGMCRevision] stringValue] forKey:[versionInfo objectForKey:MGMCChannel]];
|
||||||
|
}
|
||||||
|
|
||||||
|
[progress setIndeterminate:NO];
|
||||||
|
[progress startAnimation:self];
|
||||||
|
[progress setDoubleValue:0.25];
|
||||||
|
}
|
||||||
|
- (void)revisions:(MGMURLBasicHandler *)theHandler didFailWithError:(NSError *)theError {
|
||||||
|
NSLog(@"%@", theError);
|
||||||
|
NSAlert *alert = [[NSAlert new] autorelease];
|
||||||
|
[alert setMessageText:@"Error loading revisions"];
|
||||||
|
[alert setInformativeText:[theError localizedDescription]];
|
||||||
|
[alert runModal];
|
||||||
|
}
|
||||||
|
- (void)revisionsFinished:(MGMURLBasicHandler *)theHandler {
|
||||||
|
NSString *returnedString = [theHandler string];
|
||||||
|
[buildPopUp removeAllItems];
|
||||||
|
[progress setDoubleValue:0.50];
|
||||||
|
|
||||||
|
NSMenu *items = [NSMenu new];
|
||||||
|
unsigned long length = [returnedString length];
|
||||||
|
NSRange range = NSMakeRange(0, length);
|
||||||
|
while (range.location!=length) {
|
||||||
|
NSRange urlRange = [returnedString rangeOfString:@"/\">" options:0 range:range];
|
||||||
|
if (urlRange.location==NSNotFound)
|
||||||
|
break;
|
||||||
|
range.location = urlRange.location+urlRange.length;
|
||||||
|
range.length = length-range.location;
|
||||||
|
|
||||||
|
urlRange = [returnedString rangeOfString:@"</a>" options:0 range:range];
|
||||||
|
if (urlRange.location==NSNotFound)
|
||||||
|
continue;
|
||||||
|
NSRange revisionRange = NSMakeRange(range.location, urlRange.location-range.location);
|
||||||
|
range.location = urlRange.location+urlRange.length;
|
||||||
|
range.length = length-range.location;
|
||||||
|
urlRange = [returnedString rangeOfString:@"/" options:0 range:revisionRange];
|
||||||
|
if (urlRange.location==NSNotFound)
|
||||||
|
continue;
|
||||||
|
revisionRange.length -= 1;
|
||||||
|
|
||||||
|
NSMenuItem *item = [NSMenuItem new];
|
||||||
|
[item setTitle:[returnedString substringWithRange:revisionRange]];
|
||||||
|
[items addItem:item];
|
||||||
|
[item release];
|
||||||
|
}
|
||||||
|
[buildPopUp setMenu:items];
|
||||||
|
[items release];
|
||||||
|
[self channelSelect:self];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (IBAction)channelSelect:(id)sender {
|
||||||
|
[[NSUserDefaults standardUserDefaults] setInteger:[channelPopUp indexOfSelectedItem] forKey:MGMChannel];
|
||||||
|
NSArray *revisions = [buildPopUp itemTitles];
|
||||||
|
NSString *revision = nil;
|
||||||
|
if ([channelPopUp indexOfSelectedItem]==0)
|
||||||
|
revision = [channelRevisions objectForKey:MGMCStable];
|
||||||
|
else if ([channelPopUp indexOfSelectedItem]==1)
|
||||||
|
revision = [channelRevisions objectForKey:MGMCBeta];
|
||||||
|
else if ([channelPopUp indexOfSelectedItem]==2)
|
||||||
|
revision = [channelRevisions objectForKey:MGMCDev];
|
||||||
|
else if ([channelPopUp indexOfSelectedItem]==3)
|
||||||
|
revision = [channelRevisions objectForKey:MGMCCanary];
|
||||||
|
if (revision==nil)
|
||||||
|
revision = [revisions lastObject];
|
||||||
|
long itemIndex = [revisions indexOfObject:revision];
|
||||||
|
if (itemIndex==NSNotFound) {
|
||||||
|
[buildWarningField setHidden:NO];
|
||||||
|
for (unsigned int i=0; i<[revisions count]; i++) {
|
||||||
|
if ([(NSString *)[revisions objectAtIndex:i] compare:revision]==NSOrderedDescending) {
|
||||||
|
itemIndex = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (itemIndex==NSNotFound)
|
||||||
|
itemIndex = [revisions count]-1;
|
||||||
|
} else {
|
||||||
|
[buildWarningField setHidden:YES];
|
||||||
|
}
|
||||||
|
[buildPopUp selectItemAtIndex:itemIndex];
|
||||||
|
if (startingUp)
|
||||||
|
[progress setDoubleValue:0.75];
|
||||||
|
[self buildSelect:self];
|
||||||
|
}
|
||||||
|
- (IBAction)buildSelect:(id)sender {
|
||||||
|
NSURL *buildURL = [[[NSURL URLWithString:MGMSnapshotURL] appendPathComponent:[buildPopUp titleOfSelectedItem]] appendPathComponent:@"REVISIONS"];
|
||||||
|
MGMURLBasicHandler *handler = [MGMURLBasicHandler handlerWithRequest:[NSURLRequest requestWithURL:buildURL] delegate:self];
|
||||||
|
[handler setFailWithError:@selector(revision:didFailWithError:)];
|
||||||
|
[handler setReceiveResponse:@selector(revision:didReceiveResponse:)];
|
||||||
|
[handler setFinish:@selector(revisionDidFinish:)];
|
||||||
|
[connectionManager addHandler:handler];
|
||||||
|
|
||||||
|
if (![[yourBuildField stringValue] isEqual:@""] && [buildPopUp indexOfSelectedItem]!=-1 && ![[yourBuildField stringValue] isEqual:[buildPopUp titleOfSelectedItem]])
|
||||||
|
[svnLogsButton setEnabled:YES];
|
||||||
|
else
|
||||||
|
[svnLogsButton setEnabled:NO];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)revision:(MGMURLBasicHandler *)theHandler didFailWithError:(NSError *)theError {
|
||||||
|
NSLog(@"%@", theError);
|
||||||
|
NSAlert *alert = [[NSAlert new] autorelease];
|
||||||
|
[alert setMessageText:@"Error loading revision info"];
|
||||||
|
[alert setInformativeText:[theError localizedDescription]];
|
||||||
|
[alert runModal];
|
||||||
|
if (startingUp) {
|
||||||
|
[progress setDoubleValue:1.0];
|
||||||
|
[progress setIndeterminate:YES];
|
||||||
|
[progress setDoubleValue:0.0];
|
||||||
|
[progress stopAnimation:self];
|
||||||
|
|
||||||
|
[updateButton setEnabled:YES];
|
||||||
|
startingUp = NO;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
- (void)revision:(MGMURLBasicHandler *)theHandler didReceiveResponse:(NSHTTPURLResponse *)theResponse {
|
||||||
|
NSString *modified = [[theResponse allHeaderFields] objectForKey:@"Last-Modified"];
|
||||||
|
NSDateFormatter *formatter = [NSDateFormatter new];
|
||||||
|
[formatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] autorelease]];
|
||||||
|
[formatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss zzz"];
|
||||||
|
NSDate *date = [formatter dateFromString:modified];
|
||||||
|
[formatter release];
|
||||||
|
formatter = [NSDateFormatter new];
|
||||||
|
[formatter setDateFormat:@"MMMM d, yyyy hh:mm:ss a"];
|
||||||
|
NSString *dateString = [formatter stringFromDate:date];
|
||||||
|
[formatter release];
|
||||||
|
if (dateString!=nil)
|
||||||
|
[buildDateField setStringValue:dateString];
|
||||||
|
else
|
||||||
|
[buildDateField setStringValue:@"N/A"];
|
||||||
|
}
|
||||||
|
- (void)revisionDidFinish:(MGMURLBasicHandler *)theHandler {
|
||||||
|
NSDictionary *revisionInfo = [[theHandler data] parseJSON];
|
||||||
|
NSString *webkit = [[revisionInfo objectForKey:@"webkit_revision"] stringValue];
|
||||||
|
if (webkit!=nil)
|
||||||
|
[webKitBuildField setStringValue:webkit];
|
||||||
|
else
|
||||||
|
[webKitBuildField setStringValue:@"0"];
|
||||||
|
NSString *v8 = [[revisionInfo objectForKey:@"v8_revision"] stringValue];
|
||||||
|
if (v8!=nil)
|
||||||
|
[v8BuildField setStringValue:v8];
|
||||||
|
else
|
||||||
|
[v8BuildField setStringValue:@"0"];
|
||||||
|
if (startingUp) {
|
||||||
|
[progress setDoubleValue:1.0];
|
||||||
|
[progress setIndeterminate:YES];
|
||||||
|
[progress setDoubleValue:0.0];
|
||||||
|
[progress stopAnimation:self];
|
||||||
|
|
||||||
|
[updateButton setEnabled:YES];
|
||||||
|
startingUp = NO;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (IBAction)choosePath:(id)sender {
|
||||||
|
NSOpenPanel *openPanel = [NSOpenPanel openPanel];
|
||||||
|
if ([openPanel respondsToSelector:@selector(setDirectory:)])
|
||||||
|
[openPanel setDirectory:[chromiumPath stringByDeletingLastPathComponent]];
|
||||||
|
else
|
||||||
|
[openPanel setDirectoryURL:[NSURL fileURLWithPath:[chromiumPath stringByDeletingLastPathComponent]]];
|
||||||
|
[openPanel setCanChooseFiles:NO];
|
||||||
|
[openPanel setCanChooseDirectories:YES];
|
||||||
|
[openPanel setAllowsMultipleSelection:NO];
|
||||||
|
[openPanel setTitle:@"Choose path for Chromium"];
|
||||||
|
[openPanel setPrompt:@"Choose"];
|
||||||
|
int result = [openPanel runModal];
|
||||||
|
if (result==NSOKButton) {
|
||||||
|
NSString *newPath = [[[openPanel URLs] objectAtIndex:0] path];
|
||||||
|
NSFileManager *manager = [NSFileManager defaultManager];
|
||||||
|
if ([manager isWritableFileAtPath:newPath]) {
|
||||||
|
[chromiumPath release];
|
||||||
|
chromiumPath = [[newPath stringByAppendingPathComponent:MGMCPChromium] retain];
|
||||||
|
[[NSUserDefaults standardUserDefaults] setObject:chromiumPath forKey:MGMChromiumPath];
|
||||||
|
[self updateChromiumPath];
|
||||||
|
} else {
|
||||||
|
NSAlert *alert = [[NSAlert new] autorelease];
|
||||||
|
[alert setInformativeText:@"Not Writable"];
|
||||||
|
[alert setMessageText:@"The directory you choose is not writable. To beable to use it with Chromatic, you need to change permissions."];
|
||||||
|
[alert runModal];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
- (void)updateChromiumPath {
|
||||||
|
NSFileManager *manager = [NSFileManager defaultManager];
|
||||||
|
if ([manager fileExistsAtPath:chromiumPath]) {
|
||||||
|
NSDictionary *chromiumInfo = (NSDictionary *)CFBundleCopyInfoDictionaryInDirectory((CFURLRef)[NSURL fileURLWithPath:chromiumPath]);
|
||||||
|
[yourBuildField setStringValue:[chromiumInfo objectForKey:MGMCPRevision]];
|
||||||
|
[chromiumInfo release];
|
||||||
|
|
||||||
|
NSDictionary *chromeAttributes = [manager attributesOfItemAtPath:chromiumPath];
|
||||||
|
NSDate *date = [chromeAttributes objectForKey:NSFileModificationDate];
|
||||||
|
NSDateFormatter *formatter = [[NSDateFormatter new] autorelease];
|
||||||
|
[formatter setDateFormat:@"MMMM d, yyyy hh:mm:ss a"];
|
||||||
|
[installDateField setStringValue:[formatter stringFromDate:date]];
|
||||||
|
[launchButton setEnabled:YES];
|
||||||
|
[updateButton setTitle:MGMUBUpdate];
|
||||||
|
if (![[yourBuildField stringValue] isEqual:@""] && [buildPopUp indexOfSelectedItem]!=-1 && ![[yourBuildField stringValue] isEqual:[buildPopUp titleOfSelectedItem]])
|
||||||
|
[svnLogsButton setEnabled:YES];
|
||||||
|
else
|
||||||
|
[svnLogsButton setEnabled:NO];
|
||||||
|
} else {
|
||||||
|
[launchButton setEnabled:NO];
|
||||||
|
[svnLogsButton setEnabled:NO];
|
||||||
|
[yourBuildField setStringValue:@""];
|
||||||
|
[installDateField setStringValue:@""];
|
||||||
|
[updateButton setTitle:MGMUBInstall];
|
||||||
|
}
|
||||||
|
|
||||||
|
[pathField setStringValue:[chromiumPath stringByDeletingLastPathComponent]];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (IBAction)launchChromium:(id)sender {
|
||||||
|
[[NSWorkspace sharedWorkspace] launchApplication:chromiumPath];
|
||||||
|
if ([[NSUserDefaults standardUserDefaults] boolForKey:MGMQuitAfterLaunch])
|
||||||
|
[[NSApplication sharedApplication] terminate:self];
|
||||||
|
}
|
||||||
|
- (IBAction)viewSVNLogs:(id)sender {
|
||||||
|
NSString *revision1, *revision2, *tmp;
|
||||||
|
revision1 = [yourBuildField stringValue];
|
||||||
|
revision2 = [buildPopUp titleOfSelectedItem];
|
||||||
|
if ([revision1 compare:revision2]==NSOrderedDescending) {
|
||||||
|
tmp = revision1;
|
||||||
|
revision1 = revision2;
|
||||||
|
revision2 = tmp;
|
||||||
|
}
|
||||||
|
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:MGMSVNLogsURL, revision1, revision2]];
|
||||||
|
|
||||||
|
[[svnLogsBrowser mainFrame] loadRequest:[NSURLRequest requestWithURL:url]];
|
||||||
|
[svnLogsWindow makeKeyAndOrderFront:self];
|
||||||
|
}
|
||||||
|
- (IBAction)update:(id)sender {
|
||||||
|
if ([[updateButton title] isEqual:MGMUBCancel]) {
|
||||||
|
[connectionManager cancelHandler:updateHandler];
|
||||||
|
[updateHandler release];
|
||||||
|
updateHandler = nil;
|
||||||
|
[[NSFileManager defaultManager] removeItemAtPath:[MGMTMPPath stringByAppendingPathComponent:MGMChromiumZip]];
|
||||||
|
[self updateDone];
|
||||||
|
} else {
|
||||||
|
[progress startAnimation:self];
|
||||||
|
startTime = [[NSDate date] timeIntervalSince1970];
|
||||||
|
|
||||||
|
NSURL *url = [[[NSURL URLWithString:MGMSnapshotURL] appendPathComponent:[buildPopUp titleOfSelectedItem]] appendPathComponent:MGMChromiumZip];
|
||||||
|
[updateHandler release];
|
||||||
|
updateHandler = [[MGMURLBasicHandler handlerWithRequest:[NSURLRequest requestWithURL:url] delegate:self] retain];
|
||||||
|
[updateHandler setFile:[MGMTMPPath stringByAppendingPathComponent:MGMChromiumZip]];
|
||||||
|
[updateHandler setFailWithError:@selector(update:didFailWithError:)];
|
||||||
|
[updateHandler setReceiveResponse:@selector(update:didReceiveResponse:)];
|
||||||
|
[updateHandler setBytesReceived:@selector(update:receivedBytes:totalBytes:expectedBytes:)];
|
||||||
|
[updateHandler setFinish:@selector(updateDidFinish:)];
|
||||||
|
[updateHandler setSynchronous:NO];
|
||||||
|
[connectionManager addHandler:updateHandler];
|
||||||
|
|
||||||
|
[channelPopUp setEnabled:NO];
|
||||||
|
[buildPopUp setEnabled:NO];
|
||||||
|
[updateButton setTitle:MGMUBCancel];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)windowWillClose:(NSNotification *)notification {
|
||||||
|
[[svnLogsBrowser mainFrame] loadHTMLString:@"" baseURL:nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)update:(MGMURLBasicHandler *)theHandler didFailWithError:(NSError *)theError {
|
||||||
|
NSLog(@"%@", theError);
|
||||||
|
NSAlert *alert = [[NSAlert new] autorelease];
|
||||||
|
[alert setMessageText:@"Error downloading update"];
|
||||||
|
[alert setInformativeText:[theError localizedDescription]];
|
||||||
|
[alert runModal];
|
||||||
|
}
|
||||||
|
- (void)update:(MGMURLBasicHandler *)theHandler didReceiveResponse:(NSHTTPURLResponse *)theResponse {
|
||||||
|
[progress setIndeterminate:NO];
|
||||||
|
[progress startAnimation:self];
|
||||||
|
bytesReceivedArray = [NSMutableArray new];
|
||||||
|
}
|
||||||
|
- (void)update:(MGMURLBasicHandler *)theHandler receivedBytes:(unsigned long)theBytes totalBytes:(unsigned long)theTotalBytes expectedBytes:(unsigned long)theExpectedBytes {
|
||||||
|
bytesReceived += theBytes;
|
||||||
|
if (lastCheck==nil || [lastCheck timeIntervalSinceNow]<-1.0) {
|
||||||
|
[lastCheck release];
|
||||||
|
lastCheck = [NSDate new];
|
||||||
|
|
||||||
|
while ([bytesReceivedArray count]>15) {
|
||||||
|
[bytesReceivedArray removeObjectAtIndex:0];
|
||||||
|
}
|
||||||
|
[bytesReceivedArray addObject:[NSNumber numberWithUnsignedLong:bytesReceived]];
|
||||||
|
|
||||||
|
averageBytesReceived = 0;
|
||||||
|
for (int i=0; i<[bytesReceivedArray count]; i++) {
|
||||||
|
averageBytesReceived += [[bytesReceivedArray objectAtIndex:i] unsignedLongValue];
|
||||||
|
}
|
||||||
|
averageBytesReceived /= [bytesReceivedArray count];
|
||||||
|
|
||||||
|
[statusField setStringValue:[NSString stringWithFormat:@"%@ of %@ (%@/sec) - %@", [NSString readableMemory:theTotalBytes], [NSString readableMemory:theExpectedBytes], [NSString readableMemory:bytesReceived], [NSString readableTime:(theExpectedBytes-theTotalBytes)/averageBytesReceived]]];
|
||||||
|
|
||||||
|
bytesReceived = 0;
|
||||||
|
}
|
||||||
|
[progress setDoubleValue:(double)theTotalBytes/(double)theExpectedBytes];
|
||||||
|
totalBytes = theTotalBytes;
|
||||||
|
}
|
||||||
|
- (void)updateDidFinish:(MGMURLBasicHandler *)theHandler {
|
||||||
|
[updateHandler release];
|
||||||
|
updateHandler = nil;
|
||||||
|
[bytesReceivedArray release];
|
||||||
|
bytesReceivedArray = nil;
|
||||||
|
|
||||||
|
[updateButton setEnabled:NO];
|
||||||
|
[progress setIndeterminate:YES];
|
||||||
|
[progress startAnimation:self];
|
||||||
|
[statusField setStringValue:@"Uncompressing and installing update."];
|
||||||
|
|
||||||
|
unzipTask = [NSTask new];
|
||||||
|
[unzipTask setLaunchPath:@"/usr/bin/ditto"];
|
||||||
|
[unzipTask setArguments:[NSArray arrayWithObjects:@"-v", @"-x", @"-k", @"--rsrc", [MGMTMPPath stringByAppendingPathComponent:MGMChromiumZip], MGMTMPPath, nil]];
|
||||||
|
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateUnzipped:) name:NSTaskDidTerminateNotification object:unzipTask];
|
||||||
|
[unzipTask launch];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)updateUnzipped:(NSNotification *)theNotification {
|
||||||
|
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||||
|
NSFileManager *manager = [NSFileManager defaultManager];
|
||||||
|
|
||||||
|
if ([manager fileExistsAtPath:chromiumPath]) {
|
||||||
|
if ([defaults boolForKey:MGMMoveToTrash]) {
|
||||||
|
NSString *trash = [@"~/.Trash" stringByExpandingTildeInPath];
|
||||||
|
NSInteger tag;
|
||||||
|
[[NSWorkspace sharedWorkspace] performFileOperation:NSWorkspaceRecycleOperation source:[chromiumPath stringByDeletingLastPathComponent] destination:trash files:[NSArray arrayWithObject:[chromiumPath lastPathComponent]] tag:&tag];
|
||||||
|
if (tag!=0)
|
||||||
|
NSLog(@"Error Deleting: %ld", (long)tag);
|
||||||
|
} else {
|
||||||
|
[manager removeItemAtPath:chromiumPath];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
NSString *extractedPath = [[MGMTMPPath stringByAppendingPathComponent:[MGMChromiumZip stringByDeletingPathExtension]] stringByAppendingPathComponent:MGMCPChromium];
|
||||||
|
if (![manager moveItemAtPath:extractedPath toPath:chromiumPath]) {
|
||||||
|
NSBeep();
|
||||||
|
[self updateDone];
|
||||||
|
[statusField setStringValue:[NSString stringWithFormat:@"Unable to %@ due to an error. This may be a permissions issue.", [[updateButton title] lowercaseString]]];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
[manager removeItemAtPath:[extractedPath stringByDeletingLastPathComponent]];
|
||||||
|
[manager removeItemAtPath:[MGMTMPPath stringByAppendingPathComponent:MGMChromiumZip]];
|
||||||
|
[manager setAttributes:[NSDictionary dictionaryWithObject:[NSDate date] forKey:NSFileModificationDate] ofItemAtPath:chromiumPath];
|
||||||
|
|
||||||
|
[NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:1]];
|
||||||
|
|
||||||
|
[self updateDone];
|
||||||
|
|
||||||
|
int time = [[NSDate date] timeIntervalSince1970]-startTime;
|
||||||
|
[statusField setStringValue:[NSString stringWithFormat:@"%@ downloaded at %@/sec in %@", [NSString readableMemory:totalBytes], [NSString readableMemory:averageBytesReceived], [NSString readableTime:time]]];
|
||||||
|
|
||||||
|
if ([defaults boolForKey:MGMDoneSound]) {
|
||||||
|
NSSound *done = [NSSound soundNamed:@"Glass"];
|
||||||
|
[done setDelegate:self];
|
||||||
|
[done play];
|
||||||
|
}
|
||||||
|
|
||||||
|
[updateButton setEnabled:YES];
|
||||||
|
|
||||||
|
if ([defaults boolForKey:MGMLaunchWhenDone] && [defaults boolForKey:MGMDoneSound] && ![defaults boolForKey:MGMQuitAfterLaunch])
|
||||||
|
[self launchChromium:self];
|
||||||
|
}
|
||||||
|
- (void)sound:(NSSound *)sound didFinishPlaying:(BOOL)didFinish {
|
||||||
|
if (didFinish) {
|
||||||
|
[sound release];
|
||||||
|
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||||
|
if ([defaults boolForKey:MGMLaunchWhenDone] && [defaults boolForKey:MGMQuitAfterLaunch])
|
||||||
|
[self launchChromium:self];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)updateDone {
|
||||||
|
[self updateChromiumPath];
|
||||||
|
[channelPopUp setEnabled:YES];
|
||||||
|
[buildPopUp setEnabled:YES];
|
||||||
|
[progress setIndeterminate:YES];
|
||||||
|
[progress setDoubleValue:0.0];
|
||||||
|
[progress stopAnimation:self];
|
||||||
|
[statusField setStringValue:@""];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)applicationWillTerminate:(NSNotification *)aNotification {
|
||||||
|
if (updateHandler!=nil)
|
||||||
|
[self update:self];
|
||||||
|
}
|
||||||
|
@end
|
35
Classes/Preferences/MGMAdvancedPane.h
Normal file
35
Classes/Preferences/MGMAdvancedPane.h
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
//
|
||||||
|
// MGMAdvancedPane.h
|
||||||
|
// Chromatic
|
||||||
|
//
|
||||||
|
// Created by Mr. Gecko on 6/10/11.
|
||||||
|
// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/
|
||||||
|
//
|
||||||
|
// Permission to use, copy, modify, and/or distribute this software for any purpose
|
||||||
|
// with or without fee is hereby granted, provided that the above copyright notice
|
||||||
|
// and this permission notice appear in all copies.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||||
|
// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT,
|
||||||
|
// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||||
|
// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
|
||||||
|
// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Cocoa/Cocoa.h>
|
||||||
|
#import <MGMUsers/MGMPreferencesPane.h>
|
||||||
|
|
||||||
|
@interface MGMAdvancedPane : MGMPreferencesPane {
|
||||||
|
IBOutlet NSView *mainView;
|
||||||
|
|
||||||
|
IBOutlet NSTextField *snapshotField;
|
||||||
|
IBOutlet NSButton *trashButton;
|
||||||
|
}
|
||||||
|
- (id)initWithPreferences:(MGMPreferences *)thePreferences;
|
||||||
|
+ (void)setUpToolbarItem:(NSToolbarItem *)theItem;
|
||||||
|
+ (NSString *)title;
|
||||||
|
- (NSView *)preferencesView;
|
||||||
|
|
||||||
|
- (IBAction)save:(id)sender;
|
||||||
|
@end
|
60
Classes/Preferences/MGMAdvancedPane.m
Normal file
60
Classes/Preferences/MGMAdvancedPane.m
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
//
|
||||||
|
// MGMAdvancedPane.m
|
||||||
|
// Chromatic
|
||||||
|
//
|
||||||
|
// Created by Mr. Gecko on 6/10/11.
|
||||||
|
// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/
|
||||||
|
//
|
||||||
|
// Permission to use, copy, modify, and/or distribute this software for any purpose
|
||||||
|
// with or without fee is hereby granted, provided that the above copyright notice
|
||||||
|
// and this permission notice appear in all copies.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||||
|
// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT,
|
||||||
|
// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||||
|
// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
|
||||||
|
// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "MGMAdvancedPane.h"
|
||||||
|
#import "MGMController.h"
|
||||||
|
#import <MGMUsers/MGMUsers.h>
|
||||||
|
|
||||||
|
@implementation MGMAdvancedPane
|
||||||
|
- (id)initWithPreferences:(MGMPreferences *)thePreferences {
|
||||||
|
if ((self = [super initWithPreferences:thePreferences])) {
|
||||||
|
if (![NSBundle loadNibNamed:@"AdvancedPane" owner:self]) {
|
||||||
|
NSLog(@"Unable to load Nib for Advanced Preferences");
|
||||||
|
[self release];
|
||||||
|
self = nil;
|
||||||
|
} else {
|
||||||
|
if ([preferences stringForKey:MGMCustomSnapshotURL]!=nil)
|
||||||
|
[snapshotField setStringValue:[preferences stringForKey:MGMCustomSnapshotURL]];
|
||||||
|
[trashButton setState:([preferences boolForKey:MGMMoveToTrash] ? NSOnState : NSOffState)];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
- (void)dealloc {
|
||||||
|
[self save:self];
|
||||||
|
[mainView release];
|
||||||
|
[super dealloc];
|
||||||
|
}
|
||||||
|
+ (void)setUpToolbarItem:(NSToolbarItem *)theItem {
|
||||||
|
[theItem setLabel:[self title]];
|
||||||
|
[theItem setPaletteLabel:[theItem label]];
|
||||||
|
[theItem setImage:[NSImage imageNamed:@"Advanced"]];
|
||||||
|
}
|
||||||
|
+ (NSString *)title {
|
||||||
|
return @"Advanced";
|
||||||
|
}
|
||||||
|
- (NSView *)preferencesView {
|
||||||
|
return mainView;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (IBAction)save:(id)sender {
|
||||||
|
[preferences setObject:[snapshotField stringValue] forKey:MGMCustomSnapshotURL];
|
||||||
|
[preferences setBool:([trashButton state]==NSOnState) forKey:MGMMoveToTrash];
|
||||||
|
}
|
||||||
|
@end
|
36
Classes/Preferences/MGMGeneralPane.h
Normal file
36
Classes/Preferences/MGMGeneralPane.h
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
//
|
||||||
|
// MGMGeneralPane.h
|
||||||
|
// Chromatic
|
||||||
|
//
|
||||||
|
// Created by Mr. Gecko on 6/10/11.
|
||||||
|
// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/
|
||||||
|
//
|
||||||
|
// Permission to use, copy, modify, and/or distribute this software for any purpose
|
||||||
|
// with or without fee is hereby granted, provided that the above copyright notice
|
||||||
|
// and this permission notice appear in all copies.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||||
|
// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT,
|
||||||
|
// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||||
|
// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
|
||||||
|
// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Cocoa/Cocoa.h>
|
||||||
|
#import <MGMUsers/MGMPreferencesPane.h>
|
||||||
|
|
||||||
|
@interface MGMGeneralPane : MGMPreferencesPane {
|
||||||
|
IBOutlet NSView *mainView;
|
||||||
|
|
||||||
|
IBOutlet NSButton *doneSoundButton;
|
||||||
|
IBOutlet NSButton *launchWhenDoneButton;
|
||||||
|
IBOutlet NSButton *quitAfterLaunchButton;
|
||||||
|
}
|
||||||
|
- (id)initWithPreferences:(MGMPreferences *)thePreferences;
|
||||||
|
+ (void)setUpToolbarItem:(NSToolbarItem *)theItem;
|
||||||
|
+ (NSString *)title;
|
||||||
|
- (NSView *)preferencesView;
|
||||||
|
|
||||||
|
- (IBAction)save:(id)sender;
|
||||||
|
@end
|
60
Classes/Preferences/MGMGeneralPane.m
Normal file
60
Classes/Preferences/MGMGeneralPane.m
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
//
|
||||||
|
// MGMGeneralPane.m
|
||||||
|
// Chromatic
|
||||||
|
//
|
||||||
|
// Created by Mr. Gecko on 6/10/11.
|
||||||
|
// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/
|
||||||
|
//
|
||||||
|
// Permission to use, copy, modify, and/or distribute this software for any purpose
|
||||||
|
// with or without fee is hereby granted, provided that the above copyright notice
|
||||||
|
// and this permission notice appear in all copies.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||||
|
// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT,
|
||||||
|
// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||||
|
// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
|
||||||
|
// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "MGMGeneralPane.h"
|
||||||
|
#import "MGMController.h"
|
||||||
|
#import <MGMUsers/MGMUsers.h>
|
||||||
|
|
||||||
|
@implementation MGMGeneralPane
|
||||||
|
- (id)initWithPreferences:(MGMPreferences *)thePreferences {
|
||||||
|
if ((self = [super initWithPreferences:thePreferences])) {
|
||||||
|
if (![NSBundle loadNibNamed:@"GeneralPane" owner:self]) {
|
||||||
|
NSLog(@"Unable to load Nib for General Preferences");
|
||||||
|
[self release];
|
||||||
|
self = nil;
|
||||||
|
} else {
|
||||||
|
[doneSoundButton setState:([preferences boolForKey:MGMDoneSound] ? NSOnState : NSOffState)];
|
||||||
|
[launchWhenDoneButton setState:([preferences boolForKey:MGMLaunchWhenDone] ? NSOnState : NSOffState)];
|
||||||
|
[quitAfterLaunchButton setState:([preferences boolForKey:MGMQuitAfterLaunch] ? NSOnState : NSOffState)];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
- (void)dealloc {
|
||||||
|
[mainView release];
|
||||||
|
[super dealloc];
|
||||||
|
}
|
||||||
|
+ (void)setUpToolbarItem:(NSToolbarItem *)theItem {
|
||||||
|
[theItem setLabel:[self title]];
|
||||||
|
[theItem setPaletteLabel:[theItem label]];
|
||||||
|
[theItem setImage:[NSImage imageNamed:@"General"]];
|
||||||
|
}
|
||||||
|
+ (NSString *)title {
|
||||||
|
return @"General";
|
||||||
|
}
|
||||||
|
- (NSView *)preferencesView {
|
||||||
|
return mainView;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (IBAction)save:(id)sender {
|
||||||
|
[preferences setBool:([doneSoundButton state]==NSOnState) forKey:MGMDoneSound];
|
||||||
|
[preferences setBool:([launchWhenDoneButton state]==NSOnState) forKey:MGMLaunchWhenDone];
|
||||||
|
[preferences setBool:([quitAfterLaunchButton state]==NSOnState) forKey:MGMQuitAfterLaunch];
|
||||||
|
}
|
||||||
|
@end
|
7
Classes/Prefix.pch
Normal file
7
Classes/Prefix.pch
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
//
|
||||||
|
// Prefix header for all source files of the 'Chromatic' target in the 'Chromatic' project
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifdef __OBJC__
|
||||||
|
#import <Cocoa/Cocoa.h>
|
||||||
|
#endif
|
14
Classes/main.m
Normal file
14
Classes/main.m
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
//
|
||||||
|
// main.m
|
||||||
|
// Chromatic
|
||||||
|
//
|
||||||
|
// Created by James on 6/9/11.
|
||||||
|
// Copyright 2011 Mr. Gecko's Media. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Cocoa/Cocoa.h>
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
return NSApplicationMain(argc, (const char **) argv);
|
||||||
|
}
|
1
Frameworks/GeckoReporter.framework/GeckoReporter
Symbolic link
1
Frameworks/GeckoReporter.framework/GeckoReporter
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
Versions/Current/GeckoReporter
|
1
Frameworks/GeckoReporter.framework/Headers
Symbolic link
1
Frameworks/GeckoReporter.framework/Headers
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
Versions/Current/Headers
|
1
Frameworks/GeckoReporter.framework/Resources
Symbolic link
1
Frameworks/GeckoReporter.framework/Resources
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
Versions/Current/Resources
|
BIN
Frameworks/GeckoReporter.framework/Versions/A/GeckoReporter
Executable file
BIN
Frameworks/GeckoReporter.framework/Versions/A/GeckoReporter
Executable file
Binary file not shown.
@ -0,0 +1,12 @@
|
|||||||
|
//
|
||||||
|
// GeckoReporter.h
|
||||||
|
// GeckoReporter
|
||||||
|
//
|
||||||
|
// Created by Mr. Gecko on 12/27/09.
|
||||||
|
// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "MGMReporter.h"
|
||||||
|
#import "MGMSender.h"
|
||||||
|
#import "MGMSystemInfo.h"
|
||||||
|
#import "MGMLog.h"
|
@ -0,0 +1,16 @@
|
|||||||
|
//
|
||||||
|
// MGMFeedback.h
|
||||||
|
// GeckoReporter
|
||||||
|
//
|
||||||
|
// Created by Mr. Gecko on 1/2/10.
|
||||||
|
// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Cocoa/Cocoa.h>
|
||||||
|
|
||||||
|
@interface MGMFeedback : NSObject {
|
||||||
|
|
||||||
|
}
|
||||||
|
- (IBAction)openBugReport:(id)sender;
|
||||||
|
- (IBAction)openContact:(id)sender;
|
||||||
|
@end
|
@ -0,0 +1,12 @@
|
|||||||
|
//
|
||||||
|
// MGMLog.h
|
||||||
|
// GeckoReporter
|
||||||
|
//
|
||||||
|
// Created by Mr. Gecko on 1/1/10.
|
||||||
|
// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Cocoa/Cocoa.h>
|
||||||
|
|
||||||
|
void MGMLog(NSString *format, ...);
|
||||||
|
void MGMLogv(NSString *format, va_list args);
|
@ -0,0 +1,28 @@
|
|||||||
|
//
|
||||||
|
// MGMReporter.h
|
||||||
|
// GeckoReporter
|
||||||
|
//
|
||||||
|
// Created by Mr. Gecko on 12/27/09.
|
||||||
|
// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Cocoa/Cocoa.h>
|
||||||
|
|
||||||
|
extern NSString * const MGMGRDoneNotification;
|
||||||
|
extern NSString * const MGMGRUserEmail;
|
||||||
|
extern NSString * const MGMGRUserName;
|
||||||
|
extern NSString * const MGMGRLastCrashDate;
|
||||||
|
extern NSString * const MGMGRSendAll;
|
||||||
|
extern NSString * const MGMGRIgnoreAll;
|
||||||
|
|
||||||
|
#define MGMGRReleaseDebug 0
|
||||||
|
|
||||||
|
@class MGMSender;
|
||||||
|
|
||||||
|
@interface MGMReporter : NSObject {
|
||||||
|
BOOL foundReport;
|
||||||
|
NSDate *lastDate;
|
||||||
|
MGMSender *mailSender;
|
||||||
|
}
|
||||||
|
+ (id)sharedReporter;
|
||||||
|
@end
|
@ -0,0 +1,20 @@
|
|||||||
|
//
|
||||||
|
// MGMSender.h
|
||||||
|
// GeckoReporter
|
||||||
|
//
|
||||||
|
// Created by Mr. Gecko on 12/28/09.
|
||||||
|
// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Cocoa/Cocoa.h>
|
||||||
|
#import "MGMSenderDelegate.h"
|
||||||
|
|
||||||
|
@interface MGMSender : NSObject {
|
||||||
|
id<MGMSenderDelegate> delegate;
|
||||||
|
NSMutableData *receivedData;
|
||||||
|
NSURLConnection *theConnection;
|
||||||
|
}
|
||||||
|
- (void)sendReport:(NSString *)theReportPath reportDate:(NSDate *)theReportDate userReport:(NSString *)theUserReport delegate:(id)theDelegate;
|
||||||
|
- (void)sendBug:(NSString *)theBug reproduce:(NSString *)theReproduce delegate:(id)theDelegate;
|
||||||
|
- (void)sendMessage:(NSString *)theMessage subject:(NSString *)theSubject delegate:(id)theDelegate;
|
||||||
|
@end
|
@ -0,0 +1,15 @@
|
|||||||
|
//
|
||||||
|
// MGMSenderDelegate.h
|
||||||
|
// GeckoReporter
|
||||||
|
//
|
||||||
|
// Created by Mr. Gecko on 1/2/10.
|
||||||
|
// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Cocoa/Cocoa.h>
|
||||||
|
|
||||||
|
|
||||||
|
@protocol MGMSenderDelegate <NSObject>
|
||||||
|
- (void)sendError:(NSError *)error;
|
||||||
|
- (void)sendFinished:(NSString *)received;
|
||||||
|
@end
|
@ -0,0 +1,46 @@
|
|||||||
|
//
|
||||||
|
// MGMSystemInfo.h
|
||||||
|
// GeckoReporter
|
||||||
|
//
|
||||||
|
// Created by Mr. Gecko on 12/31/09.
|
||||||
|
// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Cocoa/Cocoa.h>
|
||||||
|
|
||||||
|
|
||||||
|
@interface MGMSystemInfo : NSObject {
|
||||||
|
|
||||||
|
}
|
||||||
|
+ (MGMSystemInfo *)info;
|
||||||
|
- (NSString *)architecture;
|
||||||
|
- (BOOL)is64Bit;
|
||||||
|
- (NSString *)CPUFamily;
|
||||||
|
- (int)CPUCount;
|
||||||
|
- (NSString *)model;
|
||||||
|
- (NSString *)modelName;
|
||||||
|
- (int)CPUMHz;
|
||||||
|
- (int)RAMSize;
|
||||||
|
- (int)OSMajorVersion;
|
||||||
|
- (int)OSMinorVersion;
|
||||||
|
- (int)OSBugFixVersion;
|
||||||
|
- (NSString *)OSVersion;
|
||||||
|
- (NSString *)OSVersionName;
|
||||||
|
- (BOOL)isAfterCheetah;
|
||||||
|
- (BOOL)isAfterPuma;
|
||||||
|
- (BOOL)isAfterJaguar;
|
||||||
|
- (BOOL)isAfterPanther;
|
||||||
|
- (BOOL)isAfterTiger;
|
||||||
|
- (BOOL)isAfterLeopard;
|
||||||
|
- (BOOL)isAfterSnowLeopard;
|
||||||
|
- (NSString *)language;
|
||||||
|
- (NSString *)applicationIdentifier;
|
||||||
|
- (NSString *)applicationName;
|
||||||
|
- (NSString *)applicationEXECName;
|
||||||
|
- (NSString *)applicationVersion;
|
||||||
|
- (BOOL)isUIElement;
|
||||||
|
- (NSBundle *)frameworkBundle;
|
||||||
|
- (NSString *)frameworkVersion;
|
||||||
|
- (NSString *)useragentWithApplicationNameAndVersion:(NSString *)nameAndVersion;
|
||||||
|
- (NSString *)useragent;
|
||||||
|
@end
|
Binary file not shown.
BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/English.lproj/MGMBugWindow.nib
generated
Normal file
BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/English.lproj/MGMBugWindow.nib
generated
Normal file
Binary file not shown.
BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/English.lproj/MGMContactWindow.nib
generated
Normal file
BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/English.lproj/MGMContactWindow.nib
generated
Normal file
Binary file not shown.
BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/English.lproj/MGMReportWindow.nib
generated
Normal file
BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/English.lproj/MGMReportWindow.nib
generated
Normal file
Binary file not shown.
Binary file not shown.
BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/French.lproj/MGMBugWindow.nib
generated
Normal file
BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/French.lproj/MGMBugWindow.nib
generated
Normal file
Binary file not shown.
BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/French.lproj/MGMContactWindow.nib
generated
Normal file
BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/French.lproj/MGMContactWindow.nib
generated
Normal file
Binary file not shown.
BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/French.lproj/MGMReportWindow.nib
generated
Normal file
BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/French.lproj/MGMReportWindow.nib
generated
Normal file
Binary file not shown.
@ -0,0 +1,42 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>BuildMachineOSBuild</key>
|
||||||
|
<string>10J567</string>
|
||||||
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
|
<string>English</string>
|
||||||
|
<key>CFBundleExecutable</key>
|
||||||
|
<string>GeckoReporter</string>
|
||||||
|
<key>CFBundleIdentifier</key>
|
||||||
|
<string>com.MrGeckosMedia.GeckoReporter</string>
|
||||||
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
|
<string>6.0</string>
|
||||||
|
<key>CFBundleName</key>
|
||||||
|
<string>GeckoReporter</string>
|
||||||
|
<key>CFBundlePackageType</key>
|
||||||
|
<string>FMWK</string>
|
||||||
|
<key>CFBundleShortVersionString</key>
|
||||||
|
<string>0.2</string>
|
||||||
|
<key>CFBundleSignature</key>
|
||||||
|
<string>????</string>
|
||||||
|
<key>CFBundleVersion</key>
|
||||||
|
<string>0.2</string>
|
||||||
|
<key>DTCompiler</key>
|
||||||
|
<string>4.2</string>
|
||||||
|
<key>DTPlatformBuild</key>
|
||||||
|
<string>4A278b</string>
|
||||||
|
<key>DTPlatformVersion</key>
|
||||||
|
<string>GM</string>
|
||||||
|
<key>DTSDKBuild</key>
|
||||||
|
<string>4A278b</string>
|
||||||
|
<key>DTSDKName</key>
|
||||||
|
<string>macosx10.6</string>
|
||||||
|
<key>DTXcode</key>
|
||||||
|
<string>0400</string>
|
||||||
|
<key>DTXcodeBuild</key>
|
||||||
|
<string>4A278b</string>
|
||||||
|
<key>NSHumanReadableCopyright</key>
|
||||||
|
<string>Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
@ -0,0 +1,27 @@
|
|||||||
|
Copyright (c) 2010 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/
|
||||||
|
|
||||||
|
Permission is granted, to any person obtaining a copy of this framework, to
|
||||||
|
use, copy, modify, merge, or redistribute this framework under the following terms:
|
||||||
|
|
||||||
|
1. This file must be included in all copies of this framework unmodified in
|
||||||
|
GeckoReporter.framework/Resource/License.txt and/or GeckoReporter.framework/Versions/A/Resources/License.txt.
|
||||||
|
|
||||||
|
2. THIS FRAMEWORK IS PROVIDED "AS IS" BY JAMES COLEMAN, WITHOUT WARRANTY OF
|
||||||
|
ANY KIND. IF YOUR SOFTWARE/FRAMEWORK/COMPUTER CRASH OR FAILS TO WORK IN ANY
|
||||||
|
WAY SHAPE OR FORM BECAUSE OF THIS FRAMEWORK, I (JAMES COLEMAN) AM NOT IN ANYWAY
|
||||||
|
RESPONSIBLE FOR YOUR PROBLEM. BUT, I MAY BE WILLING TO HELP YOU, NO PROMISES.
|
||||||
|
|
||||||
|
3. Redistributions of source code included in this framework must retain the
|
||||||
|
copyright notice above this license file without modifications.
|
||||||
|
|
||||||
|
4. Redistributions of binary must contain the copyright above this license file
|
||||||
|
without modifications.
|
||||||
|
|
||||||
|
5. If you use the crash reporter in this framework, you are allowed to remove the
|
||||||
|
NSTextField that says, "GeckoReporter by Mr. Gecko's Media".
|
||||||
|
|
||||||
|
6. For the users convenience, you must retain the notice about anonymous system
|
||||||
|
information being sent.
|
||||||
|
|
||||||
|
7. Mr. Gecko's Media (James Coleman) is allowed to modify these terms without notice to you
|
||||||
|
or your customers.
|
@ -0,0 +1,206 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>ADP2,1</key>
|
||||||
|
<string>Developer Transition Kit</string>
|
||||||
|
<key>iMac1,1</key>
|
||||||
|
<string>iMac G3 (Rev A-D)</string>
|
||||||
|
<key>PowerMac2,1</key>
|
||||||
|
<string>iMac G3 (Slot-loading CD-ROM)</string>
|
||||||
|
<key>PowerMac2,2</key>
|
||||||
|
<string>iMac G3 (Summer 2000)</string>
|
||||||
|
<key>PowerMac4,1</key>
|
||||||
|
<string>iMac G3 (2001)</string>
|
||||||
|
<key>PowerMac4,2</key>
|
||||||
|
<string>iMac G4 (Flat Panel)</string>
|
||||||
|
<key>PowerMac4,5</key>
|
||||||
|
<string>iMac G4 (17" Flat Panel)</string>
|
||||||
|
<key>PowerMac6,1</key>
|
||||||
|
<string>iMac G4 (USB 2.0)</string>
|
||||||
|
<key>PowerMac6,3</key>
|
||||||
|
<string>iMac G4 (20" Flat Panel)</string>
|
||||||
|
<key>PowerMac8,1</key>
|
||||||
|
<string>iMac G5</string>
|
||||||
|
<key>PowerMac8,2</key>
|
||||||
|
<string>iMac G5 (Ambient Light Sensor)</string>
|
||||||
|
<key>PowerMac12,1</key>
|
||||||
|
<string>iMac G5 (iSight)</string>
|
||||||
|
<key>iMac4,1</key>
|
||||||
|
<string>iMac (Core Duo)</string>
|
||||||
|
<key>iMac4,2</key>
|
||||||
|
<string>iMac for Education (17" Core Duo)</string>
|
||||||
|
<key>iMac5,1</key>
|
||||||
|
<string>iMac (Core 2 Duo 17"/20" SuperDrive)</string>
|
||||||
|
<key>iMac5,2</key>
|
||||||
|
<string>iMac (Core 2 Duo 17" Combo Drive)</string>
|
||||||
|
<key>iMac6,1</key>
|
||||||
|
<string>iMac (Core 2 Duo 24" SuperDrive)</string>
|
||||||
|
<key>iMac7,1</key>
|
||||||
|
<string>iMac (AI)</string>
|
||||||
|
<key>iMac8,1</key>
|
||||||
|
<string>iMac (2008)</string>
|
||||||
|
<key>iMac9,1</key>
|
||||||
|
<string>iMac (2009)</string>
|
||||||
|
<key>iMac10,1</key>
|
||||||
|
<string>iMac (2009 Magic)</string>
|
||||||
|
<key>iMac11,1</key>
|
||||||
|
<string>iMac (2009 Core I5)</string>
|
||||||
|
<key>PowerMac4,4</key>
|
||||||
|
<string>eMac</string>
|
||||||
|
<key>PowerMac6,4</key>
|
||||||
|
<string>eMac (USB 2.0 2005)</string>
|
||||||
|
<key>PowerMac10,1</key>
|
||||||
|
<string>Mac Mini G4</string>
|
||||||
|
<key>PowerMac10,2</key>
|
||||||
|
<string>Mac Mini (2005)</string>
|
||||||
|
<key>Macmini1,1</key>
|
||||||
|
<string>Mac Mini (Core Solo/Duo)</string>
|
||||||
|
<key>Macmini2,1</key>
|
||||||
|
<string>Mac Mini (Core 2 Duo)</string>
|
||||||
|
<key>Macmini3,1</key>
|
||||||
|
<string>Mac Mini (2009)</string>
|
||||||
|
<key>PowerBook2,1</key>
|
||||||
|
<string>iBook G3</string>
|
||||||
|
<key>PowerBook2,2</key>
|
||||||
|
<string>iBook G3 (FireWire)</string>
|
||||||
|
<key>PowerBook2,3</key>
|
||||||
|
<string>iBook G3</string>
|
||||||
|
<key>PowerBook2,4</key>
|
||||||
|
<string>iBook G3</string>
|
||||||
|
<key>PowerBook4,1</key>
|
||||||
|
<string>iBook G3 (Dual USB 2001)</string>
|
||||||
|
<key>PowerBook4,2</key>
|
||||||
|
<string>iBook G3 (16MB VRAM)</string>
|
||||||
|
<key>PowerBook4,3</key>
|
||||||
|
<string>iBook G3 Opaque 16MB VRAM/32MB VRAM 2003)</string>
|
||||||
|
<key>PowerBook6,3</key>
|
||||||
|
<string>iBook G4</string>
|
||||||
|
<key>PowerBook6,5</key>
|
||||||
|
<string>iBook G4 (2004)</string>
|
||||||
|
<key>PowerBook6,7</key>
|
||||||
|
<string>iBook G4 (Mid 2005)</string>
|
||||||
|
<key>PowerBook1,1</key>
|
||||||
|
<string>PowerBook G3</string>
|
||||||
|
<key>PowerBook3,1</key>
|
||||||
|
<string>PowerBook G3 (FireWire)</string>
|
||||||
|
<key>PowerBook3,2</key>
|
||||||
|
<string>PowerBook G4</string>
|
||||||
|
<key>PowerBook3,3</key>
|
||||||
|
<string>PowerBook G4 (Gigabit Ethernet)</string>
|
||||||
|
<key>PowerBook3,4</key>
|
||||||
|
<string>PowerBook G4 (DVI)</string>
|
||||||
|
<key>PowerBook3,5</key>
|
||||||
|
<string>PowerBook G4 (1GHz/867MHz)</string>
|
||||||
|
<key>PowerBook5,1</key>
|
||||||
|
<string>PowerBook G4 (17")</string>
|
||||||
|
<key>PowerBook5,2</key>
|
||||||
|
<string>PowerBook G4 (15" FW 800)</string>
|
||||||
|
<key>PowerBook5,3</key>
|
||||||
|
<string>PowerBook G4 (17" 1.33GHz)</string>
|
||||||
|
<key>PowerBook5,4</key>
|
||||||
|
<string>PowerBook G4 (15" 1.5/1.33GHz)</string>
|
||||||
|
<key>PowerBook5,5</key>
|
||||||
|
<string>PowerBook G4 (17" 1.5GHz)</string>
|
||||||
|
<key>PowerBook5,6</key>
|
||||||
|
<string>PowerBook G4 (15" 1.67GHz/1.5GHz)</string>
|
||||||
|
<key>PowerBook5,7</key>
|
||||||
|
<string>PowerBook G4 (17" 1.67GHz)</string>
|
||||||
|
<key>PowerBook5,8</key>
|
||||||
|
<string>PowerBook G4 (Double layer SD 15")</string>
|
||||||
|
<key>PowerBook5,9</key>
|
||||||
|
<string>PowerBook G4 (Double layer SD 17")</string>
|
||||||
|
<key>PowerBook6,1</key>
|
||||||
|
<string>PowerBook G4 (12")</string>
|
||||||
|
<key>PowerBook6,2</key>
|
||||||
|
<string>PowerBook G4 (12" DVI)</string>
|
||||||
|
<key>PowerBook6,4</key>
|
||||||
|
<string>PowerBook G4 (12" 1.33GHz)</string>
|
||||||
|
<key>PowerBook6,8</key>
|
||||||
|
<string>PowerBook G4 (12" 1.5GHz)</string>
|
||||||
|
<key>MacBook1,1</key>
|
||||||
|
<string>MacBook (Core Duo)</string>
|
||||||
|
<key>MacBook2,1</key>
|
||||||
|
<string>MacBook (Core 2 Duo)</string>
|
||||||
|
<key>MacBook4,1</key>
|
||||||
|
<string>MacBook (2008)</string>
|
||||||
|
<key>MacBook5,1</key>
|
||||||
|
<string>MacBook (Unibody)</string>
|
||||||
|
<key>MacBook5,2</key>
|
||||||
|
<string>MacBook (White 2009)</string>
|
||||||
|
<key>MacBook6,1</key>
|
||||||
|
<string>MacBook (White Unibody)</string>
|
||||||
|
<key>MacBookAir1,1</key>
|
||||||
|
<string>MacBook Air (2008)</string>
|
||||||
|
<key>MacBookPro1,1</key>
|
||||||
|
<string>MacBook Pro Core Duo (15")</string>
|
||||||
|
<key>MacBookPro1,2</key>
|
||||||
|
<string>MacBook Pro Core Duo (17")</string>
|
||||||
|
<key>MacBookPro2,1</key>
|
||||||
|
<string>MacBook Pro Core 2 Duo (17")</string>
|
||||||
|
<key>MacBookPro2,2</key>
|
||||||
|
<string>MacBook Pro Core 2 Duo (15")</string>
|
||||||
|
<key>MacBookPro3,1</key>
|
||||||
|
<string>MacBook Pro Core 2 Duo (15" LED Core 2 Duo)</string>
|
||||||
|
<key>MacBookPro3,2</key>
|
||||||
|
<string>MacBook Pro Core 2 Duo (17" HD Core 2 Duo)</string>
|
||||||
|
<key>MacBookPro4,1</key>
|
||||||
|
<string>MacBook Pro (Core 2 Duo 2008)</string>
|
||||||
|
<key>MacBookPro5,1</key>
|
||||||
|
<string>MacBook Pro (Unibody)</string>
|
||||||
|
<key>MacBookPro5,2</key>
|
||||||
|
<string>MacBook Pro (Unibody 17" 2009)</string>
|
||||||
|
<key>MacBookPro5,3</key>
|
||||||
|
<string>MacBook Pro (Unibody 15" 2009)</string>
|
||||||
|
<key>MacBookPro5,4</key>
|
||||||
|
<string>MacBook Pro (Unibody 15" 2009)</string>
|
||||||
|
<key>MacBookPro5,5</key>
|
||||||
|
<string>MacBook Pro (Unibody 13" 2009)</string>
|
||||||
|
<key>PowerMac1,1</key>
|
||||||
|
<string>Power Macintosh G3 (Blue & White)</string>
|
||||||
|
<key>PowerMac1,2</key>
|
||||||
|
<string>Power Macintosh G4 (PCI Graphics)</string>
|
||||||
|
<key>PowerMac11,2</key>
|
||||||
|
<string>Power Macintosh G5 (2005)</string>
|
||||||
|
<key>PowerMac3,1</key>
|
||||||
|
<string>Power Macintosh G4 (AGP Graphics)</string>
|
||||||
|
<key>PowerMac3,2</key>
|
||||||
|
<string>Power Macintosh G4 (AGP Graphics)</string>
|
||||||
|
<key>PowerMac3,3</key>
|
||||||
|
<string>Power Macintosh G4 (Gigabit Ethernet)</string>
|
||||||
|
<key>PowerMac3,4</key>
|
||||||
|
<string>Power Macintosh G4 (Digital Audio)</string>
|
||||||
|
<key>PowerMac3,5</key>
|
||||||
|
<string>Power Macintosh G4 (Quick Silver)</string>
|
||||||
|
<key>PowerMac3,6</key>
|
||||||
|
<string>Power Macintosh G4 (Mirrored Drive Door)</string>
|
||||||
|
<key>PowerMac5,1</key>
|
||||||
|
<string>Power Macintosh G4 Cube</string>
|
||||||
|
<key>PowerMac7,2</key>
|
||||||
|
<string>Power Macintosh G5</string>
|
||||||
|
<key>PowerMac7,3</key>
|
||||||
|
<string>Power Macintosh G5</string>
|
||||||
|
<key>PowerMac9,1</key>
|
||||||
|
<string>Power Macintosh G5 (2005)</string>
|
||||||
|
<key>MacPro1,1</key>
|
||||||
|
<string>Mac Pro (Four-Core)</string>
|
||||||
|
<key>MacPro2,1</key>
|
||||||
|
<string>Mac Pro (Eight-Core)</string>
|
||||||
|
<key>MacPro3,1</key>
|
||||||
|
<string>Mac Pro (2008 4/8 core "Harpertown")</string>
|
||||||
|
<key>MacPro4,1</key>
|
||||||
|
<string>Mac Pro (2009 "Nehalem")</string>
|
||||||
|
<key>RackMac1,1</key>
|
||||||
|
<string>Xserve G4</string>
|
||||||
|
<key>RackMac1,2</key>
|
||||||
|
<string>Xserve G4 (Slot-loading cluster node)</string>
|
||||||
|
<key>RackMac3,1</key>
|
||||||
|
<string>Xserve G5</string>
|
||||||
|
<key>Xserve1,1</key>
|
||||||
|
<string>Xserve (Intel Xeon)</string>
|
||||||
|
<key>Xserve2,1</key>
|
||||||
|
<string>Xserve (2008 Quad-Core)</string>
|
||||||
|
<key>Xserve3,1</key>
|
||||||
|
<string>Xserve (2009 Quad-Core)</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
Binary file not shown.
BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/es.lproj/MGMBugWindow.nib
generated
Normal file
BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/es.lproj/MGMBugWindow.nib
generated
Normal file
Binary file not shown.
BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/es.lproj/MGMContactWindow.nib
generated
Normal file
BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/es.lproj/MGMContactWindow.nib
generated
Normal file
Binary file not shown.
BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/es.lproj/MGMReportWindow.nib
generated
Normal file
BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/es.lproj/MGMReportWindow.nib
generated
Normal file
Binary file not shown.
Binary file not shown.
BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/pt-PT.lproj/MGMBugWindow.nib
generated
Normal file
BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/pt-PT.lproj/MGMBugWindow.nib
generated
Normal file
Binary file not shown.
BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/pt-PT.lproj/MGMContactWindow.nib
generated
Normal file
BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/pt-PT.lproj/MGMContactWindow.nib
generated
Normal file
Binary file not shown.
BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/pt-PT.lproj/MGMReportWindow.nib
generated
Normal file
BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/pt-PT.lproj/MGMReportWindow.nib
generated
Normal file
Binary file not shown.
Binary file not shown.
BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/sv.lproj/MGMBugWindow.nib
generated
Normal file
BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/sv.lproj/MGMBugWindow.nib
generated
Normal file
Binary file not shown.
BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/sv.lproj/MGMContactWindow.nib
generated
Normal file
BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/sv.lproj/MGMContactWindow.nib
generated
Normal file
Binary file not shown.
BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/sv.lproj/MGMReportWindow.nib
generated
Normal file
BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/sv.lproj/MGMReportWindow.nib
generated
Normal file
Binary file not shown.
1
Frameworks/GeckoReporter.framework/Versions/Current
Symbolic link
1
Frameworks/GeckoReporter.framework/Versions/Current
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
A
|
1
Frameworks/MGMUsers.framework/Headers
Symbolic link
1
Frameworks/MGMUsers.framework/Headers
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
Versions/Current/Headers
|
1
Frameworks/MGMUsers.framework/MGMUsers
Symbolic link
1
Frameworks/MGMUsers.framework/MGMUsers
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
Versions/Current/MGMUsers
|
1
Frameworks/MGMUsers.framework/Resources
Symbolic link
1
Frameworks/MGMUsers.framework/Resources
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
Versions/Current/Resources
|
19
Frameworks/MGMUsers.framework/Versions/A/Headers/MGMAbout.h
Normal file
19
Frameworks/MGMUsers.framework/Versions/A/Headers/MGMAbout.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
//
|
||||||
|
// MGMAbout.h
|
||||||
|
// MGMUsers
|
||||||
|
//
|
||||||
|
// Created by Mr. Gecko on 1/29/11.
|
||||||
|
// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Cocoa/Cocoa.h>
|
||||||
|
|
||||||
|
@interface MGMAbout : NSObject {
|
||||||
|
IBOutlet NSWindow *window;
|
||||||
|
IBOutlet NSImageView *iconView;
|
||||||
|
IBOutlet NSTextField *applicationField;
|
||||||
|
IBOutlet NSTextView *aboutView;
|
||||||
|
}
|
||||||
|
- (NSWindow *)window;
|
||||||
|
- (void)show;
|
||||||
|
@end
|
@ -0,0 +1,23 @@
|
|||||||
|
//
|
||||||
|
// MGMFileManager.h
|
||||||
|
// SoundNote
|
||||||
|
//
|
||||||
|
// Created by Mr. Gecko on 1/22/11.
|
||||||
|
// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
@interface NSFileManager (MGMFileManager)
|
||||||
|
- (BOOL)moveItemAtPath:(NSString *)thePath toPath:(NSString *)theDestination;
|
||||||
|
- (BOOL)copyItemAtPath:(NSString *)thePath toPath:(NSString *)theDestination;
|
||||||
|
- (BOOL)removeItemAtPath:(NSString *)thePath;
|
||||||
|
- (BOOL)linkItemAtPath:(NSString *)thePath toPath:(NSString *)theDestination;
|
||||||
|
- (BOOL)createDirectoryAtPath:(NSString *)thePath withAttributes:(NSDictionary *)theAttributes;
|
||||||
|
- (BOOL)createSymbolicLinkAtPath:(NSString *)thePath withDestinationPath:(NSString *)theDestination;
|
||||||
|
- (NSString *)destinationOfSymbolicLinkAtPath:(NSString *)thePath;
|
||||||
|
- (NSArray *)contentsOfDirectoryAtPath:(NSString *)thePath;
|
||||||
|
- (NSDictionary *)attributesOfFileSystemForPath:(NSString *)thePath;
|
||||||
|
- (void)setAttributes:(NSDictionary *)theAttributes ofItemAtPath:(NSString *)thePath;
|
||||||
|
- (NSDictionary *)attributesOfItemAtPath:(NSString *)thePath;
|
||||||
|
@end
|
58
Frameworks/MGMUsers.framework/Versions/A/Headers/MGMJSON.h
Normal file
58
Frameworks/MGMUsers.framework/Versions/A/Headers/MGMJSON.h
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
//
|
||||||
|
// MGMJSON.h
|
||||||
|
// MGMUsers
|
||||||
|
//
|
||||||
|
// Created by Mr. Gecko on 7/31/10.
|
||||||
|
// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
@interface NSString (MGMJSON)
|
||||||
|
- (id)parseJSON;
|
||||||
|
- (NSString *)JSONValue;
|
||||||
|
@end
|
||||||
|
@interface NSData (MGMJSON)
|
||||||
|
- (id)parseJSON;
|
||||||
|
@end
|
||||||
|
@interface NSNumber (MGMJSON)
|
||||||
|
- (NSString *)JSONValue;
|
||||||
|
@end
|
||||||
|
@interface NSNull (MGMJSON)
|
||||||
|
- (NSString *)JSONValue;
|
||||||
|
@end
|
||||||
|
@interface NSDictionary (MGMJSON)
|
||||||
|
- (NSString *)JSONValue;
|
||||||
|
@end
|
||||||
|
@interface NSArray (MGMJSON)
|
||||||
|
- (NSString *)JSONValue;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface MGMJSON : NSObject {
|
||||||
|
@private
|
||||||
|
NSMutableCharacterSet *escapeSet;
|
||||||
|
NSString *JSONString;
|
||||||
|
unsigned long position;
|
||||||
|
unsigned long length;
|
||||||
|
}
|
||||||
|
- (id)initWithString:(NSString *)theString;
|
||||||
|
- (id)parse;
|
||||||
|
- (void)skipWhitespace;
|
||||||
|
- (void)skipDigits;
|
||||||
|
- (id)parseForObject;
|
||||||
|
- (NSDictionary *)parseForDictionary;
|
||||||
|
- (NSArray *)parseForArray;
|
||||||
|
- (NSString *)parseForString;
|
||||||
|
- (unichar)parseForUnicodeChar;
|
||||||
|
- (NSNumber *)parseForYES;
|
||||||
|
- (id)parseForNONULL;
|
||||||
|
- (NSNumber *)parseForNumber;
|
||||||
|
|
||||||
|
- (NSString *)convert:(id)theObject;
|
||||||
|
- (NSString *)writeString:(NSString *)theString;
|
||||||
|
- (NSString *)writeNumber:(NSNumber *)theNumber;
|
||||||
|
- (NSString *)writeBool:(NSNumber *)theNumber;
|
||||||
|
- (NSString *)writeNull:(NSNull *)theNull;
|
||||||
|
- (NSString *)writeDictionary:(NSDictionary *)theDictionary;
|
||||||
|
- (NSString *)writeArray:(NSArray *)theArray;
|
||||||
|
@end
|
48
Frameworks/MGMUsers.framework/Versions/A/Headers/MGMMD5.h
Normal file
48
Frameworks/MGMUsers.framework/Versions/A/Headers/MGMMD5.h
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
//
|
||||||
|
// MGMMD5.h
|
||||||
|
//
|
||||||
|
// Created by Mr. Gecko <GRMrGecko@gmail.com> on 1/6/10.
|
||||||
|
// No Copyright Claimed. Public Domain.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef _MD_MD5
|
||||||
|
#define _MD_MD5
|
||||||
|
|
||||||
|
#ifdef __NEXT_RUNTIME__
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
|
||||||
|
extern NSString * const MDNMD5;
|
||||||
|
|
||||||
|
@interface NSString (MGMMD5)
|
||||||
|
- (NSString *)MD5;
|
||||||
|
- (NSString *)pathMD5;
|
||||||
|
@end
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
char *MD5String(const char *string, int length);
|
||||||
|
char *MD5File(const char *path);
|
||||||
|
|
||||||
|
#define MD5Length 16
|
||||||
|
#define MD5BufferSize 4
|
||||||
|
|
||||||
|
struct MD5Context {
|
||||||
|
uint32_t buf[MD5BufferSize];
|
||||||
|
uint32_t bits[2];
|
||||||
|
unsigned char in[64];
|
||||||
|
};
|
||||||
|
|
||||||
|
void MD5Init(struct MD5Context *context);
|
||||||
|
void MD5Update(struct MD5Context *context, const unsigned char *buf, unsigned len);
|
||||||
|
void MD5Final(unsigned char digest[MD5Length], struct MD5Context *context);
|
||||||
|
void MD5Transform(uint32_t buf[MD5BufferSize], const unsigned char inraw[64]);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,61 @@
|
|||||||
|
//
|
||||||
|
// MGMPreferences.h
|
||||||
|
// MGMUsers
|
||||||
|
//
|
||||||
|
// Created by Mr. Gecko on 7/27/10.
|
||||||
|
// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Cocoa/Cocoa.h>
|
||||||
|
|
||||||
|
@class MGMPreferencesPane;
|
||||||
|
|
||||||
|
@interface MGMPreferences : NSObject
|
||||||
|
#if (MAC_OS_X_VERSION_MAX_ALLOWED >= 1060)
|
||||||
|
<NSWindowDelegate, NSToolbarDelegate>
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
@private
|
||||||
|
NSWindow *preferencesWindow;
|
||||||
|
NSMutableArray *preferencesPanes;
|
||||||
|
MGMPreferencesPane *currentPane;
|
||||||
|
int defaultPane;
|
||||||
|
BOOL titleIsToolbar;
|
||||||
|
}
|
||||||
|
- (NSWindow *)preferencesWindow;
|
||||||
|
|
||||||
|
- (void)addPreferencesPaneClass:(Class)theClass;
|
||||||
|
- (void)removePreferencesPaneClass:(Class)theClass;
|
||||||
|
- (void)addPreferencesPaneClassName:(NSString *)theClass;
|
||||||
|
- (void)removePreferencesPaneClassName:(NSString *)theClass;
|
||||||
|
- (NSArray *)preferencesPanes;
|
||||||
|
- (void)setSelectedPaneIndex:(int)theIndex;
|
||||||
|
- (void)setupToolbar;
|
||||||
|
|
||||||
|
- (NSArray *)arrayForKey:(NSString *)theKey;
|
||||||
|
- (BOOL)boolForKey:(NSString *)theKey;
|
||||||
|
- (NSData *)dataForKey:(NSString *)theKey;
|
||||||
|
- (NSDictionary *)dictionaryForKey:(NSString *)theKey;
|
||||||
|
- (float)floatForKey:(NSString *)theKey;
|
||||||
|
- (int)integerForKey:(NSString *)theKey;
|
||||||
|
- (id)objectForKey:(NSString *)theKey;
|
||||||
|
- (NSArray *)stringArrayForKey:(NSString *)theKey;
|
||||||
|
- (NSString *)stringForKey:(NSString *)theKey;
|
||||||
|
- (double)doubleForKey:(NSString *)theKey;
|
||||||
|
|
||||||
|
- (void)setBool:(BOOL)theValue forKey:(NSString *)theKey;
|
||||||
|
- (void)setFloat:(float)theValue forKey:(NSString *)theKey;
|
||||||
|
- (void)setInteger:(int)theValue forKey:(NSString *)theKey;
|
||||||
|
- (void)setObject:(id)theValue forKey:(NSString *)theKey;
|
||||||
|
- (void)setDouble:(double)theValue forKey:(NSString *)theKey;
|
||||||
|
|
||||||
|
- (void)removeObjectForKey:(NSString *)theKey;
|
||||||
|
|
||||||
|
- (void)setupWindowForPane:(MGMPreferencesPane *)thePane animate:(BOOL)shouldAnimate;
|
||||||
|
- (void)showPreferences;
|
||||||
|
- (void)closePreferences;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface NSWindow (MGMToolbar)
|
||||||
|
- (NSSize)toolbarSize;
|
||||||
|
@end
|
@ -0,0 +1,29 @@
|
|||||||
|
//
|
||||||
|
// MGMPreferencesPane.h
|
||||||
|
// MGMUsers
|
||||||
|
//
|
||||||
|
// Created by Mr. Gecko on 7/27/10.
|
||||||
|
// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Cocoa/Cocoa.h>
|
||||||
|
|
||||||
|
@class MGMPreferences;
|
||||||
|
|
||||||
|
@interface MGMPreferencesPane : NSObject {
|
||||||
|
MGMPreferences *preferences;
|
||||||
|
@private
|
||||||
|
NSTextField *textField;
|
||||||
|
}
|
||||||
|
+ (id)paneWithPreferences:(MGMPreferences *)thePreferences;
|
||||||
|
- (id)initWithPreferences:(MGMPreferences *)thePreferences;
|
||||||
|
+ (void)setUpToolbarItem:(NSToolbarItem *)theItem;
|
||||||
|
+ (NSString *)title;
|
||||||
|
- (NSView *)preferencesView;
|
||||||
|
- (void)preferencesDisplayed;
|
||||||
|
- (BOOL)isResizable;
|
||||||
|
- (NSSize)viewSize;
|
||||||
|
- (NSSize)maxSize;
|
||||||
|
- (NSSize)minSize;
|
||||||
|
- (BOOL)preferencesWindowShouldClose;
|
||||||
|
@end
|
@ -0,0 +1,101 @@
|
|||||||
|
//
|
||||||
|
// MGMURLBasicHandler.h
|
||||||
|
// MGMUsers
|
||||||
|
//
|
||||||
|
// Created by Mr. Gecko on 2/21/11.
|
||||||
|
// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
@class MGMURLConnectionManager;
|
||||||
|
|
||||||
|
@interface MGMURLBasicHandler : NSObject {
|
||||||
|
MGMURLConnectionManager *manager;
|
||||||
|
NSURLConnection *connection;
|
||||||
|
NSMutableURLRequest *request;
|
||||||
|
NSHTTPURLResponse *response;
|
||||||
|
|
||||||
|
NSString *file;
|
||||||
|
NSFileHandle *fileHandle;
|
||||||
|
NSMutableData *dataBuffer;
|
||||||
|
|
||||||
|
unsigned long totalExpected;
|
||||||
|
unsigned long totalDownloaded;
|
||||||
|
|
||||||
|
id delegate;
|
||||||
|
SEL receiveResponse;
|
||||||
|
SEL sendRequest;
|
||||||
|
SEL bytesUploaded;
|
||||||
|
SEL bytesReceived;
|
||||||
|
SEL failWithError;
|
||||||
|
SEL finish;
|
||||||
|
BOOL invisible;
|
||||||
|
id object;
|
||||||
|
BOOL synchronous;
|
||||||
|
}
|
||||||
|
+ (id)handler;
|
||||||
|
+ (id)handlerWithRequest:(NSURLRequest *)theRequest delegate:(id)theDelegate;
|
||||||
|
- (id)initWithRequest:(NSURLRequest *)theRequest delegate:(id)theDelegate;
|
||||||
|
|
||||||
|
- (void)setDelegate:(id)theDelegate;
|
||||||
|
- (id)delegate;
|
||||||
|
// Arguments
|
||||||
|
// MGMURLBasicHandler *theHandler
|
||||||
|
// NSHTTPURLResponse *theResponse
|
||||||
|
// Default
|
||||||
|
// handler:didReceiveResponse:
|
||||||
|
- (void)setReceiveResponse:(SEL)didReceiveResponse;
|
||||||
|
- (SEL)receiveResponse;
|
||||||
|
// Arguments
|
||||||
|
// MGMURLBasicHandler *theHandler
|
||||||
|
// NSURLRequest *theRequest
|
||||||
|
// NSHTTPURLResponse *theResponse
|
||||||
|
// Return
|
||||||
|
// NSURLRequest *newRequest (nil for continue loading).
|
||||||
|
// Default
|
||||||
|
// handler:willSendRequest:redirectResponse:
|
||||||
|
- (void)setSendRequest:(SEL)willSendRequest;
|
||||||
|
- (SEL)sendRequest;
|
||||||
|
// Arguments
|
||||||
|
// MGMURLBasicHandler *theHandler
|
||||||
|
// unsigned long theBytes
|
||||||
|
// unsigned long theTotalBytes
|
||||||
|
// unsigned long theExpectedBytes
|
||||||
|
- (void)setBytesUploaded:(SEL)theBytesUploaded;
|
||||||
|
- (SEL)bytesUploaded;
|
||||||
|
// Arguments
|
||||||
|
// MGMURLBasicHandler *theHandler
|
||||||
|
// unsigned long theBytes
|
||||||
|
// unsigned long theTotalBytes
|
||||||
|
// unsigned long theExpectedBytes
|
||||||
|
- (void)setBytesReceived:(SEL)theBytesReceived;
|
||||||
|
- (SEL)bytesReceived;
|
||||||
|
// Arguments
|
||||||
|
// MGMURLBasicHandler *theHandler
|
||||||
|
// NSError *theError
|
||||||
|
// Default
|
||||||
|
// handler:didFailWithError:
|
||||||
|
- (void)setFailWithError:(SEL)didFailWithError;
|
||||||
|
- (SEL)failWithError;
|
||||||
|
// Arguments
|
||||||
|
// MGMURLBasicHandler *theHandler
|
||||||
|
// Default
|
||||||
|
// handlerDidFinish:
|
||||||
|
- (void)setFinish:(SEL)didFinish;
|
||||||
|
- (SEL)finish;
|
||||||
|
- (void)setInvisible:(BOOL)isInvisible;
|
||||||
|
- (BOOL)invisible;
|
||||||
|
- (void)setObject:(id)theObject;
|
||||||
|
- (id)object;
|
||||||
|
- (void)setSynchronous:(BOOL)isSynchronous;
|
||||||
|
- (BOOL)synchronous;
|
||||||
|
- (void)setFile:(NSString *)theFile;
|
||||||
|
- (NSString *)file;
|
||||||
|
|
||||||
|
- (void)setRequest:(NSURLRequest *)theRequest;
|
||||||
|
- (NSMutableURLRequest *)request;
|
||||||
|
- (NSHTTPURLResponse *)response;
|
||||||
|
- (NSData *)data;
|
||||||
|
- (NSString *)string;
|
||||||
|
@end
|
@ -0,0 +1,52 @@
|
|||||||
|
//
|
||||||
|
// MGMURLConnectionManager.h
|
||||||
|
// MGMUsers
|
||||||
|
//
|
||||||
|
// Created by Mr. Gecko on 2/21/11.
|
||||||
|
// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
@class MGMURLConnectionManager;
|
||||||
|
|
||||||
|
@protocol MGMURLConnectionHandler <NSObject>
|
||||||
|
- (void)setManager:(MGMURLConnectionManager *)theManager;
|
||||||
|
- (void)setConnection:(NSURLConnection *)theConnection;
|
||||||
|
- (NSURLConnection *)connection;
|
||||||
|
- (void)setRequest:(NSMutableURLRequest *)theRequest;
|
||||||
|
- (NSMutableURLRequest *)request;
|
||||||
|
- (BOOL)synchronous;
|
||||||
|
- (NSURLCredential *)credentailsForChallenge:(NSURLAuthenticationChallenge *)theChallenge;
|
||||||
|
- (void)uploaded:(unsigned long)theBytes totalBytes:(unsigned long)theTotalBytes totalBytesExpected:(unsigned long)theExpectedBytes;
|
||||||
|
- (NSURLRequest *)willSendRequest:(NSURLRequest *)theRequest redirectResponse:(NSHTTPURLResponse *)theResponse;
|
||||||
|
- (void)didReceiveResponse:(NSHTTPURLResponse *)theResponse;
|
||||||
|
- (void)didReceiveData:(NSData *)theData;
|
||||||
|
- (void)didFailWithError:(NSError *)theError;
|
||||||
|
- (void)didFinishLoading;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface MGMURLConnectionManager : NSObject {
|
||||||
|
NSHTTPCookieStorage *cookieStorage;
|
||||||
|
NSString *userAgent;
|
||||||
|
NSURLCredential *credentials;
|
||||||
|
NSMutableArray *handlers;
|
||||||
|
|
||||||
|
BOOL runningSynchronousConnection;
|
||||||
|
}
|
||||||
|
+ (id)manager;
|
||||||
|
+ (id)managerWithCookieStorage:(id)theCookieStorage;
|
||||||
|
- (id)initWithCookieStorage:(id)theCookieStorage;
|
||||||
|
|
||||||
|
- (void)setCookieStorage:(id)theCookieStorage;
|
||||||
|
- (NSHTTPCookieStorage *)cookieStorage;
|
||||||
|
- (void)setUserAgent:(NSString *)theUserAgent;
|
||||||
|
- (NSString *)userAgent;
|
||||||
|
- (void)setCredentials:(NSURLCredential *)theCredentials;
|
||||||
|
- (void)setUser:(NSString *)theUser password:(NSString *)thePassword;
|
||||||
|
- (NSURLCredential *)credentials;
|
||||||
|
|
||||||
|
- (void)addHandler:(id)theHandler;
|
||||||
|
- (void)cancelHandler:(id)theHandler;
|
||||||
|
- (void)cancelAll;
|
||||||
|
@end
|
25
Frameworks/MGMUsers.framework/Versions/A/Headers/MGMUsers.h
Normal file
25
Frameworks/MGMUsers.framework/Versions/A/Headers/MGMUsers.h
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
/*
|
||||||
|
* MGMUsers.h
|
||||||
|
* MGMUsers
|
||||||
|
*
|
||||||
|
* Created by Mr. Gecko on 4/14/10.
|
||||||
|
* Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if TARGET_OS_IPHONE
|
||||||
|
#import <MGMUsers/MGMURLConnectionManager.h>
|
||||||
|
#import <MGMUsers/MGMURLBasicHandler.h>
|
||||||
|
#import <MGMUsers/MGMFileManager.h>
|
||||||
|
#import <MGMUsers/MGMJSON.h>
|
||||||
|
#import <MGMUsers/MGMMD5.h>
|
||||||
|
#else
|
||||||
|
#import <MGMUsers/MGMURLConnectionManager.h>
|
||||||
|
#import <MGMUsers/MGMURLBasicHandler.h>
|
||||||
|
#import <MGMUsers/MGMFileManager.h>
|
||||||
|
#import <MGMUsers/MGMPreferences.h>
|
||||||
|
#import <MGMUsers/MGMPreferencesPane.h>
|
||||||
|
#import <MGMUsers/MGMAbout.h>
|
||||||
|
#import <MGMUsers/MGMJSON.h>
|
||||||
|
#import <MGMUsers/MGMMD5.h>
|
||||||
|
#endif
|
BIN
Frameworks/MGMUsers.framework/Versions/A/MGMUsers
Executable file
BIN
Frameworks/MGMUsers.framework/Versions/A/MGMUsers
Executable file
Binary file not shown.
Binary file not shown.
@ -0,0 +1,26 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
|
<string>English</string>
|
||||||
|
<key>CFBundleExecutable</key>
|
||||||
|
<string>MGMUsers</string>
|
||||||
|
<key>CFBundleIdentifier</key>
|
||||||
|
<string>com.MrGeckosMedia.MGMUsers</string>
|
||||||
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
|
<string>6.0</string>
|
||||||
|
<key>CFBundleName</key>
|
||||||
|
<string>MGMUsers</string>
|
||||||
|
<key>CFBundlePackageType</key>
|
||||||
|
<string>FMWK</string>
|
||||||
|
<key>CFBundleShortVersionString</key>
|
||||||
|
<string>1.0</string>
|
||||||
|
<key>CFBundleSignature</key>
|
||||||
|
<string>????</string>
|
||||||
|
<key>CFBundleVersion</key>
|
||||||
|
<string>1</string>
|
||||||
|
<key>NSHumanReadableCopyright</key>
|
||||||
|
<string>Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
BIN
Frameworks/MGMUsers.framework/Versions/A/Resources/aboutPane.nib
generated
Normal file
BIN
Frameworks/MGMUsers.framework/Versions/A/Resources/aboutPane.nib
generated
Normal file
Binary file not shown.
1
Frameworks/MGMUsers.framework/Versions/Current
Symbolic link
1
Frameworks/MGMUsers.framework/Versions/Current
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
A
|
1
Frameworks/Sparkle.framework/Headers
Symbolic link
1
Frameworks/Sparkle.framework/Headers
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
Versions/Current/Headers
|
1
Frameworks/Sparkle.framework/Resources
Symbolic link
1
Frameworks/Sparkle.framework/Resources
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
Versions/Current/Resources
|
1
Frameworks/Sparkle.framework/Sparkle
Symbolic link
1
Frameworks/Sparkle.framework/Sparkle
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
Versions/Current/Sparkle
|
36
Frameworks/Sparkle.framework/Versions/A/Headers/SUAppcast.h
Normal file
36
Frameworks/Sparkle.framework/Versions/A/Headers/SUAppcast.h
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
//
|
||||||
|
// SUAppcast.h
|
||||||
|
// Sparkle
|
||||||
|
//
|
||||||
|
// Created by Andy Matuschak on 3/12/06.
|
||||||
|
// Copyright 2006 Andy Matuschak. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef SUAPPCAST_H
|
||||||
|
#define SUAPPCAST_H
|
||||||
|
|
||||||
|
@class SUAppcastItem;
|
||||||
|
@interface SUAppcast : NSObject
|
||||||
|
{
|
||||||
|
@private
|
||||||
|
NSArray *items;
|
||||||
|
NSString *userAgentString;
|
||||||
|
id delegate;
|
||||||
|
NSString *downloadFilename;
|
||||||
|
NSURLDownload *download;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)fetchAppcastFromURL:(NSURL *)url;
|
||||||
|
- (void)setDelegate:delegate;
|
||||||
|
- (void)setUserAgentString:(NSString *)userAgentString;
|
||||||
|
|
||||||
|
- (NSArray *)items;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface NSObject (SUAppcastDelegate)
|
||||||
|
- (void)appcastDidFinishLoading:(SUAppcast *)appcast;
|
||||||
|
- (void)appcast:(SUAppcast *)appcast failedToLoadWithError:(NSError *)error;
|
||||||
|
@end
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,54 @@
|
|||||||
|
//
|
||||||
|
// SUAppcastItem.h
|
||||||
|
// Sparkle
|
||||||
|
//
|
||||||
|
// Created by Andy Matuschak on 3/12/06.
|
||||||
|
// Copyright 2006 Andy Matuschak. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef SUAPPCASTITEM_H
|
||||||
|
#define SUAPPCASTITEM_H
|
||||||
|
|
||||||
|
@interface SUAppcastItem : NSObject
|
||||||
|
{
|
||||||
|
@private
|
||||||
|
NSString *title;
|
||||||
|
NSDate *date;
|
||||||
|
NSString *itemDescription;
|
||||||
|
|
||||||
|
NSURL *releaseNotesURL;
|
||||||
|
|
||||||
|
NSString *DSASignature;
|
||||||
|
NSString *minimumSystemVersion;
|
||||||
|
|
||||||
|
NSURL *fileURL;
|
||||||
|
NSString *versionString;
|
||||||
|
NSString *displayVersionString;
|
||||||
|
|
||||||
|
NSDictionary *deltaUpdates;
|
||||||
|
|
||||||
|
NSDictionary *propertiesDictionary;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Initializes with data from a dictionary provided by the RSS class.
|
||||||
|
- initWithDictionary:(NSDictionary *)dict;
|
||||||
|
- initWithDictionary:(NSDictionary *)dict failureReason:(NSString**)error;
|
||||||
|
|
||||||
|
- (NSString *)title;
|
||||||
|
- (NSString *)versionString;
|
||||||
|
- (NSString *)displayVersionString;
|
||||||
|
- (NSDate *)date;
|
||||||
|
- (NSString *)itemDescription;
|
||||||
|
- (NSURL *)releaseNotesURL;
|
||||||
|
- (NSURL *)fileURL;
|
||||||
|
- (NSString *)DSASignature;
|
||||||
|
- (NSString *)minimumSystemVersion;
|
||||||
|
- (NSDictionary *)deltaUpdates;
|
||||||
|
- (BOOL)isDeltaUpdate;
|
||||||
|
|
||||||
|
// Returns the dictionary provided in initWithDictionary; this might be useful later for extensions.
|
||||||
|
- (NSDictionary *)propertiesDictionary;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
#endif
|
126
Frameworks/Sparkle.framework/Versions/A/Headers/SUUpdater.h
Normal file
126
Frameworks/Sparkle.framework/Versions/A/Headers/SUUpdater.h
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
//
|
||||||
|
// SUUpdater.h
|
||||||
|
// Sparkle
|
||||||
|
//
|
||||||
|
// Created by Andy Matuschak on 1/4/06.
|
||||||
|
// Copyright 2006 Andy Matuschak. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef SUUPDATER_H
|
||||||
|
#define SUUPDATER_H
|
||||||
|
|
||||||
|
#import <Sparkle/SUVersionComparisonProtocol.h>
|
||||||
|
|
||||||
|
@class SUUpdateDriver, SUAppcastItem, SUHost, SUAppcast;
|
||||||
|
@interface SUUpdater : NSObject
|
||||||
|
{
|
||||||
|
@private
|
||||||
|
NSTimer *checkTimer;
|
||||||
|
SUUpdateDriver *driver;
|
||||||
|
|
||||||
|
NSString *customUserAgentString;
|
||||||
|
SUHost *host;
|
||||||
|
IBOutlet id delegate;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (SUUpdater *)sharedUpdater;
|
||||||
|
+ (SUUpdater *)updaterForBundle:(NSBundle *)bundle;
|
||||||
|
- initForBundle:(NSBundle *)bundle;
|
||||||
|
|
||||||
|
- (NSBundle *)hostBundle;
|
||||||
|
|
||||||
|
- (void)setDelegate:(id)delegate;
|
||||||
|
- delegate;
|
||||||
|
|
||||||
|
- (void)setAutomaticallyChecksForUpdates:(BOOL)automaticallyChecks;
|
||||||
|
- (BOOL)automaticallyChecksForUpdates;
|
||||||
|
|
||||||
|
- (void)setUpdateCheckInterval:(NSTimeInterval)interval;
|
||||||
|
- (NSTimeInterval)updateCheckInterval;
|
||||||
|
|
||||||
|
- (void)setFeedURL:(NSURL *)feedURL;
|
||||||
|
- (NSURL *)feedURL;
|
||||||
|
|
||||||
|
- (void)setUserAgentString:(NSString *)userAgent;
|
||||||
|
- (NSString *)userAgentString;
|
||||||
|
|
||||||
|
- (void)setSendsSystemProfile:(BOOL)sendsSystemProfile;
|
||||||
|
- (BOOL)sendsSystemProfile;
|
||||||
|
|
||||||
|
- (void)setAutomaticallyDownloadsUpdates:(BOOL)automaticallyDownloadsUpdates;
|
||||||
|
- (BOOL)automaticallyDownloadsUpdates;
|
||||||
|
|
||||||
|
// This IBAction is meant for a main menu item. Hook up any menu item to this action,
|
||||||
|
// and Sparkle will check for updates and report back its findings verbosely.
|
||||||
|
- (IBAction)checkForUpdates:sender;
|
||||||
|
|
||||||
|
// This kicks off an update meant to be programmatically initiated. That is, it will display no UI unless it actually finds an update,
|
||||||
|
// in which case it proceeds as usual. If the fully automated updating is turned on, however, this will invoke that behavior, and if an
|
||||||
|
// update is found, it will be downloaded and prepped for installation.
|
||||||
|
- (void)checkForUpdatesInBackground;
|
||||||
|
|
||||||
|
// Date of last update check. Returns null if no check has been performed.
|
||||||
|
- (NSDate*)lastUpdateCheckDate;
|
||||||
|
|
||||||
|
// This begins a "probing" check for updates which will not actually offer to update to that version. The delegate methods, though,
|
||||||
|
// (up to updater:didFindValidUpdate: and updaterDidNotFindUpdate:), are called, so you can use that information in your UI.
|
||||||
|
- (void)checkForUpdateInformation;
|
||||||
|
|
||||||
|
// Call this to appropriately schedule or cancel the update checking timer according to the preferences for time interval and automatic checks. This call does not change the date of the next check, but only the internal NSTimer.
|
||||||
|
- (void)resetUpdateCycle;
|
||||||
|
|
||||||
|
- (BOOL)updateInProgress;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface NSObject (SUUpdaterDelegateInformalProtocol)
|
||||||
|
// This method allows you to add extra parameters to the appcast URL, potentially based on whether or not Sparkle will also be sending along the system profile. This method should return an array of dictionaries with keys: "key", "value", "displayKey", "displayValue", the latter two being specifically for display to the user.
|
||||||
|
- (NSArray *)feedParametersForUpdater:(SUUpdater *)updater sendingSystemProfile:(BOOL)sendingProfile;
|
||||||
|
|
||||||
|
// Use this to override the default behavior for Sparkle prompting the user about automatic update checks.
|
||||||
|
- (BOOL)updaterShouldPromptForPermissionToCheckForUpdates:(SUUpdater *)bundle;
|
||||||
|
|
||||||
|
// Implement this if you want to do some special handling with the appcast once it finishes loading.
|
||||||
|
- (void)updater:(SUUpdater *)updater didFinishLoadingAppcast:(SUAppcast *)appcast;
|
||||||
|
|
||||||
|
// If you're using special logic or extensions in your appcast, implement this to use your own logic for finding
|
||||||
|
// a valid update, if any, in the given appcast.
|
||||||
|
- (SUAppcastItem *)bestValidUpdateInAppcast:(SUAppcast *)appcast forUpdater:(SUUpdater *)bundle;
|
||||||
|
|
||||||
|
// Sent when a valid update is found by the update driver.
|
||||||
|
- (void)updater:(SUUpdater *)updater didFindValidUpdate:(SUAppcastItem *)update;
|
||||||
|
|
||||||
|
// Sent when a valid update is not found.
|
||||||
|
- (void)updaterDidNotFindUpdate:(SUUpdater *)update;
|
||||||
|
|
||||||
|
// Sent immediately before installing the specified update.
|
||||||
|
- (void)updater:(SUUpdater *)updater willInstallUpdate:(SUAppcastItem *)update;
|
||||||
|
|
||||||
|
// Return YES to delay the relaunch until you do some processing; invoke the given NSInvocation to continue.
|
||||||
|
- (BOOL)updater:(SUUpdater *)updater shouldPostponeRelaunchForUpdate:(SUAppcastItem *)update untilInvoking:(NSInvocation *)invocation;
|
||||||
|
|
||||||
|
// Called immediately before relaunching.
|
||||||
|
- (void)updaterWillRelaunchApplication:(SUUpdater *)updater;
|
||||||
|
|
||||||
|
// This method allows you to provide a custom version comparator.
|
||||||
|
// If you don't implement this method or return nil, the standard version comparator will be used.
|
||||||
|
- (id <SUVersionComparison>)versionComparatorForUpdater:(SUUpdater *)updater;
|
||||||
|
|
||||||
|
// Returns the path which is used to relaunch the client after the update is installed. By default, the path of the host bundle.
|
||||||
|
- (NSString *)pathToRelaunchForUpdater:(SUUpdater *)updater;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
// Define some minimum intervals to avoid DOS-like checking attacks. These are in seconds.
|
||||||
|
#ifdef DEBUG
|
||||||
|
#define SU_MIN_CHECK_INTERVAL 60
|
||||||
|
#else
|
||||||
|
#define SU_MIN_CHECK_INTERVAL 60*60
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
#define SU_DEFAULT_CHECK_INTERVAL 60
|
||||||
|
#else
|
||||||
|
#define SU_DEFAULT_CHECK_INTERVAL 60*60*24
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,27 @@
|
|||||||
|
//
|
||||||
|
// SUVersionComparisonProtocol.h
|
||||||
|
// Sparkle
|
||||||
|
//
|
||||||
|
// Created by Andy Matuschak on 12/21/07.
|
||||||
|
// Copyright 2007 Andy Matuschak. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef SUVERSIONCOMPARISONPROTOCOL_H
|
||||||
|
#define SUVERSIONCOMPARISONPROTOCOL_H
|
||||||
|
|
||||||
|
/*!
|
||||||
|
@protocol
|
||||||
|
@abstract Implement this protocol to provide version comparison facilities for Sparkle.
|
||||||
|
*/
|
||||||
|
@protocol SUVersionComparison
|
||||||
|
|
||||||
|
/*!
|
||||||
|
@method
|
||||||
|
@abstract An abstract method to compare two version strings.
|
||||||
|
@discussion Should return NSOrderedAscending if b > a, NSOrderedDescending if b < a, and NSOrderedSame if they are equivalent.
|
||||||
|
*/
|
||||||
|
- (NSComparisonResult)compareVersion:(NSString *)versionA toVersion:(NSString *)versionB;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
#endif
|
21
Frameworks/Sparkle.framework/Versions/A/Headers/Sparkle.h
Normal file
21
Frameworks/Sparkle.framework/Versions/A/Headers/Sparkle.h
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
//
|
||||||
|
// Sparkle.h
|
||||||
|
// Sparkle
|
||||||
|
//
|
||||||
|
// Created by Andy Matuschak on 3/16/06. (Modified by CDHW on 23/12/07)
|
||||||
|
// Copyright 2006 Andy Matuschak. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef SPARKLE_H
|
||||||
|
#define SPARKLE_H
|
||||||
|
|
||||||
|
// This list should include the shared headers. It doesn't matter if some of them aren't shared (unless
|
||||||
|
// there are name-space collisions) so we can list all of them to start with:
|
||||||
|
|
||||||
|
#import <Sparkle/SUUpdater.h>
|
||||||
|
|
||||||
|
#import <Sparkle/SUAppcast.h>
|
||||||
|
#import <Sparkle/SUAppcastItem.h>
|
||||||
|
#import <Sparkle/SUVersionComparisonProtocol.h>
|
||||||
|
|
||||||
|
#endif
|
24
Frameworks/Sparkle.framework/Versions/A/Resources/Info.plist
Normal file
24
Frameworks/Sparkle.framework/Versions/A/Resources/Info.plist
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
|
<string>en</string>
|
||||||
|
<key>CFBundleExecutable</key>
|
||||||
|
<string>Sparkle</string>
|
||||||
|
<key>CFBundleIdentifier</key>
|
||||||
|
<string>org.andymatuschak.Sparkle</string>
|
||||||
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
|
<string>6.0</string>
|
||||||
|
<key>CFBundleName</key>
|
||||||
|
<string>Sparkle</string>
|
||||||
|
<key>CFBundlePackageType</key>
|
||||||
|
<string>FMWK</string>
|
||||||
|
<key>CFBundleShortVersionString</key>
|
||||||
|
<string>1.5 Beta (git)</string>
|
||||||
|
<key>CFBundleSignature</key>
|
||||||
|
<string>????</string>
|
||||||
|
<key>CFBundleVersion</key>
|
||||||
|
<string>7baf505</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
153
Frameworks/Sparkle.framework/Versions/A/Resources/License.txt
Normal file
153
Frameworks/Sparkle.framework/Versions/A/Resources/License.txt
Normal file
@ -0,0 +1,153 @@
|
|||||||
|
Copyright (c) 2006 Andy Matuschak
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
=================
|
||||||
|
EXTERNAL LICENSES
|
||||||
|
=================
|
||||||
|
|
||||||
|
This project uses software developed by the OpenSSL Project for use in the OpenSSL
|
||||||
|
Toolkit (http://www.openssl.org). This toolkit is licensed as follows:
|
||||||
|
/* ====================================================================
|
||||||
|
* Copyright (c) 1998-2005 The OpenSSL Project. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modiÞcation, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* 3. All advertising materials mentioning features or use of this
|
||||||
|
* software must display the following acknowledgment:
|
||||||
|
* ÒThis product includes software developed by the OpenSSL Project
|
||||||
|
* for use in the OpenSSL Toolkit. (http://www.openssl.org/)Ó
|
||||||
|
*
|
||||||
|
* 4. The names ÒOpenSSL ToolkitÓ and ÒOpenSSL ProjectÓ must not be used to
|
||||||
|
* endorse or promote products derived from this software without
|
||||||
|
* prior written permission. For written permission, please contact
|
||||||
|
* openssl-core@openssl.org.
|
||||||
|
*
|
||||||
|
* 5. Products derived from this software may not be called ÒOpenSSLÓ
|
||||||
|
* nor may ÒOpenSSLÓ appear in their names without prior written
|
||||||
|
* permission of the OpenSSL Project.
|
||||||
|
*
|
||||||
|
* 6. Redistributions of any form whatsoever must retain the following
|
||||||
|
|
||||||
|
* acknowledgment:
|
||||||
|
* ÒThis product includes software developed by the OpenSSL Project
|
||||||
|
* for use in the OpenSSL Toolkit (http://www.openssl.org/)Ó
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS ISÕÕ AND ANY
|
||||||
|
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
||||||
|
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||||
|
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
* ====================================================================
|
||||||
|
*
|
||||||
|
* This product includes cryptographic software written by Eric Young
|
||||||
|
* (eay@cryptsoft.com). This product includes software written by Tim
|
||||||
|
* Hudson (tjh@cryptsoft.com).
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
Original SSLeay License
|
||||||
|
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This package is an SSL implementation written
|
||||||
|
* by Eric Young (eay@cryptsoft.com).
|
||||||
|
* The implementation was written so as to conform with Netscapes SSL.
|
||||||
|
*
|
||||||
|
* This library is free for commercial and non-commercial use as long as
|
||||||
|
* the following conditions are aheared to. The following conditions
|
||||||
|
* apply to all code found in this distribution, be it the RC4, RSA,
|
||||||
|
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
||||||
|
* included with this distribution is covered by the same copyright terms
|
||||||
|
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
||||||
|
*
|
||||||
|
* Copyright remains Eric YoungÕs, and as such any Copyright notices in
|
||||||
|
* the code are not to be removed.
|
||||||
|
* If this package is used in a product, Eric Young should be given attribution
|
||||||
|
* as the author of the parts of the library used.
|
||||||
|
* This can be in the form of a textual message at program startup or
|
||||||
|
* in documentation (online or textual) provided with the package.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modiÞcation, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* 3. All advertising materials mentioning features or use of this software
|
||||||
|
* must display the following acknowledgement:
|
||||||
|
* ÒThis product includes cryptographic software written by
|
||||||
|
* Eric Young (eay@cryptsoft.com)Ó
|
||||||
|
* The word ÔcryptographicÕ can be left out if the rouines from the library
|
||||||
|
* being used are not cryptographic related :-).
|
||||||
|
* 4. If you include any Windows speciÞc code (or a derivative thereof) from
|
||||||
|
* the apps directory (application code) you must include an acknowledgement:
|
||||||
|
* ÒThis product includes software written by Tim Hudson (tjh@cryptsoft.com)Ó
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS ISÕÕ AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* The licence and distribution terms for any publically available version or
|
||||||
|
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
||||||
|
* copied and put under another distribution licence
|
||||||
|
* [including the GNU Public Licence.]
|
||||||
|
*/
|
||||||
|
|
||||||
|
License for bspatch.c and bsdiff.c, from bsdiff 4.3 (<http://www.daemonology.net/bsdiff/>:
|
||||||
|
/*-
|
||||||
|
* Copyright 2003-2005 Colin Percival
|
||||||
|
* All rights reserved
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted providing that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||||
|
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
||||||
|
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||||
|
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
@ -0,0 +1,174 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>ADP2,1</key>
|
||||||
|
<string>Developer Transition Kit</string>
|
||||||
|
<key>MacBook1,1</key>
|
||||||
|
<string>MacBook (Core Duo)</string>
|
||||||
|
<key>MacBook2,1</key>
|
||||||
|
<string>MacBook (Core 2 Duo)</string>
|
||||||
|
<key>MacBook4,1</key>
|
||||||
|
<string>MacBook (Core 2 Duo Feb 2008)</string>
|
||||||
|
<key>MacBookAir1,1</key>
|
||||||
|
<string>MacBook Air (January 2008)</string>
|
||||||
|
<key>MacBookPro1,1</key>
|
||||||
|
<string>MacBook Pro Core Duo (15-inch)</string>
|
||||||
|
<key>MacBookPro1,2</key>
|
||||||
|
<string>MacBook Pro Core Duo (17-inch)</string>
|
||||||
|
<key>MacBookPro2,1</key>
|
||||||
|
<string>MacBook Pro Core 2 Duo (17-inch)</string>
|
||||||
|
<key>MacBookPro2,2</key>
|
||||||
|
<string>MacBook Pro Core 2 Duo (15-inch)</string>
|
||||||
|
<key>MacBookPro3,1</key>
|
||||||
|
<string>MacBook Pro Core 2 Duo (15-inch LED, Core 2 Duo)</string>
|
||||||
|
<key>MacBookPro3,2</key>
|
||||||
|
<string>MacBook Pro Core 2 Duo (17-inch HD, Core 2 Duo)</string>
|
||||||
|
<key>MacBookPro4,1</key>
|
||||||
|
<string>MacBook Pro (Core 2 Duo Feb 2008)</string>
|
||||||
|
<key>MacPro1,1</key>
|
||||||
|
<string>Mac Pro (four-core)</string>
|
||||||
|
<key>MacPro2,1</key>
|
||||||
|
<string>Mac Pro (eight-core)</string>
|
||||||
|
<key>MacPro3,1</key>
|
||||||
|
<string>Mac Pro (January 2008 4- or 8- core "Harpertown")</string>
|
||||||
|
<key>Macmini1,1</key>
|
||||||
|
<string>Mac Mini (Core Solo/Duo)</string>
|
||||||
|
<key>PowerBook1,1</key>
|
||||||
|
<string>PowerBook G3</string>
|
||||||
|
<key>PowerBook2,1</key>
|
||||||
|
<string>iBook G3</string>
|
||||||
|
<key>PowerBook2,2</key>
|
||||||
|
<string>iBook G3 (FireWire)</string>
|
||||||
|
<key>PowerBook2,3</key>
|
||||||
|
<string>iBook G3</string>
|
||||||
|
<key>PowerBook2,4</key>
|
||||||
|
<string>iBook G3</string>
|
||||||
|
<key>PowerBook3,1</key>
|
||||||
|
<string>PowerBook G3 (FireWire)</string>
|
||||||
|
<key>PowerBook3,2</key>
|
||||||
|
<string>PowerBook G4</string>
|
||||||
|
<key>PowerBook3,3</key>
|
||||||
|
<string>PowerBook G4 (Gigabit Ethernet)</string>
|
||||||
|
<key>PowerBook3,4</key>
|
||||||
|
<string>PowerBook G4 (DVI)</string>
|
||||||
|
<key>PowerBook3,5</key>
|
||||||
|
<string>PowerBook G4 (1GHz / 867MHz)</string>
|
||||||
|
<key>PowerBook4,1</key>
|
||||||
|
<string>iBook G3 (Dual USB, Late 2001)</string>
|
||||||
|
<key>PowerBook4,2</key>
|
||||||
|
<string>iBook G3 (16MB VRAM)</string>
|
||||||
|
<key>PowerBook4,3</key>
|
||||||
|
<string>iBook G3 Opaque 16MB VRAM, 32MB VRAM, Early 2003)</string>
|
||||||
|
<key>PowerBook5,1</key>
|
||||||
|
<string>PowerBook G4 (17 inch)</string>
|
||||||
|
<key>PowerBook5,2</key>
|
||||||
|
<string>PowerBook G4 (15 inch FW 800)</string>
|
||||||
|
<key>PowerBook5,3</key>
|
||||||
|
<string>PowerBook G4 (17-inch 1.33GHz)</string>
|
||||||
|
<key>PowerBook5,4</key>
|
||||||
|
<string>PowerBook G4 (15 inch 1.5/1.33GHz)</string>
|
||||||
|
<key>PowerBook5,5</key>
|
||||||
|
<string>PowerBook G4 (17-inch 1.5GHz)</string>
|
||||||
|
<key>PowerBook5,6</key>
|
||||||
|
<string>PowerBook G4 (15 inch 1.67GHz/1.5GHz)</string>
|
||||||
|
<key>PowerBook5,7</key>
|
||||||
|
<string>PowerBook G4 (17-inch 1.67GHz)</string>
|
||||||
|
<key>PowerBook5,8</key>
|
||||||
|
<string>PowerBook G4 (Double layer SD, 15 inch)</string>
|
||||||
|
<key>PowerBook5,9</key>
|
||||||
|
<string>PowerBook G4 (Double layer SD, 17 inch)</string>
|
||||||
|
<key>PowerBook6,1</key>
|
||||||
|
<string>PowerBook G4 (12 inch)</string>
|
||||||
|
<key>PowerBook6,2</key>
|
||||||
|
<string>PowerBook G4 (12 inch, DVI)</string>
|
||||||
|
<key>PowerBook6,3</key>
|
||||||
|
<string>iBook G4</string>
|
||||||
|
<key>PowerBook6,4</key>
|
||||||
|
<string>PowerBook G4 (12 inch 1.33GHz)</string>
|
||||||
|
<key>PowerBook6,5</key>
|
||||||
|
<string>iBook G4 (Early-Late 2004)</string>
|
||||||
|
<key>PowerBook6,7</key>
|
||||||
|
<string>iBook G4 (Mid 2005)</string>
|
||||||
|
<key>PowerBook6,8</key>
|
||||||
|
<string>PowerBook G4 (12 inch 1.5GHz)</string>
|
||||||
|
<key>PowerMac1,1</key>
|
||||||
|
<string>Power Macintosh G3 (Blue & White)</string>
|
||||||
|
<key>PowerMac1,2</key>
|
||||||
|
<string>Power Macintosh G4 (PCI Graphics)</string>
|
||||||
|
<key>PowerMac10,1</key>
|
||||||
|
<string>Mac Mini G4</string>
|
||||||
|
<key>PowerMac10,2</key>
|
||||||
|
<string>Mac Mini (Late 2005)</string>
|
||||||
|
<key>PowerMac11,2</key>
|
||||||
|
<string>Power Macintosh G5 (Late 2005)</string>
|
||||||
|
<key>PowerMac12,1</key>
|
||||||
|
<string>iMac G5 (iSight)</string>
|
||||||
|
<key>PowerMac2,1</key>
|
||||||
|
<string>iMac G3 (Slot-loading CD-ROM)</string>
|
||||||
|
<key>PowerMac2,2</key>
|
||||||
|
<string>iMac G3 (Summer 2000)</string>
|
||||||
|
<key>PowerMac3,1</key>
|
||||||
|
<string>Power Macintosh G4 (AGP Graphics)</string>
|
||||||
|
<key>PowerMac3,2</key>
|
||||||
|
<string>Power Macintosh G4 (AGP Graphics)</string>
|
||||||
|
<key>PowerMac3,3</key>
|
||||||
|
<string>Power Macintosh G4 (Gigabit Ethernet)</string>
|
||||||
|
<key>PowerMac3,4</key>
|
||||||
|
<string>Power Macintosh G4 (Digital Audio)</string>
|
||||||
|
<key>PowerMac3,5</key>
|
||||||
|
<string>Power Macintosh G4 (Quick Silver)</string>
|
||||||
|
<key>PowerMac3,6</key>
|
||||||
|
<string>Power Macintosh G4 (Mirrored Drive Door)</string>
|
||||||
|
<key>PowerMac4,1</key>
|
||||||
|
<string>iMac G3 (Early/Summer 2001)</string>
|
||||||
|
<key>PowerMac4,2</key>
|
||||||
|
<string>iMac G4 (Flat Panel)</string>
|
||||||
|
<key>PowerMac4,4</key>
|
||||||
|
<string>eMac</string>
|
||||||
|
<key>PowerMac4,5</key>
|
||||||
|
<string>iMac G4 (17-inch Flat Panel)</string>
|
||||||
|
<key>PowerMac5,1</key>
|
||||||
|
<string>Power Macintosh G4 Cube</string>
|
||||||
|
<key>PowerMac6,1</key>
|
||||||
|
<string>iMac G4 (USB 2.0)</string>
|
||||||
|
<key>PowerMac6,3</key>
|
||||||
|
<string>iMac G4 (20-inch Flat Panel)</string>
|
||||||
|
<key>PowerMac6,4</key>
|
||||||
|
<string>eMac (USB 2.0, 2005)</string>
|
||||||
|
<key>PowerMac7,2</key>
|
||||||
|
<string>Power Macintosh G5</string>
|
||||||
|
<key>PowerMac7,3</key>
|
||||||
|
<string>Power Macintosh G5</string>
|
||||||
|
<key>PowerMac8,1</key>
|
||||||
|
<string>iMac G5</string>
|
||||||
|
<key>PowerMac8,2</key>
|
||||||
|
<string>iMac G5 (Ambient Light Sensor)</string>
|
||||||
|
<key>PowerMac9,1</key>
|
||||||
|
<string>Power Macintosh G5 (Late 2005)</string>
|
||||||
|
<key>RackMac1,1</key>
|
||||||
|
<string>Xserve G4</string>
|
||||||
|
<key>RackMac1,2</key>
|
||||||
|
<string>Xserve G4 (slot-loading, cluster node)</string>
|
||||||
|
<key>RackMac3,1</key>
|
||||||
|
<string>Xserve G5</string>
|
||||||
|
<key>Xserve1,1</key>
|
||||||
|
<string>Xserve (Intel Xeon)</string>
|
||||||
|
<key>Xserve2,1</key>
|
||||||
|
<string>Xserve (January 2008 quad-core)</string>
|
||||||
|
<key>iMac1,1</key>
|
||||||
|
<string>iMac G3 (Rev A-D)</string>
|
||||||
|
<key>iMac4,1</key>
|
||||||
|
<string>iMac (Core Duo)</string>
|
||||||
|
<key>iMac4,2</key>
|
||||||
|
<string>iMac for Education (17-inch, Core Duo)</string>
|
||||||
|
<key>iMac5,1</key>
|
||||||
|
<string>iMac (Core 2 Duo, 17 or 20 inch, SuperDrive)</string>
|
||||||
|
<key>iMac5,2</key>
|
||||||
|
<string>iMac (Core 2 Duo, 17 inch, Combo Drive)</string>
|
||||||
|
<key>iMac6,1</key>
|
||||||
|
<string>iMac (Core 2 Duo, 24 inch, SuperDrive)</string>
|
||||||
|
<key>iMac8,1</key>
|
||||||
|
<string>iMac (April 2008)</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
BIN
Frameworks/Sparkle.framework/Versions/A/Resources/SUStatus.nib
generated
Normal file
BIN
Frameworks/Sparkle.framework/Versions/A/Resources/SUStatus.nib
generated
Normal file
Binary file not shown.
BIN
Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib
generated
Normal file
BIN
Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib
generated
Normal file
Binary file not shown.
BIN
Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdateAlert.nib
generated
Normal file
BIN
Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdateAlert.nib
generated
Normal file
Binary file not shown.
BIN
Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdatePermissionPrompt.nib
generated
Normal file
BIN
Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdatePermissionPrompt.nib
generated
Normal file
Binary file not shown.
Binary file not shown.
BIN
Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib
generated
Normal file
BIN
Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib
generated
Normal file
Binary file not shown.
BIN
Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.nib
generated
Normal file
BIN
Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.nib
generated
Normal file
Binary file not shown.
BIN
Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdatePermissionPrompt.nib
generated
Normal file
BIN
Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdatePermissionPrompt.nib
generated
Normal file
Binary file not shown.
Binary file not shown.
BIN
Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib
generated
Normal file
BIN
Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib
generated
Normal file
Binary file not shown.
BIN
Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib
generated
Normal file
BIN
Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib
generated
Normal file
Binary file not shown.
BIN
Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.nib
generated
Normal file
BIN
Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.nib
generated
Normal file
Binary file not shown.
Binary file not shown.
BIN
Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib
generated
Normal file
BIN
Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib
generated
Normal file
Binary file not shown.
BIN
Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib
generated
Normal file
BIN
Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib
generated
Normal file
Binary file not shown.
BIN
Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib
generated
Normal file
BIN
Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib
generated
Normal file
Binary file not shown.
Binary file not shown.
BIN
Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib
generated
Normal file
BIN
Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib
generated
Normal file
Binary file not shown.
BIN
Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib
generated
Normal file
BIN
Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib
generated
Normal file
Binary file not shown.
BIN
Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.nib
generated
Normal file
BIN
Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.nib
generated
Normal file
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user