static int search_gui_cmp_mime(const struct result_data *a, const struct result_data *b) { enum mime_type mt_a, mt_b; mt_a = mime_type_from_extension(a->record->ext); mt_b = mime_type_from_extension(b->record->ext); return CMP(mt_a, mt_b); }
/** * Computes the MIME type to use based on the extension present in the * file name. * * The extension is whatever comes after the final "." in the name. * * @param filename the file name * * @return the dedicated MIME type, or MIME_TYPE_APPLICATION_OCTET_STREAM when * the extension is not recognized. */ enum mime_type mime_type_from_filename(const char *filename) { const char *extension; g_return_val_if_fail(filename, MIME_TYPE_APPLICATION_OCTET_STREAM); extension = strrchr(filename, '.'); return mime_type_from_extension(extension ? &extension[1] : NULL); }
/** * Initialize the MIME table. */ void G_COLD mime_type_init(void) { size_t i; /* * Ensure the MIME table is sorted. */ for (i = 0; i < N_ITEMS(mime_type_map); i++) { enum mime_type ret; ret = mime_type_from_extension(mime_type_map[i].extension); if (ret != mime_type_map[i].type) { g_error("mime_type_map[] is not sorted!"); } } }
static void cell_renderer(GtkTreeViewColumn *column, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, gpointer udata) { const struct result_data *data; const struct results_set *rs; const gchar *text; enum c_sr_columns id; if (!gtk_tree_view_column_get_visible(column)) return; text = NULL; /* default to nothing */ id = GPOINTER_TO_UINT(udata); data = get_result_data(model, iter); rs = data->record->results_set; switch (id) { case c_sr_filename: text = data->record->utf8_name; break; case c_sr_ext: text = data->record->ext; break; case c_sr_mime: text = mime_type_to_string(mime_type_from_extension(data->record->ext)); break; case c_sr_vendor: if (!(ST_LOCAL & rs->status)) text = vendor_code_get_name(rs->vendor); break; case c_sr_info: text = data->record->info; break; case c_sr_size: text = compact_size(data->record->size, show_metric_units()); break; case c_sr_count: text = data->children ? uint32_to_string(1 + data->children) : NULL; break; case c_sr_loc: if (ISO3166_INVALID != rs->country) text = iso3166_country_cc(rs->country); break; case c_sr_charset: if (!(ST_LOCAL & rs->status)) text = data->record->charset; break; case c_sr_route: text = search_gui_get_route(rs); break; case c_sr_protocol: if (!((ST_LOCAL | ST_BROWSE) & rs->status)) text = ST_UDP & rs->status ? (ST_SR_UDP & rs->status ? N_("UDP (semi-reliable)") : "UDP") : "TCP"; break; case c_sr_hops: if (!((ST_LOCAL | ST_BROWSE) & rs->status)) text = uint32_to_string(rs->hops); break; case c_sr_ttl: if (!((ST_LOCAL | ST_BROWSE) & rs->status)) text = uint32_to_string(rs->ttl); break; case c_sr_spam: if (SR_SPAM & data->record->flags) { text = "S"; /* Spam */ } else if (ST_SPAM & rs->status) { text = "maybe"; /* maybe spam */ } break; case c_sr_owned: if (SR_OWNED & data->record->flags) { text = _("owned"); } else if (SR_PARTIAL & data->record->flags) { text = _("partial"); } else if (SR_SHARED & data->record->flags) { text = _("shared"); } break; case c_sr_hostile: if (ST_HOSTILE & rs->status) { text = "H"; } break; case c_sr_sha1: if (data->record->sha1) { text = sha1_base32(data->record->sha1); } break; case c_sr_ctime: if ((time_t) -1 != data->record->create_time) { text = timestamp_to_string(data->record->create_time); } break; case c_sr_num: g_assert_not_reached(); break; } g_object_set(cell, "text", text, "foreground-gdk", gui_color_get(data->color), "background-gdk", gui_color_get(GUI_COLOR_BACKGROUND), (void *) 0); }