Difference between revisions of "Features/GTK3/Porting/Record"

From Sugar Labs
< Features‎ | GTK3‎ | Porting
Jump to navigation Jump to search
(Created page with "'''Replace:''' def getStringFromPixbuf(pixbuf): data = [""] pixbuf.save_to_callback(_saveDataToBufferCb, "png", {}, data) return base64.b64encode(str(data[0])) ...")
 
 
(5 intermediate revisions by 2 users not shown)
Line 23: Line 23:
 
'''Replace:'''
 
'''Replace:'''
  
thumbImg.save(thumbPath, "jpeg", {"quality":"85"} )
+
thumbImg.save(thumbPath, "jpeg", {"quality":"85"} )  
  
 
'''By:'''
 
'''By:'''
Line 32: Line 32:
  
 
def load_colored_svg(filename, stroke, fill):
 
def load_colored_svg(filename, stroke, fill):
 +
 
     path = os.path.join(constants.GFX_PATH, filename)
 
     path = os.path.join(constants.GFX_PATH, filename)
 
     data = open(path, 'r').read()
 
     data = open(path, 'r').read()
Line 41: Line 42:
 
     data = re.sub('<!ENTITY stroke_color .*>', entity, data)
 
     data = re.sub('<!ENTITY stroke_color .*>', entity, data)
  
     '''return rsvg.Handle(data=data).get_pixbuf()'''
+
     return rsvg.Handle(data=data).get_pixbuf()
  
 
'''By:'''
 
'''By:'''
Line 58: Line 59:
 
     data = re.sub('<!ENTITY stroke_color .*>', entity, data)
 
     data = re.sub('<!ENTITY stroke_color .*>', entity, data)
  
     '''return Rsvg.Handle.new_from_data(data.encode('utf-8')).get_pixbuf()'''
+
     return Rsvg.Handle.new_from_data(data.encode('utf-8')).get_pixbuf()
  
 
'''Not implement:'''
 
'''Not implement:'''
Line 66: Line 67:
 
'''Due to:''' [http://bugs.sugarlabs.org/ticket/4345]
 
'''Due to:''' [http://bugs.sugarlabs.org/ticket/4345]
  
'''When an application fails and you want to close from the corresponding button occurs:'''
+
When an application fails and you want to close from the corresponding button occurs:
 +
 
 
Traceback (most recent call last):
 
Traceback (most recent call last):
 
File "/usr/lib/python2.7/site-packages/sugar3/activity/activity.py", line 890, in _keep_failed_dialog_response_cb
 
File "/usr/lib/python2.7/site-packages/sugar3/activity/activity.py", line 890, in _keep_failed_dialog_response_cb
Line 73: Line 75:
 
And the activity is not closed, nor can restart sugar as alert reappears again and again, you need to stop.
 
And the activity is not closed, nor can restart sugar as alert reappears again and again, you need to stop.
  
'''This error is caused by the following:'''
+
This error is caused by the following:
 
When a class B inherits from class A, and
 
When a class B inherits from class A, and
 
in B is overwritten a function of A,
 
in B is overwritten a function of A,
Line 79: Line 81:
 
but instead runs the function of the class B,
 
but instead runs the function of the class B,
 
even when explicitly call function A from B.
 
even when explicitly call function A from B.
 
  
 
'''Stop using Pixmap instead use Pixbuf:'''
 
'''Stop using Pixmap instead use Pixbuf:'''
Line 121: Line 122:
 
         ctx.set_source_rgb(0, 0, 0)
 
         ctx.set_source_rgb(0, 0, 0)
 
         ctx.fill()
 
         ctx.fill()
 +
 +
'''New Gst.TagList:
 +
 +
Replace:'''
 +
 +
        taglist = self._get_tags(constants.TYPE_AUDIO)
 +
 +
        if self._audio_pixbuf:
 +
            pixbuf_b64 = utils.getStringFromPixbuf(self._audio_pixbuf)
 +
            taglist[gst.TAG_EXTENDED_COMMENT] = "coverart=" + pixbuf_b64
 +
 +
        vorbis_enc = audioline.get_by_name('audioVorbisenc')
 +
        vorbis_enc.merge_tags(taglist, gst.TAG_MERGE_REPLACE_ALL)
 +
 +
'''By:'''
 +
 +
        taglist = self._get_tags(constants.TYPE_AUDIO)
 +
       
 +
        if self._audio_pixbuf:
 +
            pixbuf_b64 = utils.getStringFromPixbuf(self._audio_pixbuf)
 +
           
 +
            taglist.add_value(
 +
                Gst.TagMergeMode.REPLACE,
 +
                Gst.TAG_EXTENDED_COMMENT,
 +
                "coverart=" + pixbuf_b64)
 +
               
 +
        vorbis_enc = audioline.get_by_name('audioVorbisenc')
 +
        vorbis_enc.merge_tags(taglist, Gst.TagMergeMode.REPLACE_ALL)
 +
 +
'''Replace:'''
 +
 +
        taglist = self._get_tags(constants.TYPE_VIDEO)
 +
        vorbis_enc = muxline.get_by_name('muxVorbisenc')
 +
        vorbis_enc.merge_tags(taglist, gst.TAG_MERGE_REPLACE_ALL)
 +
 +
'''By:'''
 +
 +
        taglist = self._get_tags(constants.TYPE_VIDEO)
 +
        vorbis_enc = muxline.get_by_name('muxVorbisenc')
 +
        vorbis_enc.merge_tags(taglist, Gst.TagMergeMode.REPLACE_ALL)
 +
 +
'''Replace:'''
 +
 +
    def _get_tags(self, type):
 +
 +
        tl = gst.TagList()
 +
        tl[gst.TAG_ARTIST] = self.model.get_nickname()
 +
        tl[gst.TAG_COMMENT] = "olpc"
 +
        tl[gst.TAG_ALBUM] = "olpc"
 +
        tl[gst.TAG_DATE] = utils.getDateString(int(time.time()))
 +
        stringType = constants.MEDIA_INFO[type]['istr']
 +
       
 +
        tl[gst.TAG_TITLE] = _('%(type)s by %(name)s') % {'type': stringType,
 +
                'name': self.model.get_nickname()}
 +
        return tl
 +
 +
'''By:'''
 +
 +
    def _get_tags(self, type):
 +
       
 +
        taglist = Gst.TagList.new_empty()
 +
       
 +
        taglist.add_value(
 +
            Gst.TagMergeMode.REPLACE,
 +
            Gst.TAG_ARTIST,
 +
            self.model.get_nickname())
 +
           
 +
        taglist.add_value(
 +
            Gst.TagMergeMode.REPLACE,
 +
            Gst.TAG_COMMENT,
 +
            "olpc")
 +
 +
        taglist.add_value(
 +
            Gst.TagMergeMode.REPLACE,
 +
            Gst.TAG_ALBUM,
 +
            "olpc") #self.ca.metadata['title']
 +
 +
        taglist.add_value(
 +
            Gst.TagMergeMode.REPLACE,
 +
            Gst.TAG_DATE,
 +
            utils.getDateString(int(time.time())))
 +
           
 +
        stringType = constants.MEDIA_INFO[type]['istr']
 +
           
 +
        taglist.add_value(
 +
            Gst.TagMergeMode.REPLACE,
 +
            Gst.TAG_TITLE,
 +
            _('%(type)s by %(name)s') % {'type': stringType,
 +
                'name': self.model.get_nickname()})
 +
               
 +
        return taglist
 +
 +
 +
GObject.get_data() and set_data() are deprecated. Use normal Python attributes instead
 +
button.set_data('handler-ids', (clicked_handler, remove_handler, clipboard_handler))
 +
 +
 +
'''No joint implementation:'''
 +
 +
self.connect('size_allocate', self._size_allocate_cb)
 +
def _size_allocate_cb(self, widget, requisition):
 +
. . .
 +
 +
and
 +
 +
def do_size_allocate(self, allocation):
 +
. . .
 +
 +
 +
'''Replace:'''
 +
 +
taglist.add_value(
 +
      Gst.TagMergeMode.REPLACE,
 +
      Gst.TAG_DATE,
 +
      utils.getDateString(int(time.time())))
 +
 +
def getDateString( when ):
 +
   
 +
    return strftime( "%c", time.localtime(when) )
 +
 +
'''By:'''
 +
 +
datetime = GLib.DateTime.new_now_local()
 +
date = GLib.Date()
 +
date.set_day(datetime.get_day_of_month())
 +
date.set_month(datetime.get_month())
 +
date.set_year(datetime.get_year())
 +
 +
taglist.add_value(
 +
      Gst.TagMergeMode.REPLACE,
 +
      Gst.TAG_DATE,
 +
      date)

Latest revision as of 09:23, 23 December 2012

Replace:

def getStringFromPixbuf(pixbuf):

   data = [""]
   pixbuf.save_to_callback(_saveDataToBufferCb, "png", {}, data)
   return base64.b64encode(str(data[0]))


def _saveDataToBufferCb(buf, data):

   data[0] += buf
   return True

By:

def getStringFromPixbuf(pixbuf):

   """Converts a pixbuf in a string."""
   
   # Save_to_bufferv return: (bool, string)
   data = pixbuf.save_to_bufferv('png', [], [])
   
   return base64.b64encode(data[1])

Replace:

thumbImg.save(thumbPath, "jpeg", {"quality":"85"} )

By:

thumbImg.savev(thumbPath, "jpeg", {"quality":"85"} )

Replace:

def load_colored_svg(filename, stroke, fill):

   path = os.path.join(constants.GFX_PATH, filename)
   data = open(path, 'r').read()
   entity = '<!ENTITY fill_color "%s">' % fill
   data = re.sub('<!ENTITY fill_color .*>', entity, data)
   entity = '<!ENTITY stroke_color "%s">' % stroke
   data = re.sub('<!ENTITY stroke_color .*>', entity, data)
   return rsvg.Handle(data=data).get_pixbuf()

By:

def load_colored_svg(filename, stroke, fill):

   """Loads an svg, will change the fill and
   stroke colors and returns the pixbuf."""
   
   path = os.path.join(constants.GFX_PATH, filename)
   data = open(path, 'r').read()
   entity = '<!ENTITY fill_color "%s">' % fill
   data = re.sub('<!ENTITY fill_color .*>', entity, data)
   entity = '<!ENTITY stroke_color "%s">' % stroke
   data = re.sub('<!ENTITY stroke_color .*>', entity, data)
   return Rsvg.Handle.new_from_data(data.encode('utf-8')).get_pixbuf()

Not implement:

super(Record, self).close()

Due to: [1]

When an application fails and you want to close from the corresponding button occurs:

Traceback (most recent call last): File "/usr/lib/python2.7/site-packages/sugar3/activity/activity.py", line 890, in _keep_failed_dialog_response_cb self.close(skip_save=True) TypeError: close() got an unexpected keyword argument 'skip_save' And the activity is not closed, nor can restart sugar as alert reappears again and again, you need to stop.

This error is caused by the following: When a class B inherits from class A, and in B is overwritten a function of A, A function is no longer running, but instead runs the function of the class B, even when explicitly call function A from B.

Stop using Pixmap instead use Pixbuf:

Replace:

   def _generate_image(self, num):
       w = 55
       h = w
       pixmap = gdk.Pixmap(self.get_window(), w, h, -1)
       ctx = pixmap.cairo_create()
       ctx.rectangle(0, 0, w, h)
       ctx.set_source_rgb(0, 0, 0)
       ctx.fill()

By:

   def _generate_image(self, num):
       w = 55
       h = w
       
       x, y = self.get_property('window').get_position()
       rect = self.get_allocation()
       width, height = rect.width, rect.height
      
       thumb_surface = Gdk.Window.create_similar_surface(
           self.get_property('window'),
           cairo.CONTENT_COLOR,
           width, height)
      
       ctx = cairo.Context(thumb_surface)
       
       Gdk.cairo_set_source_window(
           cairo_context,
           self.get_property('window'),
           x, y)
           
       ctx.paint()
       
       ctx.rectangle(x, y, w, h)
       ctx.set_source_rgb(0, 0, 0)
       ctx.fill()

New Gst.TagList:

Replace:

       taglist = self._get_tags(constants.TYPE_AUDIO)
       if self._audio_pixbuf:
           pixbuf_b64 = utils.getStringFromPixbuf(self._audio_pixbuf)
           taglist[gst.TAG_EXTENDED_COMMENT] = "coverart=" + pixbuf_b64
       vorbis_enc = audioline.get_by_name('audioVorbisenc')
       vorbis_enc.merge_tags(taglist, gst.TAG_MERGE_REPLACE_ALL)

By:

       taglist = self._get_tags(constants.TYPE_AUDIO)
       
       if self._audio_pixbuf:
           pixbuf_b64 = utils.getStringFromPixbuf(self._audio_pixbuf)
           
           taglist.add_value(
               Gst.TagMergeMode.REPLACE,
               Gst.TAG_EXTENDED_COMMENT,
               "coverart=" + pixbuf_b64)
               
       vorbis_enc = audioline.get_by_name('audioVorbisenc')
       vorbis_enc.merge_tags(taglist, Gst.TagMergeMode.REPLACE_ALL)

Replace:

       taglist = self._get_tags(constants.TYPE_VIDEO)
       vorbis_enc = muxline.get_by_name('muxVorbisenc')
       vorbis_enc.merge_tags(taglist, gst.TAG_MERGE_REPLACE_ALL)

By:

       taglist = self._get_tags(constants.TYPE_VIDEO)
       vorbis_enc = muxline.get_by_name('muxVorbisenc')
       vorbis_enc.merge_tags(taglist, Gst.TagMergeMode.REPLACE_ALL)

Replace:

   def _get_tags(self, type):
       tl = gst.TagList()
       tl[gst.TAG_ARTIST] = self.model.get_nickname()
       tl[gst.TAG_COMMENT] = "olpc"
       tl[gst.TAG_ALBUM] = "olpc"
       tl[gst.TAG_DATE] = utils.getDateString(int(time.time()))
       stringType = constants.MEDIA_INFO[type]['istr']
       
       tl[gst.TAG_TITLE] = _('%(type)s by %(name)s') % {'type': stringType,
               'name': self.model.get_nickname()}
       return tl

By:

   def _get_tags(self, type):
       
       taglist = Gst.TagList.new_empty()
       
       taglist.add_value(
           Gst.TagMergeMode.REPLACE,
           Gst.TAG_ARTIST,
           self.model.get_nickname())
           
       taglist.add_value(
           Gst.TagMergeMode.REPLACE,
           Gst.TAG_COMMENT,
           "olpc")
       taglist.add_value(
           Gst.TagMergeMode.REPLACE,
           Gst.TAG_ALBUM,
           "olpc") #self.ca.metadata['title']
       taglist.add_value(
           Gst.TagMergeMode.REPLACE,
           Gst.TAG_DATE,
           utils.getDateString(int(time.time())))
           
       stringType = constants.MEDIA_INFO[type]['istr']
           
       taglist.add_value(
           Gst.TagMergeMode.REPLACE,
           Gst.TAG_TITLE,
           _('%(type)s by %(name)s') % {'type': stringType,
               'name': self.model.get_nickname()})
               
       return taglist


GObject.get_data() and set_data() are deprecated. Use normal Python attributes instead button.set_data('handler-ids', (clicked_handler, remove_handler, clipboard_handler))


No joint implementation:

self.connect('size_allocate', self._size_allocate_cb) def _size_allocate_cb(self, widget, requisition): . . .

and

def do_size_allocate(self, allocation): . . .


Replace:

taglist.add_value(

      Gst.TagMergeMode.REPLACE, 
      Gst.TAG_DATE, 
      utils.getDateString(int(time.time()))) 

def getDateString( when ):

   return strftime( "%c", time.localtime(when) )

By:

datetime = GLib.DateTime.new_now_local() date = GLib.Date() date.set_day(datetime.get_day_of_month()) date.set_month(datetime.get_month()) date.set_year(datetime.get_year())

taglist.add_value(

     Gst.TagMergeMode.REPLACE,
     Gst.TAG_DATE,
     date)