Browse Source

allow browsing dirs as well, make the displayed list work better

main
John-Mark Gurney 2 years ago
parent
commit
ab7d88f6d3
1 changed files with 57 additions and 13 deletions
  1. +57
    -13
      ui/medashare/cli.py

+ 57
- 13
ui/medashare/cli.py View File

@@ -1003,20 +1003,40 @@ def cmd_hosts(options, persona, objstr, cache):

printhost(i)

def genstartstop(cnt, idx):
idx = min(idx, cnt - 10)
idx = max(0, idx)

maxstart = max(0, cnt - 20)

startidx = min(max(0, idx - 10), maxstart)
endidx = min(cnt, startidx + 20)

return startidx, endidx

def getnextfile(files, idx):
# original data incase of abort
origfiles = files
origidx = idx

maxstart = max(0, len(files) - 10)
idx = min(maxstart, idx)
# current selection (last file or dir)
curselidx = origidx

currentcnt = None

while True:
startidx = min(max(10, idx - 10), maxstart)
_debprint(len(files), startidx)
subset = files[startidx:min(len(files), idx + 10)]
selfile = -1 if origidx < startidx or origidx >= startidx + \
20 else origidx - startidx
if len(files) != currentcnt:
currentcnt = len(files)
maxidx = max(0, currentcnt - 10)
idx = min(maxidx, idx)

startidx, endidx = genstartstop(currentcnt, idx)
subset = files[startidx:endidx]
selfile = -1 if curselidx < startidx or curselidx >= startidx + \
20 else curselidx - startidx
print('%2d) Parent directory' % 0)
for i, f in enumerate(subset):
print('%2d)%1s%s' % (i + 1, '*' if i == selfile else '', repr(str(f))))
print('%2d)%1s%s%s' % (i + 1, '*' if i == selfile else '', repr(str(f)), '/' if f.is_dir() else ''))

print('P) Previous page')
print('N) Next page')
@@ -1025,13 +1045,13 @@ def getnextfile(files, idx):
inp = sys.stdin.readline().strip()

if inp.lower() == 'p':
idx = max(10, idx - 19)
idx = max(0, idx - 19)
continue
if inp.lower() == 'n':
idx = min(maxstart, idx + 19)
idx = min(currentcnt - 1, idx + 19)
continue
if inp.lower() == 'a':
return origidx
return origfiles, origidx

try:
inp = int(inp)
@@ -1039,11 +1059,23 @@ def getnextfile(files, idx):
print('Invalid selection.')
continue

if inp == 0:
curdir = files[idx].parent
files = sorted(files[idx].parent.parent.iterdir())
idx = curselidx = files.index(curdir)
continue
if inp < 1 or inp > len(subset):
print('Invalid selection.')
continue

return startidx - 1 + inp
newidx = startidx - 1 + inp

if files[newidx].is_dir():
files = sorted(files[newidx].iterdir())
curselidx = idx = 0
continue

return files, newidx

def checkforfile(objstr, curfile, ask=False):
try:
@@ -1144,7 +1176,7 @@ def cmd_interactive(options, persona, objstr, cache):
idx = min(len(files) - 1, idx + 1)
continue
if inp == '3':
idx = getnextfile(files, idx)
files, idx = getnextfile(files, idx)
continue
if inp == '4':
files = sorted(curfile.parent.iterdir())
@@ -1526,6 +1558,18 @@ class _TestCases(unittest.TestCase):

os.chdir(self.oldcwd)

def test_genstartstop(self):
self.assertEqual(genstartstop(5, 0), (0, 5))
self.assertEqual(genstartstop(5, 1), (0, 5))
self.assertEqual(genstartstop(5, 4), (0, 5))
self.assertEqual(genstartstop(25, 1), (0, 20))
self.assertEqual(genstartstop(25, 20), (5, 25))
self.assertEqual(genstartstop(25, 24), (5, 25))
self.assertEqual(genstartstop(124, 1), (0, 20))
self.assertEqual(genstartstop(124, 53), (43, 63))
self.assertEqual(genstartstop(124, 120), (104, 124))
self.assertEqual(genstartstop(124, 124), (104, 124))

def test_fileobject(self):
os.chdir(self.tempdir)



Loading…
Cancel
Save