mirror of
https://github.com/haiwen/seahub.git
synced 2025-04-27 19:05:16 +00:00
Optimize avatar (#6991)
* update * update2 * other * other * update * update * Update test_user_avatar.py * Update migrate_avatars_fs2db.py --------- Co-authored-by: 孙永强 <11704063+s-yongqiang@user.noreply.gitee.com> Co-authored-by: r350178982 <32759763+r350178982@users.noreply.github.com>
This commit is contained in:
parent
2d005e98cd
commit
f9b3e692ec
@ -41,8 +41,7 @@ class FileAccessLog extends React.Component {
|
||||
listFileAccessLog = (page) => {
|
||||
const { repoID, filePath } = this.props;
|
||||
const { perPage, items } = this.state;
|
||||
const avatarSize = 24 * 2;
|
||||
fileAccessLogAPI.listFileAccessLog(repoID, filePath, page, perPage, avatarSize).then((res) => {
|
||||
fileAccessLogAPI.listFileAccessLog(repoID, filePath, page, perPage).then((res) => {
|
||||
const { data: newItems } = res.data;
|
||||
this.setState({
|
||||
isLoading: false,
|
||||
|
@ -52,7 +52,7 @@ class UserAvatarForm extends React.Component {
|
||||
return false;
|
||||
}
|
||||
|
||||
seafileAPI.updateUserAvatar(file, 160).then((res) => {
|
||||
seafileAPI.updateUserAvatar(file).then((res) => {
|
||||
this.setState({
|
||||
avatarSrc: res.data.avatar_url
|
||||
});
|
||||
|
@ -33,7 +33,6 @@ class FilesActivities extends Component {
|
||||
availableUsers: [],
|
||||
targetUsers: []
|
||||
};
|
||||
this.avatarSize = 72;
|
||||
this.curPathList = [];
|
||||
this.oldPathList = [];
|
||||
this.availableUserEmails = new Set();
|
||||
@ -41,7 +40,7 @@ class FilesActivities extends Component {
|
||||
|
||||
componentDidMount() {
|
||||
let { currentPage, availableUsers } = this.state;
|
||||
seafileAPI.listActivities(currentPage, this.avatarSize).then(res => {
|
||||
seafileAPI.listActivities(currentPage).then(res => {
|
||||
// {"events":[...]}
|
||||
let events = this.mergePublishEvents(res.data.events);
|
||||
events = this.mergeFileCreateEvents(events);
|
||||
@ -140,7 +139,7 @@ class FilesActivities extends Component {
|
||||
|
||||
getMore() {
|
||||
const { currentPage, availableUsers, targetUsers } = this.state;
|
||||
seafileAPI.listActivities(currentPage, this.avatarSize).then(res => {
|
||||
seafileAPI.listActivities(currentPage).then(res => {
|
||||
// {"events":[...]}
|
||||
let events = this.mergePublishEvents(res.data.events);
|
||||
events = this.mergeFileCreateEvents(events);
|
||||
|
@ -256,7 +256,7 @@ class User extends Component {
|
||||
componentDidMount() {
|
||||
// avatar size: 160
|
||||
const email = decodeURIComponent(this.props.email);
|
||||
systemAdminAPI.sysAdminGetUser(email, 160).then((res) => {
|
||||
systemAdminAPI.sysAdminGetUser(email).then((res) => {
|
||||
this.setState({
|
||||
loading: false,
|
||||
userInfo: res.data
|
||||
|
@ -32,13 +32,12 @@ class FileAccessLogAPI {
|
||||
return this;
|
||||
}
|
||||
|
||||
listFileAccessLog(repoID, filePath, page, perPage, avatarSize) {
|
||||
listFileAccessLog(repoID, filePath, page, perPage) {
|
||||
const url = this.server + '/api/v2.1/repos/' + repoID + '/file/access-log/';
|
||||
const params = {
|
||||
path: filePath,
|
||||
page: page || 1,
|
||||
per_page: perPage || 100,
|
||||
avatar_size: avatarSize || 64
|
||||
per_page: perPage || 100
|
||||
};
|
||||
return this.req.get(url, { params: params });
|
||||
}
|
||||
|
@ -874,13 +874,9 @@ class SystemAdminAPI {
|
||||
return this.req.delete(url);
|
||||
}
|
||||
|
||||
sysAdminGetUser(email, avatarSize) {
|
||||
sysAdminGetUser(email) {
|
||||
const url = this.server + '/api/v2.1/admin/users/' + encodeURIComponent(email) + '/';
|
||||
let params = {};
|
||||
if (avatarSize) {
|
||||
params.avatar_size = avatarSize;
|
||||
}
|
||||
return this.req.get(url, { params: params });
|
||||
return this.req.get(url);
|
||||
}
|
||||
|
||||
sysAdminResetUserPassword(email) {
|
||||
|
@ -66,12 +66,7 @@ class ActivitiesView(APIView):
|
||||
d['author_name'] = email2nickname(e.op_user)
|
||||
d['author_contact_email'] = email2contact_email(e.op_user)
|
||||
|
||||
try:
|
||||
avatar_size = int(request.GET.get('avatar_size', 72))
|
||||
except ValueError as e:
|
||||
avatar_size = 72
|
||||
|
||||
url, is_default, date_uploaded = api_avatar_url(e.op_user, avatar_size)
|
||||
url, is_default, date_uploaded = api_avatar_url(e.op_user)
|
||||
d['avatar_url'] = url
|
||||
d['time'] = utc_datetime_to_isoformat_timestr(e.timestamp)
|
||||
|
||||
|
@ -129,10 +129,10 @@ class AdminAddressBookGroup(APIView):
|
||||
throttle_classes = (UserRateThrottle,)
|
||||
permission_classes = (IsAdminUser, IsProVersion)
|
||||
|
||||
def _get_address_book_group_memeber_info(self, request, group_member_obj, avatar_size):
|
||||
def _get_address_book_group_memeber_info(self, request, group_member_obj):
|
||||
|
||||
email = group_member_obj.user_name
|
||||
avatar_url, is_default, date_uploaded = api_avatar_url(email, avatar_size)
|
||||
avatar_url, is_default, date_uploaded = api_avatar_url(email)
|
||||
|
||||
group_id = group_member_obj.group_id
|
||||
group = ccnet_api.get_group(group_member_obj.group_id)
|
||||
@ -166,12 +166,6 @@ class AdminAddressBookGroup(APIView):
|
||||
error_msg = 'Group %d not found.' % group_id
|
||||
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
||||
|
||||
try:
|
||||
avatar_size = int(request.GET.get('avatar_size',
|
||||
AVATAR_DEFAULT_SIZE))
|
||||
except ValueError:
|
||||
avatar_size = AVATAR_DEFAULT_SIZE
|
||||
|
||||
try:
|
||||
return_ancestors = to_python_boolean(request.GET.get(
|
||||
'return_ancestors', 'f'))
|
||||
@ -194,7 +188,7 @@ class AdminAddressBookGroup(APIView):
|
||||
return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)
|
||||
|
||||
for m in members:
|
||||
member_info = self._get_address_book_group_memeber_info(request, m, avatar_size)
|
||||
member_info = self._get_address_book_group_memeber_info(request, m)
|
||||
if member_info['role'] == 'Owner':
|
||||
continue
|
||||
ret_members.append(member_info)
|
||||
|
@ -44,11 +44,6 @@ class AdminGroupMembers(APIView):
|
||||
error_msg = 'Group %d not found.' % group_id
|
||||
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
||||
|
||||
try:
|
||||
avatar_size = int(request.GET.get('avatar_size', AVATAR_DEFAULT_SIZE))
|
||||
except ValueError:
|
||||
avatar_size = AVATAR_DEFAULT_SIZE
|
||||
|
||||
try:
|
||||
page = int(request.GET.get('page', '1'))
|
||||
per_page = int(request.GET.get('per_page', '100'))
|
||||
@ -74,7 +69,7 @@ class AdminGroupMembers(APIView):
|
||||
|
||||
group_members_info = []
|
||||
for m in members:
|
||||
member_info = get_group_member_info(request, group_id, m.user_name, avatar_size)
|
||||
member_info = get_group_member_info(request, group_id, m.user_name)
|
||||
group_members_info.append(member_info)
|
||||
|
||||
group_members = {
|
||||
|
@ -83,12 +83,7 @@ class UserActivitiesView(APIView):
|
||||
d['author_name'] = email2nickname(e.op_user)
|
||||
d['author_contact_email'] = email2contact_email(e.op_user)
|
||||
|
||||
try:
|
||||
avatar_size = int(request.GET.get('avatar_size', 72))
|
||||
except ValueError as e:
|
||||
avatar_size = 72
|
||||
|
||||
url, is_default, date_uploaded = api_avatar_url(e.op_user, avatar_size)
|
||||
url, is_default, date_uploaded = api_avatar_url(e.op_user)
|
||||
d['avatar_url'] = url
|
||||
d['time'] = utc_datetime_to_isoformat_timestr(e.timestamp)
|
||||
|
||||
|
@ -1244,14 +1244,6 @@ class AdminUser(APIView):
|
||||
request.user.admin_permissions.can_update_user()):
|
||||
return api_error(status.HTTP_403_FORBIDDEN, 'Permission denied.')
|
||||
|
||||
avatar_size = request.data.get('avatar_size', 64)
|
||||
try:
|
||||
avatar_size = int(avatar_size)
|
||||
except Exception as e:
|
||||
logger.error(e)
|
||||
error_msg = 'avatar_size invalid.'
|
||||
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
|
||||
|
||||
try:
|
||||
User.objects.get(email=email)
|
||||
except User.DoesNotExist:
|
||||
@ -1259,7 +1251,7 @@ class AdminUser(APIView):
|
||||
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
||||
|
||||
user_info = get_user_info(email)
|
||||
user_info['avatar_url'], _, _ = api_avatar_url(email, avatar_size)
|
||||
user_info['avatar_url'], _, _ = api_avatar_url(email)
|
||||
if is_pro_version():
|
||||
user_info['upload_rate_limit'] = byte_to_kb(seafile_api.get_user_upload_rate_limit(email))
|
||||
user_info['download_rate_limit'] = byte_to_kb(seafile_api.get_user_download_rate_limit(email))
|
||||
|
@ -80,7 +80,7 @@ class DirSharedItemsEndpoint(APIView):
|
||||
admin_users = ExtraSharePermission.objects.get_admin_users_by_repo(repo_id)
|
||||
ret = []
|
||||
for item in share_items:
|
||||
avatar_url, is_default, date_uploaded = api_avatar_url(item.user, 72)
|
||||
avatar_url, is_default, date_uploaded = api_avatar_url(item.user)
|
||||
ret.append({
|
||||
"share_type": "user",
|
||||
"user_info": {
|
||||
@ -414,7 +414,7 @@ class DirSharedItemsEndpoint(APIView):
|
||||
|
||||
share_dir_to_user(repo, path, repo_owner, username, to_user, permission, None)
|
||||
|
||||
avatar_url, is_default, date_uploaded = api_avatar_url(to_user, 72)
|
||||
avatar_url, is_default, date_uploaded = api_avatar_url(to_user)
|
||||
result['success'].append({
|
||||
"share_type": "user",
|
||||
"user_info": {
|
||||
|
@ -44,7 +44,7 @@ class DraftReviewerView(APIView):
|
||||
# get reviewer list
|
||||
reviewers = []
|
||||
for x in d.draftreviewer_set.all():
|
||||
reviewer = user_to_dict(x.reviewer, request=request, avatar_size=avatar_size)
|
||||
reviewer = user_to_dict(x.reviewer, request=request)
|
||||
reviewers.append(reviewer)
|
||||
|
||||
return Response({'reviewers': reviewers})
|
||||
|
@ -60,11 +60,6 @@ class FileAccessLogView(APIView):
|
||||
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
||||
|
||||
# get access log
|
||||
try:
|
||||
avatar_size = int(request.GET.get('avatar_size', 32))
|
||||
except ValueError:
|
||||
avatar_size = 32
|
||||
|
||||
try:
|
||||
current_page = int(request.GET.get('page', '1'))
|
||||
per_page = int(request.GET.get('per_page', '25'))
|
||||
@ -87,8 +82,7 @@ class FileAccessLogView(APIView):
|
||||
info = {}
|
||||
|
||||
username = event.user
|
||||
url, is_default, date_uploaded = api_avatar_url(username,
|
||||
avatar_size)
|
||||
url, is_default, date_uploaded = api_avatar_url(username)
|
||||
info['avatar_url'] = url
|
||||
info['email'] = username
|
||||
info['name'] = email2nickname(username)
|
||||
|
@ -47,8 +47,7 @@ class FileCommentView(APIView):
|
||||
avatar_size = AVATAR_DEFAULT_SIZE
|
||||
|
||||
comment = file_comment.to_dict()
|
||||
comment.update(user_to_dict(file_comment.author, request=request,
|
||||
avatar_size=avatar_size))
|
||||
comment.update(user_to_dict(file_comment.author, request=request))
|
||||
|
||||
return Response(comment)
|
||||
|
||||
@ -137,6 +136,6 @@ class FileCommentView(APIView):
|
||||
avatar_size = AVATAR_DEFAULT_SIZE
|
||||
|
||||
comment = file_comment.to_dict()
|
||||
comment.update(user_to_dict(file_comment.author, request=request, avatar_size=avatar_size))
|
||||
comment.update(user_to_dict(file_comment.author, request=request))
|
||||
|
||||
return Response(comment)
|
||||
|
@ -49,12 +49,9 @@ class FileCommentsView(APIView):
|
||||
return api_error(status.HTTP_403_FORBIDDEN, 'Permission denied.')
|
||||
|
||||
try:
|
||||
avatar_size = int(request.GET.get('avatar_size',
|
||||
AVATAR_DEFAULT_SIZE))
|
||||
page = int(request.GET.get('page', '1'))
|
||||
per_page = int(request.GET.get('per_page', '25'))
|
||||
except ValueError:
|
||||
avatar_size = AVATAR_DEFAULT_SIZE
|
||||
page = 1
|
||||
per_page = 25
|
||||
|
||||
@ -72,7 +69,7 @@ class FileCommentsView(APIView):
|
||||
|
||||
for file_comment in file_comments:
|
||||
comment = file_comment.to_dict()
|
||||
comment.update(user_to_dict(file_comment.author, request=request, avatar_size=avatar_size))
|
||||
comment.update(user_to_dict(file_comment.author, request=request))
|
||||
comments.append(comment)
|
||||
|
||||
result = {'comments': comments, 'total_count': total_count}
|
||||
@ -141,5 +138,5 @@ class FileCommentsView(APIView):
|
||||
author=username)
|
||||
|
||||
comment = file_comment.to_dict()
|
||||
comment.update(user_to_dict(username, request=request, avatar_size=avatar_size))
|
||||
comment.update(user_to_dict(username, request=request))
|
||||
return Response(comment, status=201)
|
||||
|
@ -23,12 +23,12 @@ from seahub.base.templatetags.seahub_tags import email2nickname, \
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
def get_new_file_history_info(ent, avatar_size):
|
||||
def get_new_file_history_info(ent):
|
||||
|
||||
info = {}
|
||||
|
||||
creator_name = ent.op_user
|
||||
url, is_default, date_uploaded = api_avatar_url(creator_name, avatar_size)
|
||||
url, is_default, date_uploaded = api_avatar_url(creator_name)
|
||||
|
||||
info['creator_avatar_url'] = url
|
||||
info['creator_email'] = creator_name
|
||||
@ -44,14 +44,14 @@ def get_new_file_history_info(ent, avatar_size):
|
||||
|
||||
return info
|
||||
|
||||
def get_file_history_info(commit, avatar_size):
|
||||
def get_file_history_info(commit):
|
||||
|
||||
info = {}
|
||||
|
||||
creator_name = getattr(commit, 'creator_name', '')
|
||||
if creator_name is None:
|
||||
creator_name = ''
|
||||
url, is_default, date_uploaded = api_avatar_url(creator_name, avatar_size)
|
||||
url, is_default, date_uploaded = api_avatar_url(creator_name)
|
||||
|
||||
info['creator_avatar_url'] = url
|
||||
info['creator_email'] = creator_name
|
||||
@ -92,11 +92,6 @@ class FileHistoryView(APIView):
|
||||
if not commit_id:
|
||||
commit_id = repo.head_cmmt_id
|
||||
|
||||
try:
|
||||
avatar_size = int(request.GET.get('avatar_size', 32))
|
||||
except ValueError:
|
||||
avatar_size = 32
|
||||
|
||||
# Don't use seafile_api.get_file_id_by_path()
|
||||
# if path parameter is `rev_renamed_old_path`.
|
||||
# seafile_api.get_file_id_by_path() will return None.
|
||||
@ -141,7 +136,7 @@ class FileHistoryView(APIView):
|
||||
if (keep_days != -1) and ((present_time - history_time).days > keep_days):
|
||||
next_start_commit = False
|
||||
break
|
||||
info = get_file_history_info(commit, avatar_size)
|
||||
info = get_file_history_info(commit)
|
||||
info['path'] = path
|
||||
result.append(info)
|
||||
|
||||
@ -176,11 +171,9 @@ class NewFileHistoryView(APIView):
|
||||
commit_id = repo.head_cmmt_id
|
||||
|
||||
try:
|
||||
avatar_size = int(request.GET.get('avatar_size', 32))
|
||||
page = int(request.GET.get('page', '1'))
|
||||
per_page = int(request.GET.get('per_page', '25'))
|
||||
except ValueError:
|
||||
avatar_size = 32
|
||||
page = 1
|
||||
per_page = 25
|
||||
|
||||
@ -216,7 +209,7 @@ class NewFileHistoryView(APIView):
|
||||
error_msg = 'Internal Server Error'
|
||||
return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)
|
||||
|
||||
data = [get_new_file_history_info(ent, avatar_size) for ent in file_revisions]
|
||||
data = [get_new_file_history_info(ent) for ent in file_revisions]
|
||||
result = {
|
||||
"data": data,
|
||||
"page": page,
|
||||
|
@ -45,12 +45,6 @@ class GroupMembers(APIView):
|
||||
"""
|
||||
Get all group members.
|
||||
"""
|
||||
|
||||
try:
|
||||
avatar_size = int(request.GET.get('avatar_size', AVATAR_DEFAULT_SIZE))
|
||||
except ValueError:
|
||||
avatar_size = AVATAR_DEFAULT_SIZE
|
||||
|
||||
try:
|
||||
page = int(request.GET.get('page', '1'))
|
||||
per_page = int(request.GET.get('per_page', '100'))
|
||||
@ -81,7 +75,7 @@ class GroupMembers(APIView):
|
||||
if is_admin == 'true' and not m.is_staff:
|
||||
continue
|
||||
|
||||
member_info = get_group_member_info(request, group_id, m.user_name, avatar_size)
|
||||
member_info = get_group_member_info(request, group_id, m.user_name)
|
||||
group_members.append(member_info)
|
||||
|
||||
return Response(group_members)
|
||||
@ -191,12 +185,7 @@ class GroupMember(APIView):
|
||||
error_msg = 'Internal Server Error'
|
||||
return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)
|
||||
|
||||
try:
|
||||
avatar_size = int(request.GET.get('avatar_size', AVATAR_DEFAULT_SIZE))
|
||||
except ValueError:
|
||||
avatar_size = AVATAR_DEFAULT_SIZE
|
||||
|
||||
member_info = get_group_member_info(request, group_id, email, avatar_size)
|
||||
member_info = get_group_member_info(request, group_id, email)
|
||||
|
||||
return Response(member_info)
|
||||
|
||||
|
@ -29,7 +29,7 @@ from seahub.share.models import FileShare
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def get_share_link_info(fileshare, avatar_size=AVATAR_DEFAULT_SIZE):
|
||||
def get_share_link_info(fileshare):
|
||||
|
||||
data = {}
|
||||
token = fileshare.token
|
||||
@ -55,7 +55,7 @@ def get_share_link_info(fileshare, avatar_size=AVATAR_DEFAULT_SIZE):
|
||||
data['creator_name'] = email2nickname(creator_email)
|
||||
data['creator_contact_email'] = email2contact_email(creator_email)
|
||||
|
||||
url, _, _ = api_avatar_url(creator_email, avatar_size)
|
||||
url, _, _ = api_avatar_url(creator_email)
|
||||
data['creator_avatar'] = url
|
||||
|
||||
data['path'] = path
|
||||
@ -105,16 +105,11 @@ class RepoShareLinks(APIView):
|
||||
|
||||
offset = per_page * (current_page - 1)
|
||||
|
||||
try:
|
||||
avatar_size = int(request.GET.get('avatar_size', AVATAR_DEFAULT_SIZE))
|
||||
except ValueError:
|
||||
avatar_size = AVATAR_DEFAULT_SIZE
|
||||
|
||||
result = []
|
||||
fileshares = FileShare.objects.filter(repo_id=repo_id)[offset:offset + per_page]
|
||||
|
||||
for fileshare in fileshares:
|
||||
link_info = get_share_link_info(fileshare, avatar_size)
|
||||
link_info = get_share_link_info(fileshare)
|
||||
link_info['repo_id'] = repo_id
|
||||
link_info['repo_name'] = repo.name
|
||||
result.append(link_info)
|
||||
|
@ -26,7 +26,7 @@ from seahub.utils.timeutils import datetime_to_isoformat_timestr
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def get_upload_link_info(upload_link, avatar_size=AVATAR_DEFAULT_SIZE):
|
||||
def get_upload_link_info(upload_link):
|
||||
|
||||
data = {}
|
||||
token = upload_link.token
|
||||
@ -52,7 +52,7 @@ def get_upload_link_info(upload_link, avatar_size=AVATAR_DEFAULT_SIZE):
|
||||
data['creator_name'] = email2nickname(creator_email)
|
||||
data['creator_contact_email'] = email2contact_email(creator_email)
|
||||
|
||||
url, _, _ = api_avatar_url(creator_email, avatar_size)
|
||||
url, _, _ = api_avatar_url(creator_email)
|
||||
data['creator_avatar'] = url
|
||||
|
||||
data['path'] = path
|
||||
@ -100,16 +100,11 @@ class RepoUploadLinks(APIView):
|
||||
|
||||
offset = per_page * (current_page - 1)
|
||||
|
||||
try:
|
||||
avatar_size = int(request.GET.get('avatar_size', AVATAR_DEFAULT_SIZE))
|
||||
except ValueError:
|
||||
avatar_size = AVATAR_DEFAULT_SIZE
|
||||
|
||||
upload_links = UploadLinkShare.objects.filter(repo_id=repo_id)[offset:offset + per_page]
|
||||
|
||||
result = []
|
||||
for upload_link in upload_links:
|
||||
link_info = get_upload_link_info(upload_link, avatar_size)
|
||||
link_info = get_upload_link_info(upload_link)
|
||||
link_info['repo_id'] = repo_id
|
||||
link_info['repo_name'] = repo.name
|
||||
result.append(link_info)
|
||||
|
@ -123,7 +123,7 @@ class ReposView(APIView):
|
||||
|
||||
if is_wiki_repo(r):
|
||||
continue
|
||||
url, _, _ = api_avatar_url(email, int(24))
|
||||
url, _, _ = api_avatar_url(email)
|
||||
|
||||
repo_info = {
|
||||
"type": "mine",
|
||||
@ -197,7 +197,7 @@ class ReposView(APIView):
|
||||
|
||||
owner_name = group_name if is_group_owned_repo else nickname_dict.get(owner_email, '')
|
||||
owner_contact_email = '' if is_group_owned_repo else contact_email_dict.get(owner_email, '')
|
||||
url, _, _ = api_avatar_url(owner_email, int(24))
|
||||
url, _, _ = api_avatar_url(owner_email)
|
||||
|
||||
repo_info = {
|
||||
"type": "shared",
|
||||
@ -309,7 +309,7 @@ class ReposView(APIView):
|
||||
continue
|
||||
|
||||
repo_owner = repo_id_owner_dict[r.repo_id]
|
||||
url, _, _ = api_avatar_url(repo_owner, int(24))
|
||||
url, _, _ = api_avatar_url(repo_owner)
|
||||
repo_info = {
|
||||
"type": "public",
|
||||
"repo_id": r.repo_id,
|
||||
@ -376,7 +376,7 @@ class RepoView(APIView):
|
||||
lib_need_decrypt = True
|
||||
|
||||
repo_owner = get_repo_owner(request, repo_id)
|
||||
url, _, _ = api_avatar_url(repo_owner, int(24))
|
||||
url, _, _ = api_avatar_url(repo_owner)
|
||||
|
||||
try:
|
||||
has_been_shared_out = repo_has_been_shared_out(request, repo_id)
|
||||
|
@ -153,26 +153,21 @@ class SearchUser(APIView):
|
||||
if CUSTOM_SEARCH_USER:
|
||||
email_result = custom_search_user(request, email_result)
|
||||
|
||||
# format user result
|
||||
try:
|
||||
size = int(request.GET.get('avatar_size', 32))
|
||||
except ValueError:
|
||||
size = 32
|
||||
|
||||
formated_result = format_searched_user_result(
|
||||
request, email_result[:10], size)
|
||||
request, email_result[:10])
|
||||
|
||||
return Response({"users": formated_result})
|
||||
|
||||
|
||||
def format_searched_user_result(request, users, size):
|
||||
def format_searched_user_result(request, users):
|
||||
results = []
|
||||
if ENABLE_SHOW_LOGIN_ID_WHEN_SEARCH_USER:
|
||||
profile_queryset = Profile.objects.filter(user__in=users)
|
||||
profile_dict = {p.user: p.login_id for p in profile_queryset if p.login_id}
|
||||
|
||||
for email in users:
|
||||
url, is_default, date_uploaded = api_avatar_url(email, size)
|
||||
url, is_default, date_uploaded = api_avatar_url(email)
|
||||
user_info = {
|
||||
"email": email,
|
||||
"avatar_url": url,
|
||||
|
@ -25,7 +25,7 @@ logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def get_user_auth_info(username, token):
|
||||
avatar_url, _, _ = api_avatar_url(username, 72)
|
||||
avatar_url, _, _ = api_avatar_url(username)
|
||||
name = email2nickname(username)
|
||||
contact_email = email2contact_email(username)
|
||||
return {
|
||||
|
@ -31,19 +31,11 @@ class UserAvatarView(APIView):
|
||||
def post(self, request):
|
||||
|
||||
image_file = request.FILES.get('avatar', None)
|
||||
avatar_size = request.data.get('avatar_size', 64)
|
||||
|
||||
if not image_file:
|
||||
error_msg = 'avatar invalid.'
|
||||
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
|
||||
|
||||
try:
|
||||
avatar_size = int(avatar_size)
|
||||
except Exception as e:
|
||||
logger.error(e)
|
||||
error_msg = 'avatar_size invalid.'
|
||||
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
|
||||
|
||||
(root, ext) = os.path.splitext(image_file.name.lower())
|
||||
if AVATAR_ALLOWED_FILE_EXTS and ext not in AVATAR_ALLOWED_FILE_EXTS:
|
||||
error_msg = _("%(ext)s is an invalid file extension. Authorized extensions are : %(valid_exts_list)s") % {'ext' : ext, 'valid_exts_list' : ", ".join(AVATAR_ALLOWED_FILE_EXTS)}
|
||||
@ -67,7 +59,8 @@ class UserAvatarView(APIView):
|
||||
avatar.avatar.save(image_file.name, image_file)
|
||||
avatar.save()
|
||||
avatar_updated.send(sender=Avatar, user=request.user, avatar=avatar)
|
||||
avatar_url, is_default, date_uploaded = api_avatar_url(username, int(avatar_size))
|
||||
avatar_url, is_default, date_uploaded = api_avatar_url(username)
|
||||
|
||||
except Exception as e:
|
||||
logger.error(e)
|
||||
error_msg = 'Internal Server Error'
|
||||
|
@ -265,8 +265,8 @@ def to_python_boolean(string):
|
||||
return False
|
||||
raise ValueError("Invalid boolean value: '%s'" % string)
|
||||
|
||||
def get_user_common_info(email, avatar_size=AVATAR_DEFAULT_SIZE):
|
||||
avatar_url, is_default, date_uploaded = api_avatar_url(email, avatar_size)
|
||||
def get_user_common_info(email):
|
||||
avatar_url, is_default, date_uploaded = api_avatar_url(email)
|
||||
return {
|
||||
"email": email,
|
||||
"name": email2nickname(email),
|
||||
@ -274,8 +274,8 @@ def get_user_common_info(email, avatar_size=AVATAR_DEFAULT_SIZE):
|
||||
"avatar_url": avatar_url
|
||||
}
|
||||
|
||||
def user_to_dict(email, request=None, avatar_size=AVATAR_DEFAULT_SIZE):
|
||||
d = get_user_common_info(email, avatar_size)
|
||||
def user_to_dict(email, request=None):
|
||||
d = get_user_common_info(email)
|
||||
return {
|
||||
'user_name': d['name'],
|
||||
'user_email': d['email'],
|
||||
|
@ -331,7 +331,7 @@ class AccountInfo(APIView):
|
||||
else: # no space quota set in config
|
||||
info['space_usage'] = '0%'
|
||||
|
||||
url, _, _ = api_avatar_url(email, int(72))
|
||||
url, _, _ = api_avatar_url(email)
|
||||
|
||||
info['avatar_url'] = url
|
||||
info['email'] = email
|
||||
@ -3415,7 +3415,7 @@ class FileDetailView(APIView):
|
||||
entry["last_modifier_name"] = email2nickname(latest_contributor)
|
||||
entry["last_modifier_contact_email"] = email2contact_email(latest_contributor)
|
||||
if latest_contributor:
|
||||
url, _, _ = api_avatar_url(latest_contributor, int(24))
|
||||
url, _, _ = api_avatar_url(latest_contributor)
|
||||
entry["last_modifier_avatar"] = url
|
||||
|
||||
try:
|
||||
|
@ -7,7 +7,6 @@ from django.core.management.base import BaseCommand
|
||||
from django.db import connection, transaction
|
||||
|
||||
from seahub.avatar.models import Avatar
|
||||
from seahub.avatar.settings import AUTO_GENERATE_AVATAR_SIZES
|
||||
from seahub.utils.timeutils import value_to_db_datetime
|
||||
|
||||
|
||||
|
@ -2,14 +2,13 @@
|
||||
from django.core.management.base import BaseCommand
|
||||
|
||||
from seahub.avatar.models import Avatar
|
||||
from seahub.avatar.settings import AUTO_GENERATE_AVATAR_SIZES
|
||||
from seahub.avatar.settings import AVATAR_DEFAULT_SIZE
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = "Regenerates avatar thumbnails for the sizes specified in " + \
|
||||
"settings.AUTO_GENERATE_AVATAR_SIZES."
|
||||
"settings.AVATAR_DEFAULT_SIZE."
|
||||
|
||||
def handle(self, **options):
|
||||
for avatar in Avatar.objects.all():
|
||||
for size in AUTO_GENERATE_AVATAR_SIZES:
|
||||
print("Rebuilding Avatar id=%s at size %s." % (avatar.id, size))
|
||||
avatar.create_thumbnail(size)
|
||||
print("Rebuilding Avatar id=%s at size %s." % (avatar.id, AVATAR_DEFAULT_SIZE))
|
||||
avatar.create_thumbnail(AVATAR_DEFAULT_SIZE)
|
||||
|
@ -29,7 +29,7 @@ from seahub.avatar.util import invalidate_cache, get_avatar_file_storage
|
||||
from seahub.avatar.settings import (AVATAR_STORAGE_DIR, AVATAR_RESIZE_METHOD,
|
||||
AVATAR_MAX_AVATARS_PER_USER, AVATAR_THUMB_FORMAT,
|
||||
AVATAR_HASH_USERDIRNAMES, AVATAR_HASH_FILENAMES,
|
||||
AVATAR_THUMB_QUALITY, AUTO_GENERATE_AVATAR_SIZES,
|
||||
AVATAR_THUMB_QUALITY, AVATAR_DEFAULT_SIZE,
|
||||
GROUP_AVATAR_STORAGE_DIR)
|
||||
|
||||
# Get an instance of a logger
|
||||
@ -176,8 +176,7 @@ class GroupAvatar(models.Model, AvatarBase):
|
||||
|
||||
def create_default_thumbnails(instance=None, created=False, **kwargs):
|
||||
if created:
|
||||
for size in AUTO_GENERATE_AVATAR_SIZES:
|
||||
instance.create_thumbnail(size)
|
||||
instance.create_thumbnail(AVATAR_DEFAULT_SIZE)
|
||||
|
||||
signals.post_save.connect(create_default_thumbnails, sender=Avatar, dispatch_uid="create_default_thumbnails")
|
||||
|
||||
|
@ -8,11 +8,10 @@ except ImportError:
|
||||
import Image
|
||||
|
||||
### User avatar settings ###
|
||||
AVATAR_DEFAULT_SIZE = getattr(settings, 'AVATAR_DEFAULT_SIZE', 80)
|
||||
AVATAR_DEFAULT_SIZE = getattr(settings, 'AVATAR_DEFAULT_SIZE', 256)
|
||||
AVATAR_STORAGE_DIR = getattr(settings, 'AVATAR_STORAGE_DIR', 'avatars')
|
||||
AVATAR_DEFAULT_URL = getattr(settings, 'AVATAR_DEFAULT_URL', 'avatar/img/default.png')
|
||||
AVATAR_DEFAULT_NON_REGISTERED_URL = getattr(settings, 'AVATAR_DEFAULT_NON_REGISTERED_URL', '/avatars/default-non-register.jpg')
|
||||
AUTO_GENERATE_AVATAR_SIZES = getattr(settings, 'AUTO_GENERATE_AVATAR_SIZES', (AVATAR_DEFAULT_SIZE,))
|
||||
|
||||
### Group avatars ###
|
||||
GROUP_AVATAR_DEFAULT_SIZE = getattr(settings, 'GROUP_AVATAR_DEFAULT_SIZE', 48)
|
||||
|
@ -6,9 +6,8 @@ from urllib.parse import quote
|
||||
|
||||
from seahub.base.accounts import User
|
||||
from seahub.avatar.settings import AVATAR_DEFAULT_URL, AVATAR_CACHE_TIMEOUT,\
|
||||
AUTO_GENERATE_AVATAR_SIZES, AVATAR_DEFAULT_SIZE, \
|
||||
AVATAR_DEFAULT_NON_REGISTERED_URL, AUTO_GENERATE_GROUP_AVATAR_SIZES, \
|
||||
AVATAR_FILE_STORAGE
|
||||
AVATAR_DEFAULT_SIZE, AVATAR_DEFAULT_NON_REGISTERED_URL, \
|
||||
AUTO_GENERATE_GROUP_AVATAR_SIZES, AVATAR_FILE_STORAGE
|
||||
|
||||
cached_funcs = set()
|
||||
|
||||
@ -35,7 +34,7 @@ def cache_result(func):
|
||||
cache.set(key, value, AVATAR_CACHE_TIMEOUT)
|
||||
return value
|
||||
|
||||
def cached_func(user, size):
|
||||
def cached_func(user, size=AVATAR_DEFAULT_SIZE):
|
||||
prefix = func.__name__
|
||||
cached_funcs.add(prefix)
|
||||
key = get_cache_key(user, size, prefix=prefix)
|
||||
@ -46,7 +45,7 @@ def invalidate_cache(user, size=None):
|
||||
"""
|
||||
Function to be called when saving or changing an user's avatars.
|
||||
"""
|
||||
sizes = set(AUTO_GENERATE_AVATAR_SIZES)
|
||||
sizes = {AVATAR_DEFAULT_SIZE}
|
||||
if size is not None:
|
||||
sizes.add(size)
|
||||
for prefix in cached_funcs:
|
||||
|
@ -113,7 +113,7 @@ def base(request):
|
||||
if os.path.exists(custom_login_bg_file):
|
||||
login_bg_path = CUSTOM_LOGIN_BG_PATH
|
||||
|
||||
avatar_url, is_default, date_uploaded = api_avatar_url(username, 72)
|
||||
avatar_url, is_default, date_uploaded = api_avatar_url(username)
|
||||
|
||||
result = {
|
||||
'seafile_version': SEAFILE_VERSION,
|
||||
|
@ -43,7 +43,7 @@ def draft(request, pk):
|
||||
|
||||
draft_file_name = os.path.basename(d.draft_file_path)
|
||||
|
||||
author_info = user_to_dict(d.username, avatar_size=32)
|
||||
author_info = user_to_dict(d.username)
|
||||
|
||||
return render(request, "draft.html", {
|
||||
"draft_id": d.id,
|
||||
|
@ -88,14 +88,14 @@ def is_group_admin_or_owner(group_id, email):
|
||||
else:
|
||||
return False
|
||||
|
||||
def get_group_member_info(request, group_id, email, avatar_size=AVATAR_DEFAULT_SIZE):
|
||||
def get_group_member_info(request, group_id, email):
|
||||
p = Profile.objects.get_profile_by_user(email)
|
||||
if p:
|
||||
login_id = p.login_id if p.login_id else ''
|
||||
else:
|
||||
login_id = ''
|
||||
|
||||
avatar_url, is_default, date_uploaded = api_avatar_url(email, avatar_size)
|
||||
avatar_url, is_default, date_uploaded = api_avatar_url(email)
|
||||
|
||||
role = 'Member'
|
||||
group = ccnet_api.get_group(int(group_id))
|
||||
|
@ -104,7 +104,7 @@ class InstAdminUsers(APIView):
|
||||
user_info['name'] = email2nickname(email)
|
||||
user_info['contact_email'] = email2contact_email(email)
|
||||
user_info['is_institution_admin'] = email in admin_emails
|
||||
user_info['avatar_url'], _, _ = api_avatar_url(email, 72)
|
||||
user_info['avatar_url'], _, _ = api_avatar_url(email)
|
||||
|
||||
try:
|
||||
user_obj = User.objects.get(email=email)
|
||||
@ -242,7 +242,7 @@ class InstAdminUser(APIView):
|
||||
user_info['name'] = email2nickname(email)
|
||||
user_info['contact_email'] = email2contact_email(email)
|
||||
user_info['is_active'] = user_obj.is_active
|
||||
user_info['avatar_url'], _, _ = api_avatar_url(email, 72)
|
||||
user_info['avatar_url'], _, _ = api_avatar_url(email)
|
||||
try:
|
||||
user_info['quota_total'] = seafile_api.get_user_quota(email)
|
||||
user_info['quota_usage'] = seafile_api.get_user_self_usage(email)
|
||||
@ -314,7 +314,7 @@ class InstAdminSearchUser(APIView):
|
||||
user_info['name'] = email2nickname(email)
|
||||
user_info['contact_email'] = email2contact_email(email)
|
||||
user_info['is_institution_admin'] = email in admin_emails
|
||||
user_info['avatar_url'], _, _ = api_avatar_url(email, 72)
|
||||
user_info['avatar_url'], _, _ = api_avatar_url(email)
|
||||
|
||||
try:
|
||||
user_obj = User.objects.get(email=email)
|
||||
|
@ -71,14 +71,14 @@ class Command(BaseCommand):
|
||||
logger.debug('Finish sending file updates emails.\n')
|
||||
self.stdout.write('[%s] Finish sending file updates emails.\n\n' % str(datetime.now()))
|
||||
|
||||
def get_avatar(self, username, default_size=32):
|
||||
img_tag = avatar(username, default_size)
|
||||
def get_avatar(self, username):
|
||||
img_tag = avatar(username, 128)
|
||||
pattern = r'src="(.*)"'
|
||||
repl = r'src="%s\1"' % get_site_scheme_and_netloc()
|
||||
return re.sub(pattern, repl, img_tag)
|
||||
|
||||
def get_avatar_src(self, username, default_size=32):
|
||||
avatar_img = self.get_avatar(username, default_size)
|
||||
def get_avatar_src(self, username):
|
||||
avatar_img = self.get_avatar(username)
|
||||
m = re.search('<img src="(.*?)".*', avatar_img)
|
||||
if m:
|
||||
return m.group(1)
|
||||
|
@ -43,14 +43,14 @@ class Command(BaseCommand):
|
||||
self.do_action()
|
||||
logger.debug('Finish sending user notices.\n')
|
||||
|
||||
def get_avatar(self, username, default_size=32):
|
||||
img_tag = avatar(username, default_size)
|
||||
def get_avatar(self, username):
|
||||
img_tag = avatar(username, 128)
|
||||
pattern = r'src="(.*)"'
|
||||
repl = r'src="%s\1"' % get_site_scheme_and_netloc()
|
||||
return re.sub(pattern, repl, img_tag)
|
||||
|
||||
def get_avatar_src(self, username, default_size=32):
|
||||
avatar_img = self.get_avatar(username, default_size)
|
||||
def get_avatar_src(self, username):
|
||||
avatar_img = self.get_avatar(username)
|
||||
m = re.search('<img src="(.*?)".*', avatar_img)
|
||||
if m:
|
||||
return m.group(1)
|
||||
|
@ -52,7 +52,7 @@ def update_notice_detail(request, notices):
|
||||
else:
|
||||
d.pop('org_id', None)
|
||||
share_from_user_email = d.pop('share_from')
|
||||
url, is_default, date_uploaded = api_avatar_url(share_from_user_email, 32)
|
||||
url, is_default, date_uploaded = api_avatar_url(share_from_user_email)
|
||||
d['repo_name'] = repo.name
|
||||
d['repo_id'] = repo.id
|
||||
d['share_from_user_name'] = email2nickname(share_from_user_email)
|
||||
@ -95,7 +95,7 @@ def update_notice_detail(request, notices):
|
||||
else:
|
||||
d.pop('org_id', None)
|
||||
share_from_user_email = d.pop('share_from')
|
||||
url, is_default, date_uploaded = api_avatar_url(share_from_user_email, 32)
|
||||
url, is_default, date_uploaded = api_avatar_url(share_from_user_email)
|
||||
|
||||
d['repo_name'] = repo.name
|
||||
d['repo_id'] = repo.id
|
||||
@ -131,7 +131,7 @@ def update_notice_detail(request, notices):
|
||||
else:
|
||||
d.pop('org_id', None)
|
||||
share_from_user_email = d.pop('share_from')
|
||||
url, is_default, date_uploaded = api_avatar_url(share_from_user_email, 32)
|
||||
url, is_default, date_uploaded = api_avatar_url(share_from_user_email)
|
||||
|
||||
d['repo_name'] = repo.name
|
||||
d['repo_id'] = repo.id
|
||||
@ -168,7 +168,7 @@ def update_notice_detail(request, notices):
|
||||
else:
|
||||
d.pop('org_id', None)
|
||||
share_from_user_email = d.pop('share_from')
|
||||
url, is_default, date_uploaded = api_avatar_url(share_from_user_email, 32)
|
||||
url, is_default, date_uploaded = api_avatar_url(share_from_user_email)
|
||||
d['share_from_user_name'] = email2nickname(share_from_user_email)
|
||||
d['share_from_user_email'] = share_from_user_email
|
||||
d['share_from_user_contact_email'] = email2contact_email(share_from_user_email)
|
||||
@ -190,7 +190,7 @@ def update_notice_detail(request, notices):
|
||||
notice.detail = None
|
||||
else:
|
||||
group_staff_email = d.pop('group_staff')
|
||||
url, is_default, date_uploaded = api_avatar_url(group_staff_email, 32)
|
||||
url, is_default, date_uploaded = api_avatar_url(group_staff_email)
|
||||
d['group_staff_name'] = email2nickname(group_staff_email)
|
||||
d['group_staff_email'] = group_staff_email
|
||||
d['group_staff_contact_email'] = email2contact_email(group_staff_email)
|
||||
@ -205,7 +205,7 @@ def update_notice_detail(request, notices):
|
||||
try:
|
||||
d = json.loads(notice.detail)
|
||||
author_email = d.pop('author')
|
||||
url, is_default, date_uploaded = api_avatar_url(author_email, 32)
|
||||
url, is_default, date_uploaded = api_avatar_url(author_email)
|
||||
d['author_name'] = email2nickname(author_email)
|
||||
d['author_email'] = author_email
|
||||
d['author_context_email'] = email2contact_email(author_email)
|
||||
@ -228,7 +228,7 @@ def update_notice_detail(request, notices):
|
||||
d['transfer_from_user_name'] = email2nickname(repo_owner_email)
|
||||
d['transfer_from_user_email'] = repo_owner_email
|
||||
d['transfer_from_user_contact_email'] = email2contact_email(repo_owner_email)
|
||||
url, is_default, date_uploaded = api_avatar_url(repo_owner_email, 32)
|
||||
url, is_default, date_uploaded = api_avatar_url(repo_owner_email)
|
||||
d['transfer_from_user_avatar_url'] = url
|
||||
notice.detail = d
|
||||
|
||||
@ -240,7 +240,7 @@ def update_notice_detail(request, notices):
|
||||
d = json.loads(notice.detail)
|
||||
d.pop('to_user', None)
|
||||
request_user_email = d.pop('from_user')
|
||||
url, is_default, date_uploaded = api_avatar_url(request_user_email, 32)
|
||||
url, is_default, date_uploaded = api_avatar_url(request_user_email)
|
||||
d['request_user_name'] = email2nickname(request_user_email)
|
||||
d['request_user_email'] = request_user_email
|
||||
d['request_user_contact_email'] = email2contact_email(request_user_email)
|
||||
@ -275,7 +275,7 @@ def update_notice_detail(request, notices):
|
||||
d['folder_path'] = d.pop('uploaded_to')
|
||||
d['folder_name'] = name
|
||||
d['file_path'] = file_path
|
||||
url, is_default, date_uploaded = api_avatar_url('', 32)
|
||||
url, is_default, date_uploaded = api_avatar_url('')
|
||||
d['uploaded_user_avatar_url'] = url
|
||||
notice.detail = d
|
||||
else:
|
||||
@ -310,7 +310,7 @@ def update_notice_detail(request, notices):
|
||||
d['parent_dir_path'] = d.pop('uploaded_to')
|
||||
d['parent_dir_name'] = name
|
||||
d['folder_path'] = folder_path
|
||||
url, is_default, date_uploaded = api_avatar_url('', 32)
|
||||
url, is_default, date_uploaded = api_avatar_url('')
|
||||
d['uploaded_user_avatar_url'] = url
|
||||
notice.detail = d
|
||||
else:
|
||||
@ -337,7 +337,7 @@ def update_notice_detail(request, notices):
|
||||
else:
|
||||
author_email = d.pop('author')
|
||||
file_name = os.path.basename(file_path)
|
||||
url, is_default, date_uploaded = api_avatar_url(author_email, 32)
|
||||
url, is_default, date_uploaded = api_avatar_url(author_email)
|
||||
d['author_avatar_url'] = url
|
||||
d['author_name'] = email2nickname(author_email)
|
||||
d['author_email'] = author_email
|
||||
@ -359,7 +359,7 @@ def update_notice_detail(request, notices):
|
||||
repo_dict[repo_id] = repo
|
||||
|
||||
op_user_email = d.pop('op_user')
|
||||
url, is_default, date_uploaded = api_avatar_url(op_user_email, 32)
|
||||
url, is_default, date_uploaded = api_avatar_url(op_user_email)
|
||||
d['op_user_avatar_url'] = url
|
||||
d['op_user_email'] = op_user_email
|
||||
d['op_user_name'] = email2nickname(op_user_email)
|
||||
|
@ -142,7 +142,7 @@ def get_onlyoffice_dict(request, username, repo_id, file_path, file_id='',
|
||||
onlyoffice_editor_callback_url = reverse('onlyoffice_editor_callback')
|
||||
callback_url = urllib.parse.urljoin(base_url, onlyoffice_editor_callback_url)
|
||||
obj_id = seafile_api.get_file_id_by_path(repo_id, file_path)
|
||||
avatar_url, _, _ = api_avatar_url(username, 72)
|
||||
avatar_url, _, _ = api_avatar_url(username)
|
||||
import jwt
|
||||
|
||||
http_user_agent = request.headers.get('user-agent', '')
|
||||
|
@ -322,9 +322,6 @@ class OrgAdminUser(APIView):
|
||||
"""Get org user info
|
||||
|
||||
"""
|
||||
# argument check
|
||||
avatar_size = request.GET.get('avatar_size', AVATAR_DEFAULT_SIZE)
|
||||
|
||||
# resource check
|
||||
org_id = int(org_id)
|
||||
if not ccnet_api.get_org_by_id(org_id):
|
||||
@ -344,7 +341,7 @@ class OrgAdminUser(APIView):
|
||||
|
||||
# get user info
|
||||
user_info = get_user_info(email, org_id)
|
||||
avatar_url, is_default, date_uploaded = api_avatar_url(email, avatar_size)
|
||||
avatar_url, is_default, date_uploaded = api_avatar_url(email)
|
||||
user_info['avatar_url'] = avatar_url
|
||||
|
||||
return Response(user_info)
|
||||
|
@ -13,7 +13,7 @@
|
||||
// overwrite the one in base_for_react.html
|
||||
window.app.pageOptions = {
|
||||
username: "{{request.user.username|escapejs}}",
|
||||
avatarURL: '{% avatar_url request.user 160 %}',
|
||||
avatarURL: '{% avatar_url request.user %}',
|
||||
csrfToken: '{{ csrf_token }}',
|
||||
|
||||
enableUpdateUserInfo: {% if ENABLE_UPDATE_USER_INFO %} true {% else %} false {% endif %},
|
||||
|
@ -7,10 +7,10 @@
|
||||
{% block main_panel %}
|
||||
<div id="user-profile">
|
||||
{% if user %}
|
||||
{% avatar user.username 64 %}
|
||||
{% avatar user.username 128 %}
|
||||
<p title="{{ nickname }}" class="user-profile-nickname ellipsis">{{ nickname }}</p>
|
||||
{% else %}
|
||||
{% avatar "" 64 %}
|
||||
{% avatar "" 128 %}
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
@ -620,10 +620,10 @@ class SeadocHistory(APIView):
|
||||
permission_classes = (IsAuthenticated,)
|
||||
throttle_classes = (UserRateThrottle, )
|
||||
|
||||
def _get_new_file_history_info(self, ent, avatar_size, name_dict):
|
||||
def _get_new_file_history_info(self, ent, name_dict):
|
||||
info = {}
|
||||
creator_name = ent.get('op_user')
|
||||
url, is_default, date_uploaded = api_avatar_url(creator_name, avatar_size)
|
||||
url, is_default, date_uploaded = api_avatar_url(creator_name)
|
||||
info['creator_avatar_url'] = url
|
||||
info['creator_email'] = creator_name
|
||||
info['creator_name'] = email2nickname(creator_name)
|
||||
@ -665,11 +665,9 @@ class SeadocHistory(APIView):
|
||||
commit_id = repo.head_cmmt_id
|
||||
|
||||
try:
|
||||
avatar_size = int(request.GET.get('avatar_size', AVATAR_DEFAULT_SIZE))
|
||||
page = int(request.GET.get('page', 1))
|
||||
per_page = int(request.GET.get('per_page', 25))
|
||||
except ValueError:
|
||||
avatar_size = AVATAR_DEFAULT_SIZE
|
||||
page = 1
|
||||
per_page = 25
|
||||
|
||||
@ -707,7 +705,7 @@ class SeadocHistory(APIView):
|
||||
name_queryset = SeadocHistoryName.objects.list_by_obj_ids(
|
||||
doc_uuid=file_uuid, obj_id_list=obj_id_list)
|
||||
name_dict = {item.obj_id: item.name for item in name_queryset}
|
||||
data = [self._get_new_file_history_info(ent, avatar_size, name_dict) for ent in file_revisions]
|
||||
data = [self._get_new_file_history_info(ent, name_dict) for ent in file_revisions]
|
||||
result = {
|
||||
"histories": data
|
||||
}
|
||||
@ -766,10 +764,10 @@ class SeadocDailyHistoryDetail(APIView):
|
||||
permission_classes = (IsAuthenticated,)
|
||||
throttle_classes = (UserRateThrottle, )
|
||||
|
||||
def _get_new_file_history_info(self, ent, avatar_size, name_dict):
|
||||
def _get_new_file_history_info(self, ent, name_dict):
|
||||
info = {}
|
||||
creator_name = ent.op_user
|
||||
url, is_default, date_uploaded = api_avatar_url(creator_name, avatar_size)
|
||||
url, is_default, date_uploaded = api_avatar_url(creator_name)
|
||||
info['creator_avatar_url'] = url
|
||||
info['creator_email'] = creator_name
|
||||
info['creator_name'] = email2nickname(creator_name)
|
||||
@ -806,11 +804,6 @@ class SeadocDailyHistoryDetail(APIView):
|
||||
error_msg = 'Library %s not found.' % repo_id
|
||||
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
||||
|
||||
try:
|
||||
avatar_size = int(request.GET.get('avatar_size', AVATAR_DEFAULT_SIZE))
|
||||
except ValueError:
|
||||
avatar_size = AVATAR_DEFAULT_SIZE
|
||||
|
||||
op_date = request.GET.get('op_date', None)
|
||||
if not op_date:
|
||||
error_msg = 'op_date invalid.'
|
||||
@ -840,7 +833,7 @@ class SeadocDailyHistoryDetail(APIView):
|
||||
name_queryset = SeadocHistoryName.objects.list_by_obj_ids(
|
||||
doc_uuid=file_uuid, obj_id_list=obj_id_list)
|
||||
name_dict = {item.obj_id: item.name for item in name_queryset}
|
||||
data = [self._get_new_file_history_info(ent, avatar_size, name_dict) for ent in file_revisions]
|
||||
data = [self._get_new_file_history_info(ent, name_dict) for ent in file_revisions]
|
||||
result = {
|
||||
"histories": data[1:]
|
||||
}
|
||||
@ -873,7 +866,7 @@ class SeadocNotificationsView(APIView):
|
||||
for notification in notifications_query:
|
||||
data = notification.to_dict()
|
||||
data.update(
|
||||
user_to_dict(notification.username, request=request, avatar_size=avatar_size))
|
||||
user_to_dict(notification.username, request=request))
|
||||
notifications.append(data)
|
||||
|
||||
result = {'notifications': notifications}
|
||||
@ -991,7 +984,7 @@ class SeadocCommentsView(APIView):
|
||||
|
||||
for file_comment in file_comments:
|
||||
comment = file_comment.to_dict(reply_queryset)
|
||||
comment.update(user_to_dict(file_comment.author, request=request, avatar_size=avatar_size))
|
||||
comment.update(user_to_dict(file_comment.author, request=request))
|
||||
comments.append(comment)
|
||||
|
||||
result = {'comments': comments, 'total_count': total_count}
|
||||
@ -1024,7 +1017,7 @@ class SeadocCommentsView(APIView):
|
||||
file_comment = FileComment.objects.add_by_file_uuid(
|
||||
file_uuid, username, comment, detail)
|
||||
comment = file_comment.to_dict()
|
||||
comment.update(user_to_dict(username, request=request, avatar_size=avatar_size))
|
||||
comment.update(user_to_dict(username, request=request))
|
||||
|
||||
# notification
|
||||
to_users = set()
|
||||
@ -1041,7 +1034,7 @@ class SeadocCommentsView(APIView):
|
||||
'created_at': datetime_to_isoformat_timestr(file_comment.created_at),
|
||||
'updated_at': datetime_to_isoformat_timestr(file_comment.updated_at),
|
||||
}
|
||||
detail.update(user_to_dict(username, request=request, avatar_size=avatar_size))
|
||||
detail.update(user_to_dict(username, request=request))
|
||||
|
||||
new_notifications = []
|
||||
for to_user in to_users:
|
||||
@ -1092,7 +1085,7 @@ class SeadocCommentView(APIView):
|
||||
|
||||
comment = file_comment.to_dict()
|
||||
comment.update(user_to_dict(
|
||||
file_comment.author, request=request, avatar_size=avatar_size))
|
||||
file_comment.author, request=request))
|
||||
return Response(comment)
|
||||
|
||||
def delete(self, request, file_uuid, comment_id):
|
||||
@ -1161,7 +1154,7 @@ class SeadocCommentView(APIView):
|
||||
file_comment.save()
|
||||
|
||||
comment = file_comment.to_dict()
|
||||
comment.update(user_to_dict(file_comment.author, request=request, avatar_size=avatar_size))
|
||||
comment.update(user_to_dict(file_comment.author, request=request))
|
||||
return Response(comment)
|
||||
|
||||
|
||||
@ -1206,7 +1199,7 @@ class SeadocCommentRepliesView(APIView):
|
||||
for reply in reply_queryset:
|
||||
data = reply.to_dict()
|
||||
data.update(
|
||||
user_to_dict(reply.author, request=request, avatar_size=avatar_size))
|
||||
user_to_dict(reply.author, request=request))
|
||||
replies.append(data)
|
||||
|
||||
result = {'replies': replies, 'total_count': total_count}
|
||||
@ -1250,7 +1243,7 @@ class SeadocCommentRepliesView(APIView):
|
||||
)
|
||||
data = reply.to_dict()
|
||||
data.update(
|
||||
user_to_dict(reply.author, request=request, avatar_size=avatar_size))
|
||||
user_to_dict(reply.author, request=request))
|
||||
|
||||
# notification
|
||||
to_users = set()
|
||||
@ -1268,7 +1261,7 @@ class SeadocCommentRepliesView(APIView):
|
||||
'created_at': datetime_to_isoformat_timestr(reply.created_at),
|
||||
'updated_at': datetime_to_isoformat_timestr(reply.updated_at),
|
||||
}
|
||||
detail.update(user_to_dict(username, request=request, avatar_size=avatar_size))
|
||||
detail.update(user_to_dict(username, request=request))
|
||||
|
||||
new_notifications = []
|
||||
for to_user in to_users:
|
||||
@ -1322,7 +1315,7 @@ class SeadocCommentReplyView(APIView):
|
||||
|
||||
data = reply.to_dict()
|
||||
data.update(
|
||||
user_to_dict(reply.author, request=request, avatar_size=avatar_size))
|
||||
user_to_dict(reply.author, request=request))
|
||||
return Response(data)
|
||||
|
||||
def delete(self, request, file_uuid, comment_id, reply_id):
|
||||
@ -1381,7 +1374,7 @@ class SeadocCommentReplyView(APIView):
|
||||
|
||||
data = reply.to_dict()
|
||||
data.update(
|
||||
user_to_dict(reply.author, request=request, avatar_size=avatar_size))
|
||||
user_to_dict(reply.author, request=request))
|
||||
return Response(data)
|
||||
|
||||
|
||||
|
@ -44,7 +44,7 @@ def uuid_str_to_36_chars(file_uuid):
|
||||
|
||||
def gen_seadoc_access_token(file_uuid, filename, username, permission='rw', default_title=None):
|
||||
name = email2nickname(username)
|
||||
url, is_default, date_uploaded = api_avatar_url(username, 72)
|
||||
url, is_default, date_uploaded = api_avatar_url(username)
|
||||
if default_title is None:
|
||||
default_title = filename
|
||||
access_token = jwt.encode({
|
||||
|
@ -517,7 +517,7 @@ AVATAR_DEFAULT_URL = '/avatars/default.png'
|
||||
AVATAR_DEFAULT_NON_REGISTERED_URL = '/avatars/default-non-register.jpg'
|
||||
AVATAR_MAX_AVATARS_PER_USER = 1
|
||||
AVATAR_CACHE_TIMEOUT = 14 * 24 * 60 * 60
|
||||
AUTO_GENERATE_AVATAR_SIZES = (16, 20, 24, 28, 32, 36, 40, 42, 48, 60, 64, 72, 80, 84, 96, 128, 160)
|
||||
AVATAR_DEFAULT_SIZE = 256
|
||||
# Group avatar
|
||||
GROUP_AVATAR_STORAGE_DIR = 'avatars/groups'
|
||||
GROUP_AVATAR_DEFAULT_URL = 'avatars/groups/default.png'
|
||||
|
@ -22,7 +22,7 @@ window.app.pageOptions = {
|
||||
|
||||
{% if current_commit.props.creator_name %}
|
||||
showAuthor: true,
|
||||
authorAvatarURL: "{% avatar_url current_commit.props.creator_name 40 %}",
|
||||
authorAvatarURL: "{% avatar_url current_commit.props.creator_name %}",
|
||||
authorName: '{{ current_commit.props.creator_name|escapejs }}',
|
||||
authorNickName: '{{ current_commit.props.creator_name|email2nickname|escapejs }}',
|
||||
{% endif %}
|
||||
|
@ -99,7 +99,7 @@ class Wiki(models.Model):
|
||||
return True
|
||||
|
||||
def to_dict(self):
|
||||
avatar_url, is_default, date_uploaded = api_avatar_url(self.username, int(32))
|
||||
avatar_url, is_default, date_uploaded = api_avatar_url(self.username)
|
||||
return {
|
||||
'id': self.pk,
|
||||
'owner': self.username,
|
||||
|
@ -262,7 +262,7 @@ class WOPIFilesView(APIView):
|
||||
result['UserCanWrite'] = True if can_edit else False
|
||||
result['ReadOnly'] = True if not can_edit else False
|
||||
|
||||
avatar_url, _, _ = api_avatar_url(request_user, int(72))
|
||||
avatar_url, _, _ = api_avatar_url(request_user)
|
||||
result['UserExtraInfo'] = {'avatar': avatar_url, 'mail': request_user}
|
||||
|
||||
# new file creation feature is not implemented on wopi host(seahub)
|
||||
|
@ -15,18 +15,13 @@ class AvatarApiTest(ApiTestBase):
|
||||
avatar_url = urljoin(BASE_URL, avatar_url)
|
||||
avatar_file = os.path.join(os.getcwd(), 'media/img/seafile-logo.png')
|
||||
|
||||
random_avatar_size = random.randint(12, 128)
|
||||
random_avatar_size = 256
|
||||
|
||||
with open(avatar_file, 'rb') as f:
|
||||
json_resp = self.post(avatar_url, files={'avatar': f}, data={'avatar_size': random_avatar_size}).json()
|
||||
json_resp = self.post(avatar_url, files={'avatar': f}, data={'avatar_size': 256}).json()
|
||||
|
||||
assert 'avatar_url' in json_resp
|
||||
response_url = json_resp['avatar_url']
|
||||
list_url = response_url.split('/')
|
||||
assert str(random_avatar_size) in list_url
|
||||
|
||||
# assert is NOT default avatar
|
||||
avatar_url = urljoin(AVATAR_BASE_URL, 'user', self.username, '/resized/80/')
|
||||
info = self.get(avatar_url).json()
|
||||
assert 'resized' in info['url']
|
||||
assert info['is_default'] == False
|
||||
|
Loading…
Reference in New Issue
Block a user