summaryrefslogtreecommitdiff
path: root/python/googleplay.py
blob: d580ce295a6c58a9f38e7f2f1f857a67965d0de1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86

import json
import os
import threading

from pychrysalide import core
from pychrysalide.analysis.contents import MemoryContent
from pychrysalide.plugins.gplay import PlayStore, AndroidDevice


if __name__ == "__main__":

    core.set_verbosity(0)


    assert('bacon' in AndroidDevice.list_available_models())

    dev = AndroidDevice('bacon')


    MyPlayStore = PlayStore

    if not(os.path.isfile('playstore.cfg')):

        user = os.getenv('USER')
        password = os.getenv('PASSWORD')

        store = PlayStore(dev, user, password)

        cfg = {
            'dev_id': store.device_id,
            'auth_token': store.auth_token,
            'dev_token': store.device_token,
        }

        with open('playstore.cfg', 'w') as fd:
            json.dump(cfg, fd, indent='   ')

    else:

        with open('playstore.cfg', 'r') as fd:
            cfg = json.load(fd)

        store = PlayStore(dev, dev_id=cfg['dev_id'], auth_token=cfg['auth_token'], dev_token=cfg['dev_token'])


    _take_ownership = None


    ret = store.login()

    if ret:

        pkg_name = 'org.mozilla.firefox'

        details = store.get_package_details(pkg_name)

        pkg_version = details.version_code


        def _on_downloaded(_store, _content, _event):

            if not(_content is None):

                # As the content is allocated from another thread,
                # transfer ownership to the main thread in order
                # to avoid deadlock when Python tries to free this content
                global _take_ownership
                _take_ownership = _content

                with open('%s-%u.apk' % (pkg_name, pkg_version), 'wb') as fd:
                    fd.write(_content.data)

            else:
                core.log_message(core.LogMessageType.EXT_ERROR, 'Error while downloading the APK file')

            _event.set()


    event = threading.Event()

    store.connect('downloaded', _on_downloaded, event)

    store.download_package(pkg_name, pkg_version)

    event.wait()