150 lines
4.1 KiB
Go
150 lines
4.1 KiB
Go
package views
|
|
|
|
import (
|
|
"fmt"
|
|
"fyne.io/fyne/v2"
|
|
"fyne.io/fyne/v2/container"
|
|
"fyne.io/fyne/v2/data/binding"
|
|
"fyne.io/fyne/v2/dialog"
|
|
"fyne.io/fyne/v2/theme"
|
|
"fyne.io/fyne/v2/widget"
|
|
"time"
|
|
"work_cation/global"
|
|
"work_cation/models"
|
|
"work_cation/repo"
|
|
"work_cation/service"
|
|
)
|
|
|
|
func otherUser(w fyne.Window) fyne.CanvasObject {
|
|
gridWrap := container.NewGridWrap(fyne.NewSize(200, 190))
|
|
findService, err := service.Zeroconf.FindService()
|
|
if err != nil {
|
|
return widget.NewLabel("网络异常请稍后尝试")
|
|
}
|
|
go func() {
|
|
for _, online := range findService {
|
|
var (
|
|
onlineCopy = online
|
|
)
|
|
baseCardV, err := itemOnlineUserView(w, &onlineCopy)
|
|
if err != nil {
|
|
continue
|
|
}
|
|
gridWrap.Add(baseCardV)
|
|
}
|
|
}()
|
|
scroll := container.NewScroll(gridWrap)
|
|
return container.NewBorder(nil, nil, nil, nil, scroll)
|
|
}
|
|
|
|
func itemOnlineUserView(w fyne.Window, data *models.Online) (fyne.CanvasObject, error) {
|
|
|
|
u := repo.UserFollow.GetUser(global.DB, data.ID)
|
|
|
|
var followLabel *widget.Label
|
|
const (
|
|
noFollow = "未关注"
|
|
isFollow = "已关注"
|
|
)
|
|
|
|
if u == nil {
|
|
followLabel = widget.NewLabel(noFollow)
|
|
} else {
|
|
followLabel = widget.NewLabel(isFollow)
|
|
}
|
|
|
|
user, err := service.Client.GetUser(data)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
followButton := widget.NewButton("关注", func() {
|
|
if followLabel.Text == isFollow {
|
|
dialog.ShowInformation("结果", "已关注成功", w)
|
|
return
|
|
}
|
|
err = repo.UserFollow.Follow(global.DB, &models.UserFollows{Users: *user})
|
|
if err != nil {
|
|
dialog.ShowInformation("关注失败", err.Error(), w)
|
|
return
|
|
}
|
|
dialog.ShowInformation("结果", "关注成功", w)
|
|
followLabel.SetText(isFollow)
|
|
})
|
|
|
|
showErrButton := widget.NewButton("查看主页", func() {
|
|
otherUserIndexWin(user, data)
|
|
})
|
|
|
|
card := widget.NewCard(user.Name, user.Ip, container.NewVBox(followLabel, showErrButton, followButton))
|
|
return card, nil
|
|
}
|
|
|
|
func otherUserIndexWin(user *models.Users, data *models.Online) {
|
|
myApp := fyne.CurrentApp()
|
|
myWindow := myApp.NewWindow(user.Name)
|
|
myWindow.CenterOnScreen()
|
|
myWindow.Resize(fyne.NewSize(620, 500))
|
|
myWindow.SetContent(otherUserIndexView(myWindow, data))
|
|
myWindow.Show()
|
|
}
|
|
|
|
func otherUserIndexView(w fyne.Window, online *models.Online) fyne.CanvasObject {
|
|
gridWrap := container.NewGridWrap(fyne.NewSize(200, 200))
|
|
cards, _ := service.Client.GetCards(online)
|
|
for _, baseCard := range cards {
|
|
var baseCardCopy = baseCard
|
|
baseCardV := baseOtherCardView(w, baseCardCopy, online)
|
|
gridWrap.Add(baseCardV)
|
|
}
|
|
scroll := container.NewScroll(gridWrap)
|
|
return container.NewBorder(nil, nil, nil, nil, scroll)
|
|
}
|
|
|
|
func baseOtherCardView(w fyne.Window, baseCardCopy models.BaseCard, online *models.Online) *widget.Card {
|
|
|
|
saveCard := repo.BaseCard.Find(global.DB, baseCardCopy.UUID)
|
|
|
|
infoWid := container.NewVBox(
|
|
widget.NewLabel(baseCardCopy.ToolType),
|
|
widget.NewLabel(fmt.Sprintf("本地:%s", saveCard.UpdateTx.Format(time.DateTime))),
|
|
widget.NewLabel(fmt.Sprintf("作者:%s", baseCardCopy.UpdateTx.Format(time.DateTime))),
|
|
)
|
|
|
|
baseCardV := widget.NewCard(baseCardCopy.Title, baseCardCopy.Text, container.NewBorder(nil, widget.NewToolbar(
|
|
widget.NewToolbarAction(theme.DownloadIcon(), func() {
|
|
b := saveCard.UpdateTx.Unix() == baseCardCopy.UpdateTx.Unix()
|
|
fmt.Println(saveCard.UpdateTx, baseCardCopy.UpdateTx)
|
|
if b {
|
|
dialog.ShowInformation("结果", "已下载本地", w)
|
|
return
|
|
}
|
|
// 下载到本地 若没关注自动关注
|
|
|
|
progress := binding.NewFloat()
|
|
progress.Set(0)
|
|
progressBar := widget.NewProgressBarWithData(progress)
|
|
progressBar.Max = 100
|
|
smaillWin := dialog.NewCustom("下载中", "关闭", progressBar, w)
|
|
smaillWin.Show()
|
|
err := service.Client.Download(online, baseCardCopy.UUID, progress)
|
|
if err != nil {
|
|
smaillWin.SetDismissText("失败")
|
|
return
|
|
}
|
|
// 修改数据
|
|
progress.Set(99)
|
|
saveCard.UpdateTx = baseCardCopy.UpdateTx
|
|
err = repo.BaseCard.CreateOrSave(global.DB, &baseCardCopy)
|
|
if err != nil {
|
|
smaillWin.SetDismissText("失败")
|
|
return
|
|
}
|
|
progress.Set(100)
|
|
smaillWin.SetDismissText("完成 请去[我的]查看")
|
|
|
|
}),
|
|
), nil, nil, infoWid))
|
|
return baseCardV
|
|
}
|