now we can see the packages, and the properties of them

This commit is contained in:
2024-06-06 18:54:03 +03:00
parent a71d124066
commit 8a3782e1db
4 changed files with 132 additions and 30 deletions

View File

@@ -1,34 +1,32 @@
{{define "body"}} {{define "body"}}
<body>
<a href="/" class="lang"><img src="/heb" width="20px" height="20px"></a> <a href="/" class="lang"><img src="/heb" width="20px" height="20px"></a>
<div> <div>
<div class="header"> <div class="header">
<h3>{{ .Header }}</h3> <h3>{{ .ElementsData.Header }}</h3>
<p style="font-size: 12;">{{ .Help }}</p> <p style="font-size: 12;">{{ .ElementsData.Help }}</p>
<p>{{ .Explain }}</p> <p>{{ .ElementsData.Explain }}</p>
<div id="source" class="copyme" onclick="copyValue('source')">winget source add -n huji -t "Microsoft.Rest" <div id="source" class="copyme" onclick="copyValue('source')">winget source add -n huji -t "Microsoft.Rest"
https://winget.cc.huji.ac.il/api/</div> https://winget.cc.huji.ac.il/api/</div>
</div> </div>
<ul> <ul>
<% pkgs.forEach(function(row, i) { %> {{ range .PackagesData }}
<li id="<%= i %>"> <li id="{{ .Id}}">
<div id="program-<%= i %>" onclick="showAndHide('id-<%= i %>','<%= i %>')"> <div id="program-{{ .Id}}" onclick="showAndHide('id-{{ .Id}}','{{ .Id}}')">
Package Name: <strong> {{.Element.Packagename}}: <strong>
<%= row.package %> {{ .Name }}
</strong> </strong>
</div> </div>
<div id="version-<%= i %>" onclick="showAndHide('id-<%= i %>','<%= i %>')"> <div id="version-{{ .Id}}" onclick="showAndHide('id-{{ .Id}}','{{ .Id}}')">
Package Version: <%= row.version %> {{.Element.Packageversion}}: {{ .Version}}
</div> </div>
<div id="tag-<%= i %>" onclick="showAndHide('id-<%= i %>','<%= i %>')">Allowed use by <%= row.tag %> <div id="tag-{{ .Id}}" onclick="showAndHide('id-{{ .Id}}','{{ .Id}}')">{{.Element.Allow}} {{ .Tag}}
</div> </div>
<script>insertWarning("<%= row.warning %>","<%= i %>")</script> <script>insertWarning("{{.Warning}}","{{ .Id}}")</script>
<div class="copyme hiddencopy" id="id-<%= i %>" onclick="copyValue('id-<%= i %>')"><script>scriptPackage("<%= row.id %>", "<%= row.extra_commands %>", "<%= i %>")</script></div> <div class="copyme hiddencopy" id="id-{{ .Id}}" onclick="copyValue('id-{{ .Id}}')"><script>scriptPackage("{{.Id}}", "{{.ExtraCommand}}", "{{ .Id}}")</script></div>
</li> </li>
<% }); %> {{end}}
</ul> </ul>
</div> </div>
</body>
{{end}} {{end}}

View File

@@ -3,7 +3,7 @@
<html> <html>
<head> <head>
<title>{{ .Title }}</title> <title>{{ .ElementsData.Title }}</title>
<link href="/public/mod.css" rel="stylesheet" type="text/css"> <link href="/public/mod.css" rel="stylesheet" type="text/css">
<script src="/public/script.js"></script> <script src="/public/script.js"></script>
</head> </head>

91
main.go
View File

@@ -7,6 +7,7 @@ import (
"log" "log"
"net/http" "net/http"
"os" "os"
"strings"
"time" "time"
_ "modernc.org/sqlite" _ "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è") fmt.Fprint(res, "Hello, M'Lord", 153*4, " I'm here to serveè")
} }
func getMsgFromDB(sqldb *sql.DB, id string, lang string) string { func getMsgFromDB(sqldb *sql.DB, id string, lang string) string {
query := fmt.Sprintf("SELECT %s FROM msgs WHERE content=$1", lang) var lngs []string
res := sqldb.QueryRow(query, id) lngs = append(lngs, lang)
query := generateSQL("msgs",lngs,[2]string{"content", id})
res := sqldb.QueryRow(query)
lng := "" lng := ""
dt := res.Scan(&lng) dt := res.Scan(&lng)
if dt != nil { if dt != nil {
@@ -38,21 +41,87 @@ func getMsgFromDB(sqldb *sql.DB, id string, lang string) string {
} }
return lng 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 { func getPkgIdFromDB(sqldb *sql.DB) []string {
query, err := sqldb.Query("SELECT id FROM packs_all") query, err := sqldb.Query("SELECT id FROM packs_all")
defer query.Close()
err = query.Err()
if err != nil { if err != nil {
log.Println(err) log.Println(err)
} }
var pkgs []string 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 { if err != nil {
log.Println(err) log.Println(err)
} }
return pkgs 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 { func index(sqldb *sql.DB) http.Handler {
return http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) { return http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
b := elements{ b := elements{
@@ -65,11 +134,19 @@ func index(sqldb *sql.DB) http.Handler {
Warning: getMsgFromDB(sqldb, "warning", "heb"), Warning: getMsgFromDB(sqldb, "warning", "heb"),
Explain: getMsgFromDB(sqldb, "explain", "heb"), Explain: getMsgFromDB(sqldb, "explain", "heb"),
} }
data := struct {
ElementsData elements
PackagesData []packages
}{
ElementsData: b,
PackagesData: queryPacks(sqldb, &b),
}
templates, err := template.ParseFiles("html/master.html", "html/main.html") templates, err := template.ParseFiles("html/master.html", "html/main.html")
if err != nil { if err != nil {
log.Println(err) log.Println(err)
} }
err = templates.ExecuteTemplate(res, "master", &b) err = templates.ExecuteTemplate(res, "master", data)
if err != nil { if err != nil {
log.Println(err) log.Println(err)
} }

View File

@@ -1,11 +1,38 @@
package main package main
import(
"fmt"
"strconv"
)
type packages struct{ type packages struct{
name string Id string
version string Name string
extra_command string Version string
tag string ExtraCommand *string
warning bool 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 { type elements struct {
Title string Title string