Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
S
SHMCamStudio
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
SexHackMe
SHMCamStudio
Commits
9dde9c07
Commit
9dde9c07
authored
Nov 09, 2024
by
robocoders.ai
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Implemented configuration management and improved error handling/logging
parent
bde2b83d
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
38 additions
and
51 deletions
+38
-51
config.ini
config.ini
+20
-0
shmcamstudio
shmcamstudio
+18
-51
No files found.
config.ini
0 → 100644
View file @
9dde9c07
[General]
log_file
=
/tmp/streaming_control.log
log_level
=
INFO
[Web]
stream_url
=
https://192.168.42.1/HLS/record/Live.m3u8
port
=
5000
[Commands]
private_stefy
=
smblur_private_stefy
private_leeloo
=
smblur_private_leeloo
private_jasmin
=
smblur_private_jasmin
private_other
=
smblur_private
toggle_stefy
=
smblur_stefy
toggle_leeloo
=
smblur_leeloo
toggle_jasmin
=
smblur_jasmin
toggle_others
=
smblur_shine
tease
=
smblur_tease
tease_all
=
smblur_teaseall
open
=
smblur_clean
shmcamstudio
View file @
9dde9c07
...
@@ -13,6 +13,7 @@
...
@@ -13,6 +13,7 @@
#
#
# You should have received a copy of the GNU General Public License
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
# along with this program. If not, see <https://www.gnu.org/licenses/>.
import
argparse
import
argparse
import
os
import
os
import
sys
import
sys
...
@@ -20,7 +21,9 @@ import signal
...
@@ -20,7 +21,9 @@ import signal
import
threading
import
threading
import
webbrowser
import
webbrowser
import
logging
import
logging
from
logging.handlers
import
RotatingFileHandler
import
socket
import
socket
import
configparser
from
flask
import
Flask
,
render_template
,
request
from
flask
import
Flask
,
render_template
,
request
import
subprocess
import
subprocess
...
@@ -28,12 +31,19 @@ import tkinter as tk
...
@@ -28,12 +31,19 @@ import tkinter as tk
from
tkinter
import
font
as
tkFont
from
tkinter
import
font
as
tkFont
import
vlc
import
vlc
# Read configuration
config
=
configparser
.
ConfigParser
()
config
.
read
(
'config.ini'
)
# Setup logging
# Setup logging
log_file
=
config
.
get
(
'General'
,
'log_file'
,
fallback
=
'/tmp/streaming_control.log'
)
log_level
=
config
.
get
(
'General'
,
'log_level'
,
fallback
=
'INFO'
)
logging
.
basicConfig
(
logging
.
basicConfig
(
level
=
logging
.
INFO
,
level
=
getattr
(
logging
,
log_level
)
,
format
=
'
%(asctime)
s -
%(levelname)
s -
%(message)
s'
,
format
=
'
%(asctime)
s -
%(levelname)
s -
%(message)
s'
,
handlers
=
[
handlers
=
[
logging
.
FileHandler
(
'/tmp/streaming_control.log'
),
RotatingFileHandler
(
log_file
,
maxBytes
=
1024
*
1024
,
backupCount
=
5
),
logging
.
StreamHandler
(
sys
.
stdout
)
logging
.
StreamHandler
(
sys
.
stdout
)
]
]
)
)
...
@@ -43,24 +53,7 @@ logger = logging.getLogger(__name__)
...
@@ -43,24 +53,7 @@ logger = logging.getLogger(__name__)
flask_app
=
Flask
(
__name__
)
flask_app
=
Flask
(
__name__
)
# Command Mapping
# Command Mapping
COMMANDS
=
{
COMMANDS
=
dict
(
config
[
'Commands'
])
# Private commands
'private_stefy'
:
'smblur_private_stefy'
,
'private_leeloo'
:
'smblur_private_leeloo'
,
'private_jasmin'
:
'smblur_private_jasmin'
,
'private_other'
:
'smblur_private'
,
# Open/Close commands
'toggle_stefy'
:
'smblur_stefy'
,
'toggle_leeloo'
:
'smblur_leeloo'
,
'toggle_jasmin'
:
'smblur_jasmin'
,
'toggle_others'
:
'smblur_shine'
,
# Special commands
'tease'
:
'smblur_tease'
,
'tease_all'
:
'smblur_teaseall'
,
'open'
:
'smblur_clean'
}
def
run_command
(
command
):
def
run_command
(
command
):
try
:
try
:
...
@@ -88,7 +81,7 @@ def execute():
...
@@ -88,7 +81,7 @@ def execute():
@
flask_app
.
route
(
'/stream'
)
@
flask_app
.
route
(
'/stream'
)
def
stream
():
def
stream
():
stream_url
=
"https://192.168.42.1/HLS/record/Live.m3u8"
stream_url
=
config
.
get
(
'Web'
,
'stream_url'
,
fallback
=
"https://192.168.42.1/HLS/record/Live.m3u8"
)
return
render_template
(
'stream.html'
,
stream_url
=
stream_url
)
return
render_template
(
'stream.html'
,
stream_url
=
stream_url
)
def
create_daemon
():
def
create_daemon
():
...
@@ -100,7 +93,7 @@ def create_daemon():
...
@@ -100,7 +93,7 @@ def create_daemon():
# Exit first parent
# Exit first parent
sys
.
exit
(
0
)
sys
.
exit
(
0
)
except
OSError
as
err
:
except
OSError
as
err
:
sys
.
stderr
.
write
(
f
'Fork #1 failed: {err}
\n
'
)
logger
.
error
(
f
'Fork #1 failed: {err}
'
)
sys
.
exit
(
1
)
sys
.
exit
(
1
)
# Decouple from parent environment
# Decouple from parent environment
...
@@ -115,7 +108,7 @@ def create_daemon():
...
@@ -115,7 +108,7 @@ def create_daemon():
# Exit from second parent
# Exit from second parent
sys
.
exit
(
0
)
sys
.
exit
(
0
)
except
OSError
as
err
:
except
OSError
as
err
:
sys
.
stderr
.
write
(
f
'Fork #2 failed: {err}
\n
'
)
logger
.
error
(
f
'Fork #2 failed: {err}
'
)
sys
.
exit
(
1
)
sys
.
exit
(
1
)
# Redirect standard file descriptors
# Redirect standard file descriptors
...
@@ -142,39 +135,13 @@ def create_daemon():
...
@@ -142,39 +135,13 @@ def create_daemon():
# Exit the current process
# Exit the current process
sys
.
exit
(
0
)
sys
.
exit
(
0
)
except
Exception
as
err
:
except
Exception
as
err
:
sys
.
stderr
.
write
(
f
'Failed to create background process: {err}
\n
'
)
logger
.
error
(
f
'Failed to create background process: {err}
'
)
sys
.
exit
(
1
)
sys
.
exit
(
1
)
else
:
else
:
sys
.
stderr
.
write
(
f
'Unsupported operating system: {os.name}
\n
'
)
logger
.
error
(
f
'Unsupported operating system: {os.name}
'
)
sys
.
exit
(
1
)
sys
.
exit
(
1
)
# Decouple from parent environment
os
.
chdir
(
'/'
)
os
.
setsid
()
os
.
umask
(
0
)
# Second fork
try
:
pid
=
os
.
fork
()
if
pid
>
0
:
# Exit second parent
sys
.
exit
(
0
)
except
OSError
as
err
:
sys
.
stderr
.
write
(
f
'Fork #2 failed: {err}
\n
'
)
sys
.
exit
(
1
)
# Redirect standard file descriptors
sys
.
stdout
.
flush
()
sys
.
stderr
.
flush
()
si
=
open
(
os
.
devnull
,
'r'
)
so
=
open
(
os
.
devnull
,
'a+'
)
se
=
open
(
os
.
devnull
,
'a+'
)
os
.
dup2
(
si
.
fileno
(),
sys
.
stdin
.
fileno
())
os
.
dup2
(
so
.
fileno
(),
sys
.
stdout
.
fileno
())
os
.
dup2
(
se
.
fileno
(),
sys
.
stderr
.
fileno
())
def
check_port_available
(
port
):
def
check_port_available
(
port
):
"""Check if a port is available"""
"""Check if a port is available"""
with
socket
.
socket
(
socket
.
AF_INET
,
socket
.
SOCK_STREAM
)
as
s
:
with
socket
.
socket
(
socket
.
AF_INET
,
socket
.
SOCK_STREAM
)
as
s
:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment