~fluendo-elisa/moovida/elisa-pancake

« back to all changes in this revision

Viewing changes to elisa-core/elisa/core/application.py

  • Committer: pancake
  • Date: 2009-03-27 12:16:38 UTC
  • mfrom: (1115.2.37 elisa)
  • Revision ID: pancake@flubox-20090327121638-2da0c1a0zu3byufd
* Merge against the head

Show diffs side-by-side

added added

removed removed

Lines of Context:
32
32
from elisa.core.log import Loggable
33
33
from elisa.core.utils import exception_hook, misc
34
34
from elisa.core.utils.splash_screen import SplashScreen
 
35
from elisa.core.utils.update_checker import UpdateChecker
35
36
from elisa.core import bus
 
37
from elisa.core import media_uri
36
38
 
37
39
from elisa.core.components.message import Message
38
40
 
226
228
            self._splash = None
227
229
        else:
228
230
            self._splash = SplashScreen()
229
 
            self._splash.show()
 
231
            self._splash.show_all()
230
232
 
231
233
        # load the exception hook asap
232
234
        self.show_tracebacks = True
236
238
        self.running = False
237
239
 
238
240
        self.store = None
239
 
        self.update_checker = None
240
241
 
241
242
        self.bus = bus.Bus()
242
243
 
252
253
        self.interface_controller = interface_controller.InterfaceController()
253
254
        self.options = options
254
255
 
255
 
        import platform
256
 
        system = platform.system()
257
 
        if system == 'Windows':
258
 
            # FIXME: the core should not depend on plugins!!!
259
 
            from elisa.plugins.poblesec.windows_message import WindowsMessageSource
260
 
            from win32con import WM_COPYDATA
261
 
            self.windows_message_source = WindowsMessageSource()
262
 
            winprocs = { WM_COPYDATA : self._on_copydata, }
263
 
            self.windows_message_source.add_wndproc(winprocs)
264
 
 
265
256
    def _update_check_callback(self, results):
266
257
        try:
267
258
            version = results['version']
394
385
 
395
386
        def ready(result):
396
387
            self.bus.send_message(ComponentsLoadedMessage())
397
 
            self._close_splash_screen()
398
388
 
399
389
        dfr = self.initialize_db()
400
390
        dfr.addCallback(initialize_interface)
435
425
 
436
426
        self.bus.start()
437
427
 
 
428
        extra_affiliation_params = {'aen': '', 'entity_id': '', 'referrer': '',
 
429
                                    'traffic_unit': ''}
438
430
        if platform.system() == 'Windows':
439
431
            from elisa.core.utils.mswin32.tools import \
440
432
                should_install_recommended_plugins
 
433
            from elisa.core.utils.mswin32 import tools
 
434
            import win32con
 
435
 
441
436
            self.config.set_option('auto_install_new_recommended_plugins',
442
437
                                   should_install_recommended_plugins(),
443
438
                                   section='plugin_registry')
444
439
 
445
 
        try:
446
 
            # Do not do the import at the beginning of the file as the update
447
 
            # checker currently depends on the http client plugin.
448
 
            # FIXME: the core should not depend on plugins!!!
449
 
            from elisa.core.utils.update_checker import UpdateChecker
450
 
        except ImportError:
451
 
            # Could happen if the elisa http client plugin is missing
452
 
            pass
453
 
        else:
454
 
            self.update_checker = UpdateChecker(self._install_date,
455
 
                    self._user_id,  __version__)
456
 
            self.update_checker.start(self._update_check_callback)
 
440
            elisa_reg_key = tools.ElisaRegKey(win32con.HKEY_LOCAL_MACHINE)
 
441
            mapping = {'aen': 'aen', 'entity_id': 'aid',
 
442
                       'referrer': 'referer', 'traffic_unit': 'sid'}
 
443
            for key, value in mapping.iteritems():
 
444
                try:
 
445
                    reg_value = elisa_reg_key.get_value(value)
 
446
                    reg_value = media_uri.quote(reg_value)
 
447
                    self.debug("Value for %r in windows registry: %r",
 
448
                               value, reg_value)
 
449
                except:
 
450
                    self.debug("%r not found in windows registry", value)
 
451
                    reg_value = ''
 
452
                extra_affiliation_params[key] = reg_value
 
453
 
 
454
            elisa_reg_key.close()
 
455
 
 
456
        self.update_checker = UpdateChecker(self._install_date, self._user_id,
 
457
                                            __version__,
 
458
                                            **extra_affiliation_params)
 
459
        self.update_checker.start(self._update_check_callback)
 
460
 
 
461
        self._close_splash_screen()
457
462
 
458
463
        return defer.succeed(True)
459
464
 
467
472
        """
468
473
        self._close_splash_screen()
469
474
 
470
 
        if self.update_checker is not None:
471
 
            self.update_checker.stop()
 
475
        self.update_checker.stop()
472
476
 
473
477
        def interface_controller_stopped(result):
474
478
            self.info("Stopping managers")
524
528
    def _close_splash_screen(self):
525
529
        if self._splash != None:
526
530
            self._splash.destroy()
527
 
            
528
 
    def _on_copydata(self, hwnd, msg, wparam, lparam):
529
 
        import ctypes
530
 
        from ctypes import Structure, c_char, sizeof, addressof, memmove
531
 
        from ctypes.wintypes import ULONG, DWORD
532
 
        from elisa.core.utils.mswin32.structures import COPYDATASTRUCT
533
 
        
534
 
        copydata = COPYDATASTRUCT()
535
 
        memmove(addressof(copydata), lparam, sizeof(copydata))
536
 
        
537
 
        class COMMANDLINEDATA(Structure):
538
 
            _fields_ = [
539
 
                        ("data", c_char * copydata.cbData)
540
 
                       ]
541
 
        
542
 
        commandlinedata = COMMANDLINEDATA()
543
 
        memmove(addressof(commandlinedata), copydata.lpData, sizeof(commandlinedata))
544
 
        frontend = self.interface_controller.frontends.values()[0]
545
 
        main = frontend.retrieve_controllers('/poblesec')[0]
546
 
        # We use '|' as a file separator
547
 
        files = commandlinedata.data.split('|')
548
 
        if len(files) > 0:
549
 
            main.play_files(files)
550
 
        
551
 
        return True