News - Logiciels Libres

Migration de Clementine à Strawberry

| | Logiciels Libres | 2 Commentaires | 1200
Migration de Clementine à Strawberry
Bonsoir à tous,

Comme vous le savez sans doute, j'utilise le logiciel Clementine depuis des années.
J'ai découvert ce lecteur de muique sous Mandriva 2011, car il était livré par défaut dessus.

Simple, rapide, efficace, il m'a suivi depuis 13 ans.

Cependant, il est en Qt4 pour la version 1.3 et une version 1.4-rc2 est compilée avec Qt5 mais le développement est très ralenti depuis un bon moment.
Il souffre de bugs avec Wayland (que j'utilise depuis mon passage sous Fedora 39 - https://www.linuxtricks.fr/news/10-logiciels-libres/537-pc-fixe-je-passe-de-gentoo-a-fedora/ )
Un des bugs le plus embêtant est notamment la perte du clavier sur plusieurs applications quand Clementine est lancé. Impossible de saisir du texte dans Vivaldi, Google Chrome, Clementine lui même et d'autres.
Je pensais que Teamviewer ou Remmina étaient en cause sur ce bug, car j'utilise en effet souvent Teamviewer ou Remmina en même temps que Clementine. Je prends le contrôle depuis le PC fixe Fedora sur le PC DJ et modifie les TAGS avec Clementine en même temps.

Mais finalement, j'ai diagnostiqué que l'ouverture de Clementine entraine la perte du clavier, car ce soir, j'ai voulu écouter de ma musique avec le logiciel.

Un fork existe depuis un moment, et s'appelle Strawberry (que j'utilise sur le PC DJ Windows 10 d'ailleurs).
Vous avez compris le jeu de mot, Clémentine/Fraise... OK.

D'ailleurs, j'ai utilisé Strawberry sur le PC DJ Windows 10 car ils sont été très réactifs pour corriger un bug de transcodage OGG->MP3 ( https://github.com/strawberrymusicplayer/strawberry/issues/856 )
Chez Clementine, je n'ai pas ouvert de bug, car il en existe un depuis 2017 qui n'est toujours pas résolu ( https://github.com/clementine-player/Clementine/issues/4647 )

La solution de migrer vers le fork semblait une évidence, mais j'avais une flemme monumentale de reparamétrer Strawberry, car j'ai paramétré Clementine avec mes playlists, ma bibliothèque etc.
Les bugs trops importants avec Wayland m'ont décidé à sauter le pas.

La base de données des paramétrages est en sqlite et copier/coller les préférences du dossier Clementine à Strawberry ne fonctionnait pas.

Cependant, il existe une astuce pour copier les paramétrages, en manipulant la base de données.

En effet, cela fait plus de 13 ans que j'utilise le logiciel, il est bien garni !


Dans un premier temps, après installation, on ouvre Strawberry et on le referme pour que les fichiers par défaut soient créés.

Ensuite, on ouvre sqlite3

Code BASH :
sqlite3


On attache les 2 BDD:
Code SQL :
ATTACH '/home/adrien/.local/share/strawberry/strawberry/strawberry.db' AS strawberry;
ATTACH '/home/adrien/.config/Clementine/clementine.db' AS clementine;


On purge la BDD Strawberry :
Code SQL :
  DELETE FROM strawberry.directories;
DELETE FROM strawberry.subdirectories;
DELETE FROM strawberry.songs;
DELETE FROM strawberry.playlists;
DELETE FROM strawberry.playlist_items;


Ensuite, on importe les collections :
Code SQL :
INSERT INTO strawberry.directories (path, subdirs) SELECT path, subdirs FROM clementine.directories;
INSERT INTO strawberry.subdirectories (directory_id, path, mtime) SELECT directory, path, mtime FROM clementine.subdirectories;
INSERT INTO strawberry.songs (ROWID, title, album, artist, albumartist, track, disc, YEAR, originalyear, genre, compilation, composer, performer, GROUPING, comment, lyrics, beginning, LENGTH, bitrate, samplerate, directory_id, url, filetype, filesize, mtime, ctime, unavailable, playcount, skipcount, lastplayed, compilation_detected, compilation_on, compilation_off, compilation_effective, art_automatic, art_manual, effective_albumartist, effective_originalyear, cue_path, rating)
SELECT ROWID, title, album, artist, albumartist, track, disc, YEAR, originalyear, genre, compilation, composer, performer, GROUPING, comment, lyrics, beginning, LENGTH, bitrate, samplerate, directory, filename, filetype, filesize, mtime, ctime, unavailable, playcount, skipcount, lastplayed, sampler, forced_compilation_on, forced_compilation_off, effective_compilation, art_automatic, art_manual, effective_albumartist, effective_originalyear, cue_path, rating FROM clementine.songs WHERE unavailable = 0;
UPDATE strawberry.songs SET SOURCE = 2;
UPDATE strawberry.songs SET artist_id = '';
UPDATE strawberry.songs SET album_id = '';
UPDATE strawberry.songs SET song_id = '';


Et les playlists :
Code SQL :
INSERT INTO strawberry.playlists (ROWID, name, last_played, special_type, ui_path, is_favorite, dynamic_playlist_type, dynamic_playlist_data, dynamic_playlist_backend)
SELECT ROWID, name, last_played, special_type, ui_path, is_favorite, dynamic_playlist_type, dynamic_playlist_data, dynamic_playlist_backend FROM clementine.playlists WHERE dynamic_playlist_type ISNULL;


Les éléments des playlists :
Code SQL :
INSERT INTO strawberry.playlist_items
   (ROWID,
   playlist,
   collection_id,
   title,
   album,
   artist,
   albumartist,
   track,
   disc,
   YEAR,
   originalyear,
   genre,
   compilation,
   composer,
   performer,
   GROUPING,
   comment,
   lyrics,
   beginning,
   LENGTH,
   bitrate,
   samplerate,
   directory_id,
   url,
   filetype,
   filesize,
   mtime,
   ctime,
   unavailable,
   playcount,
   skipcount,
   lastplayed,
   compilation_detected,
   compilation_on,
   compilation_off,
   compilation_effective,
   art_automatic,
   art_manual,
   effective_albumartist,
   effective_originalyear,
   cue_path,
   rating
   )
   SELECT ROWID,
      playlist,
      library_id,
      title,
      album,
      artist,
      albumartist,
      track,
      disc,
      YEAR,
      originalyear,
      genre,
      compilation,
      composer,
      performer,
      GROUPING,
      comment,
      lyrics,
      beginning,
      LENGTH,
      bitrate,
      samplerate,
      directory,
      filename,
      filetype,
      filesize,
      mtime,
      ctime,
      unavailable,
      playcount,
      skipcount,
      lastplayed,
      sampler,
      forced_compilation_on,
      forced_compilation_off,
      effective_compilation,
      art_automatic,
      REPLACE(art_manual, '.config/Clementine/albumcovers','.local/share/strawberry/strawberry/collectionalbumcovers'),
      effective_albumartist,
      effective_originalyear,
      cue_path,
      rating FROM clementine.playlist_items WHERE TYPE = 'Library';
UPDATE strawberry.playlist_items SET SOURCE = 2;
UPDATE strawberry.playlist_items SET TYPE = 2;
UPDATE strawberry.playlist_items SET artist_id = '';
UPDATE strawberry.playlist_items SET album_id = '';
UPDATE strawberry.playlist_items SET song_id = '';


On recrré les tables FTS :
Code SQL :
DELETE FROM strawberry.songs_fts;
INSERT INTO strawberry.songs_fts (ROWID, ftstitle, ftsalbum, ftsartist, ftsalbumartist, ftscomposer, ftsperformer, ftsgrouping, ftsgenre, ftscomment)
SELECT ROWID, title, album, artist, albumartist, composer, performer, GROUPING, genre, comment FROM strawberry.songs;


On détache les BDD :
Code SQL :
DETACH clementine;
DETACH strawberry;


Et on ferme sqlite3 :
Code SQL :
   .quit


On synchronise le cache des covers :
Code BASH :
cp ~/.config/Clementine/albumcovers/* ~/.local/share/strawberry/strawberry/collectionalbumcovers/


Et on copie le fichier de conf :
Code BASH :
cp ~/.config/Clementine/Clementine.conf ~/.config/strawberry/strawberry.conf


Et voilà !

strawberry



Il m'a juste suffi de désépingler de mon dock Clementine pour mettre Strawberry et de désinstaller Clementine !