added hebrew, statistics
This commit is contained in:
@@ -3,11 +3,12 @@
|
||||
<html>
|
||||
|
||||
<head>
|
||||
{{if eq .Lang "heb"}}<link href="/public/hebrew.css" rel="stylesheet" type="text/css">{{end}}
|
||||
<title>{{ .ElementsData.Title }}</title>
|
||||
<link href="/public/mod.css" rel="stylesheet" type="text/css">
|
||||
<script src="/public/script.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<body {{if eq .BodyClass "m"}} class="m"{{end}}>
|
||||
{{template "body" .}}
|
||||
</body>
|
||||
</html>
|
||||
|
49
html/statsitics.html
Normal file
49
html/statsitics.html
Normal file
@@ -0,0 +1,49 @@
|
||||
{{define "body"}}
|
||||
|
||||
<div class="container">
|
||||
|
||||
<div class="column">
|
||||
|
||||
<h1>Download Statistics</h1>
|
||||
<table>
|
||||
<tr>
|
||||
<th>Program</th>
|
||||
<th>Version</th>
|
||||
<th>Download Count</th>
|
||||
</tr>
|
||||
{{range .VersionStats}}
|
||||
<tr>
|
||||
<td>
|
||||
{{.ID}}
|
||||
</td>
|
||||
<td>
|
||||
{{.Version}}
|
||||
</td>
|
||||
<td>
|
||||
{{.Counter}}
|
||||
</td>
|
||||
</tr>
|
||||
{{end}}
|
||||
</table>
|
||||
</div>
|
||||
<div class="column" id="totalus">
|
||||
<h1>Total Download Statistics</h1>
|
||||
<table>
|
||||
<tr>
|
||||
<th>Package</th>
|
||||
<th>Search Count</th>
|
||||
</tr>
|
||||
{{range .TotalStats}}
|
||||
<tr>
|
||||
<td>
|
||||
{{.ID}}
|
||||
</td>
|
||||
<td>
|
||||
{{.Counter}}
|
||||
</td>
|
||||
</tr>
|
||||
{{end}}
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
{{end}}
|
47
html/up.html
47
html/up.html
@@ -1,13 +1,37 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>File Upload</title>
|
||||
<link href="mod.css" rel="stylesheet" type="text/css">
|
||||
<script src="script.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
{{define "body"}}
|
||||
|
||||
<div class="form-container">
|
||||
<form>
|
||||
<div class="form-group">
|
||||
<label for="PackageIdentifier">PackageIdentifier</label>
|
||||
<input type="text" id="PackageIdentifier" name="PackageIdentifier" value="<%= frm.identifier %>">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="PackageVersion">PackageVersion</label>
|
||||
<input type="text" id="PackageVersion" name="PackageVersion" value="<%= frm.version %>">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="InstallerType">InstallerType</label>
|
||||
<input type="text" id="InstallerType" name="InstallerType" value="<%= frm.type %>">
|
||||
</div>
|
||||
<fieldset>
|
||||
<legend>Installers</legend>
|
||||
<div class="form-group">
|
||||
<label for="InstallerUrl">InstallerUrl</label>
|
||||
<input type="url" id="InstallerUrl" name="InstallerUrl" value="<%= frm.url %>">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="InstallerSha256">InstallerSha256</label>
|
||||
<input type="text" id="InstallerSha256" name="InstallerSha256" value="<%= frm.checksum %>">
|
||||
</div>
|
||||
</fieldset>
|
||||
<div class="form-group">
|
||||
<label for="Dependencies">Dependencies</label>
|
||||
<input type="text" id="Dependencies" name="Dependencies">
|
||||
</div>
|
||||
<input type="submit" value="Submit">
|
||||
</form>
|
||||
</div>
|
||||
<!-- <div> -->
|
||||
|
||||
<form action="/upload" method="post" enctype="multipart/form-data">
|
||||
@@ -29,5 +53,4 @@
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
{{end}}
|
139
main.go
139
main.go
@@ -32,7 +32,7 @@ func simpRequestResp(res http.ResponseWriter, req *http.Request) {
|
||||
func getMsgFromDB(sqldb *sql.DB, id string, lang string) string {
|
||||
var lngs []string
|
||||
lngs = append(lngs, lang)
|
||||
query := generateSQL("msgs",lngs,[2]string{"content", id})
|
||||
query := generateSQL("msgs", lngs, [2]string{"content", id})
|
||||
res := sqldb.QueryRow(query)
|
||||
lng := ""
|
||||
dt := res.Scan(&lng)
|
||||
@@ -41,20 +41,20 @@ 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} )
|
||||
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(){
|
||||
for res.Next() {
|
||||
npkg := packages{}
|
||||
err:=res.Scan(&npkg.Id, &npkg.Name, &npkg.Version, &npkg.ExtraCommand, &npkg.Tag, &npkg.Warning)
|
||||
err := res.Scan(&npkg.Id, &npkg.Name, &npkg.Version, &npkg.ExtraCommand, &npkg.Tag, &npkg.Warning)
|
||||
if err != nil {
|
||||
log.Fatalln(err)
|
||||
}
|
||||
@@ -64,9 +64,9 @@ func queryPacks(sqldb *sql.DB, element *elements) []packages{
|
||||
}
|
||||
return pkgs
|
||||
}
|
||||
func queryDatabase(sqldb *sql.DB, queryRow string) []string{
|
||||
|
||||
res:= sqldb.QueryRow(queryRow)
|
||||
func queryDatabase(sqldb *sql.DB, queryRow string) []string {
|
||||
|
||||
res := sqldb.QueryRow(queryRow)
|
||||
var values []string
|
||||
err := res.Scan(&values)
|
||||
if err != nil {
|
||||
@@ -74,19 +74,74 @@ func queryDatabase(sqldb *sql.DB, queryRow string) []string{
|
||||
}
|
||||
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{
|
||||
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{
|
||||
for i, a := range arg {
|
||||
table += a[0] + " like '" + a[1] + "'"
|
||||
if(i+1 < len(arg)){
|
||||
if i+1 < len(arg) {
|
||||
table += " and "
|
||||
}
|
||||
}
|
||||
}
|
||||
return table
|
||||
return table
|
||||
}
|
||||
func searchDownloads(sqldb *sql.DB, table string, columns ...string) []DownloadElements {
|
||||
query := generateSQL(table, columns)
|
||||
runquery, err := sqldb.Query(query)
|
||||
defer runquery.Close()
|
||||
err = runquery.Err()
|
||||
if err != nil {
|
||||
log.Fatalln(err)
|
||||
}
|
||||
var elems []DownloadElements
|
||||
var e DownloadElements
|
||||
for runquery.Next() {
|
||||
if len(columns) > 2 {
|
||||
err = runquery.Scan(&e.ID, &e.Version, &e.Counter)
|
||||
} else {
|
||||
err = runquery.Scan(&e.ID, &e.Counter)
|
||||
}
|
||||
elems = append(elems, e)
|
||||
}
|
||||
return elems
|
||||
}
|
||||
func stats(sqldb *sql.DB, lang string) http.Handler {
|
||||
return http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
|
||||
Counter := struct{
|
||||
ElementsData elements
|
||||
VersionStats []DownloadElements
|
||||
TotalStats []DownloadElements
|
||||
BodyClass string
|
||||
Lang string
|
||||
}{
|
||||
ElementsData: elements{
|
||||
Title: getMsgFromDB(sqldb, "title", lang),
|
||||
Header: getMsgFromDB(sqldb, "header", lang),
|
||||
Help: getMsgFromDB(sqldb, "help", lang),
|
||||
Packagename: getMsgFromDB(sqldb, "packagename", lang),
|
||||
Packageversion: getMsgFromDB(sqldb, "packageversion", lang),
|
||||
Allow: getMsgFromDB(sqldb, "allow", lang),
|
||||
Warning: getMsgFromDB(sqldb, "warning", lang),
|
||||
Explain: getMsgFromDB(sqldb, "explain", lang),
|
||||
},
|
||||
BodyClass: "m",
|
||||
VersionStats: searchDownloads(sqldb, "counterd", "program", "version","download_count"),
|
||||
TotalStats: searchDownloads(sqldb, "count_all", "program","download_count"),
|
||||
Lang: lang,
|
||||
}
|
||||
templates, err := template.ParseFiles("html/master.html", "html/statsitics.html")
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
err = templates.ExecuteTemplate(res, "master", Counter)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
res.WriteHeader(http.StatusOK)
|
||||
})
|
||||
}
|
||||
func getPkgIdFromDB(sqldb *sql.DB) []string {
|
||||
query, err := sqldb.Query("SELECT id FROM packs_all")
|
||||
@@ -97,7 +152,7 @@ func getPkgIdFromDB(sqldb *sql.DB) []string {
|
||||
}
|
||||
var pkgs []string
|
||||
var tmpstr string
|
||||
for query.Next(){
|
||||
for query.Next() {
|
||||
err = query.Scan(&tmpstr)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
@@ -110,39 +165,41 @@ func getPkgIdFromDB(sqldb *sql.DB) []string {
|
||||
}
|
||||
return pkgs
|
||||
}
|
||||
func fullSearchDB(sqldb *sql.DB) []packages {
|
||||
pkg_list:= getPkgIdFromDB(sqldb)
|
||||
func fullSearchPackagesDB(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)
|
||||
for _, p := range pkg_list {
|
||||
query := generateSQL("packs_all", []string{"*"}, [2]string{"id", p})
|
||||
res := queryDatabase(sqldb, query)
|
||||
var pkg packages
|
||||
pkg, _=ConvertStringsToPackage(res)
|
||||
pkg, _ = ConvertStringsToPackage(res)
|
||||
pkgs = append(pkgs, pkg)
|
||||
}
|
||||
return pkgs
|
||||
}
|
||||
func index(sqldb *sql.DB) http.Handler {
|
||||
func index(sqldb *sql.DB, lang string) http.Handler {
|
||||
return http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
|
||||
b := elements{
|
||||
Title: getMsgFromDB(sqldb, "title", "heb"),
|
||||
Header: getMsgFromDB(sqldb, "header", "heb"),
|
||||
Help: getMsgFromDB(sqldb, "help", "heb"),
|
||||
Packagename: getMsgFromDB(sqldb, "packagename", "heb"),
|
||||
Packageversion: getMsgFromDB(sqldb, "packageversion", "heb"),
|
||||
Allow: getMsgFromDB(sqldb, "allow", "heb"),
|
||||
Warning: getMsgFromDB(sqldb, "warning", "heb"),
|
||||
Explain: getMsgFromDB(sqldb, "explain", "heb"),
|
||||
pageDataFromDatabase := elements{
|
||||
Title: getMsgFromDB(sqldb, "title", lang),
|
||||
Header: getMsgFromDB(sqldb, "header", lang),
|
||||
Help: getMsgFromDB(sqldb, "help", lang),
|
||||
Packagename: getMsgFromDB(sqldb, "packagename", lang),
|
||||
Packageversion: getMsgFromDB(sqldb, "packageversion", lang),
|
||||
Allow: getMsgFromDB(sqldb, "allow", lang),
|
||||
Warning: getMsgFromDB(sqldb, "warning", lang),
|
||||
Explain: getMsgFromDB(sqldb, "explain", lang),
|
||||
}
|
||||
data := struct {
|
||||
ElementsData elements
|
||||
PackagesData []packages
|
||||
Lang string
|
||||
}{
|
||||
ElementsData: b,
|
||||
PackagesData: queryPacks(sqldb, &b),
|
||||
ElementsData: pageDataFromDatabase,
|
||||
PackagesData: queryPacks(sqldb, &pageDataFromDatabase),
|
||||
Lang: lang,
|
||||
}
|
||||
templates, err := template.ParseFiles("html/master.html", "html/main.html")
|
||||
|
||||
templates, err := template.ParseFiles("html/master.html", "html/main.html")
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
@@ -168,7 +225,9 @@ func main() {
|
||||
db, err := sql.Open("sqlite", "file:progs.db")
|
||||
mux := http.NewServeMux()
|
||||
mux.Handle("/public/", public())
|
||||
mux.Handle("/", index(db))
|
||||
mux.Handle("/", index(db, "heb"))
|
||||
mux.Handle("/en", index(db, "eng"))
|
||||
mux.Handle("/stats", stats(db,"eng"))
|
||||
addr := fmt.Sprintf(":%s", "12312")
|
||||
server := http.Server{
|
||||
Addr: addr,
|
||||
|
@@ -43,4 +43,9 @@ type elements struct {
|
||||
Allow string
|
||||
Warning string
|
||||
Explain string
|
||||
}
|
||||
type DownloadElements struct {
|
||||
ID string
|
||||
Version *string
|
||||
Counter int
|
||||
}
|
3
public/hebrew.css
Normal file
3
public/hebrew.css
Normal file
@@ -0,0 +1,3 @@
|
||||
body{
|
||||
direction: rtl;
|
||||
}
|
@@ -91,16 +91,17 @@ function downloadValue(elementId, filename){
|
||||
function scriptPackage(rowid, extracommand, line){
|
||||
let text = `winget install ${rowid} -s huji`;
|
||||
console.log(extracommand)
|
||||
let fub = extracommand.indexOf(' &&')
|
||||
let fub = extracommand.match(/\s?&&/)
|
||||
fub = fub==null?-1:fub.index
|
||||
|
||||
console.log(`${rowid}, ${fub}`)
|
||||
console.log(`${rowid}, ${extracommand.length < 2}`)
|
||||
console.log(`fub in row: ${rowid}, is ${fub}`)
|
||||
console.log(`extra command in line ${rowid}, has more than 2 lenght? ${extracommand.length < 2}. lenght${extracommand.length}`)
|
||||
try{
|
||||
console.log(text)
|
||||
if(fub == 0){
|
||||
text += extracommand;
|
||||
}
|
||||
else if((extracommand.length > 2)){
|
||||
else if((extracommand.length > 2) && !(extracommand.match(/nil/))){
|
||||
text = extracommand + " && " + text;
|
||||
}
|
||||
else if ((fub == -1))
|
||||
|
Reference in New Issue
Block a user