diff --git a/html/master.html b/html/master.html index 4c76629..8e4ef36 100644 --- a/html/master.html +++ b/html/master.html @@ -3,11 +3,12 @@ + {{if eq .Lang "heb"}}{{end}} {{ .ElementsData.Title }} - + {{template "body" .}} diff --git a/html/statsitics.html b/html/statsitics.html new file mode 100644 index 0000000..5904d50 --- /dev/null +++ b/html/statsitics.html @@ -0,0 +1,49 @@ +{{define "body"}} + +
+ +
+ +

Download Statistics

+ + + + + + + {{range .VersionStats}} + + + + + + {{end}} +
ProgramVersionDownload Count
+ {{.ID}} + + {{.Version}} + + {{.Counter}} +
+
+
+

Total Download Statistics

+ + + + + + {{range .TotalStats}} + + + + + {{end}} +
PackageSearch Count
+ {{.ID}} + + {{.Counter}} +
+
+
+{{end}} \ No newline at end of file diff --git a/html/up.html b/html/up.html index 3ea0887..60dbcdb 100644 --- a/html/up.html +++ b/html/up.html @@ -1,13 +1,37 @@ - - - - - -File Upload - - - - +{{define "body"}} + +
+
+
+ + +
+
+ + +
+
+ + +
+
+ Installers +
+ + +
+
+ + +
+
+
+ + +
+ +
+
@@ -29,5 +53,4 @@ } }); - - +{{end}} \ No newline at end of file diff --git a/main.go b/main.go index 9e7fb83..1c724e4 100644 --- a/main.go +++ b/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, diff --git a/packages.go b/packages.go index 069953b..e15cfd5 100644 --- a/packages.go +++ b/packages.go @@ -43,4 +43,9 @@ type elements struct { Allow string Warning string Explain string +} +type DownloadElements struct { + ID string + Version *string + Counter int } \ No newline at end of file diff --git a/public/hebrew.css b/public/hebrew.css new file mode 100644 index 0000000..6d27acd --- /dev/null +++ b/public/hebrew.css @@ -0,0 +1,3 @@ +body{ + direction: rtl; +} \ No newline at end of file diff --git a/public/script.js b/public/script.js index fe495a0..8b2035d 100644 --- a/public/script.js +++ b/public/script.js @@ -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))