summaryrefslogtreecommitdiffstats
path: root/OSX/textclient-ios.m
diff options
context:
space:
mode:
authorSimon Rettberg2018-10-16 10:08:48 +0200
committerSimon Rettberg2018-10-16 10:08:48 +0200
commitd3a98cf6cbc3bd0b9efc570f58e8812c03931c18 (patch)
treecbddf8e50f35a9c6e878a5bfe3c6d625d99e12ba /OSX/textclient-ios.m
downloadxscreensaver-d3a98cf6cbc3bd0b9efc570f58e8812c03931c18.tar.gz
xscreensaver-d3a98cf6cbc3bd0b9efc570f58e8812c03931c18.tar.xz
xscreensaver-d3a98cf6cbc3bd0b9efc570f58e8812c03931c18.zip
Original 5.40
Diffstat (limited to 'OSX/textclient-ios.m')
-rw-r--r--OSX/textclient-ios.m129
1 files changed, 129 insertions, 0 deletions
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 <jwz@jwz.org>
+ *
+ * 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