portal.go 1021 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package database
  2. import (
  3. "database/sql"
  4. log "maunium.net/go/maulogger/v2"
  5. "maunium.net/go/mautrix/id"
  6. )
  7. type Portal struct {
  8. db *Database
  9. log log.Logger
  10. Key PortalKey
  11. MXID id.RoomID
  12. Name string
  13. Topic string
  14. Avatar string
  15. AvatarURL id.ContentURI
  16. }
  17. func (p *Portal) Scan(row Scannable) *Portal {
  18. var mxid, avatarURL sql.NullString
  19. err := row.Scan(&p.Key.ID, &p.Key.Receiver, &mxid, &p.Name, &p.Topic, &p.Avatar, &avatarURL)
  20. if err != nil {
  21. if err != sql.ErrNoRows {
  22. p.log.Errorln("Database scan failed:", err)
  23. }
  24. return nil
  25. }
  26. p.MXID = id.RoomID(mxid.String)
  27. p.AvatarURL, _ = id.ParseContentURI(avatarURL.String)
  28. return p
  29. }
  30. func (p *Portal) Insert() {
  31. query := "INSERT INTO portal" +
  32. " (id, receiver, mxid, name, topic, avatar, avatar_url)" +
  33. " VALUES ($1, $2, $3, $4, $5, $6, $7)"
  34. _, err := p.db.Exec(query, p.Key.ID, p.Key.Receiver, p.MXID,
  35. p.Name, p.Topic, p.Avatar, p.AvatarURL.String())
  36. if err != nil {
  37. p.log.Warnfln("Failed to insert %s: %v", p.Key, err)
  38. }
  39. }