summaryrefslogtreecommitdiff
path: root/mytasks.py
blob: 9ec40b7f81d772f8abda64b0ec961646cac01965 (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
87
88
89
90
91
92
93
94
#!/usr/bin/env python

# RaidGuessFS, a FUSE pseudo-filesystem to guess RAID parameters of a damaged device
# Copyright (C) 2015 Ludovic Pouzenc <ludovic@pouzenc.fr>
#
# This file is part of RaidGuessFS.
#
# RaidGuessFS is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# RaidGuessFS is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with RaidGuessFS. If not, see <http://www.gnu.org/licenses/>

import multiprocessing, logging
import mydisks

def do_find_files(d,state):
    state['TODO'] = 'Not yet implemented'


def do_find_bootsect(d,state):
    state['TODO'] = 'Not yet implemented'



class MyTasks():
    """Auxiliary class, managing long or background tasks"""

    TASK_NAMES = [ 'find_bootsect', 'find_files' ]

    def __init__(self, mydisks):
        self.tasks = []
        self.d = mydisks
        self.find_files_pathlist = []
        m = multiprocessing.Manager()
        self.find_bootsect_state = m.dict()
        self.find_bootsect_process = None
        self.find_files_state = m.dict()
        self.find_files_process = None

    def get_find_files_pathlist(self):
        return self.find_files_pathlist

    def get_find_files_pathlist_str(self):
        return '\n'.join(self.find_files_pathlist)

    def task_start(self, task_name):
        if task_name == 'find_files':
            self.find_files_process = multiprocessing.Process(
                    target = do_find_files,
                    args = (self.d, self.find_files_state)
            )
            self.find_files_process.start()
        elif task_name == 'find_bootsect':
            self.find_bootsect_process = multiprocessing.Process(
                    target = do_find_bootsect,
                    args = (self.d, self.find_bootsect_state)
            )
            self.find_bootsect_process.start()
        else:
            raise ValueError('Valid task names are : %s'%','.join(MyTasks.TASK_NAMES))
    
    def task_kill(self, task_name):
        if task_name == 'find_bootsect':
            if self.find_bootsect_process != None and self.find_bootsect_process.is_alive():
                self.find_bootsect_process.terminate()
        elif task_name == 'find_files':
            if self.find_files_process != None and self.find_files_process.is_alive():
                self.find_files_process.terminate()
        else:
            raise ValueError('Valid task names are : %s'%','.join(MyTasks.TASK_NAMES))

    def set_find_files_pathlist(self, new_find_files_pathlist):
        self.find_files_pathlist = new_find_files_pathlist

    def read_find_bootsect(self):
        if self.find_bootsect_process == None:
            return 'This task has never been started\n'
        else:
            return 'TODO\n%s\n'%self.find_bootsect_state

    def read_find_files(self):
        if self.find_files_process == None:
            return 'This task has never been started\n'
        else:
            return 'TODO\n%s\n'%self.find_files_state