import motionctl
import settings
+import smbctl
import update
import utils
import v4l2ctl
'@network_share_name': ui['network_share_name'],
'@network_username': ui['network_username'],
'@network_password': ui['network_password'],
- 'target_dir': ui['root_directory'],
# text overlay
'text_left': '',
else:
data['hue'] = max(1, int(round(int(ui['hue']) * 2.55)))
+ if ui['storage_device'] == 'network-share':
+ mount_point = smbctl.make_mount_point(ui['network_server'], ui['network_share_name'], ui['network_username'])
+ if ui['root_directory'].startswith('/'):
+ ui['root_directory'] = ui['root_directory'][1:]
+ data['target_dir'] = os.path.join(mount_point, ui['root_directory'])
+
+ else:
+ data['target_dir'] = ui['root_directory']
+
if ui['text_overlay']:
left_text = ui['left_text']
if left_text == 'camera-name':
ui['sunday_from'] + '-' + ui['sunday_to'])
return data
-
+
def camera_dict_to_ui(data):
usage = utils.get_disk_usage(data['target_dir'])
'network_share_name': data['@network_share_name'],
'network_username': data['@network_username'],
'network_password': data['@network_password'],
- 'root_directory': data['target_dir'],
'disk_used': disk_used,
'disk_total': disk_total,
else:
ui['hue'] = 50
+
+ if data['@storage_device'] == 'network-share':
+ mount_point = smbctl.make_mount_point(data['@network_server'], data['@network_share_name'], data['@network_username'])
+ ui['root_directory'] = data['target_dir'][len(mount_point):]
+
+ else:
+ ui['root_directory'] = data['target_dir']
text_left = data['text_left']
text_right = data['text_right']
import os
import re
import subprocess
+import time
def find_mount_cifs():
return None
-def _make_mount_point(server, share, username):
+def make_mount_point(server, share, username):
server = re.sub('[^a-zA-Z0-9]', '_', server).lower()
share = re.sub('[^a-zA-Z0-9]', '_', share).lower()
else:
mount_point = '/media/motioneye_%s_%s' % (server, share)
- logging.debug('making sure mount point "%s" exists' % mount_point)
- os.makedirs(mount_point)
-
return mount_point
+def _is_motioneye_mount(mount_point):
+ return bool(re.match('^/media/motioneye_\w+$', mount_point))
+
+
def list_mounts():
logging.debug('listing smb mounts...')
if fstype != 'cifs':
continue
+ if not _is_motioneye_mount(mount_point):
+ continue
+
match = re.match('//([^/]+)/(.+)', target)
if not match:
continue
else:
username = None
-
+
logging.debug('found smb mount "//%s/%s" at "%s"' % (server, share, mount_point))
mounts.append({
'username': username,
'mount_point': mount_point
})
-
- return mounts
-
-def is_motioneye_mount(mount_point):
- return bool(re.match('^/media/motioneye_\w+$', mount_point))
+ return mounts
def mount(server, share, username, password):
- mount_point = _make_mount_point(server, share, username)
+ mount_point = make_mount_point(server, share, username)
logging.debug('mounting "//%s/%s" at "%s"' % (server, share, mount_point))
+ logging.debug('making sure mount point "%s" exists' % mount_point)
+ os.makedirs(mount_point)
+
if username:
opts = 'username=%s,password=%s' % (username, password)
try:
subprocess.check_call('mount.cifs //%s/%s %s -o %s' % (server, share, mount_point, opts), shell=True)
- return mount_point
-
except subprocess.CalledProcessError:
logging.error('failed to mount smb share "//%s/%s" at "%s"' % (server, share, mount_point))
return False
+
+ # test to see if mount point is writable
+ try:
+ path = os.path.join(mount_point, '.motioneye_' + str(int(time.time())))
+ os.mkdir(path)
+ os.rmdir(path)
+ logging.debug('directory at "%s" is writable' % mount_point)
+
+ except:
+ logging.error('directory at "%s" is not writable' % mount_point)
+
+ return False
+
+ return mount_point
def umount(server, share, username):
- mount_point = _make_mount_point(server, share, username)
+ mount_point = make_mount_point(server, share, username)
logging.debug('unmounting "//%s/%s" from "%s"' % (server, share, mount_point))
try: