Changeset 4195

Show
Ignore:
Timestamp:
08/29/08 03:11:07 (3 months ago)
Author:
Blackhex
Message:

ScreenshotsPlugin:

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • screenshotsplugin/0.11/tracscreenshots/api.py

    r3161 r4195  
    1313    when screenshots are created, modified, or deleted.""" 
    1414 
    15     def screenshot_created(screenshot): 
     15    def screenshot_created(req, screenshot): 
    1616        """Called when a screenshot is created. Only argument `screenshot` is 
    1717        a dictionary with screenshot field values.""" 
    1818 
    19     def screenshot_changed(screenshot, old_screenshot): 
     19    def screenshot_changed(req, screenshot, old_screenshot): 
    2020        """Called when a screenshot is modified. 
    2121        `old_screenshot` is a dictionary containing the previous values of the 
    2222        fields and `screenshot` is a dictionary with new values. """ 
    2323 
    24     def screenshot_deleted(screenshot): 
     24    def screenshot_deleted(req, screenshot): 
    2525        """Called when a screenshot is deleted. `screenshot` argument is 
    2626        a dictionary with values of fields of just deleted screenshot.""" 
  • screenshotsplugin/0.11/tracscreenshots/core.py

    r4192 r4195  
    336336                # Notify change listeners. 
    337337                for listener in self.change_listeners: 
    338                     listener.screenshot_created(screenshot) 
     338                    listener.screenshot_created(context.req, screenshot) 
    339339 
    340340                # Clear ID to prevent display of edit and delete button. 
     
    387387                    # Notify change listeners. 
    388388                    for listener in self.change_listeners: 
    389                         listener.screenshot_changed(screenshot, old_screenshot) 
     389                        listener.screenshot_changed(context.req, screenshot, 
     390                          old_screenshot) 
    390391 
    391392                    # Clear id to prevent display of edit and delete button. 
     
    424425                # Notify change listeners. 
    425426                for listener in self.change_listeners: 
    426                     listener.screenshot_deleted(screenshot) 
     427                    listener.screenshot_deleted(context.req, screenshot) 
    427428 
    428429                # Clear id to prevent display of edit and delete button. 
  • screenshotsplugin/0.11/tracscreenshots/tags.py

    r3140 r4195  
    33import sets 
    44 
     5from tracscreenshots.api import * 
    56from trac.core import * 
    6 from trac.mimeview import Context 
    7 from trac.util.html import html 
    8 from trac.wiki.formatter import format_to_html, format_to_oneliner 
     7from trac.resource import * 
    98 
    10 from tractags.api import ITaggingSystemProvider, DefaultTaggingSystem, \ 
    11   TagEngine 
     9from tractags.api import DefaultTagProvider, TagSystem 
    1210 
    13 from tracscreenshots.api import * 
     11class ScreenshotsTagProvider(DefaultTagProvider): 
     12    """ 
     13      Tag provider for screenshots. 
     14    """ 
     15    realm = 'screenshots' 
    1416 
    15 class ScreenshotsTaggingSystem(DefaultTaggingSystem): 
    16     """ 
    17       Tagging system which returns tags of all created screenshots. 
    18     """ 
    19     def __init__(self, env, req): 
    20         # Create context object. 
    21         self.context = Context.from_request(req)('screenshots-tags') 
     17    def check_permission(self, perm, operation): 
     18        # Permission table for screenshot tags. 
     19        permissions = {'view' : 'WIKI_VIEW', 'modify' : 'WIKI_ADMIN'} 
    2220 
    23         DefaultTaggingSystem.__init__(self, env, 'screenshots') 
    24  
    25     def name_details(self, name): 
    26         # Get database access. 
    27         db = self.env.get_db_cnx() 
    28         self.context.cursor = db.cursor() 
    29  
    30         # Get tagged screenshots. 
    31         api = self.env[ScreenshotsApi] 
    32         screenshot = api.get_screenshot(self.context, name) 
    33  
    34         # Return a tuple of (href, wikilink, title) 
    35         defaults = DefaultTaggingSystem.name_details(self, name) 
    36         if screenshot: 
    37             return (defaults[0], html.a(screenshot['name'], href = 
    38               self.env.href.screenshots(screenshot['id']), title = 
    39               screenshot['description']), screenshot['description']) 
    40         else: 
    41             return defaults 
     21        # First check permissions in default provider then for screenshots. 
     22        return super(ScreenshotsTagProvider, self).check_permission(perm, 
     23          operation) and permissions[operation] in perm 
    4224 
    4325class ScreenshotsTags(Component): 
     
    4628        to screenshots. 
    4729    """ 
    48     implements(ITaggingSystemProvider, IScreenshotChangeListener) 
    49  
    50     # ITaggingSystemProvider methods. 
    51  
    52     def get_tagspaces_provided(self): 
    53         yield 'screenshots' 
    54  
    55     def get_tagging_system(self, tagspace): 
    56         return ScreenshotsTaggingSystem(self.env, None) 
     30    implements(IScreenshotChangeListener) 
    5731 
    5832    # IScreenshotChangeListener methods. 
    5933 
    60     def screenshot_created(self, screenshot): 
    61         # Add tags to screenshot
    62         tags = TagEngine(self.env).tagspace.screenshots 
    63         tag_names = self._get_tags(screenshot) 
    64         tags.replace_tags(None, screenshot['id'], list(sets.Set(tag_names))) 
     34    def screenshot_created(self, req, screenshot): 
     35        # Create temporary resource
     36        resource = Resource() 
     37        resource.realm = 'screenshots' 
     38        resource.id = screenshot['id'] 
    6539 
    66     def screenshot_changed(self, screenshot, old_screenshot): 
    67         # Add tags to screenshot. 
    68         self.log.debug(screenshot['components']) 
     40        # Delete tags of screenshot with same ID for sure. 
     41        tag_system = TagSystem(self.env) 
     42        tag_system.delete_tags(req, resource) 
     43 
     44        # Add tags of new screenshot. 
     45        new_tags = self._get_tags(screenshot) 
     46        tag_system.add_tags(req, resource, new_tags) 
     47 
     48    def screenshot_changed(self, req, screenshot, old_screenshot): 
     49        # Update old screenshot with new values. 
    6950        old_screenshot.update(screenshot) 
    70         tags = TagEngine(self.env).tagspace.screenshots 
    71         tag_names = self._get_tags(old_screenshot) 
    72         tags.replace_tags(None, old_screenshot['id'], list(sets.Set(tag_names))) 
    7351 
    74     def screenshot_deleted(self, screenshot): 
    75         # Add tags to screenshot. 
    76         tags = TagEngine(self.env).tagspace.screenshots 
    77         tag_names = self._get_tags(screenshot) 
    78         tags.remove_tags(None, screenshot['id'], list(sets.Set(tag_names))) 
     52        # Create temporary resource. 
     53        resource = Resource() 
     54        resource.realm = 'screenshots' 
     55        resource.id = old_screenshot['id'] 
     56 
     57        # Delete old tags. 
     58        tag_system = TagSystem(self.env) 
     59        tag_system.delete_tags(req, resource) 
     60 
     61        # Add new ones. 
     62        new_tags = self._get_tags(old_screenshot) 
     63        tag_system.add_tags(req, resource, new_tags) 
     64 
     65    def screenshot_deleted(self, req, screenshot): 
     66        # Create temporary resource. 
     67        resource = Resource() 
     68        resource.realm = 'screenshots' 
     69        resource.id = screenshot['id'] 
     70 
     71        # Delete tags of screenshot. 
     72        tag_system = TagSystem(self.env) 
     73        tag_system.delete_tags(req, resource) 
    7974 
    8075    def _get_tags(self, screenshot): 
     
    8984        if screenshot['tags']: 
    9085            tags += screenshot['tags'].split() 
    91         self.log.debug(tags) 
    92         return tags 
     86        return sorted(tags) 
     87 
     88    def _get_stored_tags(self, req, screenshot_id): 
     89        tag_system = TagSystem(self.env) 
     90        resource = Resource('screenshots', screenshot_id) 
     91        tags = tag_system.get_tags(req, resource) 
     92        return sorted(tags)