@@ -13,7 +13,7 @@ use hyper::{Body, Request, Response};
1313use libflate:: deflate:: { Decoder , Encoder } ;
1414use log:: error;
1515use regex:: Regex ;
16- use revision:: revisioned;
16+ use revision:: { revisioned, Error } ;
1717use rust_embed:: RustEmbed ;
1818use serde:: { Deserialize , Deserializer , Serialize , Serializer } ;
1919use serde_json:: Value ;
@@ -23,7 +23,7 @@ use std::env;
2323use std:: io:: { Read , Write } ;
2424use std:: str:: FromStr ;
2525use std:: string:: ToString ;
26- use std:: sync:: { LazyLock , Mutex } ;
26+ use std:: sync:: { Arc , LazyLock } ;
2727use time:: { macros:: format_description, Duration , OffsetDateTime } ;
2828use url:: Url ;
2929
@@ -622,7 +622,7 @@ pub struct Params {
622622}
623623
624624#[ derive( Default , Serialize , Deserialize , Debug , PartialEq , Eq ) ]
625- #[ revisioned( revision = 1 ) ]
625+ #[ revisioned( revision = 2 ) ]
626626pub struct Preferences {
627627 #[ revision( start = 1 ) ]
628628 #[ serde( skip_serializing, skip_deserializing) ]
@@ -671,7 +671,7 @@ pub struct Preferences {
671671 pub hide_score : String ,
672672 #[ revision( start = 1 ) ]
673673 pub remove_default_feeds : String ,
674- #[ revision( start = 1 ) ]
674+ #[ revision( start = 2 , default_fn = "default_clean_urls" ) ]
675675 pub clean_urls : String ,
676676}
677677
@@ -748,6 +748,9 @@ impl Preferences {
748748 pub fn to_bincode_str ( & self ) -> Result < String , String > {
749749 Ok ( base2048:: encode ( & self . to_compressed_bincode ( ) ?) )
750750 }
751+ fn default_clean_urls ( _revision : u16 ) -> Result < String , Error > {
752+ Ok ( "off" . to_owned ( ) )
753+ }
751754}
752755
753756pub fn deflate_compress ( i : Vec < u8 > ) -> Result < Vec < u8 > , String > {
@@ -1080,7 +1083,7 @@ pub fn format_url(url: &str) -> String {
10801083}
10811084
10821085// Remove tracking query params
1083- static URL_CLEANER : LazyLock < Mutex < UrlCleaner > > = LazyLock :: new ( || Mutex :: new ( UrlCleaner :: from_embedded_rules ( ) . expect ( "Failed to initialize UrlCleaner" ) ) ) ;
1086+ static URL_CLEANER : LazyLock < Arc < UrlCleaner > > = LazyLock :: new ( || Arc :: new ( UrlCleaner :: from_embedded_rules ( ) . expect ( "Failed to initialize UrlCleaner" ) ) ) ;
10841087
10851088pub fn clean_url ( url : String ) -> String {
10861089 let is_external_url = match Url :: parse ( url. as_str ( ) ) {
@@ -1089,8 +1092,10 @@ pub fn clean_url(url: String) -> String {
10891092 } ;
10901093 let mut cleaned_url = url. clone ( ) ;
10911094 if is_external_url {
1092- let cleaner = URL_CLEANER . lock ( ) . unwrap ( ) ;
1093- cleaned_url = cleaner. clear_single_url_str ( cleaned_url. as_str ( ) ) . expect ( "Unable to clean the URL." ) . as_ref ( ) . to_owned ( ) ;
1095+ cleaned_url = match URL_CLEANER . clear_single_url_str ( cleaned_url. as_str ( ) ) {
1096+ Ok ( cleaned_result) => cleaned_result. as_ref ( ) . to_owned ( ) ,
1097+ _ => cleaned_url,
1098+ }
10941099 }
10951100 cleaned_url
10961101}
@@ -1675,9 +1680,10 @@ fn test_default_prefs_serialization_loop_bincode() {
16751680}
16761681
16771682static KNOWN_GOOD_CONFIGS : & [ & str ] = & [
1678- "ਧӐΥºÃΦĴгౡୡϤҚԷŽဎՐΧΣೡຽဒ೨ʛĽତ๘Ӓǹভµɾ൦ॴцৱ௬చΣҭжҭȱȾཊజĊȔ௸७ƘȂј۰ȥėǨԯၻíႽਈႴ۹ଆ" ,
1679- "ਧҫടºÃǒɣυໃਣөŕǁజ८ௐɪDžઘႴ౨ඛႻຫǪၼդɍ৪Êѕ୶ʭѹŪҚຊೱѰງიŠСঌາඌĨğਜડ࿅ଠಲೱҋŇƞਭăʁझшȖǾཔ௧ந۞ສÚ" ,
1680- "ਧҫടºÃǒɿဧϯljഔค๖۞ԆНȦ൨ĭ྅ҤƍตཧႯƅशञঊମਇȕමзқଽijჰଐՋບӎՓஶཕ૭ଛกήऋĜɀಱӔԩझԩîဓŒԬũլಙટщೞຝ৪༎" ,
1683+ "ఴӅβØØҞÉဏႢձĬ༧ȒʯऌԔӵ୮༏" ,
1684+ "ਧՊΥÀÃǎƱГ۸ඣമĖฤ႙ʟาúໜϾௐɥঀĜໃહཞઠѫҲɂఙ࿔DzઉƲӟӻĻฅΜδ໖ԜǗဖငƦơ৶Ą௩ԹʛใЛʃශаΏ" ,
1685+ "ਧԩΥÀÃΊ౭൩ඔႠϼҭöҪƸռઇԾॐნɔາǒՍҰच௨ಖມŃЉŐདƦ๙ϩএఠȝഽйʮჯඒϰळՋ௮ສ৵ऎΦѧਹಧଟƙŃ३î༦ŌပղयƟแҜ།" ,
1686+ "ԅҫടÀÁÓɿဧඑปฎɣĊဨ۹ÕќଌઞೱũდϚӕӜĄӑƺӌĩҹஸইພÇƄŴ࿀টŨ୬ਦတႣಮѿౡಛളƖljljೱ႒ઽරਊԚƢൿɧűХխபծಥဤ౧À" ,
16811687] ;
16821688
16831689#[ test]
0 commit comments