diff --git a/app/helpers/theme_helper.rb b/app/helpers/theme_helper.rb index 7f91f598a0..a434ef40ff 100644 --- a/app/helpers/theme_helper.rb +++ b/app/helpers/theme_helper.rb @@ -54,7 +54,7 @@ module ThemeHelper def current_skin skins = Themes.instance.skins_for(current_flavour) - [current_user&.setting_skin, Setting.skin, 'system', 'default'].find { |skin| skins.include?(skin) } + [current_user&.setting_skin, Setting.skin, 'default'].find { |skin| skins.include?(skin) } end def current_theme diff --git a/db/migrate/20260209142401_glitch_migrate_default_skin_setting.rb b/db/migrate/20260209142401_glitch_migrate_default_skin_setting.rb new file mode 100644 index 0000000000..09bde7b82a --- /dev/null +++ b/db/migrate/20260209142401_glitch_migrate_default_skin_setting.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +class GlitchMigrateDefaultSkinSetting < ActiveRecord::Migration[8.0] + class Setting < ApplicationRecord; end + + def up + Setting.reset_column_information + + return unless %w(glitch vanilla).include?(flavour) + + setting = Setting.find_by(var: 'skin') + return unless setting.present? && setting.attributes['value'].present? + + theme = YAML.safe_load(setting.attributes['value'], permitted_classes: [ActiveSupport::HashWithIndifferentAccess, Symbol]) + return unless %w(mastodon-light contrast system).include?(theme) + + setting.update_column('value', "--- default\n") + end + + def down; end + + private + + def flavour + setting = Setting.find_by(var: 'flavour') + return 'glitch' unless setting.present? && setting.attributes['value'].present? + + YAML.safe_load(setting.attributes['value'], permitted_classes: [ActiveSupport::HashWithIndifferentAccess, Symbol]) + end +end diff --git a/db/migrate/20260209143307_glitch_migrate_user_skin.rb b/db/migrate/20260209143307_glitch_migrate_user_skin.rb new file mode 100644 index 0000000000..c0cb993749 --- /dev/null +++ b/db/migrate/20260209143307_glitch_migrate_user_skin.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +class GlitchMigrateUserSkin < ActiveRecord::Migration[8.0] + disable_ddl_transaction! + + # Dummy classes, to make migration possible across version changes + class User < ApplicationRecord; end + + def up + User.where.not(settings: nil).find_each do |user| + settings = Oj.load(user.attributes_before_type_cast['settings']) + next if settings.nil? || settings['skin'].blank? || %w(system default mastodon-light contrast).exclude?(settings['skin']) + + case settings['skin'] + when 'default' + settings['web.color_scheme'] = 'dark' + settings['web.contrast'] = 'auto' + when 'contrast' + settings['web.color_scheme'] = 'dark' + settings['web.contrast'] = 'high' + when 'mastodon-light' + settings['web.color_scheme'] = 'light' + settings['web.contrast'] = 'auto' + end + + settings['skin'] = 'default' + + user.update_column('settings', Oj.dump(settings)) + end + end +end diff --git a/lib/tasks/tests.rake b/lib/tasks/tests.rake index 6f41d07955..1ec0170ab0 100644 --- a/lib/tasks/tests.rake +++ b/lib/tasks/tests.rake @@ -154,7 +154,7 @@ namespace :tests do exit(1) end - unless Setting.theme == 'default' + unless Setting.skin == 'default' puts 'Default theme setting not migrated as expected' exit(1) end @@ -183,7 +183,8 @@ namespace :tests do VALUES (7, NULL, NULL, 'timeline_preview', E'--- false\n', now(), now()), (8, NULL, NULL, 'trends_as_landing_page', E'--- false\n', now(), now()), - (9, NULL, NULL, 'theme', E'--- system', now(), now()); + (9, NULL, NULL, 'theme', E'--- system', now(), now()), + (1000, NULL, NULL, 'skin', E'--- system', now(), now()); /* Doorkeeper records While the `read:me` scope was technically not valid in 3.3.0,