Features/GTK3/Porting/Record

From Sugar Labs
< Features‎ | GTK3‎ | Porting
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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)