<html>
<body>
<div style="font-family: Verdana, Arial, Helvetica, Sans-Serif;">
<table bgcolor="#f9f3c9" width="100%" cellpadding="8" style="border: 1px #c9c399 solid;">
<tr>
<td>
This is an automatically generated e-mail. To reply, visit:
<a href="http://git.reviewboard.kde.org/r/100000/">http://git.reviewboard.kde.org/r/100000/</a>
</td>
</tr>
</table>
<br />
<blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
<p style="margin-top: 0;">On , <b>Sergey Ivanov</b> wrote:</p>
<blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
<pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">Looks works for me.</pre>
</blockquote>
<p>On September 22nd, 2010, 2:27 a.m., <b>Leo Franchi</b> wrote:</p>
<blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
<pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">Doesn't compile when KDE4_BUILD_TESTS is enabled:
[ 54%] Building CXX object tests/core-impl/collections/proxycollection/CMakeFiles/testproxycollectionmeta.dir/TestProxyCollectionMeta.o
/home/leo/kde/src/amarok/tests/core-impl/collections/proxycollection/TestProxyCollectionMeta.cpp: In member function ‘void TestProxyCollectionMeta::testEditableCapabilityOnMultipleTracks()’:
/home/leo/kde/src/amarok/tests/core-impl/collections/proxycollection/TestProxyCollectionMeta.cpp:463:51: error: cannot allocate an object of abstract type ‘MyEditCapability’
/home/leo/kde/src/amarok/tests/core-impl/collections/proxycollection/TestProxyCollectionMeta.cpp:433:1: note: because the following virtual functions are pure within ‘MyEditCapability’:
/home/leo/kde/src/amarok/src/core/capabilities/EditCapability.h:57:26: note: virtual void Capabilities::EditCapability::setUid(const QString&, const QString&)
/home/leo/kde/src/amarok/tests/core-impl/collections/proxycollection/TestProxyCollectionMeta.cpp:464:51: error: cannot allocate an object of abstract type ‘MyEditCapability’
/home/leo/kde/src/amarok/tests/core-impl/collections/proxycollection/TestProxyCollectionMeta.cpp:433:1: note: since type ‘MyEditCapability’ has pure virtual functions
make[2]: *** [tests/core-impl/collections/proxycollection/CMakeFiles/testproxycollectionmeta.dir/TestProxyCollectionMeta.o] Error 1
make[1]: *** [tests/core-impl/collections/proxycollection/CMakeFiles/testproxycollectionmeta.dir/all] Error 2
</pre>
</blockquote>
<p>On September 22nd, 2010, 2:44 a.m., <b>Leo Franchi</b> wrote:</p>
<blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
<pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">I have some doubts about the mass tagging UI. When I first open the MusicBrainz tagger with multiple files selected, I see this:
http://imagebin.ca/view/e25y1kwP.html'
I can select files in the left pane, and that populates the fields below. It's not clear if the "Start Searching..." button operates on the currently selected track, or all the tracks. I learned it operates on all the tracks, but I didn't know until I tried it. The text should clarify this. Then I see this:
http://imagebin.ca/view/iKtHSXE.html'
Now I am just confused. What happened to the tracks on the left? What are the entries on the right? None of them are track names, they are actually album names. It's not good to h ave the left listview be tracks and the right listview be albums without any sort of help for the user to figure that out. Anyway, as a new user i'm curious as to what these entries are, so I expand one or two:
http://imagebin.ca/view/jrUBpR3K.html'
And so I am extrapolating here, it seems like it is picking albums and bolding the names of tracks in the album that matches one of the tracks I had on the left---but has now disappeared. What are all the non-bold track names for? They are not related to the original tracks in the left hand pane. I can't have an overview of what this dialog is actually going to do.
I'm not sure at this point if "Save" operates on the currently selected tracks, or if it saves all the tracks (what tracks? the ones that are bold? all of them? it is confusing).
Also, I am unable to use the MusicDNS finder. No matter what, it never find anything. Here is my debug output:
amarok: BEGIN: MusicDNSFinder::MusicDNSFinder(const Meta::TrackList&, QObject*, const QString&, int, const QString&, const QString&, const QString&)
amarok: [MusicDNSFinder] Initiating MusicDNS search:
amarok: [MusicDNSFinder] Host: "ofa.musicdns.org"
amarok: [MusicDNSFinder] Port: 80
amarok: [MusicDNSFinder] Path Prefix: "/ofa/1"
amarok: [MusicDNSFinder] Client ID: "0c6019606b1d8a54d0985e448f3603ca"
amarok: [MusicDNSFinder] Client version: "2.3-GIT"
amarok: BEGIN: MusicDNSAudioDecoder::MusicDNSAudioDecoder(const Meta::TrackList&, int)
amarok: END__: MusicDNSAudioDecoder::MusicDNSAudioDecoder(const Meta::TrackList&, int) - Took 0.085s
amarok: END__: MusicDNSFinder::MusicDNSFinder(const Meta::TrackList&, QObject*, const QString&, int, const QString&, const QString&, const QString&) - Took 0.086s
amarok: END__: void MusicBrainzTagger::searchDone() - DELAY Took (quite long) 10s
amarok: END__: void MusicBrainzFinder::sendNewRequest() - DELAY Took (quite long) 10s
amarok: BEGIN: void MusicDNSFinder::decodingDone(ThreadWeaver::Job*)
amarok: END__: void MusicDNSFinder::decodingDone(ThreadWeaver::Job*) - Took 0.00011s
amarok: BEGIN: void MusicDNSFinder::sendNewRequest()
amarok: [MusicDNSFinder] There is no any queued requests. Stopping timer.
amarok: BEGIN: void MusicBrainzTagger::mdnsSearchDone()
amarok: END__: void MusicBrainzTagger::mdnsSearchDone() - Took 6.9e-05s
amarok: END__: void MusicDNSFinder::sendNewRequest() - Took 0.00026s
amarok: BEGIN: void MusicBrainzFinder::sendNewRequest()
amarok: [MusicBrainzFinder] There is no any queued requests. Stopping timer.
amarok: BEGIN: void MusicBrainzTagger::searchDone()
amarok: END__: void MusicBrainzTagger::searchDone() - Took 8.5e-05s
amarok: END__: void MusicBrainzFinder::sendNewRequest() - Took 0.00029s
am I doing something wrong?</pre>
</blockquote>
<p>On September 22nd, 2010, 9:30 a.m., <b>Sergey Ivanov</b> wrote:</p>
<blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
<pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">This UI made to be like on Picard (original musicbrainz tagger). On a left side we have tracks to search, on a right side - search result. When a track found we move it from left side to the right one. On the right table complete album's track list is shown. Albums, that contains a track has a bold text, the same to tracks - all tracks in a album linked to real tracks has a bold text. BTW all tracks are drag-able. So if don't wanna save search result for some tracks, you can drop this tracks to left panel.
Could you send one of this track on 123kash@gmail.com, i didn't have such troubles with my "test samples".</pre>
</blockquote>
</blockquote>
<pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">Sorry for the delay. Work has been keeping me busy.
I've never used Picard, so that's why I was confused. But I think this points to a valid criticism---the use of Picard is not necessary to the use of Amarok. Users should not be expected to be familiar with the user interface of another program to feel comfortable with Amarok's user interface. For example, I had no idea i could drag tracks---there are no visual indicators that dragging is possible, nor do I know what dragging would do exactly (why is dragging right->left "choosing not to save results"?). My point with this is that I think we need a better explanation than "it is how Picard does it"---we want Amarok to be as intuitive and user-friendly as possible, regardless of how good or bad other programs are :) I think a few things at least need to be done:
1) Workflow clarified---what is the user supposed to do? What buttons do what, and how is the user informed of that?
2) Text to explain to the user what to do. Tooltips to explain what buttons do
Re: files:
What sort of files are supposed to 'work'? I tried some popular bands (the beatles, the who, queen, led zeppelin) that they definitely should have in their records, but got 0 results. I can send you some if you want, or come find me on irc (nick lfranchi, #amarok on Freenode)</pre>
<br />
<p>- Leo</p>
<br />
<p>On September 22nd, 2010, 9:23 a.m., Sergey Ivanov wrote:</p>
<table bgcolor="#fefadf" width="100%" cellspacing="0" cellpadding="8" style="background-image: url('http://git.reviewboard.kde.orgrb/images/review_request_box_top_bg.png'); background-position: left top; background-repeat: repeat-x; border: 1px black solid;">
<tr>
<td>
<div>Review request for amarok.</div>
<div>By Sergey Ivanov.</div>
<p style="color: grey;"><i>Updated 2010-09-22 09:23:42</i></p>
<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Description </h1>
<table width="100%" bgcolor="#ffffff" cellspacing="0" cellpadding="10" style="border: 1px solid #b8b5a0">
<tr>
<td>
<pre style="margin: 0; padding: 0; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">MusicBrainz and MusicDNS services support implementation.
There are three independent parts:
1. MusicBrainzFinder class - used to make requests to MusicBrainz server and process replies. All relies process in separate threads by MusicBrainzXmlParser class. For a search uses guessed from a file name track information. No external dependences required.
2. MusicDNSFinder class - used for the same purpose as MusicBrainzFinder, but i communicate with musicdns server and receives track's PUID as a reply. Replies ether process in separate threads by MusicDNSXmlParser class. Fingerprints generated by libofa (the only external dependence in entire patch). For track decompressing (MusicDNSAudioDecoder class) used xine engine (I'm not sure is It a good choice, but amarok based on phonon media-engine, that uses xine. So we don't deed to pull any other dependences). Received PUIDs sends to MusicBrainzFinder class, for a search routine.
3. View. All classes used for store (MusicBrainzTagsModel, MusicBrainzTrackListModel) and display (MusicBrainzTagsModelDelegate) purposes.</pre>
</td>
</tr>
</table>
<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Diffs</b> </h1>
<ul style="margin-left: 3em; padding-left: 0;">
<li>CMakeLists.txt <span style="color: grey">(191b02e)</span></li>
<li>cmake/modules/FindLibOFA.cmake <span style="color: grey">(PRE-CREATION)</span></li>
<li>config-amarok.h.cmake <span style="color: grey">(981b7b7)</span></li>
<li>src/CMakeLists.txt <span style="color: grey">(42614ff)</span></li>
<li>src/core-impl/capabilities/timecode/TimecodeEditCapability.h <span style="color: grey">(6e15303)</span></li>
<li>src/core-impl/capabilities/timecode/TimecodeEditCapability.cpp <span style="color: grey">(8205d45)</span></li>
<li>src/core-impl/collections/mediadevicecollection/MediaDeviceMeta.h <span style="color: grey">(e35b57f)</span></li>
<li>src/core-impl/collections/mediadevicecollection/MediaDeviceMeta.cpp <span style="color: grey">(9be62d9)</span></li>
<li>src/core-impl/collections/proxycollection/ProxyCollectionMeta.cpp <span style="color: grey">(8bdbf75)</span></li>
<li>src/core-impl/collections/sqlcollection/CapabilityDelegateImpl.cpp <span style="color: grey">(b5cb083)</span></li>
<li>src/core-impl/collections/sqlcollection/SqlMeta.h <span style="color: grey">(ee3ec21)</span></li>
<li>src/core-impl/collections/sqlcollection/SqlMeta.cpp <span style="color: grey">(2da0333)</span></li>
<li>src/core-impl/meta/file/File.h <span style="color: grey">(6d4d395)</span></li>
<li>src/core-impl/meta/file/File.cpp <span style="color: grey">(30cd2ff)</span></li>
<li>src/core-impl/meta/file/TagLibUtils.cpp <span style="color: grey">(15b64a4)</span></li>
<li>src/core-impl/meta/proxy/MetaProxy.h <span style="color: grey">(2ef3805)</span></li>
<li>src/core-impl/meta/proxy/MetaProxy.cpp <span style="color: grey">(341e076)</span></li>
<li>src/core/capabilities/EditCapability.h <span style="color: grey">(79344bd)</span></li>
<li>src/dialogs/MusicBrainzTagger.h <span style="color: grey">(PRE-CREATION)</span></li>
<li>src/dialogs/MusicBrainzTagger.cpp <span style="color: grey">(PRE-CREATION)</span></li>
<li>src/dialogs/MusicBrainzTagger.ui <span style="color: grey">(PRE-CREATION)</span></li>
<li>src/dialogs/TagDialog.h <span style="color: grey">(50cd801)</span></li>
<li>src/dialogs/TagDialog.cpp <span style="color: grey">(68fc5e3)</span></li>
<li>src/dialogs/TagDialogBase.ui <span style="color: grey">(9974d0b)</span></li>
<li>src/musicbrainz/MusicBrainzFinder.h <span style="color: grey">(PRE-CREATION)</span></li>
<li>src/musicbrainz/MusicBrainzFinder.cpp <span style="color: grey">(PRE-CREATION)</span></li>
<li>src/musicbrainz/MusicBrainzMetaClasses.h <span style="color: grey">(PRE-CREATION)</span></li>
<li>src/musicbrainz/MusicBrainzMetaClasses.cpp <span style="color: grey">(PRE-CREATION)</span></li>
<li>src/musicbrainz/MusicBrainzTagsModel.h <span style="color: grey">(PRE-CREATION)</span></li>
<li>src/musicbrainz/MusicBrainzTagsModel.cpp <span style="color: grey">(PRE-CREATION)</span></li>
<li>src/musicbrainz/MusicBrainzTagsModelDelegate.h <span style="color: grey">(PRE-CREATION)</span></li>
<li>src/musicbrainz/MusicBrainzTagsModelDelegate.cpp <span style="color: grey">(PRE-CREATION)</span></li>
<li>src/musicbrainz/MusicBrainzTrackListModel.h <span style="color: grey">(PRE-CREATION)</span></li>
<li>src/musicbrainz/MusicBrainzTrackListModel.cpp <span style="color: grey">(PRE-CREATION)</span></li>
<li>src/musicbrainz/MusicBrainzXmlParser.h <span style="color: grey">(PRE-CREATION)</span></li>
<li>src/musicbrainz/MusicBrainzXmlParser.cpp <span style="color: grey">(PRE-CREATION)</span></li>
<li>src/musicbrainz/MusicDNSAudioDecoder.h <span style="color: grey">(PRE-CREATION)</span></li>
<li>src/musicbrainz/MusicDNSAudioDecoder.cpp <span style="color: grey">(PRE-CREATION)</span></li>
<li>src/musicbrainz/MusicDNSFinder.h <span style="color: grey">(PRE-CREATION)</span></li>
<li>src/musicbrainz/MusicDNSFinder.cpp <span style="color: grey">(PRE-CREATION)</span></li>
<li>src/musicbrainz/MusicDNSXmlParser.h <span style="color: grey">(PRE-CREATION)</span></li>
<li>src/musicbrainz/MusicDNSXmlParser.cpp <span style="color: grey">(PRE-CREATION)</span></li>
<li>tests/core-impl/collections/proxycollection/TestProxyCollectionMeta.cpp <span style="color: grey">(55d1914)</span></li>
</ul>
<p><a href="http://git.reviewboard.kde.org/r/100000/diff/" style="margin-left: 3em;">View Diff</a></p>
</td>
</tr>
</table>
</div>
</body>
</html>