github.com/benoitkugler/goacve@v0.0.0-20201217100549-151ce6e55dc8/client/GUI/messages/stream.go (about)

     1  package messages
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/benoitkugler/goACVE/client/GUI/basic"
     7  	"github.com/benoitkugler/goACVE/client/controllers"
     8  	"github.com/therecipe/qt/widgets"
     9  )
    10  
    11  type Monitor struct {
    12  	*widgets.QDialog
    13  
    14  	progressBar *widgets.QProgressBar
    15  	preview     *widgets.QLabel
    16  }
    17  
    18  func NewMonitor(nbTasks int) Monitor {
    19  	m := Monitor{QDialog: basic.Dialog("Envoi des messages")}
    20  
    21  	m.progressBar = widgets.NewQProgressBar(nil)
    22  	m.progressBar.SetFormat("-")
    23  	m.progressBar.SetMinimum(0)
    24  	m.progressBar.SetValue(0)
    25  
    26  	m.ConnectReject(func() {}) // non fermable
    27  
    28  	m.progressBar.SetFormat("Mail %v / %m")
    29  	m.progressBar.SetMaximum(nbTasks)
    30  	m.preview = basic.Label("")
    31  	m.preview.SetText("Lancement des envois...")
    32  
    33  	m.Layout().AddWidget(m.preview)
    34  	m.Layout().AddWidget(m.progressBar)
    35  	m.SetModal(true)
    36  	m.Show()
    37  
    38  	return m
    39  }
    40  
    41  func (m *Monitor) OnSuccess(index int) {
    42  	m.progressBar.SetValue(index + 1)
    43  	m.preview.SetText(fmt.Sprintf("Message %d bien envoyé", index+1))
    44  }
    45  func (m *Monitor) OnError(index int, err string) {
    46  	m.progressBar.SetValue(index + 1)
    47  	m.preview.SetText(err)
    48  }
    49  
    50  func (m *Monitor) ShowBilan(facErrors []controllers.DossierError, err error) {
    51  	m.preview.SetText("Envois terminés.")
    52  	m.DisconnectReject() // fermable a nouveau
    53  
    54  	if err != nil {
    55  		m.Reject()
    56  		basic.ShowError(err)
    57  		return
    58  	}
    59  
    60  	m.Accept()
    61  
    62  	msg := "L'envoi des messages a bien été effectué."
    63  	if len(facErrors) > 0 {
    64  		msg = "L'envoi pour les dossiers suivants a échoué : <br/> <table>"
    65  		for _, fac := range facErrors {
    66  			msg += fmt.Sprintf("<tr><td>%s</td><td>%s</td></tr>", fac.Fac, fac.Err)
    67  		}
    68  		msg += "</table>"
    69  	}
    70  	info := basic.Dialog("Bilan des envois")
    71  	info.Layout().AddWidget(basic.Label(msg))
    72  	info.Exec()
    73  }