summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2013-07-08 13:59:27 +0200
committerYorhel <git@yorhel.nl>2013-07-08 13:59:27 +0200
commit82f05db854f53296bd7654735fdae3717514d4c9 (patch)
tree9f63d838b7fe70bc59c84e879d3146ff66fff5af
parentd1ba78ed61eab150db387ea8089c9145fb77afd6 (diff)
share: Insert hashed files into database + various bug fixesdev
-rw-r--r--src/db.c2
-rw-r--r--src/share/db.c7
-rw-r--r--src/share/fl.c2
-rw-r--r--src/share/hash.c8
-rw-r--r--src/share/scan.c3
5 files changed, 13 insertions, 9 deletions
diff --git a/src/db.c b/src/db.c
index 7125122..4192371 100644
--- a/src/db.c
+++ b/src/db.c
@@ -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++;
}