Commit graph

1520 commits

Author SHA1 Message Date
Adrian Sampson
44459f88d0 Windows: represent paths as UTF-8 internally
When we store paths in the database, we always use bytestrings for consistency.
But on Windows, these paths are converted back to Unicode before they reach the
FS API. This means that the codec used internally is immaterial.

However, we were naively using sys.getfilesystemencoding() for this internal
representation. On Windows, this is MBCS, a broken encoding that can't represent
all of Unicode. This change replaces that with UTF-8, a "real" codec.

The decoding bit now tries UTF-8 and falls back to MBCS for compatibility with
existing databases. The reality, however, is that existing databases may not
work with this change -- a byte string may represent something different in
UTF-8 from what it represents in MBCS. So users should recreated their DBs if
anything goes wrong.
2012-07-17 10:54:47 -07:00
Adrian Sampson
5df7325937 Windows context menu item via .reg file
Contributed by "camz" on IRC.
2012-07-16 09:39:07 -07:00
Adrian Sampson
d04dfd905d Merge pull request #45 from mineo/doc-fix-web
Fix the reference to the ".beetsconfig" doc in plugins/web
2012-07-12 10:24:38 -07:00
Wieland Hoffmann
70910f5ac1 Fix the reference to the ".beetsconfig" doc in plugins/web 2012-07-12 11:19:49 +02:00
Adrian Sampson
ba80e1578a revise changelog/docs mention of cover art source 2012-07-09 14:16:40 -07:00
Adrian Sampson
52aec35bf8 changelog note about unicode replacement fix 2012-07-09 10:00:20 -07:00
Adrian Sampson
321ea2bfef Merge pull request #44 from calmh/unicode-replace
Handle unicode in replacement config
2012-07-08 09:43:02 -07:00
Jakob Borg
21cff66d08 Handle unicode in replacement config
The 'decode' call fails in what is already a unicode string. I'm not
sure under what circumstances the string is or isn't unicode (apparently
it varies), so I added a check. The test passes with the patch, at
least.
2012-07-05 23:12:36 +02:00
Adrian Sampson
ec849a3f88 chroma & lyrics: crash due to name change
I changed ImportTask.all_items to ImportTask.imported_items but forgot to change
the calls in the chroma and lyrics plugins.
2012-07-03 17:18:23 -07:00
Adrian Sampson
883977d2e9 merge 2012-07-03 17:12:34 -07:00
Adrian Sampson
45b146ed2b changelog typos 2012-07-03 09:31:20 -07:00
Adrian Sampson
525376b4b9 docs for unmatched-tracks matches 2012-07-01 16:56:21 -07:00
Adrian Sampson
c5f28ecdef don't import unmatched tracks 2012-07-01 16:48:52 -07:00
Adrian Sampson
ce166004cb use AlbumMatch/TrackMatch objects everywhere
This allows matches to indicate both missing and unmatched tracks in their
candidates and solves some of the spaghetti tuples that were passed around
during autotagging.
2012-07-01 16:33:48 -07:00
Adrian Sampson
7464b138cf fix tests broken by TrackInfo.index 2012-07-01 14:16:22 -07:00
Adrian Sampson
1855cd71ce docs typo 2012-07-01 14:16:00 -07:00
Adrian Sampson
38b404240d merge 2012-06-29 15:27:05 -07:00
Adrian Sampson
b3e5dcd7c0 respect per_disc_numbering in missing tracks 2012-06-29 15:26:47 -07:00
Adrian Sampson
042f97f08f use TrackInfo.index in difference display
Again, enumerate() has been obviated by this addition.
2012-06-29 15:22:23 -07:00
Adrian Sampson
ee3214e0f9 use TrackInfo.index in apply_metadata
enumerate() no longer necessary.
2012-06-29 15:18:10 -07:00
Adrian Sampson
d4c3ea74c6 match ordering without length assumptions
This replaces order_items with assign_items, the first step to allowing unequal
numbers of items on either side of the equation (user files and canonical
tracks). Rather than returning a "holey" list and assuming that the TrackInfo
objects stay static, the function returns a dictionary mapping Item objects to
TrackInfo objects. To indicate unmatched objects, two sets are also returned.

For the moment, some temporary code is included to turn the result from this
new function into the old format (a holey Item list). This allowed me to test
this change in isolation before plunging ahead with the necessary refactoring to
expose all of this to the importer workflow, etc.
2012-06-29 15:11:25 -07:00
Adrian Sampson
8d7397135f AlbumMatch and TrackMatch types
These new named tuples will represent candidates given by the autotagging
system. In the case of album matches, these are currently unwieldy,
verbosely-documented tuples that will only get more unwieldy with the addition
of "unmatched tracks".
2012-06-29 15:06:05 -07:00
Adrian Sampson
98d46be4a5 include global index in TrackInfo objects 2012-06-29 14:06:28 -07:00
Philippe Mongeau
5a2719711e Rename Fuzzy plugin class name. remove useless
conversion of an iterator to a list

the plugin class was called Random (because of copy
paste)
2012-06-25 20:54:11 -04:00
Philippe Mongeau
7187d93303 implement album option for the fuzzy plugin 2012-06-25 20:54:11 -04:00
Philippe Mongeau
288902a572 add experimental fuzzy matching plugin
fuzzy is a command which tries to be like the list command but using
fuzzy matching.
2012-06-25 20:54:11 -04:00
Adrian Sampson
6503e85a57 fetchart: autofetch option
This necessitated a slight refactoring in the plugin event handling mechanism.
Rather than loading all handlers up front and storing them in a module-scope
structure, we now scan for event handlers at every send(). This is probably
very slightly less efficient but allows for more flexible logic.
2012-06-24 19:01:19 -07:00
Adrian Sampson
fbb5823541 fetchart: command to manually download art 2012-06-24 18:27:00 -07:00
Adrian Sampson
77cbb19564 fetchart: get local art for as-is imports (GC-339) 2012-06-24 17:41:37 -07:00
Adrian Sampson
d807b3fbf1 Cover Art Archive support (GC-71) 2012-06-24 16:57:04 -07:00
Adrian Sampson
d97f13a899 pypy-compatible sqlite3 invocation 2012-06-24 13:30:36 -07:00
Adrian Sampson
713faca533 hg-compatible tox config 2012-06-24 13:06:34 -07:00
Adrian Sampson
59e08a3e0a Merge pull request #42 from msabramo/tox
Add support for tox (http://tox.testrun.org/)
2012-06-24 12:52:15 -07:00
Marc Abramowitz
a69b669abc Add .tox to .gitignore 2012-06-24 00:42:45 -07:00
Marc Abramowitz
39acbac9ce Add tox.ini for tox (http://tox.testrun.org/) 2012-06-24 00:41:10 -07:00
Adrian Sampson
11d4fb1abb move album art fetching to a plugin (fetchart) 2012-06-24 00:34:50 -07:00
Adrian Sampson
f5962f45d8 merge 2012-06-23 17:20:02 -07:00
Adrian Sampson
073ee14e56 fix broken matching of path format queries (#405)
A bug in the shlex module with Unicode strings made these queries unparseable
and thus match every track.
2012-06-23 17:18:28 -07:00
Adrian Sampson
7e6e5e5dca nicer error message when stdin is EOF'd 2012-06-21 17:37:45 -07:00
Adrian Sampson
9efdf93dd6 Merge pull request #41 from encukou/patch-1
Add missing parenthesis in docs
2012-06-17 13:07:48 -07:00
Petr Viktorin
d3c8297527 Add missing parenthesis in docs 2012-06-17 20:26:26 +03:00
Adrian Sampson
ad4b7f8ff5 new plugin event: import_task_files 2012-06-14 12:41:39 -07:00
Adrian Sampson
c5424dce05 lastgenre and lyrics: use new pluggable import stages
This solves a problem where files were copied before the genre field was
updated, resulting in problems when $genre was used in a path (GC-357).
2012-06-08 15:17:49 -07:00
Adrian Sampson
48ffa08928 plugin import stages 2012-06-08 14:49:04 -07:00
Adrian Sampson
0259e7a728 changelog note about new locking (GC-399) 2012-06-08 11:44:59 -07:00
Adrian Sampson
b487001c9b exclusive database access (GC-399)
This is the crux of the matter. This new lock synchronizes accesses to the
database itself, allowing only one thread to have transactions active at a time.
In effect, this makes sure that beets only has one SQLite transaction active at
a time (and is very conservative in this effort; no read sharing is allowed
either). This prevents all contention in SQLite and hides the pathological
HAVE_SLEEP=0 behavior.
2012-06-08 11:34:54 -07:00
Adrian Sampson
5d6e9b387a synchronize access to mutable shared maps (GC-399)
We now properly synchronize access to _tx_stacks and _connections, which can be
concurrently mutated by different threads. This way I don't have to worry about
GIL semantics: DRF => SC!
2012-06-08 11:24:16 -07:00
Adrian Sampson
00c47b6811 library has per-thread transaction stacks (GC-399)
The Library object is now (almost) safe to share across threads. Per-thread
resources are now automatically managed internally. There is no longer any need
for the _reopen_lib hack to get multiple copies of the Library object.
2012-06-08 11:09:45 -07:00
Adrian Sampson
d88afbad11 library maintains per-thread DB conns. (GC-399) 2012-06-08 10:49:47 -07:00
Adrian Sampson
d83c1fad6b chroma: use multiple recording candidates 2012-06-06 12:35:25 -07:00