mirror of
				https://codeberg.org/Reuh/feather.git
				synced 2025-10-27 18:19:32 +00:00 
			
		
		
		
	Compare commits
	
		
			5 commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 13d82f9913 | |||
| 0cf1bc5003 | |||
| 595be10876 | |||
| 0db9881d09 | |||
| d77a92cb82 | 
					 5 changed files with 25 additions and 18 deletions
				
			
		|  | @ -53,14 +53,13 @@ The now read articles can (surprisingly) be found in the trash. After marking an | |||
| 
 | ||||
| #### Reading read articles | ||||
| 
 | ||||
| If you want to re-read your favorites articles directly in the Feather reader director, you can configure Feather to write articles files for read articles too: | ||||
| If you want to re-read your favorites articles directly in the Feather reader directory, you can configure Feather to write articles files for read articles too: | ||||
| 
 | ||||
| ```toml | ||||
| # Write article HTML files for read articles | ||||
| [html] | ||||
| # Write article HTML files for read articles | ||||
| write_read_articles = true | ||||
| # Add a checkmark in the article filename indicating the read status | ||||
| [html] | ||||
| filename_template = "{% if unread %}☐{% else %}☑{% endif %} [{{ feed_title }}]\t{{ title }} ({{ published }}).html" | ||||
| ``` | ||||
| 
 | ||||
|  | @ -73,8 +72,8 @@ Note that this also change the mark-as-unread behavior: since it is no longer po | |||
| By default, Feather will only grab unread articles from the server, so the read articles you have access to locally are only the articles kept for the 3 days grace period after marking them as read (see the [handling read articles chapter](#handling-read-articles)). If you want to have access to _all_ articles from the server, you can add to your configuration: | ||||
| 
 | ||||
| ```toml | ||||
| # Grab both read and unread articles from the server | ||||
| [server] | ||||
| # Grab both read and unread articles from the server | ||||
| only_sync_unread_articles = false | ||||
| ``` | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| [project] | ||||
| name = "feather" | ||||
| version = "1.1.0" | ||||
| version = "1.1.1" | ||||
| authors = [ { name = 'Étienne "Reuh" Fildadut' } ] | ||||
| description = "file-based RSS reader client" | ||||
| readme = "README.md" | ||||
|  |  | |||
|  | @ -128,7 +128,7 @@ class FeatherApp: | |||
|         print("Synchronizing from server...") | ||||
| 
 | ||||
|         new_articles, updated_articles = 0, 0 | ||||
|         grabbed_article_paths: set[ArticleId] = set() | ||||
|         grabbed_article_ids: set[ArticleId] = set() | ||||
| 
 | ||||
|         categories = client_session.list_categories() | ||||
|         for category in categories: | ||||
|  | @ -148,7 +148,7 @@ class FeatherApp: | |||
|                     remaining = False | ||||
| 
 | ||||
|                 for article in articles: | ||||
|                     grabbed_article_paths.add(article.id) | ||||
|                     grabbed_article_ids.add(article.id) | ||||
|                     json_path = article.json_path | ||||
|                     if not json_path.exists(): | ||||
|                         article.write() | ||||
|  | @ -160,20 +160,26 @@ class FeatherApp: | |||
|                             article.write() | ||||
|                             updated_articles += 1 | ||||
| 
 | ||||
|         # Remove articles that we didn't get from the server but are in the JSON directory | ||||
|         # Remove or mark-as-read articles that we didn't get from the server but are in the JSON directory | ||||
|         removed_articles = 0 | ||||
|         article_cutoff_timestamp = ( | ||||
|             datetime.now().timestamp() - config.keep_read_articles_for | ||||
|         ) | ||||
|         for article in self.iter_articles(): | ||||
|             if ( | ||||
|                 # we sync all articles: remove all articles that aren't on the server | ||||
|                 not config.only_sync_unread_articles | ||||
|                 # we only sync unread: only remove articles that are too old | ||||
|                 or article.last_write < article_cutoff_timestamp | ||||
|             ) and article.id not in grabbed_article_paths: | ||||
|                 article.delete() | ||||
|                 removed_articles += 1 | ||||
|             if article.id not in grabbed_article_ids: | ||||
|                 # we only sync unread: articles we didn't get from the server were read or purged | ||||
|                 if config.only_sync_unread_articles: | ||||
|                     if article.last_write < article_cutoff_timestamp: | ||||
|                         article.delete() | ||||
|                         removed_articles += 1 | ||||
|                     elif article.unread: | ||||
|                         article.unread = False | ||||
|                         article.regenerate() | ||||
|                         updated_articles += 1 | ||||
|                 # we sync all articles: articles we didn't get from the server were purged | ||||
|                 else: | ||||
|                     article.delete() | ||||
|                     removed_articles += 1 | ||||
| 
 | ||||
|         print( | ||||
|             f"Synchronization successful ({new_articles} new articles, {updated_articles} updated, {removed_articles} removed)" | ||||
|  |  | |||
|  | @ -6,6 +6,7 @@ | |||
| [server] | ||||
| # (Required) Server API to use. Either "googlereader" for the Google Reader API (FreshRSS, Miniflux, etc.) or "ttrss" for the TinyTiny-RSS API. | ||||
| # The Google Reader API do not support nested categories. | ||||
| # Can be set through the environment variable SERVER_API. | ||||
| api = "googlereader" | ||||
| # (Required) URL of your server's Google Reader API endpoint | ||||
| # Can be set through the environment variable SERVER_URL. | ||||
|  | @ -84,7 +85,7 @@ article_template = ''' | |||
| <body style="background-color:black; color:white; font-family:sans-serif; overflow-x:hidden;"> | ||||
|     <style> | ||||
|         a {color:palevioletred; text-decoration:none;} | ||||
|         .feather-content img {display:block; margin-left:50%; transform:translateX(-50%); max-width:100vw;} | ||||
|         .feather-content img, .feather-content video {display:block; margin-left:50%; transform:translateX(-50%); max-width:100vw;} | ||||
|     </style> | ||||
|     <article style="max-width:min(60rem,100%); margin:auto;"> | ||||
|         <p style="display:flex; flex-direction:row; justify-content:space-between;"> | ||||
|  | @ -138,6 +139,7 @@ hide_empty_categories = true | |||
| # Can be set through the environment variable HTML_MAX_FILENAME_LENGTH. | ||||
| max_filename_length = 250 | ||||
| # Table mapping characters to what they will be replaced with in filenames. Useful to remove/replace characters that are not allowed in filename by your filesystem. The default should be fine for most Unix filesystems. | ||||
| # Can not be set through environment variables, sorry! | ||||
| filename_replacement = { "/" = "⧸", "\u0000" = "" } | ||||
| 
 | ||||
| [datetime] | ||||
|  |  | |||
							
								
								
									
										2
									
								
								uv.lock
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								uv.lock
									
										
									
										generated
									
									
									
								
							|  | @ -69,7 +69,7 @@ wheels = [ | |||
| 
 | ||||
| [[package]] | ||||
| name = "feather" | ||||
| version = "1.1.0" | ||||
| version = "1.1.1" | ||||
| source = { editable = "." } | ||||
| dependencies = [ | ||||
|     { name = "google-reader" }, | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue