KasunWijesekara / cuberok

Automatically exported from code.google.com/p/cuberok
GNU General Public License v3.0
0 stars 0 forks source link

Cuberok должен добавлять в список только поддерживаемые форматы файлов #22

Open GoogleCodeExporter opened 8 years ago

GoogleCodeExporter commented 8 years ago
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.

Original issue reported on code.google.com by Krapl...@gmail.com on 5 May 2009 at 5:52

GoogleCodeExporter commented 8 years ago
Согласен, имеет место быть бага. Работы 
ведутся.

Original comment by drmoriar...@gmail.com on 6 May 2009 at 6:39

GoogleCodeExporter commented 8 years ago
Кстати, здесь же, наверно, можно учесть 
такую особенность: сейчас, когда в одной 
папке лежат и 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

Original comment by nomen.in...@gmail.com on 18 May 2009 at 5:23

GoogleCodeExporter commented 8 years ago
иногда при этом плеер еще и крашится или 
зависает

Original comment by qdiesel....@gmail.com on 26 May 2009 at 8:26

GoogleCodeExporter commented 8 years ago
Насколько я понимаю, просить стоит здесь.

В некотрых cue-файлах указан образ, который 
на самом деле не существует. Очень часто 
в скачанной раздаче лежат либо два cue (в 
одном указан образ CDImage.wav, в другом - 
CDImage.ape), либо один, но который указывает на 
CDImage,wav, хотя в раздаче лежит 
ape или flac.

Предлагаю детектить такие ситуации и если 
файл образа, который указан в cue, не 
существует, показывать пользователю 
диалог, типа
CUE $имя_файла.cue указывает на образ 
$имя_образа.wav, который не существует. Что 
делать?
[не загружать cue] [указать другой файл]
если выбрано "указать другой файл" то тут 
пользователю можно дополнительно 
предложить
(O) исправить имя файла в cue
(_) создать второй cue-файл в той же папке с 
исправленным именем файла
(_) нечего не менять и не создавать (при 
следующем обращении в этому cue придётся 
снова отвечать на эти вопросы

Вот как-то так :)

Original comment by nomen.in...@gmail.com on 2 Jun 2009 at 6:45

GoogleCodeExporter commented 8 years ago
Пора мне отдельный список фичреквестов 
завести, чтобы не запутаться...

Original comment by drmoriar...@gmail.com on 3 Jun 2009 at 6:49

GoogleCodeExporter commented 8 years ago
Да, пожалуй, дейтвительно стоит выделить 
Comment 4 в отдельный вопрос. Тем более, что 
остаются непонятки с ним.

так что, извините, что подвортил топик, 
считаем, что этого фичереквеста в нём не 
было.
http://code.google.com/p/cuberok/issues/detail?id=43

Original comment by nomen.in...@gmail.com on 3 Jun 2009 at 7:23

GoogleCodeExporter commented 8 years ago
This issue was closed by r244.

Original comment by drmoriar...@gmail.com on 7 Jul 2009 at 7:28

GoogleCodeExporter commented 8 years ago
Перетаскивал в плейлист фот такую папку, 
добавились флаки и лог

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 не добавился и не должен был (нет файла, 
на который оно указывает), картинка не 
добавилась (и не должна).

Original comment by nomen.in...@gmail.com on 7 Jul 2009 at 6:31

GoogleCodeExporter commented 8 years ago
r247
Хочу отметить, что определение 
неподдерживаемого формата файла 
происходит
исключительно по расширению, и даже по 
небольшому списку таковых ибо
Ибо в реале отличить музыкальный файл от 
ерунды всякой может только бакэнд, а 
дёргать
его на каждый из многих сотен файлов 
представляется мне нерациональным.

по сему список на настоящий момент далеко 
не полный и его можно дополнять:
        if(suf == "jpg" ||
           suf == "png" ||
           suf == "txt" ||
           suf == "doc" ||
           suf == "log" ||
           suf.startsWith("htm") ||
           !suf.size() ||
           !base.size())

Original comment by drmoriar...@gmail.com on 8 Jul 2009 at 4:30

GoogleCodeExporter commented 8 years ago
А мы точно не можем заранее, при подгрузке 
бэкэнда, выяснить, какие mime-типы он 
поддерживает? А потом по ним отсеивать. Я 
видел, что в плагинах есть некий список. 
Или в винде нереально mime-тип определить? 
Насколько я понимаю, список 
поддерживаемых типов всегда будет короче, 
чем список неподдерживаемых )))

Вот, например, у меня есть раздача 
специального издания, где в одном каталоге 
лежат 
DVD и mp3. Я, не особо замарачиваясь, перетащил 
всю раздачу в проигрыватель и все 
файлы с DVD (всякие VIDEO_TS.VOB) у меня теперь в 
плейлисте ;-)

Original comment by nomen.in...@gmail.com on 8 Jul 2009 at 5:08

GoogleCodeExporter commented 8 years ago
емнип только у фонона есть спец функция для 
определения поддерживаемых mime типов, и
та (по крайней мере в винде) работает из рук 
вон косо

С другой стороны VOB содержит аудио дорожку 
и банить его будет некорректно, сам видал
как кореша на компе смотрели кино, а с ноута 
его же слушали :-)

Меня в существующей схеме больше всего 
смущает возможность несоответствия 
расширения
и типа. Я рад бы переделать, но как?

Original comment by drmoriar...@gmail.com on 8 Jul 2009 at 6:08

GoogleCodeExporter commented 8 years ago
> Меня в существующей схеме больше всего 
смущает возможность несоответствия 
расширения
и типа.
Меня вообще этот, откровенно говоря, 
виндовый способ определения типа файла 
смущал 
ещё когда я на винде сидел.

Я правильно понимаю, что только на gstreamer 
есть потенциальная возможность 
изменения списка поддерживаемых форматов? 
Предлагаю наобум такой вариант (мне 
нравится тем, что он расширяемый):
1. Получаем от плагина список форматов (mime), 
которые он, теоретически, может играть. 
Этот список может быть прошит в коде (как 
сейчас, например, в том же phonon) или 
оперделяться динамически, если бэкэнд это 
позволяет. Это костяк.
2. В настройках плагина добавляем раздел 
"поддерживаемые форматы". Здесь отображаем 
список форматов, которые мы уже считаем 
поддерживаемыми, с возможность удаления 
элементов из этого списка. Для добавления 
формата предлагаем указать музыкальный 
файл, определяем его параметры и добавляем 
формат этого файла в список. Естественно, 
"служебные" форматы вроде *.pls, *.m3u и *.cue в 
список поддерживаемых форматов 
добавлять не нужно, о чём пользователя 
можно предупредить прямо в окне настроек, 
чтоб 
не забывал.
3. при добавлении файлов в плейлист 
сверяемся со списком поддерживаемых 
форматов для 
текущего бэкэнда.
4. при динамической смене бэкэнда файлы в 
плейлисте, которые имеют неподдерживаемый 
формат, делаем "серыми", они остаются в 
плейлисте, но не воспроизводятся, а 
пользователю ненавязчиво предлагается их 
удалить из списка или выбрать другой 
бэкэнд.

Вот как-то так. Мне вчера уже сказали, что 
фантазия у меня слишком богатая )))

Original comment by nomen.in...@gmail.com on 8 Jul 2009 at 6:57

GoogleCodeExporter commented 8 years ago
btw, http://qt-apps.org/content/show.php/QFreeDesktopMime?content=86454

Original comment by nomen.in...@gmail.com on 8 Jul 2009 at 7:01

GoogleCodeExporter commented 8 years ago
В целом поддерживаю, однако будет проблема 
с phonon, у него есть собственные бакэнды,
которые могут пропадать и появляться без 
предупреждения. Придётся при каждом 
запуске
мониторить список типов для него.

Original comment by drmoriar...@gmail.com on 8 Jul 2009 at 7:12

GoogleCodeExporter commented 8 years ago

Original comment by drmoriar...@gmail.com on 8 Jul 2009 at 7:17

GoogleCodeExporter commented 8 years ago
> Придётся при каждом запуске мониторить 
список типов для него.
Просто интересно: каким образом? Спрашиваю 
не чтобы подискутировать, я просто не 
представляю. Если от фонона можно получить 
используемый им бэкэнд, тогда могу 
предположить...

Кстати, если уж делать таким способом, то 
при добавлении файлов в плейлист можно, как 
в amarok показывать всплывашку с надписью 
"некоторые файлы не были добавлены в 
плейлист, потому что формат считается 
непоодерживаемым", только в отличие от 
амарок, 
полагаю, нужно добавить кнопки "показать 
список недобавленных файлов" и "перейти к 
настройкам поддерживаемых форматов"

Original comment by nomen.in...@gmail.com on 8 Jul 2009 at 7:21

GoogleCodeExporter commented 8 years ago
Для phonon получить бакэнд нельзя (или я 
просто не знаю как), но можно спросить
Phonon::BackendCapabilities::isMimeTypeAvailable(mimetype) и, 
предполагая, что бакенд
с прошлого запуска мог измениться, 
проверять все допустимые типы на 
корректность при
запуске. Что с ними делать если он окажется 
некорректным я не знаю. 
Теоретически может быть такая ситуация: 
заполнен список эмпетрями, играет пестня,
cuberok на всём скаку закрывают. Потом из 
дистриба удаляется (условно) libmad и
cuberok запускается вновь. Весь список 
внезапно окажется неподдерживаемым phonon.

По поводу всплывашки отдельная песня:
Щас штатным методом работы считается 
ругань в окно сообщений, значёк даже 
меняется
при ошибках. Я согласен, что нередко нужна 
какая-то интерактивность, или просто более
_видное_ сообщение об ошибке. Однако не могу 
придумать механизм интерактивности в
общем виде... 
Кнопка "отменить задание" у меня фактически 
не работает, для коррекции cue образов
пришлось прокидывать специальные сигналы 
в gui thread. 
Есть мысли по поводу общей реализации и 
механизмов?

Original comment by drmoriar...@gmail.com on 8 Jul 2009 at 8:02

GoogleCodeExporter commented 8 years ago
> Теоретически может быть такая ситуация: 
заполнен список эмпетрями, играет пестня,
cuberok на всём скаку закрывают. Потом из 
дистриба удаляется (условно) libmad и
cuberok запускается вновь. Весь список 
внезапно окажется неподдерживаемым phonon.

Ну, в такой ситуации тоже можно делать 
позиции "серыми" в плейлисте. Как я понимаю, 
сейчас такого механизма нет, но если такой 
вариант делать, то лучше наверно сразу, а не 
после вынесения в плагины. Если такой 
вариант невозможен в принципе, то можно 
подумать ещё о чем-нибудь.

> нередко нужна какая-то интерактивность, 
или просто более _видное_ сообщение об 
ошибке.
Как я это вижу... 
Я полагаю, что можно добавить ещё один 
док-виджет, но чтобы пользователь не 
управлял 
им самостоятельно. Этот виджет сделать 
обработчиком сообщений. Если сообщение 
важное 
- виджет "вылезает", отображается, например 
вот так, как на каритнке, "потеснив" 
существующие док-виджеты.
http://h.imagehost.org/0110/error_dialog_mockup.png
Все "неважные" сообщения добавляются в 
список и просматриваются как лог по 
требованию. "Важные" сообщения тоже 
добавляются в список, но и отображаются 
отдельно, с кнопками "закрыть", "следующее", 
"предыдущее". В качестве "важного" 
сообщения можно передавать не только 
текст, но и готовый виджет со своими 
кнопками, 
например. Можно предусмотреть таймауты для 
закрытия этих виджетов, если это несложно. 
В итоге получается маленький такой браузер 
для просмотра ошибок, который вылезает сам, 
если что-то случится и прячется либо 
вручную, либо по таймауту.

Недостатки: слишком "круто" и сложно; 
возможно, будет некрасиво, если 
пользователь как-
то по-своему расположил док-виджеты.

А про кнопку "отменить задание" я так и не 
понял, что она делает ))

Original comment by nomen.in...@gmail.com on 8 Jul 2009 at 8:48

GoogleCodeExporter commented 8 years ago
Ща приделал следующую фичу:

Если выбрать автоматический аудио вывод, 
то на вкладке "Настройка звука" можно будет
задать для любого mime предпочтительный 
бакэнд. Проверки пока нету, можно и на
audiere повесить кота в мешке, и оно честно 
будет пытацо запустицо. 
Эту фичу в принципе можно использовать как 
workaround для ape, который не играется на
ffmpeg

Интересует юзабельность этого подхода с 
точки зрения пользователя.

Original comment by drmoriar...@gmail.com on 24 Jul 2009 at 8:47

GoogleCodeExporter commented 8 years ago
Фишка интересная, только похоже, что тип 
файла, который определяет проигрыватель, 
не 
значится в предлагаемом списке (можно 
читать как "у меня не заработало"). Если 
оставить, то нужно указывать 
предпочитаемый вывод, который 
используется для типов, не 
заданных в табличке.

В плане "юзабельность этого подхода" - фишка 
может позиционироваться как "для 
продвинутых пользователей", которые не 
только понимают, что такое 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)

Original comment by nomen.in...@gmail.com on 24 Jul 2009 at 10:05

GoogleCodeExporter commented 8 years ago
а если поставить не audio/ogg а application/ogg? r279

Там ещё можно проверить так, в исходниках в 
папочке QFreeDesktopMime собрать его
тестилку и запустить test interested_file 
(меня самого избыточность ogg типов 
напрягает)

Ещё добавлю установку движка по умолчанию 
для авто...
Про продвинутых пользователей: щитаю это 
направление перспективным, advanced фичи будут

Оверхеда кстати эта фича не накладывает, 
ибо все бакэнды инициализируются заранее и
меняются между собой без задержки.

Original comment by drmoriar...@gmail.com on 24 Jul 2009 at 11:32

GoogleCodeExporter commented 8 years ago
>Ещё добавлю установку движка по умолчанию 
для авто...
r280

Original comment by drmoriar...@gmail.com on 24 Jul 2009 at 11:57

GoogleCodeExporter commented 8 years ago
Тестик пришлось подредактировать ))))

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.

Original comment by nomen.in...@gmail.com on 24 Jul 2009 at 12:11

GoogleCodeExporter commented 8 years ago
Мдя...

$ test-mime./01\ Holidays\ In\ The\ Sun.flac
.............
- "audio/mpeg" "./01 Holidays In The Sun.flac"

Original comment by nomen.in...@gmail.com on 24 Jul 2009 at 12:24

GoogleCodeExporter commented 8 years ago
r287
Добавил экспериментальную всплывашку в 
левом нижнем углу приложения. Пока туда
попадают все записи из "Сообщений". 
Поскольку полноценный OSD мне не 
представляется
возможным, требуется придумать как этой 
штукой будет удобнее пользоваться.
Привязывать ли её к главному окну, или к 
десктопу?

Ещё туда добавлю опциональную кнопку 
отмены, и будет примерно следующее:
Кинул пользователь в плейлист всю домашнюю 
папку, вылезло сообщение "добавление папки
такой-то", в течении десяти секунд (если 
машина задохнулась от щастья такого) у
пользователя есть возможность прессануть 
по батончику "отмена", и насилие над винтом
мгновенно прекратится.
Тоже самое будет для длительных операций 
типа:
- полезли в инет зачем-то
- нажали пересканировать библиотеку, или 
кинули туда папку гигов на ндцать

Original comment by drmoriar...@gmail.com on 28 Jul 2009 at 7:38

GoogleCodeExporter commented 8 years ago
Эта штука "похищает фокус" )))))

Активно работаю в консоли, cuberok на другом 
рабочем столе. При смене трека 
всплывашка вылезает на моём рабочем столе 
и пока она не исчезнет - клавиатурный ввод 
не идёт в консоль. Это на r288.

Original comment by nomen.in...@gmail.com on 28 Jul 2009 at 12:51

GoogleCodeExporter commented 8 years ago
r289 вроде поправил, проверил на гноме

Original comment by drmoriar...@gmail.com on 28 Jul 2009 at 1:44

GoogleCodeExporter commented 8 years ago
Да, это помогло от перехвата фокуса.

Теперь нужно сделать ещё одну фишку:
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 @@
        <file alias="gohome.png">../images/gohome.png</file>
        <file alias="back.png">../images/back.png</file>
        <file alias="forward.png">../images/forward.png</file>
+       <file alias="edit-add.png">../images/edit-add.png</file>
     </qresource>
 </RCC>

Original comment by nomen.in...@gmail.com on 28 Jul 2009 at 2:18

Attachments:

GoogleCodeExporter commented 8 years ago
Круто, FFmpeg плагин играет архив rar, в котором 
лежат отдельные треки mp3. Шикарно.

Original comment by nomen.in...@gmail.com on 30 Jul 2009 at 6:21

GoogleCodeExporter commented 8 years ago
удивлён весьма! воспроизвести не могу ни на 
винде ни на lenny

Original comment by drmoriar...@gmail.com on 30 Jul 2009 at 7:41

GoogleCodeExporter commented 8 years ago
А жаль, потому что даже seek работает как 
положено. Единственное, чего не хвататет, 
так 
это отображения времени: 
http://a.imagehost.org/0467/screen_08.png

Ещё попробую cue для rar-файла создать, хотя 
без времени, видимо, работать не 
будет ))))

Original comment by nomen.in...@gmail.com on 30 Jul 2009 at 7:49

GoogleCodeExporter commented 8 years ago
З.Ы. отдельный 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

собственно, поэтому и стараюсь присылать 
патчи, а не коммитить их самостоятельно.

Original comment by nomen.in...@gmail.com on 30 Jul 2009 at 7:52

GoogleCodeExporter commented 8 years ago
это я вчера накосячил когда macos мучал

кстати, на макоси это дело вызывало 
ошибочку (создание shared memory перед
аппликейшеном). Потом посмотрю 
по-подробнее, разведу как нибудь

Original comment by drmoriar...@gmail.com on 30 Jul 2009 at 12:01

GoogleCodeExporter commented 8 years ago
кстати, если есть возможность, нужно 
потестить на MacOS... буду весьма признателен

Original comment by drmoriar...@gmail.com on 30 Jul 2009 at 12:46