Skip to content

Commit cc22c1b

Browse files
committed
compute and expose cumulative file counts for shared directories
1 parent 51c969f commit cc22c1b

4 files changed

Lines changed: 14 additions & 4 deletions

File tree

src/file_sharing/dir_hierarchy.cc

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -674,15 +674,21 @@ uint64_t InternalFileHierarchyStorage::recursUpdateCumulatedSize(const Directory
674674
DirEntry& d(*static_cast<DirEntry*>(mNodes[dir_index])) ;
675675

676676
uint64_t local_cumulative_size = 0;
677+
uint32_t local_cumulative_files = 0;
677678

678679
for(uint32_t i=0;i<d.subfiles.size();++i)
679-
if(mNodes[d.subfiles[i]]) // normally not needed, but an extra-security
680+
if(mNodes[d.subfiles[i]]) { // normally not needed, but an extra-security
680681
local_cumulative_size += static_cast<FileEntry*>(mNodes[d.subfiles[i]])->file_size;
682+
local_cumulative_files++;
683+
}
681684

682-
for(uint32_t i=0;i<d.subdirs.size();++i)
685+
for(uint32_t i=0;i<d.subdirs.size();++i) {
683686
local_cumulative_size += recursUpdateCumulatedSize(d.subdirs[i]);
687+
local_cumulative_files += static_cast<DirEntry*>(mNodes[d.subdirs[i]])->dir_cumulated_files;
688+
}
684689

685690
d.dir_cumulated_size = local_cumulative_size;
691+
d.dir_cumulated_files = local_cumulative_files;
686692
return local_cumulative_size;
687693
}
688694
// Do a complete recursive sweep over sub-directories and files, and update the lst modf TS. This could be also performed by a cleanup method.

src/file_sharing/dir_hierarchy.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ class InternalFileHierarchyStorage
6363
class DirEntry: public FileStorageNode
6464
{
6565
public:
66-
explicit DirEntry(const std::string& name) : dir_name(name), dir_cumulated_size(0), dir_modtime(0),dir_most_recent_time(0),dir_update_time(0) {}
66+
explicit DirEntry(const std::string& name) : dir_name(name), dir_cumulated_size(0), dir_cumulated_files(0), dir_modtime(0),dir_most_recent_time(0),dir_update_time(0) {}
6767
virtual ~DirEntry() {}
6868

6969
virtual uint32_t type() const { return FileStorageNode::TYPE_DIR ; }
@@ -73,6 +73,7 @@ class InternalFileHierarchyStorage
7373
std::string dir_parent_path ;
7474
RsFileHash dir_hash ;
7575
uint64_t dir_cumulated_size;
76+
uint32_t dir_cumulated_files;
7677

7778
std::vector<DirectoryStorage::EntryIndex> subdirs ;
7879
std::vector<DirectoryStorage::EntryIndex> subfiles ;

src/file_sharing/directory_storage.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,7 @@ bool DirectoryStorage::extractData(const EntryIndex& indx,DirDetails& d)
248248
d.type = DIR_TYPE_DIR;
249249
d.hash.clear() ;
250250
d.size = dir_entry->dir_cumulated_size;//dir_entry->subdirs.size() + dir_entry->subfiles.size();
251+
d.count = dir_entry->dir_cumulated_files;
251252
d.max_mtime = dir_entry->dir_most_recent_time ;
252253
d.mtime = dir_entry->dir_modtime ;
253254
d.name = dir_entry->dir_name;

src/retroshare/rstypes.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,7 @@ struct DirStub : RsSerializable
280280
struct DirDetails : RsSerializable
281281
{
282282
DirDetails() : parent(nullptr), prow(0), ref(nullptr),
283-
type(DIR_TYPE_UNKNOWN), size(0), mtime(0), max_mtime(0) {}
283+
type(DIR_TYPE_UNKNOWN), size(0), mtime(0), max_mtime(0), count(0) {}
284284

285285

286286
/* G10h4ck do we still need to keep this as void* instead of uint64_t for
@@ -302,6 +302,7 @@ struct DirDetails : RsSerializable
302302
uint32_t mtime; // file/directory modification time, according to what the system reports
303303
FileStorageFlags flags;
304304
uint32_t max_mtime ; // maximum modification time of the whole hierarchy below.
305+
uint32_t count; // cumulative number of files in the directory hierarchy.
305306

306307
std::vector<DirStub> children;
307308
std::list<RsNodeGroupId> parent_groups; // parent groups for the shared directory
@@ -331,6 +332,7 @@ struct DirDetails : RsSerializable
331332
RS_SERIAL_PROCESS(mtime);
332333
RS_SERIAL_PROCESS(flags);
333334
RS_SERIAL_PROCESS(max_mtime);
335+
RS_SERIAL_PROCESS(count);
334336
RS_SERIAL_PROCESS(children);
335337
RS_SERIAL_PROCESS(parent_groups);
336338
}

0 commit comments

Comments
 (0)