diff --git a/pandora_client/__init__.py b/pandora_client/__init__.py index ad44b9f..889501b 100644 --- a/pandora_client/__init__.py +++ b/pandora_client/__init__.py @@ -139,7 +139,8 @@ class Client(object): self._config = config if not self._config['url'].endswith('/'): self._config['url'] = self._config['url'] + '/' - self.profile = self._config.get('profile', '480p.webm') + self.resolutions = self._config.get('resolutions', [480]) + self.format = self._config.get('format', 'webm') if not offline: self.online() @@ -283,7 +284,8 @@ class Client(object): self.api = API(self._config['url'], media_cache=self.media_cache()) self.api.DEBUG = DEBUG if self.signin(): - self.profile = "%sp.webm" % max(self.api.site['video']['resolutions']) + self.resolutions = list(reversed(sorted(self.api.site['video']['resolutions']))) + self.format = self.api.site['video']['formats'][0] self.folderdepth = self._config.get('folderdepth', self.api.site['site'].get('folderdepth', 3)) def signin(self): @@ -371,6 +373,18 @@ class Client(object): conn.commit() return True + def get_resolution(self, info): + height = info['video'][0]['height'] if info.get('video') else None + for resolution in sorted(self.resolutions): + if height and height <= resolution: + return resolution + return resolution + + def profile(self, info): + resolution = self.get_resolution(info) + profile = '%sp.%s' % (resolution, self.format) + return profile + def cmd(self, args): filename = args[0] if len(filename) == 16: @@ -379,7 +393,9 @@ class Client(object): path = [filename] for p in path: if os.path.exists(p): - cmd = encode_cmd(p.decode('utf-8'), self.media_cache(), self.profile, None) + info = utils.avinfo(p) + profile = self.profile(info) + cmd = encode_cmd(p.decode('utf-8'), self.media_cache(), profile, info) cmd = [' ' in c and u'"%s"' % c or c for c in cmd] print (u' '.join(cmd)).encode('utf-8') @@ -548,8 +564,8 @@ class Client(object): if not 'error' in info: for path in self.path(oshash): if os.path.exists(path): - #print path.encode('utf-8') - i = encode(path, self.media_cache(), self.profile, info, + profile = self.profile(info) + i = encode(path, self.media_cache(), profile, info, self.api.site['media'].get('importFrames')) break @@ -680,7 +696,7 @@ class Client(object): for path in self.path(oshash): if os.path.exists(path): if not self.api.uploadVideo(path, - data, self.profile, info): + data, self.profile(info), info): print 'video upload failed, giving up, please try again' return if 'rightsLevel' in self._config: