Changeset 360 in code for trunk/logger.go
- Timestamp:
- Jul 15, 2020, 3:47:57 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/logger.go
r319 r360 135 135 } 136 136 137 func parseMessagesBefore(network *network, entity string, timestamp time.Time, limit int) ([]*irc.Message, error) { 138 year, month, day := timestamp.Date() 139 path := logPath(network, entity, timestamp) 137 func parseMessage(line, entity string, ref time.Time) (*irc.Message, time.Time, error) { 138 var hour, minute, second int 139 _, err := fmt.Sscanf(line, "[%02d:%02d:%02d] ", &hour, &minute, &second) 140 if err != nil { 141 return nil, time.Time{}, err 142 } 143 line = line[11:] 144 145 // TODO: support NOTICE 146 if !strings.HasPrefix(line, "<") { 147 return nil, time.Time{}, nil 148 } 149 i := strings.Index(line, "> ") 150 if i < 0 { 151 return nil, time.Time{}, nil 152 } 153 154 year, month, day := ref.Date() 155 t := time.Date(year, month, day, hour, minute, second, 0, time.Local) 156 157 sender := line[1:i] 158 text := line[i+2:] 159 msg := &irc.Message{ 160 Tags: map[string]irc.TagValue{ 161 "time": irc.TagValue(t.UTC().Format(serverTimeLayout)), 162 }, 163 Prefix: &irc.Prefix{Name: sender}, 164 Command: "PRIVMSG", 165 Params: []string{entity, text}, 166 } 167 return msg, t, nil 168 } 169 170 func parseMessagesBefore(network *network, entity string, ref time.Time, limit int) ([]*irc.Message, error) { 171 path := logPath(network, entity, ref) 140 172 f, err := os.Open(path) 141 173 if err != nil { … … 152 184 sc := bufio.NewScanner(f) 153 185 for sc.Scan() { 154 line := sc.Text() 155 var hour, minute, second int 156 _, err := fmt.Sscanf(line, "[%02d:%02d:%02d] ", &hour, &minute, &second) 186 msg, t, err := parseMessage(sc.Text(), entity, ref) 157 187 if err != nil { 158 188 return nil, err 159 } 160 message := line[11:] 161 // TODO: support NOTICE 162 if !strings.HasPrefix(message, "<") { 189 } else if msg == nil { 163 190 continue 164 } 165 i := strings.Index(message, "> ") 166 if i == -1 { 167 continue 168 } 169 t := time.Date(year, month, day, hour, minute, second, 0, time.Local) 170 if !t.Before(timestamp) { 191 } else if !t.Before(ref) { 171 192 break 172 193 } 173 194 174 sender := message[1:i] 175 text := message[i+2:] 176 historyRing[cur%limit] = &irc.Message{ 177 Tags: map[string]irc.TagValue{ 178 "time": irc.TagValue(t.UTC().Format(serverTimeLayout)), 179 }, 180 Prefix: &irc.Prefix{ 181 Name: sender, 182 }, 183 Command: "PRIVMSG", 184 Params: []string{entity, text}, 185 } 195 historyRing[cur%limit] = msg 186 196 cur++ 187 197 } … … 205 215 } 206 216 } 217 218 func parseMessagesAfter(network *network, entity string, ref time.Time, limit int) ([]*irc.Message, error) { 219 path := logPath(network, entity, ref) 220 f, err := os.Open(path) 221 if err != nil { 222 if os.IsNotExist(err) { 223 return nil, nil 224 } 225 return nil, err 226 } 227 defer f.Close() 228 229 var history []*irc.Message 230 sc := bufio.NewScanner(f) 231 for sc.Scan() && len(history) < limit { 232 msg, t, err := parseMessage(sc.Text(), entity, ref) 233 if err != nil { 234 return nil, err 235 } else if msg == nil || !t.After(ref) { 236 continue 237 } 238 239 history = append(history, msg) 240 } 241 if sc.Err() != nil { 242 return nil, sc.Err() 243 } 244 245 return history, nil 246 }
Note:
See TracChangeset
for help on using the changeset viewer.