From 8a3782e1db3c9cc905ed156a189016796e9c8d3f Mon Sep 17 00:00:00 2001 From: benny Date: Thu, 6 Jun 2024 18:54:03 +0300 Subject: [PATCH] now we can see the packages, and the properties of them --- html/main.html | 30 ++++++++-------- html/master.html | 2 +- main.go | 93 +++++++++++++++++++++++++++++++++++++++++++----- packages.go | 37 ++++++++++++++++--- 4 files changed, 132 insertions(+), 30 deletions(-) diff --git a/html/main.html b/html/main.html index 85b3bcf..40bc038 100644 --- a/html/main.html +++ b/html/main.html @@ -1,34 +1,32 @@ {{define "body"}} -
-

{{ .Header }}

-

{{ .Help }}

-

{{ .Explain }}

+

{{ .ElementsData.Header }}

+

{{ .ElementsData.Help }}

+

{{ .ElementsData.Explain }}

winget source add -n huji -t "Microsoft.Rest" https://winget.cc.huji.ac.il/api/
- {{end}} \ No newline at end of file diff --git a/html/master.html b/html/master.html index ab35bbb..4c76629 100644 --- a/html/master.html +++ b/html/master.html @@ -3,7 +3,7 @@ - {{ .Title }} + {{ .ElementsData.Title }} diff --git a/main.go b/main.go index c132a7b..9e7fb83 100644 --- a/main.go +++ b/main.go @@ -7,6 +7,7 @@ import ( "log" "net/http" "os" + "strings" "time" _ "modernc.org/sqlite" @@ -29,8 +30,10 @@ func simpRequestResp(res http.ResponseWriter, req *http.Request) { fmt.Fprint(res, "Hello, M'Lord", 153*4, " I'm here to serveè") } func getMsgFromDB(sqldb *sql.DB, id string, lang string) string { - query := fmt.Sprintf("SELECT %s FROM msgs WHERE content=$1", lang) - res := sqldb.QueryRow(query, id) + var lngs []string + lngs = append(lngs, lang) + query := generateSQL("msgs",lngs,[2]string{"content", id}) + res := sqldb.QueryRow(query) lng := "" dt := res.Scan(&lng) if dt != nil { @@ -38,21 +41,87 @@ func getMsgFromDB(sqldb *sql.DB, id string, lang string) string { } return lng } +func queryPacks(sqldb *sql.DB, element *elements) []packages{ + pkg_list:= getPkgIdFromDB(sqldb) + pkgs := make([]packages,0) + for _,p := range pkg_list{ + query:= generateSQL("packs_all",[]string{"*"}, [2]string{"id",p} ) + res, err := sqldb.Query(query) + defer res.Close() + err = res.Err() + if err != nil { + log.Panicln(err) + } + for res.Next(){ + npkg := packages{} + err:=res.Scan(&npkg.Id, &npkg.Name, &npkg.Version, &npkg.ExtraCommand, &npkg.Tag, &npkg.Warning) + if err != nil { + log.Fatalln(err) + } + npkg.Element = element + pkgs = append(pkgs, npkg) + } + } + return pkgs +} +func queryDatabase(sqldb *sql.DB, queryRow string) []string{ + + res:= sqldb.QueryRow(queryRow) + var values []string + err := res.Scan(&values) + if err != nil { + log.Println(err) + } + return values +} +func generateSQL(table string, columns []string, arg ...[2]string) string{ + cols:=strings.Join(columns, ",") + table="SELECT " + cols +" FROM " + table + if len(arg) > 0{ + table += " WHERE " + for i, a := range arg{ + table += a[0] + " like '" + a[1] + "'" + if(i+1 < len(arg)){ + table += " and " + } + } + } + return table +} func getPkgIdFromDB(sqldb *sql.DB) []string { query, err := sqldb.Query("SELECT id FROM packs_all") + defer query.Close() + err = query.Err() if err != nil { log.Println(err) } var pkgs []string - query.Scan(&pkgs) + var tmpstr string + for query.Next(){ + err = query.Scan(&tmpstr) + if err != nil { + log.Println(err) + } + pkgs = append(pkgs, tmpstr) + } + // query.Scan(&pkgs) if err != nil { log.Println(err) } return pkgs } -// func fullSearchDB(sqldb *sql.DB) []string { - -// } +func fullSearchDB(sqldb *sql.DB) []packages { + pkg_list:= getPkgIdFromDB(sqldb) + var pkgs []packages + for _,p :=range pkg_list{ + query:= generateSQL("packs_all",[]string{"*"}, [2]string{"id",p} ) + res:= queryDatabase(sqldb, query) + var pkg packages + pkg, _=ConvertStringsToPackage(res) + pkgs = append(pkgs, pkg) + } + return pkgs +} func index(sqldb *sql.DB) http.Handler { return http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) { b := elements{ @@ -65,11 +134,19 @@ func index(sqldb *sql.DB) http.Handler { Warning: getMsgFromDB(sqldb, "warning", "heb"), Explain: getMsgFromDB(sqldb, "explain", "heb"), } - templates, err := template.ParseFiles("html/master.html", "html/main.html") + data := struct { + ElementsData elements + PackagesData []packages + }{ + ElementsData: b, + PackagesData: queryPacks(sqldb, &b), + } + templates, err := template.ParseFiles("html/master.html", "html/main.html") + if err != nil { log.Println(err) } - err = templates.ExecuteTemplate(res, "master", &b) + err = templates.ExecuteTemplate(res, "master", data) if err != nil { log.Println(err) } diff --git a/packages.go b/packages.go index 91c2067..069953b 100644 --- a/packages.go +++ b/packages.go @@ -1,11 +1,38 @@ package main +import( + "fmt" + "strconv" +) + type packages struct{ - name string - version string - extra_command string - tag string - warning bool + Id string + Name string + Version string + ExtraCommand *string + Tag string + Warning bool + Element *elements +} +func ConvertStringsToPackage(strs []string) (packages, error) { + var pkg packages + if len(strs) != 6 { + return pkg, fmt.Errorf("input slice must have exactly 6 elements") + } + + warning, err := strconv.ParseBool(strs[5]) + if err != nil { + return pkg, fmt.Errorf("error parsing Warning value: %s", err) + } + + return packages{ + Id: strs[0], + Name: strs[1], + Version: strs[2], + ExtraCommand: &strs[3], + Tag: strs[4], + Warning: warning, + }, nil } type elements struct { Title string