import React, { Component } from "react"; import ReactDOM from "react-dom"; import { Link } from 'react-router-dom' import SystemCard from "../System/SystemCard"; import "./Main.css"; import { Button, Card, Container, Divider, Grid, Header, Icon, Image, List, Menu, Responsive, Segment, Sidebar, Transition, Visibility, } from 'semantic-ui-react' /* eslint-disable react/no-multi-comp */ /* Heads up! HomepageHeading uses inline styling, however it's not the best practice. Use CSS or styled components for * such things. */ const HomepageHeading = ({ mobile }) => (
) var site_name = process.env['SITE_NAME'] != null ? process.env['SITE_NAME'] : "OpenMHz"; /* HomepageHeading.propTypes = { mobile: PropTypes.bool, } */ /* Heads up! * Neither Semantic UI nor Semantic UI React offer a responsive navbar, however, it can be implemented easily. * It can be more complicated, but you can create really flexible markup. */ class DesktopContainer extends Component { state = {} hideFixedMenu = () => this.setState({ fixed: false }) showFixedMenu = () => this.setState({ fixed: true }) render() { const { children } = this.props const { fixed } = this.state return (
{site_name}
Listen About
{children}
) } } /* DesktopContainer.propTypes = { children: PropTypes.node, } */ class MobileContainer extends Component { state = {} handlePusherClick = () => { const { sidebarOpened } = this.state if (sidebarOpened) this.setState({ sidebarOpened: false }) } handleToggle = () => this.setState({ sidebarOpened: !this.state.sidebarOpened }) render() { const { children } = this.props const { sidebarOpened } = this.state return ( Home Systems About
{site_name}
{children}
) } } /* MobileContainer.propTypes = { children: PropTypes.node, } */ const ResponsiveContainer = ({ children }) => (
{children} {children}
) // ---------------------------------------------------- const requestMessageStyle = { color: "red" }; function SystemList(props) { const systems = props.systems; const listItems = numbers.map((number) =>
  • {number}
  • ); return (
      {listItems}
    ); } // ---------------------------------------------------- class Main extends Component { constructor(props) { super(props); this.advanceSystem = this.advanceSystem.bind(this); var activeSystems = [] if (props.system) { activeSystems = props.system.items.filter(system =>{ if (system.active) {return true} return false; }); } this.state = { duration: 500, visible: true, currentSystem: 0, activeSystems} } handleChange = (e, { name, value }) => this.setState({ [name]: value }) handleVisibility = () => this.setState({ visible: !this.state.visible }) advanceSystem() { var currentSystem = this.state.currentSystem + 1; if (currentSystem > this.state.activeSystems.length) { currentSystem = 0; } this.setState({ visible: !this.state.visible, currentSystem }); } componentWillUpdate(nextProps) { if (nextProps.system.items && (nextProps.system.items !== this.props.system.items)) { const activeSystems = nextProps.system.items.filter(system =>{ if (system.active) {return true} return false; }); this.setState({activeSystems}); } } componentDidMount() { this.props.fetchSystems(); this.interval = setInterval(() => this.advanceSystem(), 3000); } componentWillUnmount() { clearInterval(this.interval); } //https://stackoverflow.com/questions/36559661/how-can-i-dispatch-from-child-components-in-react-redux //https://stackoverflow.com/questions/42597602/react-onclick-pass-event-with-parameter render() { const system = this.state.activeSystems[this.state.currentSystem]; var clientCount = ""; var callAvg = ""; if (system) { if (system.callAvg) { callAvg = Math.round( system.callAvg * 10) / 10 + " call/min avg" } if (system.clientCount == 1 ) { clientCount = "1 listener"; } else if (system.clientCount > 1 ) { clientCount = system.clientCount + " listeners" } } return (
    { system && ( this.props.changeUrl("/system/" + system.shortName)}/> )}
    All The Calls

    Every call, on every talkgroup is recorded

    Go back in time

    Missed a call? Not a problem, everything is archived!

    Don't just scan, hear it all!

    Most large cities use trunked radio systems to get the most use out of their assigned radio spectrum. With trunked systems, the transmission are constantly hopping to different frequencies. Using a cheap Software Defined Radio (SDR), it is possible capture all of the transmission on a system. Instead of scanning to a single frequency, SDR capturea wide swathes of spectrum, covering all of the frequencies a system could use.

    Get Involved
    Want to record your local radio system?

    Join us! Record a local radio system and share it with the world. If you have a spare computer, it is easy to get started. With a $25 SDR or two, you can capture an entire system. It does take a little bit of work to get things setup, but we are here to help and answer questions.

    The End
    ); } } export default Main;