can now display multiple vehicles
which have the same number button which requests check now is disabled when the data is being fetched minor text formatting changes and small UI changes new icon
This commit is contained in:
parent
9a38ef2387
commit
b38cb92788
4 changed files with 64 additions and 69 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -1,2 +0,0 @@
|
|||
fyne_metadata_init.go
|
||||
ztm_vehicles_app.apk
|
BIN
icon.png
Normal file
BIN
icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 766 KiB |
BIN
yui.png
BIN
yui.png
Binary file not shown.
Before Width: | Height: | Size: 942 KiB |
|
@ -2,8 +2,7 @@ package main
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"fyne.io/fyne/v2/app"
|
||||
"fyne.io/fyne/v2/container"
|
||||
|
@ -11,42 +10,10 @@ import (
|
|||
"github.com/gocolly/colly/v2"
|
||||
|
||||
"fyne.io/fyne/v2"
|
||||
"fyne.io/fyne/v2/driver/mobile"
|
||||
|
||||
"fyne.io/fyne/v2/layout"
|
||||
)
|
||||
|
||||
type numericalEntry struct {
|
||||
widget.Entry
|
||||
}
|
||||
|
||||
func newNumericalEntry() *numericalEntry {
|
||||
entry := &numericalEntry{}
|
||||
entry.ExtendBaseWidget(entry)
|
||||
return entry
|
||||
}
|
||||
|
||||
func (e *numericalEntry) TypedRune(r rune) {
|
||||
if (r >= '0' && r <= '9') || r == '.' || r == ',' {
|
||||
e.Entry.TypedRune(r)
|
||||
}
|
||||
}
|
||||
|
||||
func (e *numericalEntry) TypedShortcut(shortcut fyne.Shortcut) {
|
||||
paste, ok := shortcut.(*fyne.ShortcutPaste)
|
||||
if !ok {
|
||||
e.Entry.TypedShortcut(shortcut)
|
||||
return
|
||||
}
|
||||
|
||||
content := paste.Clipboard.Content()
|
||||
if _, err := strconv.ParseFloat(content, 64); err == nil {
|
||||
e.Entry.TypedShortcut(shortcut)
|
||||
}
|
||||
}
|
||||
|
||||
func (e *numericalEntry) Keyboard() mobile.KeyboardType {
|
||||
return mobile.NumberKeyboard
|
||||
}
|
||||
|
||||
type vehicle struct {
|
||||
producer string
|
||||
model string
|
||||
|
@ -60,21 +27,39 @@ type vehicle struct {
|
|||
equipment string
|
||||
}
|
||||
|
||||
func getVehicleByNum(vehicleNum string) string {
|
||||
func vehicleToString(inputVehicle *vehicle) string {
|
||||
registrationPlate := ""
|
||||
if len(inputVehicle.vehicle_registration_plate) > 0 {
|
||||
registrationPlate = fmt.Sprintf(`,o rejestracji %s`, inputVehicle.vehicle_registration_plate)
|
||||
}
|
||||
output_string := fmt.Sprintf(
|
||||
"%s o numerze %s,"+"%s %s,"+"z roku %s,"+"w posiadaniu %s,"+"z zajezdni %s%s",
|
||||
inputVehicle.traction_type,
|
||||
inputVehicle.vehicle_number,
|
||||
inputVehicle.producer,
|
||||
inputVehicle.model,
|
||||
inputVehicle.production_year,
|
||||
inputVehicle.operator,
|
||||
inputVehicle.garage,
|
||||
registrationPlate)
|
||||
return strings.Replace(output_string, ",", ",\n", -1)
|
||||
}
|
||||
|
||||
func getVehiclesByNum(vehicleNum string) string {
|
||||
searchURL := fmt.Sprintf("https://www.ztm.waw.pl/baza-danych-pojazdow/?ztm_traction=&ztm_make=&ztm_model=&ztm_year=&ztm_registration=&ztm_vehicle_number=%s&ztm_carrier=&ztm_depot=", vehicleNum)
|
||||
vehicleURL := ""
|
||||
var vehicleURLs []string
|
||||
|
||||
c2 := colly.NewCollector(
|
||||
// Visit only domains:
|
||||
colly.AllowedDomains("www.ztm.waw.pl"),
|
||||
)
|
||||
c2.OnHTML(".grid-row-active", func(e *colly.HTMLElement) {
|
||||
text := e.Attr("href")
|
||||
vehicleURL = text
|
||||
vehicleURLs = append(vehicleURLs, text)
|
||||
})
|
||||
c2.Visit(searchURL)
|
||||
if vehicleURL == "" {
|
||||
return ""
|
||||
} else {
|
||||
output_string := ""
|
||||
for _, vehicleURL := range vehicleURLs {
|
||||
var retrievedData [10]string
|
||||
// Instantiate default collector
|
||||
c := colly.NewCollector(
|
||||
|
@ -100,46 +85,58 @@ func getVehicleByNum(vehicleNum string) string {
|
|||
ticket_machine: retrievedData[8],
|
||||
equipment: retrievedData[9],
|
||||
}
|
||||
|
||||
output_string := fmt.Sprintf(
|
||||
`%s %s
|
||||
z roku %s,
|
||||
w posiadaniu %s,
|
||||
z zajezdni %s,
|
||||
o rejestracji %s`, retrievedVehicle.producer, retrievedVehicle.model, retrievedVehicle.production_year, retrievedVehicle.operator, retrievedVehicle.garage, retrievedVehicle.vehicle_registration_plate)
|
||||
return output_string
|
||||
output_string += vehicleToString(&retrievedVehicle)
|
||||
output_string += "\n"
|
||||
output_string += "\n"
|
||||
}
|
||||
|
||||
return output_string
|
||||
}
|
||||
|
||||
func main() {
|
||||
a := app.New()
|
||||
w := a.NewWindow("Hello")
|
||||
w := a.NewWindow("ZTM vehicles")
|
||||
|
||||
entryLabel := widget.NewLabel("Podaj numer taborowy pojazdu:")
|
||||
entry := widget.NewEntry()
|
||||
output := widget.NewLabel("")
|
||||
entry := newNumericalEntry()
|
||||
form := &widget.Form{
|
||||
Items: []*widget.FormItem{ // we can specify items in the constructor
|
||||
{Text: "Podaj numer taborowy pojazdu:", Widget: entry}},
|
||||
}
|
||||
form.OnSubmit = func() {
|
||||
output_data := getVehicleByNum(entry.Text)
|
||||
if output_data != "" {
|
||||
output.Text = output_data
|
||||
} else {
|
||||
output.Text = "Nie znaleziono pojazdu o podanym numerze taborowym w bazie pojazdów WTP"
|
||||
}
|
||||
output.Wrapping = fyne.TextWrapWord
|
||||
|
||||
//outputContainer := container.NewVScroll(output)
|
||||
//I create button earlier in order to reference it later inside function of it so I can easily disable it for the time data is fetching. There is probably better way to do it but I could't find it so
|
||||
executeButton := widget.NewButton("Sprawdź numer", func() {
|
||||
output.Refresh()
|
||||
}
|
||||
})
|
||||
executeButton = widget.NewButton("Sprawdź numer", func() {
|
||||
executeButton.Disable()
|
||||
executeButton.SetText("Wczytywanie")
|
||||
if len(strings.TrimSpace(entry.Text)) != 0 {
|
||||
output_data := getVehiclesByNum(entry.Text)
|
||||
if output_data != "" {
|
||||
output.Text = output_data
|
||||
} else {
|
||||
output.Text = "Nie znaleziono pojazdu o podanym numerze taborowym w bazie pojazdów WTP"
|
||||
}
|
||||
} else {
|
||||
output.Text = "Nie wprowadzono prawidłowego numeru"
|
||||
}
|
||||
|
||||
output.Refresh()
|
||||
executeButton.Enable()
|
||||
executeButton.SetText("Sprawdź numer")
|
||||
})
|
||||
executeButton.Importance = widget.HighImportance
|
||||
|
||||
clearButton := widget.NewButton("Wyczyść", func() {
|
||||
entry.Text = ""
|
||||
output.Text = ""
|
||||
output.Refresh()
|
||||
entry.Refresh()
|
||||
})
|
||||
buttons := container.New(layout.NewGridLayout(2), clearButton, executeButton)
|
||||
inputs := container.New(layout.NewGridLayout(1), entryLabel, entry, buttons)
|
||||
|
||||
w.SetContent(container.NewVBox(
|
||||
form,
|
||||
clearButton,
|
||||
inputs,
|
||||
output,
|
||||
))
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue