mirror of
https://github.com/samuelclay/NewsBlur.git
synced 2025-09-18 21:50:56 +00:00
Adding Delete Folder to the folder action menu. Uses a new algorithm that is far better and way more efficient than deleting each feed individually.
This commit is contained in:
parent
b1096503a2
commit
9870276df1
5 changed files with 46 additions and 32 deletions
|
@ -248,33 +248,30 @@ class UserSubscriptionFolders(models.Model):
|
|||
user_sub.delete()
|
||||
MUserStory.objects(user_id=self.user.pk, feed_id=feed_id).delete()
|
||||
|
||||
def delete_folder(self, folder_to_delete, in_folder):
|
||||
def _find_folder_in_folders(old_folders, folder_name=''):
|
||||
def delete_folder(self, folder_to_delete, in_folder, feed_ids_in_folder):
|
||||
def _find_folder_in_folders(old_folders, folder_name, feeds_to_delete):
|
||||
new_folders = []
|
||||
for k, folder in enumerate(old_folders):
|
||||
if isinstance(folder, int):
|
||||
if (folder == folder_to_delete and (
|
||||
(folder_name != in_folder) or
|
||||
(folder_name == in_folder and deleted))):
|
||||
multiples_found = True
|
||||
logging.info(" ---> [%s] Deleting feed, and a multiple has been found in '%s'" % (self.user, folder_name))
|
||||
if folder == folder_to_delete and folder_name == in_folder and not deleted:
|
||||
logging.info(" ---> [%s] Delete feed: %s'th item: %s folders/feeds" % (
|
||||
self.user, k, len(old_folders)
|
||||
))
|
||||
else:
|
||||
new_folders.append(folder)
|
||||
new_folders.append(folder)
|
||||
if folder in feeds_to_delete:
|
||||
feeds_to_delete.remove(folder)
|
||||
elif isinstance(folder, dict):
|
||||
for f_k, f_v in folder.items():
|
||||
nf = _find_folder_in_folders(f_v, f_k, multiples_found, deleted)
|
||||
new_folders.append({f_k: nf})
|
||||
if f_k == folder_to_delete and folder_name == in_folder:
|
||||
logging.info(" ---> [%s] Deleting folder '%s' in '%s': %s" % (self.user, f_k, folder_name, folder))
|
||||
else:
|
||||
nf, feeds_to_delete = _find_folder_in_folders(f_v, f_k, feeds_to_delete)
|
||||
new_folders.append({f_k: nf})
|
||||
|
||||
return new_folders
|
||||
return new_folders, feeds_to_delete
|
||||
|
||||
user_sub_folders = json.decode(self.folders)
|
||||
user_sub_folders, multiples_found, deleted = _find_folder_in_folders(user_sub_folders)
|
||||
user_sub_folders, feeds_to_delete = _find_folder_in_folders(user_sub_folders, '', feed_ids_in_folder)
|
||||
self.folders = json.encode(user_sub_folders)
|
||||
self.save()
|
||||
|
||||
UserSubscription.objects.filter(user=self.user, feed__in=feeds_to_delete).delete()
|
||||
|
||||
class Feature(models.Model):
|
||||
"""
|
||||
|
|
|
@ -494,11 +494,13 @@ def delete_feed(request):
|
|||
def delete_folder(request):
|
||||
folder_to_delete = request.POST['folder_name']
|
||||
in_folder = request.POST.get('in_folder', '')
|
||||
|
||||
feed_ids_in_folder = request.REQUEST.getlist('feed_id')
|
||||
feed_ids_in_folder = [int(f) for f in feed_ids_in_folder]
|
||||
|
||||
# Works piss poor with duplicate folder titles, if they are both in the same folder.
|
||||
# Deletes all, but only in the same folder parnet. But nobody should be doing this, right?
|
||||
# Deletes all, but only in the same folder parent. But nobody should be doing that, right?
|
||||
user_sub_folders = get_object_or_404(UserSubscriptionFolders, user=request.user)
|
||||
user_sub_folders.delete_folder(folder_to_delete, in_folder)
|
||||
user_sub_folders.delete_folder(folder_to_delete, in_folder, feed_ids_in_folder)
|
||||
|
||||
return dict(code=1)
|
||||
|
||||
|
|
|
@ -2623,7 +2623,7 @@ background: transparent;
|
|||
|
||||
.NB-menu-manage li {
|
||||
margin: 0 0 0 0;
|
||||
padding: 5px 8px 5px 36px;
|
||||
padding: 0;
|
||||
cursor: pointer;
|
||||
clear: both;
|
||||
position: relative;
|
||||
|
@ -2686,6 +2686,10 @@ background: transparent;
|
|||
text-shadow: 0 1px 0 #000;
|
||||
}
|
||||
|
||||
.NB-menu-manage li.NB-menu-manage-site-info:hover .NB-menu-manage-title {
|
||||
text-shadow: none;
|
||||
}
|
||||
|
||||
.NB-menu-manage .NB-disabled {
|
||||
opacity: .4;
|
||||
cursor: default;
|
||||
|
@ -2780,8 +2784,17 @@ background: transparent;
|
|||
display: none;
|
||||
}
|
||||
|
||||
.NB-menu-manage .NB-menu-manage-feed .NB-menu-manage-image {
|
||||
.NB-menu-manage .NB-menu-manage-image {
|
||||
/* margin-left: 18px; */
|
||||
padding: 5px 0 5px 36px;
|
||||
}
|
||||
.NB-menu-manage .NB-menu-manage-title {
|
||||
padding: 5px 0 5px 0;
|
||||
margin-left: 36px;
|
||||
}
|
||||
.NB-menu-manage .NB-menu-manage-subtitle {
|
||||
margin: -5px 0 0 36px;
|
||||
padding: 0 0 5px 0;
|
||||
}
|
||||
|
||||
.NB-menu-manage .NB-menu-manage-feed {
|
||||
|
|
|
@ -379,11 +379,12 @@ NEWSBLUR.AssetModel.Reader.prototype = {
|
|||
}
|
||||
},
|
||||
|
||||
delete_folder: function(folder_name, in_folder, callback) {
|
||||
delete_folder: function(folder_name, in_folder, feeds, callback) {
|
||||
if (NEWSBLUR.Globals.is_authenticated) {
|
||||
this.make_request('/reader/delete_folder', {
|
||||
'folder_name': folder_name,
|
||||
'in_folder': in_folder
|
||||
'in_folder': in_folder,
|
||||
'feed_id': feeds
|
||||
}, callback, null);
|
||||
} else {
|
||||
if ($.isFunction(callback)) callback();
|
||||
|
|
|
@ -1125,7 +1125,7 @@
|
|||
|
||||
// If the active feed is under this folder, deselect it.
|
||||
var feed_active = false;
|
||||
feeds.each(_.bind(function(feed_id) {
|
||||
_.each(feeds, _.bind(function(feed_id) {
|
||||
if (self.active_feed == feed_id) {
|
||||
this.reset_feed();
|
||||
this.show_splash_page();
|
||||
|
@ -2219,7 +2219,7 @@
|
|||
$manage_menu = $.make('ul', { className: 'NB-menu-manage' }, [
|
||||
$.make('li', { className: 'NB-menu-manage-site-info' }, [
|
||||
$.make('div', { className: 'NB-menu-manage-image' }),
|
||||
$.make('span', { className: 'feed_title' }, "Manage NewsBlur")
|
||||
$.make('span', { className: 'NB-menu-manage-title' }, "Manage NewsBlur")
|
||||
]).corner('tl tr 8px'),
|
||||
$.make('li', { className: 'NB-menu-separator' }),
|
||||
$.make('li', { className: 'NB-menu-manage-mark-read NB-menu-manage-site-mark-read' }, [
|
||||
|
@ -2287,11 +2287,11 @@
|
|||
$.make('div', { className: 'NB-menu-manage-image' }),
|
||||
$.make('div', { className: 'NB-menu-manage-title' }, 'Mark folder as read')
|
||||
]),
|
||||
// $.make('li', { className: 'NB-menu-separator' }),
|
||||
// $.make('li', { className: 'NB-menu-manage-feed NB-menu-manage-delete NB-menu-manage-folder-delete' }, [
|
||||
// $.make('div', { className: 'NB-menu-manage-image' }),
|
||||
// $.make('div', { className: 'NB-menu-manage-title' }, 'Delete this folder')
|
||||
// ]),
|
||||
$.make('li', { className: 'NB-menu-separator' }),
|
||||
$.make('li', { className: 'NB-menu-manage-feed NB-menu-manage-delete NB-menu-manage-folder-delete' }, [
|
||||
$.make('div', { className: 'NB-menu-manage-image' }),
|
||||
$.make('div', { className: 'NB-menu-manage-title' }, 'Delete this folder')
|
||||
]),
|
||||
$.make('li', { className: 'NB-menu-manage-feed NB-menu-manage-delete-confirm NB-menu-manage-folder-delete-confirm' }, [
|
||||
$.make('div', { className: 'NB-menu-manage-image' }),
|
||||
$.make('div', { className: 'NB-menu-manage-title' }, 'Really delete?')
|
||||
|
@ -2474,11 +2474,12 @@
|
|||
var self = this;
|
||||
var in_folder = '';
|
||||
var $parent = $folder.parents('li.folder');
|
||||
var feeds = this.get_feed_ids_in_folder($folder);
|
||||
if ($parent.length) {
|
||||
in_folder = $parent.eq(0).find('.folder_title_text').eq(0).text();
|
||||
}
|
||||
|
||||
this.model.delete_folder(folder, in_folder, function() {
|
||||
this.model.delete_folder(folder, in_folder, feeds, function() {
|
||||
self.delete_folder(folder, $folder);
|
||||
});
|
||||
},
|
||||
|
|
Loading…
Add table
Reference in a new issue