# To reduce the tedium of typing out /download 1, /download 2, and so on,
# here is a patch that adds support for integer sets and ranges as arguments
# to /download, /abort{d,u}, /remove{d,u} and /retry. After the patch you
# can address multiple list items like so: /download 1-10,13,17,29-31.
# A more generic solution might be a /select command with the same syntax,
# and a corresponding key to select or unselect the currently highlighted
# item. Think message tagging in mutt.
#
|
|
|
|
| 4 | 4 | import os |
| 5 | 5 | import threading |
| 6 | 6 | import curses.wrapper |
| | 7 | import re |
| 7 | 8 | ## Input line |
| 8 | 9 | # :: Here we detect which keys have been pressed |
| 9 | 10 | #class CharacterParse(threading.Thread): |
| … |
… |
|
| 1117 | 1118 | return line |
| 1118 | 1119 | except Exception, e: |
| 1119 | 1120 | self.mucous.Help.Log("debug", "MouseXY: "+str(e) ) |
| 1120 | | |
| | 1121 | |
| | 1122 | def ParseIntegerSet(self, s): |
| | 1123 | trim = re.compile('(^\s+|\s+$)') |
| | 1124 | sequence = re.compile('\s*,\s*') |
| | 1125 | interval = re.compile('(\d+)\s*-\s*(\d+)') |
| | 1126 | |
| | 1127 | s = trim.sub('', s) |
| | 1128 | nums = set() |
| | 1129 | |
| | 1130 | for i in sequence.split(s): |
| | 1131 | if i.isdigit(): |
| | 1132 | nums.add(int(i)) |
| | 1133 | elif interval.match(i): |
| | 1134 | a, b = interval.match(i).groups() |
| | 1135 | for j in range(int(a), int(b)+1): |
| | 1136 | nums.add(j) |
| | 1137 | else: |
| | 1138 | return |
| | 1139 | |
| | 1140 | return nums |
| | 1141 | |
| 1121 | 1142 | ## Parse Entry box for commands |
| 1122 | 1143 | # @param self is mucous |
| 1123 | 1144 | # @param line is a text string |
| … |
… |
|
| 1817 | 1838 | |
| 1818 | 1839 | elif command in ("/download", "/downdir") and args != "": |
| 1819 | 1840 | linput = args |
| | 1841 | nums = self.ParseIntegerSet(linput) |
| | 1842 | |
| | 1843 | if nums == None: |
| | 1844 | self.mucous.Help.Log("status", "Enter an Integer or Range") |
| | 1845 | return |
| | 1846 | |
| 1820 | 1847 | if command == "/download": |
| 1821 | 1848 | dtype = "file" |
| 1822 | 1849 | elif command == "/downdir": |
| 1823 | 1850 | dtype = "dir" |
| 1824 | | if linput == None or not linput.isdigit(): |
| 1825 | | self.mucous.Help.Log("status", "Enter an Integer") |
| 1826 | | |
| 1827 | | else: |
| | 1851 | |
| | 1852 | for i in nums: |
| 1828 | 1853 | if self.mucous.mode == "search": |
| 1829 | | user, path = self.mucous.Search.GetDownloadFromNum(linput) |
| | 1854 | user, path = self.mucous.Search.GetDownloadFromNum(i) |
| 1830 | 1855 | |
| 1831 | 1856 | elif self.mucous.mode == "browse": |
| 1832 | | user, path = self.mucous.BrowseShares.GetDownloadFromNum(linput) |
| | 1857 | user, path = self.mucous.BrowseShares.GetDownloadFromNum(i) |
| 1833 | 1858 | else: |
| 1834 | 1859 | return |
| 1835 | 1860 | |
| … |
… |
|
| 1838 | 1863 | elif dtype == "dir": |
| 1839 | 1864 | self.mucous.Transfers.FolderDownload(user, path) |
| 1840 | 1865 | |
| 1841 | | |
| 1842 | 1866 | elif command == "/filter" and args != '': |
| 1843 | 1867 | |
| 1844 | 1868 | self.mucous.Search.sfilter = args |
| … |
… |
|
| 1914 | 1938 | Manage Transfers |
| 1915 | 1939 | ''' |
| 1916 | 1940 | elif command in ("/abortd", "/abortdown") and args != '': |
| 1917 | | transfer = None |
| 1918 | | if args.isdigit(): |
| 1919 | | transfer = int(args) |
| 1920 | | else: |
| 1921 | | self.mucous.Help.Log("status", "Enter an Integer") |
| 1922 | | if transfer != None: |
| | 1941 | nums = self.ParseIntegerSet(args) |
| | 1942 | |
| | 1943 | if nums == None: |
| | 1944 | self.mucous.Help.Log("status", "Enter an Integer or Range") |
| | 1945 | return |
| | 1946 | |
| | 1947 | for transfer in nums: |
| 1923 | 1948 | user, path = self.mucous.Transfers.GetDownloadFromNum(transfer) |
| 1924 | 1949 | self.mucous.Transfers.AbortDownload(user, path) |
| 1925 | 1950 | |
| 1926 | 1951 | elif command in ("/abortu", "/abortup") and args != '': |
| 1927 | | transfer = None |
| 1928 | | try: |
| 1929 | | transfer = int(args) |
| 1930 | | except: |
| 1931 | | self.mucous.Help.Log("status", "Enter an Integer") |
| 1932 | | if transfer != None: |
| | 1952 | nums = self.ParseIntegerSet(args) |
| | 1953 | |
| | 1954 | if nums == None: |
| | 1955 | self.mucous.Help.Log("status", "Enter an Integer or Range") |
| | 1956 | return |
| | 1957 | |
| | 1958 | for transfer in nums: |
| 1933 | 1959 | user, path = self.mucous.Transfers.GetUploadFromNum(transfer) |
| 1934 | 1960 | self.mucous.Transfers.AbortUpload(user, path) |
| 1935 | 1961 | |
| 1936 | 1962 | elif command in ("/removeu", "/removeup") and args != '': |
| 1937 | | transfer = None |
| 1938 | | try: |
| 1939 | | transfer = int(args) |
| 1940 | | except: |
| 1941 | | self.mucous.Help.Log("status", "Enter an Integer") |
| 1942 | | if transfer != None: |
| | 1963 | nums = self.ParseIntegerSet(args) |
| | 1964 | |
| | 1965 | if nums == None: |
| | 1966 | self.mucous.Help.Log("status", "Enter an Integer or Range") |
| | 1967 | return |
| | 1968 | |
| | 1969 | for transfer in nums: |
| 1943 | 1970 | user, path = self.mucous.Transfers.GetUploadFromNum(transfer) |
| 1944 | 1971 | self.mucous.Transfers.ClearUpload(user, path) |
| 1945 | | |
| 1946 | | |
| 1947 | 1972 | |
| 1948 | 1973 | elif command in ("/removed", "/removedown") and args != '': |
| 1949 | | transfer = None |
| 1950 | | try: |
| 1951 | | transfer = int(args) |
| 1952 | | except: |
| 1953 | | self.mucous.Help.Log("status", "Enter an Integer") |
| 1954 | | if transfer != None: |
| | 1974 | nums = self.ParseIntegerSet(args) |
| | 1975 | |
| | 1976 | if nums == None: |
| | 1977 | self.mucous.Help.Log("status", "Enter an Integer or Range") |
| | 1978 | return |
| | 1979 | |
| | 1980 | for transfer in nums: |
| 1955 | 1981 | user, path = self.mucous.Transfers.GetDownloadFromNum(transfer) |
| 1956 | 1982 | self.mucous.Transfers.ClearDownload(user, path) |
| 1957 | | |
| 1958 | 1983 | |
| 1959 | 1984 | elif command == "/retry" and args != '': |
| 1960 | | transfer = None |
| 1961 | | try: |
| 1962 | | transfer = int(args) |
| 1963 | | except: |
| 1964 | | self.mucous.Help.Log("status", "Enter an Integer") |
| 1965 | | if transfer != None: |
| | 1985 | nums = self.ParseIntegerSet(args) |
| | 1986 | |
| | 1987 | if nums == None: |
| | 1988 | self.mucous.Help.Log("status", "Enter an Integer or Range") |
| | 1989 | return |
| | 1990 | |
| | 1991 | for transfer in nums: |
| 1966 | 1992 | user, path = self.mucous.Transfers.GetDownloadFromNum(transfer) |
| 1967 | 1993 | self.mucous.Transfers.RetryDownload(user, path) |
| 1968 | 1994 | |