Features/GTK3/Porting/Record

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:

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)