From d3a98cf6cbc3bd0b9efc570f58e8812c03931c18 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Tue, 16 Oct 2018 10:08:48 +0200 Subject: Original 5.40 --- OSX/textclient-ios.m | 129 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 OSX/textclient-ios.m (limited to 'OSX/textclient-ios.m') diff --git a/OSX/textclient-ios.m b/OSX/textclient-ios.m new file mode 100644 index 0000000..5db5311 --- /dev/null +++ b/OSX/textclient-ios.m @@ -0,0 +1,129 @@ +/* xscreensaver, Copyright (c) 2012-2016 Jamie Zawinski + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation. No representations are made about the suitability of this + * software for any purpose. It is provided "as is" without express or + * implied warranty. + * + * Loading URLs and returning the underlying text. + * + * This is necessary because iOS doesn't have Perl installed, so we can't + * run "xscreensaver-text" to do this. + */ + +#include "utils.h" + +#ifdef USE_IPHONE // whole file + +#include "textclient.h" + +char * +textclient_mobile_date_string (void) +{ + UIDevice *dd = [UIDevice currentDevice]; + NSString *name = [dd name]; // My iPhone + NSString *model = [dd model]; // iPad + // NSString *system = [dd systemName]; // iPhone OS + NSString *vers = [dd systemVersion]; // 5.0 + NSString *date = + [NSDateFormatter + localizedStringFromDate:[NSDate date] + dateStyle: NSDateFormatterMediumStyle + timeStyle: NSDateFormatterMediumStyle]; + NSString *nl = @"\n"; + + NSString *result = name; + result = [result stringByAppendingString: nl]; + result = [result stringByAppendingString: model]; + // result = [result stringByAppendingString: nl]; + // result = [result stringByAppendingString: system]; + result = [result stringByAppendingString: @" "]; + result = [result stringByAppendingString: vers]; + result = [result stringByAppendingString: nl]; + result = [result stringByAppendingString: nl]; + result = [result stringByAppendingString: date]; + result = [result stringByAppendingString: nl]; + result = [result stringByAppendingString: nl]; + return strdup ([result cStringUsingEncoding:NSISOLatin1StringEncoding]); +} + + +@interface TextLoader : NSObject +@property (nonatomic, retain) NSURL *url; +@property (nonatomic, retain) NSString *result; +@end + +@implementation TextLoader +{ + NSURL *_url; + NSString *_result; +} + ++ (TextLoader *) sharedLoader +{ + static TextLoader *singleton = nil; + @synchronized(self) { + if (!singleton) + singleton = [[self alloc] init]; + } + return singleton; +} + +- (void) startLoading +{ + // NSLog(@"textclient thread loading %@", self.url); + self.result = [NSString stringWithContentsOfURL: self.url + encoding: NSUTF8StringEncoding + error: nil]; + // NSLog(@"textclient thread finished %@ (length %d)", self.url, + // (unsigned int) [self.result length]); +} + +@end + + + +/* Returns the contents of the URL. + Loads the URL in a background thread: if the URL has not yet loaded, + this will return NULL. Once the URL has completely loaded, the full + contents will be returned. Calling this again after that starts the + URL loading again. + */ +char * +textclient_mobile_url_string (Display *dpy, const char *url) +{ + TextLoader *loader = [TextLoader sharedLoader]; + NSString *result = [loader result]; + + // Since this is a singleton, it's possible that if hack #1 starts + // URL #1 loading and then quickly exits, and then hack #2 asks for + // URL #2, it might get URL #1 instead. Oh well, who cares. + + if (result) { // Thread finished + // NSLog(@"textclient finished %s (length %d)", url, + // (unsigned int) [result length]); + char *s = strdup ([result cStringUsingEncoding:NSUTF8StringEncoding]); + loader.url = nil; + loader.result = nil; + return s; + + } else if ([loader url]) { // Waiting on thread + // NSLog(@"textclient waiting..."); + return 0; + + } else { // Launch thread + // NSLog(@"textclient launching %s...", url); + loader.url = + [NSURL URLWithString: + [NSString stringWithCString: url + encoding:NSISOLatin1StringEncoding]]; + [NSThread detachNewThreadSelector: @selector(startLoading) + toTarget: loader withObject: nil]; + return 0; + } +} + +#endif // USE_IPHONE -- whole file -- cgit v1.2.3-55-g7522