def run(self):
		print('Downloading audio list...')
		self.vk.get_audio_list(self.uid)
		self.raw_list = Xml('./cache/audio.xml')
		new_list = self.raw_list.get_node_list('aid')
		old_list = [line[:-1] for line in open('./cache/aid.txt')]
		error_list = [line[:-1] for line in open('./cache/error.txt')]
		diff_list = diff(diff(new_list, old_list), error_list)
		if not diff_list:
			input('No files to update, press Enter to exit... ')
			exit(0)

		files = [
			AudioFile(
				aid,
				self.find_sibling_node(aid, 'url'),
				self.find_sibling_node(aid, 'title'),
				self.find_sibling_node(aid, 'artist')
			)
			for aid in diff_list]

		aid_file = open('./cache/aid.txt', 'a')
		error_file = open('./cache/error.txt', 'a')
		for f in files:
			if f.download_audio():
				aid_file.write(f.aid + '\n')
				aid_file.flush()
				print('OK (%d/%d)' % (files.index(f) + 1, len(files)))
			else:
				error_file.write(f.aid + '\n')
				error_file.flush()
				print('Fail :(')
	def __init__(self):
		self.raw_list = None
		now_time = datetime.now()
		config = Xml('config.xml')
		expires = config.get_node('expires').text

		if expires and datetime.strptime(expires, "%d.%m.%Y %H:%M:%S") > now_time:
			self.token = config.get_node('token').text
			self.uid = config.get_node('uid').text
		else:
			url = ''
			url2 = config.get_node('url').text
			win32clipboard.OpenClipboard()
			win32clipboard.EmptyClipboard()
			win32clipboard.SetClipboardText(url2)
			win32clipboard.CloseClipboard()
			print('Go to', url2, '(URL was copied to clipboard) and')
			webbrowser.open(url2)
			while not (url and url.group(1)):
				url = input('input response url from browser or press Enter to use text in clipboard: ')
				if url == '':
					win32clipboard.OpenClipboard()
					url = win32clipboard.GetClipboardData()
					win32clipboard.CloseClipboard()
					print(url)
				url = re.match(
					'https://oauth.vk.com/blank.html#access_token=(\w+)&expires_in=(\w+)&user_id=(\w+)', url)
			self.token = config.get_node('token').text = url.group(1)
			self.uid = config.get_node('uid').text = url.group(3)

			expires_diff = url.group(2)
			config.get_node('expires').text = \
				(now_time + timedelta(seconds=int(expires_diff) - 360)).strftime('%d.%m.%Y %H:%M:%S')

			config.tree.write('config.xml')

		self.vk = VkResponse(self.token)
class Main:
	def __init__(self):
		self.raw_list = None
		now_time = datetime.now()
		config = Xml('config.xml')
		expires = config.get_node('expires').text

		if expires and datetime.strptime(expires, "%d.%m.%Y %H:%M:%S") > now_time:
			self.token = config.get_node('token').text
			self.uid = config.get_node('uid').text
		else:
			url = ''
			url2 = config.get_node('url').text
			win32clipboard.OpenClipboard()
			win32clipboard.EmptyClipboard()
			win32clipboard.SetClipboardText(url2)
			win32clipboard.CloseClipboard()
			print('Go to', url2, '(URL was copied to clipboard) and')
			webbrowser.open(url2)
			while not (url and url.group(1)):
				url = input('input response url from browser or press Enter to use text in clipboard: ')
				if url == '':
					win32clipboard.OpenClipboard()
					url = win32clipboard.GetClipboardData()
					win32clipboard.CloseClipboard()
					print(url)
				url = re.match(
					'https://oauth.vk.com/blank.html#access_token=(\w+)&expires_in=(\w+)&user_id=(\w+)', url)
			self.token = config.get_node('token').text = url.group(1)
			self.uid = config.get_node('uid').text = url.group(3)

			expires_diff = url.group(2)
			config.get_node('expires').text = \
				(now_time + timedelta(seconds=int(expires_diff) - 360)).strftime('%d.%m.%Y %H:%M:%S')

			config.tree.write('config.xml')

		self.vk = VkResponse(self.token)

	def run(self):
		print('Downloading audio list...')
		self.vk.get_audio_list(self.uid)
		self.raw_list = Xml('./cache/audio.xml')
		new_list = self.raw_list.get_node_list('aid')
		old_list = [line[:-1] for line in open('./cache/aid.txt')]
		error_list = [line[:-1] for line in open('./cache/error.txt')]
		diff_list = diff(diff(new_list, old_list), error_list)
		if not diff_list:
			input('No files to update, press Enter to exit... ')
			exit(0)

		files = [
			AudioFile(
				aid,
				self.find_sibling_node(aid, 'url'),
				self.find_sibling_node(aid, 'title'),
				self.find_sibling_node(aid, 'artist')
			)
			for aid in diff_list]

		aid_file = open('./cache/aid.txt', 'a')
		error_file = open('./cache/error.txt', 'a')
		for f in files:
			if f.download_audio():
				aid_file.write(f.aid + '\n')
				aid_file.flush()
				print('OK (%d/%d)' % (files.index(f) + 1, len(files)))
			else:
				error_file.write(f.aid + '\n')
				error_file.flush()
				print('Fail :(')

	def find_sibling_node(self, aid, tag):
		return self.raw_list.get_parent_node('aid', aid).find(tag).text