分页和并发执行select

pull/30/head
unknown 4 years ago
parent 54a043dd1c
commit 81a0b762ad

@ -6,7 +6,9 @@ import (
"html/template" "html/template"
"log" "log"
"net/http" "net/http"
"strconv"
"strings" "strings"
"sync"
) )
type IndexData struct { type IndexData struct {
@ -46,15 +48,37 @@ func index(w http.ResponseWriter, r *http.Request) {
//输出列表 //输出列表
func list(w http.ResponseWriter, r *http.Request) { func list(w http.ResponseWriter, r *http.Request) {
values:=r.URL.Query()
fid:=""
currentPage:=0
if len(values["fid"])!=0{
fid=values["fid"][0]
}
if len(values["page"])!=0{
currentPage,_=strconv.Atoi(values["page"][0])
}
if fid==""{
fid="INBOX"
}
if currentPage==0{
currentPage=1
}
auth := getCookie(r, "auth") auth := getCookie(r, "auth")
authStrings := strings.Split(auth, "|") authStrings := strings.Split(auth, "|")
render := new(IndexData) render := new(IndexData)
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
folders :=tools.GetFolders(authStrings[0], authStrings[1], authStrings[2]) folders :=tools.GetFolders(authStrings[0], authStrings[1], authStrings[2])
render.Folders = folders render.Folders = folders
mails := tools.GetFolderMail(authStrings[0], authStrings[1], authStrings[2], "INBOX", 10) }()
mails := tools.GetFolderMail(authStrings[0], authStrings[1], authStrings[2], fid,currentPage, 20)
render.Mails = mails render.Mails = mails
wg.Wait()
t, _ := template.ParseFiles("./tmpl/index.html") t, _ := template.ParseFiles("./tmpl/index.html")
t.Execute(w, render) t.Execute(w, render)
} }

@ -24,7 +24,7 @@
<li class="list-group-item active">邮件夹</li> <li class="list-group-item active">邮件夹</li>
{{ range $key, $value := .Folders}} {{ range $key, $value := .Folders}}
<li class="list-group-item d-flex justify-content-between align-items-center"> <li class="list-group-item d-flex justify-content-between align-items-center">
{{$key}} <a href="/list?fid={{$key}}">{{$key}}</a>
{{if ne $value 0 }}<span class="badge badge-primary badge-pill">{{$value}}</span>{{end}} {{if ne $value 0 }}<span class="badge badge-primary badge-pill">{{$value}}</span>{{end}}
</li> </li>
{{end}} {{end}}

@ -86,8 +86,9 @@ func GetFolders(server string, email string, password string)map[string]int{
log.Println(folders) log.Println(folders)
return folders return folders
} }
//获取邮件夹邮件 //获取邮件夹邮件
func GetFolderMail(server string, email string, password string,folder string,pagesize int)[]string{ func GetFolderMail(server string, email string, password string,folder string,currentPage int,pagesize int)[]string{
var c *client.Client var c *client.Client
//defer c.Logout() //defer c.Logout()
c=connect(server,email,password) c=connect(server,email,password)
@ -96,7 +97,7 @@ func GetFolderMail(server string, email string, password string,folder string,pa
} }
mbox, _ := c.Select(folder, true) mbox, _ := c.Select(folder, true)
to := mbox.Messages to := mbox.Messages-uint32((currentPage-1)*pagesize)
from := to-uint32(pagesize) from := to-uint32(pagesize)
seqset := new(imap.SeqSet) seqset := new(imap.SeqSet)
@ -107,10 +108,11 @@ func GetFolderMail(server string, email string, password string,folder string,pa
go func() { go func() {
done <- c.Fetch(seqset, []imap.FetchItem{imap.FetchEnvelope}, messages) done <- c.Fetch(seqset, []imap.FetchItem{imap.FetchEnvelope}, messages)
}() }()
log.Println(111)
var res []string var res []string
for msg := range messages { for msg := range messages {
res=append(res,msg.Envelope.Subject) res=append(res,msg.Envelope.Subject)
} }
log.Println(res)
return res return res
} }
Loading…
Cancel
Save