diff options
author | Yorhel <git@yorhel.nl> | 2013-07-08 13:59:27 +0200 |
---|---|---|
committer | Yorhel <git@yorhel.nl> | 2013-07-08 13:59:27 +0200 |
commit | 82f05db854f53296bd7654735fdae3717514d4c9 (patch) | |
tree | 9f63d838b7fe70bc59c84e879d3146ff66fff5af | |
parent | d1ba78ed61eab150db387ea8089c9145fb77afd6 (diff) |
share: Insert hashed files into database + various bug fixesdev
-rw-r--r-- | src/db.c | 2 | ||||
-rw-r--r-- | src/share/db.c | 7 | ||||
-rw-r--r-- | src/share/fl.c | 2 | ||||
-rw-r--r-- | src/share/hash.c | 8 | ||||
-rw-r--r-- | src/share/scan.c | 3 |
5 files changed, 13 insertions, 9 deletions
@@ -81,7 +81,7 @@ gschema[] = { /* globster.sqlite3 */ }, hschema[] = { /* hashdata.sqlite3 */ { 0, 4, - "CREATE TABLE hashdata (" + "CREATE TABLE hashdata.hashdata (" "id INTEGER PRIMARY KEY," "tth_root BLOB NOT NULL," "tth_leaves BLOB NOT NULL" diff --git a/src/share/db.c b/src/share/db.c index cdd8e7f..7be8e0f 100644 --- a/src/share/db.c +++ b/src/share/db.c @@ -205,12 +205,12 @@ void share_db_addfile(const char *path, time_t lastmod, uint64_t size, uint32_t sqlasync_blob(SQLASYNC_FREE, tthl_length, tthl_data) ); sqlasync_sql_unlocked(db_sql, NULL, SQLASYNC_STATIC, - "INSERT OR UPDATE INTO sharefiles (id, path, pathids, size, lastmodified, tth_root)" + "INSERT OR REPLACE INTO sharefiles (id, path, pathids, size, lastmodified, tth_root)" " VALUES (?, ?, pathid_add((SELECT pathids FROM sharefiles WHERE id = ?), ?), ?, ?, ?)", 7, sqlasync_int(rowid), sqlasync_text(SQLASYNC_COPY, path), sqlasync_int(rowid), sqlasync_int(pathid), sqlasync_int(size), sqlasync_int(lastmod), - sqlasync_blob(SQLASYNC_FREE, 24, tth_root) + sqlasync_blob(SQLASYNC_COPY, 24, tth_root) ); sqlasync_unlock(db_sql); } @@ -265,7 +265,8 @@ static void share_db_load_filepath(share_path_t *p, char *path, const char *name casestr_orig(share_fl_name(fl), buf+1); ywarn("Duplicate filenames in %s%s: %s vs. %s", p->props.FilesystemPath, path, buf[0].s, buf[1].s); free(fl); - } + } else + share_hash_add(p->s, fl); } diff --git a/src/share/fl.c b/src/share/fl.c index ceb6ff3..5101374 100644 --- a/src/share/fl.c +++ b/src/share/fl.c @@ -55,6 +55,7 @@ share_fl_t *share_fl_lookup(share_fl_t *dir, const char *name) { share_fl_t *share_fl_insert(share_fl_t *dir, share_fl_t *item) { size_t r; + item->parent = dir; vec_search_insert(dir->sub, r, strcmp(share_fl_name(dir->sub.a[i]), share_fl_name(item))); if(r == dir->sub.n || strcmp(share_fl_name(dir->sub.a[r]), share_fl_name(item)) != 0) { vec_insert_order(dir->sub, r, item); @@ -79,6 +80,7 @@ share_fl_t *share_fl_getdir(share_fl_t *root, char *path, char *pathf, kstring_t vec_search_insert(root->sub, r, strcmp(share_fl_name(root->sub.a[i]), pathf)); if(r == root->sub.n || strcmp(share_fl_name(root->sub.a[r]), pathf) != 0) { share_fl_t *fl = share_fl_create(true, path, buf); + fl->parent = root; vec_insert_order(root->sub, r, fl); } diff --git a/src/share/hash.c b/src/share/hash.c index 369324a..9171ee6 100644 --- a/src/share/hash.c +++ b/src/share/hash.c @@ -226,10 +226,10 @@ static void share_hash_fn_done(evtp_work_t *w) { ydebug("Hash for '%s' completed, root = %s", fn->fn, b32); } - /* TODO: - * - Update database - * - Notify share/share.c - */ + /* TODO: Notify share/share.c */ + share_db_addfile(fn->fn, fn->fl->lastmod, fn->filesize, + share_conf_pathid2(fn->s->c.id, fn->fl->pathid), (char *)root, (char *)fn->chunks, fn->chunknum*24); + fn->chunks = NULL; share_hash_fn_destroy(fn); share_hash_queue_process(); } diff --git a/src/share/scan.c b/src/share/scan.c index 4407510..cfe7416 100644 --- a/src/share/scan.c +++ b/src/share/scan.c @@ -303,7 +303,8 @@ static void share_scan_merge(share_t *s, share_fl_t *dst, share_flv_t *lst) { share_scan_merge_del(s, df); share_scan_merge_new(s, dst, lf); dst->sub.a[di] = lf; - } + } else + free(lf); di++; li++; } |