瀏覽代碼

Almost done

Боровик Антон Викторович 4 年之前
父節點
當前提交
62997a34ea
共有 7 個文件被更改,包括 343 次插入235 次删除
  1. 10 0
      go.mod
  2. 16 0
      go.sum
  3. 277 235
      main.go
  4. 27 0
      models.go
  5. 13 0
      output.html
  6. 二進制
      main.exe
  7. 0 0
      Ù.png

+ 10 - 0
go.mod

@@ -0,0 +1,10 @@
+module printers
+
+go 1.16
+
+require (
+	github.com/boombuler/barcode v1.0.1
+	github.com/gorilla/mux v1.8.0
+	gorm.io/driver/sqlite v1.1.4
+	gorm.io/gorm v1.21.7
+)

+ 16 - 0
go.sum

@@ -0,0 +1,16 @@
+github.com/boombuler/barcode v1.0.1 h1:NDBbPmhS+EqABEs5Kg3n/5ZNjy73Pz7SIV+KCeqyXcs=
+github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
+github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
+github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
+github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
+github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
+github.com/jinzhu/now v1.1.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
+github.com/jinzhu/now v1.1.2 h1:eVKgfIdy9b6zbWBMgFpfDPoAMifwSZagU9HmEU6zgiI=
+github.com/jinzhu/now v1.1.2/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
+github.com/mattn/go-sqlite3 v1.14.5 h1:1IdxlwTNazvbKJQSxoJ5/9ECbEeaTTyeU7sEAZ5KKTQ=
+github.com/mattn/go-sqlite3 v1.14.5/go.mod h1:WVKg1VTActs4Qso6iwGbiFih2UIHo0ENGwNd0Lj+XmI=
+gorm.io/driver/sqlite v1.1.4 h1:PDzwYE+sI6De2+mxAneV9Xs11+ZyKV6oxD3wDGkaNvM=
+gorm.io/driver/sqlite v1.1.4/go.mod h1:mJCeTFr7+crvS+TRnWc5Z3UvwxUN1BGBLMrf5LA9DYw=
+gorm.io/gorm v1.20.7/go.mod h1:0HFTzE/SqkGTzK6TlDPPQbAYCluiVvhzoA1+aVyzenw=
+gorm.io/gorm v1.21.7 h1:MuY8oejVL5l3iT7PfE3z5I4J+KW/Nu2w/uTpLe3vV1Q=
+gorm.io/gorm v1.21.7/go.mod h1:F+OptMscr0P2F2qU97WT1WimdH9GaQPoDW7AYd5i2Y0=

+ 277 - 235
main.go

@@ -1,235 +1,277 @@
-package main
-// Golang - Сила!
-import(
-	"fmt"
-	"os"
-	"github.com/boombuler/barcode"
-	"github.com/boombuler/barcode/qr"
-	"image"
-	"image/png"
-	"log"
-	"net/http"
-	"strings"
-	"gorm.io/gorm"
-  	"gorm.io/driver/sqlite"
-  	"html/template"
-)
-
-type ViewData struct{
-	Title string
-	PrinterNames []string
-	CartridgeNames []string
-}
-
-type Printers struct{
-	ID uint `gorm:"type:integer"`
-	Name string `gorm:"type:text"`
-}
-
-type Cartridges struct{
-	ID uint `gorm:"type:integer"`
-	Name string `gorm:"type:text"`
-}
-
-type Cartridgeofprinter struct{
-	Cartridgeid uint `gorm:"type:integer"`
-	Printerid uint `gorm:"type:integer"`
-}
-
-func main(){
-	http.HandleFunc("/", PrinterList)
-	http.HandleFunc("/generate", GenerateQR)
-	http.HandleFunc("/addprinter", AddPrinter)
-	http.HandleFunc("/addcartridge", AddCartridge)
-	http.HandleFunc("/cartridgeOfPrinter", AddCartridgeOfPrinter)
-	http.HandleFunc("/compatible", FindCompatibleCartridges)
-	fmt.Println("Server is listening...")
-
-	http.ListenAndServe(":8888", nil)
-}
-
-func FindCompatibleCartridges(w http.ResponseWriter, r *http.Request){
-	db, _ := gorm.Open(sqlite.Open("printer.db"), &gorm.Config{})
-
-	var PrinterList []Printers
-	db.Find(&PrinterList)
-	var PrinterName []string
-	for _, pr := range PrinterList{
-		PrinterName = append(PrinterName, pr.Name)
-	}
-
-	var printer Printers
-	r.ParseForm()
-	selectedPrinter := strings.Join(r.Form["printer"], "")
-	fmt.Println("Selected: " + selectedPrinter)
-
-	if selectedPrinter != ""{
-		db.Where("Name = ?", selectedPrinter).First(&printer)
-		var cops []uint
-		db.Table("CartridgeOfPrinters").Where("PrinterID = ?", printer.ID).Select("CartridgeID").Find(&cops)
-
-		var cartridgeName []string
-
-		for _, cop := range cops{
-			var cart Cartridges
-			db.Where("ID = ?", cop).First(&cart)
-			cartridgeName = append(cartridgeName, cart.Name)
-		}
-		data := ViewData{
-		Title: "Совместимость картриджей",
-		PrinterNames: PrinterName,
-		CartridgeNames: cartridgeName,
-		}
-
-		w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s\"", selectedPrinter + ".png"))
-		var cartText = strings.Join(cartridgeName, "\n")
-		cartridgeQR(cartText, selectedPrinter)
-		http.ServeFile(w, r, selectedPrinter)
-
-		tmpl, _ := template.ParseFiles("compatible.html")
-	    tmpl.Execute(w, data)
-	    return
-	}
-
-	data := ViewData{
-		Title: "Совместимость картриджей",
-		PrinterNames: PrinterName,
-		}
-	
-	tmpl, _ := template.ParseFiles("compatible.html")
-	tmpl.Execute(w, data)
-
-	
-}
-
-func AddCartridgeOfPrinter(w http.ResponseWriter, r *http.Request){
-	db, _ := gorm.Open(sqlite.Open("printer.db"), &gorm.Config{})
-	r.ParseForm()
-	cartridgeName := strings.Join(r.Form["cartridges"], "")
-	printerName := strings.Join(r.Form["printers"], "")
-	// printerName := strings.Join(r.Form["printers"], "")
-	var cartridge Cartridges
-	db.Where("Name = ?", cartridgeName).First(&cartridge)
-	cartridgeID := cartridge.ID
-	var printer Printers
-	db.Where("Name = ?", printerName).First(&printer)
-	printerID := printer.ID
-	var cop Cartridgeofprinter
-	cop.Cartridgeid = cartridgeID
-	cop.Printerid = printerID
-	db.Create(&cop)
-	http.Redirect(w, r, "/", 302)
-}
-
-func AddCartridge(w http.ResponseWriter, r *http.Request){
-	db, _ := gorm.Open(sqlite.Open("printer.db"), &gorm.Config{})
-	r.ParseForm()
-	text := strings.Join(r.Form["cartridgeName"], "")
-	var newCartridge Cartridges
-	newCartridge.Name = text
-	db.Create(&newCartridge)
-	http.Redirect(w, r, "/", 302)
-}
-
-func AddPrinter(w http.ResponseWriter, r *http.Request){
-	db, _ := gorm.Open(sqlite.Open("printer.db"), &gorm.Config{})
-	r.ParseForm()
-	text := strings.Join(r.Form["printerName"], "")
-	var newPrinter Printers
-	newPrinter.Name = text
-	db.Create(&newPrinter)
-	http.Redirect(w, r, "/", 302)
-}
-
-func GenerateQR(w http.ResponseWriter, r *http.Request){
-	r.ParseForm()
-	text := strings.Join(r.Form["printer"], "")
-	w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s\"", text + ".png"))
-	generateFromText(text)
-	http.ServeFile(w, r, text)
-}
-
-func PrinterList(w http.ResponseWriter, r *http.Request){
-	db, _ := gorm.Open(sqlite.Open("printer.db"), &gorm.Config{})
-
-	var PrinterList []Printers
-	db.Find(&PrinterList)
-	var PrinterName []string
-	for _, pr := range PrinterList{
-		PrinterName = append(PrinterName, pr.Name)
-	}
-
-	var CartridgeList []Cartridges
-	db.Find(&CartridgeList)
-	var CartridgeName []string
-	for _, ca := range CartridgeList{
-		CartridgeName = append(CartridgeName, ca.Name)
-	}
-
-
-	data := ViewData{
-		Title: "Generate QR",
-		PrinterNames: PrinterName,
-		CartridgeNames: CartridgeName,
-	}
-
-	tmpl, _ := template.ParseFiles("generate.html")
-    tmpl.Execute(w, data)
-}
-
-func generateCompatibleCartridges(printer Printers){
-	db, _ := gorm.Open(sqlite.Open("printer.db"), &gorm.Config{})
-	var cops []Cartridgeofprinter
-	var cartridges []Cartridges
-	db.Where("Printerid = ?", printer.ID).Find(&cops)
-	for _, cop := range cops{
-		var cartridge Cartridges
-		fmt.Println(cop.Cartridgeid)
-		db.Where("ID = ?", cop.Cartridgeid).First(&cartridge)
-		cartridges = append(cartridges, cartridge)
-	}
-}
-
-func cartridgeQR(text string, filename string){
-	code, err := qr.Encode(text, qr.L, qr.Auto)
-	if err != nil {
-		fmt.Println("Something went wrong...")
-	}
-	if text != code.Content() {
-		log.Fatal("data differs")
-	}
-	code, err = barcode.Scale(code, 512, 512)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	writePng(filename, code)
-}
-
-func generateFromText(text string){
-	code, err := qr.Encode(text, qr.L, qr.Auto)
-	if err != nil {
-		fmt.Println("Something went wrong...")
-	}
-	if text != code.Content() {
-		log.Fatal("data differs")
-	}
-	code, err = barcode.Scale(code, 512, 512)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	writePng(text, code)
-}
-
-func writePng(filename string, img image.Image) {
-	file, err := os.Create(filename)
-	if err != nil {
-		log.Fatal(err)
-	}
-	err = png.Encode(file, img)
-	if err != nil {
-		log.Fatal(err)
-	}
-	file.Close()
-}
+package main
+
+import (
+	"fmt"
+	"github.com/boombuler/barcode"
+	"github.com/boombuler/barcode/qr"
+	"github.com/gorilla/mux"
+	"gorm.io/driver/sqlite"
+	"gorm.io/gorm"
+	"html/template"
+	"image"
+	"image/png"
+	"log"
+	"net/http"
+	"os"
+	"strings"
+)
+
+// type ViewData struct{
+// 	Title string
+// 	PrinterNames []string
+// 	CartridgeNames []string
+// }
+
+// type Printers struct{
+// 	ID uint `gorm:"type:integer"`
+// 	Name string `gorm:"type:text"`
+// }
+
+// type Cartridges struct{
+// 	ID uint `gorm:"type:integer"`
+// 	Name string `gorm:"type:text"`
+// }
+
+// type Cartridgeofprinter struct{
+// 	Cartridgeid uint `gorm:"type:integer"`
+// 	Printerid uint `gorm:"type:integer"`
+// }
+
+func main() {
+
+	r := mux.NewRouter()
+
+	r.HandleFunc("/", PrinterList)
+	r.HandleFunc("/generate", GenerateQR)
+	r.HandleFunc("/addprinter", AddPrinter)
+	r.HandleFunc("/addcartridge", AddCartridge)
+	r.HandleFunc("/cartridgeOfPrinter", AddCartridgeOfPrinter)
+	r.HandleFunc("/compatible", FindCompatibleCartridges)
+	r.HandleFunc("/printer/{printerName}", PrinterPage)
+	fmt.Println("Server is listening...")
+
+	http.Handle("/", r)
+	http.ListenAndServe(":8888", nil)
+}
+
+func PrinterPage(w http.ResponseWriter, r *http.Request) {
+	db, err := gorm.Open(sqlite.Open("printer.db"), &gorm.Config{})
+
+	if err != nil {
+		fmt.Println("Error during opening DB")
+	} else {
+		name := mux.Vars(r)["printerName"]
+		fmt.Println("Selected printer: " + name)
+		var printer Printers
+		db.Where("Name = ?", name).First(&printer)
+		if printer.ID > 0 {
+
+			var cartridges []string
+			var cot []Cartridgeofprinter
+			db.Where("PrinterID = ?", printer.ID).Find(&cot)
+
+			for _, v := range cot {
+				var cart Cartridges
+				db.Where("ID = ?", v.Cartridgeid).First(&cart)
+				cartridges = append(cartridges, cart.Name)
+			}
+
+			data := Output{
+				PrinterName: name,
+				Cartridges:  cartridges,
+			}
+
+			tmpl, _ := template.ParseFiles("output.html")
+			tmpl.Execute(w, data)
+			// fmt.Fprintf(w, "Выбранный принтер: %v\n", name)
+			// fmt.Fprintf(w, "Совместимые картриджи (" + string(len(cartridges)) + ")\n")
+			// for _, cartridge := range cartridges{
+			// 	fmt.Fprintf(w, cartridge)
+			// }
+		} else {
+			http.Redirect(w, r, "https://www.youtube.com/watch?v=dQw4w9WgXcQ", 301)
+		}
+	}
+
+	// w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s\"", name + ".png"))
+	// var cartText = strings.Join(cartridgeName, "\n")
+	// cartridgeQR(cartText, name)
+	// http.ServeFile(w, r, name)
+}
+
+func FindCompatibleCartridges(w http.ResponseWriter, r *http.Request) {
+	db, _ := gorm.Open(sqlite.Open("printer.db"), &gorm.Config{})
+
+	var PrinterList []Printers
+	db.Find(&PrinterList)
+	var PrinterName []string
+	for _, pr := range PrinterList {
+		PrinterName = append(PrinterName, pr.Name)
+	}
+
+	var printer Printers
+	r.ParseForm()
+	selectedPrinter := strings.Join(r.Form["printer"], "")
+	fmt.Println("Selected: " + selectedPrinter)
+
+	if selectedPrinter != "" {
+		db.Where("Name = ?", selectedPrinter).First(&printer)
+		var cops []uint
+		db.Table("CartridgeOfPrinters").Where("PrinterID = ?", printer.ID).Select("CartridgeID").Find(&cops)
+
+		var cartridgeName []string
+
+		for _, cop := range cops {
+			var cart Cartridges
+			db.Where("ID = ?", cop).First(&cart)
+			cartridgeName = append(cartridgeName, cart.Name)
+		}
+		// data := ViewData{
+		// Title: "Совместимость картриджей",
+		// PrinterNames: PrinterName,
+		// CartridgeNames: cartridgeName,
+		// }
+
+		http.Redirect(w, r, "/printer/"+selectedPrinter, 301)
+		return
+	}
+
+	data := ViewData{
+		Title:        "Совместимость картриджей",
+		PrinterNames: PrinterName,
+	}
+
+	tmpl, _ := template.ParseFiles("compatible.html")
+	tmpl.Execute(w, data)
+}
+
+func AddCartridgeOfPrinter(w http.ResponseWriter, r *http.Request) {
+	db, _ := gorm.Open(sqlite.Open("printer.db"), &gorm.Config{})
+	r.ParseForm()
+	cartridgeName := strings.Join(r.Form["cartridges"], "")
+	printerName := strings.Join(r.Form["printers"], "")
+	// printerName := strings.Join(r.Form["printers"], "")
+	var cartridge Cartridges
+	db.Where("Name = ?", cartridgeName).First(&cartridge)
+	cartridgeID := cartridge.ID
+	var printer Printers
+	db.Where("Name = ?", printerName).First(&printer)
+	printerID := printer.ID
+	var cop Cartridgeofprinter
+	cop.Cartridgeid = cartridgeID
+	cop.Printerid = printerID
+	db.Create(&cop)
+	http.Redirect(w, r, "/", 302)
+}
+
+func AddCartridge(w http.ResponseWriter, r *http.Request) {
+	db, _ := gorm.Open(sqlite.Open("printer.db"), &gorm.Config{})
+	r.ParseForm()
+	text := strings.Join(r.Form["cartridgeName"], "")
+	var newCartridge Cartridges
+	newCartridge.Name = text
+	db.Create(&newCartridge)
+	http.Redirect(w, r, "/", 302)
+}
+
+func AddPrinter(w http.ResponseWriter, r *http.Request) {
+	db, _ := gorm.Open(sqlite.Open("printer.db"), &gorm.Config{})
+	r.ParseForm()
+	text := strings.Join(r.Form["printerName"], "")
+	var newPrinter Printers
+	newPrinter.Name = text
+	db.Create(&newPrinter)
+	http.Redirect(w, r, "/", 302)
+}
+
+func GenerateQR(w http.ResponseWriter, r *http.Request) {
+	r.ParseForm()
+	text := strings.Join(r.Form["printer"], "")
+	w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s\"", text+".png"))
+	generateFromText(text)
+	http.ServeFile(w, r, text)
+}
+
+func PrinterList(w http.ResponseWriter, r *http.Request) {
+	db, _ := gorm.Open(sqlite.Open("printer.db"), &gorm.Config{})
+
+	var PrinterList []Printers
+	db.Find(&PrinterList)
+	var PrinterName []string
+	for _, pr := range PrinterList {
+		PrinterName = append(PrinterName, pr.Name)
+	}
+
+	var CartridgeList []Cartridges
+	db.Find(&CartridgeList)
+	var CartridgeName []string
+	for _, ca := range CartridgeList {
+		CartridgeName = append(CartridgeName, ca.Name)
+	}
+
+	data := ViewData{
+		Title:          "Generate QR",
+		PrinterNames:   PrinterName,
+		CartridgeNames: CartridgeName,
+	}
+
+	tmpl, _ := template.ParseFiles("generate.html")
+	tmpl.Execute(w, data)
+}
+
+func generateCompatibleCartridges(printer Printers) {
+	db, _ := gorm.Open(sqlite.Open("printer.db"), &gorm.Config{})
+	var cops []Cartridgeofprinter
+	var cartridges []Cartridges
+	db.Where("Printerid = ?", printer.ID).Find(&cops)
+	for _, cop := range cops {
+		var cartridge Cartridges
+		fmt.Println(cop.Cartridgeid)
+		db.Where("ID = ?", cop.Cartridgeid).First(&cartridge)
+		cartridges = append(cartridges, cartridge)
+	}
+}
+
+func cartridgeQR(text string, filename string) {
+	code, err := qr.Encode(text, qr.L, qr.Auto)
+	if err != nil {
+		fmt.Println("Something went wrong...")
+	}
+	if text != code.Content() {
+		log.Fatal("data differs")
+	}
+	code, err = barcode.Scale(code, 512, 512)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	writePng(filename, code)
+}
+
+func generateFromText(text string) {
+	code, err := qr.Encode(text, qr.L, qr.Auto)
+	if err != nil {
+		fmt.Println("Something went wrong...")
+	}
+	if text != code.Content() {
+		log.Fatal("data differs")
+	}
+	code, err = barcode.Scale(code, 512, 512)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	writePng(text, code)
+}
+
+func writePng(filename string, img image.Image) {
+	file, err := os.Create(filename)
+	if err != nil {
+		log.Fatal(err)
+	}
+	err = png.Encode(file, img)
+	if err != nil {
+		log.Fatal(err)
+	}
+	file.Close()
+}

+ 27 - 0
models.go

@@ -0,0 +1,27 @@
+package main
+
+type ViewData struct {
+	Title          string
+	PrinterNames   []string
+	CartridgeNames []string
+}
+
+type Output struct {
+	PrinterName string
+	Cartridges  []string
+}
+
+type Printers struct {
+	ID   uint   `gorm:"type:integer"`
+	Name string `gorm:"type:text"`
+}
+
+type Cartridges struct {
+	ID   uint   `gorm:"type:integer"`
+	Name string `gorm:"type:text"`
+}
+
+type Cartridgeofprinter struct {
+	Cartridgeid uint `gorm:"type:integer"`
+	Printerid   uint `gorm:"type:integer"`
+}

+ 13 - 0
output.html

@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html>
+<head>
+	<title>{{ .PrinterName }}</title>
+</head>
+<body>
+	<p>Выбранный принтер: {{ .PrinterName }}</p>
+	<p>Совместимые картриджи:</p>
+	<ul>
+		{{ range .Cartridges }}
+	</ul>
+</body>
+</html>

二進制
main.exe


.png → Ù.png