这篇文章是对上篇文章的一个补充,上篇文章的整体思路是正确的,但是情况没考虑全,会出现一个BUG,感谢林老师的及时指正!
Seafile的一个最大特点是资料的安全性,资料库可以进行端到端的加密,并且在相互共享资料库时可以加一些权限操作,比如只读权限。这样当我们在进行移动、拷贝这些涉及不同资料库的操作时就应该考虑多种情况:
1.如果当前资料库是加密的,那么只能复制、移动到当前资料库
2.如果当前资料库不是加密的,那么可以复制、移动到所有的非加密资料库中
3.不能复制、移动到权限为只读的资料库
对于这些要求我们可以在列出所有资料库时加些限制,不列出没有move、copy权限的资料库,这样既可以为用户节省时间,也不会造成不必要的麻烦(因为就算要强制copy、move到没有权限的资料库,服务器也不会接受这个请求)
简单考虑过后,直接在代码中加入两个判断变量:是否加密,是否只读。在列出资料库列表时可根据这两个参数来决定列出哪些资料库。
自然语言:
if 原始资料库加密 then 只列出这个资料库
else 对所有资料库进行筛选(if 这个资料库不加密不只读 then 列出)
Java代码:
public void setSuitRepos(List<SeafRepo> repos, boolean repoIsEncrypted, String repoID) {
this.repos.clear();
for (SeafRepo repo: repos) {
if (repoIsEncrypted) {
if (repo.id.equals(repoID)) {
this.repos.add(repo);
}
}else if (hasRepoWritePermission(repo) && !repo.encrypted) {
this.repos.add(repo);
}
}
notifyDataSetChanged();
}