void RepoTreeModel::setRepos(const std::vector<ServerRepo>& repos) { int i, n = repos.size(); // removeReposDeletedOnServer(repos); clear(); for (i = 0; i < n; i++) { const ServerRepo& repo = repos[i]; if (repo.isPersonalRepo()) { checkPersonalRepo(repo); } else if (repo.isSharedRepo()) { checkSharedRepo(repo); } else { checkGroupRepo(repo); } } }
void RepoTreeModel::setRepos(const std::vector<ServerRepo>& repos) { size_t i, n = repos.size(); // removeReposDeletedOnServer(repos); clear(); QHash<QString, ServerRepo> map; for (i = 0; i < n; i++) { const ServerRepo& repo = repos[i]; if (repo.isPersonalRepo()) { if (repo.isVirtual()) { checkVirtualRepo(repo); } else { checkPersonalRepo(repo); } } else if (repo.isSharedRepo()) { checkSharedRepo(repo); } else { checkGroupRepo(repo); } if (repo.isSubfolder() || seafApplet->rpcClient()->hasLocalRepo(repo.id)) checkSyncedRepo(repo); // we have a conflicting case, don't use group version if we can if (map.contains(repo.id) && repo.isGroupRepo()) continue; map[repo.id] = repo; } QList<ServerRepo> list = map.values(); // sort all repos by timestamp // use std::sort for qt containers will force additional copy. // anyway, we can use qt's alternative qSort for it qSort(list.begin(), list.end(), compareRepoByTimestamp); n = qMin(list.size(), kMaxRecentUpdatedRepos); for (i = 0; i < n; i++) { RepoItem *item = new RepoItem(list[i]); recent_updated_category_->appendRow(item); } }