
cuberok - issue #22
Cuberok должен добавлять в список только поддерживаемые форматы файлов
What steps will reproduce the problem? 1. Открыть боковую панель "Файлы" и выбрать любую папку, в которой кроме треков есть, например, обложка альбома в jpg файле, файл лицензии и т.п. 2. Перетащить папку в список воспроизведения
What is the expected output? What do you see instead? Ожидаемый результат: только треки из папки добавляются в список воспроизведения Получаемый результат: В список добавляются треки, картинки, текстовые файлы и все что лежало в папке
What version of the product are you using? On what operating system? Версия плеера 0.0.9, то же самое наблюдалось и в предидущих версиях. ОС WinXP SP3.
Comment #1
Posted on May 6, 2009 by Swift KangarooСогласен, имеет место быть бага. Работы ведутся.
Comment #2
Posted on May 18, 2009 by Quick GiraffeКстати, здесь же, наверно, можно учесть такую особенность: сейчас, когда в одной папке лежат и cue, и образ, в плейлист добавляется этот образ потреково и дополнительно он же целиком.
Cuberok v 0.0.10 build: 19:37:36 May 18 2009 Qt: 4.5.1 X11 Current plugin: Phonon Available plugins are: Null engine GStreamer Phonon
Gentoo Linux
Comment #3
Posted on May 26, 2009 by Happy Oxиногда при этом плеер еще и крашится или зависает
Comment #4
Posted on Jun 2, 2009 by Quick GiraffeНасколько я понимаю, просить стоит здесь.
В некотрых cue-файлах указан образ, который на самом деле не существует. Очень часто в скачанной раздаче лежат либо два cue (в одном указан образ CDImage.wav, в другом - CDImage.ape), либо один, но который указывает на CDImage,wav, хотя в раздаче лежит ape или flac.
Предлагаю детектить такие ситуации и если файл образа, который указан в cue, не существует, показывать пользователю диалог, типа CUE $имяфайла.cue указывает на образ $имяобраза.wav, который не существует. Что делать? [не загружать cue] [указать другой файл] если выбрано "указать другой файл" то тут пользователю можно дополнительно предложить (O) исправить имя файла в cue () создать второй cue-файл в той же папке с исправленным именем файла () нечего не менять и не создавать (при следующем обращении в этому cue придётся снова отвечать на эти вопросы
Вот как-то так :)
Comment #5
Posted on Jun 3, 2009 by Swift KangarooПора мне отдельный список фичреквестов завести, чтобы не запутаться...
Comment #6
Posted on Jun 3, 2009 by Quick GiraffeДа, пожалуй, дейтвительно стоит выделить Comment 4 в отдельный вопрос. Тем более, что остаются непонятки с ним.
так что, извините, что подвортил топик, считаем, что этого фичереквеста в нём не было. http://code.google.com/p/cuberok/issues/detail?id=43
Comment #7
Posted on Jul 7, 2009 by Swift KangarooThis issue was closed by r244.
Comment #8
Posted on Jul 7, 2009 by Quick GiraffeПеретаскивал в плейлист фот такую папку, добавились флаки и лог
01 - Reise, Reise.flac 02 - Mein Teil.flac 03 - Dalai Lama.flac 04 - Keine Lust.flac 05 - Los.flac 06 - Amerika.flac 07 - Moskau.flac 08 - Morgenstern.flac 09 - Stein Um Stein.flac 10 - Ohne Dich.flac 11 - Amour.flac cover.jpg Rammstein - Reise, Reise.cue Rammstein - Reise, Reise.cue2tracks.log
cue не добавился и не должен был (нет файла, на который оно указывает), картинка не добавилась (и не должна).
Comment #9
Posted on Jul 8, 2009 by Swift Kangaroor247 Хочу отметить, что определение неподдерживаемого формата файла происходит исключительно по расширению, и даже по небольшому списку таковых ибо Ибо в реале отличить музыкальный файл от ерунды всякой может только бакэнд, а дёргать его на каждый из многих сотен файлов представляется мне нерациональным.
по сему список на настоящий момент далеко не полный и его можно дополнять: if(suf == "jpg" || suf == "png" || suf == "txt" || suf == "doc" || suf == "log" || suf.startsWith("htm") || !suf.size() || !base.size())
Comment #10
Posted on Jul 8, 2009 by Quick GiraffeА мы точно не можем заранее, при подгрузке бэкэнда, выяснить, какие mime-типы он поддерживает? А потом по ним отсеивать. Я видел, что в плагинах есть некий список. Или в винде нереально mime-тип определить? Насколько я понимаю, список поддерживаемых типов всегда будет короче, чем список неподдерживаемых )))
Вот, например, у меня есть раздача специального издания, где в одном каталоге лежат DVD и mp3. Я, не особо замарачиваясь, перетащил всю раздачу в проигрыватель и все файлы с DVD (всякие VIDEO_TS.VOB) у меня теперь в плейлисте ;-)
Comment #11
Posted on Jul 8, 2009 by Swift Kangarooемнип только у фонона есть спец функция для определения поддерживаемых mime типов, и та (по крайней мере в винде) работает из рук вон косо
С другой стороны VOB содержит аудио дорожку и банить его будет некорректно, сам видал как кореша на компе смотрели кино, а с ноута его же слушали :-)
Меня в существующей схеме больше всего смущает возможность несоответствия расширения и типа. Я рад бы переделать, но как?
Comment #12
Posted on Jul 8, 2009 by Quick GiraffeМеня в существующей схеме больше всего смущает возможность несоответствия расширения и типа. Меня вообще этот, откровенно говоря, виндовый способ определения типа файла смущал ещё когда я на винде сидел.
Я правильно понимаю, что только на gstreamer есть потенциальная возможность изменения списка поддерживаемых форматов? Предлагаю наобум такой вариант (мне нравится тем, что он расширяемый): 1. Получаем от плагина список форматов (mime), которые он, теоретически, может играть. Этот список может быть прошит в коде (как сейчас, например, в том же phonon) или оперделяться динамически, если бэкэнд это позволяет. Это костяк. 2. В настройках плагина добавляем раздел "поддерживаемые форматы". Здесь отображаем список форматов, которые мы уже считаем поддерживаемыми, с возможность удаления элементов из этого списка. Для добавления формата предлагаем указать музыкальный файл, определяем его параметры и добавляем формат этого файла в список. Естественно, "служебные" форматы вроде *.pls, *.m3u и *.cue в список поддерживаемых форматов добавлять не нужно, о чём пользователя можно предупредить прямо в окне настроек, чтоб не забывал. 3. при добавлении файлов в плейлист сверяемся со списком поддерживаемых форматов для текущего бэкэнда. 4. при динамической смене бэкэнда файлы в плейлисте, которые имеют неподдерживаемый формат, делаем "серыми", они остаются в плейлисте, но не воспроизводятся, а пользователю ненавязчиво предлагается их удалить из списка или выбрать другой бэкэнд.
Вот как-то так. Мне вчера уже сказали, что фантазия у меня слишком богатая )))
Comment #13
Posted on Jul 8, 2009 by Quick Giraffebtw, http://qt-apps.org/content/show.php/QFreeDesktopMime?content=86454
Comment #14
Posted on Jul 8, 2009 by Swift KangarooВ целом поддерживаю, однако будет проблема с phonon, у него есть собственные бакэнды, которые могут пропадать и появляться без предупреждения. Придётся при каждом запуске мониторить список типов для него.
Comment #15
Posted on Jul 8, 2009 by Swift Kangaroo(No comment was entered for this change.)
Comment #16
Posted on Jul 8, 2009 by Quick GiraffeПридётся при каждом запуске мониторить список типов для него. Просто интересно: каким образом? Спрашиваю не чтобы подискутировать, я просто не представляю. Если от фонона можно получить используемый им бэкэнд, тогда могу предположить...
Кстати, если уж делать таким способом, то при добавлении файлов в плейлист можно, как в amarok показывать всплывашку с надписью "некоторые файлы не были добавлены в плейлист, потому что формат считается непоодерживаемым", только в отличие от амарок, полагаю, нужно добавить кнопки "показать список недобавленных файлов" и "перейти к настройкам поддерживаемых форматов"
Comment #17
Posted on Jul 8, 2009 by Swift KangarooДля phonon получить бакэнд нельзя (или я просто не знаю как), но можно спросить Phonon::BackendCapabilities::isMimeTypeAvailable(mimetype) и, предполагая, что бакенд с прошлого запуска мог измениться, проверять все допустимые типы на корректность при запуске. Что с ними делать если он окажется некорректным я не знаю. Теоретически может быть такая ситуация: заполнен список эмпетрями, играет пестня, cuberok на всём скаку закрывают. Потом из дистриба удаляется (условно) libmad и cuberok запускается вновь. Весь список внезапно окажется неподдерживаемым phonon.
По поводу всплывашки отдельная песня: Щас штатным методом работы считается ругань в окно сообщений, значёк даже меняется при ошибках. Я согласен, что нередко нужна какая-то интерактивность, или просто более видное сообщение об ошибке. Однако не могу придумать механизм интерактивности в общем виде... Кнопка "отменить задание" у меня фактически не работает, для коррекции cue образов пришлось прокидывать специальные сигналы в gui thread. Есть мысли по поводу общей реализации и механизмов?
Comment #18
Posted on Jul 8, 2009 by Quick GiraffeТеоретически может быть такая ситуация: заполнен список эмпетрями, играет пестня, cuberok на всём скаку закрывают. Потом из дистриба удаляется (условно) libmad и cuberok запускается вновь. Весь список внезапно окажется неподдерживаемым phonon.
Ну, в такой ситуации тоже можно делать позиции "серыми" в плейлисте. Как я понимаю, сейчас такого механизма нет, но если такой вариант делать, то лучше наверно сразу, а не после вынесения в плагины. Если такой вариант невозможен в принципе, то можно подумать ещё о чем-нибудь.
нередко нужна какая-то интерактивность, или просто более видное сообщение об ошибке. Как я это вижу... Я полагаю, что можно добавить ещё один док-виджет, но чтобы пользователь не управлял им самостоятельно. Этот виджет сделать обработчиком сообщений. Если сообщение важное - виджет "вылезает", отображается, например вот так, как на каритнке, "потеснив" существующие док-виджеты. http://h.imagehost.org/0110/error_dialog_mockup.png Все "неважные" сообщения добавляются в список и просматриваются как лог по требованию. "Важные" сообщения тоже добавляются в список, но и отображаются отдельно, с кнопками "закрыть", "следующее", "предыдущее". В качестве "важного" сообщения можно передавать не только текст, но и готовый виджет со своими кнопками, например. Можно предусмотреть таймауты для закрытия этих виджетов, если это несложно. В итоге получается маленький такой браузер для просмотра ошибок, который вылезает сам, если что-то случится и прячется либо вручную, либо по таймауту.
Недостатки: слишком "круто" и сложно; возможно, будет некрасиво, если пользователь как- то по-своему расположил док-виджеты.
А про кнопку "отменить задание" я так и не понял, что она делает ))
Comment #19
Posted on Jul 24, 2009 by Swift KangarooЩа приделал следующую фичу:
Если выбрать автоматический аудио вывод, то на вкладке "Настройка звука" можно будет задать для любого mime предпочтительный бакэнд. Проверки пока нету, можно и на audiere повесить кота в мешке, и оно честно будет пытацо запустицо. Эту фичу в принципе можно использовать как workaround для ape, который не играется на ffmpeg
Интересует юзабельность этого подхода с точки зрения пользователя.
Comment #20
Posted on Jul 24, 2009 by Quick GiraffeФишка интересная, только похоже, что тип файла, который определяет проигрыватель, не значится в предлагаемом списке (можно читать как "у меня не заработало"). Если оставить, то нужно указывать предпочитаемый вывод, который используется для типов, не заданных в табличке.
В плане "юзабельность этого подхода" - фишка может позиционироваться как "для продвинутых пользователей", которые не только понимают, что такое mime-type и какие у них есть плагины вывода, но и отличают звучание одного и того же файла на разных движках. Тогда эти пользователи смогут, например, заставить проигрыватель воспроизводить mp3 через GStreamer, который, например, использует mad, а flac через ffmpeg, который, например, корректнее работает с его метаданными.
Тут важно, чтобы наличие этого функционала не замедляло переход между треками и не усложняло поддержку кода. Линуксоиды любят рассказывать, что такие функции не нужны, я же считаю, что нужны любые функции, которые кто-то может использовать, если они не портят программу, конечно.
======== По поводу "не заработало": у меня все файлы играются GStreamer'ом, хотя я указал играть mime audio/ogg через ffmpeg
$ kfile -av ~/Музыка/Король\ и\ Шут/2008\ -\ Тень\ Клоуна/09\ -\ Кода.ogg /home/name_no/Музыка/Король и Шут/2008 - Тень Клоуна/09 - Кода.ogg: Звуковой файл Ogg Vorbis (audio/vorbis)
Comment #21
Posted on Jul 24, 2009 by Swift Kangarooа если поставить не audio/ogg а application/ogg? r279
Там ещё можно проверить так, в исходниках в папочке QFreeDesktopMime собрать его тестилку и запустить test interested_file (меня самого избыточность ogg типов напрягает)
Ещё добавлю установку движка по умолчанию для авто... Про продвинутых пользователей: щитаю это направление перспективным, advanced фичи будут
Оверхеда кстати эта фича не накладывает, ибо все бакэнды инициализируются заранее и меняются между собой без задержки.
Comment #22
Posted on Jul 24, 2009 by Swift KangarooЕщё добавлю установку движка по умолчанию для авто... r280
Comment #23
Posted on Jul 24, 2009 by Quick GiraffeТестик пришлось подредактировать ))))
Index: src/test.cpp
--- src/test.cpp (revision 278) +++ src/test.cpp (working copy) @@ -48,14 +48,18 @@ qDebug() << mime.fromFileName("test.h"); qDebug() << mime.description();
- qDebug() << "Start arguments"; if (argc > 1) {
- if (QFileInfo(argv[1]).isDir()) {
- QDir dir(argv[1]);
- //dir.setFilter(QDir::Files);
- foreach (QFileInfo fileInfo, dir.entryInfoList())
- qDebug() << "-" << mime.fromFile (fileInfo.absoluteFilePath()) << fileInfo.fileName();
- } else {
- qDebug() << "-" << mime.fromFile(argv[1]) << argv[1];
- for (int i = 1; i < argc; i++) {
- QString f = QString::fromLocal8Bit(argv[i]);
- if (QFileInfo(f).isDir()) {
- QDir dir(f);
- //dir.setFilter(QDir::Files);
- foreach (QFileInfo fileInfo, dir.entryInfoList())
- qDebug() << "-" << mime.fromFile (fileInfo.absoluteFilePath()) << fileInfo.fileName();
- } else {
- qDebug() << "-" << mime.fromFile(f) << f;
- } } }
Start arguments - "audio/x-vorbis+ogg" "/home/name_no/Музыка/Король и Шут/2008 - Тень Клоуна/09 - Кода.ogg" - "application/x-cue" "/home/name_no/Музыка/Sex Pistols/Sex Pistols-Flogging A Dead Horse/Sex Pistols - Flogging A Dead Horse.cue"
Выставил "audio/x-vorbis+ogg" - сработало.
Кстати, после того, как воспользовался тестом, заметил, что, кажется, cuberok забывает переключиться на автовыбранный плагин при переходе на трек, которого нет в табличке. Похоже, что это решится само собой когда появится "плагин по дефолту".
Например: в табличке задано только "audio/x-vorbis+ogg" -> FFmpeg Запускаем проигрывтель. Cuberok играет mp3 плагином GStreamer. Переходим на ogg-трек. Cuberok переключается на FFmpeg. Переходим на mp3-трек - он воспроизводится плагином FFmpeg.
Comment #24
Posted on Jul 24, 2009 by Quick GiraffeМдя...
$ test-mime./01\ Holidays\ In\ The\ Sun.flac ............. - "audio/mpeg" "./01 Holidays In The Sun.flac"
Comment #25
Posted on Jul 28, 2009 by Swift Kangaroor287 Добавил экспериментальную всплывашку в левом нижнем углу приложения. Пока туда попадают все записи из "Сообщений". Поскольку полноценный OSD мне не представляется возможным, требуется придумать как этой штукой будет удобнее пользоваться. Привязывать ли её к главному окну, или к десктопу?
Ещё туда добавлю опциональную кнопку отмены, и будет примерно следующее: Кинул пользователь в плейлист всю домашнюю папку, вылезло сообщение "добавление папки такой-то", в течении десяти секунд (если машина задохнулась от щастья такого) у пользователя есть возможность прессануть по батончику "отмена", и насилие над винтом мгновенно прекратится. Тоже самое будет для длительных операций типа: - полезли в инет зачем-то - нажали пересканировать библиотеку, или кинули туда папку гигов на ндцать
Comment #26
Posted on Jul 28, 2009 by Quick GiraffeЭта штука "похищает фокус" )))))
Активно работаю в консоли, cuberok на другом рабочем столе. При смене трека всплывашка вылезает на моём рабочем столе и пока она не исчезнет - клавиатурный ввод не идёт в консоль. Это на r288.
Comment #27
Posted on Jul 28, 2009 by Swift Kangaroor289 вроде поправил, проверил на гноме
Comment #28
Posted on Jul 28, 2009 by Quick GiraffeДа, это помогло от перехвата фокуса.
Теперь нужно сделать ещё одну фишку: 1. Переключаемся в окно cuberok. 2. Запускаем следующий трек. Всплывашка появляется в углу окна cuberok 3. Переключаемся в другое окно. Всплывашка оказывается посреди экрана и всё загораживает )))
P.S. Предлагаю ещё так: $ svn diff src/messagewindow.cpp src/resource.qrc
Index: src/messagewindow.cpp
--- src/messagewindow.cpp (revision 289) +++ src/messagewindow.cpp (working copy) @@ -33,7 +33,7 @@ QLabel *label = new QLabel(mes, this); label->setWordWrap(true); vl->addWidget(label); - QPushButton *b = new QPushButton("X", this); + QPushButton *b = new QPushButton(QIcon(":/icons/edit-add.png"), "", this); connect(b, SIGNAL(clicked(bool)), this, SLOT(close())); b->setMaximumSize(24, 24); hl->addWidget(b);
Index: src/resource.qrc
--- src/resource.qrc (revision 289) +++ src/resource.qrc (working copy) @@ -61,5 +61,6 @@ ../images/gohome.png ../images/back.png ../images/forward.png + ../images/edit-add.png
- edit-add.png 16.99KB
Comment #29
Posted on Jul 30, 2009 by Quick GiraffeКруто, FFmpeg плагин играет архив rar, в котором лежат отдельные треки mp3. Шикарно.
Comment #30
Posted on Jul 30, 2009 by Swift Kangarooудивлён весьма! воспроизвести не могу ни на винде ни на lenny
Comment #31
Posted on Jul 30, 2009 by Quick GiraffeА жаль, потому что даже seek работает как положено. Единственное, чего не хвататет, так это отображения времени: http://a.imagehost.org/0467/screen_08.png
Ещё попробую cue для rar-файла создать, хотя без времени, видимо, работать не будет ))))
Comment #32
Posted on Jul 30, 2009 by Quick GiraffeЗ.Ы. отдельный issue создавать не тянет. По поводу "можешь сам коммитить": я вчера попробовал и сразу у нас получилась коллизия:
http://code.google.com/p/cuberok/source/detail?r=291 http://code.google.com/p/cuberok/source/browse/trunk/src/main.cpp? spec=svn293&r=293#195
собственно, поэтому и стараюсь присылать патчи, а не коммитить их самостоятельно.
Comment #33
Posted on Jul 30, 2009 by Swift Kangarooэто я вчера накосячил когда macos мучал
кстати, на макоси это дело вызывало ошибочку (создание shared memory перед аппликейшеном). Потом посмотрю по-подробнее, разведу как нибудь
Comment #34
Posted on Jul 30, 2009 by Swift Kangarooкстати, если есть возможность, нужно потестить на MacOS... буду весьма признателен
Status: Started
Labels:
Type-Defect
Priority-Medium