~feng-kylin/youker-assistant/youker-assistant

« back to all changes in this revision

Viewing changes to backends/youker-assistant-daemon/src/systemdbus/daemon.py

  • Committer: lixiang
  • Date: 2018-03-06 03:13:06 UTC
  • Revision ID: lixiang@kylinos.cn-20180306031306-fd7qnru3vm4a1xjd
Rewrite with Qt5, and add system monitor

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#!/usr/bin/python
2
 
# -*- coding: utf-8 -*-
3
 
 
4
 
### BEGIN LICENSE
5
 
# Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd
6
 
# This program is free software: you can redistribute it and/or modify it
7
 
# under the terms of the GNU General Public License version 3, as published
8
 
# by the Free Software Foundation.
9
 
#
10
 
# This program is distributed in the hope that it will be useful, but
11
 
# WITHOUT ANY WARRANTY; without even the implied warranties of
12
 
# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
13
 
# PURPOSE.  See the GNU General Public License for more details.
14
 
#
15
 
# You should have received a copy of the GNU General Public License along
16
 
# with this program.  If not, see <http://www.gnu.org/licenses/>.
17
 
### END LICENSE
18
 
 
19
 
import sys
20
 
import os
21
 
import signal
22
 
import glob
23
 
import fcntl
24
 
import shutil
25
 
import logging
26
 
import tempfile
27
 
import subprocess
28
 
import re
29
 
import dbus
30
 
import dbus.service
31
 
import dbus.mainloop.glib
32
 
from gi.repository import GObject
33
 
#import apt
34
 
#import aptsources.sourceslist
35
 
#import apt_pkg
36
 
import threading
37
 
import thread
38
 
from server import PolicyKitService
39
 
from policykit import UK_ACTION_YOUKER
40
 
import time
41
 
import cleaner
42
 
from detailinfo.cpuinfo import DetailInfo
43
 
from beautify.sound import Sound
44
 
from beautify.others import Others
45
 
#from appcollections.monitorball.monitor_ball import MonitorBall
46
 
#from softwarecenter.apt_daemon import AptDaemon
47
 
from beautify.theme import Theme
48
 
log = logging.getLogger('Daemon')
49
 
 
50
 
 
51
 
INTERFACE = 'com.ubuntukylin.youker'
52
 
UKPATH = '/'
53
 
 
54
 
#------------------------------------apt start----------------------------
55
 
from apt_handler import AppActions, AptHandler, WorkitemError
56
 
#class WorkItem:
57
 
#     def __init__(self, pkgname, action, kwargs):
58
 
#        self.pkgname = pkgname
59
 
#        self.action = action
60
 
#        self.kwargs = kwargs
61
 
 
62
 
#class WorkThread(threading.Thread):
63
 
#    def __init__(self, dbusDaemon):
64
 
#        threading.Thread.__init__(self)
65
 
#        self.dbusDaemon = dbusDaemon
66
 
#        print "$$$$$$$$$$$$$$ ", type(self.dbusDaemon)
67
 
 
68
 
#    def run(self):
69
 
#        while(True):
70
 
#            if len(self.dbusDaemon.worklist) == 0:
71
 
#                time.sleep(0.2)
72
 
#                continue
73
 
 
74
 
#            self.dbusDaemon.mutex.acquire()
75
 
#            item = self.dbusDaemon.worklist.pop(0)  #get first item and remove it from list
76
 
#            self.dbusDaemon.mutex.release()
77
 
 
78
 
#            try:
79
 
#                func = getattr(self.dbusDaemon.aptHandler, item.action)
80
 
#                if func is None:
81
 
#                    print "Error action: ", item
82
 
 
83
 
#                res = func(item.pkgname,item.kwargs)
84
 
#                if res is False:
85
 
#                    print "Action exec failed..."
86
 
#            except WorkitemError as e:
87
 
#                kwarg = {"apt_appname": item.pkgname,
88
 
#                        "apt_percent": str(-e.errornum),
89
 
#                        "action": str(item.action),
90
 
#                        }
91
 
#                self.dbusDaemon.youker_apt_signal("apt_error", kwarg)
92
 
 
93
 
#            time.sleep(0.3)
94
 
#------------------------------------apt end----------------------------
95
 
 
96
 
class Daemon(PolicyKitService):
97
 
    def __init__ (self, bus, mainloop):
98
 
        self.infoconf = DetailInfo()
99
 
        self.otherconf = Others()
100
 
        self.soundconf = Sound()
101
 
#        self.ballconf = MonitorBall()
102
 
        self.themeconf = Theme()
103
 
#        self.daemonsame = cleaner.SearchTheSame()
104
 
#        self.daemonlarge = cleaner.ManageTheLarge()
105
 
#        self.daemonunneed = cleaner.CleanTheUnneed()
106
 
#        self.daemonclean = cleaner.FunctionOfClean()
107
 
        self.daemononekey = cleaner.OneKeyClean()
108
 
#        self.daemoncache = cleaner.CleanTheCache()
109
 
#        self.daemonApt = AptDaemon()
110
 
        #self.daemonApt = AptDaemon(self)
111
 
 
112
 
        #--------------apt start----------------
113
 
        self.aptHandler = AptHandler(self)
114
 
#        self.worklist = []
115
 
#        self.mutex = threading.RLock()
116
 
#        self.worker_thread = WorkThread(self)
117
 
#        self.worker_thread.setDaemon(True)
118
 
#        self.worker_thread.start()
119
 
        #--------------apt end----------------
120
 
 
121
 
        bus_name = dbus.service.BusName(INTERFACE, bus=bus)
122
 
        PolicyKitService.__init__(self, bus_name, UKPATH)
123
 
        self.mainloop = mainloop
124
 
 
125
 
    @dbus.service.method(INTERFACE, in_signature='', out_signature='')
126
 
    def exit(self):
127
 
        self.mainloop.quit()
128
 
 
129
 
    #--------------apt start----------------
130
 
#    def add_worker_item(self, item):
131
 
#        print "####add_worker_item:", item
132
 
#        self.mutex.acquire()
133
 
#        self.worklist.append(item)
134
 
#        self.mutex.release()
135
 
 
136
 
    # package download status signal
137
 
    '''parm mean
138
 
        type:
139
 
            start:start download
140
 
            stop:all work is finish
141
 
            done:all items download finished
142
 
            fail:download failed
143
 
            fetch:one item download finished
144
 
            pulse:download status, this msg given a string like dict
145
 
        msg:
146
 
            a message of type, sometimes is None
147
 
    '''
148
 
    @dbus.service.signal(INTERFACE, signature='sas')
149
 
    def youker_fetch_signal(self, type, msg):
150
 
        pass
151
 
 
152
 
    # package install/update/remove signal
153
 
    '''parm mean
154
 
        type:
155
 
            start:start work
156
 
            stop:work finish
157
 
            error:got a error
158
 
            pulse:work status, this msg given a string like dict
159
 
        msg:
160
 
            a message of type, sometimes is None
161
 
    '''
162
 
    @dbus.service.signal(INTERFACE, signature='sas')
163
 
    def youker_apt_signal(self, type, msg):
164
 
        pass
165
 
 
166
 
    def start_install_uk(self, pkgName):
167
 
        self.aptHandler.install(pkgName)
168
 
 
169
 
    # install package sa:youker_fetch_signal() and youker_apt_signal()
170
 
    #sudo apt-get install youker-assistant=1.3.1-0ubuntu1
171
 
    @dbus.service.method(INTERFACE, in_signature='s', out_signature='b', sender_keyword='sender')
172
 
    def install(self, pkgName, sender=None):
173
 
        print "####install: ",pkgName
174
 
#        item = WorkItem(pkgName, AppActions.INSTALL, None)
175
 
#        self.add_worker_item(item)
176
 
#        self.aptHandler.install(pkgName)
177
 
        thread.start_new_thread(self.start_install_uk, (pkgName,))
178
 
        print "####install return"
179
 
        return True
180
 
 
181
 
    def start_update_source_list(self):
182
 
        self.aptHandler.update()
183
 
 
184
 
    @dbus.service.method(INTERFACE, in_signature='', out_signature='b', sender_keyword='sender')
185
 
    def update(self, sender=None):
186
 
        thread.start_new_thread(self.start_update_source_list, ())
187
 
#        self.aptHandler.update()
188
 
        return True
189
 
 
190
 
#    @dbus.service.method(INTERFACE, in_signature='as', out_signature='b', sender_keyword='sender')
191
 
#    def upgrade(self, pkgNames, sender=None):
192
 
#        print "####upgrade: ", pkgNames
193
 
#        item = WorkItem(pkgNames, AppActions.UPGRADE, None)
194
 
#        self.add_worker_item(item)
195
 
#        #        self.aptHandler.upgrade_pkg(pkgName)
196
 
#        print "####upgrade return"
197
 
#        return True
198
 
    #--------------apt end----------------
199
 
 
200
 
 
201
 
    @dbus.service.method(INTERFACE, in_signature='s', out_signature='')
202
 
    def set_homedir(self, homedir):
203
 
        self.soundconf.set_homedir(homedir)
204
 
 
205
 
    @dbus.service.method(INTERFACE, in_signature='s', out_signature='')
206
 
    def adjust_cpufreq_scaling_governer(self, value):
207
 
        cpufreq_file = "/etc/init.d/cpufrequtils"
208
 
        oldvalue = ''
209
 
        if os.path.exists(cpufreq_file):
210
 
            fp = open(cpufreq_file, "rw+")
211
 
            line = fp.readline()
212
 
            while line:
213
 
                if line.startswith("GOVERNOR="):
214
 
                    if value not in line:
215
 
                        oldvalue = line.split("=")[1].replace('"', '').replace('\n', '')
216
 
                        break
217
 
                line = fp.readline()
218
 
            fp.close()
219
 
            if oldvalue not in ['', None] and value not in ['', None]:
220
 
                cmd = "sed -i 's/%s/%s/g' %s" % (oldvalue, value, cpufreq_file)
221
 
                os.system(cmd)
222
 
                os.system('service cpufrequtils restart')
223
 
        else:
224
 
            fpath = os.path.expanduser("/sys/devices/system/cpu/")
225
 
            for line in os.listdir(fpath):
226
 
                line = line.strip('\n')
227
 
                #pattern = re.compile(r'cpu.*[0-9]$')
228
 
                pattern = re.compile(r'cpu.*\d\Z')
229
 
                m = pattern.match(line)
230
 
                if m:
231
 
                    filepath = "/sys/devices/system/cpu/%s/cpufreq/scaling_governor" % line
232
 
                    if os.path.exists(filepath):
233
 
                        cmd = 'echo %s > %s' % (value, filepath)
234
 
                        os.system(cmd)
235
 
 
236
 
    @dbus.service.method(INTERFACE, in_signature='', out_signature='as')
237
 
    def get_cpufreq_scaling_governer_list(self):
238
 
        cmd = "cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors"
239
 
        fp = os.popen(cmd)
240
 
        msg = fp.read().strip('\n')
241
 
        fp.close()
242
 
        cpulist = []
243
 
        if msg not in ['', None]:
244
 
            cpulist = msg.split(' ')
245
 
        return cpulist
246
 
 
247
 
    @dbus.service.method(INTERFACE, in_signature='', out_signature='s')
248
 
    def get_current_cpufreq_scaling_governer(self):
249
 
        cmd = "cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor"
250
 
        fp = os.popen(cmd)
251
 
        msg = fp.read().strip('\n')
252
 
        fp.close()
253
 
        return msg
254
 
 
255
 
    @dbus.service.method(INTERFACE, in_signature='s', out_signature='b')
256
 
    def copy_file(self, filename):
257
 
        des_path = '/var/lib/youker-assistant-daemon/custom'
258
 
        filename = filename.encode('utf-8')
259
 
        if not os.path.exists(des_path):
260
 
            os.makedirs(des_path)
261
 
        try:
262
 
            shutil.copy(filename, des_path)
263
 
            return True
264
 
        except os.error:
265
 
            pass
266
 
        return False
267
 
 
268
 
    @dbus.service.method(INTERFACE, in_signature='s', out_signature='b')
269
 
    def delete_file(self, filename):
270
 
        filename = filename.encode('utf-8')
271
 
#        output = open("/tmp/default.txt", 'w+')
272
 
#        output.write(filename)
273
 
#        output.close()
274
 
#        fp = open("/tmp/default.txt", "w")
275
 
#        print >> fp, "--------------"
276
 
#        print >> fp, filename
277
 
#        print >> fp, "------22222222--------"
278
 
#        fp.close()
279
 
#        if os.path.exists(filename):
280
 
        if os.path.isfile(filename):
281
 
            try:
282
 
                os.remove(filename)
283
 
                return True
284
 
            except os.error:
285
 
                pass
286
 
        return False
287
 
 
288
 
    # set cursor theme
289
 
    @dbus.service.method(INTERFACE, in_signature='s', out_signature='b')
290
 
    def set_cursor_theme_with_root(self, theme):
291
 
        return self.themeconf.set_cursor_theme_with_root(theme)
292
 
 
293
 
    @dbus.service.method(INTERFACE, in_signature='s', out_signature='b', sender_keyword='sender')
294
 
    def kill_root_process(self, pid, sender=None):
295
 
        status = self._check_permission(sender, UK_ACTION_YOUKER)
296
 
        if not status:
297
 
            return False
298
 
        cmd = 'kill -9 %s' % pid
299
 
        subprocess.Popen(cmd, shell=True, close_fds=True)#加上close_fds=True,避免子进程一直存在
300
 
        return True
301
 
 
302
 
    @dbus.service.method(INTERFACE, in_signature='', out_signature='b')
303
 
    def kill_uk_process(self):
304
 
        cmd = 'killall youker-assistant'
305
 
        subprocess.Popen(cmd, shell=True, close_fds=True)#加上close_fds=True,避免子进程一直存在
306
 
        return True
307
 
 
308
 
    @dbus.service.method(INTERFACE, in_signature='s', out_signature='')
309
 
    def set_user_homedir(self, homedir):
310
 
        cleaner.get_user_homedir(homedir)
311
 
 
312
 
    @dbus.service.method(INTERFACE, in_signature='', out_signature='s')
313
 
    def get_system_daemon(self):
314
 
        return "SystemDaemon"
315
 
 
316
 
    @dbus.service.method(INTERFACE, in_signature='', out_signature='a{sv}')
317
 
    def get_computer_info(self):
318
 
        return self.infoconf.get_computer()
319
 
 
320
 
    @dbus.service.method(INTERFACE, in_signature='', out_signature='s')
321
 
    def get_os_name(self):
322
 
        return self.infoconf.get_os_name()
323
 
 
324
 
    @dbus.service.method(INTERFACE, in_signature='', out_signature='a{sv}')
325
 
    def get_cpu_info(self):
326
 
        return self.infoconf.get_cpu()
327
 
 
328
 
    @dbus.service.method(INTERFACE, in_signature='', out_signature='a{sv}')
329
 
    def get_board_info(self):
330
 
        return self.infoconf.get_board()
331
 
 
332
 
    @dbus.service.method(INTERFACE, in_signature='', out_signature='a{sv}')
333
 
    def get_memory_info(self):
334
 
        return self.infoconf.get_memory()
335
 
 
336
 
    @dbus.service.method(INTERFACE, in_signature='', out_signature='a{sv}')
337
 
    def get_harddisk_info(self):
338
 
        return self.infoconf.get_disk()
339
 
 
340
 
    @dbus.service.method(INTERFACE, in_signature='', out_signature='a{sv}')
341
 
    def get_networkcard_info(self):
342
 
        return self.infoconf.get_network()
343
 
 
344
 
    @dbus.service.method(INTERFACE, in_signature='', out_signature='a{sv}')
345
 
    def get_monitor_info(self):
346
 
        return self.infoconf.get_monitor()
347
 
 
348
 
    @dbus.service.method(INTERFACE, in_signature='', out_signature='a{sv}')
349
 
    def get_cdrom_info(self):
350
 
        return self.infoconf.get_dvd()
351
 
 
352
 
    @dbus.service.method(INTERFACE, in_signature='', out_signature='a{sv}')
353
 
    def get_audiocard_info(self):
354
 
        return self.infoconf.get_multimedia()
355
 
 
356
 
    @dbus.service.method(INTERFACE, in_signature='', out_signature='s')
357
 
    def get_time_value(self):
358
 
        return self.infoconf.uptimeinfo()
359
 
 
360
 
    @dbus.service.method(INTERFACE, in_signature='', out_signature='a{sv}')
361
 
    def get_sensor_info(self):
362
 
        return self.infoconf.get_sensors()
363
 
 
364
 
    @dbus.service.method(INTERFACE, in_signature='', out_signature='b')
365
 
    def judge_sensors_exists_hb(self):
366
 
        return self.infoconf.judge_sensors_exists()
367
 
 
368
 
 
369
 
    # -------------------------sound-------------------------
370
 
    # get sound themes
371
 
    @dbus.service.method(INTERFACE, in_signature='', out_signature='as')
372
 
    def get_sound_themes(self):
373
 
        return self.soundconf.get_sound_themes()
374
 
 
375
 
    # get sound files in current sound theme
376
 
    @dbus.service.method(INTERFACE, in_signature='', out_signature='as')
377
 
    def get_sounds(self):
378
 
        return self.soundconf.get_sounds()
379
 
 
380
 
    # replace a sound file
381
 
    @dbus.service.method(INTERFACE, in_signature='ss', out_signature='')
382
 
    def replace_sound_file(self, newSoundFile, targetSoundFile):
383
 
        self.soundconf.replace_sound_file(newSoundFile, targetSoundFile)
384
 
 
385
 
    # restore a sound file
386
 
    @dbus.service.method(INTERFACE, in_signature='s', out_signature='')
387
 
    def restore_sound_file(self, targetSoundFile):
388
 
        self.soundconf.restore_sound_file(targetSoundFile)
389
 
 
390
 
    # restore all sound file in current sound theme
391
 
    @dbus.service.method(INTERFACE, in_signature='s', out_signature='')
392
 
    def restore_all_sound_file(self, soundTheme):
393
 
        self.soundconf.restore_all_sound_file(soundTheme)
394
 
    
395
 
    # -------------------------others-------------------------
396
 
    
397
 
    # custom plymouth bg by plymouthName
398
 
    @dbus.service.method(INTERFACE, in_signature='s', out_signature='')
399
 
    def custom_plymouth_bg(self, plymouthName):
400
 
        self.otherconf.custom_plymouth_bg(plymouthName)
401
 
    
402
 
    # add new custom plymouth
403
 
    @dbus.service.method(INTERFACE, in_signature='ss', out_signature='')
404
 
    def add_new_plymouth(self, customBG, plymouthName):
405
 
        self.otherconf.add_new_plymouth(customBG, plymouthName)
406
 
 
407
 
    # get existing plymouth list
408
 
    @dbus.service.method(INTERFACE, in_signature='', out_signature='as')
409
 
    def get_existing_plymouth_list(self):
410
 
        return self.otherconf.get_existing_plymouth_list()
411
 
    
412
 
    # check and save current plymouth when init
413
 
    @dbus.service.method(INTERFACE, in_signature='', out_signature='')
414
 
    def plymouth_init_check(self):
415
 
        self.otherconf.plymouth_init_check()
416
 
 
417
 
    # get image path
418
 
    @dbus.service.method(INTERFACE, in_signature='s', out_signature='s')
419
 
    def get_image_path(self,name):
420
 
        return self.otherconf.get_image_path(name)
421
 
 
422
 
    # Delete the boot animation from the list
423
 
    @dbus.service.method(INTERFACE, in_signature='s', out_signature='s')
424
 
    def delete_plymouth(self,plymouthName):
425
 
        return self.otherconf.delete_plymouth(plymouthName)
426
 
    
427
 
    # -------------------------monitorball-------------------------
428
 
    # clean up memory
429
 
#    @dbus.service.method(INTERFACE, in_signature='', out_signature='')
430
 
#    def cleanup_memory(self):
431
 
#        self.ballconf.cleanup_memory()
432
 
    # -------------------------monitorball end-------------------------
433
 
 
434
 
    @dbus.service.signal(INTERFACE, signature='s')
435
 
    def clean_complete_onekey(self, msg):
436
 
        pass
437
 
 
438
 
    @dbus.service.signal(INTERFACE, signature='s')
439
 
    def clean_error_onekey(self, msg):
440
 
        pass
441
 
    
442
 
    @dbus.service.signal(INTERFACE, signature='ss')
443
 
    def status_for_quick_clean(self, flag, status):
444
 
        pass
445
 
 
446
 
    # a dbus method which means clean complete
447
 
    @dbus.service.signal(INTERFACE, signature='s')
448
 
    def clean_complete(self, msg):
449
 
        pass
450
 
 
451
 
    # a dbus method which means quit clean by clicking the policykit's quit button
452
 
    @dbus.service.signal(INTERFACE, signature='b')
453
 
    def quit_clean(self, status):
454
 
        pass
455
 
 
456
 
    # a dbus method which means clean single complete
457
 
    @dbus.service.signal(INTERFACE, signature='s')
458
 
    def clean_single_complete(self, msg):
459
 
        pass
460
 
 
461
 
    # a dbus method which means an error occurred
462
 
    @dbus.service.signal(INTERFACE, signature='s')
463
 
    def clean_error(self, msg):
464
 
        pass
465
 
 
466
 
    # a dbus method which means an single error occurred
467
 
    @dbus.service.signal(INTERFACE, signature='s')
468
 
    def clean_single_error(self, msg):
469
 
        pass
470
 
 
471
 
    @dbus.service.method(INTERFACE, in_signature='as', out_signature='', sender_keyword='sender')
472
 
    def onekey_clean_crufts_function(self, mode_list, sender=None):
473
 
        status = self._check_permission(sender, UK_ACTION_YOUKER)
474
 
        if not status:
475
 
            self.revoke_clean_onekey('yes')
476
 
            return
477
 
        else:
478
 
            self.revoke_clean_onekey('no')
479
 
        daemononekey = cleaner.OneKeyClean()
480
 
        try:
481
 
            t = threading.Thread(target = daemononekey.clean_all_onekey_crufts, args = (self, mode_list))
482
 
            t.start()
483
 
            #daemononekey.clean_all_onekey_crufts(self, mode_list)
484
 
        except Exception, e:
485
 
            self.clean_error_msg('onekey')
486
 
        else:
487
 
            self.clean_complete_msg('onekey')
488
 
 
489
 
#    @dbus.service.method(INTERFACE, in_signature='as', out_signature='', sender_keyword='sender')
490
 
#    def onekey_clean_crufts_function_by_threading(self, mode_list, sender=None):
491
 
#        status = self._check_permission(sender, UK_ACTION_YOUKER)
492
 
#        if not status:
493
 
#            self.revoke_clean_onekey('yes')
494
 
#            return
495
 
#        else:
496
 
#            self.revoke_clean_onekey('no')
497
 
#        daemononekey = cleaner.OneKeyClean()
498
 
#        try:
499
 
#            t = threading.Thread(target = daemononekey.clean_all_onekey_crufts, args = (self, mode_list))
500
 
#            #daemononekey.clean_all_onekey_crufts(self, mode_list)
501
 
#        except Exception, e:
502
 
#            self.clean_error_msg('onekey')
503
 
#        else:
504
 
#            self.clean_complete_msg('onekey')
505
 
 
506
 
#        return t
507
 
 
508
 
    def onekey_clean_cancel_function(self, t):
509
 
        daemononekey.cancel_onekey_clean(t, SystemExit)
510
 
 
511
 
#    @dbus.service.method(INTERFACE, in_signature='s', out_signature='', sender_keyword='sender')
512
 
#    def history_clean_records_function(self, flag, sender=None):
513
 
#        status = self._check_permission(sender, UK_ACTION_YOUKER)
514
 
#        if not status:
515
 
#            self.clean_complete_msg('')
516
 
#            return
517
 
#        daemonhistory = cleaner.CleanTheHistory()
518
 
#        try:
519
 
#            running = daemonhistory.clean_all_history_crufts(flag)
520
 
#        except Exception, e:
521
 
#            self.clean_error_msg(flag)
522
 
#        else:
523
 
#            self.clean_complete_msg(flag)
524
 
 
525
 
#    @dbus.service.method(INTERFACE, in_signature='', out_signature='', sender_keyword='sender')
526
 
#    def clean_system_history(self, sender=None):
527
 
#        status = self._check_permission(sender, UK_ACTION_YOUKER)
528
 
#        if not status:
529
 
#            self.clean_complete_msg('')
530
 
#            return
531
 
#        daemonsystem = cleaner.CleanSystemHistory()
532
 
#        try:
533
 
#            daemonsystem.clean_the_cruftlist()
534
 
#        except Exception, e:
535
 
#            self.clean_error_msg('system')
536
 
#        else:
537
 
#            self.clean_complete_msg('system')
538
 
 
539
 
    #@dbus.service.method(INTERFACE, in_signature='', out_signature='', sender_keyword='sender')
540
 
    #def clean_dash_history(self, sender=None):
541
 
    #    status = self._check_permission(sender, UK_ACTION_YOUKER)
542
 
    #    if not status:
543
 
    #        self.clean_complete_msg('')
544
 
    #        return
545
 
    #    daemondash = cleaner.CleanDashHistory()
546
 
    #    try:
547
 
    #        daemondash.clean_the_cruftlist()
548
 
    #    except Exception, e:
549
 
    #        self.clean_error_msg('dash')
550
 
    #    else:
551
 
    #        self.clean_complete_msg('dash')
552
 
 
553
 
#    @dbus.service.method(INTERFACE, in_signature = 'as', out_signature = '', sender_keyword = 'sender')
554
 
#    def cookies_clean_record_function(self, flag, sender=None):
555
 
#        status = self._check_permission(sender, UK_ACTION_YOUKER)
556
 
#        if not status:
557
 
#            self.clean_single_complete_msg('')
558
 
#            return
559
 
#        daemoncookies = cleaner.CleanTheCookies(None)
560
 
#        try:
561
 
#            daemoncookies.clean_one_cookies_cruft(flag[0], flag[1])
562
 
#        except Exception, e:
563
 
#            self.clean_single_error_msg('cookies')
564
 
#        else:
565
 
#            self.clean_single_complete_msg('cookies')
566
 
 
567
 
#    @dbus.service.method(INTERFACE, in_signature = 's', out_signature = '', sender_keyword = 'sender')
568
 
#    def cookies_clean_records_function(self, flag, sender = None):
569
 
#        status = self._check_permission(sender, UK_ACTION_YOUKER)
570
 
#        if not status:
571
 
#            self.quit_clean_work(flag)
572
 
#            return
573
 
#        daemoncookies = cleaner.CleanTheCookies(None)
574
 
#        try:
575
 
#            daemoncookies.clean_all_cookies_crufts(flag)
576
 
#        except Exception, e:
577
 
#            self.clean_error_msg(flag)
578
 
#        else:
579
 
#            self.clean_complete_msg(flag)
580
 
 
581
 
    # the function of clean files
582
 
    ### input-['filepath', 'file...]   output-''
583
 
#    @dbus.service.method(INTERFACE, in_signature='ass', out_signature='', sender_keyword='sender')
584
 
#    def clean_file_cruft(self, cruft_list, flagstr, sender=None):
585
 
#        status = self._check_permission(sender, UK_ACTION_YOUKER)
586
 
#        if not status:
587
 
#            self.clean_complete_msg('')
588
 
#            return
589
 
#        try:
590
 
#            for cruft in cruft_list:
591
 
#                self.daemonclean.clean_the_file(cruft)
592
 
#        except Exception, e:
593
 
#            self.clean_error_msg(flagstr)
594
 
#        else:
595
 
#            self.clean_complete_msg(flagstr)
596
 
 
597
 
    #def dbusstring_to_string(self, string):
598
 
    #    tmp_string = str(string)
599
 
    #    patt = "u'[\S]+'"
600
 
    #    tmp_list = re.findall(patt, tmp_string)
601
 
    #    return [ok.split("'")[1] for ok in tmp_list]
602
 
 
603
 
    def clean_complete_msg(self, para):
604
 
        self.clean_complete(para)
605
 
 
606
 
#    def quit_clean_work(self, para):
607
 
#        self.quit_clean(para)
608
 
#    def quit_clean_work(self, status):
609
 
#        self.quit_clean(status)
610
 
 
611
 
    def clean_single_complete_msg(self, para):
612
 
        self.clean_single_complete(para)
613
 
 
614
 
    def clean_error_msg(self, para):
615
 
        self.clean_error(para)
616
 
 
617
 
    def clean_single_error_msg(self, para):
618
 
        self.clean_single_error(para)
619
 
 
620
 
    def revoke_clean_onekey(self, para):
621
 
        self.clean_complete_onekey(para)
622
 
 
623
 
    # a dbus method which means clean complete
624
 
#    @dbus.service.signal(INTERFACE, signature='s')
625
 
#    def finish_clean(self, msg):
626
 
#        pass
627
 
 
628
 
    @dbus.service.signal(INTERFACE, signature='ss')
629
 
    def status_remove_packages(self, type, msg):
630
 
        pass
631
 
 
632
 
    # a dbus method which means an error occurred
633
 
#    @dbus.service.signal(INTERFACE, signature='s')
634
 
#    def sudo_clean_error(self, msg):
635
 
#        pass
636
 
 
637
 
    # the function of clean packages
638
 
    ### input-['packagename', 'pack...]   output-''
639
 
#    @dbus.service.method(INTERFACE, in_signature='ass', out_signature='', sender_keyword='sender')
640
 
#    def clean_package_cruft(self, cruftlist, flag, sender=None):
641
 
#        status = self._check_permission(sender, UK_ACTION_YOUKER)
642
 
#        if not status:
643
 
#            self.finish_clean_msg('')
644
 
#            return
645
 
#        try:
646
 
#            self.daemonclean.clean_the_package(cruftlist, self)
647
 
#        except Exception, e:
648
 
#            self.sudo_clean_error_msg(flag)
649
 
#        else:
650
 
#            self.finish_clean_msg(flag)
651
 
 
652
 
#    def finish_clean_msg(self, para):
653
 
#        self.finish_clean(para)
654
 
 
655
 
#    def sudo_clean_error_msg(self, para):
656
 
#        self.sudo_clean_error(para)
657
 
 
658
 
#-----START-----------NEW-YOUKER---------------------------
659
 
#
660
 
 
661
 
#    @dbus.service.method(INTERFACE, in_signature='a{sv}', out_signature='', sender_keyword='sender')
662
 
#    def remove_select_items(self, mode_dic, sender=None):
663
 
#        status = self._check_permission(sender, UK_ACTION_YOUKER)
664
 
#        if not status:
665
 
#            self.quit_clean(False)
666
 
##            self.quit_clean_work()
667
 
#            return
668
 
#        else:
669
 
#            self.quit_clean(True)
670
 
    def start_clean_all(self, mode_dic):
671
 
        filecache = mode_dic.get('file', [])
672
 
        if filecache:
673
 
            for tmpName in filecache:
674
 
                cleaner.interface_remove_file_system(self, tmpName)
675
 
 
676
 
        packagecache = mode_dic.get('package', [])
677
 
        if packagecache:
678
 
            for pkgName in packagecache:
679
 
                cleaner.interface_remove_package_system(self, pkgName)
680
 
 
681
 
        bashhistory = mode_dic.get('bash-history', [])
682
 
        if bashhistory:
683
 
            for tmpName in bashhistory:
684
 
                cleaner.interface_remove_file_system(self, tmpName)
685
 
        
686
 
        x11history = mode_dic.get('x11-history', [])
687
 
        if x11history:
688
 
            for tmpName in x11history:
689
 
                cleaner.interface_remove_file_system(self, tmpName)
690
 
 
691
 
        firefoxhistory = mode_dic.get('firefox-history', [])
692
 
        if firefoxhistory:
693
 
            cleaner.interface_remove_firefox_history_system(self)
694
 
 
695
 
        chromiumhistory = mode_dic.get('chromium-history', [])
696
 
        if chromiumhistory:
697
 
            cleaner.interface_remove_chromium_history_system(self)
698
 
 
699
 
        systemhistory = mode_dic.get('system-history', [])
700
 
        if systemhistory:
701
 
            cleaner.interface_remove_system_history_system(self)
702
 
 
703
 
        firefoxcookies = mode_dic.get('firefox-cookie', [])
704
 
        if firefoxcookies:
705
 
            for domain in firefoxcookies:
706
 
                cleaner.interface_remove_firefox_cookies_system(self, domain)
707
 
 
708
 
        chromiumcookies = mode_dic.get('chromium-cookie', [])
709
 
        if chromiumcookies:
710
 
            for domain in chromiumcookies:
711
 
                cleaner.interface_remove_chromium_cookies_system(self, domain)
712
 
 
713
 
        self.subpage_status_signal('Complete:All', "finish")
714
 
 
715
 
    @dbus.service.method(INTERFACE, in_signature='a{sv}', out_signature='', sender_keyword='sender')
716
 
    def remove_select_items(self, mode_dic, sender=None):
717
 
        status = self._check_permission(sender, UK_ACTION_YOUKER)
718
 
        if not status:
719
 
            self.quit_clean(False)
720
 
            return
721
 
        else:
722
 
            self.quit_clean(True)
723
 
        thread.start_new_thread(self.start_clean_all, (mode_dic,))
724
 
#    @dbus.service.method(INTERFACE, in_signature='s', out_signature='', sender_keyword='sender')
725
 
#    def remove_file(self, fp):
726
 
#        status = self._check_permission(sender, UK_ACTION_YOUKER)
727
 
#        if not status:
728
 
#            self.revoke_clean_onekey('yes')
729
 
#            return
730
 
#        else:
731
 
#            self.revoke_clean_onekey('no')
732
 
#        cleaner.interface_remove_file_system(self, fp)
733
 
 
734
 
#    @dbus.service.method(INTERFACE, in_signature='s', out_signature='', sender_keyword='sender')
735
 
#    def remove_package(self, pkgname, sender=None):
736
 
#        status = self._check_permission(sender, UK_ACTION_YOUKER)
737
 
#        if not status:
738
 
#            self.revoke_clean_onekey('yes')
739
 
#            return
740
 
#        else:
741
 
#            self.revoke_clean_onekey('no')
742
 
#        cleaner.interface_remove_package_system(self, pkgname)
743
 
 
744
 
#    @dbus.service.method(INTERFACE, in_signature='', out_signature='', sender_keyword='sender')
745
 
#    def remove_firefox_history(self, sender=None):
746
 
#        status = self._check_permission(sender, UK_ACTION_YOUKER)
747
 
#        if not status:
748
 
#            self.revoke_clean_onekey('yes')
749
 
#            return
750
 
#        else:
751
 
#            self.revoke_clean_onekey('no')
752
 
#        cleaner.interface_remove_firefox_history_system(self)
753
 
 
754
 
#    @dbus.service.method(INTERFACE, in_signature='', out_signature='', sender_keyword='sender')
755
 
#    def remove_chromium_history(self, sender=None):
756
 
#        status = self._check_permission(sender, UK_ACTION_YOUKER)
757
 
#        if not status:
758
 
#            self.revoke_clean_onekey('yes')
759
 
#            return
760
 
#        else:
761
 
#            self.revoke_clean_onekey('no')
762
 
#        cleaner.interface_remove_chromium_history_system(self)
763
 
 
764
 
#    @dbus.service.method(INTERFACE, in_signature='s', out_signature='', sender_keyword='sender')
765
 
#    def remove_firefox_cookies(self, domain, sender=None):
766
 
#        status = self._check_permission(sender, UK_ACTION_YOUKER)
767
 
#        if not status:
768
 
#            self.revoke_clean_onekey('yes')
769
 
#            return
770
 
#        else:
771
 
#            self.revoke_clean_onekey('no')
772
 
#        cleaner.interface_remove_firefox_cookies_system(self, domain)
773
 
 
774
 
#    @dbus.service.method(INTERFACE, in_signature='s', out_signature='', sender_keyword='sender')
775
 
#    def remove_chromium_cookies(self, domain, sender=None):
776
 
#        status = self._check_permission(sender, UK_ACTION_YOUKER)
777
 
#        if not status:
778
 
#            self.revoke_clean_onekey('yes')
779
 
#            return
780
 
#        else:
781
 
#            self.revoke_clean_onekey('no')
782
 
#        cleaner.interface_remove_chromium_cookies_system(self, domain)
783
 
 
784
 
    @dbus.service.signal(INTERFACE, signature='as')
785
 
    def subpage_data_signal(self, msg):
786
 
        pass
787
 
 
788
 
    @dbus.service.signal(INTERFACE, signature='ss')
789
 
    def subpage_status_signal(self, msg, domain):
790
 
        pass
791
 
 
792
 
    @dbus.service.signal(INTERFACE, signature='s')
793
 
    def subpage_error_signal(self, msg):
794
 
        pass
795
 
#-----END------------NEW-YOUKER---------------------------
796
 
 
797
 
if __name__ == '__main__':
798
 
    os.environ["TERM"] = "xterm"
799
 
    os.environ["PATH"] = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin"
800
 
    os.environ["DEBIAN_FRONTEND"] = "noninteractive"
801
 
    if os.path.exists("/var/lib/apt/lists/lock"):
802
 
        os.remove("/var/lib/apt/lists/lock")
803
 
    dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
804
 
    #gobject.threads_init()
805
 
    #mainloop = gobject.MainLoop()
806
 
    GObject.threads_init()
807
 
    mainloop = GObject.MainLoop()
808
 
    signal.signal(signal.SIGINT, lambda : mainloop.quit())
809
 
    Daemon(dbus.SystemBus(), mainloop)
810
 
    mainloop.run()