Beispiel #1
0
	def search_track(self, tr):
		sFktname = "search_track"
		
		# build search term. so connect artist and
		# title, delete some characters and split on
		# white spaces
		search_term_list = tr.title.lower() + " " + tr.artist.lower()

		search_term_list = search_term_list.replace("(","").replace(")","")

		search_term_list = search_term_list.split()

		ePrint(2, sFktname, "looking for term: {}".format(search_term_list))

		# to find the track, we constuct a ranking, with the term on the highest rank, wich
		# made the most hits 
		max_hits = 0
	
		match_list = []

		for item in self.tunes:

			item_hits = 0

			# create target term
			search_target_list = item.artist.lower() + " " + item.title.lower()
			search_target_list = search_target_list.split()

			# match
			for s in search_term_list:
				if s in search_target_list:
					item_hits += 1
			
			# create a matchcount, item tupel
			match_list.append((item_hits, item))

		if len(match_list) == 0:
			return None


		# sort matchlist
		match_list = sorted(match_list, key = lambda tup: tup[0], reverse = True)
		
		
		return [match_list[0][1]]
Beispiel #2
0
def search_release (term):
	sFktname = "search_release"

	term = term.replace(" ","+")

	ePrint(1, sFktname, "search the web")

	# search on chemical
	query_chemical = chemical.chemical()
	results = query_chemical.search(term)

	# case if nothing was found
	if len(results) == 0:
		ePrint(1, sFktname, "nothing found on chemical")
		return None

	# case, if more then one was found
	if len(results) > 1:
		ePrint(1, sFktname, "Multiple Links found. Make a Choice\n")
		k = 0
		for i in results:
			print("{0:3d}:\t{1}".format(k , results[k][1]))
			k = k + 1
		print("\n")
		choice = int(input(" <-- "))
		results = [ [ results[choice][0], results[choice][1] ] ]
	
	# create an release instance and feed it
	rel = release()
	rel.shortinfo = results[0][1]
	rel.infopage = results[0][0]
	rel = query_chemical.getReleaseInfo(rel)

	return rel
Beispiel #3
0
def search_clever (tr):
	sFktname = "search_clever"
	
	# build search-term
	if tr.artist != "" and tr.title != "":
		term = tr.artist + "+" + tr.title
		term = term.replace("&","")
		term = term.replace("(","")
		term = term.replace(")","")

		term = term.replace(" ","+")
	
	# first try to find the track in the release
	# cache
	if len(cache.rels_found) > 0:
		for rel in cache.rels_found:

			ePrint(1, sFktname, "search in cache")

			# search track in release
			res = rel.search_track(tr)

			# nothing found
			if res == None:
				continue

			# more than one item found
			if len(res) > 1:
				ePrint(1, sFktname, "Multiple tracks found in release, make a choice")
				k = 0
				for t in res:
					print("{0:3d}:\t{1}".format(k , t))
					k = k + 1
				print("\n")
				choice = int(input(" <-- "))
				res = res[choice]
				return res

			return res[0]

	ePrint(1, sFktname, "search the web")

	# search on chemical
	query_chemical = chemical.chemical()
	results = query_chemical.search(term)

	# case if nothing was found
	if len(results) == 0:
		ePrint(1, sFktname, "nothing found on chemical")
		return None

	# case, if more then one was found
	if len(results) > 1:
		ePrint(1, sFktname, "Multiple Links found. Make a Choice\n")
		k = 0
		for i in results:
			print("{0:3d}:\t{1}".format(k , results[k][1]))
			k = k + 1
		print("\n")
		choice = int(input(" <-- "))
		results = [ [ results[choice][0], results[choice][1] ] ]
	
	# create an release instance and feed it
	rel = release()
	rel.shortinfo = results[0][1]
	rel.infopage = results[0][0]
	rel = query_chemical.getReleaseInfo(rel)

	# append the release to the cache
	cache.rels_found.append(rel)

	# search track in release
	res = rel.search_track(tr)

	# nothing found
	if res == None:
		ePrint(1, sFktname, "Track not found in release page")
		return None

	# more than one item found
	if len(res) > 1:
		ePrint(1, sFktname, "Multible tracks found in release, make a choice")
		k = 0
		for t in res:
			print("{0:3d}:\t{1}".format(k , t))
			k = k + 1
		print("\n")
		choice = int(input(" <-- "))
		res = res[choice]
	
	return res[0]
Beispiel #4
0
def main ():
	sFktname = "main"
	
	# handle arguments
	try:
		opts, args = getopt.getopt(sys.argv[1:], "hcws:p:", ["help", "copy", "use-chemical-format", "search=", "pattern="])
	except:
		print_help ()
		sys.exit(2)

	# handle options
	for o, a in opts:
		if o in ("-h", "--help"):
			print_help()
			sys.exit(2)
		elif o in ("-c", "--copy"):
			settings.copymode = True
		elif o in ("-p", "--pattern"):
			settings.pattern_user = a
		elif o in ("-w", "--use-chemical-format"):
			settings.use_chemical_format = True
		elif o in ("-s", "--search"):
			settings.search_term = a
				
	# handle arguments
	if len(args) == 0:
		ePrint(1, sFktname, "No Files specified")
	
	# check, whether files have valid paths
	for fn in args:
		if path.exists(fn) == False:
			ePrint(1, sFktname, "Path not found: {}".format(fn))
			sys.exit(2)

	# if search_term is given search for it first
	# and if found append it to the cache
	if settings.search_term:
		rel = search_release(settings.search_term)
		if rel:
			cache.rels_found.append(rel)

	# enter main loop
	for fn in args:

		# fill pattern
		if settings.pattern_user:
			pat = pattern.pattern(settings.pattern_user)
		else:
			pat = pattern.pattern(settings.pattern_default)

		# try to get information from tags
		new_track = id3_to_track(fn)

		suffix = split_ld(fn)

		# we have flags in the pattern class to
		# determine wich keys are used

		res_t = None

		# currently we only can operate if we have some information
		if new_track.is_empty() == False: 
			# if artist field is set
			if pat.artist:
				if new_track.artist == "":
					res_t = search_clever(new_track)
					if res_t:
						new_track.artist = res_t.artist
					else:
						ePrint(1, sFktname, "Cant determine Artist Field for: {}".format(fn))
						continue
				pat.replace_artist(new_track.artist)

			# if title field is set
			if pat.title:
				if new_track.title == "":
					res_t = search_clever(new_track)
					if res_t:
						new_track.title = res_t.title
					else:
						ePrint(1, sFktname, "Cant determine title Field for: {}".format(fn))
						continue
				pat.replace_title(new_track.title)

			# if key field is set
			if pat.key:
				if new_track.key == "":
					res_t = search_clever(new_track)
					if res_t:
						# map key
						if (res_t.key in settings.quint_map) and settings.use_chemical_format == None:
							new_track.key = settings.quint_map[res_t.key]
						else:
							new_track.key = res_t.key
					else:
						ePrint(1, sFktname, "Cant determine key Field for: {}".format(fn))
						continue
				pat.replace_key(new_track.key)

			pat.replace_tn(new_track.tn)

			final_name = "{}.{}".format(pat.get_result(), suffix)
		else:
			final_name = fn

		ePrint(1, sFktname, "{} will be renamed to: {}".format(fn, final_name))

		# rename or copy
		if fn == final_name:
			continue
		else:
			if settings.copymode:
				shutil.copy(fn, final_name)
			else:
				rename(fn, final_name)