static gboolean get_metadata (TrackerExtractTask *task) { TrackerExtractInfo *info; TrackerSparqlBuilder *preupdate, *postupdate, *statements; gchar *where = NULL; preupdate = postupdate = statements = NULL; #ifdef THREAD_ENABLE_TRACE g_debug ("Thread:%p --> File:'%s' - Extracted", g_thread_self (), task->file); #endif /* THREAD_ENABLE_TRACE */ if (task->cancellable && g_cancellable_is_cancelled (task->cancellable)) { g_simple_async_result_set_error ((GSimpleAsyncResult *) task->res, TRACKER_DBUS_ERROR, 0, "Extraction of '%s' was cancelled", task->file); g_simple_async_result_complete_in_idle ((GSimpleAsyncResult *) task->res); extract_task_free (task); return FALSE; } if (!filter_module (task->extract, task->cur_module) && get_file_metadata (task, &info)) { g_simple_async_result_set_op_res_gpointer ((GSimpleAsyncResult *) task->res, info, (GDestroyNotify) tracker_extract_info_unref); g_simple_async_result_complete_in_idle ((GSimpleAsyncResult *) task->res); extract_task_free (task); } else { if (preupdate) { g_object_unref (preupdate); } if (postupdate) { g_object_unref (postupdate); } if (statements) { g_object_unref (statements); } g_free (where); /* Reinject the task into the main thread * queue, so the next module kicks in. */ g_idle_add ((GSourceFunc) dispatch_task_cb, task); } return FALSE; }
void tracker_extract_get_metadata_by_cmdline (TrackerExtract *object, const gchar *uri, const gchar *mime) { GError *error = NULL; TrackerExtractPrivate *priv; TrackerExtractTask *task; TrackerExtractInfo *info; gboolean no_modules = TRUE; priv = TRACKER_EXTRACT_GET_PRIVATE (object); priv->disable_summary_on_finalize = TRUE; g_return_if_fail (uri != NULL); task = extract_task_new (object, uri, mime, NULL, NULL, NULL, &error); if (error) { g_printerr ("Extraction failed, %s\n", error->message); g_error_free (error); return; } task->mimetype_handlers = tracker_extract_module_manager_get_mimetype_handlers (task->mimetype); task->cur_module = tracker_mimetype_info_get_module (task->mimetype_handlers, &task->cur_func, NULL); while (task->cur_module && task->cur_func) { if (!filter_module (object, task->cur_module) && get_file_metadata (task, &info)) { const gchar *preupdate_str, *postupdate_str, *statements_str, *where; TrackerSparqlBuilder *builder; no_modules = FALSE; preupdate_str = statements_str = postupdate_str = NULL; builder = tracker_extract_info_get_metadata_builder (info); if (tracker_sparql_builder_get_length (builder) > 0) { statements_str = tracker_sparql_builder_get_result (builder); } builder = tracker_extract_info_get_preupdate_builder (info); if (tracker_sparql_builder_get_length (builder) > 0) { preupdate_str = tracker_sparql_builder_get_result (builder); } builder = tracker_extract_info_get_postupdate_builder (info); if (tracker_sparql_builder_get_length (builder) > 0) { postupdate_str = tracker_sparql_builder_get_result (builder); } where = tracker_extract_info_get_where_clause (info); g_print ("\n"); g_print ("SPARQL pre-update:\n--\n%s--\n\n", preupdate_str ? preupdate_str : ""); g_print ("SPARQL item:\n--\n%s--\n\n", statements_str ? statements_str : ""); g_print ("SPARQL where clause:\n--\n%s--\n\n", where ? where : ""); g_print ("SPARQL post-update:\n--\n%s--\n\n", postupdate_str ? postupdate_str : ""); tracker_extract_info_unref (info); break; } else { if (!tracker_mimetype_info_iter_next (task->mimetype_handlers)) { break; } task->cur_module = tracker_mimetype_info_get_module (task->mimetype_handlers, &task->cur_func, NULL); } } if (no_modules) { g_print ("No modules found to handle metadata extraction\n\n"); } extract_task_free (task); }
static int cfs_getattr(const char* path, struct stat* stbuf) { debugf(DBG_LEVEL_NORM, KBLU "cfs_getattr(%s)", path); //return standard values for root folder if (!strcmp(path, "/")) { stbuf->st_uid = geteuid(); stbuf->st_gid = getegid(); stbuf->st_mode = S_IFDIR | 0755; stbuf->st_nlink = 2; debug_list_cache_content(); debugf(DBG_LEVEL_NORM, KBLU "exit 0: cfs_getattr(%s)", path); return 0; } //get file. if not in cache will be downloaded. dir_entry* de = path_info(path); if (!de) { debug_list_cache_content(); debugf(DBG_LEVEL_NORM, KBLU"exit 1: cfs_getattr(%s) "KYEL"not-in-cache/cloud", path); return -ENOENT; } //lazzy download of file metadata, only when really needed if (option_get_extended_metadata && !de->metadata_downloaded) get_file_metadata(de); if (option_enable_chown) { stbuf->st_uid = de->uid; stbuf->st_gid = de->gid; } else { stbuf->st_uid = geteuid(); stbuf->st_gid = getegid(); } // change needed due to utimens stbuf->st_atime = de->atime.tv_sec; stbuf->st_atim.tv_nsec = de->atime.tv_nsec; stbuf->st_mtime = de->mtime.tv_sec; stbuf->st_mtim.tv_nsec = de->mtime.tv_nsec; stbuf->st_ctime = de->ctime.tv_sec; stbuf->st_ctim.tv_nsec = de->ctime.tv_nsec; char time_str[TIME_CHARS] = ""; get_timespec_as_str(&(de->atime), time_str, sizeof(time_str)); debugf(DBG_LEVEL_EXT, KCYN"cfs_getattr: atime=[%s]", time_str); get_timespec_as_str(&(de->mtime), time_str, sizeof(time_str)); debugf(DBG_LEVEL_EXT, KCYN"cfs_getattr: mtime=[%s]", time_str); get_timespec_as_str(&(de->ctime), time_str, sizeof(time_str)); debugf(DBG_LEVEL_EXT, KCYN"cfs_getattr: ctime=[%s]", time_str); int default_mode_dir, default_mode_file; if (option_enable_chmod) { default_mode_dir = de->chmod; default_mode_file = de->chmod; } else { default_mode_dir = 0755; default_mode_file = 0666; } if (de->isdir) { stbuf->st_size = 0; stbuf->st_mode = S_IFDIR | default_mode_dir; stbuf->st_nlink = 2; } else if (de->islink) { stbuf->st_size = 1; stbuf->st_mode = S_IFLNK | default_mode_dir; stbuf->st_nlink = 1; stbuf->st_size = de->size; /* calc. blocks as if 4K blocksize filesystem; stat uses units of 512B */ stbuf->st_blocks = ((4095 + de->size) / 4096) * 8; } else { stbuf->st_size = de->size; /* calc. blocks as if 4K blocksize filesystem; stat uses units of 512B */ stbuf->st_blocks = ((4095 + de->size) / 4096) * 8; stbuf->st_mode = S_IFREG | default_mode_file; stbuf->st_nlink = 1; } debugf(DBG_LEVEL_NORM, KBLU "exit 2: cfs_getattr(%s)", path); return 0; }