<feed xmlns='http://www.w3.org/2005/Atom'>
<title>neko, branch opml-import-cli</title>
<subtitle>self-hosted, single user rss reader</subtitle>
<link rel='alternate' type='text/html' href='https://git.adammathes.com/neko/'/>
<entry>
<title>feat: Add OPML import functionality via CLI</title>
<updated>2025-05-22T23:41:54+00:00</updated>
<author>
<name>google-labs-jules[bot]</name>
<email>161369871+google-labs-jules[bot]@users.noreply.github.com</email>
</author>
<published>2025-05-22T23:41:54+00:00</published>
<link rel='alternate' type='text/html' href='https://git.adammathes.com/neko/commit/?id=7f26740f4c4905cad6b71ea749b83fa5a51c1a0f'/>
<id>7f26740f4c4905cad6b71ea749b83fa5a51c1a0f</id>
<content type='text'>
This change introduces the ability to import feeds from an OPML file
using a command-line interface.

Key features:
- New `--import-opml` (or `-I`) flag in `main.go` to specify the
  OPML file path.
- The `importer.ImportOPML` function in `importer/importer.go` handles
  the parsing of the OPML file (using `github.com/gilliek/go-opml`)
  and addition of new feeds to the database.
- Recursive processing of OPML outlines allows for importing feeds
  nested within folders.
- Feeds are identified by their XML URL; existing feeds with the
  same URL are skipped to avoid duplicates.
- Title extraction prioritizes the `title` attribute, then the `text`
  attribute of an outline, and falls back to "Untitled Feed".

Comprehensive unit tests have been added in `importer/importer_test.go`
to verify:
- Correct parsing and importing of various OPML structures.
- Proper handling of duplicate feeds (skipping).
- Correct title extraction logic.
- Database interaction and cleanup.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This change introduces the ability to import feeds from an OPML file
using a command-line interface.

Key features:
- New `--import-opml` (or `-I`) flag in `main.go` to specify the
  OPML file path.
- The `importer.ImportOPML` function in `importer/importer.go` handles
  the parsing of the OPML file (using `github.com/gilliek/go-opml`)
  and addition of new feeds to the database.
- Recursive processing of OPML outlines allows for importing feeds
  nested within folders.
- Feeds are identified by their XML URL; existing feeds with the
  same URL are skipped to avoid duplicates.
- Title extraction prioritizes the `title` attribute, then the `text`
  attribute of an outline, and falls back to "Untitled Feed".

Comprehensive unit tests have been added in `importer/importer_test.go`
to verify:
- Correct parsing and importing of various OPML structures.
- Proper handling of duplicate feeds (skipping).
- Correct title extraction logic.
- Database interaction and cleanup.
</pre>
</div>
</content>
</entry>
<entry>
<title>update dependencies</title>
<updated>2024-04-11T23:15:21+00:00</updated>
<author>
<name>Adam Mathes</name>
<email>adam@trenchant.org</email>
</author>
<published>2024-04-11T23:15:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.adammathes.com/neko/commit/?id=fd747e166a1f1a1f22a27e44810836b2bd2244c7'/>
<id>fd747e166a1f1a1f22a27e44810836b2bd2244c7</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>update dependencies</title>
<updated>2023-04-10T17:54:48+00:00</updated>
<author>
<name>Adam Mathes</name>
<email>adam@trenchant.org</email>
</author>
<published>2023-04-10T17:54:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.adammathes.com/neko/commit/?id=9b01daed4183fa516b99f003b49256ceac23bbbf'/>
<id>9b01daed4183fa516b99f003b49256ceac23bbbf</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>update dependencies</title>
<updated>2021-09-29T05:09:05+00:00</updated>
<author>
<name>Adam Mathes</name>
<email>adam@trenchant.org</email>
</author>
<published>2021-09-29T05:09:05+00:00</published>
<link rel='alternate' type='text/html' href='https://git.adammathes.com/neko/commit/?id=2d70df274f48787c30bf575635f89838d94f65fd'/>
<id>2d70df274f48787c30bf575635f89838d94f65fd</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>upgrade dependencies</title>
<updated>2020-05-25T18:16:24+00:00</updated>
<author>
<name>Adam Mathes</name>
<email>adam@trenchant.org</email>
</author>
<published>2020-05-25T18:16:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.adammathes.com/neko/commit/?id=7633e6cf05d68a223dcdb2eddb91b8265d8f8b68'/>
<id>7633e6cf05d68a223dcdb2eddb91b8265d8f8b68</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>upgrade to blackfriday v2 dependency</title>
<updated>2019-06-09T16:53:23+00:00</updated>
<author>
<name>Adam Mathes</name>
<email>adam@trenchant.org</email>
</author>
<published>2019-06-09T16:53:23+00:00</published>
<link rel='alternate' type='text/html' href='https://git.adammathes.com/neko/commit/?id=02dfd9ee72a046cb9ee295bff62a5e739e21625e'/>
<id>02dfd9ee72a046cb9ee295bff62a5e739e21625e</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>preliminary go mod support, ensure blackfriday v1 instead of v2</title>
<updated>2019-06-09T16:35:28+00:00</updated>
<author>
<name>Adam Mathes</name>
<email>adam@trenchant.org</email>
</author>
<published>2019-06-09T16:35:28+00:00</published>
<link rel='alternate' type='text/html' href='https://git.adammathes.com/neko/commit/?id=9cf78ece35e43838b8d7b496fb471122d91dab13'/>
<id>9cf78ece35e43838b8d7b496fb471122d91dab13</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>remove h1 from html export</title>
<updated>2018-12-30T04:00:25+00:00</updated>
<author>
<name>Adam Mathes</name>
<email>adam@trenchant.org</email>
</author>
<published>2018-12-30T04:00:25+00:00</published>
<link rel='alternate' type='text/html' href='https://git.adammathes.com/neko/commit/?id=0318104a27df05ebb41423504eeafa76337a796c'/>
<id>0318104a27df05ebb41423504eeafa76337a796c</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>fix mem leak (maybe) in feed crawler, re-enable bg crawl</title>
<updated>2018-12-16T22:35:36+00:00</updated>
<author>
<name>Adam Mathes</name>
<email>adam@trenchant.org</email>
</author>
<published>2018-12-16T22:35:36+00:00</published>
<link rel='alternate' type='text/html' href='https://git.adammathes.com/neko/commit/?id=cb3c8ef60ceff0501dd5c7fcee5a8871056fc39d'/>
<id>cb3c8ef60ceff0501dd5c7fcee5a8871056fc39d</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>stop clobbering the f key</title>
<updated>2018-10-05T03:24:37+00:00</updated>
<author>
<name>Adam Mathes</name>
<email>adam@trenchant.org</email>
</author>
<published>2018-10-05T03:24:37+00:00</published>
<link rel='alternate' type='text/html' href='https://git.adammathes.com/neko/commit/?id=8903f360f58b7364c468d1a5a0afdd66774dc4da'/>
<id>8903f360f58b7364c468d1a5a0afdd66774dc4da</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
</feed>
