1
0
Fork 0
mirror of https://github.com/mautrix/whatsapp.git synced 2026-05-16 10:33:14 -04:00
mautrix-whatsapp/pkg/connector/wadb/mediarequest.go

77 lines
2.6 KiB
Go
Raw Permalink Normal View History

package wadb
import (
"context"
"go.mau.fi/util/dbutil"
"maunium.net/go/mautrix/bridgev2/networkid"
)
type MediaBackfillRequestStatus int
const (
MediaBackfillRequestStatusNotRequested MediaBackfillRequestStatus = 0
MediaBackfillRequestStatusRequested MediaBackfillRequestStatus = 1
MediaBackfillRequestStatusRequestFailed MediaBackfillRequestStatus = 2
MediaBackfillRequestStatusRequestSkipped MediaBackfillRequestStatus = 3
)
type MediaRequestQuery struct {
BridgeID networkid.BridgeID
*dbutil.QueryHelper[*MediaRequest]
}
type MediaRequest struct {
BridgeID networkid.BridgeID
UserLoginID networkid.UserLoginID
2024-10-01 12:40:33 +03:00
MessageID networkid.MessageID
PortalKey networkid.PortalKey
MediaKey []byte
Status MediaBackfillRequestStatus
Error string
}
const (
upsertMediaRequestQuery = `
INSERT INTO whatsapp_media_backfill_request (
2024-10-01 12:40:33 +03:00
bridge_id, user_login_id, message_id, portal_id, portal_receiver, media_key, status, error
)
VALUES ($1, $2, $3, $4, $5, $6, $7, $8)
2024-10-01 12:40:33 +03:00
ON CONFLICT (bridge_id, user_login_id, message_id) DO UPDATE SET
media_key=excluded.media_key, status=excluded.status, error=excluded.error
`
2024-10-01 12:40:33 +03:00
deleteMediaRequestQuery = `
DELETE FROM whatsapp_media_backfill_request
WHERE bridge_id=$1 AND user_login_id=$2 AND message_id=$3
`
getAllUnrequestedMediaRequestsForUserLoginQuery = `
2024-10-01 12:40:33 +03:00
SELECT bridge_id, user_login_id, message_id, portal_id, portal_receiver, media_key, status, error
FROM whatsapp_media_backfill_request
WHERE bridge_id=$1 AND user_login_id=$2 AND status=0
`
)
func (mrq *MediaRequestQuery) Put(ctx context.Context, mr *MediaRequest) error {
mr.BridgeID = mrq.BridgeID
return mrq.Exec(ctx, upsertMediaRequestQuery, mr.sqlVariables()...)
}
2024-10-01 12:40:33 +03:00
func (mrq *MediaRequestQuery) Delete(ctx context.Context, loginID networkid.UserLoginID, messageID networkid.MessageID) error {
return mrq.Exec(ctx, deleteMediaRequestQuery, mrq.BridgeID, loginID, messageID)
}
func (mrq *MediaRequestQuery) GetUnrequestedForUserLogin(ctx context.Context, loginID networkid.UserLoginID) ([]*MediaRequest, error) {
return mrq.QueryMany(ctx, getAllUnrequestedMediaRequestsForUserLoginQuery, mrq.BridgeID, loginID)
}
func (mr *MediaRequest) Scan(row dbutil.Scannable) (*MediaRequest, error) {
2024-10-01 12:40:33 +03:00
err := row.Scan(&mr.BridgeID, &mr.UserLoginID, &mr.MessageID, &mr.PortalKey.ID, &mr.PortalKey.Receiver, &mr.MediaKey, &mr.Status, &mr.Error)
if err != nil {
return nil, err
}
return mr, nil
}
func (mr *MediaRequest) sqlVariables() []any {
2024-10-01 12:40:33 +03:00
return []any{mr.BridgeID, mr.UserLoginID, mr.MessageID, mr.PortalKey.ID, mr.PortalKey.Receiver, mr.MediaKey, mr.Status, mr.Error}
}