now we can see the packages, and the properties of them
This commit is contained in:
@@ -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}}
|
@@ -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
91
main.go
@@ -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)
|
||||||
}
|
}
|
||||||
|
37
packages.go
37
packages.go
@@ -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
|
||||||
|
Reference in New Issue
Block a user