72 |
static void main_screen_update_results(void); |
static void main_screen_update_results(void); |
73 |
static void main_screen_update_info(void); |
static void main_screen_update_info(void); |
74 |
static void main_screen_update_searchbox(void); |
static void main_screen_update_searchbox(void); |
75 |
static int detach_handle(ntree *data, void *); |
static void detach_handle(const char *, gpointer, gpointer); |
76 |
static void download_add_handle(ntree *the_tree, void *); |
static void download_add_handle(const char *, gpointer, gpointer); |
77 |
static void incoming_search_item(void); |
static void incoming_search_item(void); |
78 |
static char *hit_present(hit *foo); |
static char *hit_present(hit *foo); |
79 |
static enum attr_type hit_getattr(const hit *h, const char *key, attr_value * v); |
static enum attr_type hit_getattr(const hit *h, const char *key, attr_value * v); |
162 |
"Inf{else}{availability:3}{endif} {space}{user}{%header:B}@" |
"Inf{else}{availability:3}{endif} {space}{user}{%header:B}@" |
163 |
"{%standard}{fixed:20%}{net}{space}{endfixed}"); |
"{%standard}{fixed:20%}{net}{space}{endfixed}"); |
164 |
|
|
|
format_load("browse", "{if downloading<1}{%header:B}{endif}{filesize:bi}" |
|
|
"{%standard} {path:}/{filename}{space}" |
|
|
"{if bitrate} {bitrate:b}bps{endif}{if duration} {duration:t}{endif}"); |
|
|
|
|
165 |
format_load("image", "{$hit_pfx} {filename} {space}{if width}{width} x {height}{endif}"); |
format_load("image", "{$hit_pfx} {filename} {space}{if width}{width} x {height}{endif}"); |
166 |
format_load("audio", "{$hit_pfx} {filename}{space}" |
format_load("audio", "{$hit_pfx} {filename}{space}" |
167 |
"{if bitrate} {bitrate:b}bps{endif}{if duration} {duration:t}{endif}"); |
"{if bitrate} {bitrate:b}bps{endif}{if duration} {duration:t}{endif}"); |
171 |
g_assert(hit_fmt); |
g_assert(hit_fmt); |
172 |
g_assert(subhit_fmt); |
g_assert(subhit_fmt); |
173 |
|
|
|
/* gift_register("ADDDOWNLOAD", (EventCallback) download_add_handle, NULL); |
|
|
gift_register("DETACH", (EventCallback) detach_handle, NULL); |
|
|
*/ |
|
174 |
event_connect("statistics-changed", stats_changed, NULL); |
event_connect("statistics-changed", stats_changed, NULL); |
175 |
event_connect("shared-changed", stats_changed, NULL); |
event_connect("shared-changed", stats_changed, NULL); |
176 |
|
event_connect("detach", detach_handle, NULL); |
177 |
|
event_connect("download-new", download_add_handle, NULL); |
178 |
} |
} |
179 |
|
|
180 |
static int detach_handle(ntree *data, void *always_null) |
static void detach_handle(const char *event, gpointer data, gpointer user_data) |
181 |
{ |
{ |
182 |
/* Make sure the screen reflects the state after an unexpected detach. */ |
/* Make sure the screen reflects the state after an unexpected detach. */ |
183 |
ui_update(my_screen_nr | 0200); |
ui_update(my_screen_nr | 0200); |
|
return 0; |
|
184 |
} |
} |
185 |
|
|
186 |
static void main_screen_destroy(void) |
static void main_screen_destroy(void) |
187 |
{ |
{ |
|
//gift_unregister(NULL, (EventCallback) detach_handle, NULL); |
|
188 |
ui_input_deinit(&search_input); |
ui_input_deinit(&search_input); |
189 |
ui_input_deinit(&slash_input); |
ui_input_deinit(&slash_input); |
190 |
ui_input_deinit(&realm_input); |
ui_input_deinit(&realm_input); |
205 |
main_screen_update_results(); |
main_screen_update_results(); |
206 |
} |
} |
207 |
|
|
208 |
static query *prepare_search(int browse) |
static query *prepare_search(void) |
209 |
{ |
{ |
210 |
int i; |
int i; |
211 |
query *q; |
query *q; |
228 |
|
|
229 |
/* create a new query structure and append to list */ |
/* create a new query structure and append to list */ |
230 |
q = new_query(search_input.str->str, search_realm.sel); |
q = new_query(search_input.str->str, search_realm.sel); |
231 |
q->formatting = browse ? format_get("browse", NULL) : NULL; |
q->formatting = NULL; |
232 |
q->callback = my_screen_nr | 0200; |
q->callback = my_screen_nr | 0200; |
233 |
|
|
234 |
list_insert(&queries, q, i); |
list_insert(&queries, q, i); |
237 |
return q; |
return q; |
238 |
} |
} |
239 |
|
|
|
#if 0 |
|
|
/* This function may be called from other screens too... |
|
|
* be careful with updates of screen */ |
|
|
void start_browse(const char *user, const char *node) |
|
|
{ |
|
|
query *q; |
|
|
ntree *packet = NULL; |
|
|
|
|
|
ui_input_assign(&search_input, user); |
|
|
search_realm.sel = 6; /* BROWSE */ |
|
|
q = prepare_search(1); |
|
|
|
|
|
interface_append(&packet, "query", user); |
|
|
if (node) |
|
|
interface_append(&packet, "node", node); |
|
|
//q->id = gift_write_register(&packet, "BROWSE", (EventCallback) search_result_item_handler, q); |
|
|
if (!q->id) |
|
|
g_message(_("Couldn't start search!")); |
|
|
else |
|
|
g_message(_("Retrieving file list...")); |
|
|
ui_update(my_screen_nr | 0200); |
|
|
} |
|
|
#endif |
|
|
|
|
240 |
static void SearchQuery_return(struct rpc_msg *msg, gc_xdr_data *data, |
static void SearchQuery_return(struct rpc_msg *msg, gc_xdr_data *data, |
241 |
gpointer user_data) |
gpointer user_data) |
242 |
{ |
{ |
263 |
static const struct item_t { |
static const struct item_t { |
264 |
enum GIFT_realm_t realm; |
enum GIFT_realm_t realm; |
265 |
enum GIFT_querytype_t type; |
enum GIFT_querytype_t type; |
|
int format; |
|
266 |
} names[] = { |
} names[] = { |
267 |
{GIFT_REALM_EVERYTHING, GIFT_QUERY_TOKENS, 0}, |
{GIFT_REALM_EVERYTHING, GIFT_QUERY_TOKENS}, |
268 |
{GIFT_REALM_AUDIO, GIFT_QUERY_TOKENS, 0}, |
{GIFT_REALM_AUDIO, GIFT_QUERY_TOKENS}, |
269 |
{GIFT_REALM_VIDEO, GIFT_QUERY_TOKENS, 0}, |
{GIFT_REALM_VIDEO, GIFT_QUERY_TOKENS}, |
270 |
{GIFT_REALM_IMAGES, GIFT_QUERY_TOKENS, 0}, |
{GIFT_REALM_IMAGES, GIFT_QUERY_TOKENS}, |
271 |
{GIFT_REALM_TEXT, GIFT_QUERY_TOKENS, 0}, |
{GIFT_REALM_TEXT, GIFT_QUERY_TOKENS}, |
272 |
{GIFT_REALM_SOFTWARE, GIFT_QUERY_TOKENS, 0}, |
{GIFT_REALM_SOFTWARE, GIFT_QUERY_TOKENS}, |
273 |
{GIFT_REALM_EVERYTHING, GIFT_QUERY_HASH, 0} |
{GIFT_REALM_EVERYTHING, GIFT_QUERY_HASH} |
274 |
}; |
}; |
275 |
/* *INDENT-ON* */ |
/* *INDENT-ON* */ |
276 |
const struct item_t *t; |
const struct item_t *t; |
279 |
//char *includes = NULL, *excludes = NULL, *protocols = NULL; |
//char *includes = NULL, *excludes = NULL, *protocols = NULL; |
280 |
|
|
281 |
t = names + search_realm.sel; |
t = names + search_realm.sel; |
282 |
q = prepare_search(t->format); |
q = prepare_search(); |
283 |
|
|
284 |
/*parse_typed_query(q->search_term, &includes, &excludes, &protocols); |
/*parse_typed_query(q->search_term, &includes, &excludes, &protocols); |
285 |
interface_append(&packet, "query", includes); |
interface_append(&packet, "query", includes); |
523 |
tree_select_item(q, h); |
tree_select_item(q, h); |
524 |
q->hits.tnode.dirty = 1; |
q->hits.tnode.dirty = 1; |
525 |
main_screen_update_results(); |
main_screen_update_results(); |
|
} else if (sh && (key == 'U' || key == 'u')) { |
|
|
#if 0 |
|
|
start_browse(sh->user, sh->node); |
|
|
#endif |
|
526 |
} else if (sh && (key == 'i' || key == 'I')) { |
} else if (sh && (key == 'i' || key == 'I')) { |
527 |
/* select the parent hit */ |
/* select the parent hit */ |
528 |
tree_flat(q)->sel = list_find(tree_flat(q), h); |
tree_flat(q)->sel = list_find(tree_flat(q), h); |
836 |
move(curs_y, curs_x); |
move(curs_y, curs_x); |
837 |
} |
} |
838 |
|
|
839 |
static void download_add_handle(ntree *the_tree, void *udata) |
static void download_add_handle(const char *event, gpointer data, |
840 |
|
gpointer user_data) |
841 |
{ |
{ |
842 |
|
#if 0 |
843 |
const char *hash; |
const char *hash; |
844 |
unsigned int size; |
unsigned int size; |
845 |
|
|
848 |
|
|
849 |
if (!hash || !size) |
if (!hash || !size) |
850 |
return; |
return; |
851 |
|
#endif |
852 |
|
|
853 |
#if 0 |
#if 0 |
854 |
if (hit_download_mark(hash, size)) |
if (hit_download_mark(hash, size)) |
855 |
ui_update(my_screen_nr | 0200); |
ui_update(my_screen_nr | 0200); |