Skip to content

internal

Go
import "github.com/andreoliwa/logseq-doctor/internal"

Index

Variables

Go
var ErrFailedOpenGraph = errors.New("failed to open graph")

Go
var ErrInvalidResponseStatus = errors.New("invalid response status")

Go
var ErrMissingConfig = errors.New("LOGSEQ_API_TOKEN and LOGSEQ_HOST_URL must be set")

ErrPageIsNil is returned when a page is nil.

Go
var ErrPageIsNil = errors.New("page is nil")

PageColor is a color function for page names.

Go
var PageColor = color.New(color.FgHiWhite).SprintfFunc() //nolint:gochecknoglobals

func AddTask

Go
func AddTask(opts *AddTaskOptions) error

AddTask adds a task to Logseq. If Key is provided, it searches for an existing task containing that key (case-insensitive) and updates it. Otherwise, creates a new task. If Page is provided, adds to that page. Otherwise, adds to journal for Date. If BlockText is provided, adds as a child of the first block containing that text.

func AppendRawMarkdownToJournal

Go
func AppendRawMarkdownToJournal(graph *logseq.Graph, date time.Time, rawMarkdown string) (int, error)

AppendRawMarkdownToJournal appends raw Markdown content to the journal page for the given date. I tried appending blocks with `logseq-go` but there is and with text containing brackets. e.g. "[something]" is escaped like "\[something\]" and this breaks links.

func DateYYYYMMDD

Go
func DateYYYYMMDD(time time.Time) int

DateYYYYMMDD returns the current date in YYYYMMDD format.

func FindBlockContainingText

Go
func FindBlockContainingText(page logseq.Page, searchText string) *content.Block

FindBlockContainingText searches for the first block containing the specified text using FindDeep.

func FindTaskMarkerByKey

Go
func FindTaskMarkerByKey(page logseq.Page, parentBlock *content.Block, key string) *content.TaskMarker

FindTaskMarkerByKey searches for a task marker containing the specified key (case-insensitive). If parentBlock is provided, searches only among its children. Otherwise, searches in the entire page. Returns the TaskMarker if found, nil otherwise.

func InsertMarkdownToJournal

Go
func InsertMarkdownToJournal(opts *InsertMarkdownOptions) error

InsertMarkdownToJournal inserts markdown content to a journal page If ParentText is provided, it searches for the first block containing that text and inserts the content as a child block. Otherwise, appends to the end.

func IsAncestor

Go
func IsAncestor(block, ancestor *content.Block) bool

IsAncestor checks if ancestor is an ancestor of block by traversing up the parent chain. Returns true if ancestor is found in the parent hierarchy of block, false otherwise. Returns true if block and ancestor are the same block.

func IsValidMarkdownFile

Go
func IsValidMarkdownFile(filePath string) bool

IsValidMarkdownFile checks if a file is a Markdown file, by looking at its extension, not its content.

func OpenGraphFromPath

Go
func OpenGraphFromPath(path string) *logseq.Graph

OpenGraphFromPath opens a Logseq graph (from the path provided when the instance was created). It doesn't return an error and aborts the program if it fails because it's an internal function. This is done on purpose to avoid error handling boilerplate code throughout the package.

func OpenPage

Go
func OpenPage(graph *logseq.Graph, pageTitle string) logseq.Page

OpenPage opens a page in the Logseq graph. It aborts the program in case of error because it's an internal function. Also, it's not common to have errors when opening a page.

func ReadFromStdin

Go
func ReadFromStdin() string

ReadFromStdin reads from stdin and returns the content as a string. It doesn't return an error and aborts the program if it fails because it's an internal function.

func SortAndRemoveDuplicates

Go
func SortAndRemoveDuplicates(elements []string) []string

func TidyUpOneFile

Go
func TidyUpOneFile(graph *logseq.Graph, path string) int

func addContent

Go
func addContent(page logseq.Page, parentBlock *content.Block, contentText string) error

addContent adds content either as a child block to the specified parent or as a top-level block to the page.

func containsTextCaseInsensitive

Go
func containsTextCaseInsensitive(node content.Node, searchTextLower string) bool

containsTextCaseInsensitive checks if a node contains the specified text (case-insensitive). It checks Text, PageLink, and Hashtag nodes.

func replaceCurrentPage

Go
func replaceCurrentPage(query, pageTitle string) string

replaceCurrentPage replaces the current page placeholder in the query with the actual page name.

func updateExistingTask

Go
func updateExistingTask(existingTaskMarker *content.TaskMarker, opts *AddTaskOptions) error

func updateTaskBackToTodo

Go
func updateTaskBackToTodo(taskMarker *content.TaskMarker, newName string) error

type AddTaskOptions

AddTaskOptions contains options for adding a task to Logseq.

Go
type AddTaskOptions struct {
    Graph     *logseq.Graph
    Date      time.Time
    Page      string           // Page name to add the task to (empty = journal)
    BlockText string           // Partial text to search for in parent blocks
    Key       string           // Unique key to search for existing task (case-insensitive)
    Name      string           // Short name of the task
    TimeNow   func() time.Time // For testing
}

type CategorizedTasks

Go
type CategorizedTasks struct {
    All             *set.Set[string]
    Overdue         *set.Set[string]
    Doing           *set.Set[string]
    FutureScheduled *set.Set[string]
}

func NewCategorizedTasks

Go
func NewCategorizedTasks() CategorizedTasks

type ChangedContents

ChangedContents is the result of a check function that modifies file contents directly without a transaction.

Go
type ChangedContents struct {
    Msg         string
    NewContents string
}

func RemoveUnnecessaryBracketsFromTags

Go
func RemoveUnnecessaryBracketsFromTags(oldContents string) ChangedContents

RemoveUnnecessaryBracketsFromTags removes unnecessary brackets from hashtags. logseq-go rewrites tags correctly when saving the transaction, removing unnecessary brackets. But, when reading the file, the AST doesn't provide the information if a tag has brackets or not. So I would have to rewrite the file to fix them, and I don't want to do it every time there is a tag without spaces. Also, as of 2024-12-30, logseq-go has a bug when reading properties with spaces in values, which causes them to be partially removed from the file, destroying data. I will report it soon.

type ChangedPage

ChangedPage is the result of a check function that modifies Markdown through a Page and a transaction.

Go
type ChangedPage struct {
    Msg     string
    Changed bool
}

func CheckForbiddenReferences

Go
func CheckForbiddenReferences(page logseq.Page) ChangedPage

CheckForbiddenReferences checks if a page has forbidden references to other pages or tags.

func CheckRunningTasks

Go
func CheckRunningTasks(page logseq.Page) ChangedPage

CheckRunningTasks checks if a page has running tasks (DOING, etc.).

func RemoveDoubleSpaces

Go
func RemoveDoubleSpaces(page logseq.Page) ChangedPage

RemoveDoubleSpaces removes double spaces from text, page links, and tags, except for tables.

func RemoveEmptyBullets

Go
func RemoveEmptyBullets(page logseq.Page) ChangedPage

type InsertMarkdownOptions

InsertMarkdownOptions contains options for inserting markdown content.

Go
type InsertMarkdownOptions struct {
    Graph      *logseq.Graph
    Date       time.Time
    Content    string
    ParentText string // Partial text to search for in parent blocks
}

type LogseqAPI

Go
type LogseqAPI interface {
    PostQuery(query string) (string, error)
}

func NewLogseqAPI

Go
func NewLogseqAPI(path, hostURL, apiToken string) LogseqAPI

NewLogseqAPI creates a new LogseqAPI instance.

type LogseqFinder

Go
type LogseqFinder interface {
    FindFirstQuery(pageTitle string) string
}

func NewLogseqFinder

Go
func NewLogseqFinder(graph *logseq.Graph) LogseqFinder

type TaskJSON

Go
type TaskJSON struct {
    UUID      string   `json:"uuid"`
    Marker    string   `json:"marker"`
    Content   string   `json:"content"`
    Page      pageJSON `json:"page"`
    Deadline  int      `json:"deadline"`
    Scheduled int      `json:"scheduled"`
}

func ExtractTasksFromJSON

Go
func ExtractTasksFromJSON(jsonStr string) ([]TaskJSON, error)

func (TaskJSON) Doing

Go
func (t TaskJSON) Doing() bool

Doing checks if the task has the DOING marker.

func (TaskJSON) FutureScheduled

Go
func (t TaskJSON) FutureScheduled(currentTime func() time.Time) bool

FutureScheduled checks if the task is scheduled for the future (tomorrow onwards) and it's not overdue.

func (TaskJSON) Overdue

Go
func (t TaskJSON) Overdue(currentTime func() time.Time) bool

Overdue checks if the task is overdue based on deadline or scheduled date.

type logseqAPIImpl

Go
type logseqAPIImpl struct {
    path     string
    hostURL  string
    apiToken string
}

func (*logseqAPIImpl) PostQuery

Go
func (l *logseqAPIImpl) PostQuery(query string) (string, error)

PostQuery sends a query to the Logseq API and returns the result as JSON.

type logseqFinderImpl

Go
type logseqFinderImpl struct {
    graph *logseq.Graph
}

func (logseqFinderImpl) FindFirstQuery

Go
func (f logseqFinderImpl) FindFirstQuery(pageTitle string) string

type pageJSON

Go
type pageJSON struct {
    JournalDay int `json:"journalDay"`
}

Generated by gomarkdoc