Preferences: Remove markdown preview preference after feature removal

- Remove markdown_preview_default field from UserPreferences model
- Remove markdown_preview_default column from user_preferences table schema
- Simplify preferences form to only show draft auto-save checkbox
- Update handler to only process auto_save_drafts preference
- Clean up unused form fields and validation logic

Only the draft auto-save preference remains.
jocadbz
Joca 2026-01-15 23:34:21 -03:00
parent 9c959f6412
commit 582897903e
Signed by: jocadbz
GPG Key ID: B1836DCE2F50BDF7
5 changed files with 11 additions and 35 deletions

View File

@ -21,12 +21,6 @@ func PreferencesHandler(app *App) http.HandlerFunc {
if r.Method == http.MethodPost { if r.Method == http.MethodPost {
// Get form values // Get form values
autoSaveDrafts := r.FormValue("auto_save_drafts") == "on" autoSaveDrafts := r.FormValue("auto_save_drafts") == "on"
markdownPreviewDefault := r.FormValue("markdown_preview_default")
// Validate markdown_preview_default
if markdownPreviewDefault != "edit" && markdownPreviewDefault != "preview" {
markdownPreviewDefault = "edit"
}
// Get current preferences (or create if not exists) // Get current preferences (or create if not exists)
prefs, err := models.GetUserPreferences(app.DB, userID) prefs, err := models.GetUserPreferences(app.DB, userID)
@ -38,7 +32,6 @@ func PreferencesHandler(app *App) http.HandlerFunc {
// Update preferences // Update preferences
prefs.AutoSaveDrafts = autoSaveDrafts prefs.AutoSaveDrafts = autoSaveDrafts
prefs.MarkdownPreviewDefault = markdownPreviewDefault
err = models.UpdateUserPreferences(app.DB, prefs) err = models.UpdateUserPreferences(app.DB, prefs)
if err != nil { if err != nil {

View File

@ -223,7 +223,6 @@ func createTablesIfNotExist(db *sql.DB) error {
id INT AUTO_INCREMENT PRIMARY KEY, id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL UNIQUE, user_id INT NOT NULL UNIQUE,
auto_save_drafts BOOLEAN DEFAULT TRUE, auto_save_drafts BOOLEAN DEFAULT TRUE,
markdown_preview_default VARCHAR(20) DEFAULT 'edit',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE

View File

@ -5,15 +5,14 @@ import (
) )
type UserPreferences struct { type UserPreferences struct {
ID int ID int
UserID int UserID int
AutoSaveDrafts bool AutoSaveDrafts bool
MarkdownPreviewDefault string // "edit" or "preview"
} }
// GetUserPreferences retrieves preferences for a user, creating defaults if none exist // GetUserPreferences retrieves preferences for a user, creating defaults if none exist
func GetUserPreferences(db *sql.DB, userID int) (*UserPreferences, error) { func GetUserPreferences(db *sql.DB, userID int) (*UserPreferences, error) {
query := `SELECT id, user_id, auto_save_drafts, markdown_preview_default query := `SELECT id, user_id, auto_save_drafts
FROM user_preferences WHERE user_id = ?` FROM user_preferences WHERE user_id = ?`
prefs := &UserPreferences{} prefs := &UserPreferences{}
@ -21,7 +20,6 @@ func GetUserPreferences(db *sql.DB, userID int) (*UserPreferences, error) {
&prefs.ID, &prefs.ID,
&prefs.UserID, &prefs.UserID,
&prefs.AutoSaveDrafts, &prefs.AutoSaveDrafts,
&prefs.MarkdownPreviewDefault,
) )
if err == sql.ErrNoRows { if err == sql.ErrNoRows {
@ -38,8 +36,8 @@ func GetUserPreferences(db *sql.DB, userID int) (*UserPreferences, error) {
// CreateDefaultPreferences creates default preferences for a new user // CreateDefaultPreferences creates default preferences for a new user
func CreateDefaultPreferences(db *sql.DB, userID int) (*UserPreferences, error) { func CreateDefaultPreferences(db *sql.DB, userID int) (*UserPreferences, error) {
query := `INSERT INTO user_preferences (user_id, auto_save_drafts, markdown_preview_default) query := `INSERT INTO user_preferences (user_id, auto_save_drafts)
VALUES (?, TRUE, 'edit')` VALUES (?, TRUE)`
result, err := db.Exec(query, userID) result, err := db.Exec(query, userID)
if err != nil { if err != nil {
@ -52,19 +50,18 @@ func CreateDefaultPreferences(db *sql.DB, userID int) (*UserPreferences, error)
} }
return &UserPreferences{ return &UserPreferences{
ID: int(id), ID: int(id),
UserID: userID, UserID: userID,
AutoSaveDrafts: true, AutoSaveDrafts: true,
MarkdownPreviewDefault: "edit",
}, nil }, nil
} }
// UpdateUserPreferences updates user preferences // UpdateUserPreferences updates user preferences
func UpdateUserPreferences(db *sql.DB, prefs *UserPreferences) error { func UpdateUserPreferences(db *sql.DB, prefs *UserPreferences) error {
query := `UPDATE user_preferences query := `UPDATE user_preferences
SET auto_save_drafts = ?, markdown_preview_default = ?, updated_at = NOW() SET auto_save_drafts = ?, updated_at = NOW()
WHERE user_id = ?` WHERE user_id = ?`
_, err := db.Exec(query, prefs.AutoSaveDrafts, prefs.MarkdownPreviewDefault, prefs.UserID) _, err := db.Exec(query, prefs.AutoSaveDrafts, prefs.UserID)
return err return err
} }

View File

@ -28,19 +28,6 @@
Drafts are saved to your browser's local storage and restored when you return to chat. Drafts are saved to your browser's local storage and restored when you return to chat.
</p> </p>
<h3 style="margin-top: 2em;">Markdown Preview</h3>
<label for="markdown_preview_edit" style="display: flex; align-items: center; gap: 0.5em; cursor: pointer; margin-bottom: 0.5em;">
<input type="radio" id="markdown_preview_edit" name="markdown_preview_default" value="edit" {{if eq .Preferences.MarkdownPreviewDefault "edit"}}checked{{end}}>
<span>Default to <strong>Edit</strong> mode (write markdown)</span>
</label>
<label for="markdown_preview_preview" style="display: flex; align-items: center; gap: 0.5em; cursor: pointer;">
<input type="radio" id="markdown_preview_preview" name="markdown_preview_default" value="preview" {{if eq .Preferences.MarkdownPreviewDefault "preview"}}checked{{end}}>
<span>Default to <strong>Preview</strong> mode (see formatted output)</span>
</label>
<p style="margin-left: 1.5em; margin-top: 0.25em; font-size: 0.9em; opacity: 0.8;">
Choose which tab is shown by default when composing messages in chat.
</p>
<input type="submit" value="Save Preferences" style="margin-top: 2em;"> <input type="submit" value="Save Preferences" style="margin-top: 2em;">
</form> </form>
</section> </section>

BIN
threadr Executable file

Binary file not shown.