@@ -24,7 +24,9 @@ type Translator interface {
2424// This default implementation defines a set of
2525// mapping rules between rss.Feed -> Feed
2626// for each of the fields in Feed.
27- type DefaultRSSTranslator struct {}
27+ type DefaultRSSTranslator struct {
28+ atomTranslator DefaultAtomTranslator
29+ }
2830
2931// Translate converts an RSS feed into the universal
3032// feed type.
@@ -361,6 +363,8 @@ func (t *DefaultRSSTranslator) translateItemAuthor(rssItem *rss.Item) (author *P
361363 author = & Person {}
362364 author .Name = name
363365 author .Email = address
366+ } else if authorVal , ok := t .hasAtomExtensionsForKey (rssItem , "author" ); ok {
367+ author = t .atomTranslator .translateItemAuthor (authorVal )
364368 } else if rssItem .DublinCoreExt != nil && rssItem .DublinCoreExt .Author != nil {
365369 dcAuthor := t .firstEntry (rssItem .DublinCoreExt .Author )
366370 name , address := shared .ParseNameAddress (dcAuthor )
@@ -459,8 +463,8 @@ func (t *DefaultRSSTranslator) extensionsForKeys(keys []string, extensions ext.E
459463 return
460464}
461465
462- func (t * DefaultRSSTranslator ) atomExtensionsWithKey (rss * rss. Feed , tag string , f func (ext.Extension ) bool ) {
463- atomExtensions := t .extensionsForKeys ([]string {"atom" , "atom10" , "atom03" }, rss .Extensions )
466+ func (t * DefaultRSSTranslator ) atomExtensionsWithKey (rss ext. Extendable , tag string , f func (ext.Extension ) bool ) {
467+ atomExtensions := t .extensionsForKeys ([]string {"atom" , "atom10" , "atom03" }, rss .GetExtensions () )
464468 for _ , ex := range atomExtensions {
465469 if exts , ok := ex [tag ]; ok {
466470 for _ , e := range exts {
@@ -472,6 +476,16 @@ func (t *DefaultRSSTranslator) atomExtensionsWithKey(rss *rss.Feed, tag string,
472476 }
473477}
474478
479+ func (t * DefaultRSSTranslator ) hasAtomExtensionsForKey (rss ext.Extendable , tag string ) (entry * atom.Entry , ok bool ) {
480+ t .atomExtensionsWithKey (rss , tag , func (extension ext.Extension ) bool {
481+ if extension .Parsed != nil {
482+ entry , ok = extension .Parsed .(* atom.Entry )
483+ }
484+ return ok
485+ })
486+ return
487+ }
488+
475489func (t * DefaultRSSTranslator ) firstEntry (entries []string ) (value string ) {
476490 if entries == nil {
477491 return
0 commit comments