Beispiel #1
0
    def share_clicked(self, touch):
        from modules.core.android_utils import LogTestFairy
        action = touch.key
        Logger.info('ShareDialog: %s clicked' % action)
        LogTestFairy('Share post on %s' % action)
        from modules.core.tempstorage import get_temp_folder_prefix
        fname = get_temp_folder_prefix() + 'share.jpg'
        Logger.info('ShareDialog: Storing image to %s' % fname)
        try:
            self.item.texture.save(fname)
        except:
            Logger.info('ShareDialog: failed Storing %s' % fname)
            self.dispatch('on_close')
            return

        # make sure everyone can access it
        Logger.info('ShareDialog: Done Storing %s' % fname)

        provider = self.get_key_in_providers(action)

        from kivy import platform
        if platform == 'ios':
            from pyobjus import autoclass, objc_str
            ObjcClass = autoclass('ShareViewControllerINDR')
            self.o_instance = ObjcClass.alloc().init()
            self.o_instance.aTitle = objc_str(SHARE_LINK)
            self.o_instance.aFileName = objc_str(fname)
            self.o_instance.aApp = objc_str(action)
            self.o_instance.aURL = objc_str('http://insiderr.com')
            self.o_instance.shareImagePost()

        elif platform == 'android':
            from jnius import autoclass, cast
            AndroidString = autoclass('java.lang.String')
            Uri = autoclass('android.net.Uri')
            # start android intent stuff
            File = autoclass('java.io.File')
            sharedFile = File(fname)
            phototUri = Uri.fromFile(sharedFile)
            Intent = autoclass('android.content.Intent')
            shareIntent = Intent(Intent.ACTION_SEND)
            shareIntent.setType("image/*")
            shareIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
            if provider:
                shareIntent.setPackage(provider)
            if 'facebook' in action:
                shareIntent.putExtra(Intent.EXTRA_TEXT, AndroidString("http://insiderr.com"))
            else:
                shareIntent.putExtra(Intent.EXTRA_TEXT, AndroidString(SHARE_LINK))
            shareIntent.putExtra("sms_body", AndroidString(SHARE_LINK))
            shareIntent.putExtra(Intent.EXTRA_STREAM, cast('android.os.Parcelable', phototUri))
            PythonActivity = autoclass('org.renpy.android.PythonActivity')
            theActivity = PythonActivity.mActivity
            chooser_title = cast('java.lang.CharSequence', AndroidString('Share Via'))
            theActivity.startActivity(Intent.createChooser(shareIntent, chooser_title))

        self.dispatch('on_close')
        LogTestFairy('Shared post successfully')
Beispiel #2
0
    def _load_urllib(self, filename, kwargs):
        '''(internal) Loading a network file. First download it, save it to a
        temporary file, and pass it to _load_local().'''
        if PY2:
            import urllib2 as urllib_request
        else:
            import urllib.request as urllib_request
        proto = filename.split(':', 1)[0]
        if proto == 'smb':
            try:
                # note: it's important to load SMBHandler every time
                # otherwise the data is occasionaly not loaded
                from smb.SMBHandler import SMBHandler
            except ImportError:
                Logger.warning(
                    'Loader: can not load PySMB: make sure it is installed')
                return
        _BINARY = 0
        import glob
        import tempfile
        from kivy import platform
        if platform in ['win', 'windows']:
            from os import O_BINARY
            _BINARY = O_BINARY

        data = fd = _out_osfd = None
        try:
            # check if we already have the file locally
            filename_hash = CRC64digest(filename)
            filename_hashed_no_ext = get_temp_folder_prefix()+filename_hash
            filename_hash_cached = glob.glob(filename_hashed_no_ext+'.*')
            #Logger.info('url_load: <%s> %s <%s> %s' % (filename,filename_hash,filename_hashed_no_ext,filename_hash_cached))

            data = None
            if len(filename_hash_cached) > 0:
                # load data
                Logger.info('AsyncImageOpenCV: Loading local cached <%s>' % filename_hash_cached[0])
                try:
                    data = self._load_local(filename_hash_cached[0], kwargs)
                except Exception:
                    data = None

            # try to download
            if data is None:
                Logger.info('AsyncImageOpenCV: download <%s>' % filename)
                if proto == 'smb':
                    # read from samba shares
                    fd = urllib_request.build_opener(SMBHandler).open(filename)
                else:
                    # read from internet
                    fd = urllib_request.urlopen(filename)

                idata = fd.read()
                info = fd.info()
                fd.close()
                fd = None
                if 'content-type' in info.keys():
                    suffix = mimetypes.guess_extension(info['content-type'])
                else:
                    suffix = '.%s' % (filename.split('.')[-1])

                _out_filename = filename_hashed_no_ext+suffix

                # write to local filename
                _out_osfd = openfile(_out_filename,  O_RDWR | O_CREAT | _BINARY)
                write(_out_osfd, idata)
                close(_out_osfd)
                _out_osfd = None

                # load data
                data = self._load_local(_out_filename, kwargs)

            # FIXME create a clean API for that
            for imdata in data._data:
                imdata.source = filename
        except Exception:
            Logger.exception('Failed to load image <%s>' % filename)
            # close file when remote file not found or download error
            try:
                close(_out_osfd)
                _out_osfd = None
            except OSError:
                pass
            return self.error_image
        finally:
            if fd:
                fd.close()
            if _out_osfd:
                close(_out_osfd)
            #if _out_filename != '':
            #    unlink(_out_filename)

        return data
Beispiel #3
0
    def share_clicked(self, touch):
        from modules.core.android_utils import LogTestFairy
        action = touch.key
        Logger.info('ShareDialog: %s clicked' % action)
        LogTestFairy('Share post on %s' % action)
        from modules.core.tempstorage import get_temp_folder_prefix
        fname = get_temp_folder_prefix() + 'share.jpg'
        Logger.info('ShareDialog: Storing image to %s' % fname)
        try:
            self.item.texture.save(fname)
        except:
            Logger.info('ShareDialog: failed Storing %s' % fname)
            self.dispatch('on_close')
            return

        # make sure everyone can access it
        Logger.info('ShareDialog: Done Storing %s' % fname)

        provider = self.get_key_in_providers(action)

        from kivy import platform
        if platform == 'ios':
            from pyobjus import autoclass, objc_str
            ObjcClass = autoclass('ShareViewControllerINDR')
            self.o_instance = ObjcClass.alloc().init()
            self.o_instance.aTitle = objc_str(SHARE_LINK)
            self.o_instance.aFileName = objc_str(fname)
            self.o_instance.aApp = objc_str(action)
            self.o_instance.aURL = objc_str('http://insiderr.com')
            self.o_instance.shareImagePost()

        elif platform == 'android':
            from jnius import autoclass, cast
            AndroidString = autoclass('java.lang.String')
            Uri = autoclass('android.net.Uri')
            # start android intent stuff
            File = autoclass('java.io.File')
            sharedFile = File(fname)
            phototUri = Uri.fromFile(sharedFile)
            Intent = autoclass('android.content.Intent')
            shareIntent = Intent(Intent.ACTION_SEND)
            shareIntent.setType("image/*")
            shareIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
            if provider:
                shareIntent.setPackage(provider)
            if 'facebook' in action:
                shareIntent.putExtra(Intent.EXTRA_TEXT,
                                     AndroidString("http://insiderr.com"))
            else:
                shareIntent.putExtra(Intent.EXTRA_TEXT,
                                     AndroidString(SHARE_LINK))
            shareIntent.putExtra("sms_body", AndroidString(SHARE_LINK))
            shareIntent.putExtra(Intent.EXTRA_STREAM,
                                 cast('android.os.Parcelable', phototUri))
            PythonActivity = autoclass('org.renpy.android.PythonActivity')
            theActivity = PythonActivity.mActivity
            chooser_title = cast('java.lang.CharSequence',
                                 AndroidString('Share Via'))
            theActivity.startActivity(
                Intent.createChooser(shareIntent, chooser_title))

        self.dispatch('on_close')
        LogTestFairy('Shared post successfully')