Show
Ignore:
Timestamp:
08/30/07 23:05:00 (15 months ago)
Author:
roidelapluie
Message:

0.11.2: add multiple data form support (XEP-0004)

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • branches/gajim_0.11.1/src/common/dataforms.py

    r7984 r8643  
    6464                'list-single': ListSingleField, 
    6565                'text-multi': TextMultiField, 
    66         }[typ](extend=node) 
    67         return f 
     66        } 
     67        if typ not in f: 
     68                typ = 'text-single' 
     69        return f[typ](extend=node) 
    6870 
    6971def ExtendForm(node): 
    7072        ''' Helper function to extend a node to form of appropriate type. ''' 
    71         if node.getTag('recorded') is not None: 
     73        if node.getTag('reported') is not None: 
    7274                return MultipleDataForm(extend=node) 
    7375        else: 
     
    386388 
    387389class MultipleDataForm(DataForm): 
    388         def __init__(self): 
     390        def __init__(self, type=None, title=None, instructions=None, items=None, extend=None): 
     391                DataForm.__init__(self, type=type, title=title, instructions=instructions, extend=extend) 
    389392                # all records, recorded into DataRecords 
    390                 pass 
     393                if extend is None: 
     394                        # we have to build this object from scratch 
     395                        xmpp.Node.__init__(self) 
     396 
     397                        if items is not None: self.items = items 
     398                else: 
     399                        # we already have xmpp.Node inside - try to convert all 
     400                        # fields into DataField objects 
     401                        if items is None: 
     402                                self.items = list(self.iterTags('item')) 
     403                        else: 
     404                                for item in self.getTags('item'): 
     405                                        self.delChild(item) 
     406                                self.items = items 
     407                reported_tag = self.getTag('reported') 
     408                self.reported = DataRecord(extend = reported_tag) 
    391409 
    392410        @nested_property 
     
    402420                                self.addChild(node=record) 
    403421                def fdel(self): 
    404                         for record in self.getTags('record'): 
     422                        for record in self.getTags('item'): 
    405423                                self.delChild(record) 
    406424                return locals() 
     
    410428                        yield record 
    411429 
    412         @nested_property 
    413         def recorded(): 
    414                 ''' DataRecord that contains descriptions of fields in records.''' 
    415                 def fget(self): 
    416                         return self.getTag('recorded') 
    417                 def fset(self, record): 
    418                         try: 
    419                                 self.delChild('recorded') 
    420                         except: 
    421                                 pass 
    422  
    423                         record.setName('recorded') 
    424                         self.addChild(node=record) 
    425                 return locals() 
    426  
     430#       @nested_property 
     431#       def reported(): 
     432#               ''' DataRecord that contains descriptions of fields in records.''' 
     433#               def fget(self): 
     434#                       return self.getTag('reported') 
     435#               def fset(self, record): 
     436#                       try: 
     437#                               self.delChild('reported') 
     438#                       except: 
     439#                               pass 
     440# 
     441#                       record.setName('reported') 
     442#                       self.addChild(node=record) 
     443#               return locals() 
     444