added hebrew, statistics

This commit is contained in:
2024-06-09 15:44:01 +03:00
parent 8a3782e1db
commit 409b076cd0
7 changed files with 198 additions and 57 deletions

139
main.go
View File

@@ -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,