summaryrefslogtreecommitdiffstats
path: root/abs/core/linhes-scripts
diff options
context:
space:
mode:
Diffstat (limited to 'abs/core/linhes-scripts')
-rw-r--r--abs/core/linhes-scripts/PKGBUILD8
-rw-r--r--abs/core/linhes-scripts/find_orphans.py238
2 files changed, 3 insertions, 243 deletions
diff --git a/abs/core/linhes-scripts/PKGBUILD b/abs/core/linhes-scripts/PKGBUILD
index 147a035..d376bbb 100644
--- a/abs/core/linhes-scripts/PKGBUILD
+++ b/abs/core/linhes-scripts/PKGBUILD
@@ -3,7 +3,7 @@
pkgname=linhes-scripts
pkgver=7
-pkgrel=51
+pkgrel=52
pkgdesc="Various scripts that help to make LinHES, LinHES."
arch=('i686' 'x86_64')
license=('GPL2')
@@ -47,7 +47,6 @@ dtheme.sh
xwin_find.sh
upgrade_screen_rc
upgrade_linhes_script.sh
-find_orphans.py
acl_fix_fstab.py
stop_xss.sh
myth2mkv
@@ -56,7 +55,7 @@ ripD_eject.sh
get_airplay_key
)
-build() {
+package() {
cd ${srcdir}
install -d ${pkgdir}/usr/LH/bin
install -d ${pkgdir}/usr/LH/etc
@@ -68,7 +67,7 @@ build() {
cp run-limit-mythcommflag ${pkgdir}/etc/sv/limit-mythcommflag/run
mkdir -p ${pkgdir}/etc/logrotate.d/
# cp pause_mythcommflag ${pkgdir}/etc/logrotate.d/
- install -m644 -D pause_mythcommflag $startdir/pkg/etc/logrotate.d/pause_mythcommflag
+ install -m644 -D pause_mythcommflag ${pkgdir}/etc/logrotate.d/pause_mythcommflag
}
md5sums=('47a66238d95259d75c9c5cbcbb6da19f'
@@ -106,7 +105,6 @@ md5sums=('47a66238d95259d75c9c5cbcbb6da19f'
'a94fe6d980f4b810f2e2ae5352084b39'
'974c137d3fcb85942ba8945a1bc815fe'
'f454faeabfa153b10389a9a3bfd51c4a'
- '34fc1f58ad1eabf4eff4979d420760c0'
'cc9cdabcdfc969c2829b58c0e513488c'
'54a478660d0f8150fe10112a9ecf2740'
'503df99218373dfc75e7e7f5e449a44e'
diff --git a/abs/core/linhes-scripts/find_orphans.py b/abs/core/linhes-scripts/find_orphans.py
deleted file mode 100644
index cdc03d4..0000000
--- a/abs/core/linhes-scripts/find_orphans.py
+++ /dev/null
@@ -1,238 +0,0 @@
-#!/usr/bin/env python2
-
-from MythTV import MythDB, MythBE, Recorded, MythError
-from socket import timeout
-
-import os
-import sys
-
-def human_size(s):
- s = float(s)
- o = 0
- while s > 1000:
- s /= 1000
- o += 1
- return str(round(s,1))+('B ','KB','MB','GB')[o]
-
-class File( str ):
- def __new__(self, host, group, path, name, size):
- return str.__new__(self, name)
- def __init__(self, host, group, path, name, size):
- self.host = host
- self.group = group
- self.path = path
- self.size = int(size)
- def pprint(self):
- name = u'%s: %s' % (self.host, os.path.join(self.path, self))
- print u' {0:<90}{1:>8}'.format(name, human_size(self.size))
- def delete(self):
- be = MythBE(self.host, db=DB)
- be.deleteFile(self, self.group)
-
-class MyRecorded( Recorded ):
- _table = 'recorded'
- def pprint(self):
- name = u'{0.hostname}: {0.title}'.format(self)
- if self.subtitle:
- name += u' - '+self.subtitle
- print u' {0:<70}{1:>28}'.format(name,self.basename)
-
-def printrecs(title, recs):
- print title
- for rec in sorted(recs, key=lambda x: x.title):
- rec.pprint()
- print u'{0:>88}{1:>12}'.format('Count:',len(recs))
-
-def printfiles(title, files):
- print title
- for f in sorted(files, key=lambda x: x.path):
- f.pprint()
- size = sum([f.size for f in files])
- print u'{0:>88}{1:>12}'.format('Total:',human_size(size))
-
-def populate(host=None):
- unfiltered = []
- kwargs = {'livetv':True}
- if host:
- with DB as c:
- c.execute("""SELECT count(1) FROM settings
- WHERE hostname=%s AND value=%s""",
- (host, 'BackendServerIP'))
- if c.fetchone()[0] == 0:
- raise Exception('Invalid hostname specified on command line.')
- hosts = [host]
- kwargs['hostname'] = host
- else:
- with DB as c:
- c.execute("""SELECT hostname FROM settings
- WHERE value='BackendServerIP'""")
- hosts = [r[0] for r in c.fetchall()]
- for host in hosts:
- for sg in DB.getStorageGroup():
- if sg.groupname in ('Videos','Banners','Coverart',\
- 'Fanart','Screenshots','Trailers'):
- continue
- try:
- dirs,files,sizes = BE.getSGList(host, sg.groupname, sg.dirname)
- for f,s in zip(files,sizes):
- newfile = File(host, sg.groupname, sg.dirname, f, s)
- if newfile not in unfiltered:
- unfiltered.append(newfile)
- except:
- pass
-
- recs = list(DB.searchRecorded(**kwargs))
-
- zerorecs = []
- orphvids = []
- for rec in list(recs):
- if rec.basename in unfiltered:
- recs.remove(rec)
- i = unfiltered.index(rec.basename)
- f = unfiltered.pop(i)
- if f.size < 1024:
- zerorecs.append(rec)
- name = rec.basename.rsplit('.',1)[0]
- for f in list(unfiltered):
- if name in f:
- unfiltered.remove(f)
- for f in list(unfiltered):
- if not (f.endswith('.mpg') or f.endswith('.nuv')):
- continue
- orphvids.append(f)
- unfiltered.remove(f)
-
- orphimgs = []
- for f in list(unfiltered):
- if not f.endswith('.png'):
- continue
- orphimgs.append(f)
- unfiltered.remove(f)
-
- dbbackup = []
- for f in list(unfiltered):
- if 'sql' not in f:
- continue
- dbbackup.append(f)
- unfiltered.remove(f)
-
- return (recs, zerorecs, orphvids, orphimgs, dbbackup, unfiltered)
-
-def delete_recs(recs):
- printrecs('The following recordings will be deleted', recs)
- print 'Are you sure you want to continue?'
- try:
- res = raw_input('> ')
- while True:
- if res == 'yes':
- for rec in recs:
- rec.delete(True, True)
- break
- elif res == 'no':
- break
- else:
- res = raw_input("'yes' or 'no' > ")
- except MythError:
- name = u'{0.hostname}: {0.title}'.format(rec)
- if rec.subtitle:
- name += ' - '+rec.subtitle
- print "Warning: Failed to delete '" + name + "'"
- except KeyboardInterrupt:
- pass
- except EOFError:
- sys.exit(0)
-
-def delete_files(files):
- printfiles('The following files will be deleted', files)
- print 'Are you sure you want to continue?'
- try:
- res = raw_input('> ')
- while True:
- if res == 'yes':
- for f in files:
- f.delete()
- break
- elif res == 'no':
- break
- else:
- res = raw_input("'yes' or 'no' > ")
- except KeyboardInterrupt:
- pass
- except EOFError:
- sys.exit(0)
-
-def main(host=None):
- while True:
- recs, zerorecs, orphvids, orphimgs, dbbackup, unfiltered = populate(host)
-
- if len(recs):
- printrecs("Recordings with missing files", recs)
- if len(zerorecs):
- printrecs("Zero byte recordings", zerorecs)
- if len(orphvids):
- printfiles("Orphaned video files", orphvids)
- if len(orphimgs):
- printfiles("Orphaned snapshots", orphimgs)
- if len(dbbackup):
- printfiles("Database backups", dbbackup)
- if len(unfiltered):
- printfiles("Other files", unfiltered)
- if not printOnly:
- opts = []
- if len(recs):
- opts.append(['Delete orphaned recording entries', delete_recs, recs])
- if len(zerorecs):
- opts.append(['Delete zero byte recordings', delete_recs, zerorecs])
- if len(orphvids):
- opts.append(['Delete orphaned video files', delete_files, orphvids])
- if len(orphimgs):
- opts.append(['Delete orphaned snapshots', delete_files, orphimgs])
- if len(unfiltered):
- opts.append(['Delete other files', delete_files, unfiltered])
- opts.append(['Refresh list', None, None])
- print 'Please select from the following'
- for i, opt in enumerate(opts):
- print ' {0}. {1}'.format(i+1, opt[0])
-
- try:
- inner = True
- res = raw_input('> ')
- while inner:
- try:
- res = int(res)
- except:
- res = raw_input('input number. ctrl-c to exit > ')
- continue
- if (res <= 0) or (res > len(opts)):
- res = raw_input('input number within range > ')
- continue
- break
- opt = opts[res-1]
- if opt[1] is None:
- continue
- else:
- opt[1](opt[2])
-
- except KeyboardInterrupt:
- break
- except EOFError:
- sys.exit(0)
- else:
- sys.exit(0)
-DB = MythDB()
-BE = MythBE(db=DB)
-DB.searchRecorded.handler = MyRecorded
-DB.searchRecorded.dbclass = MyRecorded
-
-if __name__ == '__main__':
- global printOnly
- if "--printonly" in sys.argv :
- printOnly=True
- else:
- printOnly=False
-
-
- if len(sys.argv) == 2 and sys.argv[1] != "--printonly":
- main(sys.argv[1])
- else:
- main()