Compare commits

...

2 Commits

Author SHA1 Message Date
Christopher Snowhill a640627fe1
Playlist: Add a workaround for AppleStript URLs
AppleScript is apparently such a legacy system, that when it sends URLs
to your app to open, they're in the old Carbon format. So we need to
translate these to proper URL strings for the rest of the app to deal
with them at all.

The format of these URLs is as follows:

/method/::

Followed optionally by:

username/password@

Where the slash and password are optional.

Followed by:

hostname

Followed optionally by:

/portnumber

And finally, followed by:

:path:on:server:filename.ext

So, in hostname field, we must swap slashes to colons. And in the path
field, swap colons to slashes. What a bizarre world.

Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2023-06-01 21:34:34 -07:00
Christopher Snowhill 5550af7e64
HTTP Input: Do not hang if transfer completes
If transfer completes quickly, do not hang waiting for it to achieve
reading state. Also add some comments indicating what we're doing.

Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2023-06-01 21:34:29 -07:00
2 changed files with 36 additions and 2 deletions

View File

@ -496,7 +496,37 @@ static AppController *kAppController = nil;
NSMutableArray *urls = [NSMutableArray array];
for(NSString *filename in filenames) {
[urls addObject:[NSURL fileURLWithPath:filename]];
NSURL *url = nil;
if([[NSFileManager defaultManager] fileExistsAtPath:filename]) {
url = [NSURL fileURLWithPath:filename];
} else {
if([filename hasPrefix:@"/http/::"] ||
[filename hasPrefix:@"/https/::"]) {
// Stupid Carbon bodge for AppleScript
NSString *method = nil;
NSString *server = nil;
NSString *path = nil;
NSScanner *objScanner = [NSScanner scannerWithString:filename];
if(![objScanner scanString:@"/" intoString:nil] ||
![objScanner scanUpToString:@"/" intoString:&method] ||
![objScanner scanString:@"/::" intoString:nil] ||
![objScanner scanUpToString:@":" intoString:&server] ||
![objScanner scanString:@":" intoString:nil]) {
continue;
}
[objScanner scanUpToCharactersFromSet:[NSCharacterSet illegalCharacterSet] intoString:&path];
// Colons in server were converted to shashes, convert back
NSString *convertedServer = [server stringByReplacingOccurrencesOfString:@"/" withString:@":"];
// Slashes in path were converted to colons, convert back
NSString *convertedPath = [path stringByReplacingOccurrencesOfString:@":" withString:@"/"];
url = [NSURL URLWithString:[NSString stringWithFormat:@"%@://%@/%@", method, convertedServer, convertedPath]];
}
}
if(url) {
[urls addObject:url];
}
}
NSDictionary *loadEntriesData = @{ @"entries": urls,

View File

@ -594,11 +594,15 @@ static void http_stream_reset(HTTPSource *fp) {
[NSThread detachNewThreadSelector:@selector(threadEntry:) toTarget:self withObject:nil];
// Wait for transfer to at least start
while(status == STATUS_UNSTARTED) {
usleep(3000);
}
while(status != STATUS_READING && curl) {
// Now wait for it to either begin streaming, or complete if file is small enough to fit in the buffer
while(status != STATUS_READING &&
status != STATUS_FINISHED &&
curl) {
usleep(3000);
}