mirror of https://github.com/tstack/lnav
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
155 lines
5.1 KiB
SQL
155 lines
5.1 KiB
SQL
|
|
-- Tracks the current step in the tutorial
|
|
CREATE TABLE lnav_tutorial_step
|
|
(
|
|
name TEXT NOT NULL PRIMARY KEY,
|
|
step INTEGER NOT NULL
|
|
);
|
|
|
|
INSERT INTO lnav_tutorial_step
|
|
VALUES ('tutorial1', 1);
|
|
|
|
-- A description of each step in the tutorial with its achievements
|
|
CREATE TABLE lnav_tutorial_steps
|
|
(
|
|
name TEXT NOT NULL,
|
|
step INTEGER NOT NULL,
|
|
achievements TEXT NOT NULL,
|
|
PRIMARY KEY (name, step)
|
|
);
|
|
|
|
-- Tracks the progress through the achievements in a step of the tutorial
|
|
CREATE TABLE IF NOT EXISTS lnav_tutorial_progress
|
|
(
|
|
name TEXT NOT NULL,
|
|
step INTEGER NOT NULL,
|
|
achieved TEXT NOT NULL,
|
|
|
|
PRIMARY KEY (name, step, achieved)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS lnav_tutorial_lines
|
|
(
|
|
name TEXT NOT NULL,
|
|
step INTEGER NOT NULL,
|
|
view_ptr TEXT NOT NULL,
|
|
view_value TEXT NOT NULL,
|
|
achievement TEXT NOT NULL,
|
|
log_comment TEXT
|
|
);
|
|
|
|
-- Copy the tutorial data from the markdown frontmatter to
|
|
-- the appropriate tables.
|
|
CREATE TRIGGER IF NOT EXISTS add_tutorial_data
|
|
AFTER INSERT
|
|
ON lnav_events
|
|
WHEN jget(new.content, '/$schema') = 'https://lnav.org/event-file-format-detected-v1.schema.json' AND
|
|
jget(new.content, '/format') = 'text/markdown'
|
|
BEGIN
|
|
INSERT INTO lnav_tutorial_steps
|
|
SELECT jget(tutorial_meta, '/name'),
|
|
key + 1,
|
|
value
|
|
FROM (SELECT yaml_to_json(lnav_file_metadata.content) AS tutorial_meta
|
|
FROM lnav_file_metadata
|
|
WHERE filepath = jget(new.content, '/filename')) AS meta_content,
|
|
json_each(jget(meta_content.tutorial_meta, '/steps'));
|
|
|
|
REPLACE INTO lnav_tutorial_lines
|
|
SELECT name,
|
|
step,
|
|
jget(value, '/view_ptr'),
|
|
jget(value, '/view_value'),
|
|
key,
|
|
jget(value, '/comment')
|
|
FROM lnav_tutorial_steps,
|
|
json_each(achievements)
|
|
WHERE jget(value, '/view_ptr') IS NOT NULL;
|
|
|
|
REPLACE INTO lnav_user_notifications (id, views, message)
|
|
SELECT *
|
|
FROM lnav_tutorial_log_notification;
|
|
END;
|
|
|
|
CREATE TRIGGER IF NOT EXISTS tutorial_move_log_after_load
|
|
AFTER INSERT
|
|
ON lnav_events
|
|
WHEN jget(new.content, '/$schema') = 'https://lnav.org/event-session-loaded-v1.schema.json'
|
|
BEGIN
|
|
UPDATE lnav_views SET top = 0 WHERE name = 'log';
|
|
END;
|
|
|
|
CREATE TRIGGER IF NOT EXISTS lnav_tutorial_view_listener UPDATE OF top
|
|
ON lnav_views_echo
|
|
WHEN new.name = 'log'
|
|
BEGIN
|
|
INSERT OR IGNORE INTO lnav_tutorial_progress
|
|
SELECT lnav_tutorial_lines.name,
|
|
lnav_tutorial_lines.step,
|
|
achievement
|
|
FROM lnav_tutorial_step,
|
|
lnav_tutorial_lines
|
|
WHERE lnav_tutorial_step.step = lnav_tutorial_lines.step
|
|
AND jget(json_object('top', new.top,
|
|
'left', new.left,
|
|
'search', new.search),
|
|
view_ptr) = view_value;
|
|
UPDATE all_logs
|
|
SET log_comment = (SELECT log_comment
|
|
FROM lnav_tutorial_step,
|
|
lnav_tutorial_lines
|
|
WHERE lnav_tutorial_step.step = lnav_tutorial_lines.step
|
|
AND lnav_tutorial_lines.log_comment IS NOT NULL
|
|
AND jget(json_object('top', new.top,
|
|
'left', new.left,
|
|
'search', new.search), view_ptr) = view_value)
|
|
WHERE log_line = new.top
|
|
AND log_comment IS NULL;
|
|
END;
|
|
|
|
CREATE TABLE lnav_tutorial_message
|
|
(
|
|
msgid INTEGER PRIMARY KEY,
|
|
msg TEXT
|
|
);
|
|
|
|
CREATE VIEW lnav_tutorial_current_achievements AS
|
|
SELECT key AS achievement, value
|
|
FROM lnav_tutorial_step,
|
|
lnav_tutorial_steps, json_each(lnav_tutorial_steps.achievements)
|
|
WHERE lnav_tutorial_step.step = lnav_tutorial_steps.step;
|
|
|
|
CREATE VIEW lnav_tutorial_current_progress AS
|
|
SELECT achieved
|
|
FROM lnav_tutorial_step,
|
|
lnav_tutorial_progress
|
|
WHERE lnav_tutorial_step.step = lnav_tutorial_progress.step;
|
|
|
|
CREATE VIEW lnav_tutorial_remaining_achievements AS
|
|
SELECT *
|
|
FROM lnav_tutorial_current_achievements
|
|
WHERE achievement NOT IN (SELECT * FROM lnav_tutorial_current_progress);
|
|
|
|
CREATE VIEW lnav_tutorial_log_notification AS
|
|
SELECT *
|
|
FROM (SELECT 'org.lnav.tutorial.log' AS id, '["log"]' AS views, jget(value, '/notification') AS message
|
|
FROM lnav_tutorial_remaining_achievements
|
|
UNION ALL
|
|
SELECT 'org.lnav.tutorial.log' AS id,
|
|
'["log"]' AS views,
|
|
'Press `y` to go to the next step in the tutorial' AS message)
|
|
LIMIT 1;
|
|
|
|
CREATE TRIGGER IF NOT EXISTS lnav_tutorial_progress_listener
|
|
AFTER INSERT
|
|
ON lnav_tutorial_progress
|
|
BEGIN
|
|
DELETE FROM lnav_user_notifications WHERE id = 'org.lnav.tutorial.log';
|
|
REPLACE INTO lnav_user_notifications (id, views, message)
|
|
SELECT *
|
|
FROM lnav_tutorial_log_notification;
|
|
END;
|
|
|
|
REPLACE INTO lnav_user_notifications (id, views, message)
|
|
VALUES ('org.lnav.tutorial.text', '["text"]', 'Press `q` to go to the log view')
|