File: code_idjcmon.html

package info (click to toggle)
idjc 0.9.10-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 10,796 kB
  • sloc: python: 21,706; ansic: 16,528; sh: 5,639; makefile: 206; sed: 16
file content (181 lines) | stat: -rw-r--r-- 7,118 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>

<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta name="description" content="Internet DJ Console (IDJC) is a Shoutcast/Icecast internet radio client incorporating features for live radio show production." />
<meta name="keywords" xml:lang="en" content="idjc dj shoutcast icecast radio linux gtk live recorded voip irc" />
<link rel="shortcut icon" href="favicon.png" type="application/png" />
<link rel="stylesheet" href="style.css" type="text/css" />
<!--[if lte IE 7]><link rel="stylesheet" href="style_ie.css" type="text/css" /><![endif]-->
<title>Internet DJ Console Homepage</title>

<script type="text/javascript">
// Change the title text and highlight a navigation bar option.
function ui(title, menu) {
  document.getElementById('title').innerHTML = title;
  s = document.getElementById(menu).style;
  s.color = "#F70";
  s.fontWeight = "bold";
  s.textDecoration = "underline";
}
</script>

</head>
<body>
<!-- Hidden h1 title for search engine seeding -->
<h1 class="unshown">Internet DJ Console Homepage IDJC</h1>
<table id="main-table">
 <tr><td>
            <table>
               <tr id="logo-holder">
                  <td>
                  <img src="site-logo.png" width="148" height="212" alt="website logo" title="Internet DJ Console homepage"/>
                  </td>
               </tr>
               <tr>
                  <td id="left-sidebar">
                   <h3>Contents</h3>
                   <ul id="sidebar-menu">
                    <li><a href="index.html" id="front-page-nav">Front page</a></li>
                    <li><a href="tour.html" id="tour-nav">Tour</a></li>
                    <li>
                     <ul>
                      <li><a href="tour_main.html" id="tour-main-nav">Main window</a></li>
                      <li><a href="tour_miniplayers.html" id="tour-miniplayers-nav">Mini Players</a></li>
                      <li><a href="tour_output.html" id="tour-output-nav">Output</a></li>
                      <li><a href="tour_preferences.html" id="tour-preferences-nav">Preferences</a></li>
                     </ul>
                    </li>
                    <li><a href="install.html" id="install-nav">Installation</a></li>
                    <li>
                     <ul>
                      <li><a href="install_standard.html" id="install-standard-nav">Standard</a></li>
                      <li><a href="install_build.html" id="install-build-nav">Building</a></li>
                      <li><a href="install_first_run.html" id="install-first-run-nav">First run</a></li>
                     </ul>
                    </li>
                    <li><a href="tutorials.html" id="tutorials-nav">Tutorials</a></li>
                    <li>
                     <ul>
                      <li><a href="tutorials_icecast.html" id="tutorials-icecast-nav">Icecast</a></li>
                      <li><a href="tutorials_shoutcast.html" id="tutorials-shoutcast-nav">Shoutcast</a></li>
                      <li><a href="tutorials_voip.html" id="tutorials-voip-nav">VoIP</a></li>
                      <li><a href="tutorials_jack_ports_demystified.html" id="tutorials-jackportsdemyst-nav">JACK Ports</a></li>
                      <li><a href="tutorials_secrets.html" id="tutorials-secrets-nav">Secrets</a></li>
                     </ul>
                    </li>
                    <li><a href="code.html" id="code-nav">Extra code</a></li>
                    <li>
                     <ul>
                      <li><a href="code_idjcmon.html" id="code-idjcmon-nav">idjcmon.py</a></li>
                     </ul>
                    </li>

                    <li><a href="contact.html" id="contact-nav">Contact</a></li>
                   </ul>
                  </td>
               </tr>
            </table>
     </td>
     <td>
            <table id="right-table">
               <tr>
                  <td id="top-titlebar">
                     <h2 id="title"></h2>
                  </td>
               </tr>
               <tr>
                  <td>
<script type="text/javascript">
ui('Extra code: An IDJC monitoring class', 'code-idjcmon-nav')
</script>

<p>With a little work this could be made to interface with your station's web page or with cloud services.</p>

<pre>#! /usr/bin/env python3

"""idjcmon.py demo code

This could be extended to add features to IDJC without modifying the
main source code.

Takes the profile you wish to monitor as the command line parameter.
"""

import sys

import gi
gi.require_version("GLib", "2.0")
from gi.repository import GLib
import idjcmonitor


def launch_handler(monitor, profile, pid):
    print(f"Hello to IDJC {profile} with process ID {pid}.")

def quit_handler(monitor, profile, pid):
    print(f"Goodbye to IDJC {profile} with process ID {pid}.")

def streamstate_handler(monitor, which, state, where):
    print(f"Stream {which} is {('down', 'up')[state]} "
          f"on connection {where}.")

def metadata_handler(monitor, artist, title, album, songname, filename):
    print(f"Metadata is: {artist=}, {title=}, {album=}, {filename=}")

def frozen_handler(monitor, profile, pid, frozen):
    print(f"IDJC {profile} with process ID {pid} is "
          f"{('running', 'stopped or frozen ')[frozen]}")

def effect_started_handler(monitor, title, pathname, player):
    print(f"Effect player {player} is playing {title}")

def effect_stopped_handler(monitor, player):
    print(f"Effect player {player} has stopped")

def focus_changed_handler(monitor, window_name, has_focus):
    print(f"Window '{window_name}' {('lost', 'gained')[has_focus]} keyboard focus")
    entry_mode_handler(monitor, monitor.get_property("entry-mode"))

def entry_mode_handler(monitor, entry_mode):
    hotkey_window = monitor.get_property("focus-window") is not None
    hotkeys_available = hotkey_window and not entry_mode
    print(f"{entry_mode=}")
    print(f"{hotkeys_available=}")

def stream_silence_handler(monitor, stream_silence):
    print(f"{stream_silence=}")

try:
    profile = sys.argv[1]
except IndexError:
    profile = "default"

monitor = idjcmonitor.IDJCMonitor(profile)
monitor.connect("launch", launch_handler)
monitor.connect("quit", quit_handler)
monitor.connect("streamstate-changed", streamstate_handler)
monitor.connect("metadata-changed", metadata_handler)
monitor.connect("frozen", frozen_handler)
monitor.connect("effect-started", effect_started_handler)
monitor.connect("effect-stopped", effect_stopped_handler)
monitor.connect("focus-changed", focus_changed_handler)
monitor.connect("entry-mode-changed", entry_mode_handler)
monitor.connect("stream-silence-changed", stream_silence_handler)

try:
    GLib.MainLoop().run()
except KeyboardInterrupt:
    print("Goodbye from idjcmon")
</pre>
                  </td>
               </tr>
            </table>
     </td>
 </tr>
</table>
</body>
</html>