diff --git a/internal/irc/handler.go b/internal/irc/handler.go index d4fef7a..140b0bb 100644 --- a/internal/irc/handler.go +++ b/internal/irc/handler.go @@ -30,10 +30,17 @@ type channelHealth struct { lastAnnounce time.Time } +// SetLastAnnounce set last announce to now func (h *channelHealth) SetLastAnnounce() { h.lastAnnounce = time.Now() } +// SetMonitoring set monitoring and time +func (h *channelHealth) SetMonitoring() { + h.monitoring = true + h.monitoringSince = time.Now() +} + type Handler struct { network *domain.IrcNetwork filterService filter.Service @@ -48,7 +55,6 @@ type Handler struct { cancel context.CancelFunc lastPing time.Time - lastAnnounce time.Time connected bool connectedSince time.Time // tODO disconnectedTime @@ -366,8 +372,6 @@ func (s *Handler) onMessage(msg *irc.Message) error { cleanedMsg := cleanMessage(message) log.Debug().Msgf("%v: %v %v: %v", s.network.Server, *channel, *announcer, cleanedMsg) - s.setLastAnnounce() - if err := s.sendToAnnounceProcessor(*channel, cleanedMsg); err != nil { log.Error().Stack().Err(err).Msgf("could not queue line: %v", cleanedMsg) return err @@ -440,8 +444,7 @@ func (s *Handler) HandleJoinChannel(channel string, password string) error { // only set values if channel is found in map v, ok := s.channelHealth[channel] if ok { - v.monitoring = true - v.monitoringSince = time.Now() + v.SetMonitoring() } return nil @@ -607,6 +610,7 @@ func (s *Handler) handlePing(msg *irc.Message) error { return nil } +// check if announcer is one from the list in the definition func (s *Handler) isValidAnnouncer(nick string) bool { _, ok := s.validAnnouncers[nick] if !ok { @@ -616,6 +620,7 @@ func (s *Handler) isValidAnnouncer(nick string) bool { return true } +// check if channel is one from the list in the definition func (s *Handler) isValidChannel(channel string) bool { _, ok := s.validChannels[channel] if !ok { @@ -625,22 +630,6 @@ func (s *Handler) isValidChannel(channel string) bool { return true } -func (s *Handler) setLastAnnounce() { - s.lastAnnounce = time.Now() -} - -func (s *Handler) GetLastAnnounce() time.Time { - return s.lastAnnounce -} - -//func (s *Handler) setConnectedSince() { -// s.network.ConnectedSince = time.Now() -//} -// -//func (s *Handler) GetConnectedSince() time.Time { -// return s.lastAnnounce -//} - func (s *Handler) setLastPing() { s.lastPing = time.Now() } @@ -649,10 +638,6 @@ func (s *Handler) GetLastPing() time.Time { return s.lastPing } -func (s *Handler) GetChannelHealth() map[string]*channelHealth { - return s.channelHealth -} - // irc line can contain lots of extra stuff like color so lets clean that func cleanMessage(message string) string { var regexMessageClean = `\x0f|\x1f|\x02|\x03(?:[\d]{1,2}(?:,[\d]{1,2})?)?` diff --git a/web/src/screens/Releases.tsx b/web/src/screens/Releases.tsx index a46de84..d49b2e2 100644 --- a/web/src/screens/Releases.tsx +++ b/web/src/screens/Releases.tsx @@ -140,7 +140,7 @@ export function ReleaseStatusCell({ value, column, row }: ReleaseStatusCellProps } return (
- {value.map(v =>
{statusMap[v.status]}
)} + {value.map((v, idx) =>
{statusMap[v.status]}
)}
) } diff --git a/web/src/screens/settings/Irc.tsx b/web/src/screens/settings/Irc.tsx index 61cf4bc..0101818 100644 --- a/web/src/screens/settings/Irc.tsx +++ b/web/src/screens/settings/Irc.tsx @@ -2,21 +2,56 @@ import { useEffect } from "react"; import { IrcNetworkAddForm, IrcNetworkUpdateForm } from "../../forms"; import { useToggle } from "../../hooks/hooks"; import { useQuery } from "react-query"; -import { Switch } from "@headlessui/react"; -import { classNames } from "../../utils"; import { EmptySimple } from "../../components/emptystates"; import APIClient from "../../api/APIClient"; +import { formatDistanceToNowStrict, formatISO9075 } from "date-fns"; interface IrcNetwork { id: number; name: string; enabled: boolean; addr: string; + server: string; + port: string; nick: string; username: string; realname: string; pass: string; - // connect_commands: string; + connected: boolean; + connected_since: string; + tls: boolean; + nickserv: { + account: string; + } + channels: Channel[] +} + +interface Channel { + id: number; + enabled: boolean; + name: string; + password: string; + detached: boolean; + monitoring: boolean; + monitoring_since: string; + last_announce: string; +} + +function IsEmptyDate(date: string) { + if (date !== "0001-01-01T00:00:00Z") { + return formatDistanceToNowStrict( + new Date(date), + { addSuffix: true } + ) + } + return "n/a" +} + +function simplifyDate(date: string) { + if (date !== "0001-01-01T00:00:00Z") { + return formatISO9075(new Date(date)) + } + return "n/a" } function IrcSettings() { @@ -25,7 +60,7 @@ function IrcSettings() { useEffect(() => { }, []); - const { data } = useQuery('networks', APIClient.irc.getNetworks, + const { data } = useQuery('networks', APIClient.irc.getNetworks, { refetchOnWindowFocus: false } @@ -40,7 +75,7 @@ function IrcSettings() {

IRC

- IRC networks and channels. + IRC networks and channels. Click on a network to view channel status.

@@ -54,106 +89,122 @@ function IrcSettings() {
-
- {data && data.length > 0 ? -
-
-
- - - - - - - - - - - - {data && data.map((network: IrcNetwork, idx) => ( - - ))} - -
- Enabled - - Network - - Server - - Nick - - Edit -
-
-
-
- : - } -
+ {data && data.length > 0 ? +
+
    +
  1. + {/*
    Enabled
    */} +
    Network
    +
    Server
    +
    Nick
    +
  2. + + {data && data.map((network: IrcNetwork, idx) => ( + + ))} +
+
+ : } ) } -const ListItem = ({ idx, network }: any) => { +interface LiItemProps { + idx: number; + network: IrcNetwork; +} + +const LiItem = ({ idx, network }: LiItemProps) => { const [updateIsOpen, toggleUpdate] = useToggle(false) + const [edit, toggleEdit] = useToggle(false); return ( - - - - - Enable -