@cookie Thanks for sharing the script.
I used it today, and I had to make some changes. In the latest version of strawberry, apparently there is no longer a songs_fts table.
Additionally, I had an issue. After importing my collection from clementine, strawberry would rescan and generate duplicate entries for all my songs. Thus, for each song, I was seeing two entries in strawberry.
I dug a bit and found the the filetype numbers in strawberry and clementine are different. Additionally, all entries in the songs table in my clementine database had directory_id set to 2 (where it should be 1).
I modified the script you provided to fix both issues.
The different filetypes. I am not sure if strawberry would eventually correct these values.
The directory_id (
Notice that this was a problem in my database in particular, others may not need my fix
I include the modified script here in case it is useful for anyone
-- "full/path/to" needs to be replaced with the absolute path to your user home directory
ATTACH 'full/path/to/.config/Clementine/clementine.db' AS clementine;
ATTACH 'full/path/to/.local/share/strawberry/strawberry/strawberry.db' AS strawberry;
DELETE FROM strawberry.directories;
DELETE FROM strawberry.subdirectories;
DELETE FROM strawberry.songs;
DELETE FROM strawberry.playlists;
DELETE FROM strawberry.playlist_items;
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,
-- SQLFIX: Not sure if an equivalent expression is needed for the 'art_automatic' column, above, too?
REPLACE(art_manual, '.config/Clementine/albumcovers','.local/share/strawberry/strawberry/collectionalbumcovers'),
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 = "";
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;
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,
-- SQLFIX Constraint violation on the insert without this case as strawberry has "NOT NULL" constraint on url column, whereas clementine didn't
case when filename IS NULL then "" else filename end,
filetype,
filesize,
mtime,
ctime,
unavailable,
playcount,
skipcount,
lastplayed,
sampler,
forced_compilation_on,
forced_compilation_off,
effective_compilation,
art_automatic,
-- SQLFIX: Not sure if an equivalent expression is needed for the 'art_automatic' column, above, too?
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 = "";
-- @chank0 Convert all filetypes to auxiliary values
UPDATE strawberry.songs SET filetype=1000 WHERE filetype=0;
UPDATE strawberry.songs SET filetype=1001 WHERE filetype=1;
UPDATE strawberry.songs SET filetype=1002 WHERE filetype=2;
UPDATE strawberry.songs SET filetype=1003 WHERE filetype=3;
UPDATE strawberry.songs SET filetype=1004 WHERE filetype=4;
UPDATE strawberry.songs SET filetype=1005 WHERE filetype=5;
UPDATE strawberry.songs SET filetype=1006 WHERE filetype=6;
UPDATE strawberry.songs SET filetype=1007 WHERE filetype=7;
UPDATE strawberry.songs SET filetype=1008 WHERE filetype=8;
UPDATE strawberry.songs SET filetype=1009 WHERE filetype=9;
UPDATE strawberry.songs SET filetype=1010 WHERE filetype=10;
UPDATE strawberry.songs SET filetype=1011 WHERE filetype=11;
UPDATE strawberry.songs SET filetype=1012 WHERE filetype=12;
UPDATE strawberry.songs SET filetype=1013 WHERE filetype=13;
UPDATE strawberry.songs SET filetype=1014 WHERE filetype=14;
UPDATE strawberry.songs SET filetype=1015 WHERE filetype=15;
UPDATE strawberry.songs SET filetype=1016 WHERE filetype=16;
UPDATE strawberry.songs SET filetype=1017 WHERE filetype=17;
UPDATE strawberry.songs SET filetype=1099 WHERE filetype=99;
-- @chank0 And now set the types understood by strawberry
UPDATE strawberry.songs SET filetype=0 WHERE filetype=1000;
UPDATE strawberry.songs SET filetype=10 WHERE filetype=1001; -- ASF was 1 in clementine, 10 in strawberry
UPDATE strawberry.songs SET filetype=2 WHERE filetype=1002; -- FLAC was 2 in clementine, 2 in strawberry
UPDATE strawberry.songs SET filetype=9 WHERE filetype=1003; -- MP4 was 3 in clementine, 9 in strawberry
UPDATE strawberry.songs SET filetype=12 WHERE filetype=1004; -- MPC was 4 in clementine, 12 in strawberry
UPDATE strawberry.songs SET filetype=8 WHERE filetype=1005; -- MPEG was 5 in clementine, 8 in strawberry
UPDATE strawberry.songs SET filetype=4 WHERE filetype=1006; -- OGGflac was 6 in clementine, 4 in strawberry
UPDATE strawberry.songs SET filetype=7 WHERE filetype=1007; -- OggSpeex was 7 in clementine, 7 in strawberry
UPDATE strawberry.songs SET filetype=5 WHERE filetype=1008; -- OggVorbis was 8 in clementine, 5 in strawberry
UPDATE strawberry.songs SET filetype=11 WHERE filetype=1009; -- AIFF was 9 in clementine, 11 in strawberry
UPDATE strawberry.songs SET filetype=1 WHERE filetype=1010; -- WAV was 10 in clementine, 1 in strawberry
UPDATE strawberry.songs SET filetype=13 WHERE filetype=1011; -- Trueaudio was 11 in clementine, 13 in strawberry
UPDATE strawberry.songs SET filetype=90 WHERE filetype=1012; -- cdda was 12 in clementine, 90 in strawberry
UPDATE strawberry.songs SET filetype=6 WHERE filetype=1013; -- OGGopus was 13 in clementine, 6 in strawberry
UPDATE strawberry.songs SET filetype=3 WHERE filetype=1014; -- Wavpack was 14 in clementine, 3 in strawberry
UPDATE strawberry.songs SET filetype=22 WHERE filetype=1015; -- Spc was 15 in clementine, 22 in strawberry
UPDATE strawberry.songs SET filetype=23 WHERE filetype=1016; -- VGM was 16 in clementine, 23 in strawberry
UPDATE strawberry.songs SET filetype=17 WHERE filetype=1017; -- APE was 17 in clementine, 17 in strawberry
UPDATE strawberry.songs SET filetype=91 WHERE filetype=1099; -- Stream was 99 in clementine, 91 in strawberry
-- @chank0: My clementine DB has directory_id=2 in all songs, but it should be directory=1
-- No one else should need this line. Uncomment only if you understand what you are doing
-- UPDATE strawberry.songs SET directory_id=1;
DETACH clementine;
DETACH strawberry;