Changeset 391
- Timestamp:
- 08/19/06 17:32:38 (2 years ago)
- Files:
-
- trunk/po/POTFILES.in (modified) (2 diffs)
- trunk/po/es.po (modified) (6 diffs)
- trunk/po/mesk.pot (modified) (6 diffs)
- trunk/src/album_cover_control.py (modified) (2 diffs)
- trunk/src/audio_control.py (modified) (1 diff)
- trunk/src/config.py (modified) (3 diffs)
- trunk/src/mesk/__init__.py (modified) (1 diff)
- trunk/src/mesk/audio/__init__.py (modified) (2 diffs)
- trunk/src/mesk/audio/mp3.py (modified) (6 diffs)
- trunk/src/mesk/audio/oggvorbis.py (modified) (4 diffs)
- trunk/src/mesk/audio/source.py (modified) (2 diffs)
- trunk/src/mesk/common/uri.py (deleted)
- trunk/src/mesk/playlist.py (modified) (2 diffs)
- trunk/src/mesk/uri.py (added)
- trunk/src/mesk/utils.py (modified) (1 diff)
- trunk/src/playlist_control.py (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/po/POTFILES.in
r390 r391 19 19 src/mesk/common/i18n.py 20 20 src/mesk/common/__init__.py 21 src/mesk/common/uri.py22 21 src/mesk/gtk_utils.py 23 22 src/mesk/info.py … … 29 28 src/mesk/plugin/plugin.py 30 29 src/mesk/plugin/provider.py 30 src/mesk/uri.py 31 31 src/mesk/utils.py 32 32 src/mesk/window.py trunk/po/es.po
r390 r391 8 8 "Project-Id-Version: 0.1.1\n" 9 9 "Report-Msgid-Bugs-To: \n" 10 "POT-Creation-Date: 2006-08-1 8 20:14-0600\n"10 "POT-Creation-Date: 2006-08-19 17:25-0600\n" 11 11 "PO-Revision-Date: 2006-04-15 17:38-0600\n" 12 12 "Last-Translator: Travis Shirk <travis@pobox.com>\n" … … 275 275 msgstr "Formato audio sin apoyo: %s" 276 276 277 #: ../src/mesk/audio/mp3.py:109 277 #: ../src/mesk/audio/mp3.py:80 278 #, fuzzy, python-format 279 msgid "Error loading ID3 tag for '%s': %s" 280 msgstr "Metadata de la fuente de la lectura de error en '%s': %s" 281 282 #: ../src/mesk/audio/mp3.py:113 278 283 #, fuzzy, python-format 279 284 msgid "Error reading mp3 source for '%s': %s" 280 285 msgstr "Metadata de la fuente de la lectura de error en '%s': %s" 281 286 282 #: ../src/mesk/audio/oggvorbis.py:7 1287 #: ../src/mesk/audio/oggvorbis.py:74 283 288 #, fuzzy, python-format 284 289 msgid "Error reading ogg/vorbis source for '%s': %s" … … 459 464 msgstr "Tipo inválido para '%s'plugin: %s" 460 465 461 #: ../src/mesk/utils.py: 49466 #: ../src/mesk/utils.py:50 462 467 msgid "KB" 463 468 msgstr "KB" 464 469 465 #: ../src/mesk/utils.py:5 0470 #: ../src/mesk/utils.py:51 466 471 msgid "MB" 467 472 msgstr "MB" 468 473 469 #: ../src/mesk/utils.py:5 1474 #: ../src/mesk/utils.py:52 470 475 msgid "GB" 471 476 msgstr "GB" 472 477 473 #: ../src/mesk/utils.py:5 4478 #: ../src/mesk/utils.py:55 474 479 msgid "Bytes" 475 480 msgstr "Octetos" 476 481 477 482 #. Text columns 478 #: ../src/playlist_control.py:17 2483 #: ../src/playlist_control.py:171 479 484 msgid "Title" 480 485 msgstr "TÃtulo" 481 486 482 #: ../src/playlist_control.py:17 3487 #: ../src/playlist_control.py:172 483 488 msgid "Artist" 484 489 msgstr "Artista" 485 490 486 #: ../src/playlist_control.py:17 4491 #: ../src/playlist_control.py:173 487 492 msgid "Album" 488 493 msgstr "Ãlbum" 489 494 490 #: ../src/playlist_control.py:17 5495 #: ../src/playlist_control.py:174 491 496 msgid "#" 492 497 msgstr "#" 493 498 494 #: ../src/playlist_control.py:17 6499 #: ../src/playlist_control.py:175 495 500 msgid "Year" 496 501 msgstr "Año" 497 502 498 #: ../src/playlist_control.py:17 7503 #: ../src/playlist_control.py:176 499 504 msgid "Time" 500 505 msgstr "Tiempo" 501 506 502 #: ../src/playlist_control.py:45 3507 #: ../src/playlist_control.py:454 503 508 #, python-format 504 509 msgid "Are you sure you want to delete playlist '%s'?" 505 510 msgstr "" 506 511 507 #: ../src/playlist_control.py:45 5512 #: ../src/playlist_control.py:456 508 513 msgid "All playlist data will be lost." 509 514 msgstr "" 510 515 511 #: ../src/playlist_control.py:63 3516 #: ../src/playlist_control.py:634 512 517 msgid "tracks" 513 518 msgstr "pistas" 514 519 515 #: ../src/playlist_control.py:98 3520 #: ../src/playlist_control.py:986 516 521 #, fuzzy, python-format 517 522 msgid "" … … 521 526 msgstr "Fuente que cae del error: %s" 522 527 523 #: ../src/playlist_control.py:99 1528 #: ../src/playlist_control.py:994 524 529 #, fuzzy, python-format 525 530 msgid "" … … 531 536 "%s" 532 537 533 #: ../src/playlist_control.py:104 6538 #: ../src/playlist_control.py:1049 534 539 msgid "Add Music" 535 540 msgstr "Agregue La Música" 536 541 537 #: ../src/playlist_control.py:106 3542 #: ../src/playlist_control.py:1066 538 543 msgid "All" 539 544 msgstr "" 540 545 541 #: ../src/playlist_control.py:106 5546 #: ../src/playlist_control.py:1068 542 547 msgid "Audio" 543 548 msgstr "" 544 549 545 #: ../src/playlist_control.py:106 6550 #: ../src/playlist_control.py:1069 546 551 msgid "Playlists" 547 552 msgstr "Playlists" … … 550 555 #. the checkbox is toggles and files when not since this is not 551 556 #. possible by default 552 #: ../src/playlist_control.py:107 1557 #: ../src/playlist_control.py:1074 553 558 msgid "Make the _dialog be able/unable to select directories" 554 559 msgstr "Haga que el _diálogo es able/unable para seleccionar directorios" 555 560 556 #: ../src/playlist_control.py:119 4561 #: ../src/playlist_control.py:1197 557 562 #, python-format 558 563 msgid "'%s' string not found" trunk/po/mesk.pot
r390 r391 9 9 "Project-Id-Version: PACKAGE VERSION\n" 10 10 "Report-Msgid-Bugs-To: \n" 11 "POT-Creation-Date: 2006-08-1 8 20:14-0600\n"11 "POT-Creation-Date: 2006-08-19 17:25-0600\n" 12 12 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 13 13 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" … … 265 265 msgstr "" 266 266 267 #: ../src/mesk/audio/mp3.py:109 267 #: ../src/mesk/audio/mp3.py:80 268 #, python-format 269 msgid "Error loading ID3 tag for '%s': %s" 270 msgstr "" 271 272 #: ../src/mesk/audio/mp3.py:113 268 273 #, python-format 269 274 msgid "Error reading mp3 source for '%s': %s" 270 275 msgstr "" 271 276 272 #: ../src/mesk/audio/oggvorbis.py:7 1277 #: ../src/mesk/audio/oggvorbis.py:74 273 278 #, python-format 274 279 msgid "Error reading ogg/vorbis source for '%s': %s" … … 443 448 msgstr "" 444 449 445 #: ../src/mesk/utils.py: 49450 #: ../src/mesk/utils.py:50 446 451 msgid "KB" 447 452 msgstr "" 448 453 449 #: ../src/mesk/utils.py:5 0454 #: ../src/mesk/utils.py:51 450 455 msgid "MB" 451 456 msgstr "" 452 457 453 #: ../src/mesk/utils.py:5 1458 #: ../src/mesk/utils.py:52 454 459 msgid "GB" 455 460 msgstr "" 456 461 457 #: ../src/mesk/utils.py:5 4462 #: ../src/mesk/utils.py:55 458 463 msgid "Bytes" 459 464 msgstr "" 460 465 461 466 #. Text columns 467 #: ../src/playlist_control.py:171 468 msgid "Title" 469 msgstr "" 470 462 471 #: ../src/playlist_control.py:172 463 msgid " Title"472 msgid "Artist" 464 473 msgstr "" 465 474 466 475 #: ../src/playlist_control.py:173 467 msgid "A rtist"476 msgid "Album" 468 477 msgstr "" 469 478 470 479 #: ../src/playlist_control.py:174 471 msgid " Album"480 msgid "#" 472 481 msgstr "" 473 482 474 483 #: ../src/playlist_control.py:175 475 msgid " #"484 msgid "Year" 476 485 msgstr "" 477 486 478 487 #: ../src/playlist_control.py:176 479 msgid "Year"480 msgstr ""481 482 #: ../src/playlist_control.py:177483 488 msgid "Time" 484 489 msgstr "" 485 490 486 #: ../src/playlist_control.py:45 3491 #: ../src/playlist_control.py:454 487 492 #, python-format 488 493 msgid "Are you sure you want to delete playlist '%s'?" 489 494 msgstr "" 490 495 491 #: ../src/playlist_control.py:45 5496 #: ../src/playlist_control.py:456 492 497 msgid "All playlist data will be lost." 493 498 msgstr "" 494 499 495 #: ../src/playlist_control.py:63 3500 #: ../src/playlist_control.py:634 496 501 msgid "tracks" 497 502 msgstr "" 498 503 499 #: ../src/playlist_control.py:98 3504 #: ../src/playlist_control.py:986 500 505 #, python-format 501 506 msgid "" … … 505 510 msgstr "" 506 511 507 #: ../src/playlist_control.py:99 1512 #: ../src/playlist_control.py:994 508 513 #, python-format 509 514 msgid "" … … 513 518 msgstr "" 514 519 515 #: ../src/playlist_control.py:104 6520 #: ../src/playlist_control.py:1049 516 521 msgid "Add Music" 517 522 msgstr "" 518 523 519 #: ../src/playlist_control.py:106 3524 #: ../src/playlist_control.py:1066 520 525 msgid "All" 521 526 msgstr "" 522 527 523 #: ../src/playlist_control.py:106 5528 #: ../src/playlist_control.py:1068 524 529 msgid "Audio" 525 530 msgstr "" 526 531 527 #: ../src/playlist_control.py:106 6532 #: ../src/playlist_control.py:1069 528 533 msgid "Playlists" 529 534 msgstr "" … … 532 537 #. the checkbox is toggles and files when not since this is not 533 538 #. possible by default 534 #: ../src/playlist_control.py:107 1539 #: ../src/playlist_control.py:1074 535 540 msgid "Make the _dialog be able/unable to select directories" 536 541 msgstr "" 537 542 538 #: ../src/playlist_control.py:119 4543 #: ../src/playlist_control.py:1197 539 544 #, python-format 540 545 msgid "'%s' string not found" trunk/src/album_cover_control.py
r384 r391 22 22 23 23 import mesk 24 import mesk.gtk_utils, control24 import mesk.gtk_utils, mesk.uri 25 25 _ = mesk.common.i18n._ 26 26 … … 102 102 103 103 src = new[1] 104 src_dir = os.path.dirname( src.uri.path)104 src_dir = os.path.dirname(mesk.uri.unescape(src.uri.path)) 105 105 106 106 # Compute SHA digest for source metadata trunk/src/audio_control.py
r384 r391 410 410 def _set_source(self, src): 411 411 self._set_track_scale(0.0) 412 self._gst_bin.set_property('uri', s rc.uri.to_string())412 self._gst_bin.set_property('uri', str(src.uri)) 413 413 self._current_audio_src = src 414 414 trunk/src/config.py
r385 r391 21 21 22 22 import mesk 23 import mesk.uri 23 24 _ = mesk.common.i18n._ 24 from mesk.common.uri import Uri25 25 26 26 def get_playlist_uri(pl_name): 27 27 pl_dir = mesk.config.get(mesk.CONFIG_MAIN, 'playlist_dir') 28 uri = Uri('file://%s/%s.m3u' % (pl_dir, pl_name)) 28 uri = mesk.uri.make_uri('file://%s/%s.m3u' % \ 29 (mesk.uri.escape_path(pl_dir), mesk.uri.escape_path(pl_name))) 29 30 return uri 30 31 … … 59 60 if self._section and mesk.config.has_section(self._section): 60 61 # Initialize from config 61 self.uri = Uri(mesk.config.get(self._section, 'uri'))62 self.uri = mesk.uri.make_uri(mesk.config.get(self._section, 'uri')) 62 63 self.current = mesk.config.getint(self._section, 'current') 63 64 self.repeat = mesk.config.getboolean(self._section, 'repeat') … … 74 75 mesk.config.add_section(self._section) 75 76 pl_dir = mesk.config.get(mesk.CONFIG_MAIN, 'playlist_dir') 76 self.uri = Uri('file://%s/%s.m3u' % (pl_dir, self.name)) 77 self.uri = mesk.uri.make_uri('file://%s/%s.m3u' % \ 78 (mesk.uri.escape_path(pl_dir), 79 mesk.uri.escape_path(self.name))) 77 80 self.update(None) 78 81 79 82 def update(self, playlist): 80 83 '''Update the config with latest playlist state''' 81 mesk.config.set(self._section, 'uri', 82 self.uri.to_string(quoted = False)) 84 mesk.config.set(self._section, 'uri', str(self.uri)) 83 85 84 86 if playlist: trunk/src/mesk/__init__.py
r384 r391 135 135 import mesk.log 136 136 import mesk.playlist 137 import mesk.utils138 137 # FIXME 138 #import mesk.utils 139 139 #import mesk.audio trunk/src/mesk/audio/__init__.py
r358 r391 23 23 24 24 import mesk 25 import mesk.utils 25 import mesk.utils, mesk.uri 26 26 # At least versions 27 27 REQUIRE_GST_VERSION = (0, 10, 8) … … 78 78 '''Thrown when a audio format is not supported''' 79 79 80 from mesk.common.uri import Uri81 80 def load(uri): 82 81 '''Given a URI, attempt to load an AudioSource. If this cannot be done, 83 82 a UnsupportedFormat exception, or other related error is thrown.''' 84 if not isinstance(uri, Uri):85 uri = Uri(uri)83 if not mesk.uri.is_uri(uri): 84 uri = mesk.uri.make_uri(uri) 86 85 87 mt = mimetypes.guess_type(uri.to_string())[0] 86 mt = mimetypes.guess_type(str(uri))[0] 87 mt = mimetypes.guess_type(str(uri))[0] 88 88 if not mt or not supported_mimetypes.has_key(mt): 89 89 raise UnsupportedFormat(_('Unsupported audio format: %s') % \ trunk/src/mesk/audio/mp3.py
r365 r391 20 20 import sys 21 21 import gst 22 22 23 import mesk 23 import mesk.utils 24 import mesk.utils, mesk.uri 24 25 _ = mesk.common.i18n._ 25 26 … … 64 65 # Use URI if we don't have a title 65 66 if not self.meta_data.title: 66 self.meta_data.title = unicode(s elf.uri.to_string())67 self.meta_data.title = unicode(str(self.uri)) 67 68 68 69 def get_native_tag(self): … … 71 72 return None 72 73 74 uri_path = mesk.uri.unescape(self.uri.path) 73 75 try: 74 76 tag = eyeD3.Tag() 75 if tag.link( self.uri.path):77 if tag.link(uri_path): 76 78 return tag 77 79 except TagException, ex: 80 mesk.log.warning(_('Error loading ID3 tag for \'%s\': %s') % \ 81 (uri_path, str(ex))) 78 82 return None 79 83 … … 94 98 95 99 from eyeD3 import TagException, InvalidAudioFormatException 96 from mesk.common.uri import Uri97 100 class Mp3MetaData(AudioMetaData): 98 101 … … 102 105 if not uri or uri.scheme != 'file': 103 106 return 107 uri_path = mesk.uri.unescape(uri.path) 104 108 105 109 audio_file = None 106 110 try: 107 audio_file = eyeD3.Mp3AudioFile(uri .path)111 audio_file = eyeD3.Mp3AudioFile(uri_path) 108 112 except (TagException, InvalidAudioFormatException), ex: 109 113 mesk.log.warning(_('Error reading mp3 source for \'%s\': %s') % \ 110 (uri .path, str(ex)))114 (uri_path, str(ex))) 111 115 else: 112 116 self.time_secs = audio_file.getPlayTime() … … 121 125 self.has_images = len(tag.getImages()) > 0 122 126 self.frozen = True 127 128 # The factory class for mp3 files 123 129 factory = Mp3AudioSource 124 130 trunk/src/mesk/audio/oggvorbis.py
r372 r391 20 20 import os, stat 21 21 import ogg.vorbis, gst 22 22 23 import mesk 24 import mesk.uri 23 25 _ = mesk.common.i18n._ 24 26 … … 45 47 # Use URI if we don't have a title 46 48 if not self.meta_data.title: 47 self.meta_data.title = unicode(s elf.uri.to_string())49 self.meta_data.title = unicode(str(self.uri)) 48 50 49 51 def get_native_tag(self): … … 65 67 return 66 68 69 uri_path = mesk.uri.unescape(uri.path) 67 70 audio_file = None 68 71 try: 69 audio_file = VorbisFile(uri .path)72 audio_file = VorbisFile(uri_path) 70 73 except (VorbisError), ex: 71 74 mesk.log.warning(_('Error reading ogg/vorbis source for \'%s\': ' 72 '%s') % (uri .path, str(ex)))75 '%s') % (uri_path, str(ex))) 73 76 else: 74 77 self.time_secs = int(audio_file.time_total(0)) 75 self.size_bytes = self.fileSize = os.stat(uri.path)[stat.ST_SIZE] 78 self.size_bytes = self.fileSize = os.stat(uri_path)[stat.ST_SIZE] 79 76 80 tag = audio_file.comment() 77 81 if tag: … … 92 96 self.track_total = int(values[1]) 93 97 self.frozen = True 98 99 # Factory class for Ogg Vorbis files 94 100 factory = OggAudioSource trunk/src/mesk/audio/source.py
r362 r391 21 21 22 22 import mesk 23 from mesk.common.uri import Uri23 import mesk.uri 24 24 from mesk.common.i18n import _ 25 25 … … 45 45 class AudioSource: 46 46 def __init__(self, uri): 47 if not isinstance(uri, Uri): 48 self.uri = Uri(uri) 49 else: 50 self.uri = uri 47 self.uri = mesk.uri.make_uri(uri) 51 48 self.meta_data = AudioMetaData() 52 49 trunk/src/mesk/playlist.py
r356 r391 24 24 import utils 25 25 import log 26 import common.uri27 26 28 27 # Mapping from mime types to factory classes for supported formats … … 105 104 fp.write(src.uri.path) 106 105 else: 107 fp.write(s rc.uri.to_string())106 fp.write(str(src.uri)) 108 107 fp.write('\n') 109 108 fp.close() trunk/src/mesk/utils.py
r358 r391 25 25 _ = common.i18n._ 26 26 27 # Time and memory string formatting 27 28 def format_track_time(curr, total = None): 28 29 def time_tuple(ts): trunk/src/playlist_control.py
r384 r391 24 24 import pango 25 25 26 import mesk 26 import mesk, mesk.utils, mesk.gtk_utils, mesk.uri 27 27 _ = mesk.common.i18n._ 28 import mesk.gtk_utils29 28 30 29 import config, control … … 178 177 179 178 # Load playlist 180 pl = mesk.playlist.load( self._pl_config.uri.path)179 pl = mesk.playlist.load(mesk.uri.unescape(self._pl_config.uri.path)) 181 180 pl.set_shuffle(self._pl_config.shuffle) 182 181 pl.set_repeat(self._pl_config.repeat) … … 208 207 def _save_playlist(self): 209 208 self._pl_config.update(self._playlist) 210 mesk.playlist.save_m3u(self._pl_config.uri.path, self._playlist) 209 mesk.playlist.save_m3u(mesk.uri.unescape(self._pl_config.uri.path), 210 self._playlist) 211 211 self._debug_show_playlist() 212 212 … … 247 247 def _new_model_row(self, src): 248 248 model_data = self._get_model_metadata(src) 249 return [MODEL_STATE_ACTIVE, None, None, src.uri.to_string(), 249 return [MODEL_STATE_ACTIVE, None, None, 250 str(src.uri), 250 251 model_data[MODEL_NUM], 251 252 model_data[MODEL_TITLE], … … 461 462 462 463 # Delete 463 os.remove( self._pl_config.uri.path)464 os.remove(mesk.uri.unescape(self._pl_config.uri.path)) 464 465 self._pl_config.delete() 465 466 self.emit('control_request_close') … … 532 533 buttons = gtk.BUTTONS_OK) 533 534 d.set_markup('<b>%s</b>' % err_msg) 534 d.format_secondary_text( audio_src.uri.path)535 d.format_secondary_text(mesk.uri.unescape(audio_src.uri.path)) 535 536 d.connect('response', self._on_dialog_close) 536 537 d.show() … … 919 920 msg = 'Modified Playlist:\n' 920 921 for src in self._playlist: 921 msg += s rc.uri.to_string(quoted = False) + '\n'922 msg += str(src.uri) + '\n' 922 923 mesk.log.debug(msg) 923 924 … … 925 926 orig_size = self._playlist.get_length() 926 927 count = 0 928 927 929 for uri in uris: 928 if not isinstance(uri, mesk.common.uri.Uri): 929 uri = mesk.common.uri.Uri(uri) 930 930 if not mesk.uri.is_uri(uri): 931 uri = mesk.uri.make_uri(uri) 932 933 uri_path = mesk.uri.unescape(uri.path) 931 934 try: 932 935 # Handle files/directories 933 if uri.scheme == 'file' and os.path.isdir(uri .path):936 if uri.scheme == 'file' and os.path.isdir(uri_path): 934 937 # Recurse into a directory 935 for (root, dirs, files) in os.walk(uri .path):938 for (root, dirs, files) in os.walk(uri_path): 936 939 # Add files in this directory 937 940 dir_files = [] … … 951 954 break 952 955 else: 953 # Handle a file956 # Handle local and remote URIs 954 957 srcs = [] 955 fname = os.path.basename(uri .path)958 fname = os.path.basename(uri_path) 956 959 ext = os.path.splitext(fname)[1] 957 960 try: 958 961 if ext == '.m3u': 962 # FIXME: This may be remote, fetching would be nice 963 959 964 # Playlists 960 965 pl = mesk.playlist.Playlist() 961 pl = mesk.playlist.load(uri .path)966 pl = mesk.playlist.load(uri_path) 962 967 for src in pl: 963 968 srcs.append(src) 964 969 del pl 965 970 else: 966 # Presumably, an audio file967 971 src = mesk.audio.load(uri) 968 972 srcs.append(src) 969 973 except UnsupportedFormat, ex: 970 mesk.log.info('%s - Skipping %s' % \ 971 (str(ex), uri.path)) 974 mesk.log.info('%s - Skipping %s' % (str(ex), uri.path)) 972 975 continue 973 976 … … 1222 1225 ### Clipboard and cuty/copy/paste functions ### 1223 1226 def _clipboard_set_cb(self, clipboard, selection, info, op_info): 1224 # Convert U riobjects to strings1227 # Convert URI objects to strings 1225 1228 uris = [] 1226 1229 for uri in op_info.uris: 1227 uris.append( uri.to_string())1230 uris.append(str(uri)) 1228 1231 1229 1232 selection.set_uris(uris)
