diff options
| author | 2019-06-13 03:25:27 +0200 | |
|---|---|---|
| committer | 2019-06-13 03:25:27 +0200 | |
| commit | ab9352110092cf651b5602301371cd00691c7e13 (patch) | |
| tree | de5193070199670f2ea57675fe53b8a7b2af2147 | |
| parent | 8c1945ccd27c5069c22acd1018435dfff0d0b609 (diff) | |
| download | ideviceinstaller-ab9352110092cf651b5602301371cd00691c7e13.tar.gz ideviceinstaller-ab9352110092cf651b5602301371cd00691c7e13.tar.bz2 | |
Make wait for install/uninstall notification optional with -n command line switch
| -rw-r--r-- | src/ideviceinstaller.c | 83 | 
1 files changed, 46 insertions, 37 deletions
| diff --git a/src/ideviceinstaller.c b/src/ideviceinstaller.c index 17f6966..27b4669 100644 --- a/src/ideviceinstaller.c +++ b/src/ideviceinstaller.c @@ -1,8 +1,8 @@  /*   * ideviceinstaller - Manage apps on iOS devices.   * + * Copyright (C) 2010-2019 Nikias Bassen <nikias@gmx.li>   * Copyright (C) 2010-2015 Martin Szulecki <m.szulecki@libimobiledevice.org> - * Copyright (C) 2010-2014 Nikias Bassen <nikias@gmx.li>   *   * Licensed under the GNU General Public License Version 2   * @@ -109,6 +109,7 @@ int cmd = CMD_NONE;  char *last_status = NULL;  int wait_for_command_complete = 0; +int use_notifier = 0;  int notification_expected = 0;  int is_device_connected = 0;  int command_completed = 0; @@ -368,7 +369,7 @@ static void idevice_wait_for_command_to_complete()  	}  	/* wait some time if a notification is expected */ -	while (notification_expected && !notified && !err_occurred && is_device_connected) { +	while (use_notifier && notification_expected && !notified && !err_occurred && is_device_connected) {  		wait_ms(50);  	} @@ -404,6 +405,8 @@ static void print_usage(int argc, char **argv)  		 "  -r, --restore APPID\tRestore archived app specified by APPID\n"  		 "  -R, --remove-archive APPID  Remove app archive specified by APPID\n"  		 "  -o, --options\t\tPass additional options to the specified command.\n" +		 "  -n, --notify-wait\t\tWait for app installed/uninstalled notification\n" +		 "                    \t\tto before reporting success of operation\n"  		 "  -h, --help\t\tprints usage information\n"  		 "  -d, --debug\t\tenable communication debugging\n" "\n");  	printf("Homepage: <http://libimobiledevice.org>\n"); @@ -412,24 +415,25 @@ static void print_usage(int argc, char **argv)  static void parse_opts(int argc, char **argv)  {  	static struct option longopts[] = { -		{"help", 0, NULL, 'h'}, -		{"udid", 1, NULL, 'u'}, -		{"list-apps", 0, NULL, 'l'}, -		{"install", 1, NULL, 'i'}, -		{"uninstall", 1, NULL, 'U'}, -		{"upgrade", 1, NULL, 'g'}, -		{"list-archives", 0, NULL, 'L'}, -		{"archive", 1, NULL, 'a'}, -		{"restore", 1, NULL, 'r'}, -		{"remove-archive", 1, NULL, 'R'}, -		{"options", 1, NULL, 'o'}, -		{"debug", 0, NULL, 'd'}, -		{NULL, 0, NULL, 0} +		{ "help", no_argument, NULL, 'h' }, +		{ "udid", required_argument, NULL, 'u' }, +		{ "list-apps", no_argument, NULL, 'l' }, +		{ "install", required_argument, NULL, 'i' }, +		{ "uninstall", required_argument, NULL, 'U' }, +		{ "upgrade", required_argument, NULL, 'g' }, +		{ "list-archives", no_argument, NULL, 'L' }, +		{ "archive", required_argument, NULL, 'a' }, +		{ "restore", required_argument, NULL, 'r' }, +		{ "remove-archive", required_argument, NULL, 'R' }, +		{ "options", required_argument, NULL, 'o' }, +		{ "notify-wait", no_argument, NULL, 'n' }, +		{ "debug", no_argument, NULL, 'd' }, +		{ NULL, 0, NULL, 0 }  	};  	int c;  	while (1) { -		c = getopt_long(argc, argv, "hU:li:u:g:La:r:R:o:d", longopts, +		c = getopt_long(argc, argv, "hU:li:u:g:La:r:R:o:nd", longopts,  						(int *) 0);  		if (c == -1) {  			break; @@ -508,6 +512,9 @@ static void parse_opts(int argc, char **argv)  				options = newopts;  			}  			break; +		case 'n': +			use_notifier = 1; +			break;  		case 'd':  			idevice_set_debug_level(1);  			break; @@ -654,33 +661,35 @@ int main(int argc, char **argv)  		goto leave_cleanup;  	} -	if ((lockdownd_start_service -		 (client, "com.apple.mobile.notification_proxy", -		  &service) != LOCKDOWN_E_SUCCESS) || !service) { -		fprintf(stderr, -				"Could not start com.apple.mobile.notification_proxy!\n"); -		res = -1; -		goto leave_cleanup; -	} +	if (use_notifier) { +		if ((lockdownd_start_service +			 (client, "com.apple.mobile.notification_proxy", +			  &service) != LOCKDOWN_E_SUCCESS) || !service) { +			fprintf(stderr, +					"Could not start com.apple.mobile.notification_proxy!\n"); +			res = -1; +			goto leave_cleanup; +		} -	np_error_t nperr = np_client_new(device, service, &np); +		np_error_t nperr = np_client_new(device, service, &np); -	if (service) { -		lockdownd_service_descriptor_free(service); -	} -	service = NULL; +		if (service) { +			lockdownd_service_descriptor_free(service); +		} +		service = NULL; -	if (nperr != NP_E_SUCCESS) { -		fprintf(stderr, "Could not connect to notification_proxy!\n"); -		res = -1; -		goto leave_cleanup; -	} +		if (nperr != NP_E_SUCCESS) { +			fprintf(stderr, "Could not connect to notification_proxy!\n"); +			res = -1; +			goto leave_cleanup; +		} -	np_set_notify_callback(np, notifier, NULL); +		np_set_notify_callback(np, notifier, NULL); -	const char *noties[3] = { NP_APP_INSTALLED, NP_APP_UNINSTALLED, NULL }; +		const char *noties[3] = { NP_APP_INSTALLED, NP_APP_UNINSTALLED, NULL }; -	np_observe_notifications(np, noties); +		np_observe_notifications(np, noties); +	}  run_again:  	if (service) { | 
