macos-wallpaper/wallpaper.m

102 lines
3.2 KiB
Objective-C

//
// wallpaper.m
// wallpaper
//
// Created by Sindre Sorhus on 27/03/15.
// Copyright (c) 2015 Sindre Sorhus. All rights reserved.
//
@import AppKit;
#import <sqlite3.h>
int main() {
@autoreleasepool {
NSWorkspace *sw = [NSWorkspace sharedWorkspace];
NSArray *args = [NSProcessInfo processInfo].arguments;
NSScreen *screen = [NSScreen screens].firstObject;
NSMutableDictionary *so = [[sw desktopImageOptionsForScreen:screen] mutableCopy];
if (args.count > 1) {
if ([args[1] isEqualToString: @"--version"]) {
puts("1.3.0");
return 0;
}
if ([args[1] isEqualToString: @"--help"]) {
puts("\n Get or set the desktop wallpaper\n\n Usage: wallpaper [file] [scale]\n\n `scale` can be either: fill fit stretch center\n If not specified, it will use your current setting\n\n Created by Sindre Sorhus");
return 0;
}
if (args.count > 2) {
if ([args[2] isEqualToString: @"fill"]) {
[so setObject:[NSNumber numberWithInt:NSImageScaleProportionallyUpOrDown] forKey:NSWorkspaceDesktopImageScalingKey];
[so setObject:[NSNumber numberWithBool:YES] forKey:NSWorkspaceDesktopImageAllowClippingKey];
}
if ([args[2] isEqualToString: @"fit"]) {
[so setObject:[NSNumber numberWithInt:NSImageScaleProportionallyUpOrDown] forKey:NSWorkspaceDesktopImageScalingKey];
[so setObject:[NSNumber numberWithBool:NO] forKey:NSWorkspaceDesktopImageAllowClippingKey];
}
if ([args[2] isEqualToString: @"stretch"]) {
[so setObject:[NSNumber numberWithInt:NSImageScaleAxesIndependently] forKey:NSWorkspaceDesktopImageScalingKey];
[so setObject:[NSNumber numberWithBool:YES] forKey:NSWorkspaceDesktopImageAllowClippingKey];
}
if ([args[2] isEqualToString: @"center"]) {
[so setObject:[NSNumber numberWithInt:NSImageScaleNone] forKey:NSWorkspaceDesktopImageScalingKey];
[so setObject:[NSNumber numberWithBool:NO] forKey:NSWorkspaceDesktopImageAllowClippingKey];
}
}
NSError *err;
bool success = [sw
setDesktopImageURL:[NSURL fileURLWithPath:args[1]]
forScreen:screen
options:so
error:&err];
if (!success) {
fprintf(stderr, "%s\n", err.localizedDescription.UTF8String);
return 1;
}
} else {
NSString *path = [sw desktopImageURLForScreen:screen].path;
BOOL isDir;
NSFileManager *fm = [NSFileManager defaultManager];
// check if file is a directory
[fm fileExistsAtPath:path isDirectory:&isDir];
// if directory, check db
if (isDir) {
NSArray *dirs = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES);
NSString *dbPath = [dirs[0] stringByAppendingPathComponent:@"Dock/desktoppicture.db"];
sqlite3 *db;
if (sqlite3_open(dbPath.UTF8String, &db) == SQLITE_OK) {
sqlite3_stmt *statement;
const char *sql = "SELECT * FROM data";
if (sqlite3_prepare_v2(db, sql, -1, &statement, nil) == SQLITE_OK) {
NSString *file;
while (sqlite3_step(statement) == SQLITE_ROW) {
file = @((char *)sqlite3_column_text(statement, 0));
}
printf("%s/%s\n", path.UTF8String, file.UTF8String);
sqlite3_finalize(statement);
}
sqlite3_close(db);
}
} else {
printf("%s\n", path.UTF8String);
}
}
}
return 0;
}