mirror of
https://github.com/samuelclay/NewsBlur.git
synced 2025-08-05 16:58:59 +00:00
Move folder to folder now complete. Ready to launch!
This commit is contained in:
parent
ea06efe874
commit
4546aa8753
6 changed files with 118 additions and 35 deletions
|
@ -357,8 +357,6 @@ class UserSubscriptionFolders(models.Model):
|
||||||
new_folders = []
|
new_folders = []
|
||||||
for k, folder in enumerate(old_folders):
|
for k, folder in enumerate(old_folders):
|
||||||
if isinstance(folder, int):
|
if isinstance(folder, int):
|
||||||
if folder == 1128:
|
|
||||||
print folder_name, feed_id, type(feed_id), folder == feed_id, folder_name == in_folder, deleted
|
|
||||||
if (folder == feed_id and (
|
if (folder == feed_id and (
|
||||||
(folder_name != in_folder) or
|
(folder_name != in_folder) or
|
||||||
(folder_name == in_folder and deleted))):
|
(folder_name == in_folder and deleted))):
|
||||||
|
@ -398,8 +396,8 @@ class UserSubscriptionFolders(models.Model):
|
||||||
user_sub.delete()
|
user_sub.delete()
|
||||||
MUserStory.objects(user_id=self.user.pk, feed_id=feed_id).delete()
|
MUserStory.objects(user_id=self.user.pk, feed_id=feed_id).delete()
|
||||||
|
|
||||||
def delete_folder(self, folder_to_delete, in_folder, feed_ids_in_folder):
|
def delete_folder(self, folder_to_delete, in_folder, feed_ids_in_folder, commit_delete=True):
|
||||||
def _find_folder_in_folders(old_folders, folder_name, feeds_to_delete):
|
def _find_folder_in_folders(old_folders, folder_name, feeds_to_delete, deleted_folder=None):
|
||||||
new_folders = []
|
new_folders = []
|
||||||
for k, folder in enumerate(old_folders):
|
for k, folder in enumerate(old_folders):
|
||||||
if isinstance(folder, int):
|
if isinstance(folder, int):
|
||||||
|
@ -410,19 +408,23 @@ class UserSubscriptionFolders(models.Model):
|
||||||
for f_k, f_v in folder.items():
|
for f_k, f_v in folder.items():
|
||||||
if f_k == folder_to_delete and folder_name == in_folder:
|
if f_k == folder_to_delete and folder_name == in_folder:
|
||||||
logging.user(self.user, "~FBDeleting folder '~SB%s~SN' in '%s': %s" % (f_k, folder_name, folder))
|
logging.user(self.user, "~FBDeleting folder '~SB%s~SN' in '%s': %s" % (f_k, folder_name, folder))
|
||||||
|
deleted_folder = folder
|
||||||
else:
|
else:
|
||||||
nf, feeds_to_delete = _find_folder_in_folders(f_v, f_k, feeds_to_delete)
|
nf, feeds_to_delete, deleted_folder = _find_folder_in_folders(f_v, f_k, feeds_to_delete, deleted_folder)
|
||||||
new_folders.append({f_k: nf})
|
new_folders.append({f_k: nf})
|
||||||
|
|
||||||
return new_folders, feeds_to_delete
|
return new_folders, feeds_to_delete, deleted_folder
|
||||||
|
|
||||||
user_sub_folders = json.decode(self.folders)
|
user_sub_folders = json.decode(self.folders)
|
||||||
user_sub_folders, feeds_to_delete = _find_folder_in_folders(user_sub_folders, '', feed_ids_in_folder)
|
user_sub_folders, feeds_to_delete, deleted_folder = _find_folder_in_folders(user_sub_folders, '', feed_ids_in_folder)
|
||||||
self.folders = json.encode(user_sub_folders)
|
self.folders = json.encode(user_sub_folders)
|
||||||
self.save()
|
self.save()
|
||||||
|
|
||||||
|
if commit_delete:
|
||||||
UserSubscription.objects.filter(user=self.user, feed__in=feeds_to_delete).delete()
|
UserSubscription.objects.filter(user=self.user, feed__in=feeds_to_delete).delete()
|
||||||
|
|
||||||
|
return deleted_folder
|
||||||
|
|
||||||
def rename_folder(self, folder_to_rename, new_folder_name, in_folder):
|
def rename_folder(self, folder_to_rename, new_folder_name, in_folder):
|
||||||
def _find_folder_in_folders(old_folders, folder_name):
|
def _find_folder_in_folders(old_folders, folder_name):
|
||||||
new_folders = []
|
new_folders = []
|
||||||
|
@ -446,7 +448,6 @@ class UserSubscriptionFolders(models.Model):
|
||||||
self.save()
|
self.save()
|
||||||
|
|
||||||
def move_feed_to_folder(self, feed_id, in_folder=None, to_folder=None):
|
def move_feed_to_folder(self, feed_id, in_folder=None, to_folder=None):
|
||||||
print "%s: %s %s" % (feed_id, in_folder, to_folder)
|
|
||||||
user_sub_folders = json.decode(self.folders)
|
user_sub_folders = json.decode(self.folders)
|
||||||
self.delete_feed(feed_id, in_folder, commit_delete=False)
|
self.delete_feed(feed_id, in_folder, commit_delete=False)
|
||||||
user_sub_folders = json.decode(self.folders)
|
user_sub_folders = json.decode(self.folders)
|
||||||
|
@ -456,6 +457,16 @@ class UserSubscriptionFolders(models.Model):
|
||||||
|
|
||||||
return self
|
return self
|
||||||
|
|
||||||
|
def move_folder_to_folder(self, folder_name, in_folder=None, to_folder=None):
|
||||||
|
user_sub_folders = json.decode(self.folders)
|
||||||
|
deleted_folder = self.delete_folder(folder_name, in_folder, [], commit_delete=False)
|
||||||
|
user_sub_folders = json.decode(self.folders)
|
||||||
|
user_sub_folders = add_object_to_folder(deleted_folder, to_folder, user_sub_folders)
|
||||||
|
self.folders = json.encode(user_sub_folders)
|
||||||
|
self.save()
|
||||||
|
|
||||||
|
return self
|
||||||
|
|
||||||
|
|
||||||
class Feature(models.Model):
|
class Feature(models.Model):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -28,6 +28,7 @@ urlpatterns = patterns('',
|
||||||
url(r'^rename_feed', views.rename_feed, name='rename-feed'),
|
url(r'^rename_feed', views.rename_feed, name='rename-feed'),
|
||||||
url(r'^rename_folder', views.rename_folder, name='rename-folder'),
|
url(r'^rename_folder', views.rename_folder, name='rename-folder'),
|
||||||
url(r'^move_feed_to_folder', views.move_feed_to_folder, name='move-feed-to-folder'),
|
url(r'^move_feed_to_folder', views.move_feed_to_folder, name='move-feed-to-folder'),
|
||||||
|
url(r'^move_folder_to_folder', views.move_folder_to_folder, name='move-folder-to-folder'),
|
||||||
url(r'^add_url', views.add_url),
|
url(r'^add_url', views.add_url),
|
||||||
url(r'^add_folder', views.add_folder),
|
url(r'^add_folder', views.add_folder),
|
||||||
url(r'^add_feature', views.add_feature, name='add-feature'),
|
url(r'^add_feature', views.add_feature, name='add-feature'),
|
||||||
|
|
|
@ -865,6 +865,18 @@ def move_feed_to_folder(request):
|
||||||
|
|
||||||
return dict(code=1, folders=json.decode(user_sub_folders.folders))
|
return dict(code=1, folders=json.decode(user_sub_folders.folders))
|
||||||
|
|
||||||
|
@ajax_login_required
|
||||||
|
@json.json_view
|
||||||
|
def move_folder_to_folder(request):
|
||||||
|
folder_name = request.POST['folder_name']
|
||||||
|
in_folder = request.POST.get('in_folder', '')
|
||||||
|
to_folder = request.POST.get('to_folder', '')
|
||||||
|
|
||||||
|
user_sub_folders = get_object_or_404(UserSubscriptionFolders, user=request.user)
|
||||||
|
user_sub_folders = user_sub_folders.move_folder_to_folder(folder_name, in_folder=in_folder, to_folder=to_folder)
|
||||||
|
|
||||||
|
return dict(code=1, folders=json.decode(user_sub_folders.folders))
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def add_feature(request):
|
def add_feature(request):
|
||||||
if not request.user.is_staff:
|
if not request.user.is_staff:
|
||||||
|
|
|
@ -680,6 +680,19 @@ NEWSBLUR.AssetModel.Reader.prototype = {
|
||||||
}, pre_callback);
|
}, pre_callback);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
move_folder_to_folder: function(folder_name, in_folder, to_folder, callback) {
|
||||||
|
var pre_callback = _.bind(function(data) {
|
||||||
|
this.folders = data.folders;
|
||||||
|
return callback();
|
||||||
|
}, this);
|
||||||
|
|
||||||
|
this.make_request('/reader/move_folder_to_folder', {
|
||||||
|
'folder_name': folder_name,
|
||||||
|
'in_folder': in_folder,
|
||||||
|
'to_folder': to_folder
|
||||||
|
}, pre_callback);
|
||||||
|
},
|
||||||
|
|
||||||
preference: function(preference, value, callback) {
|
preference: function(preference, value, callback) {
|
||||||
if (typeof value == 'undefined') {
|
if (typeof value == 'undefined') {
|
||||||
var pref = NEWSBLUR.Preferences[preference];
|
var pref = NEWSBLUR.Preferences[preference];
|
||||||
|
|
|
@ -4644,16 +4644,24 @@
|
||||||
manage_menu_move_folder: function(folder, $folder) {
|
manage_menu_move_folder: function(folder, $folder) {
|
||||||
var self = this;
|
var self = this;
|
||||||
var in_folder = '';
|
var in_folder = '';
|
||||||
var $parent = $folder.closest('li.folder');
|
var $parent = $folder.parents('li.folder').eq(0);
|
||||||
var new_folder = $('.NB-menu-manage-folder-move-confirm select').val();
|
var to_folder = $('.NB-menu-manage-folder-move-confirm select').val();
|
||||||
|
var folder_name = $folder.find('.folder_title_text').eq(0).text();
|
||||||
|
var child_folders = $folder.find('.folder_title_text').map(function() {
|
||||||
|
return $(this).text();
|
||||||
|
}).get();
|
||||||
|
|
||||||
if ($parent.length) {
|
if ($parent.length) {
|
||||||
in_folder = $parent.find('.folder_title_text').eq(0).text();
|
in_folder = $parent.find('.folder_title_text').eq(0).text();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (new_folder == in_folder) return this.hide_confirm_move_menu_item();
|
if (to_folder == in_folder ||
|
||||||
|
to_folder == folder_name ||
|
||||||
|
_.contains(child_folders, to_folder)) {
|
||||||
|
return this.hide_confirm_move_menu_item();
|
||||||
|
}
|
||||||
|
|
||||||
this.model.move_folder_to_folder(folder, new_folder, in_folder, function() {
|
this.model.move_folder_to_folder(folder, in_folder, to_folder, _.bind(function() {
|
||||||
_.delay(_.bind(function() {
|
_.delay(_.bind(function() {
|
||||||
this.$s.$feed_list.css('opacity', 1).animate({'opacity': 0}, {
|
this.$s.$feed_list.css('opacity', 1).animate({'opacity': 0}, {
|
||||||
'duration': 100,
|
'duration': 100,
|
||||||
|
@ -4662,8 +4670,10 @@
|
||||||
}, this)
|
}, this)
|
||||||
});
|
});
|
||||||
}, this), 250);
|
}, this), 250);
|
||||||
this.hide_manage_menu('folder', $folder, true);
|
|
||||||
});
|
this.hide_manage_menu('folder', $parent, true);
|
||||||
|
}, this));
|
||||||
|
|
||||||
this.hide_confirm_move_menu_item(true);
|
this.hide_confirm_move_menu_item(true);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -270,16 +270,16 @@
|
||||||
|
|
||||||
- url: /reader/mark_feed_as_read
|
- url: /reader/mark_feed_as_read
|
||||||
method: POST
|
method: POST
|
||||||
short_desc: "Mark all stories in a feed as read."
|
short_desc: "Mark a list of feeds as read."
|
||||||
long_desc:
|
long_desc:
|
||||||
- "Mark all stories in a feed or list of feeds as read."
|
- "Mark a list of feeds as read."
|
||||||
|
params:
|
||||||
|
- key: feed_id
|
||||||
|
desc: "List of feed ids to mark as read."
|
||||||
|
required: true
|
||||||
|
example: "[12, 24, 36]"
|
||||||
tips:
|
tips:
|
||||||
- "To mark a folder as read, send the ids of each feed inside the folder."
|
- "To mark a folder as read, send the ids of each feed inside the folder."
|
||||||
params:
|
|
||||||
- key: feed_ids
|
|
||||||
desc: "List of feed ids to mark as read."
|
|
||||||
optional: true
|
|
||||||
example: "[12, 24, 36]"
|
|
||||||
|
|
||||||
- url: /reader/mark_all_as_read
|
- url: /reader/mark_all_as_read
|
||||||
method: POST
|
method: POST
|
||||||
|
@ -328,6 +328,52 @@
|
||||||
default: "[Top Level]"
|
default: "[Top Level]"
|
||||||
example: "All Blogs"
|
example: "All Blogs"
|
||||||
|
|
||||||
|
- url: /reader/move_feed_to_folder
|
||||||
|
method: POST
|
||||||
|
short_desc: "Move a feed into a different folder."
|
||||||
|
long_desc:
|
||||||
|
- "Move a feed into a different folder."
|
||||||
|
params:
|
||||||
|
- key: feed_id
|
||||||
|
desc: "Feed id."
|
||||||
|
required: true
|
||||||
|
example: 12
|
||||||
|
- key: in_folder
|
||||||
|
desc: >
|
||||||
|
Current folder the feed is in. Necessary to disambiguate if a feed is in
|
||||||
|
multiple folders.
|
||||||
|
required: true
|
||||||
|
example: "Blogs"
|
||||||
|
- key: in_folder
|
||||||
|
desc: "Folder the feed is going into."
|
||||||
|
required: true
|
||||||
|
example: "Tumblrs"
|
||||||
|
tips:
|
||||||
|
- "Leave folder names blank to specify Top Level."
|
||||||
|
|
||||||
|
- url: /reader/move_folder_to_folder
|
||||||
|
method: POST
|
||||||
|
short_desc: "Move a folder into a different folder."
|
||||||
|
long_desc:
|
||||||
|
- "Move a folder into a different folder."
|
||||||
|
params:
|
||||||
|
- key: folder_name
|
||||||
|
desc: "Name of folder being moved."
|
||||||
|
required: true
|
||||||
|
example: "Tumblrs"
|
||||||
|
- key: in_folder
|
||||||
|
desc: >
|
||||||
|
Current folder the folder is in. Necessary to disambiguate if a folder
|
||||||
|
name is in multiple folders. (Please don't let this happen.)
|
||||||
|
required: true
|
||||||
|
example: "Blogs"
|
||||||
|
- key: in_folder
|
||||||
|
desc: "New folder the existing folder is going into."
|
||||||
|
required: true
|
||||||
|
example: "Daily Blogs"
|
||||||
|
tips:
|
||||||
|
- "Leave folder names blank to specify Top Level."
|
||||||
|
|
||||||
- url: /reader/rename_feed
|
- url: /reader/rename_feed
|
||||||
method: POST
|
method: POST
|
||||||
short_desc: "Rename a feed title."
|
short_desc: "Rename a feed title."
|
||||||
|
@ -400,16 +446,6 @@
|
||||||
optional: true
|
optional: true
|
||||||
example: "[12, 24, 36]"
|
example: "[12, 24, 36]"
|
||||||
|
|
||||||
- url: /reader/mark_feed_as_read
|
|
||||||
method: POST
|
|
||||||
short_desc: "Mark a list of feeds as read."
|
|
||||||
long_desc:
|
|
||||||
- "Mark a list of feeds as read."
|
|
||||||
params:
|
|
||||||
- key: feed_id
|
|
||||||
desc: "List of feed ids to mark as read."
|
|
||||||
required: true
|
|
||||||
example: "[12, 24, 36]"
|
|
||||||
|
|
||||||
- url: /reader/save_feed_order
|
- url: /reader/save_feed_order
|
||||||
method: POST
|
method: POST
|
||||||
|
|
Loading…
Add table
Reference in a new issue