This repository has been archived by the owner on Nov 30, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
main.py
144 lines (108 loc) · 4.59 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#-*- coding: utf-8 -*-
# main.py for kivy event (mainly)
import os
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition
from kivy.clock import Clock
from kivy.uix.popup import Popup
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.factory import Factory
from kivy.properties import ObjectProperty
from kivy.storage.jsonstore import JsonStore
from kivy.config import Config
#Config.set('graphics', 'width', '640')
#Config.set('graphics', 'height', '480')
from core.decoder import Decoder
from core import logger
from core import downloadtools
from core.downloadtools import DownloadThread
class DownloaderApp(App):
use_kivy_settings = False
def on_pause(self):
return True
def paste(self):
'''
try:
from kivy.core.clipboard import Clipboard
self.main_screen.ids.page_url.text = Clipboard.paste()
except:
logger.error("Could not be pasted to clipboard!")
pass
'''
pass
def copy(self,text):
try:
from kivy.core.clipboard import Clipboard
Clipboard.copy(text)
except:
logger.error("Could not be copied to clipboard: "+text)
pass
def build(self):
self.store = JsonStore("data/store.json")
self.download_thread = None
self.screen_manager = ScreenManager(transition=FadeTransition())
self.main_screen = StartScreen(name='Welcome Screen')
self.download_screen = DownloadScreen(name="Download Screen")
self.screen_manager.add_widget(self.main_screen)
self.screen_manager.add_widget(self.download_screen)
return self.screen_manager
def target_selected(self, path, filename):
self._popup.dismiss()
self.main_screen.ids.target_folder.text = path
self.store.put("target_folder",value=self.main_screen.ids.target_folder.text)
def target_selection(self):
content = LoadDialog(load=self.target_selected, cancel=self.dismiss_popup)
content.ids.filechooser.path = self.main_screen.ids.target_folder.text
self._popup = Popup(title="Choose destination", content=content, size_hint=(0.9, 0.9))
self._popup.open()
def dismiss_popup(self):
self._popup.dismiss()
def url_ready(self,page_url):
if not self.main_screen.ids.page_url.text.startswith("http://") and not self.main_screen.ids.page_url.text.startswith("https://"):
self.message("There is a problem...","URL is not accepted, needs an http/s url")
return
self.store.put("target_folder",value=self.main_screen.ids.target_folder.text)
self.store.put("source_url",value=self.main_screen.ids.page_url.text)
self.media_url = self.main_screen.ids.page_url.text
self.video_title = self.media_url
self.screen_manager.current = self.screen_manager.next()
self.start_download()
def start_download(self):
logger.debug("start_download called")
self.download_screen.result = "downloading "+self.media_url+"\n\n"
self.target_file = os.path.join( self.main_screen.ids.target_folder.text , self.video_title.decode("utf-8") )
self.target_folder = self.main_screen.ids.target_folder.text
self.download_screen.ids.loading.opacity=1
self.download_screen.ids.label_text_message.text="decoding:\n\n"+self.media_url
progressDialog = self.download_screen.ids.progress_bar_download
progressDialoglabel = self.download_screen.ids.label_text_message
self.download_thread = DownloadThread(self.media_url,self.target_folder,self.download_screen,progressDialog,progressDialoglabel)
self.download_thread.start()
def abort_download(self):
logger.debug("abort_download")
try:
self.download_thread.abort()
except:
pass
self.screen_manager.current = self.screen_manager.previous()
def message(self,title,body):
content = MessageDialog()
content.ids.message_body.text = body
self._popup = Popup(title=title, content=content, size_hint=(0.8, 0.8))
self._popup.open()
def on_stop(self):
logger.debug("on_stop event called: goodbye!")
class StartScreen(Screen):
pass
class DownloadScreen(Screen):
pass
class MessageDialog(BoxLayout):
pass
class LoadDialog(FloatLayout):
load = ObjectProperty(None)
cancel = ObjectProperty(None)
Factory.register('LoadDialog', cls=LoadDialog)
if __name__ == '__main__':
DownloaderApp().run()