This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

core / appview / models / entity_state.go
2.0 kB 72 lines
1package models 2 3import ( 4 "fmt" 5 6 "github.com/bluesky-social/indigo/atproto/syntax" 7 "tangled.org/core/api/tangled" 8) 9 10type StateValue string 11 12const ( 13 StateOpen StateValue = "open" 14 StateClosed StateValue = "closed" 15 StateMerged StateValue = "merged" 16) 17 18type StateRecord struct { 19 Did string 20 Rkey string 21 Subject syntax.ATURI 22 Value StateValue 23 SortMicros int64 24} 25 26func sortMicros(createdAt, rkey string) int64 { 27 if t, err := syntax.ParseDatetimeTime(createdAt); err == nil { 28 return t.UnixMicro() 29 } 30 if tid, err := syntax.ParseTID(rkey); err == nil { 31 return tid.Time().UnixMicro() 32 } 33 return 0 34} 35 36func newStateRecord(did, rkey, subjectUri, createdAt string, value StateValue) (StateRecord, error) { 37 subject, err := syntax.ParseATURI(subjectUri) 38 if err != nil { 39 return StateRecord{}, fmt.Errorf("invalid subject uri: %w", err) 40 } 41 return StateRecord{ 42 Did: did, 43 Rkey: rkey, 44 Subject: subject, 45 Value: value, 46 SortMicros: sortMicros(createdAt, rkey), 47 }, nil 48} 49 50func IssueStateFromRecord(did, rkey string, record tangled.RepoIssueState) (StateRecord, error) { 51 switch record.State { 52 case tangled.RepoIssueStateOpen: 53 return newStateRecord(did, rkey, record.Issue, record.CreatedAt, StateOpen) 54 case tangled.RepoIssueStateClosed: 55 return newStateRecord(did, rkey, record.Issue, record.CreatedAt, StateClosed) 56 default: 57 return StateRecord{}, fmt.Errorf("unknown issue state variant: %q", record.State) 58 } 59} 60 61func PullStatusFromRecord(did, rkey string, record tangled.RepoPullStatus) (StateRecord, error) { 62 switch record.Status { 63 case tangled.RepoPullStatusOpen: 64 return newStateRecord(did, rkey, record.Pull, record.CreatedAt, StateOpen) 65 case tangled.RepoPullStatusClosed: 66 return newStateRecord(did, rkey, record.Pull, record.CreatedAt, StateClosed) 67 case tangled.RepoPullStatusMerged: 68 return newStateRecord(did, rkey, record.Pull, record.CreatedAt, StateMerged) 69 default: 70 return StateRecord{}, fmt.Errorf("unknown pull status variant: %q", record.Status) 71 } 72}