dialogs.c

来自「一个很有名的浏览器」· C语言 代码 · 共 245 行

C
245
字号
/* Cache-related dialogs *//* $Id: dialogs.c,v 1.79.4.2 2005/05/01 22:47:54 jonas Exp $ */#ifndef _GNU_SOURCE#define _GNU_SOURCE /* XXX: we _WANT_ strcasestr() ! */#endif#ifdef HAVE_CONFIG_H#include "config.h"#endif#include <string.h>#include "elinks.h"#include "bfu/dialog.h"#include "cache/cache.h"#include "cache/dialogs.h"#include "dialogs/edit.h"#include "intl/gettext/libintl.h"#include "protocol/uri.h"#include "sched/session.h"#include "terminal/draw.h"#include "terminal/terminal.h"#include "util/conv.h"#include "util/memory.h"#include "util/object.h"#include "util/string.h"static voidlock_cache_entry(struct listbox_item *item){	object_lock((struct cache_entry *) item->udata);}static voidunlock_cache_entry(struct listbox_item *item){	object_unlock((struct cache_entry *) item->udata);}static intis_cache_entry_used(struct listbox_item *item){	return is_object_used((struct cache_entry *) item->udata);}static unsigned char *get_cache_entry_text(struct listbox_item *item, struct terminal *term){	struct cache_entry *cached = item->udata;	return get_uri_string(cached->uri, URI_PUBLIC);}static unsigned char *get_cache_entry_info(struct listbox_item *item, struct terminal *term){	struct cache_entry *cached = item->udata;	struct string msg;	if (item->type == BI_FOLDER) return NULL;	if (!init_string(&msg)) return NULL;	add_to_string(&msg, _("URL", term));	add_to_string(&msg, ": ");	add_uri_to_string(&msg, cached->uri, URI_PUBLIC);	/* No need to use compare_uri() here we only want to check whether they	 * point to the same URI. */	if (cached->proxy_uri != cached->uri) {		add_format_to_string(&msg, "\n%s: ", _("Proxy URL", term));		add_uri_to_string(&msg, cached->proxy_uri, URI_PUBLIC);	}	if (cached->redirect) {		add_format_to_string(&msg, "\n%s: ", _("Redirect", term));		add_uri_to_string(&msg, cached->redirect, URI_PUBLIC);		if (cached->redirect_get) {			add_to_string(&msg, " (GET)");		}	}	add_format_to_string(&msg, "\n%s: %d", _("Size", term), cached->length);	add_format_to_string(&msg, "\n%s: %d", _("Loaded size", term),						cached->data_size);	if (cached->content_type) {		add_format_to_string(&msg, "\n%s: %s", _("Content type", term),				     cached->content_type);	}	if (cached->last_modified) {		add_format_to_string(&msg, "\n%s: %s", _("Last modified", term),				     cached->last_modified);	}	if (cached->etag) {		add_format_to_string(&msg, "\n%s: %s", "ETag",						cached->etag);	}	if (cached->ssl_info) {		add_format_to_string(&msg, "\n%s: %s", _("SSL Cipher", term),						cached->ssl_info);	}	if (cached->encoding_info) {		add_format_to_string(&msg, "\n%s: %s", _("Encoding", term),						cached->encoding_info);	}	if (cached->incomplete || !cached->valid) {		add_char_to_string(&msg, '\n');		add_to_string(&msg, _("Flags", term));		add_to_string(&msg, ": ");		if (cached->incomplete) {			add_to_string(&msg, _("incomplete", term));			add_char_to_string(&msg, ' ');		}		if (!cached->valid) add_to_string(&msg, _("invalid", term));	}#ifdef HAVE_STRFTIME	if (cached->expire) {		add_format_to_string(&msg, "\n%s: ", _("Expires", term));		add_date_to_string(&msg, get_opt_str("ui.date_format"), &cached->max_age);	}#endif#ifdef CONFIG_DEBUG	add_format_to_string(&msg, "\n%s: %d", "Refcount", get_object_refcount(cached));	add_format_to_string(&msg, "\n%s: %d", _("ID", term), cached->id);	if (cached->head && *cached->head) {		add_format_to_string(&msg, "\n%s:\n\n%s", _("Header", term),				     cached->head);	}#endif	return msg.source;}static struct uri *get_cache_entry_uri(struct listbox_item *item){	struct cache_entry *cached = item->udata;	return get_uri_reference(cached->uri);}static struct listbox_item *get_cache_entry_root(struct listbox_item *item){	return NULL;}static intcan_delete_cache_entry(struct listbox_item *item){	return 1;}static voiddelete_cache_entry_item(struct listbox_item *item, int last){	struct cache_entry *cached = item->udata;	assert(!is_object_used(cached));	delete_cache_entry(cached);}static enum listbox_matchmatch_cache_entry(struct listbox_item *item, struct terminal *term,		  unsigned char *text){	struct cache_entry *cached = item->udata;	if (strcasestr(struri(cached->uri), text)	    || (cached->head && strcasestr(cached->head, text)))		return LISTBOX_MATCH_OK;	return LISTBOX_MATCH_NO;}static struct listbox_ops_messages cache_messages = {	/* cant_delete_item */	N_("Sorry, but cache entry \"%s\" cannot be deleted."),	/* cant_delete_used_item */	N_("Sorry, but cache entry \"%s\" is being used by something else."),	/* cant_delete_folder */	NULL,	/* cant_delete_used_folder */	NULL,	/* delete_marked_items_title */	N_("Delete marked cache entries"),	/* delete_marked_items */	N_("Delete marked cache entries?"),	/* delete_folder_title */	NULL,	/* delete_folder */	NULL,	/* delete_item_title */	N_("Delete cache entry"),	/* delete_item */	N_("Delete this cache entry?"),	/* clear_all_items_title */	NULL,	/* clear_all_items_title */	NULL,};static struct listbox_ops cache_entry_listbox_ops = {	lock_cache_entry,	unlock_cache_entry,	is_cache_entry_used,	get_cache_entry_text,	get_cache_entry_info,	get_cache_entry_uri,	get_cache_entry_root,	match_cache_entry,	can_delete_cache_entry,	delete_cache_entry_item,	NULL,	&cache_messages,};static struct hierbox_browser_button cache_buttons[] = {	{ N_("~Info"),   push_hierbox_info_button,   1 },	{ N_("~Goto"),   push_hierbox_goto_button,   1 },	{ N_("~Delete"), push_hierbox_delete_button, 1 },	{ N_("~Search"), push_hierbox_search_button, 1 },};struct_hierbox_browser(	cache_browser,	N_("Cache manager"),	cache_buttons,	&cache_entry_listbox_ops);voidcache_manager(struct session *ses){	hierbox_browser(&cache_browser, ses);}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?