Skip to content

Commit 66a1909

Browse files
committed
compute and expose cumulative file counts for shared directories
1 parent a076abe commit 66a1909

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
@@ -675,15 +675,21 @@ uint64_t InternalFileHierarchyStorage::recursUpdateCumulatedSize(const Directory
675675
DirEntry& d(*static_cast<DirEntry*>(mNodes[dir_index])) ;
676676

677677
uint64_t local_cumulative_size = 0;
678+
uint32_t local_cumulative_files = 0;
678679

679680
for(uint32_t i=0;i<d.subfiles.size();++i)
680-
if(mNodes[d.subfiles[i]]) // normally not needed, but an extra-security
681+
if(mNodes[d.subfiles[i]]) { // normally not needed, but an extra-security
681682
local_cumulative_size += static_cast<FileEntry*>(mNodes[d.subfiles[i]])->file_size;
683+
local_cumulative_files++;
684+
}
682685

683-
for(uint32_t i=0;i<d.subdirs.size();++i)
686+
for(uint32_t i=0;i<d.subdirs.size();++i) {
684687
local_cumulative_size += recursUpdateCumulatedSize(d.subdirs[i]);
688+
local_cumulative_files += static_cast<DirEntry*>(mNodes[d.subdirs[i]])->dir_cumulated_files;
689+
}
685690

686691
d.dir_cumulated_size = local_cumulative_size;
692+
d.dir_cumulated_files = local_cumulative_files;
687693
return local_cumulative_size;
688694
}
689695
// 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
@@ -249,6 +249,7 @@ bool DirectoryStorage::extractData(const EntryIndex& indx,DirDetails& d)
249249
d.type = DIR_TYPE_DIR;
250250
d.hash.clear() ;
251251
d.size = dir_entry->dir_cumulated_size;//dir_entry->subdirs.size() + dir_entry->subfiles.size();
252+
d.count = dir_entry->dir_cumulated_files;
252253
d.max_mtime = dir_entry->dir_most_recent_time ;
253254
d.mtime = dir_entry->dir_modtime ;
254255
d.name = dir_entry->dir_name;

src/retroshare/rstypes.h

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

286286

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

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

0 commit comments

Comments
 (0)