diff options
| author | Matthias Baumgartner <dev@igsor.net> | 2023-01-25 17:31:10 +0100 |
|---|---|---|
| committer | Matthias Baumgartner <dev@igsor.net> | 2023-01-25 17:31:10 +0100 |
| commit | d531555fe3483fac7676aa634f3787e8eab9b67f (patch) | |
| tree | cfd847d785feb3c7b0a72b686c0d341a2852de45 /tagit/actions | |
| parent | cdd1dc960a3da5e73a86dd3ec5412417387c70d6 (diff) | |
| download | tagit-d531555fe3483fac7676aa634f3787e8eab9b67f.tar.gz tagit-d531555fe3483fac7676aa634f3787e8eab9b67f.tar.bz2 tagit-d531555fe3483fac7676aa634f3787e8eab9b67f.zip | |
grouping
Diffstat (limited to 'tagit/actions')
| -rw-r--r-- | tagit/actions/__init__.py | 10 | ||||
| -rw-r--r-- | tagit/actions/grouping.py | 65 |
2 files changed, 40 insertions, 35 deletions
diff --git a/tagit/actions/__init__.py b/tagit/actions/__init__.py index 6416a4b..7144e44 100644 --- a/tagit/actions/__init__.py +++ b/tagit/actions/__init__.py @@ -13,7 +13,7 @@ from tagit.utils.builder import BuilderBase # inner-module imports from . import browser from . import filter -#from . import grouping +from . import grouping from . import misc #from . import objects from . import planes @@ -67,10 +67,10 @@ class ActionBuilder(BuilderBase): #'SearchByAddressOnce': filter.SearchByAddressOnce, #'SearchmodeSwitch': filter.SearchmodeSwitch, ## grouping - #'CreateGroup': grouping.CreateGroup, - #'DissolveGroup': grouping.DissolveGroup, - #'AddToGroup': grouping.AddToGroup, - #'OpenGroup': grouping.OpenGroup, + 'CreateGroup': grouping.CreateGroup, + 'DissolveGroup': grouping.DissolveGroup, + 'AddToGroup': grouping.AddToGroup, + 'OpenGroup': grouping.OpenGroup, #'RepresentGroup': grouping.RepresentGroup, #'RemoveFromGroup': grouping.RemoveFromGroup, ## misc diff --git a/tagit/actions/grouping.py b/tagit/actions/grouping.py index eddaeb6..05c651e 100644 --- a/tagit/actions/grouping.py +++ b/tagit/actions/grouping.py @@ -15,14 +15,16 @@ import kivy.properties as kp # tagit imports from tagit import config, dialogues -#from tagit.parsing.search import ast # FIXME: mb/port -#from tagit.storage.broker import Representative # FIXME: mb/port +from tagit.utils import Frame, ns +from tagit.utils.bsfs import Namespace, ast, uuid from tagit.widgets import Binding -from tagit.utils import Frame # inner-module imports from .action import Action +# constants +GROUP_PREFIX = Namespace('http://example.com/me/group') + # exports __all__ = [] @@ -54,30 +56,30 @@ class CreateGroup(Action): if len(self.root.browser.selection) > 1: with self.root.browser as browser, \ self.root.session as session: - # create group - grp = Group.Create() + grp = session.storage.node(ns.bsfs.Group, GROUP_PREFIX[uuid.UUID()()]) if label is not None: - grp.label = label + grp.set(ns.bsg.label, label) # add items to group - ents = self.root.session.storage.entities(browser.unfold(browser.selection)) - ents.group += grp + ents = browser.unfold(browser.selection) + ents.set(ns.bse.group, grp) # select a random representative - grp.represented_by = random.choice(ents) + rep = random.choice(list(ents)) + grp.set(ns.bsg.represented_by, rep) # set selection and cursor to representative # the representative will become valid after the search was re-applied browser.selection.clear() - browser.selection.add(grp.represented_by) + browser.selection.add(rep) browser.cursor = rep # notification - logger.info(f'Grouped {len(items)} items') + logger.info(f'Grouped {len(ents)} items') # change event - session.dispatch('on_predicate_modified', 'group', items, {grp}) + session.dispatch('on_predicate_modified', ns.bse.group, ents, {grp}) # jump to cursor # needs to be done *after* the browser was updated @@ -96,13 +98,11 @@ class DissolveGroup(Action): self.root.session as session: cursor = browser.cursor if cursor is not None and cursor in browser.folds: - # remove tag from items - items = list(cursor.members()) - #ents = ... - #grp = ... - #ents.group -= grp - for obj in items: - obj.group -= [cursor.represents()] # FIXME + grp = browser.folds[cursor].group + ents = session.storage.get(ns.bsfs.Entity, + ast.filter.Any(ns.bse.group, ast.filter.Is(grp))) + #ents.remove(ns.bse.group, grp) # FIXME: mb/port + #grp.delete() # FIXME: mb/port # FIXME: fix cursor and selection # cursor: leave at item that was the representative @@ -110,10 +110,10 @@ class DissolveGroup(Action): browser.frame = Frame() # notification - logger.info(f'Ungrouped {len(items)} items') + logger.info(f'Ungrouped {len(ents)} items') # change event - session.dispatch('on_predicate_modified', 'group', items, {cursor.represents()}) + session.dispatch('on_predicate_modified', ns.bse.group, ents, {grp}) self.root.trigger('JumpToCursor') @@ -130,12 +130,14 @@ class AddToGroup(Action): self.root.session as session: cursor = browser.cursor if cursor is not None and cursor in browser.folds: - items = browser.unfold(browser.selection) - for obj in items: + grp = browser.folds[cursor].group + ents = browser.unfold(browser.selection) + + for obj in ents: if obj == cursor: # don't add group to itself continue - obj.group += [cursor.represents()] # FIXME: Not quite sure how to handle this + obj.set(ns.bse.group, gr) # all selected items will be folded, hence it becomes empty if cursor in browser.selection: @@ -144,7 +146,7 @@ class AddToGroup(Action): browser.selection.clear() # change event - session.dispatch('on_predicate_modified', 'group', items, {cursor.represents()}) + session.dispatch('on_predicate_modified', ns.bse.group, ents, {grp}) class OpenGroup(Action): @@ -155,11 +157,12 @@ class OpenGroup(Action): return Binding.check(evt, self.cfg('bindings', 'grouping', 'open')) def apply(self, cursor=None): - if cursor is None: - cursor = self.root.browser.cursor - if cursor is not None and cursor in self.root.browser.folds: - token = ast.Token('group', ast.SetInclude(cursor.represents())) - self.root.trigger('AddToken', token) + if cursor is None: + cursor = self.root.browser.cursor + elif cursor in self.root.browser.folds: + grp = self.root.browser.folds[cursor].group + self.root.trigger('AddToken', ast.filter.Any( + ns.bse.group, ast.filter.Is(grp))) class RepresentGroup(Action): @@ -170,6 +173,7 @@ class RepresentGroup(Action): return Binding.check(evt, self.cfg('bindings', 'grouping', 'represent')) def apply(self): + return # FIXME: mb/port with self.root.browser as browser, \ self.root.filter as filter, \ self.root.session as session: @@ -191,6 +195,7 @@ class RemoveFromGroup(Action): return Binding.check(evt, self.cfg('bindings', 'grouping', 'remove')) def apply(self): + return # FIXME: mb/port with self.root.browser as browser, \ self.root.filter as filter, \ self.root.session as session: |
