Exemple #1
0
class Process(QObject):

    def __init__(self, ldir, rdir, welcomeVid, waitVid, mdir, withCam):
        QObject.__init__(self)
        self.logger = logging.getLogger(__name__)
        self.ldir = ldir
        self.rdir = rdir
        self.withCam = withCam
        self.waitVid = mdir + waitVid
        if withCam:
            self.cam = Camera(ldir, mdir)
        self.w_w = WelcomeWindow(mdir + welcomeVid)
        self.running = False
        self.waiting = True
        self.minutes = 0
        self.t_w = None
        self.d_w = None
        self.v_w = None
        self.c_d = None
        self.num = 0
        self.img = "20200501_132612"
        self.sftp = Sftp(mdir, withCam)

    def reinit(self):
        self.t_w = None
        self.c_d = None
        self.d_w = None
        self.num = 0

    def start(self):
        self.noteActivity("Processus central démarré")
        self.w_w.takeButton.clicked.connect(self.takePicture)
        self.w_w.showFullScreen()
        self.w_w.player.play()
        self.noteActivity("Ecran de bienvenue affiché")
        QTimer.singleShot(1000, self.check)

    def takePicture(self):
        self.w_w.player.pause()
        self.noteActivity("Bouton 'Prendre une photo' appuyé")
        self.picture()

    def picture(self):
        if self.withCam:
            self.img = self.cam.takePicture()
        self.noteActivity("Photo prise")
        self.num = self.num + 1
        self.d_w = DisplayWindow(self.num, self.img, self.ldir)
        self.d_w.redoButton.clicked.connect(self.redoPicture)
        self.d_w.okButton.clicked.connect(self.okPicture)
        self.d_w.cancelButton.clicked.connect(self.cancelPicture)
        self.d_w.showFullScreen()
        self.noteActivity("Ecran d'affichage affiché")

    def redoPicture(self):
        self.noteActivity("Nouvelle photo demandée")
        self.d_w.close()
        self.d_w = None
        self.picture()

    def cancelPicture(self):
        self.noteActivity("Processus de photo annulé")
        self.d_w.close()
        self.reinit()
        self.w_w.player.play()

    def okPicture(self):
        self.noteActivity("Photo acceptée")
        self.num = 0
        self.d_w.close()
        self.d_w = None
        self.t_w = ThanksWindow()
        self.t_w.okButton.clicked.connect(self.okThanks)
        self.t_w.cancelButton.clicked.connect(self.cancelThanks)
        self.t_w.emailYesButton.clicked.connect(self.yesEmail)
        self.t_w.emailNoButton.clicked.connect(self.noEmail)
        self.t_w.socialYesButton.clicked.connect(self.yesSocial)
        self.t_w.socialNoButton.clicked.connect(self.noSocial)
        self.t_w.showFullScreen()
        self.noteActivity("Ecran d'envoi affiché")

    def okThanks(self):
        self.noteActivity("Bouton ok envoi appuyé")
        if self.t_w.sendEmail() and not re.match(r"(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)",
                                                 self.t_w.getEmail()):
            self.noteActivity("Mauvais format d'adresse e-mail : ok non-soumis, message d'erreur affiché")
            self.t_w.setErrorMessage("Mauvais format d'adresse e-mail")
        else:
            data = {'date': time.strftime("%d-%m-%y"), 'heure': time.strftime("%H:%M"),
                    'image' : self.img + '.jpg'}
            if self.t_w.sendSocial():
                data['social media'] = "yes"
            else:
                data['social media'] = "no"
            if self.t_w.sendEmail():
                data['email'] = self.t_w.getEmail()
            else:
                data['email'] = "no"
            with open(self.ldir + self.img + '.json', mode='w') as outfile:
                json.dump(data, outfile, indent=4)
            self.noteActivity("JSON sauvegardé")
            self.c_d = ConfirmDialog()
            self.c_d.okButton.clicked.connect(self.okConfirm)
            self.c_d.show()
            
    def okConfirm(self):                
            self.t_w.close()           
            self.c_d.close()
            self.reinit()
            self.w_w.player.play()
            self.noteActivity("Processus réinitialisé")

    def cancelThanks(self):
        self.noteActivity("Processus de photo annulé")
        self.t_w.close()
        self.reinit()
        self.w_w.player.play()

    def yesEmail(self):
        self.noteActivity("Demande d'envoi par e-mail")
        self.t_w.adressLabel.setVisible(True)
        self.t_w.adressEdit.setVisible(True)

    def noEmail(self):
        self.noteActivity("Refus d'envoi par e-mail")
        self.t_w.adressLabel.setVisible(False)
        self.t_w.adressEdit.setVisible(False)

    def yesSocial(self):
        self.noteActivity("Demande de mise sur les réseaux sociaux")
        self.sendSocial = True

    def noSocial(self):
        self.noteActivity("Refus de mise sur les réseaux sociaux")
        self.sendSocial = False

    def noteActivity(self, message):
        self.logger.info(message)
        self.running = True

    def check(self):
        print(self.minutes)
        
        if not self.running:
            if self.minutes < 5:
                self.minutes += 1
                QTimer.singleShot(2000, self.check)
            else:
                self.noteActivity("Mise en veille")
                self.minutes = 0
                self.v_w = WaitWidget(self.waitVid)
                self.v_w.pressedSignal.connect(self.pressed)
                self.v_w.showFullScreen()
                self.w_w.player.stop()
                self.reinit()
                QTimer.singleShot(1000, self.download)
                self.v_w.player.play()
                self.waiting = True
        else:
            self.minutes = 0
            self.running = False
            QTimer.singleShot(2000, self.check)
            

    def pressed(self):
        self.noteActivity("Réveil")
        self.v_w.player.stop()
        self.waiting = False
        self.v_w.close()
        self.w_w.player.play()
        QTimer.singleShot(1000, self.check)

    def download(self):
        if self.sftp.connect():
            for f in os.listdir(self.ldir):
                if os.path.isfile(os.path.join(self.ldir, f)):
                    if f.endswith(".jpg"):
                        name = f.split(".")[0]
                        if os.path.exists(os.path.join(self.ldir, name + ".json")):
                            self.noteActivity("Envoi de " + name)
                            if self.sftp.put(f, self.ldir, self.rdir):
                                if self.sftp.put(name + ".json", self.ldir, self.rdir):
                                    os.remove(os.path.join(self.ldir, f))
                                    os.remove(os.path.join(self.ldir, name + ".json"))
                        else:
                            self.noteActivity("Suppression de l'image sans json : " + name)
                            os.remove(os.path.join(self.ldir, f))
                if not self.waiting:
                    self.sftp.close()
                    break