|
|
package logs
import ( "errors" "time"
"git.aiterp.net/rpdata/api/internal/importers/mirclike"
"git.aiterp.net/rpdata/api/models/posts"
"git.aiterp.net/rpdata/api/models/channels"
"git.aiterp.net/rpdata/api/internal/importers/forumlog"
"git.aiterp.net/rpdata/api/models" )
// An ImportedLog contains data about an imported log.
type ImportedLog struct { Log models.Log Posts []models.Post }
// Import makes a log and posts object from different formats.
func Import(importer models.LogImporter, date time.Time, tz *time.Location, channelName string, data string) ([]ImportedLog, error) { results := make([]ImportedLog, 0, 8)
eventName := "" if channel, err := channels.FindName(channelName); err != nil { eventName = channel.EventName }
date = date.In(tz)
switch importer { case models.LogImporterMircLike: { if date.IsZero() { return nil, errors.New("Date is not optional for mirc-like logs") }
parsedLog, parsedPosts, err := mirclike.ParseLog(data, date, true) if err != nil { return nil, err }
log, err := Add(parsedLog.Date, channelName, "", eventName, "", false) if err != nil { return nil, err }
posts, err := posts.AddMany(log, parsedPosts) if err != nil { return nil, err }
results = append(results, ImportedLog{ Log: log, Posts: posts, }) } case models.LogImporterForumLog: { parseResults, err := forumlog.ParseLogs(data, tz) if err != nil { return nil, err }
for _, result := range parseResults { log, err := Add(result.Log.Date, channelName, "", eventName, "", false) if err != nil { return nil, err }
posts, err := posts.AddMany(log, result.Posts) if err != nil { return nil, err }
results = append(results, ImportedLog{ Log: log, Posts: posts, }) } } default: { return nil, errors.New("Invalid importer: " + importer.String()) } }
return results, nil }
|