From b0becc2bad03960c2f2bb511e21f3bfe9b129691 Mon Sep 17 00:00:00 2001 From: Harbour Date: Sun, 6 Apr 2008 14:27:15 +0300 Subject: [PATCH] . --- docs/ru/TODO | 11 +++++------ include/elements.H | 35 ++++++++++++++++++++++++----------- sfinx/sfinx.C | 32 +++++++++++++++++++++----------- 3 files changed, 50 insertions(+), 28 deletions(-) diff --git a/docs/ru/TODO b/docs/ru/TODO index aabac05..7c700de 100644 --- a/docs/ru/TODO +++ b/docs/ru/TODO @@ -6,7 +6,7 @@ ÆÕÎÄÁÍÅÎÔÁÌØÎÙÈ ËÌÁÓÓÏ× ÂÅÚ ÓÅÒØÅÚÎÏÇÏ ÉÚÍÅÎÅÎÉÑ ÐÏ×ÅÄÅÎÉÑ É ÓÔÒÕËÔÕÒ ÄÁÎÎÙÈ ÓÉÓÔÅÍÙ - ÒÅÁÌÉÚÁÃÉÑ ÏÓÔÁ×ÛÉÈÓÑ ÚÁÄÕÍÁÎÎÙÈ Æ-ÉÊ, ÄÏ×ÅÄÅÎÉÅ ÓÉÓÔÅÍÙ ÄÏ ÀÚÁÂÅÌØÎÏÇÏ É - ÜÇÏÎÏÍÉÞÅÓËÉ ÐÒÉ×ÌÅËÁÔÅÌØÎÏÇÏ ÓÏÓÔÏÑÎÉÑ + ÜÒÇÏÎÏÍÉÞÅÓËÉ ÐÒÉ×ÌÅËÁÔÅÌØÎÏÇÏ ÓÏÓÔÏÑÎÉÑ - É Ô.Ä. --------------------------------------------------------------------- @@ -16,7 +16,7 @@ - ÄÏÓÔÕÐ/ÈÒÁÎÅÎÉÅ - ÍÏÄÕÌØ ui [ faraon ] - ÎÁÓÔÒÏÊËÁ/ÕÐÒÁ×ÌÅÎÉÅ/ËÏÎÆÉÇÕÒÁÃÉÑ/ÉÎÔÅÒÆÅÊÓ - - ÍÏÄÕÌØ ÓÔÒÕËÔÕÒÉÚÁÃÉÉ/ËÁÔÅÇÏÒÉÉ É ÁÔÔÒÉÂÕÔÙ + - ÍÏÄÕÌØ ÓÔÒÕËÔÕÒÉÚÁÃÉÉ/ËÁÔÅÇÏÒÉÉ É ÁÔÒÉÂÕÔÙ - ÔÁÂÌÉÃÁ ÄÅÒÅ×Á ËÁÔÅÇÏÒÉÊ (id, parent_id, ÉÍÑ, ÏÐÉÓÁÎÉÅ) - ÕÒÏ×ÎÉ ÁÂÓÔÒÁËÃÉÉ, ÏÔÎÏÛÅÎÉÑ ( ÍÎÏÇÉÅ-ËÏ-ÍÎÏÇÉÍ ?) - ÍÏÄÕÌÉ ÉÎÆÏÒÍÁÃÉÏÎÎÙÈ ÏÂØÅËÔÏ× - ÆÁÊÌÙ/ÓÓÙÌËÉ/ÚÁËÌÁÄËÉ × ÆÁÊÌÁÈ/etc. @@ -42,16 +42,15 @@ ÏÂÝÅÅ : - ÄÏ×ÅÓÔÉ ÍÏÄÕÌÉ file/notes ÄÏ ÀÚÁÂÅÌØÎÏÇÏ ÓÏÓÔÏÑÎÉÑ -- ÐÅÒÅÄÅÌÁÔØ sfinx_elements É ×ÓÀ ÓÔÒÕËÔÕÒÕ ËÌÁÓÓÏ× (global redesign) - ÒÁÚÂÉÔØ *.C/*.H ÎÁ ÆÁÊÌÙ ÐÏ ÍÏÄÕÌÑÍ/ËÌÁÓÓÁÍ - ÐÅÒÅÓÍÏÔÒÅÔØ ÉÓÐÏÌØÚÏ×ÁÎÉÅ ÇÌÏÂÁÌØÎÙÈ ÐÅÒÅÍÅÎÎÙÈ - ÕÐÒÏÓÔÉÔØ/ÐÏÄÕÍÁÔØ ÎÁÄ ÐÒÏÔÏËÏÌÏÍ (XMLRPC/BEEP ?/ÐÏÎÑÔÎÁÑ ÔÅËÓÔÏ×ÁÑ ÏÔÌÁÄËÁ ÐÅÒÅÄÁ×ÁÅÍÙÈ ËÏÍÁÎÄ / etc.) : sfinx.send(XXXX, data, arg, ...); + ÓÄÅÌÁÔØ ÔÅËÓÔÏ×ÙÊ ÓÅÔÅ×ÏÊ ÐÒÏÔÏËÏÌ (ÔÉÐÁ FTP) - ÓÄÅÌÁÔØ control É data ËÁÎÁÌÙ × ÓÏÅÄÉÎÅÎÉÉ, ÞÔÏÂÙ ÍÏÖÎÏ ÂÙÌÏ ÓÏÚÄÁ×ÁÔØ/ÇÏÎÑÔØ ÎÅÓËÏÌØËÏ ÐÏÔÏËÏ× ÉÎÆÙ ÐÁÒÁÌÌÅÌØÎÏ -- ÓÄÅÌÁÔØ ÔÅËÓÔÏ×ÙÊ ÓÅÔÅ×ÏÊ ÐÒÏÔÏËÏÌ (ÔÉÐÁ FTP) -- ÓÄÅÌÁÔØ ÕÄÁÌÅÎÎÙÊ ÄÏÓÔÕÐ Ë ÆÁÊÌÁÍ ÄÁÎÎÙÈ (ÞÅÒÅÚ unix socket ?) -- event'Ù ÐÏ ÓÏÂÙÔÉÑÍ × ÍÏÄÕÌÑÈ : ÎÁÐÒÉÍÅÒ : + ÓÄÅÌÁÔØ ÕÄÁÌÅÎÎÙÊ ÄÏÓÔÕÐ Ë ÆÁÊÌÁÍ ÄÁÎÎÙÈ (ÞÅÒÅÚ unix socket ?) +- ÒÅÇÉÓÔÒÁÃÉÑ callback'Ï× ÐÏ ÓÏÂÙÔÉÑÍ × ÍÏÄÕÌÑÈ : ÎÁÐÒÉÍÅÒ : - ÓÏÚÄÁÎÉÅ ËÁÔÅÇÏÒÉÉ - ÓÏÚÄÁÎÉÅ ÏÂØÅËÔÁ × ËÁÔÅÇÏÒÉÉ - ÉÚÍÅÎÅÎÉÅ ÏÂØÅËÔÁ (ÅÇÏ Ó×ÏÊÓÔ×) × ËÁÔÅÇÏÒÉÉ diff --git a/include/elements.H b/include/elements.H index 93d4837..bfc25df 100644 --- a/include/elements.H +++ b/include/elements.H @@ -242,6 +242,15 @@ class sfinx_object_t { id = i; main_slice_id = m; } + sfinx_object_t(sfinx_type_t t, sfinx_id_t i, sfinx_id_t m, const char *n, sfinx_timestamp_t &ct, + sfinx_timestamp_t &et) { + type = t; + id = i; + main_slice_id = m; + name = n; + ctime = ct; + etime = et; + } sfinx_size_t size() { return (2 * sizeof(sfinx_id_t) + sizeof(sfinx_type_t) + name.size() + 1 + path_name.size() + 1 + description.size() + 1 + ctime.size() + etime.size()); } sfinx_size_t get(u8_t *buf) { @@ -355,7 +364,7 @@ class sfinx_slice_t : public sfinx_t { } sfinx_slice_t(sfinx_slice_t *s) : sfinx_t(SFINX_ELEMENT_SLICE) { copy(s); } sfinx_slice_t(sfinx_id_t id_, string &name__, string &directory__, string &description__, - string &parent_name__, sfinx_id_t parent_id, Timestamp ctime_, Timestamp etime_, + string &parent_name__, sfinx_id_t parent_id, sfinx_timestamp_t ctime_, sfinx_timestamp_t etime_, sfinx_tid_t tid = SFINX_ELEMENT_SLICE) : sfinx_t(tid), id(id_), name_(name__), directory_(directory__), description_(description__), parent_name_(parent_name__), parent_id(parent_id), ctime(ctime_), etime(etime_) { size(); } @@ -945,7 +954,7 @@ class sfinx_note_t : public sfinx_t { sfinx_size_t put(u8_t *buf, sfinx_size_t available_buf_space) { if (size() > available_buf_space) return 0; - buf += ::put(note_id, buf); + buf += ::put(id, buf); buf += ::put(main_obj_id, buf); buf += ::put(main_obj_type, buf); buf += ::put(main_slice_id, buf); @@ -963,7 +972,7 @@ class sfinx_note_t : public sfinx_t { } sfinx_size_t get(u8_t *buf, sfinx_size_t object_size_in_buf) { u8_t *tmp = buf; - buf += ::get(¬e_id, buf); + buf += ::get(&id, buf); buf += ::get(&main_obj_id, buf); buf += ::get(&main_obj_type, buf); buf += ::get(&main_slice_id, buf); @@ -991,7 +1000,7 @@ class sfinx_note_t : public sfinx_t { bug(); ((sfinx_t *)s)->size(); copy_size_tid(src); - note_id = src->note_id; + id = src->id; main_obj_id = src->main_obj_id; main_obj_type = src->main_obj_type; main_slice_id = src->main_slice_id; @@ -1003,12 +1012,16 @@ class sfinx_note_t : public sfinx_t { etime = src->etime; tags = src->tags; } - sfinx_id_t note_id, main_obj_id, main_obj_type, main_slice_id; + sfinx_id_t id, main_obj_id, main_obj_type, main_slice_id; string name, url, text; u8_t secured; // 0 - none, 1 - crypted text, 2 - crypted text + url, 3 - all crypted sfinx_timestamp_t ctime, etime; vector tags; - sfinx_note_t(sfinx_tid_t tid = SFINX_ELEMENT_NOTE) : sfinx_t(tid) { size(); } + sfinx_note_t(sfinx_tid_t tid = SFINX_ELEMENT_NOTE) : sfinx_t(tid) { size(); } +// sfinx_note_t(sfinx_id_t id_, sfinx_id_t mobj_id, sfinx_id_t mobj_type, +// sfinx_id_t mslice_id, string n, sfinx_timestamp_t ct, sfinx_timestamp_t et) : +// sfinx_t(SFINX_ELEMENT_NOTE), id(id_), main_obj_id(mobj_id), main_obj_type(mobj_type), +// main_slice_id(mslice_id), name(n), ctime(ct), etime(et) { } }; #include @@ -1313,7 +1326,7 @@ class sfinx_elements { } } elements.push_back(el); - //debug("parsed ok: object: %s, len - %d", sfinx_cmd2str(id), len); + debug("parsed ok: object: %s, len - %d", sfinx_cmd2str(id), len); } // else buf_len is ok // data current_position += len; @@ -1407,10 +1420,10 @@ class sfinx_elements { return -3; } data_offset_ += element->size(); -// debug("added %s, el_id_size - %d, el_len - %lld (be_len 0x%x), el_len_size - %d, " -// "copied - %lld, data_size in tx_buf - %lld", sfinx_cmd2str(element->tid()), -// element_id_size, element->size(), coded_element_length_be32, element_length_size, -// res, data_offset_); + debug("added %s, el_id_size - %d, el_len - %lld (be_len 0x%x), el_len_size - %d, " + "copied - %lld, data_size in tx_buf - %lld", sfinx_cmd2str(element->tid()), + element_id_size, element->size(), coded_element_length_be32, element_length_size, + res, data_offset_); n_elements++; return 0; } diff --git a/sfinx/sfinx.C b/sfinx/sfinx.C index 1f03532..873ad7b 100644 --- a/sfinx/sfinx.C +++ b/sfinx/sfinx.C @@ -253,7 +253,7 @@ void faraon_session::get_slice(sfinx_id_t slice_id, sfinx_tid_t tid) st->Execute(); string name, directory, description, parent_name; int64_t id, parent_id; - IBPP::Timestamp ctime, etime; + sfinx_timestamp_t ctime, etime; if (!st->Fetch()) return; st->Get(1, &id); @@ -288,7 +288,7 @@ void faraon_session::get_slices(sfinx_tid_t el_id, sfinx_id_t except) st->Execute(); string name, description, parent_name, directory; int64_t id, parent_id; - IBPP::Timestamp ctime, etime; + sfinx_timestamp_t ctime, etime; sfinx_slice_vector_t slices(el_id); while (st->Fetch()) { st->Get(1, &id); @@ -320,11 +320,19 @@ void faraon_session::fill_notes(sfinx_slice_t *slice) IBPP::ilConcurrency, IBPP::lrWait); tr->Start(); IBPP::Statement st = sfinx->driver_->StatementFactory(sfinx->db_, tr); - st->Prepare("select id, name, main_obj_type, main_obj_id from notes where main_obj_slice_id = ?"); + st->Prepare("select id, name, ctime, etime from notes where " + "main_obj_slice_id = ?"); + st->Set(1, int64_t(slice->id)); st->Execute(); + int64_t id; + sfinx_timestamp_t ctime, etime; + string name; while (st->Fetch()) { - sfinx_object_t note; - //note. + st->Get(1, &id); + st->Get(2, name); + st->Get(3, ctime); + st->Get(4, etime); + sfinx_object_t note(SFINX_NOTE_OBJECT, (sfinx_id_t)id, slice->id, name.c_str(), ctime, etime); slice->add(note); } } @@ -340,7 +348,7 @@ void faraon_session::get_objects(sfinx_tid_t reply_id, u32_t obj_mask) st->Execute(); string name, description, parent_name, directory; int64_t id, parent_id; - IBPP::Timestamp ctime, etime; + sfinx_timestamp_t ctime, etime; sfinx_slice_vector_t slices(reply_id); while (st->Fetch()) { st->Get(1, &id); @@ -665,7 +673,7 @@ void faraon_session::send_dir(bool sorted, sfinx_file_t *f) sfinx_files_vector_t files(sorted ? SFINX_FILES_MODULE_SORTED_TREE : SFINX_FILES_MODULE_UNSORTED_TREE); if (f->name.size()) dir += f->name; - bool mime_detect = false; // true; + bool mime_detect = true; // TODO: change mime_detect // // 0 - no detect @@ -692,7 +700,9 @@ void faraon_session::send_dir(bool sorted, sfinx_file_t *f) sfinx_progress_t prg("Processing files metadata ..."); prg.max(n); send(prg); - u32_t p_id = sfinx->parent_slice_id(f->file_id); + u32_t p_id = 0; + if (sorted) + p_id = sfinx->parent_slice_id(f->file_id); for (int i = 0; i < n; i++) { if (prg.set(i, .5)) // ÛÁÇ 0.5% send(prg); @@ -710,9 +720,9 @@ void faraon_session::send_dir(bool sorted, sfinx_file_t *f) file.is_directory = true; file.etime.set(inode.st_ctime); // status changes file.ctime.set(inode.st_mtime); // last modification - // set parent_id for up traverse - file.compressed_fsize = p_id; if (sorted) { + // set parent_id for up traverse + file.compressed_fsize = p_id; if (file.is_directory) { // set dir id & dir parent_id from database IBPP::Transaction tr = sfinx->driver_->TransactionFactory(sfinx->db_, IBPP::amRead, IBPP::ilConcurrency, IBPP::lrWait); @@ -739,7 +749,7 @@ void faraon_session::send_dir(bool sorted, sfinx_file_t *f) } } else { // not sorted file.file_id = 0; - file.main_obj_type = file.main_obj_id = 0; + file.compressed_fsize = file.main_obj_type = file.main_obj_id = 0; } if (mime_detect) { const char *mimetype = magic_file(ms, full_path.c_str()); -- 2.11.4.GIT