pythonでfoobarのalternativeを作る 29
190614-16
ほぼ実用レベルまで来た( ´∀`)

treeViewへのドロップの研究
- どこにドロップしたか、どこに挿入すべきかってこと
デフォルトではdropindicatorが表示されるけど、思った通りにはいかない場合がある
ドロップ先の行は取得できるが、そのほかにその行の真上、上の行間、下の行間、行の無い場所、この四通りがある
dropindicatorでそれも取得して判断するようにした
- デフォルトのindicator表示がわかりづらいので変えたいが、自分で描画することになると思われるのでまた今度だなあ
リストへのアルバム表示
- それよりも、ドロップ後のこの問題がかなりやっかい
foobarのこの表示はすごく見やすくて良いので同じようにしたいんだがうまくいかない
ドロップ時に表示するようにしてるんだが、色んなドロップパターンに対応し切れてない
- 考え方を変えて、リストへのアルバム行追加ルーチンを作って毎回チェックさせた方が良いようにも思う
その場合はリストの全タイトルをmutagenでスキャンしてアルバム行を設定していくことになると思うので、結構遅いような気がしてちょっと意欲がそがれる
- 全てのタイトル行にアルバム行のカラムも設定して非表示にしておけば良いかな?
そういうメモリの無駄遣いはイヤだよなあ
- アルバム行の第2カラムに目印として'tit'の文字列を置いた。nullだったり''だったりして紛らわしいので
- 既存のリストに挿入する場合がやっかいなので、アルバムの切れ目でしか挿入させないようにしてもいいかも
- foobarの仕組みが知りたい
いつか良い方法がひらめくかな?
複数タブ化
- タブにコンテキストメニューをつけて、タブ作成・削除やタブの名称変更に対応
- 保存読み込みにも対応
- カレントタブと演奏中のタブを別に管理
- 現在各タブはそのtreeviewオブジェクトベースで管理しているが、純粋なタブ管理はインデクスベースの方がやりやすい
変えた方が良いか?しかしタブが削除された場合などインデクスは多分可変、オブジェクトベースの方が良いのか?
その他
- treeのコンテキストメニューからファイルのフォルダを開くようにした
- シークバーはファイルの時間が取得できない場合があるのでやはりMAX100で固定にした。vlcから定期的にposition()をもらって、それ×100でスライダーを設定する
- 終了時に位置を保存するようにしてみた、sqlで
- キーボードの再生キーを捕らえたい
190617
- pytube でダウンロードプログレス表示にトライしたがうまくいかなかった ┐('д')┌
- QGrubber の色つきにチャレンジしたがうまくいかない ┐('д')┌
Player 作り込み DB結合など
-
DB結合した、予定通り外部のパイファイルとして別プロセスで動かす
runだと制御が戻らないのでpopenにした
DB作成のpyファイルはクラスにしてあるので内部に取り込むのは簡単だが、何となく切り離しておきたい
終了メッセージをもらう必要があるようなら内部に取り込むが・・
普通にこれを起動するとスキャンに20秒くらいかかる
watchdogで個別ファイルを監視した方が効率的なのかな?
第一段階を省いてすぐ第二段階なら速いはず、多分foobarもそうしている
-
treeloadルーチンを別に作って、起動時に呼び出すほか任意のタイミングで呼び出してモデルを差し替える仕様にした
サーチのテキストも拾うようにした
foobarの挙動にかなり近くなってきた
-
スライダー動作を手直し
ドラッグ中でもタイマーに呼び戻されてしまう
フラグを立ててドラッグ中はタイマーをスキップするようにした
最初スライダーのシグナル設定の関係で悩んだが
valueChangedは値が変われば何でも来る、ドラッグ以外でも
ドラッグに反応させるのなら
sliderMoved (int) で値を取得して
sliderReleased () でアクションって感じになる
作り込みたい部分はまだまだあるけどかなり使えるようになってきた
190618
- 起動時に前回最後に聴いていた曲を選択するようにした
この機能は地味に必要だと思う
実装は簡単だと思ってたけど結構時間がかかった
理屈は簡単なんだけど
- 設定関係って、設定が無い場合の処理を常に意識しておく必要がありますよね
使い続けていれば気にしなくて良いんだが、異常終了とか初回起動とか、そういう場合は必須で、そこら辺が面倒
190619
- ダブルクリックで再生したときに全体時間を取得しないバグがあった
時間取得までの間にsleep(0.2)を入れたら取得するようだ