diff options
author | Jay Freeman (saurik) <saurik@saurik.com> | 2017-03-04 21:52:46 -0800 |
---|---|---|
committer | Jay Freeman (saurik) <saurik@saurik.com> | 2017-03-04 21:52:46 -0800 |
commit | f4f6714a329bf399840b3f9991b310bd17f7bed6 (patch) | |
tree | 63f2758b6de741020dcca8abe0d55146a4dfeddf /CyteKit/extern.mm | |
parent | 8511eb452e6188051960d2d96473a7810f85f5f2 (diff) |
Try removing constructor (this is so annoying :/).
Diffstat (limited to 'CyteKit/extern.mm')
-rw-r--r-- | CyteKit/extern.mm | 49 |
1 files changed, 47 insertions, 2 deletions
diff --git a/CyteKit/extern.mm b/CyteKit/extern.mm index cb8927a..aad3626 100644 --- a/CyteKit/extern.mm +++ b/CyteKit/extern.mm @@ -19,14 +19,25 @@ **/ /* }}} */ +#include <CyteKit/UCPlatform.h> + +#include <CyteKit/RegEx.hpp> +#include <CyteKit/WebViewController.h> #include <CyteKit/extern.h> #include <SystemConfiguration/SystemConfiguration.h> #include <UIKit/UIKit.h> +#include <sys/sysctl.h> + +#include <Menes/ObjectHandle.h> + bool IsWildcat_; CGFloat ScreenScale_; +char *Machine_; +const char *System_; + bool CyteIsReachable(const char *name) { SCNetworkReachabilityFlags flags; { SCNetworkReachabilityRef reachability(SCNetworkReachabilityCreateWithName(kCFAllocatorDefault, name)); @@ -47,8 +58,7 @@ bool CyteIsReachable(const char *name) { ; } -__attribute__((__constructor__)) -void CyteKit_extern() { +void CyteInitialize(NSString *app, NSString *version) { UIScreen *screen([UIScreen mainScreen]); if ([screen respondsToSelector:@selector(scale)]) ScreenScale_ = [screen scale]; @@ -61,4 +71,39 @@ void CyteKit_extern() { if (idiom == UIUserInterfaceIdiomPad) IsWildcat_ = true; } + + size_t size; + + sysctlbyname("kern.osversion", NULL, &size, NULL, 0); + char *osversion = new char[size]; + if (sysctlbyname("kern.osversion", osversion, &size, NULL, 0) == -1) + perror("sysctlbyname(\"kern.osversion\", ?)"); + else + System_ = osversion; + + sysctlbyname("hw.machine", NULL, &size, NULL, 0); + char *machine = new char[size]; + if (sysctlbyname("hw.machine", machine, &size, NULL, 0) == -1) + perror("sysctlbyname(\"hw.machine\", ?)"); + else + Machine_ = machine; + + _H<NSString> product; + _H<NSString> safari; + + if (NSDictionary *info = [NSDictionary dictionaryWithContentsOfFile:@"/Applications/MobileSafari.app/Info.plist"]) { + product = [info objectForKey:@"SafariProductVersion"] ?: [info objectForKey:@"CFBundleShortVersionString"]; + safari = [info objectForKey:@"CFBundleVersion"]; + } + + NSString *agent([NSString stringWithFormat:@"%@/%@ CyF/%.2f", app, version, kCFCoreFoundationVersionNumber]); + + if (RegEx match = RegEx("([0-9]+(\\.[0-9]+)+).*", safari)) + agent = [NSString stringWithFormat:@"Safari/%@ %@", match[1], agent]; + if (RegEx match = RegEx("([0-9]+[A-Z][0-9]+[a-z]?).*", System_)) + agent = [NSString stringWithFormat:@"Mobile/%@ %@", match[1], agent]; + if (RegEx match = RegEx("([0-9]+(\\.[0-9]+)+).*", product)) + agent = [NSString stringWithFormat:@"Version/%@ %@", match[1], agent]; + + [CyteWebViewController setApplicationNameForUserAgent:agent]; } |