├── README.md └── interface.py /README.md: -------------------------------------------------------------------------------- 1 | "# CMDPlayer" 2 | play songs and videos from commandline with a search query. 3 | -------------------------------------------------------------------------------- /interface.py: -------------------------------------------------------------------------------- 1 | import subprocess, sys, random, os 2 | 3 | videoformats = [".mp4", ".MP4", ".avi", ".MPG", ".mpg", ".flv", ".mkv"] 4 | audioformats = [".mp3"] 5 | 6 | def removebracket(list, br, brinv): 7 | bracketlist = [] 8 | for d in list: 9 | if("(" in d and ")" in d): 10 | subbracketlist1 = d.split(br) 11 | for s in subbracketlist1: 12 | bracketlist.extend(s.split(brinv)) 13 | else: 14 | bracketlist.append(d) 15 | list = [x for x in bracketlist if x!=""] 16 | return list 17 | 18 | def removechar(list, char): 19 | charlist = [] 20 | for s in list: 21 | _sublist = s.split(char) 22 | for sub in _sublist: 23 | charlist.append(sub) 24 | return charlist 25 | 26 | def splitall(str): 27 | returnlist = [] 28 | spacelist = str.split() 29 | _list = removechar(spacelist, "_") 30 | dotlist = removechar(_list, ".") 31 | bracketlist = removebracket(dotlist, "(", ")") 32 | flbracketlist = removebracket(bracketlist, "{", "}") 33 | sqbracketlist = removebracket(flbracketlist, "[", "]") 34 | return sqbracketlist 35 | 36 | def getdiff(str1, str2): 37 | count = 0 38 | for i in range(len(str1)): 39 | if(str1[i] in str2): 40 | str2 = str2.replace(str1[i],"",1) 41 | else: 42 | count+=1 43 | count+=len(str2) 44 | return count 45 | 46 | def strdiff(str1, str2): 47 | if(len(str1)-len(str2)>3): 48 | return 10000 49 | else: 50 | return getdiff(str1, str2) 51 | 52 | def compare_strings(filename, searchname, song): 53 | filename = filename.lower() 54 | searchname = searchname.lower() 55 | if(song): 56 | filename = filename.replace(".mp3", "") 57 | else: 58 | for v in videoformats: 59 | if(v in filename): 60 | filename = filename.replace(v, "") 61 | filearray = splitall(filename) 62 | searcharray = splitall(searchname) 63 | count = 0 64 | for s in searcharray: 65 | min = 10000 66 | selectedfile = None 67 | for f in filearray: 68 | if(strdiff(s,f)<=int(2*len(s)/4)): 69 | if(min > strdiff(s,f)): 70 | min = strdiff(s,f) 71 | selectedfile = f 72 | if(min!=10000): 73 | count += 2*(3-min) 74 | filearray.remove(selectedfile) 75 | return count 76 | 77 | 78 | def play_file(str, song): 79 | counts = [] 80 | if(song): 81 | for s in songsnames: 82 | counts.append(compare_strings(s, str, song)) 83 | else: 84 | for v in videosnames: 85 | counts.append(compare_strings(v, str, song)) 86 | max = 0 87 | index = -1 88 | for i in range(len(counts)): 89 | if(counts[i]>max): 90 | max = counts[i] 91 | index = i 92 | print(counts.count(max)) 93 | return index 94 | 95 | 96 | 97 | songs = [] 98 | videos = [] 99 | songsnames = [] 100 | videosnames = [] 101 | 102 | def add_all_files(filelist, folderlist, loc): 103 | for file in filelist: 104 | if any(word in file for word in videoformats): 105 | videosnames.append(file) 106 | videos.append(loc+"\\"+file) 107 | elif any(word in file for word in audioformats): 108 | songsnames.append(file) 109 | songs.append(loc+"\\"+file) 110 | for folder in folderlist: 111 | for root, subFolders, files in os.walk(loc+"\\"+folder): 112 | add_all_files(files, subFolders, root) 113 | 114 | locations = ["C:\\Users\\amatcha\\Downloads\\songs", "C:\\Users\\amatcha\\Downloads\\mv", "C:\\Users\\amatcha\\Downloads\\Video", "C:\\Users\\amatcha\\Downloads\\oldcmp", "C:\\Users\\amatcha\\Downloads\\video songs"] 115 | 116 | vlcpath = 'C:\\Program Files (x86)\\VideoLAN\\VLC\\vlc.exe' 117 | 118 | for loc in locations: 119 | for root, subFolders, files in os.walk(loc): 120 | add_all_files(files, subFolders, root) 121 | 122 | run = True 123 | process = None 124 | while run: 125 | print("Enter a command") 126 | s = input() 127 | if("random" in s and "song" in s): 128 | if(process!=None): 129 | process.terminate() 130 | i = random.randint(0,len(songs)-1) 131 | process = subprocess.Popen([vlcpath, songs[i]]) 132 | elif("random" in s and "video" in s): 133 | if(process!=None): 134 | process.terminate() 135 | i = random.randint(0,len(videos)-1) 136 | process = subprocess.Popen([vlcpath, videos[i]]) 137 | elif("play" in s and "song" in s): 138 | cmd = s.split() 139 | songname = " ".join(cmd[2:]) 140 | if(process!=None): 141 | process.terminate() 142 | i = play_file(songname, True) 143 | if(i==-1): 144 | print("Can't find any song") 145 | else: 146 | process = subprocess.Popen([vlcpath, songs[i]]) 147 | elif("play" in s and "video" in s): 148 | cmd = s.split() 149 | videoname = " ".join(cmd[2:]) 150 | if(process!=None): 151 | process.terminate() 152 | i = play_file(videoname, False) 153 | if(i==-1): 154 | print("Can't find any video") 155 | else: 156 | process = subprocess.Popen([vlcpath, videos[i]]) 157 | elif("exit" in s): 158 | run = False 159 | --------------------------------------------------------------------------------