// NewChatLog instantiates chat logs... func NewChatLog(path string) (*ChatLog, error) { dir := filepath.Dir(path) if _, err := os.Stat(dir); err != nil { err := os.MkdirAll(dir, 0755) if err != nil { return nil, err } } if _, err := common.UncompressFile(path); !os.IsNotExist(err) && err != nil { log.Printf("error reading log %s %s", path, err) } f, err := os.OpenFile(path, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644) if err != nil { return nil, err } nicks := common.NickList{} common.ReadNickList(nicks, nickPath(path)) return &ChatLog{ f: f, nicks: nicks, modified: time.Now(), }, nil }
// UsersHandle channel index func UsersHandle(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) f, err := os.Open(common.GetConfig().LogPath + "/" + vars["channel"] + "/" + vars["month"]) if err != nil { serveError(w, ErrNotFound) return } files, err := f.Readdir(0) if err != nil { serveError(w, err) return } nicks := common.NickList{} for _, file := range files { if NicksExtension.MatchString(file.Name()) { common.ReadNickList(nicks, common.GetConfig().LogPath+"/"+vars["channel"]+"/"+vars["month"]+"/"+file.Name()) } } names := make([]string, 0, len(nicks)) for nick := range nicks { names = append(names, nick+".txt") } sort.Sort(handysort.Strings(names)) serveDirIndex(w, []string{vars["channel"], vars["month"], "userlogs"}, names) }
func readNicks() error { if len(os.Args) < 3 { return errors.New("not enough args") } path := os.Args[2] if regexp.MustCompile("\\.nicks\\.lz4$").MatchString(path) { nicks := common.NickList{} if err := common.ReadNickList(nicks, path); err != nil { return err } for nick := range nicks { fmt.Println(nick) } } else { return errors.New("invalid file") } return nil }