Esempio n. 1
0
/* alias and password should be set already in url */
static void create_the_bookmark(url_t *url)
{
    listitem *li;

    /* we don't want to be asked again */
    url_setalias(ftp->url, url->alias);

    if(strcmp(ftp->curdir, ftp->homedir) != 0)
        url_setdirectory(url, ftp->curdir);
    else
        url_setdirectory(url, 0);

    list_clear(gvBookmarks);
    {
        char *tmp = NULL;
        if (asprintf(&tmp, "%s/bookmarks", gvWorkingDirectory) == -1)
        {
            fprintf(stderr, _("Failed to allocate memory.\n"));
            return;
        }
        parse_rc(tmp, false);
        free(tmp);
    }

    li = list_search(gvBookmarks, (listsearchfunc)urlcmp, url);
    if(li)
        list_delitem(gvBookmarks, li);
    list_additem(gvBookmarks, url);

    bookmark_save(0);
}
Esempio n. 2
0
File: ltag.c Progetto: Celelibi/yafc
void cmd_luntag(int argc, char **argv)
{
	int i;

	OPT_HELP_NEW(_("Remove files from the local tag list."), "luntag [options] <filemask>...", NULL);
	minargs(1);

	if(list_numitem(gvLocalTagList) == 0) {
		printf(_("nothing tagged -- use 'ltag' to tag files\n"));
		return;
	}

	for(i=1;i<argc;i++) {
		bool del_done = false;
		listitem *li;

		while((li = list_search(gvLocalTagList,
								(listsearchfunc)ltagcmp,
								argv[i])) != 0)
		{
			printf("%s\n", (const char *)li->data);
			list_delitem(gvLocalTagList, li);
			del_done = true;
		}

		if(!del_done)
			printf(_("%s: no matches found\n"), argv[i]);
	}
}
Esempio n. 3
0
void list_free(list *lp)
{
    if(!lp)
        return;
    while(lp->first)
        list_delitem(lp, lp->first);
    free(lp);
}
Esempio n. 4
0
void cmd_close(int argc, char **argv)
{
	if(argv) {
		OPT_HELP_NEW(_("Close open connection"), "close [options]", NULL);
		maxargs(optind - 1);
	}

	ftp_quit();
	if(list_numitem(gvFtpList) > 1) {
		list_delitem(gvFtpList, gvCurrentFtp);
		gvCurrentFtp = gvFtpList->first;
		ftp_use((Ftp *)gvCurrentFtp->data);
	}
}
Esempio n. 5
0
void cmd_close(int argc, char **argv)
{
	if(argv) {
		OPT_HELP("Close open connection.  Usage:\n"
				 "  close [options]\n"
				 "Options:\n"
				 "  -h, --help     show this help\n");
		maxargs(optind - 1);
	}

	ftp_quit();
	if(list_numitem(gvFtpList) > 1) {
		list_delitem(gvFtpList, gvCurrentFtp);
		gvCurrentFtp = gvFtpList->first;
		ftp_use((Ftp *)gvCurrentFtp->data);
	}
}
Esempio n. 6
0
void cmd_bookmark(int argc, char **argv)
{
	struct option longopts[] = {
		{"save", optional_argument, 0, 's'},
		{"edit", no_argument, 0, 'e'},
		{"read", optional_argument, 0, 'r'},
		{"delete", no_argument, 0, 'd'},
		{"list", no_argument, 0, 'l'},
		{"noupdate", no_argument, 0, 'u'},
		{"help", no_argument, 0, 'h'},
		{0, 0, 0, 0}
	};
	int action = BM_BOOKMARK;
	int c;
	char *bmfile = 0;

	optind = 0;
	while((c=getopt_long(argc, argv, "s::er::dluh", longopts, 0)) != EOF) {
		switch(c) {
			case 's':
				action = BM_SAVE;
				free(bmfile);
				bmfile = xstrdup(optarg);
				break;
			case 'e':
				action = BM_EDIT;
				break;
			case 'r':
				action = BM_READ;
				free(bmfile);
				bmfile = xstrdup(optarg);
				break;
			case 'd':
				action = BM_DELETE;
				break;
			case 'l':
				action = BM_LIST;
				break;
			case 'u':
				action = BM_TOGGLE_NOUPDATE;
				break;
			case 'h':
				print_bookmark_syntax();
				/* fall through */
			default:
				return;
		}
	}

	if(action == BM_SAVE) {
		bookmark_save(bmfile);
		if(bmfile)
			printf(_("bookmarks saved in %s\n"), bmfile);
		else
			printf(_("bookmarks saved in %s/bookmarks\n"), gvWorkingDirectory);
		return;
	}
	if(action == BM_READ) {
		char *tmp = 0;
		int ret;
		list_clear(gvBookmarks);
		if(bmfile)
			ret = parse_rc(bmfile, true);
		else {
			if (asprintf(&tmp, "%s/bookmarks", gvWorkingDirectory) == -1)
      {
        fprintf(stderr, _("Failed to allocate memory.\n"));
        return;
      }
			ret = parse_rc(tmp, false);
		}
		if(ret != -1)
			printf(_("bookmarks read from %s\n"), bmfile ? bmfile : tmp);
		free(tmp);
		return;
	}
	if(action == BM_EDIT) {
		invoke_shell("%s %s/bookmarks", gvEditor, gvWorkingDirectory);
		return;
	}
	if(action == BM_LIST) {
		listitem *li;

		printf(_("%zu bookmarks present in memory\n"),
			   list_numitem(gvBookmarks));
		for(li = gvBookmarks->first; li; li=li->next) {
			url_t *u = (url_t *)li->data;
			/* note: all info not printed */
			printf("%-20s", u->alias ? u->alias : u->hostname);
			printf("%s://%s@%s", u->protocol ? u->protocol : "ftp",
				   u->username, u->hostname);
			if(u->directory)
			{
				char* sp = shortpath(u->directory, 30, 0);
				printf("/%s", sp);
				free(sp);
			}
			putchar('\n');
		}
		return;
	}
	if(action == BM_DELETE) {
		int i;
		bool del_done = false;

		minargs(optind);

		for(i = optind; i < argc; i++) {
			listitem *li;

			while((li = list_search(gvBookmarks,
									(listsearchfunc)urlcmp_name,
									argv[i])) != 0)
			{
				url_t *u = (url_t *)li->data;
				printf(_("deleted bookmark %s\n"),
					   u->alias ? u->alias : u->hostname);
				list_delitem(gvBookmarks, li);
				del_done = true;
			}
		}

		if(del_done) {
			bookmark_save(0);
			printf(_("bookmarks saved in %s/bookmarks\n"), gvWorkingDirectory);
		}

		return;
	}
	if(action == BM_TOGGLE_NOUPDATE) {
		int i;
		bool toggle_done = false;

		if(argc == optind) {
			listitem *li;

			need_connected();
			need_loggedin();

			li = list_search(gvBookmarks,
							 (listsearchfunc)urlcmp_name,
							 ftp->url->alias);
			if(li) {
				url_t *u = (url_t *)li->data;
				u->noupdate = !u->noupdate;
				printf(_("%s: noupdate: %s\n"),
					   u->alias ? u->alias : u->hostname,
					   u->noupdate ? _("yes") : _("no"));
				toggle_done = true;
			}

			ftp->url->noupdate = !ftp->url->noupdate;
			if(!toggle_done)
				printf(_("%s: noupdate: %s\n"),
					   ftp->url->alias ? ftp->url->alias : ftp->url->hostname,
					   ftp->url->noupdate ? _("yes") : _("no"));
		}

		for(i = optind; i < argc; i++) {
			listitem *li;

			li = list_search(gvBookmarks,
							 (listsearchfunc)urlcmp_name,
							 argv[i]);
			if(li) {
				url_t *u = (url_t *)li->data;
				u->noupdate = !u->noupdate;
				printf(_("%s: noupdate: %s\n"),
					   u->alias ? u->alias : u->hostname,
					   u->noupdate ? _("yes") : _("no"));
				toggle_done = true;
			}
		}

		if(toggle_done) {
			bookmark_save(0);
			printf(_("bookmarks saved in %s/bookmarks\n"), gvWorkingDirectory);
		}

		return;
	}

	maxargs(1);

	need_connected();
	need_loggedin();

	create_bookmark(argc > 1 ? argv[1] : 0);
}
Esempio n. 7
0
void auto_create_bookmark(void)
{
	listitem *li;
	int a;
	bool auto_create, had_passwd = false;
	bool update = false;

	if(gvAutoBookmark == 0 && gvAutoBookmarkUpdate == 0)
		return;

	if(!ftp_loggedin() || gvSighupReceived)
		return;

	auto_create = (gvAutoBookmark == 1);

	/* check if bookmark already exists */
	li = list_search(gvBookmarks, (listsearchfunc)urlcmp, ftp->url);
	if(li) {
		if(!should_update_bookmark((url_t *)li->data))
			return;

		/* bookmark already exist, update it */
		if(gvAutoBookmarkUpdate == 2) {
			a = ask(ASKYES|ASKNO, ASKYES,
					_("Do you want to update the bookmark for this site?"));
			if(a == ASKNO)
				return;
		}

		update = true;
		auto_create = true;
		had_passwd = (((url_t *)li->data)->password != 0);
	}

	if(gvAutoBookmark == 2 && !auto_create) {
		a = ask(ASKYES|ASKNO, ASKYES,
				_("Do you want to create a bookmark for this site?"));
		if(a == ASKNO)
			return;
		create_bookmark(0);
	} else { /* auto autobookmark... */
		url_t* url = url_clone(ftp->url);
		char* a = guess_alias(ftp->url);
		url_setalias(url, a);
		free(a);

		li = list_search(gvBookmarks, (listsearchfunc)urlcmp, url);
		if(li) {
			/* bookmark already exist, overwrite it */
			while(true) {
				url_t *xurl = (url_t *)li->data;

				if(xurl->alias && (strcmp(xurl->alias, url->alias) == 0)
				   && (strcmp(xurl->hostname, url->hostname) != 0))
				{
					/* create a new version of the alias, since guessed alias
					 * already exists but for another host
					 */

					update = false;
					char* par = strrchr(url->alias, '(');
          int ver = 1;
          if (par)
					{
						*par = 0;
						ver = atoi(par + 1);
					}
          if (asprintf(&a, "%s(%d)", url->alias, ver + 1) == -1)
          {
            fprintf(stderr, _("Failed to allocate memory.\n"));
            url_destroy(url);
            return;
          }
					url_setalias(url, a);
					free(a);
				} else {
					update = true;
					had_passwd = (xurl->password != 0);
					break;
				}
				li = list_search(gvBookmarks, (listsearchfunc)urlcmp, url);
				if(li == 0)
					break;
			}
			if(li) /* overwrite bookmark (ie, delete old and create a new) */
				list_delitem(gvBookmarks, li);
			if(!url_isanon(url) && gvAutoBookmarkSavePasswd == false
			   && !had_passwd)
				url_setpassword(url, 0);
		} else {
			if(!url_isanon(url) && gvAutoBookmarkSavePasswd == false)
				url_setpassword(url, 0);
		}
		create_the_bookmark(url);
		if(!gvAutoBookmarkSilent) {
			if(update)
				printf(_("updated bookmark %s\n"), url->alias);
			else
				printf(_("created bookmark %s\n"), url->alias);
		}
	}
}