619 lines
24 KiB
Python
619 lines
24 KiB
Python
'''
|
|
Created on 2 nov 2019
|
|
|
|
@author: Emanuele Trabattoni
|
|
TODO LIST
|
|
1. rendere threaded lo splitter.. tentativo colore 100..
|
|
|
|
'''
|
|
import sys, copy, json
|
|
import PyQt5.QtWidgets
|
|
import PyQt5.QtGui
|
|
|
|
from mainwindow import Ui_mainwin
|
|
from selezout import Ui_selezout
|
|
from titolow import Ui_titolo
|
|
from avanzatetitolo3 import Ui_advtitolo3 as Ui_advtitolo
|
|
from advopt import Ui_editconf
|
|
from about import Ui_about
|
|
|
|
from libfancylogger import fancyLogger
|
|
from libconfload import bananaCONF
|
|
from libsplit import bananaSPLITTER
|
|
|
|
from PyQt5.QtCore import QDir, QSize, QTranslator, pyqtSlot, pyqtSignal
|
|
from PyQt5.QtWidgets import QMessageBox, QSizePolicy, QInputDialog
|
|
|
|
#modo brutto per mettere la lista delle lingue in un posto solo
|
|
langlist = ['it','en']
|
|
|
|
class bananaMain(PyQt5.QtWidgets.QMainWindow):
|
|
def __init__(self, logger=None, confloader=None):
|
|
PyQt5.QtWidgets.QMainWindow.__init__(self)
|
|
self.logger = logger
|
|
self.conf = confloader
|
|
|
|
# inizializzazione interfaccia
|
|
self.ui = Ui_mainwin()
|
|
self.ui.setupUi(self)
|
|
self.titolo = bananaTitolo(self.conf, self.logger)
|
|
self.titoloav = bananaTitoloAvanzate(self.conf, self.logger)
|
|
self.selezout = bananaSelezOut(self.conf, self.logger)
|
|
self.advopt = bananaAdvOpt(self.conf, self.logger)
|
|
|
|
|
|
#popola le tab con le finestre giuste
|
|
self.ui.wgt_main.addTab(self.titolo, self.tr("Impostazioni Titolo"))
|
|
self.ui.wgt_main.addTab(self.selezout, self.tr("Selezione Output"))
|
|
|
|
# connetti bottoni avanti
|
|
self.ui.btn_avanti.clicked.connect(self.nextTab)
|
|
self.titolo.titoloui.btn_avanti.clicked.connect(self.nextTab)
|
|
|
|
#connetti bottoni indietro
|
|
self.titolo.titoloui.btn_indietro.clicked.connect(self.prevTab)
|
|
self.selezout.selezoutui.btn_indietro.clicked.connect(self.prevTab)
|
|
|
|
#connetti bottoni selezione cartelle
|
|
self.ui.btn_cartellasorg.clicked.connect(self.selezSorg)
|
|
self.ui.btn_cartelladest.clicked.connect(self.selezDest)
|
|
|
|
#connetti action tab
|
|
self.ui.actionLingua.triggered.connect(self.openLanguage)
|
|
self.ui.actionAvanzate.triggered.connect(self.openAdvOpt)
|
|
self.ui.actionCarica_Preset.triggered.connect(self.openLoadPreset)
|
|
self.ui.actionSalva_Preset.triggered.connect(self.openSavePreset)
|
|
self.ui.actionAbout_SPEx.triggered.connect(self.openAbout)
|
|
|
|
#connetti i radbutton versione
|
|
self.ui.rad_fileNew.clicked.connect(self.selezVers)
|
|
self.ui.rad_fileOld.clicked.connect(self.selezVers)
|
|
|
|
#connetti segnali delle sottointerfacce
|
|
self.advopt.update.connect(self.fillAllInterfaces)
|
|
self.logger.sendLog.connect(self.appendLog)
|
|
|
|
#riempi pagine di interfaccia
|
|
self.fillAllInterfaces()
|
|
self.setSizePolicy(QSizePolicy.Fixed,QSizePolicy.Fixed)
|
|
self.setFixedSize(QSize(self.conf.getParam('settings','winW'), self.conf.getParam('settings','winH')))
|
|
pass
|
|
|
|
def fillInterface(self):
|
|
#pagina principale
|
|
try:
|
|
self.ui.lbl_preset.setText(self.conf.inUse.replace('.json',''))
|
|
self.ui.lbl_sorg.setText(self.conf.getParam('paths','INworkPath'))
|
|
self.ui.lbl_dest.setText(self.conf.getParam('paths','OUTworkPath'))
|
|
self.ui.rad_fileNew.setChecked(self.conf.getParam('docStruct', 'fileVersNew'))
|
|
self.ui.rad_fileOld.setChecked(not self.conf.getParam('docStruct', 'fileVersNew'))
|
|
self.fillFileList()
|
|
except:
|
|
self.log.critical(self.tr("MainWindow: Configurazione non accettata"))
|
|
|
|
def fillAllInterfaces(self):
|
|
self.fillInterface()
|
|
self.titolo.fillInterface()
|
|
self.titoloav.fillInterface()
|
|
self.selezout.fillInterface()
|
|
self.advopt.fillInterface()
|
|
|
|
def fillFileList(self):
|
|
fl = QDir(self.conf.getParam('paths','INworkPath'))
|
|
fl.setNameFilters(['*.txt','*.TXT'])
|
|
fl = fl.entryList(QDir.NoDotAndDotDot | QDir.Files)
|
|
self.ui.lst_files.clear()
|
|
for f in fl:
|
|
self.ui.lst_files.addItem(PyQt5.QtWidgets.QListWidgetItem(f))
|
|
self.conf.setParam(('paths', 'fileList'), fl)
|
|
|
|
def nextTab(self):
|
|
self.ui.wgt_main.setCurrentIndex(self.ui.wgt_main.currentIndex()+1)
|
|
self.logger.debug(self.tr("Prossima Tab"))
|
|
pass
|
|
|
|
def prevTab(self):
|
|
self.ui.wgt_main.setCurrentIndex(self.ui.wgt_main.currentIndex()-1)
|
|
self.logger.debug(self.tr("Tab Precedente"))
|
|
pass
|
|
|
|
def openLoadPreset(self):
|
|
self.logger.debug(self.tr("Apri Carica Preset"))
|
|
lf = PyQt5.QtWidgets.QFileDialog(self,self.tr("Carica Preset"),self.conf.getParam('paths', 'configurationPath'))
|
|
lf.setAcceptMode(PyQt5.QtWidgets.QFileDialog.AcceptOpen)
|
|
lf.setFileMode(PyQt5.QtWidgets.QFileDialog.ExistingFile)
|
|
lf.setNameFilter("bananaCONF (*.json)")
|
|
if lf.exec():
|
|
cf = str(lf.selectedFiles()[0].split('/')[-1])
|
|
self.logger.info(self.tr(f"Apro la configurazione: {cf}"))
|
|
self.conf.open()
|
|
self.conf.use(cf)
|
|
self.logger.debug(self.tr("Riempio tutte le tab"))
|
|
self.fillAllInterfaces()
|
|
pass
|
|
|
|
def openSavePreset(self):
|
|
self.logger.debug(self.tr("Apri Salva Preset"))
|
|
self.applicaTutto()
|
|
sf = PyQt5.QtWidgets.QFileDialog(self,"Salva Preset",self.conf.getParam('paths', 'configurationPath'))
|
|
sf.setAcceptMode(PyQt5.QtWidgets.QFileDialog.AcceptSave)
|
|
sf.setNameFilter("bananaCONF (*.json)")
|
|
if sf.exec():
|
|
rv=str(sf.selectedFiles()[0].split('/')[-1])
|
|
self.conf.setParam(('paths','lastUsed'),rv)
|
|
#scrivi quale file e' stato usato per ultimo nel default
|
|
prev=self.conf.inUse
|
|
self.conf.use("defaults.json")
|
|
self.conf.setParam(('paths','lastUsed'),rv)
|
|
self.conf.save(fName="defaults.json")
|
|
self.conf.use(prev)
|
|
##
|
|
self.logger.debug(self.tr(f"Scrivo la configurazione: {rv}"))
|
|
self.conf.save(fName=rv)
|
|
pass
|
|
|
|
def openAdvOpt(self):
|
|
self.logger.debug(self.tr("Apri Opzioni Avanzate"))
|
|
self.advopt.fillInterface()
|
|
self.advopt.show()
|
|
pass
|
|
|
|
def openLanguage(self):
|
|
global langlist
|
|
self.logger.debug(self.tr("Apri Opzioni Lingua"))
|
|
flag = False
|
|
lang,flag = QInputDialog.getItem(self, self.tr("Lingua"), self.tr("Disponibili"), langlist, 0, False)
|
|
if flag:
|
|
self.conf.setParam(('settings','uiLang'),lang)
|
|
else:
|
|
pass
|
|
|
|
def openAbout(self):
|
|
self.logger.debug(self.tr("Apri Finestra About"))
|
|
self.spxabt=spexAbout(confloader=self.conf)
|
|
|
|
def selezSorg(self):
|
|
rv = PyQt5.QtWidgets.QFileDialog.getExistingDirectory(self,self.tr("Seleziona Cartella Sorgente"),self.conf.getParam('paths','INworkPath'))
|
|
if rv is not "":
|
|
self.conf.setParam(keys=('paths','INworkPath',), val=rv+"/")
|
|
self.ui.lbl_sorg.setText(rv)
|
|
self.logger.info(self.tr("Selezionata Cartella Sorgente: {}").format(rv+"/"))
|
|
self.fillFileList()
|
|
pass
|
|
|
|
def selezDest(self):
|
|
rv = PyQt5.QtWidgets.QFileDialog.getExistingDirectory(self,self.tr("Seleziona Cartella Destinazione"),self.conf.getParam('paths','OUTworkPath'))
|
|
if rv is not "":
|
|
self.conf.setParam(keys=('paths','OUTworkPath',), val=rv+"/")
|
|
self.ui.lbl_dest.setText(rv)
|
|
self.logger.info(self.tr("Selezionata Cartella Destinazione: {}").format(rv+"/"))
|
|
pass
|
|
|
|
def selezVers(self):
|
|
self.conf.setParam(('docStruct','fileVersNew'), self.ui.rad_fileNew.isChecked())
|
|
self.logger.debug(self.tr(f"Selezionata Versione File"))
|
|
|
|
def openFileDialog(self, name, path):
|
|
self.log.debug(self.tr("Apro in directory: {}").format(path))
|
|
return
|
|
|
|
def applicaTutto(self):
|
|
self.titolo.applica()
|
|
self.selezout.applica()
|
|
|
|
def appendLog(self, msg):
|
|
self.ui.txt_log.append(msg)
|
|
|
|
#############################################################
|
|
####################### INTERFACES ##########################
|
|
#############################################################
|
|
|
|
class bananaTitolo(PyQt5.QtWidgets.QWidget):
|
|
def __init__(self, confloader=None, logger=None):
|
|
PyQt5.QtWidgets.QWidget.__init__(self)
|
|
self.titoloui = Ui_titolo()
|
|
self.titoloui.setupUi(self)
|
|
self.conf = confloader
|
|
self.log = logger
|
|
if self.conf is not None:
|
|
self.titoloui.btn_avanzate.clicked.connect(self.spawnAvanzate)
|
|
self.titoloui.btn_avanti.clicked.connect(self.applica)
|
|
self.advtitolo = bananaTitoloAvanzate(confloader, self.log)
|
|
self.fillInterface()
|
|
pass
|
|
|
|
def fillInterface(self):
|
|
try:
|
|
# imposta predefiniti interfaccia da file
|
|
#Data (la piu complicata)
|
|
self.titoloui.chk_data.setChecked(self.conf.getParam('docStruct','outDate'))
|
|
self.titoloui.rad_datajpn.setChecked(self.conf.getParam('docStruct', 'outDateType') is 'jpn')
|
|
self.titoloui.rad_dataita.setChecked(self.conf.getParam('docStruct', 'outDateType') is 'it')
|
|
self.titoloui.rad_datausa.setChecked(self.conf.getParam('docStruct', 'outDateType') is 'usa')
|
|
#Titolo
|
|
self.titoloui.chk_titolo.setChecked(self.conf.getParam('docStruct','outTitle'))
|
|
self.titoloui.spn_ncarat.setValue(self.conf.getParam('docStruct', 'maxTitleLen'))
|
|
#Numero Documento
|
|
self.titoloui.chk_docnum.setChecked(self.conf.getParam('docStruct','outNumber'))
|
|
#Separatore
|
|
found=False
|
|
for itmn in range(self.titoloui.lyt_sep.count()):
|
|
itm=self.titoloui.lyt_sep.itemAt(itmn).widget()
|
|
if isinstance(itm, PyQt5.QtWidgets.QRadioButton):
|
|
if itm.text() == self.conf.getParam('docStruct', 'outNameSep'):
|
|
itm.setChecked(True)
|
|
found = True
|
|
if not found:
|
|
self.titoloui.rad_altro.setChecked(True)
|
|
self.titoloui.lin_altro.setText(self.conf.getParam('docStruct', 'customSep'))
|
|
#finestra avanzate
|
|
self.advtitolo.fillInterface()
|
|
except:
|
|
self.log.critical(self.tr("Titolo: Configurazione non accettata"))
|
|
|
|
def spawnAvanzate(self):
|
|
self.log.debug(self.tr("Mostro la finestra avanzate titolo"))
|
|
self.advtitolo.show()
|
|
pass
|
|
|
|
def applica(self):
|
|
self.log.info(self.tr("Applico impostazioni Titolo"))
|
|
self.conf.setParam(('docStruct','outDate'),self.titoloui.chk_data.isChecked())
|
|
self.conf.setParam(('docStruct','outNumber'),self.titoloui.chk_docnum.isChecked())
|
|
self.conf.setParam(('docStruct','outTitle'),self.titoloui.chk_titolo.isChecked())
|
|
if self.titoloui.rad_dataita.isChecked():
|
|
self.conf.setParam(('docStruct','outDateType'),'ita')
|
|
elif self.titoloui.rad_datajpn.isChecked():
|
|
self.conf.setParam(('docStruct','outDateType'),'jpn')
|
|
elif self.titoloui.rad_datausa.isChecked():
|
|
self.conf.setParam(('docStruct','outDateType'),'usa')
|
|
self.conf.setParam(('docStruct','maxTitleLen'), self.titoloui.spn_ncarat.value())
|
|
self.conf.setParam(('docStruct', 'customSep'),self.titoloui.lin_altro.text())
|
|
for itmn in range(self.titoloui.lyt_sep.count()):
|
|
itm=self.titoloui.lyt_sep.itemAt(itmn).widget()
|
|
if isinstance(itm, PyQt5.QtWidgets.QRadioButton):
|
|
if len(itm.text())==1 and itm.isChecked():
|
|
self.conf.setParam(('docStruct', 'outNameSep'), itm.text())
|
|
self.advtitolo.applica()
|
|
pass
|
|
|
|
class bananaTitoloAvanzate(PyQt5.QtWidgets.QWidget):
|
|
def __init__(self, confloader=None, logger=None):
|
|
PyQt5.QtWidgets.QWidget.__init__(self)
|
|
self.titoloavui = Ui_advtitolo()
|
|
self.titoloavui.setupUi(self)
|
|
self.titoloavui.btn_OK.clicked.connect(self.returnOk)
|
|
self.titoloavui.btn_annulla.clicked.connect(self.returnKo)
|
|
|
|
self.titoloavui.rad_dataprimo.clicked.connect(self.gestisciBottoni)
|
|
self.titoloavui.rad_datasecondo.clicked.connect(self.gestisciBottoni)
|
|
self.titoloavui.rad_dataterzo.clicked.connect(self.gestisciBottoni)
|
|
self.titoloavui.rad_numeroprimo.clicked.connect(self.gestisciBottoni)
|
|
self.titoloavui.rad_numerosecondo.clicked.connect(self.gestisciBottoni)
|
|
self.titoloavui.rad_numeroterzo.clicked.connect(self.gestisciBottoni)
|
|
self.titoloavui.rad_titoloprimo.clicked.connect(self.gestisciBottoni)
|
|
self.titoloavui.rad_titolosecondo.clicked.connect(self.gestisciBottoni)
|
|
self.titoloavui.rad_titoloterzo.clicked.connect(self.gestisciBottoni)
|
|
self.conf = confloader
|
|
self.log = logger
|
|
self.fillInterface()
|
|
pass
|
|
|
|
def fillInterface(self):
|
|
try:
|
|
#rimepi interfaccia
|
|
self.titoloavui.rad_dataprimo.setChecked(self.conf.getParam('docStruct','datePos')==1)
|
|
self.titoloavui.rad_datasecondo.setChecked(self.conf.getParam('docStruct','datePos')==2)
|
|
self.titoloavui.rad_dataterzo.setChecked(self.conf.getParam('docStruct','datePos')==3)
|
|
self.titoloavui.rad_titoloprimo.setChecked(self.conf.getParam('docStruct','titlePos')==1)
|
|
self.titoloavui.rad_titolosecondo.setChecked(self.conf.getParam('docStruct','titlePos')==2)
|
|
self.titoloavui.rad_titoloterzo.setChecked(self.conf.getParam('docStruct','titlePos')==3)
|
|
self.titoloavui.rad_numeroprimo.setChecked(self.conf.getParam('docStruct','numberPos')==1)
|
|
self.titoloavui.rad_numerosecondo.setChecked(self.conf.getParam('docStruct','numberPos')==2)
|
|
self.titoloavui.rad_numeroterzo.setChecked(self.conf.getParam('docStruct','numberPos')==3)
|
|
self.titoloavui.txt_prefisso.setText(self.conf.getParam('docStruct','outPrefix'))
|
|
self.titoloavui.txt_suffisso.setText(self.conf.getParam('docStruct','outSuffix'))
|
|
except:
|
|
self.log.critical(self.tr("AvanzateTitolo: Configurazione non accettata"))
|
|
|
|
def gestisciBottoni(self):
|
|
#PRIMO
|
|
if self.titoloavui.rad_numeroprimo.isChecked():
|
|
self.titoloavui.rad_dataprimo.setChecked(False)
|
|
self.titoloavui.rad_titoloprimo.setChecked(False)
|
|
self.titoloavui.rad_numerosecondo.setChecked(False)
|
|
self.titoloavui.rad_numeroterzo.setChecked(False)
|
|
if self.titoloavui.rad_dataprimo.isChecked():
|
|
self.titoloavui.rad_numeroprimo.setChecked(False)
|
|
self.titoloavui.rad_titoloprimo.setChecked(False)
|
|
self.titoloavui.rad_datasecondo.setChecked(False)
|
|
self.titoloavui.rad_dataterzo.setChecked(False)
|
|
if self.titoloavui.rad_titoloprimo.isChecked():
|
|
self.titoloavui.rad_numeroprimo.setChecked(False)
|
|
self.titoloavui.rad_dataprimo.setChecked(False)
|
|
self.titoloavui.rad_titolosecondo.setChecked(False)
|
|
self.titoloavui.rad_titoloterzo.setChecked(False)
|
|
#secondo
|
|
if self.titoloavui.rad_numerosecondo.isChecked():
|
|
self.titoloavui.rad_datasecondo.setChecked(False)
|
|
self.titoloavui.rad_titolosecondo.setChecked(False)
|
|
self.titoloavui.rad_numeroprimo.setChecked(False)
|
|
self.titoloavui.rad_numeroterzo.setChecked(False)
|
|
if self.titoloavui.rad_datasecondo.isChecked():
|
|
self.titoloavui.rad_numerosecondo.setChecked(False)
|
|
self.titoloavui.rad_titolosecondo.setChecked(False)
|
|
self.titoloavui.rad_dataprimo.setChecked(False)
|
|
self.titoloavui.rad_dataterzo.setChecked(False)
|
|
if self.titoloavui.rad_titolosecondo.isChecked():
|
|
self.titoloavui.rad_numerosecondo.setChecked(False)
|
|
self.titoloavui.rad_datasecondo.setChecked(False)
|
|
self.titoloavui.rad_titoloprimo.setChecked(False)
|
|
self.titoloavui.rad_titoloterzo.setChecked(False)
|
|
#terzo
|
|
if self.titoloavui.rad_numeroterzo.isChecked():
|
|
self.titoloavui.rad_dataterzo.setChecked(False)
|
|
self.titoloavui.rad_titoloterzo.setChecked(False)
|
|
self.titoloavui.rad_numeroprimo.setChecked(False)
|
|
self.titoloavui.rad_numerosecondo.setChecked(False)
|
|
if self.titoloavui.rad_dataterzo.isChecked():
|
|
self.titoloavui.rad_numeroterzo.setChecked(False)
|
|
self.titoloavui.rad_titoloterzo.setChecked(False)
|
|
self.titoloavui.rad_dataprimo.setChecked(False)
|
|
self.titoloavui.rad_datasecondo.setChecked(False)
|
|
if self.titoloavui.rad_titoloterzo.isChecked():
|
|
self.titoloavui.rad_numeroterzo.setChecked(False)
|
|
self.titoloavui.rad_dataterzo.setChecked(False)
|
|
self.titoloavui.rad_titoloprimo.setChecked(False)
|
|
self.titoloavui.rad_titolosecondo.setChecked(False)
|
|
pass
|
|
|
|
def returnOk(self):
|
|
self.log.info(self.tr("Avanzate Titolo Accettate"))
|
|
self.applica()
|
|
self.hide()
|
|
pass
|
|
|
|
def returnKo(self):
|
|
self.log.info(self.tr("Avanzate Titolo Rifiutate"))
|
|
self.hide()
|
|
pass
|
|
|
|
def applica(self):
|
|
#data
|
|
if self.titoloavui.rad_dataprimo.isChecked():
|
|
self.conf.setParam(('docStruct', 'datePos'), 1)
|
|
elif self.titoloavui.rad_datasecondo.isChecked():
|
|
self.conf.setParam(('docStruct', 'datePos'), 2)
|
|
elif self.titoloavui.rad_dataterzo.isChecked():
|
|
self.conf.setParam(('docStruct', 'datePos'), 3)
|
|
else:
|
|
self.conf.setParam(('docStruct', 'datePos'), -1)
|
|
#numero
|
|
if self.titoloavui.rad_numeroprimo.isChecked():
|
|
self.conf.setParam(('docStruct', 'numberPos'), 1)
|
|
elif self.titoloavui.rad_numerosecondo.isChecked():
|
|
self.conf.setParam(('docStruct', 'numberPos'), 2)
|
|
elif self.titoloavui.rad_numeroterzo.isChecked():
|
|
self.conf.setParam(('docStruct', 'numberPos'), 3)
|
|
else:
|
|
self.conf.setParam(('docStruct', 'numberPos'), -1)
|
|
#titolo
|
|
if self.titoloavui.rad_titoloprimo.isChecked():
|
|
self.conf.setParam(('docStruct', 'titlePos'), 1)
|
|
elif self.titoloavui.rad_titolosecondo.isChecked():
|
|
self.conf.setParam(('docStruct', 'titlePos'), 2)
|
|
elif self.titoloavui.rad_titoloterzo.isChecked():
|
|
self.conf.setParam(('docStruct', 'titlePos'), 3)
|
|
else:
|
|
self.conf.setParam(('docStruct', 'titlePos'), -1)
|
|
#prefisso e suffisso
|
|
self.conf.setParam(('docStruct','outPrefix'), self.titoloavui.txt_prefisso.text())
|
|
self.conf.setParam(('docStruct','outSuffix'), self.titoloavui.txt_suffisso.text())
|
|
|
|
|
|
class bananaSelezOut(PyQt5.QtWidgets.QWidget):
|
|
def __init__(self, confloader=None, logger=None):
|
|
PyQt5.QtWidgets.QWidget.__init__(self)
|
|
self.selezoutui = Ui_selezout()
|
|
self.selezoutui.setupUi(self)
|
|
self.conf = confloader
|
|
self.log = logger
|
|
if self.conf is not None:
|
|
self.selezoutui.btn_split.clicked.connect(self.applica)
|
|
self.selezoutui.btn_split.clicked.connect(self.splitta)
|
|
self.fillInterface()
|
|
pass
|
|
|
|
def fillInterface(self):
|
|
try:
|
|
self.selezoutui.cmb_lingua.clear()
|
|
self.selezoutui.cmb_lingua.addItems(self.conf.settingsList['languageconf.json'].keys())
|
|
self.selezoutui.cmb_lingua.setCurrentIndex(self.conf.getParam('docStruct','languageIdx'))
|
|
self.selezoutui.rad_mainbodyEFile.setChecked(self.conf.getParam('settings', 'saveBodyFile') and self.conf.getParam('settings', 'saveSeparateFiles'))
|
|
self.selezoutui.rad_file.setChecked(self.conf.getParam('settings', 'saveSeparateFiles') and not self.conf.getParam('settings', 'saveBodyFile'))
|
|
self.selezoutui.rad_mainbody.setChecked(self.conf.getParam('settings', 'saveBodyFile') and not self.conf.getParam('settings', 'saveSeparateFiles'))
|
|
self.selezoutui.chk_removeDuplicates.setChecked(self.conf.getParam('settings', 'removeDuplicates'))
|
|
self.selezoutui.chk_includeTitle.setChecked(self.conf.getParam('settings', 'includeTitle'))
|
|
self.selezoutui.chk_removeBreakWord.setChecked(self.conf.getParam('settings', 'delWordBreak'))
|
|
self.selezoutui.chk_cleaDestFolder.setChecked(self.conf.getParam('settings', 'removeOldFiles'))
|
|
self.selezoutui.lin_specialChars.setText(''.join(self.conf.getParam('settings', 'delChars')))
|
|
pass
|
|
except:
|
|
self.log.critical(self.tr("SelezUscita: Configurazione non accettata"))
|
|
pass
|
|
|
|
def applica(self):
|
|
self.log.info(self.tr("Applico Impostazioni File Uscita"))
|
|
self.conf.setParam(('docStruct', 'language'), self.selezoutui.cmb_lingua.currentText())
|
|
self.conf.setParam(('docStruct', 'languageIdx'), self.selezoutui.cmb_lingua.currentIndex())
|
|
self.conf.setParam(('settings', 'saveBodyFile'), self.selezoutui.rad_mainbody.isChecked()
|
|
| self.selezoutui.rad_mainbodyEFile.isChecked())
|
|
self.conf.setParam(('settings', 'saveSeparateFiles'), self.selezoutui.rad_file.isChecked()
|
|
| self.selezoutui.rad_mainbodyEFile.isChecked())
|
|
self.conf.setParam(('settings', 'removeDuplicates'), self.selezoutui.chk_removeDuplicates.isChecked())
|
|
self.conf.setParam(('settings', 'includeTitle'), self.selezoutui.chk_removeDuplicates.isChecked())
|
|
self.conf.setParam(('settings', 'delWordBreak'), self.selezoutui.chk_removeBreakWord.isChecked())
|
|
self.conf.setParam(('settings', 'removeOldFiles'), self.selezoutui.chk_cleaDestFolder.isChecked())
|
|
self.conf.setParam(('settings', 'delChars'), list(self.selezoutui.lin_specialChars.text()))
|
|
pass
|
|
|
|
def splitta(self):
|
|
# costruisco il dizionario di configurazione
|
|
prefile = self.conf.inUse
|
|
splconf = copy.deepcopy(self.conf.dump())
|
|
lang = copy.deepcopy(self.conf.use('languageconf.json').getParam(splconf['docStruct']['language']))
|
|
splconf['docStruct']['language'] = lang
|
|
self.conf.use(prefile)
|
|
|
|
#formato nome in uscita
|
|
nametemp=[]
|
|
for i in range(1,4):
|
|
if i == splconf['docStruct']['numberPos'] and splconf['docStruct']['outNumber']:
|
|
nametemp.append("{docnum}")
|
|
if i == splconf['docStruct']['datePos'] and splconf['docStruct']['outDate']:
|
|
nametemp.append(splconf['docStruct']['dateFormats'][splconf['docStruct']['outDateType']])
|
|
if i == splconf['docStruct']['titlePos'] and splconf['docStruct']['outTitle']:
|
|
nametemp.append("{title}")
|
|
pass
|
|
if splconf['docStruct']['outPrefix'] != '':
|
|
nametemp.insert(0, splconf['docStruct']['outPrefix']) #inserisco prefisso e suffisso
|
|
if splconf['docStruct']['outSuffix'] != '':
|
|
nametemp.append(splconf['docStruct']['outSuffix'])
|
|
#unisco i pezzi
|
|
splconf['docStruct']['outNameFormat'] = splconf['docStruct']['outNameSep'].join(nametemp)+splconf['docStruct']['outExt']
|
|
|
|
#costruisco messageBox
|
|
msgb = QMessageBox(parent=self, icon=QMessageBox.Warning, text=self.tr("Sto SPLITTANDO, attendi.."))
|
|
msgb.setWindowTitle(self.tr("Sto Splittando.."))
|
|
msgb.show()
|
|
|
|
@pyqtSlot()
|
|
def updateState(msg):
|
|
msgb.setText(msg)
|
|
# costruisco i thread
|
|
|
|
tDict={}
|
|
try:
|
|
for f in splconf['paths']['fileList']:
|
|
splconf['name']=f
|
|
tDict[f] = bananaSPLITTER(fileParams=copy.deepcopy(splconf), logger=self.log)
|
|
tDict[f].sendStatus.connect(updateState)
|
|
tDict[f].run()
|
|
#QThreadPool.globalInstance().start(tDict[f])
|
|
except Exception as e:
|
|
self.log.error(self.tr(f"Impossibile avviare lo splitter: {e}"))
|
|
|
|
msgb.setText(self.tr("FINITO!"))
|
|
pass
|
|
|
|
class bananaAdvOpt(PyQt5.QtWidgets.QWidget):
|
|
|
|
update = pyqtSignal()
|
|
|
|
def __init__(self, confloader=None, logger=None):
|
|
PyQt5.QtWidgets.QWidget.__init__(self)
|
|
self.advoptui = Ui_editconf()
|
|
self.advoptui.setupUi(self)
|
|
self.conf = confloader
|
|
self.log = logger
|
|
self.errmsg=None
|
|
if self.conf is not None:
|
|
self.advoptui.btn_ok.clicked.connect(self.accetta)
|
|
self.advoptui.btn_cancel.clicked.connect(self.rifiuta)
|
|
self.fillInterface()
|
|
pass
|
|
|
|
def fillInterface(self):
|
|
try:
|
|
self.advoptui.txt_confFile.setPlainText(json.dumps(self.conf.dump(),indent=2))
|
|
except:
|
|
self.log.critical(self.tr("AdvancedOptions: Configurazione non accettata"))
|
|
pass
|
|
|
|
def accetta(self):
|
|
self.errmsg = QMessageBox()
|
|
self.errmsg.setModal(True)
|
|
self.errmsg.setWindowTitle(self.tr("Avanzate Globali"))
|
|
icon = PyQt5.QtGui.QIcon()
|
|
icon.addPixmap(PyQt5.QtGui.QPixmap(":/icons/icons8-smartphone-ram-100.png"), PyQt5.QtGui.QIcon.Normal, PyQt5.QtGui.QIcon.Off)
|
|
self.errmsg.setWindowIcon(icon)
|
|
try:
|
|
self.conf.loads(self.advoptui.txt_confFile.toPlainText())
|
|
self.log.info(self.tr("Parametri inseriti validi, configurazione accettata"))
|
|
self.errmsg.setIcon(QMessageBox.Information)
|
|
self.errmsg.setText(self.tr("Parametri inseriti validi, configurazione accettata"))
|
|
self.errmsg.show()
|
|
self.update.emit()
|
|
self.hide()
|
|
except Exception as e:
|
|
self.log.error(self.tr(f"Errore nei parametri! {e}"))
|
|
self.errmsg.setIcon(QMessageBox.Critical)
|
|
self.errmsg.setText(self.tr(f"Errore nei parametri!\n{e}"))
|
|
self.errmsg.show()
|
|
pass
|
|
|
|
def rifiuta(self):
|
|
self.log.info(f"AdvancedOptions: Configurazione Rifiutata")
|
|
self.hide()
|
|
pass
|
|
|
|
class bananaSplitterInterface(PyQt5.QtWidgets.QWidget):
|
|
def __init__(self, confloader=None, logger=None):
|
|
PyQt5.QtWidgets.QWidget.__init__(self)
|
|
pass
|
|
|
|
class spexAbout(PyQt5.QtWidgets.QDialog):
|
|
def __init__(self, confloader=None, logger=None):
|
|
PyQt5.QtWidgets.QDialog.__init__(self)
|
|
self.abt = Ui_about()
|
|
self.abt.setupUi(self)
|
|
self.abt.lbl_info.setText(self.abt.lbl_info.text().replace('{ver}',confloader.getParam('version')))
|
|
self.show()
|
|
pass
|
|
#############################################################
|
|
####################### MAIN ################################
|
|
#############################################################
|
|
def except_hook(cls, exception, traceback):
|
|
sys.__excepthook__(cls, exception, traceback)
|
|
|
|
if __name__ == '__main__':
|
|
app = PyQt5.QtWidgets.QApplication(sys.argv)
|
|
sys.excepthook = except_hook
|
|
|
|
try:
|
|
LOGGER = fancyLogger(filepath=r"./conf/loggerconf.json",fileLog=False)
|
|
conf = bananaCONF(workdir=r"./conf", logger=LOGGER)
|
|
conf.open()
|
|
conf.use("defaults.json")
|
|
conf.use(conf.getParam('paths', 'lastUsed'))
|
|
|
|
iflan = conf.getParam('settings','uiLang')
|
|
trlist = [f":/tr/translations/guimain_{iflan}.qm",
|
|
f":/tr/translations/libconfload_{iflan}.qm",
|
|
f":/tr/translations/libsplit_{iflan}.qm",
|
|
f":/tr/translations/mainwindow_{iflan}.qm",
|
|
f":/tr/translations/avanzatetitolo3_{iflan}.qm",
|
|
f":/tr/translations/titolow_{iflan}.qm",
|
|
f":/tr/translations/selezout_{iflan}.qm",
|
|
f":/tr/translations/about_{iflan}.qm"]
|
|
qtrlist=[]
|
|
|
|
if iflan != 'it':
|
|
LOGGER.debug("Carico Traduzioni: ")
|
|
for tr in trlist:
|
|
qtr = QTranslator()
|
|
print(qtr.load(tr),f" {tr}")
|
|
app.installTranslator(qtr)
|
|
qtrlist.append(qtr)
|
|
|
|
except Exception as e:
|
|
print(f"Errore main: {e}")
|
|
sys.exit()
|
|
|
|
window = bananaMain(logger=LOGGER, confloader=conf)
|
|
window.show()
|
|
rv = app.exec()
|
|
print("ExitCode: {}".format(rv))
|
|
sys.exit(rv)
|
|
pass
|