def __init__(self):
        self.pastvisitedsubreddits = []
        self.loadpastsubreddits() #defines self.visitedsubreddits : list :
        self.selectedsubreddit = None
        self.submissioncategory = None
        self.directory = None
        self.downloadcount = 0
        self.enablescroller = True


        self.root = tkinter.Tk()
        self.root.title('Reddit Image Downloader')

        self.startwindow = StartPage(self,self.root)
        self.scroller = None
class App:

    def __init__(self):
        self.pastvisitedsubreddits = []
        self.loadpastsubreddits() #defines self.visitedsubreddits : list :
        self.selectedsubreddit = None
        self.submissioncategory = None
        self.directory = None
        self.downloadcount = 0
        self.enablescroller = True


        self.root = tkinter.Tk()
        self.root.title('Reddit Image Downloader')

        self.startwindow = StartPage(self,self.root)
        self.scroller = None


    def popupmessage(self,title,msg):
        tkinter.messagebox.showinfo(title,msg)

    def loadpastsubreddits(self): #laod from text file
        try:
            data = open('SubredditHistory.json')
            jsondata = json.load(data)
            data.close()
            self.pastvisitedsubreddits = jsondata['VisitedSubreddits']
        except (IOError, ValueError):
            pass

    def savesubreddit(self): #save subreddit to list of visited subreddits
            file=open('SubredditHistory.json','w')
            if self.selectedsubreddit not in self.pastvisitedsubreddits:
                self.pastvisitedsubreddits.append(self.selectedsubreddit)
            jsondict = {'VisitedSubreddits':self.pastvisitedsubreddits}
            json.dump(jsondict,file)
            file.close()

    def setsubreddit(self,subreddit):
        self.selectedsubreddit = subreddit

    def setsubmissioncategory(self,category):
        self.submissioncategory = category

    def run(self):
        self.root.mainloop()

    def loadscroller(self):
        self.startwindow.destroy()
        self.scroller = WallpaperScroller(self.root, self.directory)

    def create_directory(self):
        """Directory created to save downloaded images.
        """
        dir_name = '%s_wallpapers/temp'%self.selectedsubreddit.lower()
        full_dir_path_name = os.path.join(os.path.realpath(__file__), dir_name)
        os.makedirs(dir_name,exist_ok=True)
        full_dir_path_name = os.path.join(os.path.dirname(os.path.realpath(__file__)), dir_name)
        self.directory = (full_dir_path_name) if self.enablescroller else os.path.dirname(full_dir_path_name)


    @normalize_url
    def download_image(self,URL,save_name):
        """Download image at URL as SAVE_NAME.
        """
        print('Downloading image...')
    #try:
        res=requests.get(URL)
        res.raise_for_status()
        with open(save_name, 'wb') as f:
            for chunk in res.iter_content(100000):
                f.write(chunk)
        print('Image < %s > successfully downloaded'%save_name)
        self.downloadcount+=1
    #except Exception:
       # print('Problem downloading image located at: %s' % URL)


    def download_reddit_images(self):
        """
        Downloads top 10 images of subreddit to temp dir.
        """
        try:
            reddit=praw.Reddit(user_agent='anderMak_IM_DLer')
        except Exception:
            print('Problem connecting to Reddit. Aborting...')
            sys.exit(1)
            #TODO: make this a popup

        if self.submissioncategory == 'Hot':
            subs=(sub for sub in reddit.get_subreddit(self.selectedsubreddit).get_hot(limit=10) if not sub.stickied)
        elif self.submissioncategory == 'Top':
            subs=(sub for sub in reddit.get_subreddit(self.selectedsubreddit).get_top(limit=10) if not sub.stickied)
        elif self.submissioncategory == 'New':
            subs=(sub for sub in reddit.get_subreddit(self.selectedsubreddit).get_new(limit=10) if not sub.stickied)

            #TODO: GUI option to select number of images, eg 5,10,15,25

        self.create_directory()
        self.savesubreddit()

        for sub in subs:
            temp_file_name = '{}/{}_{}_{}.jpg'.format(self.directory,'temp',self.selectedsubreddit,sub.id) #If downloaded, image will have this name.
            perm_file_name='{}/{}_{}.jpg'.format(self.directory,self.selectedsubreddit,sub.id)
            if not file_already_downloaded(temp_file_name) and not file_already_downloaded(perm_file_name):
                if self.enablescroller:
                    self.download_image(sub.url, temp_file_name)
                else:
                    self.download_image(sub.url,perm_file_name)

        if self.downloadcount:
            self.popupmessage('Info','Downloading Complete. {} images were downloaded to {}'.format(self.downloadcount,self.directory))
             #only if images were downloaded (count>0)
        else:
            self.popupmessage('Info','No new images found in {}  {}  posts.'.format(self.submissioncategory,self.selectedsubreddit)) #TODO: popup window with 'Yes' and 'Exit'
            self.startwindow.progressbar.stop()

        if self.enablescroller:
            self.loadscroller()
        else:
            sys.exit(0)




    def startdownloadthread(self):
        self.startwindow.downloadbutton.unbind('<Button-1>')
        self.startwindow.progressbar.start()
        self.downloadthread = threading.Thread(target = self.download_reddit_images,daemon=True)
        self.downloadthread.start()
        self.root.after(100,self.checkdownloadprogress)

    def checkdownloadprogress(self):
        if self.downloadthread.is_alive():
            self.root.after(100,self.checkdownloadprogress)