from calibre.web.feeds.news import BasicNewsRecipe
from datetime import datetime
from calibre.ebooks.BeautifulSoup import Tag
from calibre.utils.magick import Image, PixelWand

class LifeHacker(BasicNewsRecipe):
    THUMBALIZR_API        = '' # ---->Get your at http://www.thumbalizr.com/ and put here
    LANGUAGE              = 'en'
    LANGHTM               = 'en'
    language = 'en'
    ENCODING              = 'utf'
    ENCHTM                = 'utf-8'
    requires_version      = (0,7,47)
    news                  = True

    title                 = u'LifeHacker'
    __author__            = 'Euler Alves'
    description           = u'Tips, tricks, and downloads for getting things done.'
    publisher             = u'lifehacker.com'
    author                = u'Adam Pash & Kevin Purdy & Adam Dachis & Whitson Gordon & Gina Trapani'
    category              = 'news, rss'

    oldest_article        = 4
    max_articles_per_feed = 20
    summary_length        = 1000

    remove_javascript     = True
    no_stylesheets        = True
    use_embedded_content  = True
    remove_empty_feeds    = True
    timefmt               = ' [%d %b %Y (%a)]'

    hoje                  = datetime.now()
    pubdate               = hoje.strftime('%a, %d %b')
    cover_url             = 'http://api.thumbalizr.com/?api_key='+THUMBALIZR_API+'&url=http://lifehacker.com&width=600&quality=90'
    cover_margins         = (0,0,'white')
    masthead_url          = 'http://cache.gawkerassets.com/assets/lifehacker.com/img/logo.png'

    remove_tags = [
                    {'class': 'feedflare'},
                    dict(name='div',
                        attrs={'class':[
                            'ad_container'
                            ,'ad_300x250'
                            ,'ad_interstitial'
                            ,'share-wrap'
                            ,'ad_300x600'
                            ,'ad_perma-footer-adsense'
                            ,'ad_perma-panorama'
                            ,'ad panorama'
                            ,'ad_container'
                        ]})
                    ,dict(name='div',
                        attrs={'id':[
                            'agegate_container'
                            ,'agegate_container_rejected'
                            ,'sharemenu-wrap'
                        ]})
    ]

    feeds = [(u'Articles', u'http://feeds.gawker.com/lifehacker/vip?format=xml')]

    conversion_options = {
    'title'            : title
    ,'comments'        : description
    ,'publisher'       : publisher
    ,'tags'            : category
    ,'language'        : LANGUAGE
    ,'linearize_tables': True
    }

    def preprocess_html(self, soup):
        for item in soup.findAll(style=True):
            del item['style']
        if not soup.find(attrs={'http-equiv':'Content-Language'}):
            meta0 = Tag(soup,'meta',[("http-equiv","Content-Language"),("content",self.LANGHTM)])
            soup.head.insert(0,meta0)
        if not soup.find(attrs={'http-equiv':'Content-Type'}):
            meta1 = Tag(soup,'meta',[("http-equiv","Content-Type"),("content","text/html; charset="+self.ENCHTM)])
            soup.head.insert(0,meta1)
        return soup

    def postprocess_html(self, soup, first):
        #process all the images. assumes that the new html has the correct path
        for tag in soup.findAll(lambda tag: tag.name.lower()=='img' and tag.has_key('src')):
            iurl = tag['src']
            img = Image()
            img.open(iurl)
            width, height = img.size
            print 'img is: ', iurl, 'width is: ', width, 'height is: ', height
            if img < 0:
                raise RuntimeError('Out of memory')
            pw = PixelWand()
            if( width > height and width > 590) :
                print 'Rotate image'
                img.rotate(pw, -90)
                img.save(iurl)
        return soup


