Update to Go 1.20 + run better align (#2927)
* chore(go): update go version to 1.20. Closes #2185 * chore(go): run better align against project To optimize struct field order. Closes #2870 * chore(go): update CI jobs to use Go 1.20 * fix(go): linter warnings for Go 1.20 update
This commit is contained in:
@@ -19,27 +19,27 @@ import (
|
||||
|
||||
// Client represents a single chat client.
|
||||
type Client struct {
|
||||
mu sync.RWMutex
|
||||
Id uint `json:"-"`
|
||||
accessToken string
|
||||
conn *websocket.Conn
|
||||
User *user.User `json:"user"`
|
||||
server *Server
|
||||
IPAddress string `json:"-"`
|
||||
ConnectedAt time.Time `json:"connectedAt"`
|
||||
timeoutTimer *time.Timer
|
||||
rateLimiter *rate.Limiter
|
||||
conn *websocket.Conn
|
||||
User *user.User `json:"user"`
|
||||
server *Server
|
||||
Geo *geoip.GeoDetails `json:"geo"`
|
||||
// Buffered channel of outbound messages.
|
||||
send chan []byte
|
||||
rateLimiter *rate.Limiter
|
||||
timeoutTimer *time.Timer
|
||||
accessToken string
|
||||
IPAddress string `json:"-"`
|
||||
UserAgent string `json:"userAgent"`
|
||||
MessageCount int `json:"messageCount"`
|
||||
Id uint `json:"-"`
|
||||
mu sync.RWMutex
|
||||
inTimeout bool
|
||||
Geo *geoip.GeoDetails `json:"geo"`
|
||||
MessageCount int `json:"messageCount"`
|
||||
UserAgent string `json:"userAgent"`
|
||||
ConnectedAt time.Time `json:"connectedAt"`
|
||||
}
|
||||
|
||||
type chatClientEvent struct {
|
||||
data []byte
|
||||
client *Client
|
||||
data []byte
|
||||
}
|
||||
|
||||
const (
|
||||
|
||||
@@ -28,16 +28,16 @@ type OutboundEvent interface {
|
||||
|
||||
// Event is any kind of event. A type is required to be specified.
|
||||
type Event struct {
|
||||
Timestamp time.Time `json:"timestamp"`
|
||||
Type EventType `json:"type,omitempty"`
|
||||
ID string `json:"id"`
|
||||
Timestamp time.Time `json:"timestamp"`
|
||||
}
|
||||
|
||||
// UserEvent is an event with an associated user.
|
||||
type UserEvent struct {
|
||||
User *user.User `json:"user"`
|
||||
ClientID uint `json:"clientId,omitempty"`
|
||||
HiddenAt *time.Time `json:"hiddenAt,omitempty"`
|
||||
ClientID uint `json:"clientId,omitempty"`
|
||||
}
|
||||
|
||||
// MessageEvent is an event that has a message body.
|
||||
|
||||
@@ -186,26 +186,27 @@ func makeFederatedActionChatEventFromRowData(row rowData) events.FediverseEngage
|
||||
}
|
||||
|
||||
type rowData struct {
|
||||
id string
|
||||
userID *string
|
||||
body string
|
||||
eventType models.EventType
|
||||
hiddenAt *time.Time
|
||||
timestamp time.Time
|
||||
title *string
|
||||
subtitle *string
|
||||
image *string
|
||||
link *string
|
||||
timestamp time.Time
|
||||
image *string
|
||||
previousUsernames *string
|
||||
|
||||
userDisplayName *string
|
||||
userDisplayColor *int
|
||||
userDisplayName *string
|
||||
userDisplayColor *int
|
||||
userID *string
|
||||
title *string
|
||||
subtitle *string
|
||||
link *string
|
||||
|
||||
userType *string
|
||||
userScopes *string
|
||||
hiddenAt *time.Time
|
||||
userCreatedAt *time.Time
|
||||
userDisabledAt *time.Time
|
||||
previousUsernames *string
|
||||
userNameChangedAt *time.Time
|
||||
userAuthenticatedAt *time.Time
|
||||
userScopes *string
|
||||
userType *string
|
||||
userNameChangedAt *time.Time
|
||||
body string
|
||||
eventType models.EventType
|
||||
id string
|
||||
}
|
||||
|
||||
func getChat(rows *sql.Rows) ([]interface{}, error) {
|
||||
|
||||
@@ -27,10 +27,7 @@ var _lastSeenCache = map[string]time.Time{}
|
||||
|
||||
// Server represents an instance of the chat server.
|
||||
type Server struct {
|
||||
mu sync.RWMutex
|
||||
seq uint
|
||||
clients map[uint]*Client
|
||||
maxSocketConnectionLimit int64
|
||||
clients map[uint]*Client
|
||||
|
||||
// send outbound message payload to all clients
|
||||
outbound chan []byte
|
||||
@@ -41,7 +38,11 @@ type Server struct {
|
||||
// unregister requests from clients.
|
||||
unregister chan uint // the ChatClient id
|
||||
|
||||
geoipClient *geoip.Client
|
||||
geoipClient *geoip.Client
|
||||
seq uint
|
||||
maxSocketConnectionLimit int64
|
||||
|
||||
mu sync.RWMutex
|
||||
}
|
||||
|
||||
// NewChat will return a new instance of the chat server.
|
||||
|
||||
@@ -283,11 +283,11 @@ func migrateToSchema1(db *sql.DB) {
|
||||
|
||||
// Migrate access tokens to become chat users
|
||||
type oldAccessToken struct {
|
||||
createdAt time.Time
|
||||
lastUsedAt *time.Time
|
||||
accessToken string
|
||||
displayName string
|
||||
scopes string
|
||||
createdAt time.Time
|
||||
lastUsedAt *time.Time
|
||||
}
|
||||
|
||||
oldAccessTokens := make([]oldAccessToken, 0)
|
||||
|
||||
@@ -28,7 +28,13 @@ import (
|
||||
// S3Storage is the s3 implementation of a storage provider.
|
||||
type S3Storage struct {
|
||||
sess *session.Session
|
||||
host string
|
||||
|
||||
// If we try to upload a playlist but it is not yet on disk
|
||||
// then keep a reference to it here.
|
||||
queuedPlaylistUpdates map[string]string
|
||||
|
||||
uploader *s3manager.Uploader
|
||||
host string
|
||||
|
||||
s3Endpoint string
|
||||
s3ServingEndpoint string
|
||||
@@ -38,12 +44,6 @@ type S3Storage struct {
|
||||
s3Secret string
|
||||
s3ACL string
|
||||
s3ForcePathStyle bool
|
||||
|
||||
// If we try to upload a playlist but it is not yet on disk
|
||||
// then keep a reference to it here.
|
||||
queuedPlaylistUpdates map[string]string
|
||||
|
||||
uploader *s3manager.Uploader
|
||||
}
|
||||
|
||||
// NewS3Storage returns a new S3Storage instance.
|
||||
|
||||
@@ -22,37 +22,40 @@ var _commandExec *exec.Cmd
|
||||
|
||||
// Transcoder is a single instance of a video transcoder.
|
||||
type Transcoder struct {
|
||||
input string
|
||||
stdin *io.PipeReader
|
||||
segmentOutputPath string
|
||||
codec Codec
|
||||
|
||||
stdin *io.PipeReader
|
||||
|
||||
TranscoderCompleted func(error)
|
||||
playlistOutputPath string
|
||||
variants []HLSVariant
|
||||
appendToStream bool
|
||||
ffmpegPath string
|
||||
segmentIdentifier string
|
||||
internalListenerPort string
|
||||
codec Codec
|
||||
input string
|
||||
segmentOutputPath string
|
||||
variants []HLSVariant
|
||||
|
||||
currentStreamOutputSettings []models.StreamOutputVariant
|
||||
currentLatencyLevel models.LatencyLevel
|
||||
appendToStream bool
|
||||
isEvent bool
|
||||
|
||||
TranscoderCompleted func(error)
|
||||
}
|
||||
|
||||
// HLSVariant is a combination of settings that results in a single HLS stream.
|
||||
type HLSVariant struct {
|
||||
index int
|
||||
audioBitrate string // The audio bitrate
|
||||
|
||||
videoSize VideoSize // Resizes the video via scaling
|
||||
framerate int // The output framerate
|
||||
videoBitrate int // The output bitrate
|
||||
isVideoPassthrough bool // Override all settings and just copy the video stream
|
||||
videoSize VideoSize // Resizes the video via scaling
|
||||
index int
|
||||
|
||||
audioBitrate string // The audio bitrate
|
||||
isAudioPassthrough bool // Override all settings and just copy the audio stream
|
||||
framerate int // The output framerate
|
||||
videoBitrate int // The output bitrate
|
||||
|
||||
cpuUsageLevel int // The amount of hardware to use for encoding a stream
|
||||
isVideoPassthrough bool // Override all settings and just copy the video stream
|
||||
|
||||
isAudioPassthrough bool // Override all settings and just copy the audio stream
|
||||
|
||||
cpuUsageLevel int // The amount of hardware to use for encoding a stream
|
||||
}
|
||||
|
||||
// VideoSize is the scaled size of the video output.
|
||||
|
||||
@@ -15,14 +15,14 @@ import (
|
||||
// ExternalAPIUser represents a single 3rd party integration that uses an access token.
|
||||
// This struct mostly matches the User struct so they can be used interchangeably.
|
||||
type ExternalAPIUser struct {
|
||||
CreatedAt time.Time `json:"createdAt"`
|
||||
LastUsedAt *time.Time `json:"lastUsedAt,omitempty"`
|
||||
ID string `json:"id"`
|
||||
AccessToken string `json:"accessToken"`
|
||||
DisplayName string `json:"displayName"`
|
||||
DisplayColor int `json:"displayColor"`
|
||||
CreatedAt time.Time `json:"createdAt"`
|
||||
Scopes []string `json:"scopes"`
|
||||
Type string `json:"type,omitempty"` // Should be API
|
||||
LastUsedAt *time.Time `json:"lastUsedAt,omitempty"`
|
||||
Scopes []string `json:"scopes"`
|
||||
DisplayColor int `json:"displayColor"`
|
||||
IsBot bool `json:"isBot"`
|
||||
}
|
||||
|
||||
|
||||
@@ -27,16 +27,16 @@ const (
|
||||
|
||||
// User represents a single chat user.
|
||||
type User struct {
|
||||
ID string `json:"id"`
|
||||
DisplayName string `json:"displayName"`
|
||||
DisplayColor int `json:"displayColor"`
|
||||
CreatedAt time.Time `json:"createdAt"`
|
||||
DisabledAt *time.Time `json:"disabledAt,omitempty"`
|
||||
PreviousNames []string `json:"previousNames"`
|
||||
NameChangedAt *time.Time `json:"nameChangedAt,omitempty"`
|
||||
Scopes []string `json:"scopes,omitempty"`
|
||||
IsBot bool `json:"isBot"`
|
||||
AuthenticatedAt *time.Time `json:"-"`
|
||||
ID string `json:"id"`
|
||||
DisplayName string `json:"displayName"`
|
||||
PreviousNames []string `json:"previousNames"`
|
||||
Scopes []string `json:"scopes,omitempty"`
|
||||
DisplayColor int `json:"displayColor"`
|
||||
IsBot bool `json:"isBot"`
|
||||
Authenticated bool `json:"authenticated"`
|
||||
}
|
||||
|
||||
|
||||
@@ -11,19 +11,19 @@ import (
|
||||
|
||||
// WebhookEvent represents an event sent as a webhook.
|
||||
type WebhookEvent struct {
|
||||
Type models.EventType `json:"type"` // messageSent | userJoined | userNameChange
|
||||
EventData interface{} `json:"eventData,omitempty"`
|
||||
Type models.EventType `json:"type"` // messageSent | userJoined | userNameChange
|
||||
}
|
||||
|
||||
// WebhookChatMessage represents a single chat message sent as a webhook payload.
|
||||
type WebhookChatMessage struct {
|
||||
User *user.User `json:"user,omitempty"`
|
||||
ClientID uint `json:"clientId,omitempty"`
|
||||
Timestamp *time.Time `json:"timestamp,omitempty"`
|
||||
Body string `json:"body,omitempty"`
|
||||
RawBody string `json:"rawBody,omitempty"`
|
||||
ID string `json:"id,omitempty"`
|
||||
ClientID uint `json:"clientId,omitempty"`
|
||||
Visible bool `json:"visible"`
|
||||
Timestamp *time.Time `json:"timestamp,omitempty"`
|
||||
}
|
||||
|
||||
// SendEventToWebhooks will send a single webhook event to all webhook destinations.
|
||||
|
||||
Reference in New Issue
Block a user