improved display of shared directories for friends with no update info

This commit is contained in:
csoler 2016-09-28 21:55:03 +02:00
parent 1d977dd0cb
commit 6e4ba76bbb
2 changed files with 24 additions and 11 deletions

View File

@ -242,6 +242,7 @@ bool DirectoryStorage::extractData(const EntryIndex& indx,DirDetails& d)
d.hash.clear() ; d.hash.clear() ;
d.count = dir_entry->subdirs.size() + dir_entry->subfiles.size(); d.count = dir_entry->subdirs.size() + dir_entry->subfiles.size();
d.min_age = now - dir_entry->dir_most_recent_time ; d.min_age = now - dir_entry->dir_most_recent_time ;
d.age = now - dir_entry->dir_modtime ;
d.name = dir_entry->dir_name; d.name = dir_entry->dir_name;
d.path = dir_entry->dir_parent_path + "/" + dir_entry->dir_name ; d.path = dir_entry->dir_parent_path + "/" + dir_entry->dir_name ;
d.parent = (void*)(intptr_t)dir_entry->parent_index ; d.parent = (void*)(intptr_t)dir_entry->parent_index ;

View File

@ -63,6 +63,11 @@ Qt::DropActions RetroshareDirModel::supportedDragActions() const
} }
#endif #endif
static bool isNewerThanEpoque(uint32_t age)
{
return age < time(NULL) - 1000 ; // this should be conservative enough
}
void FlatStyle_RDM::update() void FlatStyle_RDM::update()
{ {
if(_needs_update) if(_needs_update)
@ -241,7 +246,7 @@ QString RetroshareDirModel::getAgeIndicatorString(const DirDetails &details) con
QString ret(""); QString ret("");
QString nind = tr("NEW"); QString nind = tr("NEW");
// QString oind = tr("OLD"); // QString oind = tr("OLD");
uint32_t age = details.age; uint32_t age = details.min_age;
switch (ageIndicator) { switch (ageIndicator) {
case IND_LAST_DAY: case IND_LAST_DAY:
@ -327,7 +332,9 @@ QVariant TreeStyle_RDM::displayRole(const DirDetails& details,int coln) const
return (RemoteMode)?(QString::fromUtf8(rsPeers->getPeerName(details.id).c_str())):tr("My files"); return (RemoteMode)?(QString::fromUtf8(rsPeers->getPeerName(details.id).c_str())):tr("My files");
case 1: case 1:
return QString() ; return QString() ;
case 2: case 2: if(!isNewerThanEpoque(details.min_age))
return QString();
else
return misc::userFriendlyDuration(details.min_age); return misc::userFriendlyDuration(details.min_age);
default: default:
return QString() ; return QString() ;
@ -342,7 +349,7 @@ QVariant TreeStyle_RDM::displayRole(const DirDetails& details,int coln) const
case 1: case 1:
return misc::friendlyUnit(details.count); return misc::friendlyUnit(details.count);
case 2: case 2:
return misc::userFriendlyDuration(details.age); return misc::userFriendlyDuration(details.min_age);
case 3: case 3:
return getFlagsString(details.flags); return getFlagsString(details.flags);
// case 4: // case 4:
@ -417,7 +424,7 @@ QVariant FlatStyle_RDM::displayRole(const DirDetails& details,int coln) const
{ {
case 0: return QString::fromUtf8(details.name.c_str()); case 0: return QString::fromUtf8(details.name.c_str());
case 1: return misc::friendlyUnit(details.count); case 1: return misc::friendlyUnit(details.count);
case 2: return misc::userFriendlyDuration(details.age); case 2: return misc::userFriendlyDuration(details.min_age);
case 3: return QString::fromUtf8(rsPeers->getPeerName(details.id).c_str()); case 3: return QString::fromUtf8(rsPeers->getPeerName(details.id).c_str());
case 4: return computeDirectoryPath(details); case 4: return computeDirectoryPath(details);
default: default:
@ -457,7 +464,7 @@ QVariant TreeStyle_RDM::sortRole(const QModelIndex& /*index*/,const DirDetails&
case 1: case 1:
return (qulonglong) details.count; return (qulonglong) details.count;
case 2: case 2:
return details.age; return details.min_age;
case 3: case 3:
return getFlagsString(details.flags); return getFlagsString(details.flags);
case 4: case 4:
@ -503,7 +510,7 @@ QVariant FlatStyle_RDM::sortRole(const QModelIndex& index,const DirDetails& deta
{ {
case 0: return QString::fromUtf8(details.name.c_str()); case 0: return QString::fromUtf8(details.name.c_str());
case 1: return (qulonglong) details.count; case 1: return (qulonglong) details.count;
case 2: return details.age; case 2: return details.min_age;
case 3: return QString::fromUtf8(rsPeers->getPeerName(details.id).c_str()); case 3: return QString::fromUtf8(rsPeers->getPeerName(details.id).c_str());
case 4: { case 4: {
@ -570,6 +577,10 @@ QVariant RetroshareDirModel::data(const QModelIndex &index, int role) const
if(role == Qt::DecorationRole) if(role == Qt::DecorationRole)
return decorationRole(details,coln) ; return decorationRole(details,coln) ;
if(role == Qt::ToolTipRole)
if(!isNewerThanEpoque(details.min_age))
return tr("This node hasn't sent any directory information yet.") ;
/***************** /*****************
Qt::EditRole Qt::EditRole
Qt::ToolTipRole Qt::ToolTipRole
@ -842,7 +853,8 @@ Qt::ItemFlags RetroshareDirModel::flags( const QModelIndex & index ) const
switch(details.type) switch(details.type)
{ {
case DIR_TYPE_PERSON: return Qt::ItemIsEnabled; // we grey out a person that has never been updated. It's easy to spot these, since the min age of the directory is approx equal to time(NULL), which exceeds 40 years.
case DIR_TYPE_PERSON:return isNewerThanEpoque(details.min_age)? (Qt::ItemIsEnabled):(Qt::NoItemFlags) ;
case DIR_TYPE_DIR: return Qt::ItemIsSelectable | Qt::ItemIsEnabled; case DIR_TYPE_DIR: return Qt::ItemIsSelectable | Qt::ItemIsEnabled;
case DIR_TYPE_FILE: return Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsEnabled; case DIR_TYPE_FILE: return Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsEnabled;
} }