mirror of
https://github.com/haiwen/seahub.git
synced 2025-06-20 20:32:44 +00:00
Merge pull request #6791 from haiwen/init-all-files-view
refactor(metadata): init sorts via create all files view
This commit is contained in:
commit
33ffeab306
@ -746,7 +746,7 @@ class MetadataViewsDuplicateView(APIView):
|
|||||||
return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)
|
return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)
|
||||||
|
|
||||||
return Response({'view': result})
|
return Response({'view': result})
|
||||||
|
|
||||||
|
|
||||||
class MetadataViewsDetailView(APIView):
|
class MetadataViewsDetailView(APIView):
|
||||||
authentication_classes = (TokenAuthentication, SessionAuthentication)
|
authentication_classes = (TokenAuthentication, SessionAuthentication)
|
||||||
|
@ -20,12 +20,12 @@ def generate_random_string_lower_digits(length):
|
|||||||
def generate_view_id(length, view_ids=None):
|
def generate_view_id(length, view_ids=None):
|
||||||
if not view_ids:
|
if not view_ids:
|
||||||
return generate_random_string_lower_digits(length)
|
return generate_random_string_lower_digits(length)
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
new_id = generate_random_string_lower_digits(length)
|
new_id = generate_random_string_lower_digits(length)
|
||||||
if new_id not in view_ids:
|
if new_id not in view_ids:
|
||||||
break
|
break
|
||||||
|
|
||||||
return new_id
|
return new_id
|
||||||
|
|
||||||
|
|
||||||
@ -61,15 +61,15 @@ class RepoMetadata(models.Model):
|
|||||||
|
|
||||||
|
|
||||||
class RepoView(object):
|
class RepoView(object):
|
||||||
|
|
||||||
def __init__(self, name, type='table', view_data={}, view_ids=None):
|
def __init__(self, name, type='table', view_data={}, view_ids=None):
|
||||||
self.name = name
|
self.name = name
|
||||||
self.type = type
|
self.type = type
|
||||||
self.view_data = view_data
|
self.view_data = view_data
|
||||||
self.view_json = {}
|
self.view_json = {}
|
||||||
|
|
||||||
self.init_view(view_ids)
|
self.init_view(view_ids)
|
||||||
|
|
||||||
def init_view(self, view_ids=None):
|
def init_view(self, view_ids=None):
|
||||||
self.view_json = {
|
self.view_json = {
|
||||||
"_id": generate_view_id(4, view_ids),
|
"_id": generate_view_id(4, view_ids),
|
||||||
@ -86,14 +86,18 @@ class RepoView(object):
|
|||||||
|
|
||||||
|
|
||||||
class RepoMetadataViewsManager(models.Manager):
|
class RepoMetadataViewsManager(models.Manager):
|
||||||
|
|
||||||
def add_view(self, repo_id, view_name, view_type='table', view_data={}):
|
def add_view(self, repo_id, view_name, view_type='table', view_data={}):
|
||||||
metadata_views = self.filter(repo_id=repo_id).first()
|
metadata_views = self.filter(repo_id=repo_id).first()
|
||||||
if not metadata_views:
|
if not metadata_views:
|
||||||
from seafevents.repo_metadata.utils import METADATA_TABLE
|
from seafevents.repo_metadata.utils import METADATA_TABLE
|
||||||
|
|
||||||
|
# init view data
|
||||||
new_view = RepoView(view_name, view_type, {
|
new_view = RepoView(view_name, view_type, {
|
||||||
'basic_filters': [{ 'column_key': METADATA_TABLE.columns.is_dir.key, 'filter_predicate': 'is', 'filter_term': 'file' }]
|
'basic_filters': [{ 'column_key': METADATA_TABLE.columns.is_dir.key, 'filter_predicate': 'is', 'filter_term': 'file' }],
|
||||||
|
'sorts': [{ 'column_key': METADATA_TABLE.columns.file_mtime.key, 'sort_type': 'down' }]
|
||||||
})
|
})
|
||||||
|
|
||||||
view_json = new_view.view_json
|
view_json = new_view.view_json
|
||||||
view_id = view_json.get('_id')
|
view_id = view_json.get('_id')
|
||||||
view_details = {
|
view_details = {
|
||||||
@ -116,13 +120,13 @@ class RepoMetadataViewsManager(models.Manager):
|
|||||||
metadata_views.details = json.dumps(view_details)
|
metadata_views.details = json.dumps(view_details)
|
||||||
metadata_views.save()
|
metadata_views.save()
|
||||||
return new_view.view_json
|
return new_view.view_json
|
||||||
|
|
||||||
def list_views(self, repo_id):
|
def list_views(self, repo_id):
|
||||||
metadata_views = self.filter(repo_id=repo_id).first()
|
metadata_views = self.filter(repo_id=repo_id).first()
|
||||||
if not metadata_views:
|
if not metadata_views:
|
||||||
return {'views': [], 'navigation': []}
|
return {'views': [], 'navigation': []}
|
||||||
return json.loads(metadata_views.details)
|
return json.loads(metadata_views.details)
|
||||||
|
|
||||||
def get_view(self, repo_id, view_id):
|
def get_view(self, repo_id, view_id):
|
||||||
metadata_views = self.filter(repo_id=repo_id).first()
|
metadata_views = self.filter(repo_id=repo_id).first()
|
||||||
if not metadata_views:
|
if not metadata_views:
|
||||||
@ -131,7 +135,7 @@ class RepoMetadataViewsManager(models.Manager):
|
|||||||
for v in view_details['views']:
|
for v in view_details['views']:
|
||||||
if v.get('_id') == view_id:
|
if v.get('_id') == view_id:
|
||||||
return v
|
return v
|
||||||
|
|
||||||
def update_view(self, repo_id, view_id, view_dict):
|
def update_view(self, repo_id, view_id, view_dict):
|
||||||
metadata_views = self.filter(repo_id=repo_id).first()
|
metadata_views = self.filter(repo_id=repo_id).first()
|
||||||
view_dict.pop('_id', '')
|
view_dict.pop('_id', '')
|
||||||
@ -177,7 +181,7 @@ class RepoMetadataViewsManager(models.Manager):
|
|||||||
metadata_views.details = json.dumps(view_details)
|
metadata_views.details = json.dumps(view_details)
|
||||||
metadata_views.save()
|
metadata_views.save()
|
||||||
return json.loads(metadata_views.details)
|
return json.loads(metadata_views.details)
|
||||||
|
|
||||||
def move_view(self, repo_id, view_id, target_view_id):
|
def move_view(self, repo_id, view_id, target_view_id):
|
||||||
metadata_views = self.filter(repo_id=repo_id).first()
|
metadata_views = self.filter(repo_id=repo_id).first()
|
||||||
view_details = json.loads(metadata_views.details)
|
view_details = json.loads(metadata_views.details)
|
||||||
@ -188,7 +192,7 @@ class RepoMetadataViewsManager(models.Manager):
|
|||||||
view_index = i
|
view_index = i
|
||||||
if view['_id'] == target_view_id:
|
if view['_id'] == target_view_id:
|
||||||
target_index = i
|
target_index = i
|
||||||
|
|
||||||
if view_index is not None and target_index is not None:
|
if view_index is not None and target_index is not None:
|
||||||
if view_index < target_index:
|
if view_index < target_index:
|
||||||
view_to_move = view_details['navigation'][view_index]
|
view_to_move = view_details['navigation'][view_index]
|
||||||
@ -201,22 +205,22 @@ class RepoMetadataViewsManager(models.Manager):
|
|||||||
metadata_views.details = json.dumps(view_details)
|
metadata_views.details = json.dumps(view_details)
|
||||||
metadata_views.save()
|
metadata_views.save()
|
||||||
return json.loads(metadata_views.details)
|
return json.loads(metadata_views.details)
|
||||||
|
|
||||||
|
|
||||||
class RepoMetadataViews(models.Model):
|
class RepoMetadataViews(models.Model):
|
||||||
repo_id = models.CharField(max_length=36, db_index=True)
|
repo_id = models.CharField(max_length=36, db_index=True)
|
||||||
details = models.TextField()
|
details = models.TextField()
|
||||||
|
|
||||||
objects = RepoMetadataViewsManager()
|
objects = RepoMetadataViewsManager()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
db_table = 'repo_metadata_view'
|
db_table = 'repo_metadata_view'
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def view_ids(self):
|
def view_ids(self):
|
||||||
views = json.loads(self.details)['views']
|
views = json.loads(self.details)['views']
|
||||||
return [v.get('_id') for v in views]
|
return [v.get('_id') for v in views]
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def view_names(self):
|
def view_names(self):
|
||||||
views = json.loads(self.details)['views']
|
views = json.loads(self.details)['views']
|
||||||
|
Loading…
Reference in New Issue
Block a user